From fa52cfe5ebd833c255726d2c5cd22974358387e5 Mon Sep 17 00:00:00 2001 From: Tim Usner Date: Thu, 28 Jan 2021 14:48:54 +0100 Subject: [PATCH 1/5] Run make revendor --- .github/pull_request_template.md | 6 +- go.mod | 33 +- go.sum | 190 +- vendor/github.com/fatih/color/.travis.yml | 5 + vendor/github.com/fatih/color/Gopkg.lock | 27 + vendor/github.com/fatih/color/Gopkg.toml | 30 + vendor/github.com/fatih/color/LICENSE.md | 20 + vendor/github.com/fatih/color/README.md | 179 + vendor/github.com/fatih/color/color.go | 603 ++ vendor/github.com/fatih/color/doc.go | 133 + .../gardener/.github/pull_request_template.md | 6 +- .../gardener/extensions/pkg/controller/log.go | 39 +- .../extensions/pkg/controller/reconciler.go | 35 +- .../extensions/pkg/controller/shoot.go | 2 +- .../extensions/pkg/controller/utils.go | 60 +- .../gardener/extensions/pkg/event/event.go | 43 - .../extensions/pkg/predicate/mapper.go | 12 +- .../extensions/pkg/predicate/predicate.go | 32 +- .../gardener/hack/.ci/prepare_release | 2 +- .../gardener/hack/.ci/set_dependency_version | 4 +- .../gardener/gardener/hack/hook-me.sh | 8 +- .../gardener/hack/install-requirements.sh | 2 +- .../gardener/gardener/hack/setup-envtest.sh | 19 +- .../gardener/gardener/hack/test-cover.sh | 10 +- .../github.com/gardener/gardener/hack/test.sh | 8 + .../gardener/gardener/hack/tools.go | 1 + .../gardener/gardener/hack/update-codegen.sh | 18 + .../gardener/pkg/api/extensions/utils.go | 29 +- .../gardener/pkg/apis/core/types_project.go | 2 +- .../gardener/pkg/apis/core/types_seed.go | 51 +- .../gardener/pkg/apis/core/types_shoot.go | 28 +- .../v1alpha1/constants/types_constants.go | 258 + .../pkg/apis/core/v1alpha1/conversions.go | 4 + .../pkg/apis/core/v1alpha1/defaults.go | 28 +- .../pkg/apis/core/v1alpha1/generated.pb.go | 2944 +++++-- .../pkg/apis/core/v1alpha1/generated.proto | 76 +- .../core/v1alpha1/helper/condition_builder.go | 155 + .../pkg/apis/core/v1alpha1/helper/helper.go | 781 ++ .../core/v1alpha1/helper/shootstate_list.go | 142 + .../pkg/apis/core/v1alpha1/types_common.go | 5 - .../pkg/apis/core/v1alpha1/types_seed.go | 44 +- .../pkg/apis/core/v1alpha1/types_shoot.go | 32 +- .../core/v1alpha1/zz_generated.conversion.go | 167 +- .../core/v1alpha1/zz_generated.deepcopy.go | 120 +- .../core/v1alpha1/zz_generated.defaults.go | 2 +- .../core/v1beta1/constants/types_constants.go | 65 +- .../pkg/apis/core/v1beta1/constants/utils.go | 21 - .../pkg/apis/core/v1beta1/defaults.go | 28 +- .../pkg/apis/core/v1beta1/generated.pb.go | 3204 +++++-- .../pkg/apis/core/v1beta1/generated.proto | 85 +- .../core/v1beta1/helper/condition_builder.go | 155 + .../pkg/apis/core/v1beta1/helper/errors.go | 206 + .../pkg/apis/core/v1beta1/helper/helper.go | 1198 +++ .../pkg/apis/core/v1beta1/types_common.go | 5 - .../pkg/apis/core/v1beta1/types_seed.go | 57 +- .../pkg/apis/core/v1beta1/types_shoot.go | 32 +- .../core/v1beta1/zz_generated.conversion.go | 154 +- .../core/v1beta1/zz_generated.deepcopy.go | 134 +- .../core/v1beta1/zz_generated.defaults.go | 2 +- .../pkg/apis/core/zz_generated.deepcopy.go | 134 +- .../extensions/v1alpha1/types_backupbucket.go | 9 +- .../extensions/v1alpha1/types_backupentry.go | 12 +- .../apis/extensions/v1alpha1/types_cluster.go | 9 + .../v1alpha1/types_containerruntime.go | 10 +- .../extensions/v1alpha1/types_controlplane.go | 11 +- .../extensions/v1alpha1/types_defaults.go | 7 +- .../extensions/v1alpha1/types_extension.go | 8 +- .../v1alpha1/types_infrastructure.go | 9 +- .../apis/extensions/v1alpha1/types_network.go | 18 +- .../v1alpha1/types_operatingsystemconfig.go | 9 +- .../apis/extensions/v1alpha1/types_worker.go | 13 +- .../v1alpha1/zz_generated.deepcopy.go | 2 +- .../core/clientset/versioned/clientset.go | 2 +- .../client/core/clientset/versioned/doc.go | 2 +- .../core/clientset/versioned/scheme/doc.go | 2 +- .../clientset/versioned/scheme/register.go | 2 +- .../typed/core/v1alpha1/backupbucket.go | 2 +- .../typed/core/v1alpha1/backupentry.go | 2 +- .../typed/core/v1alpha1/cloudprofile.go | 2 +- .../core/v1alpha1/controllerinstallation.go | 2 +- .../core/v1alpha1/controllerregistration.go | 2 +- .../typed/core/v1alpha1/core_client.go | 2 +- .../versioned/typed/core/v1alpha1/doc.go | 2 +- .../core/v1alpha1/generated_expansion.go | 2 +- .../versioned/typed/core/v1alpha1/plant.go | 2 +- .../versioned/typed/core/v1alpha1/project.go | 2 +- .../versioned/typed/core/v1alpha1/quota.go | 2 +- .../typed/core/v1alpha1/secretbinding.go | 2 +- .../versioned/typed/core/v1alpha1/seed.go | 2 +- .../versioned/typed/core/v1alpha1/shoot.go | 2 +- .../typed/core/v1alpha1/shootstate.go | 2 +- .../typed/core/v1beta1/backupbucket.go | 2 +- .../typed/core/v1beta1/backupentry.go | 2 +- .../typed/core/v1beta1/cloudprofile.go | 2 +- .../core/v1beta1/controllerinstallation.go | 2 +- .../core/v1beta1/controllerregistration.go | 2 +- .../typed/core/v1beta1/core_client.go | 2 +- .../versioned/typed/core/v1beta1/doc.go | 2 +- .../typed/core/v1beta1/generated_expansion.go | 2 +- .../versioned/typed/core/v1beta1/plant.go | 2 +- .../versioned/typed/core/v1beta1/project.go | 2 +- .../versioned/typed/core/v1beta1/quota.go | 2 +- .../typed/core/v1beta1/secretbinding.go | 2 +- .../versioned/typed/core/v1beta1/seed.go | 2 +- .../versioned/typed/core/v1beta1/shoot.go | 2 +- .../core/listers/core/v1beta1/backupbucket.go | 68 + .../core/listers/core/v1beta1/backupentry.go | 99 + .../core/listers/core/v1beta1/cloudprofile.go | 68 + .../core/v1beta1/controllerinstallation.go | 68 + .../core/v1beta1/controllerregistration.go | 68 + .../core/v1beta1/expansion_generated.go | 83 + .../client/core/listers/core/v1beta1/plant.go | 99 + .../core/listers/core/v1beta1/project.go | 68 + .../client/core/listers/core/v1beta1/quota.go | 99 + .../listers/core/v1beta1/secretbinding.go | 99 + .../client/core/listers/core/v1beta1/seed.go | 68 + .../client/core/listers/core/v1beta1/shoot.go | 99 + .../clientset/versioned/scheme/doc.go | 2 +- .../clientset/versioned/scheme/register.go | 2 +- .../gardener/pkg/client/kubernetes/applier.go | 6 +- .../gardener/pkg/client/kubernetes/client.go | 17 +- .../pkg/client/kubernetes/clientset.go | 9 +- .../gardener/pkg/client/kubernetes/options.go | 39 +- .../pkg/client/kubernetes/runtime_client.go | 29 +- .../gardener/pkg/client/kubernetes/scaling.go | 3 +- .../gardener/pkg/client/kubernetes/types.go | 4 +- .../pkg/client/kubernetes/utils/client.go | 186 - .../pkg/controllerutils/associations.go | 163 + .../pkg/controllerutils/finalizers.go | 101 + .../pkg/controllerutils/miscellaneous.go | 122 + .../pkg/controllerutils/operations.go | 33 + .../gardener/pkg/controllerutils/pointers.go | 23 + .../pkg/controllerutils/seedfilter.go | 154 + .../gardener/pkg/controllerutils/worker.go | 133 + .../gardener/pkg/gardenlet/apis/config/doc.go | 18 + .../gardenlet/apis/config/helper/helpers.go | 40 + .../pkg/gardenlet/apis/config/register.go | 51 + .../pkg/gardenlet/apis/config/types.go | 361 + .../apis/config/zz_generated.deepcopy.go | 852 ++ .../gardener/gardener/pkg/logger/logger.go | 16 +- .../pkg/operation/common/extensions.go | 568 ++ .../pkg/operation/common/managedresources.go | 106 + .../pkg/operation/common/network_policies.go | 118 + .../gardener/pkg/operation/common/types.go | 515 ++ .../gardener/pkg/operation/common/utils.go | 774 ++ .../gardener/pkg/utils/chart/chart.go | 13 +- .../gardener/gardener/pkg/utils/flow/flow.go | 387 + .../gardener/gardener/pkg/utils/flow/graph.go | 101 + .../pkg/utils/flow/progress_reporter.go | 32 + .../utils/flow/progress_reporter_delaying.go | 117 + .../utils/flow/progress_reporter_immediate.go | 36 + .../gardener/pkg/utils/flow/taskfn.go | 189 + .../gardener/pkg/utils/flow/taskid.go | 155 + .../pkg/utils/kubernetes/bootstrap_token.go | 18 +- .../pkg/utils/kubernetes/health/and.go | 35 + .../pkg/utils/kubernetes/health/health.go | 457 + .../pkg/utils/kubernetes/health/pod_health.go | 53 + .../pkg/utils/kubernetes/kubernetes.go | 286 +- .../pkg/utils/kubernetes/leaderelection.go | 68 + .../gardener/pkg/utils/kubernetes/node.go | 59 - .../gardener/pkg/utils/kubernetes/object.go | 13 +- .../gardener/pkg/utils/kubernetes/patch.go | 18 +- .../gardener/pkg/utils/kubernetes/shoot.go | 24 - .../gardener/pkg/utils/kubernetes/sorter.go | 79 + .../gardener/pkg/utils/kubernetes/update.go | 14 +- .../managedresources/managedresources.go | 31 +- .../pkg/utils/managedresources/registry.go | 142 + .../gardener/pkg/utils/miscellaneous.go | 6 + .../gardener/pkg/utils/retry/retry.go | 33 +- .../gardener/gardener/pkg/utils/timewindow.go | 23 +- .../gardener/pkg/utils/version/version.go | 2 +- .../gardener/gardener/pkg/version/version.go | 65 + vendor/github.com/go-logr/logr/README.md | 161 +- vendor/github.com/go-logr/logr/discard.go | 35 + vendor/github.com/go-logr/logr/go.mod | 3 + vendor/github.com/go-logr/logr/logr.go | 207 +- vendor/github.com/go-logr/zapr/README.md | 4 +- vendor/github.com/go-logr/zapr/go.mod | 10 + vendor/github.com/go-logr/zapr/zapr.go | 106 +- vendor/github.com/gobuffalo/flect/.gitignore | 29 + .../gobuffalo/flect/.gometalinter.json | 3 + .../gobuffalo/flect}/LICENSE | 12 +- vendor/github.com/gobuffalo/flect/Makefile | 61 + vendor/github.com/gobuffalo/flect/README.md | 36 + .../github.com/gobuffalo/flect/SHOULDERS.md | 10 + vendor/github.com/gobuffalo/flect/acronyms.go | 152 + .../gobuffalo/flect/azure-pipelines.yml | 71 + .../gobuffalo/flect/azure-tests.yml | 19 + vendor/github.com/gobuffalo/flect/camelize.go | 48 + .../github.com/gobuffalo/flect/capitalize.go | 27 + .../github.com/gobuffalo/flect/custom_data.go | 83 + .../github.com/gobuffalo/flect/dasherize.go | 34 + vendor/github.com/gobuffalo/flect/flect.go | 43 + vendor/github.com/gobuffalo/flect/go.mod | 8 + vendor/github.com/gobuffalo/flect/go.sum | 9 + vendor/github.com/gobuffalo/flect/humanize.go | 35 + vendor/github.com/gobuffalo/flect/ident.go | 106 + .../github.com/gobuffalo/flect/lower_upper.go | 13 + .../github.com/gobuffalo/flect/ordinalize.go | 43 + .../github.com/gobuffalo/flect/pascalize.go | 25 + .../gobuffalo/flect/plural_rules.go | 284 + .../github.com/gobuffalo/flect/pluralize.go | 49 + vendor/github.com/gobuffalo/flect/rule.go | 10 + .../gobuffalo/flect/singular_rules.go | 23 + .../github.com/gobuffalo/flect/singularize.go | 47 + vendor/github.com/gobuffalo/flect/titleize.go | 30 + .../github.com/gobuffalo/flect/underscore.go | 34 + vendor/github.com/gobuffalo/flect/version.go | 4 + .../github.com/google/go-cmp/cmp/compare.go | 83 +- .../google/go-cmp/cmp/export_panic.go | 2 +- .../google/go-cmp/cmp/export_unsafe.go | 20 +- .../google/go-cmp/cmp/internal/diff/diff.go | 22 +- .../google/go-cmp/cmp/internal/value/name.go | 157 + .../cmp/internal/value/pointer_purego.go | 10 + .../cmp/internal/value/pointer_unsafe.go | 10 + .../github.com/google/go-cmp/cmp/options.go | 5 +- vendor/github.com/google/go-cmp/cmp/path.go | 7 +- vendor/github.com/google/go-cmp/cmp/report.go | 5 +- .../google/go-cmp/cmp/report_compare.go | 200 +- .../google/go-cmp/cmp/report_references.go | 264 + .../google/go-cmp/cmp/report_reflect.go | 292 +- .../google/go-cmp/cmp/report_slices.go | 135 +- .../google/go-cmp/cmp/report_text.go | 86 +- .../gnostic/OpenAPIv2/OpenAPIv2.pb.go | 5226 ------------ .../googleapis/gnostic/OpenAPIv2/README.md | 16 - .../googleapis/gnostic/compiler/README.md | 3 +- .../googleapis/gnostic/compiler/context.go | 2 +- .../googleapis/gnostic/compiler/error.go | 2 +- .../gnostic/compiler/extension-handler.go | 101 - .../googleapis/gnostic/compiler/extensions.go | 85 + .../googleapis/gnostic/compiler/helpers.go | 336 +- .../googleapis/gnostic/compiler/main.go | 2 +- .../googleapis/gnostic/compiler/reader.go | 133 +- .../googleapis/gnostic/extensions/README.md | 12 +- .../gnostic/extensions/extension.pb.go | 529 +- .../gnostic/extensions/extension.proto | 29 +- .../gnostic/extensions/extensions.go | 68 +- .../googleapis/gnostic/jsonschema/README.md | 4 + .../googleapis/gnostic/jsonschema/base.go | 84 + .../googleapis/gnostic/jsonschema/display.go | 229 + .../googleapis/gnostic/jsonschema/models.go | 228 + .../gnostic/jsonschema/operations.go | 394 + .../googleapis/gnostic/jsonschema/reader.go | 442 + .../googleapis/gnostic/jsonschema/schema.json | 150 + .../googleapis/gnostic/jsonschema/writer.go | 369 + .../{OpenAPIv2 => openapiv2}/OpenAPIv2.go | 3306 ++++---- .../gnostic/openapiv2/OpenAPIv2.pb.go | 7347 +++++++++++++++++ .../{OpenAPIv2 => openapiv2}/OpenAPIv2.proto | 7 +- .../googleapis/gnostic/openapiv2/README.md | 14 + .../googleapis/gnostic/openapiv2/document.go | 26 + .../{OpenAPIv2 => openapiv2}/openapi-2.0.json | 4 +- vendor/github.com/imdario/mergo/README.md | 50 +- vendor/github.com/imdario/mergo/doc.go | 141 +- vendor/github.com/imdario/mergo/go.mod | 5 + vendor/github.com/imdario/mergo/go.sum | 4 + vendor/github.com/imdario/mergo/map.go | 10 +- vendor/github.com/imdario/mergo/merge.go | 274 +- vendor/github.com/imdario/mergo/mergo.go | 21 +- .../github.com/mattn/go-colorable/.travis.yml | 9 + vendor/github.com/mattn/go-colorable/LICENSE | 21 + .../github.com/mattn/go-colorable/README.md | 48 + .../mattn/go-colorable/colorable_appengine.go | 29 + .../mattn/go-colorable/colorable_others.go | 30 + .../mattn/go-colorable/colorable_windows.go | 980 +++ vendor/github.com/mattn/go-colorable/go.mod | 3 + vendor/github.com/mattn/go-colorable/go.sum | 4 + .../mattn/go-colorable/noncolorable.go | 55 + vendor/github.com/mattn/go-isatty/.travis.yml | 14 + vendor/github.com/mattn/go-isatty/LICENSE | 9 + vendor/github.com/mattn/go-isatty/README.md | 50 + vendor/github.com/mattn/go-isatty/doc.go | 2 + vendor/github.com/mattn/go-isatty/go.mod | 5 + vendor/github.com/mattn/go-isatty/go.sum | 2 + vendor/github.com/mattn/go-isatty/go.test.sh | 12 + .../github.com/mattn/go-isatty/isatty_bsd.go | 18 + .../mattn/go-isatty/isatty_others.go | 15 + .../mattn/go-isatty/isatty_plan9.go | 22 + .../mattn/go-isatty/isatty_solaris.go | 22 + .../mattn/go-isatty/isatty_tcgets.go | 18 + .../mattn/go-isatty/isatty_windows.go | 125 + .../github.com/mattn/go-isatty/renovate.json | 8 + vendor/github.com/onsi/ginkgo/CHANGELOG.md | 5 + vendor/github.com/onsi/ginkgo/README.md | 5 +- .../github.com/onsi/ginkgo/config/config.go | 2 +- .../onsi/ginkgo/ginkgo/nodot/nodot.go | 4 +- vendor/github.com/onsi/gomega/CHANGELOG.md | 5 + vendor/github.com/onsi/gomega/gomega_dsl.go | 35 +- .../client_golang/prometheus/counter.go | 50 +- .../client_golang/prometheus/desc.go | 1 + .../client_golang/prometheus/doc.go | 37 +- .../client_golang/prometheus/gauge.go | 2 +- .../client_golang/prometheus/go_collector.go | 2 +- .../client_golang/prometheus/histogram.go | 113 +- .../client_golang/prometheus/metric.go | 1 + .../client_golang/prometheus/observer.go | 12 + .../prometheus/process_collector_windows.go | 24 +- .../prometheus/promhttp/delegator.go | 10 +- .../client_golang/prometheus/promhttp/http.go | 82 +- .../client_golang/prometheus/registry.go | 1 + .../client_golang/prometheus/summary.go | 1 + .../client_golang/prometheus/value.go | 51 +- .../client_golang/prometheus/vec.go | 12 + .../client_golang/prometheus/wrap.go | 14 +- .../prometheus/common/expfmt/encode.go | 124 +- .../prometheus/common/expfmt/expfmt.go | 11 +- .../common/expfmt/openmetrics_create.go | 527 ++ .../prometheus/common/expfmt/text_create.go | 3 +- .../prometheus/common/model/time.go | 4 + .../prometheus/procfs/Makefile.common | 11 + .../github.com/prometheus/procfs/cpuinfo.go | 265 +- .../prometheus/procfs/cpuinfo_arm.go | 18 + .../prometheus/procfs/cpuinfo_arm64.go | 19 + .../prometheus/procfs/cpuinfo_default.go | 19 + .../prometheus/procfs/cpuinfo_mips.go | 18 + .../prometheus/procfs/cpuinfo_mips64.go | 18 + .../prometheus/procfs/cpuinfo_mips64le.go | 18 + .../prometheus/procfs/cpuinfo_mipsle.go | 18 + .../prometheus/procfs/cpuinfo_ppc64.go | 18 + .../prometheus/procfs/cpuinfo_ppc64le.go | 18 + .../prometheus/procfs/cpuinfo_s390x.go | 18 + .../prometheus/procfs/fixtures.ttar | 737 +- .../github.com/prometheus/procfs/fscache.go | 422 + .../prometheus/procfs/internal/util/parse.go | 9 + .../prometheus/procfs/kernel_random.go | 62 + vendor/github.com/prometheus/procfs/mdstat.go | 2 +- .../github.com/prometheus/procfs/mountinfo.go | 8 +- .../prometheus/procfs/mountstats.go | 20 +- .../prometheus/procfs/net_conntrackstat.go | 2 +- vendor/github.com/prometheus/procfs/proc.go | 21 + .../prometheus/procfs/proc_cgroup.go | 98 + .../prometheus/procfs/proc_fdinfo.go | 2 +- .../github.com/prometheus/procfs/proc_maps.go | 3 +- .../prometheus/procfs/proc_smaps.go | 165 + vendor/github.com/spf13/cobra/.gitignore | 2 +- vendor/github.com/spf13/cobra/.travis.yml | 25 +- vendor/github.com/spf13/cobra/Makefile | 36 + vendor/github.com/spf13/cobra/README.md | 2 +- vendor/github.com/spf13/cobra/args.go | 10 +- .../spf13/cobra/bash_completions.go | 89 +- .../spf13/cobra/bash_completions.md | 239 +- vendor/github.com/spf13/cobra/command.go | 31 +- .../spf13/cobra/custom_completions.go | 384 + .../spf13/cobra/fish_completions.go | 172 + .../spf13/cobra/fish_completions.md | 7 + vendor/go.uber.org/atomic/CHANGELOG.md | 5 + vendor/go.uber.org/atomic/tools.go | 28 - vendor/go.uber.org/multierr/CHANGELOG.md | 6 + vendor/go.uber.org/multierr/error.go | 2 +- vendor/go.uber.org/multierr/go.mod | 2 +- vendor/go.uber.org/multierr/go.sum | 4 +- vendor/go.uber.org/multierr/tools.go | 30 - .../tools/update-license/.gitignore | 1 - .../tools/update-license/README.md | 24 - .../tools/update-license/licenses.go | 56 - .../go.uber.org/tools/update-license/main.go | 228 - vendor/go.uber.org/zap/.travis.yml | 2 +- vendor/go.uber.org/zap/CHANGELOG.md | 49 + vendor/go.uber.org/zap/Makefile | 8 +- vendor/go.uber.org/zap/buffer/buffer.go | 10 +- vendor/go.uber.org/zap/config.go | 29 +- vendor/go.uber.org/zap/encoder.go | 4 + vendor/go.uber.org/zap/field.go | 8 + vendor/go.uber.org/zap/go.mod | 5 +- vendor/go.uber.org/zap/go.sum | 8 +- vendor/go.uber.org/zap/logger.go | 6 + vendor/go.uber.org/zap/options.go | 30 +- vendor/go.uber.org/zap/tools.go | 28 - vendor/go.uber.org/zap/zapcore/encoder.go | 36 +- vendor/go.uber.org/zap/zapcore/error.go | 5 - vendor/go.uber.org/zap/zapcore/field.go | 7 +- .../go.uber.org/zap/zapcore/increase_level.go | 66 + .../go.uber.org/zap/zapcore/json_encoder.go | 7 + vendor/go.uber.org/zap/zapcore/sampler.go | 94 +- .../x/crypto/ssh/terminal/terminal.go | 8 + vendor/golang.org/x/net/html/const.go | 2 +- vendor/golang.org/x/net/html/foreign.go | 119 +- vendor/golang.org/x/net/html/parse.go | 15 +- vendor/golang.org/x/net/html/render.go | 2 +- vendor/golang.org/x/net/http2/server.go | 12 +- vendor/golang.org/x/net/http2/transport.go | 102 +- .../idna/{tables12.00.go => tables12.0.0.go} | 2 +- vendor/golang.org/x/net/idna/tables13.0.0.go | 4839 +++++++++++ .../x/sys/unix/asm_openbsd_mips64.s | 29 + vendor/golang.org/x/sys/unix/fcntl_darwin.go | 6 + .../x/sys/unix/fcntl_linux_32bit.go | 4 +- vendor/golang.org/x/sys/unix/gccgo.go | 2 - vendor/golang.org/x/sys/unix/gccgo_c.c | 6 + vendor/golang.org/x/sys/unix/ioctl.go | 9 + vendor/golang.org/x/sys/unix/mkall.sh | 15 +- vendor/golang.org/x/sys/unix/mkerrors.sh | 24 +- .../x/sys/unix/sockcmsg_unix_other.go | 6 +- vendor/golang.org/x/sys/unix/syscall.go | 43 +- vendor/golang.org/x/sys/unix/syscall_aix.go | 16 + vendor/golang.org/x/sys/unix/syscall_bsd.go | 36 +- .../x/sys/unix/syscall_darwin.1_12.go | 4 +- .../golang.org/x/sys/unix/syscall_darwin.go | 141 +- .../x/sys/unix/syscall_darwin_386.1_11.go | 9 - .../x/sys/unix/syscall_darwin_386.go | 11 +- .../x/sys/unix/syscall_darwin_amd64.1_11.go | 9 - .../x/sys/unix/syscall_darwin_amd64.go | 11 +- .../x/sys/unix/syscall_darwin_arm.go | 8 +- .../x/sys/unix/syscall_darwin_arm64.1_11.go | 11 - .../x/sys/unix/syscall_darwin_arm64.go | 13 +- .../x/sys/unix/syscall_dragonfly.go | 19 +- .../golang.org/x/sys/unix/syscall_freebsd.go | 19 +- .../golang.org/x/sys/unix/syscall_illumos.go | 41 +- vendor/golang.org/x/sys/unix/syscall_linux.go | 170 +- .../x/sys/unix/syscall_linux_386.go | 3 - .../x/sys/unix/syscall_linux_arm.go | 5 - .../x/sys/unix/syscall_linux_gc_arm.go | 13 + .../golang.org/x/sys/unix/syscall_netbsd.go | 19 +- .../golang.org/x/sys/unix/syscall_openbsd.go | 19 +- .../x/sys/unix/syscall_openbsd_mips64.go | 35 + .../golang.org/x/sys/unix/syscall_solaris.go | 7 +- .../x/sys/unix/zerrors_darwin_386.go | 4 + .../x/sys/unix/zerrors_darwin_amd64.go | 4 + .../x/sys/unix/zerrors_darwin_arm.go | 4 + .../x/sys/unix/zerrors_darwin_arm64.go | 4 + .../x/sys/unix/zerrors_dragonfly_amd64.go | 138 +- .../x/sys/unix/zerrors_freebsd_386.go | 6 + .../x/sys/unix/zerrors_freebsd_amd64.go | 6 + .../x/sys/unix/zerrors_freebsd_arm.go | 6 + .../x/sys/unix/zerrors_freebsd_arm64.go | 6 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 300 +- .../x/sys/unix/zerrors_linux_386.go | 4 + .../x/sys/unix/zerrors_linux_amd64.go | 4 + .../x/sys/unix/zerrors_linux_arm.go | 4 + .../x/sys/unix/zerrors_linux_arm64.go | 5 + .../x/sys/unix/zerrors_linux_mips.go | 4 + .../x/sys/unix/zerrors_linux_mips64.go | 4 + .../x/sys/unix/zerrors_linux_mips64le.go | 4 + .../x/sys/unix/zerrors_linux_mipsle.go | 4 + .../x/sys/unix/zerrors_linux_ppc64.go | 4 + .../x/sys/unix/zerrors_linux_ppc64le.go | 4 + .../x/sys/unix/zerrors_linux_riscv64.go | 4 + .../x/sys/unix/zerrors_linux_s390x.go | 4 + .../x/sys/unix/zerrors_linux_sparc64.go | 4 + .../x/sys/unix/zerrors_netbsd_386.go | 6 + .../x/sys/unix/zerrors_netbsd_amd64.go | 6 + .../x/sys/unix/zerrors_netbsd_arm.go | 6 + .../x/sys/unix/zerrors_netbsd_arm64.go | 6 + .../x/sys/unix/zerrors_openbsd_386.go | 7 + .../x/sys/unix/zerrors_openbsd_amd64.go | 7 + .../x/sys/unix/zerrors_openbsd_arm.go | 7 + .../x/sys/unix/zerrors_openbsd_arm64.go | 7 + .../x/sys/unix/zerrors_openbsd_mips64.go | 1862 +++++ .../x/sys/unix/zerrors_solaris_amd64.go | 22 +- .../x/sys/unix/zsyscall_darwin_386.1_11.go | 1809 ---- .../x/sys/unix/zsyscall_darwin_386.go | 137 +- .../x/sys/unix/zsyscall_darwin_386.s | 18 +- .../x/sys/unix/zsyscall_darwin_amd64.1_11.go | 1809 ---- .../x/sys/unix/zsyscall_darwin_amd64.go | 137 +- .../x/sys/unix/zsyscall_darwin_amd64.s | 18 +- .../x/sys/unix/zsyscall_darwin_arm.1_11.go | 1782 ---- .../x/sys/unix/zsyscall_darwin_arm.go | 107 +- .../x/sys/unix/zsyscall_darwin_arm.s | 14 +- .../x/sys/unix/zsyscall_darwin_arm64.go | 122 +- .../x/sys/unix/zsyscall_darwin_arm64.s | 16 +- .../x/sys/unix/zsyscall_dragonfly_amd64.go | 32 +- .../x/sys/unix/zsyscall_illumos_amd64.go | 29 +- .../golang.org/x/sys/unix/zsyscall_linux.go | 77 + ...m64.1_11.go => zsyscall_openbsd_mips64.go} | 496 +- .../x/sys/unix/zsysctl_openbsd_mips64.go | 279 + .../x/sys/unix/zsysnum_darwin_386.go | 1 + .../x/sys/unix/zsysnum_darwin_amd64.go | 1 + .../x/sys/unix/zsysnum_darwin_arm.go | 1 + .../x/sys/unix/zsysnum_darwin_arm64.go | 1 + .../x/sys/unix/zsysnum_dragonfly_amd64.go | 255 +- .../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_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 + .../x/sys/unix/zsysnum_openbsd_mips64.go | 220 + .../x/sys/unix/ztypes_darwin_386.go | 32 +- .../x/sys/unix/ztypes_darwin_amd64.go | 43 +- .../x/sys/unix/ztypes_darwin_arm.go | 39 +- .../x/sys/unix/ztypes_darwin_arm64.go | 43 +- .../x/sys/unix/ztypes_dragonfly_amd64.go | 46 +- .../x/sys/unix/ztypes_freebsd_arm.go | 12 +- vendor/golang.org/x/sys/unix/ztypes_linux.go | 1516 +++- .../golang.org/x/sys/unix/ztypes_linux_386.go | 20 + .../x/sys/unix/ztypes_linux_amd64.go | 23 + .../golang.org/x/sys/unix/ztypes_linux_arm.go | 23 + .../x/sys/unix/ztypes_linux_arm64.go | 23 + .../x/sys/unix/ztypes_linux_mips.go | 23 + .../x/sys/unix/ztypes_linux_mips64.go | 23 + .../x/sys/unix/ztypes_linux_mips64le.go | 23 + .../x/sys/unix/ztypes_linux_mipsle.go | 23 + .../x/sys/unix/ztypes_linux_ppc64.go | 23 + .../x/sys/unix/ztypes_linux_ppc64le.go | 23 + .../x/sys/unix/ztypes_linux_riscv64.go | 23 + .../x/sys/unix/ztypes_linux_s390x.go | 23 + .../x/sys/unix/ztypes_linux_sparc64.go | 23 + .../x/sys/unix/ztypes_openbsd_mips64.go | 565 ++ .../x/sys/unix/ztypes_solaris_amd64.go | 31 +- .../x/sys/windows/memory_windows.go | 25 +- vendor/golang.org/x/sys/windows/service.go | 2 + .../x/sys/windows/setupapierrors_windows.go | 100 + vendor/golang.org/x/sys/windows/syscall.go | 46 +- .../x/sys/windows/syscall_windows.go | 35 +- .../golang.org/x/sys/windows/types_windows.go | 12 - .../x/sys/windows/types_windows_386.go | 13 + .../x/sys/windows/types_windows_amd64.go | 12 + .../x/sys/windows/types_windows_arm.go | 13 + .../x/sys/windows/zsyscall_windows.go | 4364 ++++------ vendor/golang.org/x/time/rate/rate.go | 12 +- .../x/tools/go/analysis/analysis.go | 237 - .../x/tools/go/analysis/diagnostic.go | 61 - vendor/golang.org/x/tools/go/analysis/doc.go | 301 - .../go/analysis/passes/inspect/inspect.go | 49 - .../x/tools/go/analysis/validate.go | 97 - .../x/tools/go/ast/inspector/inspector.go | 186 - .../x/tools/go/ast/inspector/typeof.go | 216 - .../x/tools/go/buildutil/allpackages.go | 198 - .../x/tools/go/buildutil/fakecontext.go | 109 - .../x/tools/go/buildutil/overlay.go | 103 - .../golang.org/x/tools/go/buildutil/tags.go | 75 - .../golang.org/x/tools/go/buildutil/util.go | 212 - .../golang.org/x/tools/go/packages/golist.go | 24 +- .../x/tools/go/packages/golist_overlay.go | 47 +- .../x/tools/go/packages/packages.go | 69 +- .../x/tools/go/types/objectpath/objectpath.go | 523 -- .../x/tools/go/types/typeutil/callee.go | 46 - .../x/tools/go/types/typeutil/imports.go | 31 - .../x/tools/go/types/typeutil/map.go | 313 - .../tools/go/types/typeutil/methodsetcache.go | 72 - .../x/tools/go/types/typeutil/ui.go | 52 - .../internal/analysisinternal/analysis.go | 118 - .../x/tools/internal/event/core/event.go | 85 + .../{telemetry/event => event/core}/export.go | 20 +- .../x/tools/internal/event/core/fast.go | 77 + .../internal/event/doc.go} | 10 +- .../x/tools/internal/event/event.go | 127 + .../x/tools/internal/event/keys/keys.go | 564 ++ .../x/tools/internal/event/keys/standard.go | 22 + .../x/tools/internal/event/label/label.go | 213 + .../x/tools/internal/gocommand/invoke.go | 49 +- .../x/tools/internal/gocommand/vendor.go | 102 + .../x/tools/internal/imports/fix.go | 8 +- .../x/tools/internal/imports/mod.go | 107 +- .../internal/packagesinternal/packages.go | 25 +- .../x/tools/internal/telemetry/event/event.go | 113 - .../x/tools/internal/telemetry/event/key.go | 565 -- .../x/tools/internal/telemetry/event/label.go | 29 - .../x/tools/internal/telemetry/event/log.go | 68 - .../tools/internal/telemetry/event/metric.go | 29 - .../x/tools/internal/telemetry/event/tag.go | 197 - .../x/tools/internal/telemetry/event/trace.go | 42 - .../x/tools/internal/typesinternal/types.go | 28 + .../gomodules.xyz/jsonpatch/v2/jsonpatch.go | 24 +- .../appengine/internal/api.go | 7 +- .../protobuf/encoding/prototext/decode.go | 7 + .../protobuf/encoding/prototext/encode.go | 7 + .../protobuf/internal/version/version.go | 2 +- .../protobuf/proto/decode.go | 7 +- .../protobuf/proto/encode.go | 5 +- .../protobuf/proto/messageset.go | 16 +- .../google.golang.org/protobuf/proto/size.go | 33 +- .../protobuf/proto/size_gen.go | 6 +- .../reflect/protoreflect/value_union.go | 2 + .../reflect/protoregistry/registry.go | 32 + vendor/gopkg.in/yaml.v3/.travis.yml | 17 + vendor/gopkg.in/yaml.v3/LICENSE | 50 + vendor/gopkg.in/yaml.v3/NOTICE | 13 + vendor/gopkg.in/yaml.v3/README.md | 150 + vendor/gopkg.in/yaml.v3/apic.go | 747 ++ vendor/gopkg.in/yaml.v3/decode.go | 948 +++ vendor/gopkg.in/yaml.v3/emitterc.go | 2022 +++++ vendor/gopkg.in/yaml.v3/encode.go | 572 ++ vendor/gopkg.in/yaml.v3/go.mod | 5 + vendor/gopkg.in/yaml.v3/parserc.go | 1249 +++ vendor/gopkg.in/yaml.v3/readerc.go | 434 + vendor/gopkg.in/yaml.v3/resolve.go | 326 + vendor/gopkg.in/yaml.v3/scannerc.go | 3028 +++++++ vendor/gopkg.in/yaml.v3/sorter.go | 134 + vendor/gopkg.in/yaml.v3/writerc.go | 48 + vendor/gopkg.in/yaml.v3/yaml.go | 693 ++ vendor/gopkg.in/yaml.v3/yamlh.go | 807 ++ vendor/gopkg.in/yaml.v3/yamlprivateh.go | 198 + vendor/honnef.co/go/tools/LICENSE | 20 - vendor/honnef.co/go/tools/LICENSE-THIRD-PARTY | 226 - vendor/honnef.co/go/tools/arg/arg.go | 48 - .../go/tools/cmd/staticcheck/README.md | 15 - .../go/tools/cmd/staticcheck/staticcheck.go | 44 - vendor/honnef.co/go/tools/config/config.go | 224 - vendor/honnef.co/go/tools/config/example.conf | 10 - .../honnef.co/go/tools/deprecated/stdlib.go | 112 - vendor/honnef.co/go/tools/facts/deprecated.go | 144 - vendor/honnef.co/go/tools/facts/generated.go | 86 - vendor/honnef.co/go/tools/facts/purity.go | 175 - vendor/honnef.co/go/tools/facts/token.go | 24 - vendor/honnef.co/go/tools/functions/loops.go | 54 - vendor/honnef.co/go/tools/functions/pure.go | 46 - .../go/tools/functions/terminates.go | 24 - .../go/tools/go/types/typeutil/callee.go | 46 - .../go/tools/go/types/typeutil/identical.go | 75 - .../go/tools/go/types/typeutil/imports.go | 31 - .../go/tools/go/types/typeutil/map.go | 319 - .../tools/go/types/typeutil/methodsetcache.go | 72 - .../go/tools/go/types/typeutil/ui.go | 52 - .../go/tools/internal/cache/cache.go | 474 -- .../go/tools/internal/cache/default.go | 85 - .../honnef.co/go/tools/internal/cache/hash.go | 176 - .../internal/passes/buildssa/buildssa.go | 116 - .../go/tools/internal/renameio/renameio.go | 83 - .../go/tools/internal/sharedcheck/lint.go | 70 - vendor/honnef.co/go/tools/lint/LICENSE | 28 - vendor/honnef.co/go/tools/lint/lint.go | 491 -- .../go/tools/lint/lintdsl/lintdsl.go | 400 - .../go/tools/lint/lintutil/format/format.go | 135 - .../honnef.co/go/tools/lint/lintutil/stats.go | 7 - .../go/tools/lint/lintutil/stats_bsd.go | 10 - .../go/tools/lint/lintutil/stats_posix.go | 10 - .../honnef.co/go/tools/lint/lintutil/util.go | 392 - vendor/honnef.co/go/tools/lint/runner.go | 970 --- vendor/honnef.co/go/tools/lint/stats.go | 20 - vendor/honnef.co/go/tools/loader/loader.go | 197 - vendor/honnef.co/go/tools/printf/fuzz.go | 11 - vendor/honnef.co/go/tools/printf/printf.go | 197 - .../honnef.co/go/tools/simple/CONTRIBUTING.md | 15 - vendor/honnef.co/go/tools/simple/analysis.go | 223 - vendor/honnef.co/go/tools/simple/doc.go | 425 - vendor/honnef.co/go/tools/simple/lint.go | 1816 ---- vendor/honnef.co/go/tools/ssa/LICENSE | 28 - vendor/honnef.co/go/tools/ssa/blockopt.go | 195 - vendor/honnef.co/go/tools/ssa/builder.go | 2379 ------ vendor/honnef.co/go/tools/ssa/const.go | 169 - vendor/honnef.co/go/tools/ssa/create.go | 270 - vendor/honnef.co/go/tools/ssa/doc.go | 125 - vendor/honnef.co/go/tools/ssa/dom.go | 343 - vendor/honnef.co/go/tools/ssa/emit.go | 469 -- vendor/honnef.co/go/tools/ssa/func.go | 765 -- vendor/honnef.co/go/tools/ssa/identical.go | 7 - vendor/honnef.co/go/tools/ssa/identical_17.go | 7 - vendor/honnef.co/go/tools/ssa/lift.go | 657 -- vendor/honnef.co/go/tools/ssa/lvalue.go | 123 - vendor/honnef.co/go/tools/ssa/methods.go | 239 - vendor/honnef.co/go/tools/ssa/mode.go | 100 - vendor/honnef.co/go/tools/ssa/print.go | 435 - vendor/honnef.co/go/tools/ssa/sanity.go | 535 -- vendor/honnef.co/go/tools/ssa/source.go | 293 - vendor/honnef.co/go/tools/ssa/ssa.go | 1745 ---- .../honnef.co/go/tools/ssa/staticcheck.conf | 3 - vendor/honnef.co/go/tools/ssa/testmain.go | 271 - vendor/honnef.co/go/tools/ssa/util.go | 119 - vendor/honnef.co/go/tools/ssa/wrappers.go | 290 - vendor/honnef.co/go/tools/ssa/write.go | 5 - vendor/honnef.co/go/tools/ssautil/ssautil.go | 58 - .../go/tools/staticcheck/CONTRIBUTING.md | 15 - .../go/tools/staticcheck/analysis.go | 525 -- .../go/tools/staticcheck/buildtag.go | 21 - vendor/honnef.co/go/tools/staticcheck/doc.go | 764 -- .../go/tools/staticcheck/knowledge.go | 25 - vendor/honnef.co/go/tools/staticcheck/lint.go | 3360 -------- .../honnef.co/go/tools/staticcheck/rules.go | 321 - .../go/tools/staticcheck/structtag.go | 58 - .../go/tools/staticcheck/vrp/channel.go | 73 - .../honnef.co/go/tools/staticcheck/vrp/int.go | 476 -- .../go/tools/staticcheck/vrp/slice.go | 273 - .../go/tools/staticcheck/vrp/string.go | 258 - .../honnef.co/go/tools/staticcheck/vrp/vrp.go | 1056 --- .../honnef.co/go/tools/stylecheck/analysis.go | 111 - vendor/honnef.co/go/tools/stylecheck/doc.go | 154 - vendor/honnef.co/go/tools/stylecheck/lint.go | 629 -- vendor/honnef.co/go/tools/stylecheck/names.go | 264 - vendor/honnef.co/go/tools/unused/edge.go | 54 - .../go/tools/unused/edgekind_string.go | 109 - .../honnef.co/go/tools/unused/implements.go | 82 - vendor/honnef.co/go/tools/unused/unused.go | 1964 ----- .../honnef.co/go/tools/version/buildinfo.go | 46 - .../go/tools/version/buildinfo111.go | 6 - vendor/honnef.co/go/tools/version/version.go | 42 - vendor/k8s.io/api/admission/v1/doc.go | 23 + .../k8s.io/api/admission/v1/generated.pb.go | 1792 ++++ .../k8s.io/api/admission/v1/generated.proto | 167 + vendor/k8s.io/api/admission/v1/register.go | 51 + vendor/k8s.io/api/admission/v1/types.go | 169 + .../v1/types_swagger_doc_generated.go | 78 + .../api/admission/v1/zz_generated.deepcopy.go | 141 + vendor/k8s.io/api/admission/v1beta1/doc.go | 1 + .../api/admission/v1beta1/generated.pb.go | 165 +- .../api/admission/v1beta1/generated.proto | 7 + vendor/k8s.io/api/admission/v1beta1/types.go | 12 + .../v1beta1/types_swagger_doc_generated.go | 1 + .../v1beta1/zz_generated.deepcopy.go | 5 + .../zz_generated.prerelease-lifecycle.go | 49 + .../admissionregistration/v1/generated.proto | 4 +- .../api/admissionregistration/v1/types.go | 4 +- .../v1/types_swagger_doc_generated.go | 2 +- .../api/admissionregistration/v1beta1/doc.go | 1 + .../v1beta1/generated.proto | 4 +- .../admissionregistration/v1beta1/types.go | 20 +- .../v1beta1/types_swagger_doc_generated.go | 2 +- .../zz_generated.prerelease-lifecycle.go | 121 + vendor/k8s.io/api/apps/v1beta1/doc.go | 1 + vendor/k8s.io/api/apps/v1beta1/types.go | 32 + .../zz_generated.prerelease-lifecycle.go | 217 + vendor/k8s.io/api/apps/v1beta2/doc.go | 1 + vendor/k8s.io/api/apps/v1beta2/types.go | 44 + .../zz_generated.prerelease-lifecycle.go | 289 + .../v1alpha1/generated.pb.go | 2030 ----- .../v1alpha1/generated.proto | 162 - .../api/auditregistration/v1alpha1/types.go | 198 - .../v1alpha1/types_swagger_doc_generated.go | 111 - .../v1alpha1/zz_generated.deepcopy.go | 229 - .../k8s.io/api/authentication/v1beta1/doc.go | 1 + .../api/authentication/v1beta1/types.go | 3 + .../zz_generated.prerelease-lifecycle.go | 49 + .../k8s.io/api/authorization/v1beta1/doc.go | 1 + .../k8s.io/api/authorization/v1beta1/types.go | 12 + .../zz_generated.prerelease-lifecycle.go | 121 + vendor/k8s.io/api/autoscaling/v2beta1/doc.go | 1 + .../k8s.io/api/autoscaling/v2beta1/types.go | 6 + .../zz_generated.prerelease-lifecycle.go | 73 + vendor/k8s.io/api/autoscaling/v2beta2/doc.go | 1 + .../k8s.io/api/autoscaling/v2beta2/types.go | 4 + .../zz_generated.prerelease-lifecycle.go | 57 + vendor/k8s.io/api/batch/v1beta1/doc.go | 1 + vendor/k8s.io/api/batch/v1beta1/types.go | 8 +- .../zz_generated.prerelease-lifecycle.go | 75 + .../v1alpha1 => certificates/v1}/doc.go | 6 +- .../api/certificates/v1/generated.pb.go | 2042 +++++ .../api/certificates/v1/generated.proto | 226 + vendor/k8s.io/api/certificates/v1/register.go | 61 + vendor/k8s.io/api/certificates/v1/types.go | 284 + .../v1/types_swagger_doc_generated.go | 88 + .../certificates/v1/zz_generated.deepcopy.go | 198 + vendor/k8s.io/api/certificates/v1beta1/doc.go | 1 + .../api/certificates/v1beta1/generated.pb.go | 197 +- .../api/certificates/v1beta1/generated.proto | 46 +- .../k8s.io/api/certificates/v1beta1/types.go | 51 +- .../v1beta1/types_swagger_doc_generated.go | 12 +- .../v1beta1/zz_generated.deepcopy.go | 1 + .../zz_generated.prerelease-lifecycle.go | 73 + vendor/k8s.io/api/coordination/v1beta1/doc.go | 1 + .../k8s.io/api/coordination/v1beta1/types.go | 6 + .../zz_generated.prerelease-lifecycle.go | 73 + .../api/core/v1/annotation_key_constants.go | 27 +- vendor/k8s.io/api/core/v1/generated.pb.go | 3118 ++++--- vendor/k8s.io/api/core/v1/generated.proto | 229 +- vendor/k8s.io/api/core/v1/lifecycle.go | 37 + vendor/k8s.io/api/core/v1/types.go | 247 +- .../core/v1/types_swagger_doc_generated.go | 79 +- .../api/core/v1/zz_generated.deepcopy.go | 80 + .../api/discovery/v1alpha1/generated.proto | 1 - vendor/k8s.io/api/discovery/v1alpha1/types.go | 1 - vendor/k8s.io/api/discovery/v1beta1/doc.go | 1 + .../api/discovery/v1beta1/generated.proto | 1 - vendor/k8s.io/api/discovery/v1beta1/types.go | 5 +- .../discovery/v1beta1/well_known_labels.go | 4 + .../zz_generated.prerelease-lifecycle.go | 57 + vendor/k8s.io/api/events/v1/doc.go | 23 + vendor/k8s.io/api/events/v1/generated.pb.go | 1406 ++++ vendor/k8s.io/api/events/v1/generated.proto | 125 + .../v1alpha1 => events/v1}/register.go | 25 +- vendor/k8s.io/api/events/v1/types.go | 119 + .../events/v1/types_swagger_doc_generated.go | 72 + .../api/events/v1/zz_generated.deepcopy.go | 117 + vendor/k8s.io/api/events/v1beta1/doc.go | 1 + .../k8s.io/api/events/v1beta1/generated.pb.go | 138 +- .../k8s.io/api/events/v1beta1/generated.proto | 47 +- vendor/k8s.io/api/events/v1beta1/types.go | 60 +- .../v1beta1/types_swagger_doc_generated.go | 35 +- .../zz_generated.prerelease-lifecycle.go | 57 + vendor/k8s.io/api/extensions/v1beta1/doc.go | 1 + .../api/extensions/v1beta1/generated.proto | 16 +- vendor/k8s.io/api/extensions/v1beta1/types.go | 70 +- .../v1beta1/types_swagger_doc_generated.go | 16 +- .../zz_generated.prerelease-lifecycle.go | 349 + .../api/flowcontrol/v1alpha1/generated.proto | 18 +- .../k8s.io/api/flowcontrol/v1alpha1/types.go | 18 +- .../v1alpha1/types_swagger_doc_generated.go | 16 +- .../k8s.io/api/networking/v1/generated.pb.go | 4350 ++++++++-- .../k8s.io/api/networking/v1/generated.proto | 270 +- vendor/k8s.io/api/networking/v1/register.go | 4 + vendor/k8s.io/api/networking/v1/types.go | 313 +- .../v1/types_swagger_doc_generated.go | 151 +- .../networking/v1/zz_generated.deepcopy.go | 362 + vendor/k8s.io/api/networking/v1beta1/doc.go | 1 + .../api/networking/v1beta1/generated.proto | 1 - vendor/k8s.io/api/networking/v1beta1/types.go | 15 +- .../zz_generated.prerelease-lifecycle.go | 121 + vendor/k8s.io/api/node/v1beta1/doc.go | 1 + vendor/k8s.io/api/node/v1beta1/types.go | 4 + .../zz_generated.prerelease-lifecycle.go | 57 + vendor/k8s.io/api/policy/v1beta1/doc.go | 1 + .../k8s.io/api/policy/v1beta1/generated.proto | 16 +- vendor/k8s.io/api/policy/v1beta1/types.go | 27 +- .../v1beta1/types_swagger_doc_generated.go | 14 +- .../zz_generated.prerelease-lifecycle.go | 111 + .../k8s.io/api/rbac/v1alpha1/generated.proto | 16 +- vendor/k8s.io/api/rbac/v1alpha1/types.go | 16 +- .../v1alpha1/types_swagger_doc_generated.go | 16 +- vendor/k8s.io/api/rbac/v1beta1/doc.go | 1 + .../k8s.io/api/rbac/v1beta1/generated.proto | 16 +- vendor/k8s.io/api/rbac/v1beta1/types.go | 48 +- .../v1beta1/types_swagger_doc_generated.go | 16 +- .../zz_generated.prerelease-lifecycle.go | 217 + .../k8s.io/api/scheduling/v1/generated.proto | 2 +- vendor/k8s.io/api/scheduling/v1/types.go | 2 +- .../v1/types_swagger_doc_generated.go | 2 +- .../api/scheduling/v1alpha1/generated.proto | 2 +- .../k8s.io/api/scheduling/v1alpha1/types.go | 2 +- .../v1alpha1/types_swagger_doc_generated.go | 2 +- vendor/k8s.io/api/scheduling/v1beta1/doc.go | 1 + .../api/scheduling/v1beta1/generated.proto | 2 +- vendor/k8s.io/api/scheduling/v1beta1/types.go | 10 +- .../v1beta1/types_swagger_doc_generated.go | 2 +- .../zz_generated.prerelease-lifecycle.go | 73 + vendor/k8s.io/api/storage/v1/generated.pb.go | 254 +- vendor/k8s.io/api/storage/v1/generated.proto | 28 + vendor/k8s.io/api/storage/v1/types.go | 59 + .../storage/v1/types_swagger_doc_generated.go | 2 + .../api/storage/v1/zz_generated.deepcopy.go | 10 + .../api/storage/v1alpha1/generated.pb.go | 663 +- .../api/storage/v1alpha1/generated.proto | 75 + .../k8s.io/api/storage/v1alpha1/register.go | 2 + vendor/k8s.io/api/storage/v1alpha1/types.go | 82 + .../v1alpha1/types_swagger_doc_generated.go | 22 + .../storage/v1alpha1/zz_generated.deepcopy.go | 74 +- vendor/k8s.io/api/storage/v1beta1/doc.go | 1 + .../api/storage/v1beta1/generated.pb.go | 254 +- .../api/storage/v1beta1/generated.proto | 28 + vendor/k8s.io/api/storage/v1beta1/types.go | 80 + .../v1beta1/types_swagger_doc_generated.go | 2 + .../storage/v1beta1/zz_generated.deepcopy.go | 10 + .../zz_generated.prerelease-lifecycle.go | 217 + .../pkg/apis/apiextensions/types.go | 9 + .../pkg/apis/apiextensions/v1/generated.pb.go | 448 +- .../pkg/apis/apiextensions/v1/generated.proto | 13 + .../pkg/apis/apiextensions/v1/types.go | 11 + .../v1/zz_generated.conversion.go | 4 + .../apiextensions/v1/zz_generated.deepcopy.go | 5 + .../pkg/apis/apiextensions/v1beta1/doc.go | 1 + .../apiextensions/v1beta1/generated.pb.go | 452 +- .../apiextensions/v1beta1/generated.proto | 15 +- .../pkg/apis/apiextensions/v1beta1/types.go | 26 +- .../v1beta1/zz_generated.conversion.go | 4 + .../v1beta1/zz_generated.deepcopy.go | 5 + .../zz_generated.prerelease-lifecycle.go | 97 + .../apiextensions/zz_generated.deepcopy.go | 5 + .../k8s.io/apimachinery/pkg/api/errors/OWNERS | 2 - .../apimachinery/pkg/api/errors/errors.go | 82 +- .../k8s.io/apimachinery/pkg/api/meta/OWNERS | 2 - .../apimachinery/pkg/api/meta/conditions.go | 101 + .../k8s.io/apimachinery/pkg/api/meta/meta.go | 2 +- .../apimachinery/pkg/api/resource/OWNERS | 3 - .../pkg/apis/meta/internalversion/register.go | 3 + .../apis/meta/internalversion/scheme/doc.go | 17 + .../meta/internalversion/scheme/register.go | 39 + .../pkg/apis/meta/internalversion/types.go | 16 +- .../zz_generated.conversion.go | 2 + .../apimachinery/pkg/apis/meta/v1/OWNERS | 1 - .../pkg/apis/meta/v1/conversion.go | 8 + .../pkg/apis/meta/v1/generated.pb.go | 830 +- .../pkg/apis/meta/v1/generated.proto | 101 +- .../apimachinery/pkg/apis/meta/v1/meta.go | 4 +- .../apimachinery/pkg/apis/meta/v1/types.go | 119 +- .../meta/v1/types_swagger_doc_generated.go | 37 +- .../pkg/apis/meta/v1/unstructured/helpers.go | 2 +- .../apis/meta/v1/zz_generated.conversion.go | 12 + .../pkg/apis/meta/v1/zz_generated.deepcopy.go | 17 + .../pkg/apis/meta/v1beta1/conversion.go | 27 +- .../pkg/apis/meta/v1beta1/register.go | 17 + .../apimachinery/pkg/conversion/converter.go | 10 +- .../apimachinery/pkg/fields/selector.go | 16 +- .../k8s.io/apimachinery/pkg/labels/labels.go | 14 +- .../apimachinery/pkg/labels/selector.go | 41 +- .../k8s.io/apimachinery/pkg/runtime/codec.go | 2 +- .../apimachinery/pkg/runtime/codec_check.go | 10 +- .../apimachinery/pkg/runtime/converter.go | 4 +- .../pkg/runtime/schema/group_version.go | 17 +- .../k8s.io/apimachinery/pkg/runtime/scheme.go | 13 + .../pkg/runtime/serializer/json/json.go | 2 +- .../serializer/versioning/versioning.go | 2 +- .../pkg/util/duration/duration.go | 93 + .../pkg/util/httpstream/httpstream.go | 14 +- .../pkg/util/httpstream/spdy/connection.go | 2 +- .../pkg/util/httpstream/spdy/roundtripper.go | 21 +- .../apimachinery/pkg/util/intstr/intstr.go | 2 +- .../k8s.io/apimachinery/pkg/util/net/http.go | 299 +- .../apimachinery/pkg/util/net/interface.go | 2 +- .../k8s.io/apimachinery/pkg/util/net/util.go | 31 +- .../apimachinery/pkg/util/runtime/runtime.go | 2 +- .../pkg/util/strategicpatch/patch.go | 4 +- .../pkg/util/validation/validation.go | 5 + .../apimachinery/pkg/util/yaml/decoder.go | 6 +- .../apimachinery/pkg/watch/streamwatcher.go | 2 +- vendor/k8s.io/apimachinery/pkg/watch/watch.go | 8 +- .../forked/golang/reflect/deep_equal.go | 4 +- .../client-go/discovery/discovery_client.go | 2 +- .../k8s.io/client-go/kubernetes/clientset.go | 42 +- .../client-go/kubernetes/scheme/register.go | 6 +- .../auditregistration/v1alpha1/auditsink.go | 168 - .../v1/certificates_client.go} | 36 +- .../v1/certificatesigningrequest.go | 200 + .../v1alpha1 => certificates/v1}/doc.go | 2 +- .../certificates/v1/generated_expansion.go | 21 + .../kubernetes/typed/core/v1/pod_expansion.go | 16 + .../kubernetes/typed/events/v1/doc.go | 20 + .../kubernetes/typed/events/v1/event.go | 178 + .../typed/events/v1/events_client.go | 89 + .../v1}/generated_expansion.go | 4 +- .../networking/v1/generated_expansion.go | 4 + .../kubernetes/typed/networking/v1/ingress.go | 195 + .../typed/networking/v1/ingressclass.go | 168 + .../typed/networking/v1/networking_client.go | 10 + .../storage/v1alpha1/csistoragecapacity.go | 178 + .../storage/v1alpha1/generated_expansion.go | 2 + .../typed/storage/v1alpha1/storage_client.go | 5 + vendor/k8s.io/client-go/metadata/interface.go | 49 + vendor/k8s.io/client-go/metadata/metadata.go | 307 + .../plugin/pkg/client/auth/exec/exec.go | 104 +- vendor/k8s.io/client-go/rest/client.go | 4 + vendor/k8s.io/client-go/rest/config.go | 30 +- vendor/k8s.io/client-go/rest/plugin.go | 2 +- vendor/k8s.io/client-go/rest/request.go | 61 +- vendor/k8s.io/client-go/rest/transport.go | 3 +- vendor/k8s.io/client-go/rest/urlbackoff.go | 2 +- vendor/k8s.io/client-go/rest/warnings.go | 144 + .../k8s.io/client-go/restmapper/discovery.go | 2 +- .../k8s.io/client-go/restmapper/shortcut.go | 2 +- vendor/k8s.io/client-go/tools/cache/OWNERS | 2 - .../client-go/tools/cache/controller.go | 18 +- .../client-go/tools/cache/delta_fifo.go | 60 +- .../client-go/tools/cache/expiration_cache.go | 2 +- vendor/k8s.io/client-go/tools/cache/fifo.go | 19 +- .../k8s.io/client-go/tools/cache/listers.go | 2 +- .../client-go/tools/cache/mutation_cache.go | 2 +- .../tools/cache/mutation_detector.go | 2 +- .../k8s.io/client-go/tools/cache/reflector.go | 65 +- .../client-go/tools/cache/shared_informer.go | 73 +- .../client-go/tools/clientcmd/api/helpers.go | 3 + .../client-go/tools/clientcmd/api/types.go | 18 +- .../client-go/tools/clientcmd/api/v1/types.go | 18 +- .../api/v1/zz_generated.conversion.go | 4 + .../tools/clientcmd/client_config.go | 106 +- .../client-go/tools/clientcmd/config.go | 29 +- .../client-go/tools/clientcmd/helpers.go | 15 + .../client-go/tools/clientcmd/loader.go | 2 +- .../tools/clientcmd/merged_client_builder.go | 37 +- .../client-go/tools/clientcmd/validation.go | 29 +- .../client-go/tools/leaderelection/OWNERS | 1 - .../tools/leaderelection/leaderelection.go | 11 +- .../resourcelock/configmaplock.go | 8 +- .../resourcelock/endpointslock.go | 8 +- .../leaderelection/resourcelock/leaselock.go | 11 +- vendor/k8s.io/client-go/tools/metrics/OWNERS | 1 - vendor/k8s.io/client-go/tools/record/OWNERS | 1 - vendor/k8s.io/client-go/tools/record/event.go | 15 +- .../client-go/tools/record/events_cache.go | 5 +- .../tools/remotecommand/remotecommand.go | 2 +- .../client-go/tools/remotecommand/v1.go | 2 +- vendor/k8s.io/client-go/transport/cache.go | 54 +- .../client-go/transport/cert_rotation.go | 2 +- vendor/k8s.io/client-go/transport/config.go | 8 + .../client-go/transport/round_trippers.go | 11 +- .../k8s.io/client-go/transport/spdy/spdy.go | 6 +- .../client-go/transport/token_source.go | 2 +- .../k8s.io/client-go/transport/transport.go | 2 +- vendor/k8s.io/client-go/util/cert/cert.go | 6 +- .../util/workqueue/default_rate_limiters.go | 48 - .../util/workqueue/delaying_queue.go | 13 +- .../client-go/util/workqueue/parallelizer.go | 68 +- .../k8s.io/code-generator/SECURITY_CONTACTS | 9 +- .../client-gen/generators/client_generator.go | 2 +- .../generators/scheme/generator_for_scheme.go | 3 +- .../code-generator/cmd/client-gen/main.go | 2 +- .../conversion-gen/generators/conversion.go | 4 +- .../code-generator/cmd/conversion-gen/main.go | 2 +- .../code-generator/cmd/deepcopy-gen/main.go | 2 +- .../code-generator/cmd/defaulter-gen/main.go | 2 +- .../cmd/go-to-protobuf/protobuf/generator.go | 6 +- .../cmd/go-to-protobuf/protobuf/tags.go | 2 +- .../code-generator/cmd/import-boss/README.md | 97 + .../code-generator/cmd/import-boss/main.go | 44 +- .../cmd/informer-gen/generators/factory.go | 2 +- .../generators/factoryinterface.go | 2 +- .../cmd/informer-gen/generators/generic.go | 8 +- .../cmd/informer-gen/generators/informer.go | 2 +- .../cmd/informer-gen/generators/packages.go | 2 +- .../code-generator/cmd/informer-gen/main.go | 2 +- .../cmd/lister-gen/.import-restrictions | 1 - .../cmd/lister-gen/generators/lister.go | 10 +- .../code-generator/cmd/lister-gen/main.go | 2 +- .../code-generator/cmd/openapi-gen/main.go | 2 +- .../cmd/register-gen/generators/packages.go | 2 +- .../code-generator/cmd/register-gen/main.go | 2 +- .../k8s.io/code-generator/cmd/set-gen/main.go | 2 +- vendor/k8s.io/code-generator/go.mod | 21 +- vendor/k8s.io/code-generator/go.sum | 76 +- vendor/k8s.io/component-base/config/types.go | 8 + .../config/v1alpha1/conversion.go | 61 + .../config/v1alpha1/defaults.go | 112 + .../component-base/config/v1alpha1/doc.go | 20 + .../config/v1alpha1/register.go | 31 + .../component-base/config/v1alpha1/types.go | 90 + .../v1alpha1/zz_generated.conversion.go | 152 + .../config/v1alpha1/zz_generated.deepcopy.go | 103 + .../config/zz_generated.deepcopy.go | 16 + vendor/k8s.io/gengo/parser/parse.go | 8 +- vendor/k8s.io/klog/v2/README.md | 4 +- vendor/k8s.io/klog/v2/go.mod | 2 +- vendor/k8s.io/klog/v2/go.sum | 4 +- vendor/k8s.io/klog/v2/klog.go | 87 +- vendor/k8s.io/klog/v2/klog_file.go | 64 +- .../pkg/apis/apiregistration/types.go | 5 +- .../apis/apiregistration/v1/generated.proto | 5 +- .../pkg/apis/apiregistration/v1/types.go | 5 +- .../pkg/apis/apiregistration/v1beta1/doc.go | 1 + .../apiregistration/v1beta1/generated.proto | 5 +- .../pkg/apis/apiregistration/v1beta1/types.go | 11 +- .../zz_generated.prerelease-lifecycle.go | 73 + .../cmd/openapi-gen/openapi-gen.go | 2 +- .../kube-openapi/pkg/generators/api_linter.go | 2 +- .../kube-openapi/pkg/generators/config.go | 2 +- .../kube-openapi/pkg/generators/extension.go | 10 + .../kube-openapi/pkg/generators/openapi.go | 2 +- .../pkg/generators/rules/idl_tag.go | 19 +- .../kube-openapi/pkg/util/proto/document.go | 2 +- vendor/k8s.io/utils/pointer/pointer.go | 49 +- vendor/k8s.io/utils/trace/trace.go | 22 +- vendor/modules.txt | 176 +- .../controller-runtime/.golangci.yml | 1 - .../sigs.k8s.io/controller-runtime/Makefile | 10 +- .../controller-runtime/TMP-LOGGING.md | 3 + .../controller-runtime/VERSIONING.md | 279 +- .../sigs.k8s.io/controller-runtime/alias.go | 19 +- vendor/sigs.k8s.io/controller-runtime/go.mod | 43 +- vendor/sigs.k8s.io/controller-runtime/go.sum | 338 +- .../pkg/builder/controller.go | 124 +- .../controller-runtime/pkg/builder/options.go | 39 + .../controller-runtime/pkg/cache/cache.go | 8 +- .../pkg/cache/informer_cache.go | 12 +- .../pkg/cache/internal/cache_reader.go | 4 +- .../pkg/cache/internal/deleg_map.go | 51 +- .../pkg/cache/internal/informers_map.go | 55 +- .../pkg/cache/multi_namespace_cache.go | 20 +- .../pkg/client/apiutil/apimachinery.go | 60 +- .../controller-runtime/pkg/client/client.go | 138 +- .../pkg/client/client_cache.go | 27 +- .../pkg/client/config/config.go | 13 +- .../controller-runtime/pkg/client/dryrun.go | 29 +- .../pkg/client/interfaces.go | 35 +- .../pkg/client/metadata_client.go | 193 + .../pkg/client/namespaced_client.go | 253 + .../controller-runtime/pkg/client/object.go | 77 + .../controller-runtime/pkg/client/options.go | 23 - .../controller-runtime/pkg/client/patch.go | 7 - .../controller-runtime/pkg/client/split.go | 91 +- .../pkg/client/typed_client.go | 22 +- .../pkg/client/unstructured_client.go | 22 +- .../controller-runtime/pkg/config/config.go | 114 + .../controller-runtime/pkg/config/doc.go | 25 + .../pkg/config/v1alpha1/doc.go | 20 + .../pkg/config/v1alpha1/register.go | 37 + .../pkg/config/v1alpha1/types.go | 127 + .../config/v1alpha1/zz_generated.deepcopy.go | 119 + .../pkg/controller/controller.go | 21 +- .../controllerutil/controllerutil.go | 156 +- .../controller-runtime/pkg/event/event.go | 30 +- .../controller-runtime/pkg/handler/enqueue.go | 30 +- .../pkg/handler/enqueue_mapped.go | 70 +- .../pkg/handler/enqueue_owner.go | 10 +- .../pkg/internal/controller/controller.go | 81 +- .../internal/controller/metrics/metrics.go | 18 + .../pkg/internal/log/log.go | 3 - .../pkg/internal/recorder/recorder.go | 126 +- .../pkg/leaderelection/doc.go | 2 +- .../pkg/leaderelection/leader_election.go | 21 +- .../controller-runtime/pkg/log/log.go | 56 +- .../controller-runtime/pkg/log/zap/flags.go | 24 +- .../controller-runtime/pkg/log/zap/zap.go | 102 +- .../pkg/manager/client_builder.go | 61 + .../pkg/manager/internal.go | 144 +- .../controller-runtime/pkg/manager/manager.go | 225 +- .../pkg/manager/signals/signal.go | 10 +- .../pkg/predicate/predicate.go | 85 +- .../pkg/reconcile/reconcile.go | 7 +- .../controller-runtime/pkg/scheme/scheme.go | 4 +- .../pkg/source/internal/eventsource.go | 63 +- .../controller-runtime/pkg/source/source.go | 47 +- .../pkg/webhook/admission/http.go | 59 +- .../pkg/webhook/admission/multi.go | 15 +- .../pkg/webhook/admission/response.go | 39 +- .../pkg/webhook/admission/validator.go | 22 +- .../pkg/webhook/admission/webhook.go | 10 +- .../internal/certwatcher/certwatcher.go | 7 +- .../controller-runtime/pkg/webhook/server.go | 72 +- .../v3 => controller-tools}/LICENSE | 0 .../cmd/controller-gen/main.go | 263 + .../controller-tools/pkg/crd/conv.go | 122 + .../controller-tools/pkg/crd/desc_visitor.go | 78 + .../controller-tools/pkg/crd/doc.go | 63 + .../controller-tools/pkg/crd/flatten.go | 441 + .../controller-tools/pkg/crd/gen.go | 351 + .../controller-tools/pkg/crd/known_types.go | 128 + .../controller-tools/pkg/crd/markers/crd.go | 318 + .../controller-tools/pkg/crd/markers/doc.go | 46 + .../pkg/crd/markers/package.go | 40 + .../pkg/crd/markers/register.go | 83 + .../pkg/crd/markers/topology.go | 155 + .../pkg/crd/markers/validation.go | 391 + .../crd/markers/zz_generated.markerhelp.go | 430 + .../controller-tools/pkg/crd/parser.go | 237 + .../controller-tools/pkg/crd/schema.go | 427 + .../pkg/crd/schema_visitor.go | 131 + .../controller-tools/pkg/crd/spec.go | 174 + .../pkg/crd/zz_generated.markerhelp.go | 57 + .../controller-tools/pkg/deepcopy/doc.go | 23 + .../controller-tools/pkg/deepcopy/gen.go | 304 + .../controller-tools/pkg/deepcopy/traverse.go | 829 ++ .../pkg/deepcopy/zz_generated.markerhelp.go | 45 + .../controller-tools/pkg/genall/doc.go | 58 + .../controller-tools/pkg/genall/genall.go | 215 + .../controller-tools/pkg/genall/help/doc.go | 23 + .../pkg/genall/help/pretty/doc.go | 30 + .../pkg/genall/help/pretty/help.go | 171 + .../pkg/genall/help/pretty/print.go | 304 + .../pkg/genall/help/pretty/table.go | 64 + .../controller-tools/pkg/genall/help/sort.go | 106 + .../controller-tools/pkg/genall/help/types.go | 215 + .../controller-tools/pkg/genall/input.go | 37 + .../controller-tools/pkg/genall/options.go | 192 + .../controller-tools/pkg/genall/output.go | 160 + .../pkg/genall/zz_generated.markerhelp.go | 89 + .../controller-tools/pkg/loader/doc.go | 60 + .../controller-tools/pkg/loader/errors.go | 67 + .../controller-tools/pkg/loader/loader.go | 360 + .../controller-tools/pkg/loader/paths.go | 32 + .../controller-tools/pkg/loader/refs.go | 268 + .../controller-tools/pkg/loader/visit.go | 81 + .../controller-tools/pkg/markers/collect.go | 422 + .../controller-tools/pkg/markers/doc.go | 113 + .../controller-tools/pkg/markers/help.go | 81 + .../controller-tools/pkg/markers/parse.go | 923 +++ .../controller-tools/pkg/markers/reg.go | 153 + .../controller-tools/pkg/markers/regutil.go | 36 + .../controller-tools/pkg/markers/zip.go | 191 + .../controller-tools/pkg/rbac/parser.go | 267 + .../pkg/rbac/zz_generated.markerhelp.go | 77 + .../controller-tools/pkg/schemapatcher/gen.go | 513 ++ .../schemapatcher/internal/yaml/convert.go | 61 + .../pkg/schemapatcher/internal/yaml/nested.go | 87 + .../pkg/schemapatcher/internal/yaml/set.go | 80 + .../schemapatcher/zz_generated.markerhelp.go | 45 + .../controller-tools/pkg/version/version.go | 49 + .../controller-tools/pkg/webhook/conv.go | 44 + .../controller-tools/pkg/webhook/parser.go | 426 + .../pkg/webhook/zz_generated.markerhelp.go | 96 + .../structured-merge-diff/v4/LICENSE | 201 + .../{v3 => v4}/value/allocator.go | 0 .../{v3 => v4}/value/doc.go | 0 .../{v3 => v4}/value/fields.go | 0 .../{v3 => v4}/value/jsontagutil.go | 0 .../{v3 => v4}/value/list.go | 0 .../{v3 => v4}/value/listreflect.go | 0 .../{v3 => v4}/value/listunstructured.go | 0 .../{v3 => v4}/value/map.go | 0 .../{v3 => v4}/value/mapreflect.go | 0 .../{v3 => v4}/value/mapunstructured.go | 0 .../{v3 => v4}/value/reflectcache.go | 0 .../{v3 => v4}/value/scalar.go | 0 .../{v3 => v4}/value/structreflect.go | 0 .../{v3 => v4}/value/value.go | 0 .../{v3 => v4}/value/valuereflect.go | 0 .../{v3 => v4}/value/valueunstructured.go | 0 1176 files changed, 104193 insertions(+), 61430 deletions(-) create mode 100644 vendor/github.com/fatih/color/.travis.yml create mode 100644 vendor/github.com/fatih/color/Gopkg.lock create mode 100644 vendor/github.com/fatih/color/Gopkg.toml create mode 100644 vendor/github.com/fatih/color/LICENSE.md create mode 100644 vendor/github.com/fatih/color/README.md create mode 100644 vendor/github.com/fatih/color/color.go create mode 100644 vendor/github.com/fatih/color/doc.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/event/event.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/constants/types_constants.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/condition_builder.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/helper.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/shootstate_list.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition_builder.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/errors.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupbucket.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupentry.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/cloudprofile.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerinstallation.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerregistration.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/expansion_generated.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/plant.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/project.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/quota.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/secretbinding.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/seed.go create mode 100644 vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/shoot.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/client/kubernetes/utils/client.go create mode 100644 vendor/github.com/gardener/gardener/pkg/controllerutils/associations.go create mode 100644 vendor/github.com/gardener/gardener/pkg/controllerutils/finalizers.go create mode 100644 vendor/github.com/gardener/gardener/pkg/controllerutils/miscellaneous.go create mode 100644 vendor/github.com/gardener/gardener/pkg/controllerutils/operations.go create mode 100644 vendor/github.com/gardener/gardener/pkg/controllerutils/pointers.go create mode 100644 vendor/github.com/gardener/gardener/pkg/controllerutils/seedfilter.go create mode 100644 vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go create mode 100644 vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/doc.go create mode 100644 vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/helper/helpers.go create mode 100644 vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go create mode 100644 vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go create mode 100644 vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go create mode 100644 vendor/github.com/gardener/gardener/pkg/operation/common/extensions.go create mode 100644 vendor/github.com/gardener/gardener/pkg/operation/common/managedresources.go create mode 100644 vendor/github.com/gardener/gardener/pkg/operation/common/network_policies.go create mode 100644 vendor/github.com/gardener/gardener/pkg/operation/common/types.go create mode 100644 vendor/github.com/gardener/gardener/pkg/operation/common/utils.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/flow/flow.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/flow/graph.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_delaying.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_immediate.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/flow/taskfn.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/flow/taskid.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/and.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/health.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/pod_health.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/kubernetes/leaderelection.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/utils/kubernetes/node.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/kubernetes/sorter.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/managedresources/registry.go create mode 100644 vendor/github.com/gardener/gardener/pkg/version/version.go create mode 100644 vendor/github.com/go-logr/logr/discard.go create mode 100644 vendor/github.com/go-logr/logr/go.mod create mode 100644 vendor/github.com/go-logr/zapr/go.mod create mode 100644 vendor/github.com/gobuffalo/flect/.gitignore create mode 100644 vendor/github.com/gobuffalo/flect/.gometalinter.json rename vendor/{go.uber.org/tools => github.com/gobuffalo/flect}/LICENSE (87%) create mode 100644 vendor/github.com/gobuffalo/flect/Makefile create mode 100644 vendor/github.com/gobuffalo/flect/README.md create mode 100644 vendor/github.com/gobuffalo/flect/SHOULDERS.md create mode 100644 vendor/github.com/gobuffalo/flect/acronyms.go create mode 100644 vendor/github.com/gobuffalo/flect/azure-pipelines.yml create mode 100644 vendor/github.com/gobuffalo/flect/azure-tests.yml create mode 100644 vendor/github.com/gobuffalo/flect/camelize.go create mode 100644 vendor/github.com/gobuffalo/flect/capitalize.go create mode 100644 vendor/github.com/gobuffalo/flect/custom_data.go create mode 100644 vendor/github.com/gobuffalo/flect/dasherize.go create mode 100644 vendor/github.com/gobuffalo/flect/flect.go create mode 100644 vendor/github.com/gobuffalo/flect/go.mod create mode 100644 vendor/github.com/gobuffalo/flect/go.sum create mode 100644 vendor/github.com/gobuffalo/flect/humanize.go create mode 100644 vendor/github.com/gobuffalo/flect/ident.go create mode 100644 vendor/github.com/gobuffalo/flect/lower_upper.go create mode 100644 vendor/github.com/gobuffalo/flect/ordinalize.go create mode 100644 vendor/github.com/gobuffalo/flect/pascalize.go create mode 100644 vendor/github.com/gobuffalo/flect/plural_rules.go create mode 100644 vendor/github.com/gobuffalo/flect/pluralize.go create mode 100644 vendor/github.com/gobuffalo/flect/rule.go create mode 100644 vendor/github.com/gobuffalo/flect/singular_rules.go create mode 100644 vendor/github.com/gobuffalo/flect/singularize.go create mode 100644 vendor/github.com/gobuffalo/flect/titleize.go create mode 100644 vendor/github.com/gobuffalo/flect/underscore.go create mode 100644 vendor/github.com/gobuffalo/flect/version.go create mode 100644 vendor/github.com/google/go-cmp/cmp/internal/value/name.go create mode 100644 vendor/github.com/google/go-cmp/cmp/report_references.go delete mode 100644 vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.pb.go delete mode 100644 vendor/github.com/googleapis/gnostic/OpenAPIv2/README.md delete mode 100644 vendor/github.com/googleapis/gnostic/compiler/extension-handler.go create mode 100644 vendor/github.com/googleapis/gnostic/compiler/extensions.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/README.md create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/base.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/display.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/models.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/operations.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/reader.go create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/schema.json create mode 100644 vendor/github.com/googleapis/gnostic/jsonschema/writer.go rename vendor/github.com/googleapis/gnostic/{OpenAPIv2 => openapiv2}/OpenAPIv2.go (67%) create mode 100644 vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go rename vendor/github.com/googleapis/gnostic/{OpenAPIv2 => openapiv2}/OpenAPIv2.proto (99%) create mode 100644 vendor/github.com/googleapis/gnostic/openapiv2/README.md create mode 100644 vendor/github.com/googleapis/gnostic/openapiv2/document.go rename vendor/github.com/googleapis/gnostic/{OpenAPIv2 => openapiv2}/openapi-2.0.json (99%) create mode 100644 vendor/github.com/imdario/mergo/go.mod create mode 100644 vendor/github.com/imdario/mergo/go.sum create mode 100644 vendor/github.com/mattn/go-colorable/.travis.yml create mode 100644 vendor/github.com/mattn/go-colorable/LICENSE create mode 100644 vendor/github.com/mattn/go-colorable/README.md create mode 100644 vendor/github.com/mattn/go-colorable/colorable_appengine.go create mode 100644 vendor/github.com/mattn/go-colorable/colorable_others.go create mode 100644 vendor/github.com/mattn/go-colorable/colorable_windows.go create mode 100644 vendor/github.com/mattn/go-colorable/go.mod create mode 100644 vendor/github.com/mattn/go-colorable/go.sum create mode 100644 vendor/github.com/mattn/go-colorable/noncolorable.go create mode 100644 vendor/github.com/mattn/go-isatty/.travis.yml create mode 100644 vendor/github.com/mattn/go-isatty/LICENSE create mode 100644 vendor/github.com/mattn/go-isatty/README.md create mode 100644 vendor/github.com/mattn/go-isatty/doc.go create mode 100644 vendor/github.com/mattn/go-isatty/go.mod create mode 100644 vendor/github.com/mattn/go-isatty/go.sum create mode 100644 vendor/github.com/mattn/go-isatty/go.test.sh create mode 100644 vendor/github.com/mattn/go-isatty/isatty_bsd.go create mode 100644 vendor/github.com/mattn/go-isatty/isatty_others.go create mode 100644 vendor/github.com/mattn/go-isatty/isatty_plan9.go create mode 100644 vendor/github.com/mattn/go-isatty/isatty_solaris.go create mode 100644 vendor/github.com/mattn/go-isatty/isatty_tcgets.go create mode 100644 vendor/github.com/mattn/go-isatty/isatty_windows.go create mode 100644 vendor/github.com/mattn/go-isatty/renovate.json create mode 100644 vendor/github.com/prometheus/common/expfmt/openmetrics_create.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_arm.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_arm64.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_default.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_mips.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_mips64.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_mips64le.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_mipsle.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_ppc64.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_ppc64le.go create mode 100644 vendor/github.com/prometheus/procfs/cpuinfo_s390x.go create mode 100644 vendor/github.com/prometheus/procfs/fscache.go create mode 100644 vendor/github.com/prometheus/procfs/kernel_random.go create mode 100644 vendor/github.com/prometheus/procfs/proc_cgroup.go create mode 100644 vendor/github.com/prometheus/procfs/proc_smaps.go create mode 100644 vendor/github.com/spf13/cobra/Makefile create mode 100644 vendor/github.com/spf13/cobra/custom_completions.go create mode 100644 vendor/github.com/spf13/cobra/fish_completions.go create mode 100644 vendor/github.com/spf13/cobra/fish_completions.md delete mode 100644 vendor/go.uber.org/atomic/tools.go delete mode 100644 vendor/go.uber.org/multierr/tools.go delete mode 100644 vendor/go.uber.org/tools/update-license/.gitignore delete mode 100644 vendor/go.uber.org/tools/update-license/README.md delete mode 100644 vendor/go.uber.org/tools/update-license/licenses.go delete mode 100644 vendor/go.uber.org/tools/update-license/main.go delete mode 100644 vendor/go.uber.org/zap/tools.go create mode 100644 vendor/go.uber.org/zap/zapcore/increase_level.go rename vendor/golang.org/x/net/idna/{tables12.00.go => tables12.0.0.go} (99%) create mode 100644 vendor/golang.org/x/net/idna/tables13.0.0.go create mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_mips64.s delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_386.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.1_11.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_gc_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_mips64.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_11.go delete mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_11.go rename vendor/golang.org/x/sys/unix/{zsyscall_darwin_arm64.1_11.go => zsyscall_openbsd_mips64.go} (86%) create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go create mode 100644 vendor/golang.org/x/sys/windows/setupapierrors_windows.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/analysis.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/diagnostic.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/doc.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/passes/inspect/inspect.go delete mode 100644 vendor/golang.org/x/tools/go/analysis/validate.go delete mode 100644 vendor/golang.org/x/tools/go/ast/inspector/inspector.go delete mode 100644 vendor/golang.org/x/tools/go/ast/inspector/typeof.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/allpackages.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/fakecontext.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/overlay.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/tags.go delete mode 100644 vendor/golang.org/x/tools/go/buildutil/util.go delete mode 100644 vendor/golang.org/x/tools/go/types/objectpath/objectpath.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/callee.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/imports.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/map.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.go delete mode 100644 vendor/golang.org/x/tools/go/types/typeutil/ui.go delete mode 100644 vendor/golang.org/x/tools/internal/analysisinternal/analysis.go create mode 100644 vendor/golang.org/x/tools/internal/event/core/event.go rename vendor/golang.org/x/tools/internal/{telemetry/event => event/core}/export.go (76%) create mode 100644 vendor/golang.org/x/tools/internal/event/core/fast.go rename vendor/golang.org/x/{sys/unix/syscall_darwin_arm.1_11.go => tools/internal/event/doc.go} (53%) create mode 100644 vendor/golang.org/x/tools/internal/event/event.go create mode 100644 vendor/golang.org/x/tools/internal/event/keys/keys.go create mode 100644 vendor/golang.org/x/tools/internal/event/keys/standard.go create mode 100644 vendor/golang.org/x/tools/internal/event/label/label.go create mode 100644 vendor/golang.org/x/tools/internal/gocommand/vendor.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/event.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/key.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/label.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/log.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/metric.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/tag.go delete mode 100644 vendor/golang.org/x/tools/internal/telemetry/event/trace.go create mode 100644 vendor/golang.org/x/tools/internal/typesinternal/types.go create mode 100644 vendor/gopkg.in/yaml.v3/.travis.yml create mode 100644 vendor/gopkg.in/yaml.v3/LICENSE create mode 100644 vendor/gopkg.in/yaml.v3/NOTICE create mode 100644 vendor/gopkg.in/yaml.v3/README.md create mode 100644 vendor/gopkg.in/yaml.v3/apic.go create mode 100644 vendor/gopkg.in/yaml.v3/decode.go create mode 100644 vendor/gopkg.in/yaml.v3/emitterc.go create mode 100644 vendor/gopkg.in/yaml.v3/encode.go create mode 100644 vendor/gopkg.in/yaml.v3/go.mod create mode 100644 vendor/gopkg.in/yaml.v3/parserc.go create mode 100644 vendor/gopkg.in/yaml.v3/readerc.go create mode 100644 vendor/gopkg.in/yaml.v3/resolve.go create mode 100644 vendor/gopkg.in/yaml.v3/scannerc.go create mode 100644 vendor/gopkg.in/yaml.v3/sorter.go create mode 100644 vendor/gopkg.in/yaml.v3/writerc.go create mode 100644 vendor/gopkg.in/yaml.v3/yaml.go create mode 100644 vendor/gopkg.in/yaml.v3/yamlh.go create mode 100644 vendor/gopkg.in/yaml.v3/yamlprivateh.go delete mode 100644 vendor/honnef.co/go/tools/LICENSE delete mode 100644 vendor/honnef.co/go/tools/LICENSE-THIRD-PARTY delete mode 100644 vendor/honnef.co/go/tools/arg/arg.go delete mode 100644 vendor/honnef.co/go/tools/cmd/staticcheck/README.md delete mode 100644 vendor/honnef.co/go/tools/cmd/staticcheck/staticcheck.go delete mode 100644 vendor/honnef.co/go/tools/config/config.go delete mode 100644 vendor/honnef.co/go/tools/config/example.conf delete mode 100644 vendor/honnef.co/go/tools/deprecated/stdlib.go delete mode 100644 vendor/honnef.co/go/tools/facts/deprecated.go delete mode 100644 vendor/honnef.co/go/tools/facts/generated.go delete mode 100644 vendor/honnef.co/go/tools/facts/purity.go delete mode 100644 vendor/honnef.co/go/tools/facts/token.go delete mode 100644 vendor/honnef.co/go/tools/functions/loops.go delete mode 100644 vendor/honnef.co/go/tools/functions/pure.go delete mode 100644 vendor/honnef.co/go/tools/functions/terminates.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/callee.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/identical.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/imports.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/map.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/methodsetcache.go delete mode 100644 vendor/honnef.co/go/tools/go/types/typeutil/ui.go delete mode 100644 vendor/honnef.co/go/tools/internal/cache/cache.go delete mode 100644 vendor/honnef.co/go/tools/internal/cache/default.go delete mode 100644 vendor/honnef.co/go/tools/internal/cache/hash.go delete mode 100644 vendor/honnef.co/go/tools/internal/passes/buildssa/buildssa.go delete mode 100644 vendor/honnef.co/go/tools/internal/renameio/renameio.go delete mode 100644 vendor/honnef.co/go/tools/internal/sharedcheck/lint.go delete mode 100644 vendor/honnef.co/go/tools/lint/LICENSE delete mode 100644 vendor/honnef.co/go/tools/lint/lint.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintdsl/lintdsl.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/format/format.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/stats.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/stats_bsd.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/stats_posix.go delete mode 100644 vendor/honnef.co/go/tools/lint/lintutil/util.go delete mode 100644 vendor/honnef.co/go/tools/lint/runner.go delete mode 100644 vendor/honnef.co/go/tools/lint/stats.go delete mode 100644 vendor/honnef.co/go/tools/loader/loader.go delete mode 100644 vendor/honnef.co/go/tools/printf/fuzz.go delete mode 100644 vendor/honnef.co/go/tools/printf/printf.go delete mode 100644 vendor/honnef.co/go/tools/simple/CONTRIBUTING.md delete mode 100644 vendor/honnef.co/go/tools/simple/analysis.go delete mode 100644 vendor/honnef.co/go/tools/simple/doc.go delete mode 100644 vendor/honnef.co/go/tools/simple/lint.go delete mode 100644 vendor/honnef.co/go/tools/ssa/LICENSE delete mode 100644 vendor/honnef.co/go/tools/ssa/blockopt.go delete mode 100644 vendor/honnef.co/go/tools/ssa/builder.go delete mode 100644 vendor/honnef.co/go/tools/ssa/const.go delete mode 100644 vendor/honnef.co/go/tools/ssa/create.go delete mode 100644 vendor/honnef.co/go/tools/ssa/doc.go delete mode 100644 vendor/honnef.co/go/tools/ssa/dom.go delete mode 100644 vendor/honnef.co/go/tools/ssa/emit.go delete mode 100644 vendor/honnef.co/go/tools/ssa/func.go delete mode 100644 vendor/honnef.co/go/tools/ssa/identical.go delete mode 100644 vendor/honnef.co/go/tools/ssa/identical_17.go delete mode 100644 vendor/honnef.co/go/tools/ssa/lift.go delete mode 100644 vendor/honnef.co/go/tools/ssa/lvalue.go delete mode 100644 vendor/honnef.co/go/tools/ssa/methods.go delete mode 100644 vendor/honnef.co/go/tools/ssa/mode.go delete mode 100644 vendor/honnef.co/go/tools/ssa/print.go delete mode 100644 vendor/honnef.co/go/tools/ssa/sanity.go delete mode 100644 vendor/honnef.co/go/tools/ssa/source.go delete mode 100644 vendor/honnef.co/go/tools/ssa/ssa.go delete mode 100644 vendor/honnef.co/go/tools/ssa/staticcheck.conf delete mode 100644 vendor/honnef.co/go/tools/ssa/testmain.go delete mode 100644 vendor/honnef.co/go/tools/ssa/util.go delete mode 100644 vendor/honnef.co/go/tools/ssa/wrappers.go delete mode 100644 vendor/honnef.co/go/tools/ssa/write.go delete mode 100644 vendor/honnef.co/go/tools/ssautil/ssautil.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/CONTRIBUTING.md delete mode 100644 vendor/honnef.co/go/tools/staticcheck/analysis.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/buildtag.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/doc.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/knowledge.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/lint.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/rules.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/structtag.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/vrp/channel.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/vrp/int.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/vrp/slice.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/vrp/string.go delete mode 100644 vendor/honnef.co/go/tools/staticcheck/vrp/vrp.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/analysis.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/doc.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/lint.go delete mode 100644 vendor/honnef.co/go/tools/stylecheck/names.go delete mode 100644 vendor/honnef.co/go/tools/unused/edge.go delete mode 100644 vendor/honnef.co/go/tools/unused/edgekind_string.go delete mode 100644 vendor/honnef.co/go/tools/unused/implements.go delete mode 100644 vendor/honnef.co/go/tools/unused/unused.go delete mode 100644 vendor/honnef.co/go/tools/version/buildinfo.go delete mode 100644 vendor/honnef.co/go/tools/version/buildinfo111.go delete mode 100644 vendor/honnef.co/go/tools/version/version.go create mode 100644 vendor/k8s.io/api/admission/v1/doc.go create mode 100644 vendor/k8s.io/api/admission/v1/generated.pb.go create mode 100644 vendor/k8s.io/api/admission/v1/generated.proto create mode 100644 vendor/k8s.io/api/admission/v1/register.go create mode 100644 vendor/k8s.io/api/admission/v1/types.go create mode 100644 vendor/k8s.io/api/admission/v1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/admission/v1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/api/admission/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/admissionregistration/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/apps/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/apps/v1beta2/zz_generated.prerelease-lifecycle.go delete mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/generated.pb.go delete mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/generated.proto delete mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/types.go delete mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/types_swagger_doc_generated.go delete mode 100644 vendor/k8s.io/api/auditregistration/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/api/authentication/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/authorization/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/autoscaling/v2beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/autoscaling/v2beta2/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/batch/v1beta1/zz_generated.prerelease-lifecycle.go rename vendor/k8s.io/api/{auditregistration/v1alpha1 => certificates/v1}/doc.go (80%) create mode 100644 vendor/k8s.io/api/certificates/v1/generated.pb.go create mode 100644 vendor/k8s.io/api/certificates/v1/generated.proto create mode 100644 vendor/k8s.io/api/certificates/v1/register.go create mode 100644 vendor/k8s.io/api/certificates/v1/types.go create mode 100644 vendor/k8s.io/api/certificates/v1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/certificates/v1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/api/certificates/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/coordination/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/core/v1/lifecycle.go create mode 100644 vendor/k8s.io/api/discovery/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/events/v1/doc.go create mode 100644 vendor/k8s.io/api/events/v1/generated.pb.go create mode 100644 vendor/k8s.io/api/events/v1/generated.proto rename vendor/k8s.io/api/{auditregistration/v1alpha1 => events/v1}/register.go (73%) create mode 100644 vendor/k8s.io/api/events/v1/types.go create mode 100644 vendor/k8s.io/api/events/v1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/events/v1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/api/events/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/extensions/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/networking/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/node/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/policy/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/rbac/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/scheduling/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/api/storage/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/k8s.io/apimachinery/pkg/api/meta/conditions.go create mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/scheme/doc.go create mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/scheme/register.go create mode 100644 vendor/k8s.io/apimachinery/pkg/util/duration/duration.go delete mode 100644 vendor/k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/auditsink.go rename vendor/k8s.io/client-go/kubernetes/typed/{auditregistration/v1alpha1/auditregistration_client.go => certificates/v1/certificates_client.go} (58%) create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/certificatesigningrequest.go rename vendor/k8s.io/client-go/kubernetes/typed/{auditregistration/v1alpha1 => certificates/v1}/doc.go (97%) create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/certificates/v1/generated_expansion.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/events/v1/doc.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/events/v1/event.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/events/v1/events_client.go rename vendor/k8s.io/client-go/kubernetes/typed/{auditregistration/v1alpha1 => events/v1}/generated_expansion.go (92%) create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/ingress.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/networking/v1/ingressclass.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/storage/v1alpha1/csistoragecapacity.go create mode 100644 vendor/k8s.io/client-go/metadata/interface.go create mode 100644 vendor/k8s.io/client-go/metadata/metadata.go create mode 100644 vendor/k8s.io/client-go/rest/warnings.go create mode 100644 vendor/k8s.io/code-generator/cmd/import-boss/README.md delete mode 100644 vendor/k8s.io/code-generator/cmd/lister-gen/.import-restrictions create mode 100644 vendor/k8s.io/component-base/config/v1alpha1/conversion.go create mode 100644 vendor/k8s.io/component-base/config/v1alpha1/defaults.go create mode 100644 vendor/k8s.io/component-base/config/v1alpha1/doc.go create mode 100644 vendor/k8s.io/component-base/config/v1alpha1/register.go create mode 100644 vendor/k8s.io/component-base/config/v1alpha1/types.go create mode 100644 vendor/k8s.io/component-base/config/v1alpha1/zz_generated.conversion.go create mode 100644 vendor/k8s.io/component-base/config/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/zz_generated.prerelease-lifecycle.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/client/metadata_client.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/client/namespaced_client.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/client/object.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/config.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/doc.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1/doc.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1/register.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1/types.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/config/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/sigs.k8s.io/controller-runtime/pkg/manager/client_builder.go rename vendor/sigs.k8s.io/{structured-merge-diff/v3 => controller-tools}/LICENSE (100%) create mode 100644 vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/conv.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/desc_visitor.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/doc.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/flatten.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/gen.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/known_types.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/crd.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/doc.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/package.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/register.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/topology.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/validation.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/markers/zz_generated.markerhelp.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/parser.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/schema.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/schema_visitor.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/spec.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/crd/zz_generated.markerhelp.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/deepcopy/doc.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/deepcopy/gen.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/deepcopy/traverse.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/deepcopy/zz_generated.markerhelp.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/doc.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/genall.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/help/doc.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/help/pretty/doc.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/help/pretty/help.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/help/pretty/print.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/help/pretty/table.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/help/sort.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/help/types.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/input.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/options.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/output.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/genall/zz_generated.markerhelp.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/loader/doc.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/loader/errors.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/loader/loader.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/loader/paths.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/loader/refs.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/loader/visit.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/markers/collect.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/markers/doc.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/markers/help.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/markers/parse.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/markers/reg.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/markers/regutil.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/markers/zip.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/rbac/parser.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/rbac/zz_generated.markerhelp.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/schemapatcher/gen.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/schemapatcher/internal/yaml/convert.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/schemapatcher/internal/yaml/nested.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/schemapatcher/internal/yaml/set.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/schemapatcher/zz_generated.markerhelp.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/version/version.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/webhook/conv.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/webhook/parser.go create mode 100644 vendor/sigs.k8s.io/controller-tools/pkg/webhook/zz_generated.markerhelp.go create mode 100644 vendor/sigs.k8s.io/structured-merge-diff/v4/LICENSE rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/allocator.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/doc.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/fields.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/jsontagutil.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/list.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/listreflect.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/listunstructured.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/map.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/mapreflect.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/mapunstructured.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/reflectcache.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/scalar.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/structreflect.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/value.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/valuereflect.go (100%) rename vendor/sigs.k8s.io/structured-merge-diff/{v3 => v4}/value/valueunstructured.go (100%) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 1711df66..66a8b1be 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -32,9 +32,9 @@ Write your release note: Format of block header: Possible values: -- category: improvement|noteworthy|action -- target_group: user|operator|developer +- category: breaking|feature|bugfix|doc|other +- target_group: user|operator|developer|dependency --> -```improvement operator +```other operator ``` diff --git a/go.mod b/go.mod index 32d0ca85..945f36ba 100644 --- a/go.mod +++ b/go.mod @@ -3,32 +3,31 @@ module github.com/gardener/gardener-resource-manager go 1.15 require ( - github.com/gardener/gardener v1.12.8 + github.com/gardener/gardener v1.16.0 github.com/gardener/gardener-resource-manager/api v0.0.0-00010101000000-000000000000 github.com/gardener/hvpa-controller v0.3.1 - github.com/go-logr/logr v0.1.0 + github.com/go-logr/logr v0.3.0 github.com/golang/mock v1.4.4-0.20200731163441-8734ec565a4d github.com/hashicorp/go-multierror v1.0.0 - github.com/onsi/ginkgo v1.14.0 - github.com/onsi/gomega v1.10.1 - github.com/spf13/cobra v0.0.6 + github.com/onsi/ginkgo v1.14.1 + github.com/onsi/gomega v1.10.2 + github.com/spf13/cobra v1.0.0 github.com/spf13/pflag v1.0.5 - go.uber.org/zap v1.13.0 - golang.org/x/time v0.0.0-20191024005414-555d28b269f0 - k8s.io/api v0.18.10 - k8s.io/apiextensions-apiserver v0.18.10 - k8s.io/apimachinery v0.18.10 + go.uber.org/zap v1.15.0 + golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e + k8s.io/api v0.19.6 + k8s.io/apiextensions-apiserver v0.19.6 + k8s.io/apimachinery v0.19.6 k8s.io/autoscaler v0.0.0-20190805135949-100e91ba756e k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible - k8s.io/code-generator v0.18.10 - k8s.io/kube-aggregator v0.18.10 - k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29 - k8s.io/utils v0.0.0-20200619165400-6e3d28b6ed19 - sigs.k8s.io/controller-runtime v0.6.3 + k8s.io/code-generator v0.19.6 + k8s.io/kube-aggregator v0.19.6 + k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 + k8s.io/utils v0.0.0-20200912215256-4140de9c8800 + sigs.k8s.io/controller-runtime v0.7.1 ) replace ( github.com/gardener/gardener-resource-manager/api => ./api - k8s.io/client-go => k8s.io/client-go v0.18.10 - sigs.k8s.io/controller-runtime => github.com/gardener/controller-runtime v0.6.3-gardener.1 + k8s.io/client-go => k8s.io/client-go v0.19.6 ) diff --git a/go.sum b/go.sum index 3d135735..9a25017a 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,7 @@ cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxK 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.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gcw= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= @@ -17,6 +18,7 @@ github.com/Azure/azure-sdk-for-go v42.2.0+incompatible/go.mod h1:9XXNKU+eRnpl9mo github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= +github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= github.com/Azure/go-autorest/autorest v0.10.1/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= @@ -88,8 +90,13 @@ github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +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/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/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -142,7 +149,10 @@ github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.6+incompatible h1:tfrHha8zJ01ywiOEC1miGY8st1/igzWB8OmvPgoYX7w= github.com/emicklei/go-restful v2.9.6+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +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-0.20200730005029-803dd64f0468/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.0.0-20200808040245-162e5629780b/go.mod h1:NAJj0yf/KaRKURN6nyi7A9IZydMivZEm9oQLWNjfKDc= github.com/evanphx/json-patch v4.0.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -151,6 +161,7 @@ github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5I github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/frankban/quicktest v1.5.0/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= @@ -161,8 +172,6 @@ github.com/gardener/controller-manager-library v0.1.1-0.20191212112146-917449ad7 github.com/gardener/controller-manager-library v0.1.1-0.20200204110458-c263b9bb97ad h1:fX6pN0Xv+1A+2xYmFvG7Qd7W+3bLfd98sRl1TZoRNes= github.com/gardener/controller-manager-library v0.1.1-0.20200204110458-c263b9bb97ad/go.mod h1:v6cbldxmpL2fYBEB2lSnq3LSEPwIHus9En6iIhwNE1k= github.com/gardener/controller-manager-library v0.2.1-0.20200810091329-d980dbe10959/go.mod h1:XMp1tPcX3SP/dMd+3id418f5Cqu44vydeTkBRbW8EvQ= -github.com/gardener/controller-runtime v0.6.3-gardener.1 h1:z4voH//47rcBouHxyl+DC5T93VNZy0VO4bmTqb8Aln8= -github.com/gardener/controller-runtime v0.6.3-gardener.1/go.mod h1:WlZNXcM0++oyaQt4B7C2lEE5JYRs8vJUzRP4N4JpdAY= github.com/gardener/etcd-druid v0.1.12/go.mod h1:yZrUQY9clD8/ZXK+MmEq8OS1TaKJeipV0u4kHHrwWeY= github.com/gardener/etcd-druid v0.1.15 h1:hoFL0zOdRcFTBHhEc+7isHiajkqHIkBFr12MUEMjxvE= github.com/gardener/etcd-druid v0.1.15/go.mod h1:BHXG8N04Dl4On7Ie6cErwmpvzncNrmeb+HO7Sqrhf+A= @@ -177,10 +186,12 @@ github.com/gardener/gardener v1.1.2/go.mod h1:CP9I0tCDVXTLPkJv/jUtXVUh948kSNKEGU github.com/gardener/gardener v1.3.1/go.mod h1:936P5tQbg6ViiW8BVC9ELM95sFrk4DgobKrxMNtn/LU= github.com/gardener/gardener v1.4.1-0.20200519155656-a8ccc6cc779a h1:Gq7N2Dbn4s9Wdn4Q+HrTozx6b8kfWh7J7rO1z2Lt5/g= github.com/gardener/gardener v1.4.1-0.20200519155656-a8ccc6cc779a/go.mod h1:t9oESM37bAMIuezi9I0H0I8+++8jy8BUPitcf4ERRXY= -github.com/gardener/gardener v1.12.8 h1:LOmCBMxeyWzisRAjnYhDCLxugIhlhtDSbxZoxTphzQo= -github.com/gardener/gardener v1.12.8/go.mod h1:N7MiaoNAPCKPq56p3z7P8yWyq5CTC28iZuiX+tGAjXk= +github.com/gardener/gardener v1.11.3/go.mod h1:5DzqfOm+G8UftKu5zUbYJ+9Cnfd4XrvRNDabkM9AIp4= +github.com/gardener/gardener v1.16.0 h1:wfN3K2ldW4WzQ/VkUd94oZerE/pyOdo0vFi/FCaH+FY= +github.com/gardener/gardener v1.16.0/go.mod h1:NkMsWMePTbyPbJzflHGCLzdep9s0ooETSSq7i8uyrkU= 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= github.com/gardener/hvpa-controller v0.0.0-20191014062307-fad3bdf06a25/go.mod h1:yj7YJ6ijo4adcpXQKutPFZfQuKLdM5UMZZUlpbM3vig= github.com/gardener/hvpa-controller v0.2.5 h1:emP1t6hHdFcnvqv698MdBcXz/1JOLZGiAaRHQDSyZBM= github.com/gardener/hvpa-controller v0.2.5/go.mod h1:rjsb3BPKJFMluudZ8/bhCCDQfFCF/0Um+rzXQI/MmfI= @@ -201,9 +212,14 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= 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 v0.3.0 h1:q4c+kbcR0d5rSurhBR8dIgieOaYpXtsdTYfx22Cu6rs= +github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v0.1.1 h1:qXBXPDdNncunGs7XeEpsJt8wCjYBygluzfdLO0G5baE= github.com/go-logr/zapr v0.1.1/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= +github.com/go-logr/zapr v0.2.0 h1:v6Ji8yBW77pva6NkJKQdHLAJKrIJKRHz0RXwPqCHSR4= +github.com/go-logr/zapr v0.2.0/go.mod h1:qhKdvif7YF5GI9NWEpyxTSSBdGmzkNguibrdCNVPunU= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -260,6 +276,7 @@ github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= github.com/gobuffalo/flect v0.1.5/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/gobuffalo/flect v0.2.0 h1:EWCvMGGxOjsgwlWaP+f4+Hh6yrrte7JeFL2S6b+0hdM= github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= @@ -272,6 +289,7 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I= github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= @@ -293,16 +311,20 @@ github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.4-0.20200731163441-8734ec565a4d h1:izNDUPqGqkeNSYeebPs9caowE15dhr4m59/68323beM= github.com/golang/mock v1.4.4-0.20200731163441-8734ec565a4d/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= 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.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/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -315,6 +337,8 @@ github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= @@ -324,6 +348,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/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/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= @@ -335,8 +360,10 @@ github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTV github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= +github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/gnostic v0.5.1 h1:A8Yhf6EtqTv9RMsU6MQTyrtV1TjWlR6xU9BsZIwuTCM= +github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/gophercloud/gophercloud v0.0.0-20190212181753-892256c46858/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gophercloud/gophercloud v0.1.0/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= @@ -360,6 +387,7 @@ github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brv 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-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= 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= @@ -375,6 +403,7 @@ github.com/huandu/xstrings v1.3.0 h1:gvV6jG9dTgFEncxo+AF7PH6MZXi/vZl25owA/8Dg8Wo github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.1 h1:4jgBlKK6tLKFvO8u5pmYjG91cqytmDCDvGh7ECVFfFs= github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI= @@ -383,6 +412,8 @@ github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.10 h1:6q5mVkdH/vYmqngx7kZQTjJ5HRsx+ImorDIEQ+beJgc= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/infobloxopen/infoblox-go-client v1.1.0/go.mod h1:BXiw7S2b9qJoM8MS40vfgCNB2NLHGusk1DtO16BD9zI= @@ -403,6 +434,7 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/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/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= @@ -421,6 +453,8 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= 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/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= +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/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= @@ -437,15 +471,19 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.4/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.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-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= 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= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= github.com/miekg/dns v1.1.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= @@ -455,6 +493,7 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= 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= @@ -473,6 +512,7 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= 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= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -483,7 +523,11 @@ github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ= 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/ginkgo v1.14.1 h1:jMU0WaQrP0a/YAEq8eJmJKjBoMs+pClEr1vDMlM/Do4= +github.com/onsi/ginkgo v1.14.1/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.3.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= @@ -492,7 +536,10 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= 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/onsi/gomega v1.10.2 h1:aY/nuoWlKJud2J6U0E3NWsjlg+0GtwXxgEqthRdzlcs= +github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/packethost/packngo v0.0.0-20181217122008-b3b45f1b4979/go.mod h1:otzZQXgoO96RTzDB/Hycg0qZcXZsWJGJRSXbmEIJ+4M= +github.com/pborman/uuid v0.0.0-20170612153648-e790cca94e6c/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= @@ -520,6 +567,8 @@ github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.3.0 h1:miYCvYqFXtl/J9FIy8eNpBfYthAEFg+Ys0XyUVEcDsc= github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= @@ -529,6 +578,7 @@ github.com/prometheus/client_model v0.1.0 h1:ElTg5tNp4DqfV7UQjDqv2+RJlNzsDtvNAWc 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-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275 h1:PnBWHBf+6L0jOqq0gIVUe6Yk0/QMZ640k6NvkxcBf+8= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= @@ -538,6 +588,9 @@ github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkp github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.7.0 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY= github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a h1:9a8MnZMP0X2nLJdBg+pBmGgkJlSaKC2KaQmTCk1XDtE= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -550,6 +603,8 @@ github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLk github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.0.11 h1:DhHlBtkHWPYi8O2y31JkK0TF+DGM+51OopZjH/Ia5qI= github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= @@ -586,9 +641,12 @@ github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v0.0.6 h1:breEStsVwemnKh2/s6gMvSdMEkwW0sK8vGStnlVBMCs= github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -596,6 +654,7 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= 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/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= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -625,12 +684,15 @@ github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1: github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200819165624-17cef6e3e9d5/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= 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.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= @@ -638,19 +700,30 @@ go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.5.1 h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM= go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +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 v0.0.0-20180122172545-ddea229ff1df/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.8.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.15.0 h1:ZZCA22JRF2gQE5FoNmhmrf7jeJJ2uhqDUNRYKm8dvmM= +go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= +golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -671,6 +744,8 @@ golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +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-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -679,6 +754,7 @@ golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxT golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191129062945-2f5052295587 h1:5Uz0rkjCFu9BC9gCRN7EkwVvhNyQgGWb8KNJrPwBoHY= 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/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= @@ -702,6 +778,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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= 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= @@ -731,8 +808,12 @@ golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLL 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 h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0= 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-20200520004742-59133d7f0dd7 h1:AeiKBIuRw3UomYXSbLy0Mc2dDLfdtbT/IVn4keq83P0= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 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 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= @@ -746,6 +827,7 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ 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/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180117170059-2c42eef0765b/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-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -778,20 +860,29 @@ golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7w 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-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-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d h1:62ap6LNOjDU6uGmKXHJbSfciMoV+FeI1sRXx/pLDL44= golang.org/x/sys v0.0.0-20200317113312-5766fd39f98d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 h1:DYfZAGf2WMFjMxbgTjaC+2HC7NkNAQs+6Q8b9WEB/F4= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd h1:5CtCZbICpIOFdgO940moixOPjc0178IU44m4EjOO5IY= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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= +golang.org/x/text v0.3.1-0.20171227012246-e19ae1496984/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 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -804,6 +895,8 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZe golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -828,6 +921,7 @@ golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190617190820-da514acc4774/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-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0 h1:Dh6fw+p6FyRl5x/FvNswO1ji0lIGzm3KP8Y9VkS9PTE= 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= @@ -836,23 +930,31 @@ golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtn 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= +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-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191127201027-ecd32218bd7f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191203134012-c197fd4bf371/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-20191230220329-2aa90c603ae3/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-20200408032209-46bd65c8538f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200422205258-72e4a01eba43 h1:Lcsc5ErIWemp8qAbYffG5vPrqjJ0zk82RTFGifeS1Pc= golang.org/x/tools v0.0.0-20200422205258-72e4a01eba43/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200616133436-c1934b75d054/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200616195046-dc31b401abb5 h1:UaoXseXAWUJUcuJ2E2oczJdLxAJXL0lOmVaBl7kuk+I= +golang.org/x/tools v0.0.0-20200616195046-dc31b401abb5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= 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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.0.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= gomodules.xyz/jsonpatch/v2 v2.0.1 h1:xyiBuvkD2g5n7cYzx6u2sxQvsAy4QJsZFCzGVdzOXZ0= gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= +gomodules.xyz/jsonpatch/v2 v2.1.0 h1:Phva6wqu+xR//Njw6iorylFFgn/z547tw5Ne3HZPQ+k= +gomodules.xyz/jsonpatch/v2 v2.1.0/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= @@ -861,6 +963,7 @@ google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E 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.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 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= @@ -868,6 +971,8 @@ google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= 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= @@ -877,20 +982,29 @@ google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98 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-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-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= 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= 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.23.1/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.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= 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 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= 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 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= 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 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= @@ -912,11 +1026,13 @@ gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76 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.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.0.0/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= 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.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 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -924,76 +1040,108 @@ gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/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= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= 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 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +istio.io/api v0.0.0-20201123152548-197f11e4ea09/go.mod h1:88HN3o1fSD1jo+Z1WTLlJfMm9biopur6Ct9BFKjiB64= +istio.io/client-go v1.8.1/go.mod h1:Qymv71lwIqjDTkaE2NqBYLL+Bl5KsCfzEDhntXypHYY= +istio.io/gogo-genproto v0.0.0-20190930162913-45029607206a/go.mod h1:OzpAts7jljZceG4Vqi5/zXy/pOg1b209T3jb7Nv5wIs= k8s.io/api v0.0.0-20190409021203-6e4e0e4f393b/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= k8s.io/api v0.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48= k8s.io/api v0.0.0-20191004102349-159aefb8556b/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= k8s.io/api v0.16.4/go.mod h1:AtzMnsR45tccQss5q8RnF+W8L81DH6XwXwo/joEx9u0= k8s.io/api v0.16.8/go.mod h1:a8EOdYHO8en+YHhPBLiW5q+3RfHTr7wxTqqp7emJ7PM= k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= +k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= k8s.io/api v0.18.6/go.mod h1:eeyxr+cwCjMdLAmr2W3RyDI0VvTawSg/3RFFBEnmZGI= k8s.io/api v0.18.8/go.mod h1:d/CXqwWv+Z2XEG1LgceeDmHQwpUJhROPx16SlxJgERY= k8s.io/api v0.18.10 h1:M0/vqfuBAIIS7jsOOcosT0niiotZGqw6/zHTFpyi8iQ= k8s.io/api v0.18.10/go.mod h1:xWtwPX1v47j5RTncmlMFGCx8b0avh+nP8OgZZ9hjo3M= +k8s.io/api v0.19.2/go.mod h1:IQpK0zFQ1xc5iNIQPqzgoOwuFugaYHK4iCknlAQP9nI= +k8s.io/api v0.19.6 h1:F3lfwgpKcKms6F1mMqkQXFzXmme8QqHTJBtBkev3TOg= +k8s.io/api v0.19.6/go.mod h1:Plxx44Nh4zVblkJrIgxVPgPre1mvng6tXf1Sj3bs0fU= k8s.io/apiextensions-apiserver v0.0.0-20190409022649-727a075fdec8/go.mod h1:IxkesAMoaCRoLrPJdZNZUQp9NfZnzqaVzLhb2VEQzXE= k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783/go.mod h1:xvae1SZB3E17UpV59AWc271W/Ph25N+bjPyR63X6tPY= k8s.io/apiextensions-apiserver v0.16.4/go.mod h1:HYQwjujEkXmQNhap2C9YDdIVOSskGZ3et0Mvjcyjbto= k8s.io/apiextensions-apiserver v0.17.0/go.mod h1:XiIFUakZywkUl54fVXa7QTEHcqQz9HG55nHd1DCoHj8= +k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY= k8s.io/apiextensions-apiserver v0.18.6/go.mod h1:lv89S7fUysXjLZO7ke783xOwVTm6lKizADfvUM/SS/M= k8s.io/apiextensions-apiserver v0.18.8/go.mod h1:7f4ySEkkvifIr4+BRrRWriKKIJjPyg9mb/p63dJKnlM= k8s.io/apiextensions-apiserver v0.18.10 h1:NDp1wS1mnN6ync6onO0oVWMymTYK/ZoyFj3D0YHVzAk= k8s.io/apiextensions-apiserver v0.18.10/go.mod h1:XOE93YaGrb8Pa+ro00Jx3fhzRJ7UB0bU37jRTQXpTOM= +k8s.io/apiextensions-apiserver v0.19.2/go.mod h1:EYNjpqIAvNZe+svXVx9j4uBaVhTB4C94HkY3w058qcg= +k8s.io/apiextensions-apiserver v0.19.6 h1:LL7H65E2VTBfxmsWQZth60zzWVtbSN2gWMEWfsuDvIQ= +k8s.io/apiextensions-apiserver v0.19.6/go.mod h1:9s8ceL67UJAD1ewbsn07tkQ7/EGjiKOedKyiUCVXJgQ= k8s.io/apimachinery v0.0.0-20190404173353-6a84e37a896d/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655/go.mod h1:nL6pwRT8NgfF8TT68DBI8uEePRt89cSvoXUVqbkWHq4= k8s.io/apimachinery v0.0.0-20191004074956-c5d2f014d689/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= k8s.io/apimachinery v0.16.4/go.mod h1:llRdnznGEAqC3DcNm6yEj472xaFVfLM7hnYofMb12tQ= k8s.io/apimachinery v0.16.8/go.mod h1:Xk2vD2TRRpuWYLQNM6lT9R7DSFZUYG03SarNkbGrnKE= k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= +k8s.io/apimachinery v0.18.1/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= +k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= k8s.io/apimachinery v0.18.6/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= k8s.io/apimachinery v0.18.8/go.mod h1:6sQd+iHEqmOtALqOFjSWp2KZ9F0wlU/nWm0ZgsYWMig= k8s.io/apimachinery v0.18.10 h1:Zupk3lPrUfhCF9puTpA8EvEfPsrhNZtrpOqdp66mKVs= k8s.io/apimachinery v0.18.10/go.mod h1:PF5taHbXgTEJLU+xMypMmYTXTWPJ5LaW8bfsisxnEXk= +k8s.io/apimachinery v0.19.2/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= +k8s.io/apimachinery v0.19.6 h1:kBLzSGuDdY1NdSV2uFzI+FwZ9wtkmG+X3ZVcWXSqNgA= +k8s.io/apimachinery v0.19.6/go.mod h1:6sRbGRAVY5DOCuZwB5XkqguBqpqLU6q/kOaOdk29z6Q= k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad/go.mod h1:XPCXEwhjaFN29a8NldXA901ElnKeKLrLtREO9ZhFyhg= k8s.io/apiserver v0.0.0-20191010014313-3893be10d307/go.mod h1:6bqaTSOSJavUIXUtfaR9Os9JtTCm8ZqH2SUl2S60C4w= k8s.io/apiserver v0.16.4/go.mod h1:kbLJOak655g6W7C+muqu1F76u9wnEycfKMqbVaXIdAc= k8s.io/apiserver v0.16.8 h1:FTuZF/ENaJYPsSE5bVlziJQZGi9pR6oMOk4CPdF6ClQ= k8s.io/apiserver v0.16.8/go.mod h1:FzppK0uWsEZnS/FUCOTLQuMRSItRGYstLxTx4nU1Wc4= k8s.io/apiserver v0.17.0/go.mod h1:ABM+9x/prjINN6iiffRVNCBR2Wk7uY4z+EtEGZD48cg= +k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw= k8s.io/apiserver v0.18.6/go.mod h1:Zt2XvTHuaZjBz6EFYzpp+X4hTmgWGy8AthNVnTdm3Wg= k8s.io/apiserver v0.18.8/go.mod h1:12u5FuGql8Cc497ORNj79rhPdiXQC4bf53X/skR/1YM= k8s.io/apiserver v0.18.10/go.mod h1:N4FaJo9BeSgmtvVByXi4fPSQPRqhvvLMGqswwkddob8= +k8s.io/apiserver v0.19.2/go.mod h1:FreAq0bJ2vtZFj9Ago/X0oNGC51GfubKK/ViOKfVAOA= +k8s.io/apiserver v0.19.6/go.mod h1:05XquZxCDzQ27ebk7uV2LrFIK4lm5Yt47XkkUvLAoAM= k8s.io/autoscaler v0.0.0-20190805135949-100e91ba756e h1:5AX59ZgftHpbmNupSWosdtW4q/rCnF4s/0J0dEfJkAQ= k8s.io/autoscaler v0.0.0-20190805135949-100e91ba756e/go.mod h1:QEXezc9uKPT91dwqhSJq3GNI3B1HxFRQHiku9kmrsSA= -k8s.io/client-go v0.18.10 h1:fETWvjTtnE3/s+h0SYr2wvlKWFDF+NrhwAL/ddqVa2Q= -k8s.io/client-go v0.18.10/go.mod h1:XBkFAqPrzqfwmGkV5ac+mlgBpWcz5TkhLw2808q8C3c= +k8s.io/client-go v0.19.6 h1:vtPb33nP8DBMW+/CyuJ8fiie36c3CM1Ts6L4Tsr+PtU= +k8s.io/client-go v0.19.6/go.mod h1:gEiS+efRlXYUEQ9Oz4lmNXlxAl5JZ8y2zbTDGhvXXnk= k8s.io/cluster-bootstrap v0.0.0-20190918163108-da9fdfce26bb/go.mod h1:mQVbtFRxlw/BzBqBaQwIMzjDTST1KrGtzWaR4CGlsTU= k8s.io/cluster-bootstrap v0.16.8 h1:94hV4G7aSIkNCX2G1Jk8URz8zLermBbrrwNre2Y8S9w= k8s.io/cluster-bootstrap v0.16.8/go.mod h1:fT1U/qWmXNmIColCsCBg4G881nWFaEqONL0xmP48rkI= k8s.io/cluster-bootstrap v0.18.8 h1:+gkx/sfGBtokxvRbVA5nVA8bPy1YvpDYRiGRqyEtSXc= k8s.io/cluster-bootstrap v0.18.8/go.mod h1:guq0Uc+QwazHgpS1yAw5Z7yUlBCtGppbgWQkbN3lxIY= +k8s.io/cluster-bootstrap v0.19.6 h1:ZtOoKjWEZP6BEuDd55B3sHTjneutv0z1oh3UfWiKxpc= +k8s.io/cluster-bootstrap v0.19.6/go.mod h1:9Ft1ED2O3k+4+gtkkth/Y0qHCdi9y+IMI8wh4HszXi4= k8s.io/code-generator v0.0.0-20190912054826-cd179ad6a269/go.mod h1:V5BD6M4CyaN5m+VthcclXWsVcT1Hu+glwa1bi3MIsyE= k8s.io/code-generator v0.16.4/go.mod h1:mJUgkl06XV4kstAnLHAIzJPVCOzVR+ZcfPIv4fUsFCY= k8s.io/code-generator v0.16.8/go.mod h1:wFdrXdVi/UC+xIfLi+4l9elsTT/uEF61IfcN2wOLULQ= k8s.io/code-generator v0.17.0/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= +k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= k8s.io/code-generator v0.18.6/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= k8s.io/code-generator v0.18.8/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= k8s.io/code-generator v0.18.10 h1:54UFw4V1/D2y3rfr52zNw4ECSD5Z9snwFXkXxkvmyvE= k8s.io/code-generator v0.18.10/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= +k8s.io/code-generator v0.19.2/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= +k8s.io/code-generator v0.19.6 h1:N7PlZyX25j5Jl9oIBphWN2qp1AKZOwXdDVfj2Z0V0p8= +k8s.io/code-generator v0.19.6/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= k8s.io/component-base v0.0.0-20190918160511-547f6c5d7090/go.mod h1:933PBGtQFJky3TEwYx4aEPZ4IxqhWh3R6DCmzqIn1hA= k8s.io/component-base v0.16.4/go.mod h1:GYQ+4hlkEwdlpAp59Ztc4gYuFhdoZqiAJD1unYDJ3FM= k8s.io/component-base v0.16.8 h1:R75NRLguyWm3L+Du7umX6Ed1i4myhE4P8SEnzDQWxIE= k8s.io/component-base v0.16.8/go.mod h1:Q8UWOWShpP3MZZny4n/15gOncfaaVtc9SbCdkM5MhUE= k8s.io/component-base v0.17.0/go.mod h1:rKuRAokNMY2nn2A6LP/MiwpoaMRHpfRnrPaUJJj1Yoc= +k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM= k8s.io/component-base v0.18.6/go.mod h1:knSVsibPR5K6EW2XOjEHik6sdU5nCvKMrzMt2D4In14= k8s.io/component-base v0.18.8/go.mod h1:00frPRDas29rx58pPCxNkhUfPbwajlyyvu8ruNgSErU= k8s.io/component-base v0.18.10 h1:WDjiLor7EbUKKuK61QjiPqL5RMNJ9oEY6+LRtLC87xM= k8s.io/component-base v0.18.10/go.mod h1:ZzFXjzUBHKOcF0mnWkxBI1wDu5t+CV3GxXKKvHZBLf0= +k8s.io/component-base v0.19.2/go.mod h1:g5LrsiTiabMLZ40AR6Hl45f088DevyGY+cCE2agEIVo= +k8s.io/component-base v0.19.6 h1:V76d3rIEWvP95peWgRycKslQnEwlaPy4UORvh3+YBbU= +k8s.io/component-base v0.19.6/go.mod h1:8Btsf8J00/fVDa/YFmXjei7gVkcFrlKZXjSeP4SZNJg= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190826232639-a874a240740c h1:HH5z+xQGPLMQ2MlS+UVaOaSFgaEqGw1Zb007B9yjZEY= @@ -1002,6 +1150,8 @@ k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmc k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac h1:sAvhNk5RRuc6FNYGqe7Ygz3PSo/2wGWbulskmzRX8Vs= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 h1:t4L10Qfx/p7ASH3gXCdIUtPbbIuegCoUJf3TMSFekjw= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/helm v2.14.2+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= k8s.io/helm v2.16.0+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= k8s.io/helm v2.16.1+incompatible h1:L+k810plJlaGWEw1EszeT4deK8XVaKxac1oGcuB+WDc= @@ -1015,23 +1165,34 @@ k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0 h1:Foj74zO6RbjjP4hBEKjnYtjjAhGg4jNynUdYF6fJrok= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-aggregator v0.0.0-20191004104030-d9d5f0cc7532/go.mod h1:8sbzT4QQKDEmSCIbfqjV0sd97GpUT7A4W626sBiYJmU= k8s.io/kube-aggregator v0.16.8/go.mod h1:l73g+bVdjrgDz9nrISk6AgupGbv1n+4WjTbGaXz/YvI= k8s.io/kube-aggregator v0.18.8/go.mod h1:CyLoGZB+io8eEwnn+6RbV7QWJQhj8a3TBH8ZM8sLbhI= k8s.io/kube-aggregator v0.18.10 h1:dEq7kt0hM0JLZK+NYeUDjmuPRWTBCct+2biXD4aJsE8= k8s.io/kube-aggregator v0.18.10/go.mod h1:4hDj1WpnMJTXhMlDHf14zB0B/hrFCY6dBN0ZHQNqiyQ= +k8s.io/kube-aggregator v0.19.6 h1:huAkb9MZVN56gQ5fXe0eckFF6pbt167tPU6wkIMpiV8= +k8s.io/kube-aggregator v0.19.6/go.mod h1:BeD33Jp5LLaDH4t9oh1B+LkOY9D5+xhAC8I3ZSvI6m0= +k8s.io/kube-openapi v0.0.0-20180731170545-e3762e86a74c/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf h1:EYm5AW/UUDbnmnI+gK0TJDVK9qPLhM+sRHYanNKw0EQ= k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a h1:UcxjrRMyNx/i/y8G7kPvLyy7rfbeuf1PYyBf973pgyU= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= +k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29 h1:NeQXVJ2XFSkRoPzRo8AId01ZER+j8oV4SZADT4iBOXQ= k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29/go.mod h1:F+5wygcW0wmRTnM3cOgIqGivxkwSWIWT5YdsDbeAOaU= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= k8s.io/kubelet v0.16.8/go.mod h1:mzDpnryQg2dlB6V3/WAgb1baIamiICtWpXMFrPOFh6I= k8s.io/kubelet v0.18.8/go.mod h1:6z1jHCk0NPE6WshFStfqcgQ1bnD3tetcPmhC2915aio= +k8s.io/kubelet v0.19.6/go.mod h1:/yashsvRBHMGFnxpmTjtaI0sJ4rLJno9zXzc6PPU8Ls= k8s.io/metrics v0.0.0-20191004105854-2e8cf7d0888c/go.mod h1:a25VAbm3QT3xiVl1jtoF1ueAKQM149UdZ+L93ePfV3M= k8s.io/metrics v0.16.8/go.mod h1:uBIJKJKdga8vL76a1dl+eRlUqOAdCbBpvFHC28SbUIY= k8s.io/metrics v0.18.8/go.mod h1:j7JzZdiyhLP2BsJm/Fzjs+j5Lb1Y7TySjhPWqBPwRXA= +k8s.io/metrics v0.19.6/go.mod h1:jM61saf/bjMRmow6zan2cAk8vFDmqvbNXFRbB4g7TNs= +k8s.io/utils v0.0.0-20190506122338-8fab8cb257d5/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20190801114015-581e00157fb1 h1:+ySTxfHnfzZb9ys375PXNlLhkJPLKgHajBU0N62BDvE= k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= @@ -1042,6 +1203,9 @@ k8s.io/utils v0.0.0-20200327001022-6496210b90e8/go.mod h1:sZAwmy6armz5eXlNoLmJcl k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20200619165400-6e3d28b6ed19 h1:7Nu2dTj82c6IaWvL7hImJzcXoTPz1MsSCH7r+0m6rfo= k8s.io/utils v0.0.0-20200619165400-6e3d28b6ed19/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20200912215256-4140de9c8800 h1:9ZNvfPvVIEsp/T1ez4GQuzCcCTEQWhovSofhqR73A6g= +k8s.io/utils v0.0.0-20200912215256-4140de9c8800/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= @@ -1051,9 +1215,17 @@ 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= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0= +sigs.k8s.io/controller-runtime v0.2.0-beta.5/go.mod h1:HweyYKQ8fBuzdu2bdaeBJvsFgAi/OqBBnrVGXcqKhME= +sigs.k8s.io/controller-runtime v0.4.0/go.mod h1:ApC79lpY3PHW9xj/w9pj+lYkLgwAAUZwfXkME1Lajns= +sigs.k8s.io/controller-runtime v0.6.3/go.mod h1:WlZNXcM0++oyaQt4B7C2lEE5JYRs8vJUzRP4N4JpdAY= +sigs.k8s.io/controller-runtime v0.7.1 h1:nqVwzVzdenfd9xIbB35pC7JJH2IXVL4hDo3MNzkyCh4= +sigs.k8s.io/controller-runtime v0.7.1/go.mod h1:pJ3YBrJiAqMAZKi6UVGuE98ZrroV1p+pIhoHsMm9wdU= sigs.k8s.io/controller-tools v0.2.0-beta.4/go.mod h1:8t/X+FVWvk6TaBcsa+UKUBbn7GMtvyBKX30SGl4em6Y= 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.1 h1:VkuV0MxlRPmRu5iTgBZU4UxUX2LiR99n3sdQGRxZF4w= +sigs.k8s.io/controller-tools v0.4.1/go.mod h1:G9rHdZMVlBDocIxGkK3jHLWqcTMNvveypYJwrvYKjWU= sigs.k8s.io/kind v0.7.0/go.mod h1:An/AbWHT6pA/Lm0Og8j3ukGhfJP3RiVN/IBU6Lo3zl8= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA= @@ -1065,6 +1237,10 @@ sigs.k8s.io/structured-merge-diff/v2 v2.0.1/go.mod h1:Wb7vfKAodbKgf6tn1Kl0VvGj7m sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E= sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1 h1:YXTMot5Qz/X1iBRJhAt+vI+HVttY0WkSqqhKxQ0xVbA= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/testing_frameworks v0.1.1/go.mod h1:VVBKrHmJ6Ekkfz284YKhQePcdycOzNH9qL6ht1zEr/U= +sigs.k8s.io/testing_frameworks v0.1.2/go.mod h1:ToQrwSC3s8Xf/lADdZp3Mktcql9CG0UAmdJG9th5i0w= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= diff --git a/vendor/github.com/fatih/color/.travis.yml b/vendor/github.com/fatih/color/.travis.yml new file mode 100644 index 00000000..95f8a1ff --- /dev/null +++ b/vendor/github.com/fatih/color/.travis.yml @@ -0,0 +1,5 @@ +language: go +go: + - 1.8.x + - tip + diff --git a/vendor/github.com/fatih/color/Gopkg.lock b/vendor/github.com/fatih/color/Gopkg.lock new file mode 100644 index 00000000..7d879e9c --- /dev/null +++ b/vendor/github.com/fatih/color/Gopkg.lock @@ -0,0 +1,27 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/mattn/go-colorable" + packages = ["."] + revision = "167de6bfdfba052fa6b2d3664c8f5272e23c9072" + version = "v0.0.9" + +[[projects]] + name = "github.com/mattn/go-isatty" + packages = ["."] + revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39" + version = "v0.0.3" + +[[projects]] + branch = "master" + name = "golang.org/x/sys" + packages = ["unix"] + revision = "37707fdb30a5b38865cfb95e5aab41707daec7fd" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "e8a50671c3cb93ea935bf210b1cd20702876b9d9226129be581ef646d1565cdc" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/vendor/github.com/fatih/color/Gopkg.toml b/vendor/github.com/fatih/color/Gopkg.toml new file mode 100644 index 00000000..ff1617f7 --- /dev/null +++ b/vendor/github.com/fatih/color/Gopkg.toml @@ -0,0 +1,30 @@ + +# Gopkg.toml example +# +# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" + + +[[constraint]] + name = "github.com/mattn/go-colorable" + version = "0.0.9" + +[[constraint]] + name = "github.com/mattn/go-isatty" + version = "0.0.3" diff --git a/vendor/github.com/fatih/color/LICENSE.md b/vendor/github.com/fatih/color/LICENSE.md new file mode 100644 index 00000000..25fdaf63 --- /dev/null +++ b/vendor/github.com/fatih/color/LICENSE.md @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Fatih Arslan + +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. diff --git a/vendor/github.com/fatih/color/README.md b/vendor/github.com/fatih/color/README.md new file mode 100644 index 00000000..3fc95446 --- /dev/null +++ b/vendor/github.com/fatih/color/README.md @@ -0,0 +1,179 @@ +# Color [![GoDoc](https://godoc.org/github.com/fatih/color?status.svg)](https://godoc.org/github.com/fatih/color) [![Build Status](https://img.shields.io/travis/fatih/color.svg?style=flat-square)](https://travis-ci.org/fatih/color) + + + +Color lets you use colorized outputs in terms of [ANSI Escape +Codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors) in Go (Golang). It +has support for Windows too! The API can be used in several ways, pick one that +suits you. + + +![Color](https://i.imgur.com/c1JI0lA.png) + + +## Install + +```bash +go get github.com/fatih/color +``` + +Note that the `vendor` folder is here for stability. Remove the folder if you +already have the dependencies in your GOPATH. + +## Examples + +### Standard colors + +```go +// Print with default helper functions +color.Cyan("Prints text in cyan.") + +// A newline will be appended automatically +color.Blue("Prints %s in blue.", "text") + +// These are using the default foreground colors +color.Red("We have red") +color.Magenta("And many others ..") + +``` + +### Mix and reuse colors + +```go +// Create a new color object +c := color.New(color.FgCyan).Add(color.Underline) +c.Println("Prints cyan text with an underline.") + +// Or just add them to New() +d := color.New(color.FgCyan, color.Bold) +d.Printf("This prints bold cyan %s\n", "too!.") + +// Mix up foreground and background colors, create new mixes! +red := color.New(color.FgRed) + +boldRed := red.Add(color.Bold) +boldRed.Println("This will print text in bold red.") + +whiteBackground := red.Add(color.BgWhite) +whiteBackground.Println("Red text with white background.") +``` + +### Use your own output (io.Writer) + +```go +// Use your own io.Writer output +color.New(color.FgBlue).Fprintln(myWriter, "blue color!") + +blue := color.New(color.FgBlue) +blue.Fprint(writer, "This will print text in blue.") +``` + +### Custom print functions (PrintFunc) + +```go +// Create a custom print function for convenience +red := color.New(color.FgRed).PrintfFunc() +red("Warning") +red("Error: %s", err) + +// Mix up multiple attributes +notice := color.New(color.Bold, color.FgGreen).PrintlnFunc() +notice("Don't forget this...") +``` + +### Custom fprint functions (FprintFunc) + +```go +blue := color.New(FgBlue).FprintfFunc() +blue(myWriter, "important notice: %s", stars) + +// Mix up with multiple attributes +success := color.New(color.Bold, color.FgGreen).FprintlnFunc() +success(myWriter, "Don't forget this...") +``` + +### Insert into noncolor strings (SprintFunc) + +```go +// Create SprintXxx functions to mix strings with other non-colorized strings: +yellow := color.New(color.FgYellow).SprintFunc() +red := color.New(color.FgRed).SprintFunc() +fmt.Printf("This is a %s and this is %s.\n", yellow("warning"), red("error")) + +info := color.New(color.FgWhite, color.BgGreen).SprintFunc() +fmt.Printf("This %s rocks!\n", info("package")) + +// Use helper functions +fmt.Println("This", color.RedString("warning"), "should be not neglected.") +fmt.Printf("%v %v\n", color.GreenString("Info:"), "an important message.") + +// Windows supported too! Just don't forget to change the output to color.Output +fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS")) +``` + +### Plug into existing code + +```go +// Use handy standard colors +color.Set(color.FgYellow) + +fmt.Println("Existing text will now be in yellow") +fmt.Printf("This one %s\n", "too") + +color.Unset() // Don't forget to unset + +// You can mix up parameters +color.Set(color.FgMagenta, color.Bold) +defer color.Unset() // Use it in your function + +fmt.Println("All text will now be bold magenta.") +``` + +### Disable/Enable color + +There might be a case where you want to explicitly disable/enable color output. the +`go-isatty` package will automatically disable color output for non-tty output streams +(for example if the output were piped directly to `less`) + +`Color` has support to disable/enable colors both globally and for single color +definitions. For example suppose you have a CLI app and a `--no-color` bool flag. You +can easily disable the color output with: + +```go + +var flagNoColor = flag.Bool("no-color", false, "Disable color output") + +if *flagNoColor { + color.NoColor = true // disables colorized output +} +``` + +It also has support for single color definitions (local). You can +disable/enable color output on the fly: + +```go +c := color.New(color.FgCyan) +c.Println("Prints cyan text") + +c.DisableColor() +c.Println("This is printed without any color") + +c.EnableColor() +c.Println("This prints again cyan...") +``` + +## Todo + +* Save/Return previous values +* Evaluate fmt.Formatter interface + + +## Credits + + * [Fatih Arslan](https://github.com/fatih) + * Windows support via @mattn: [colorable](https://github.com/mattn/go-colorable) + +## License + +The MIT License (MIT) - see [`LICENSE.md`](https://github.com/fatih/color/blob/master/LICENSE.md) for more details + diff --git a/vendor/github.com/fatih/color/color.go b/vendor/github.com/fatih/color/color.go new file mode 100644 index 00000000..91c8e9f0 --- /dev/null +++ b/vendor/github.com/fatih/color/color.go @@ -0,0 +1,603 @@ +package color + +import ( + "fmt" + "io" + "os" + "strconv" + "strings" + "sync" + + "github.com/mattn/go-colorable" + "github.com/mattn/go-isatty" +) + +var ( + // NoColor defines if the output is colorized or not. It's dynamically set to + // false or true based on the stdout's file descriptor referring to a terminal + // or not. This is a global option and affects all colors. For more control + // over each color block use the methods DisableColor() individually. + NoColor = os.Getenv("TERM") == "dumb" || + (!isatty.IsTerminal(os.Stdout.Fd()) && !isatty.IsCygwinTerminal(os.Stdout.Fd())) + + // Output defines the standard output of the print functions. By default + // os.Stdout is used. + Output = colorable.NewColorableStdout() + + // Error defines a color supporting writer for os.Stderr. + Error = colorable.NewColorableStderr() + + // colorsCache is used to reduce the count of created Color objects and + // allows to reuse already created objects with required Attribute. + colorsCache = make(map[Attribute]*Color) + colorsCacheMu sync.Mutex // protects colorsCache +) + +// Color defines a custom color object which is defined by SGR parameters. +type Color struct { + params []Attribute + noColor *bool +} + +// Attribute defines a single SGR Code +type Attribute int + +const escape = "\x1b" + +// Base attributes +const ( + Reset Attribute = iota + Bold + Faint + Italic + Underline + BlinkSlow + BlinkRapid + ReverseVideo + Concealed + CrossedOut +) + +// Foreground text colors +const ( + FgBlack Attribute = iota + 30 + FgRed + FgGreen + FgYellow + FgBlue + FgMagenta + FgCyan + FgWhite +) + +// Foreground Hi-Intensity text colors +const ( + FgHiBlack Attribute = iota + 90 + FgHiRed + FgHiGreen + FgHiYellow + FgHiBlue + FgHiMagenta + FgHiCyan + FgHiWhite +) + +// Background text colors +const ( + BgBlack Attribute = iota + 40 + BgRed + BgGreen + BgYellow + BgBlue + BgMagenta + BgCyan + BgWhite +) + +// Background Hi-Intensity text colors +const ( + BgHiBlack Attribute = iota + 100 + BgHiRed + BgHiGreen + BgHiYellow + BgHiBlue + BgHiMagenta + BgHiCyan + BgHiWhite +) + +// New returns a newly created color object. +func New(value ...Attribute) *Color { + c := &Color{params: make([]Attribute, 0)} + c.Add(value...) + return c +} + +// Set sets the given parameters immediately. It will change the color of +// output with the given SGR parameters until color.Unset() is called. +func Set(p ...Attribute) *Color { + c := New(p...) + c.Set() + return c +} + +// Unset resets all escape attributes and clears the output. Usually should +// be called after Set(). +func Unset() { + if NoColor { + return + } + + fmt.Fprintf(Output, "%s[%dm", escape, Reset) +} + +// Set sets the SGR sequence. +func (c *Color) Set() *Color { + if c.isNoColorSet() { + return c + } + + fmt.Fprintf(Output, c.format()) + return c +} + +func (c *Color) unset() { + if c.isNoColorSet() { + return + } + + Unset() +} + +func (c *Color) setWriter(w io.Writer) *Color { + if c.isNoColorSet() { + return c + } + + fmt.Fprintf(w, c.format()) + return c +} + +func (c *Color) unsetWriter(w io.Writer) { + if c.isNoColorSet() { + return + } + + if NoColor { + return + } + + fmt.Fprintf(w, "%s[%dm", escape, Reset) +} + +// Add is used to chain SGR parameters. Use as many as parameters to combine +// and create custom color objects. Example: Add(color.FgRed, color.Underline). +func (c *Color) Add(value ...Attribute) *Color { + c.params = append(c.params, value...) + return c +} + +func (c *Color) prepend(value Attribute) { + c.params = append(c.params, 0) + copy(c.params[1:], c.params[0:]) + c.params[0] = value +} + +// Fprint formats using the default formats for its operands and writes to w. +// Spaces are added between operands when neither is a string. +// It returns the number of bytes written and any write error encountered. +// On Windows, users should wrap w with colorable.NewColorable() if w is of +// type *os.File. +func (c *Color) Fprint(w io.Writer, a ...interface{}) (n int, err error) { + c.setWriter(w) + defer c.unsetWriter(w) + + return fmt.Fprint(w, a...) +} + +// Print formats using the default formats for its operands and writes to +// standard output. Spaces are added between operands when neither is a +// string. It returns the number of bytes written and any write error +// encountered. This is the standard fmt.Print() method wrapped with the given +// color. +func (c *Color) Print(a ...interface{}) (n int, err error) { + c.Set() + defer c.unset() + + return fmt.Fprint(Output, a...) +} + +// Fprintf formats according to a format specifier and writes to w. +// It returns the number of bytes written and any write error encountered. +// On Windows, users should wrap w with colorable.NewColorable() if w is of +// type *os.File. +func (c *Color) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { + c.setWriter(w) + defer c.unsetWriter(w) + + return fmt.Fprintf(w, format, a...) +} + +// Printf formats according to a format specifier and writes to standard output. +// It returns the number of bytes written and any write error encountered. +// This is the standard fmt.Printf() method wrapped with the given color. +func (c *Color) Printf(format string, a ...interface{}) (n int, err error) { + c.Set() + defer c.unset() + + return fmt.Fprintf(Output, format, a...) +} + +// Fprintln formats using the default formats for its operands and writes to w. +// Spaces are always added between operands and a newline is appended. +// On Windows, users should wrap w with colorable.NewColorable() if w is of +// type *os.File. +func (c *Color) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { + c.setWriter(w) + defer c.unsetWriter(w) + + return fmt.Fprintln(w, a...) +} + +// Println formats using the default formats for its operands and writes to +// standard output. Spaces are always added between operands and a newline is +// appended. It returns the number of bytes written and any write error +// encountered. This is the standard fmt.Print() method wrapped with the given +// color. +func (c *Color) Println(a ...interface{}) (n int, err error) { + c.Set() + defer c.unset() + + return fmt.Fprintln(Output, a...) +} + +// Sprint is just like Print, but returns a string instead of printing it. +func (c *Color) Sprint(a ...interface{}) string { + return c.wrap(fmt.Sprint(a...)) +} + +// Sprintln is just like Println, but returns a string instead of printing it. +func (c *Color) Sprintln(a ...interface{}) string { + return c.wrap(fmt.Sprintln(a...)) +} + +// Sprintf is just like Printf, but returns a string instead of printing it. +func (c *Color) Sprintf(format string, a ...interface{}) string { + return c.wrap(fmt.Sprintf(format, a...)) +} + +// FprintFunc returns a new function that prints the passed arguments as +// colorized with color.Fprint(). +func (c *Color) FprintFunc() func(w io.Writer, a ...interface{}) { + return func(w io.Writer, a ...interface{}) { + c.Fprint(w, a...) + } +} + +// PrintFunc returns a new function that prints the passed arguments as +// colorized with color.Print(). +func (c *Color) PrintFunc() func(a ...interface{}) { + return func(a ...interface{}) { + c.Print(a...) + } +} + +// FprintfFunc returns a new function that prints the passed arguments as +// colorized with color.Fprintf(). +func (c *Color) FprintfFunc() func(w io.Writer, format string, a ...interface{}) { + return func(w io.Writer, format string, a ...interface{}) { + c.Fprintf(w, format, a...) + } +} + +// PrintfFunc returns a new function that prints the passed arguments as +// colorized with color.Printf(). +func (c *Color) PrintfFunc() func(format string, a ...interface{}) { + return func(format string, a ...interface{}) { + c.Printf(format, a...) + } +} + +// FprintlnFunc returns a new function that prints the passed arguments as +// colorized with color.Fprintln(). +func (c *Color) FprintlnFunc() func(w io.Writer, a ...interface{}) { + return func(w io.Writer, a ...interface{}) { + c.Fprintln(w, a...) + } +} + +// PrintlnFunc returns a new function that prints the passed arguments as +// colorized with color.Println(). +func (c *Color) PrintlnFunc() func(a ...interface{}) { + return func(a ...interface{}) { + c.Println(a...) + } +} + +// SprintFunc returns a new function that returns colorized strings for the +// given arguments with fmt.Sprint(). Useful to put into or mix into other +// string. Windows users should use this in conjunction with color.Output, example: +// +// put := New(FgYellow).SprintFunc() +// fmt.Fprintf(color.Output, "This is a %s", put("warning")) +func (c *Color) SprintFunc() func(a ...interface{}) string { + return func(a ...interface{}) string { + return c.wrap(fmt.Sprint(a...)) + } +} + +// SprintfFunc returns a new function that returns colorized strings for the +// given arguments with fmt.Sprintf(). Useful to put into or mix into other +// string. Windows users should use this in conjunction with color.Output. +func (c *Color) SprintfFunc() func(format string, a ...interface{}) string { + return func(format string, a ...interface{}) string { + return c.wrap(fmt.Sprintf(format, a...)) + } +} + +// SprintlnFunc returns a new function that returns colorized strings for the +// given arguments with fmt.Sprintln(). Useful to put into or mix into other +// string. Windows users should use this in conjunction with color.Output. +func (c *Color) SprintlnFunc() func(a ...interface{}) string { + return func(a ...interface{}) string { + return c.wrap(fmt.Sprintln(a...)) + } +} + +// sequence returns a formatted SGR sequence to be plugged into a "\x1b[...m" +// an example output might be: "1;36" -> bold cyan +func (c *Color) sequence() string { + format := make([]string, len(c.params)) + for i, v := range c.params { + format[i] = strconv.Itoa(int(v)) + } + + return strings.Join(format, ";") +} + +// wrap wraps the s string with the colors attributes. The string is ready to +// be printed. +func (c *Color) wrap(s string) string { + if c.isNoColorSet() { + return s + } + + return c.format() + s + c.unformat() +} + +func (c *Color) format() string { + return fmt.Sprintf("%s[%sm", escape, c.sequence()) +} + +func (c *Color) unformat() string { + return fmt.Sprintf("%s[%dm", escape, Reset) +} + +// DisableColor disables the color output. Useful to not change any existing +// code and still being able to output. Can be used for flags like +// "--no-color". To enable back use EnableColor() method. +func (c *Color) DisableColor() { + c.noColor = boolPtr(true) +} + +// EnableColor enables the color output. Use it in conjunction with +// DisableColor(). Otherwise this method has no side effects. +func (c *Color) EnableColor() { + c.noColor = boolPtr(false) +} + +func (c *Color) isNoColorSet() bool { + // check first if we have user setted action + if c.noColor != nil { + return *c.noColor + } + + // if not return the global option, which is disabled by default + return NoColor +} + +// Equals returns a boolean value indicating whether two colors are equal. +func (c *Color) Equals(c2 *Color) bool { + if len(c.params) != len(c2.params) { + return false + } + + for _, attr := range c.params { + if !c2.attrExists(attr) { + return false + } + } + + return true +} + +func (c *Color) attrExists(a Attribute) bool { + for _, attr := range c.params { + if attr == a { + return true + } + } + + return false +} + +func boolPtr(v bool) *bool { + return &v +} + +func getCachedColor(p Attribute) *Color { + colorsCacheMu.Lock() + defer colorsCacheMu.Unlock() + + c, ok := colorsCache[p] + if !ok { + c = New(p) + colorsCache[p] = c + } + + return c +} + +func colorPrint(format string, p Attribute, a ...interface{}) { + c := getCachedColor(p) + + if !strings.HasSuffix(format, "\n") { + format += "\n" + } + + if len(a) == 0 { + c.Print(format) + } else { + c.Printf(format, a...) + } +} + +func colorString(format string, p Attribute, a ...interface{}) string { + c := getCachedColor(p) + + if len(a) == 0 { + return c.SprintFunc()(format) + } + + return c.SprintfFunc()(format, a...) +} + +// Black is a convenient helper function to print with black foreground. A +// newline is appended to format by default. +func Black(format string, a ...interface{}) { colorPrint(format, FgBlack, a...) } + +// Red is a convenient helper function to print with red foreground. A +// newline is appended to format by default. +func Red(format string, a ...interface{}) { colorPrint(format, FgRed, a...) } + +// Green is a convenient helper function to print with green foreground. A +// newline is appended to format by default. +func Green(format string, a ...interface{}) { colorPrint(format, FgGreen, a...) } + +// Yellow is a convenient helper function to print with yellow foreground. +// A newline is appended to format by default. +func Yellow(format string, a ...interface{}) { colorPrint(format, FgYellow, a...) } + +// Blue is a convenient helper function to print with blue foreground. A +// newline is appended to format by default. +func Blue(format string, a ...interface{}) { colorPrint(format, FgBlue, a...) } + +// Magenta is a convenient helper function to print with magenta foreground. +// A newline is appended to format by default. +func Magenta(format string, a ...interface{}) { colorPrint(format, FgMagenta, a...) } + +// Cyan is a convenient helper function to print with cyan foreground. A +// newline is appended to format by default. +func Cyan(format string, a ...interface{}) { colorPrint(format, FgCyan, a...) } + +// White is a convenient helper function to print with white foreground. A +// newline is appended to format by default. +func White(format string, a ...interface{}) { colorPrint(format, FgWhite, a...) } + +// BlackString is a convenient helper function to return a string with black +// foreground. +func BlackString(format string, a ...interface{}) string { return colorString(format, FgBlack, a...) } + +// RedString is a convenient helper function to return a string with red +// foreground. +func RedString(format string, a ...interface{}) string { return colorString(format, FgRed, a...) } + +// GreenString is a convenient helper function to return a string with green +// foreground. +func GreenString(format string, a ...interface{}) string { return colorString(format, FgGreen, a...) } + +// YellowString is a convenient helper function to return a string with yellow +// foreground. +func YellowString(format string, a ...interface{}) string { return colorString(format, FgYellow, a...) } + +// BlueString is a convenient helper function to return a string with blue +// foreground. +func BlueString(format string, a ...interface{}) string { return colorString(format, FgBlue, a...) } + +// MagentaString is a convenient helper function to return a string with magenta +// foreground. +func MagentaString(format string, a ...interface{}) string { + return colorString(format, FgMagenta, a...) +} + +// CyanString is a convenient helper function to return a string with cyan +// foreground. +func CyanString(format string, a ...interface{}) string { return colorString(format, FgCyan, a...) } + +// WhiteString is a convenient helper function to return a string with white +// foreground. +func WhiteString(format string, a ...interface{}) string { return colorString(format, FgWhite, a...) } + +// HiBlack is a convenient helper function to print with hi-intensity black foreground. A +// newline is appended to format by default. +func HiBlack(format string, a ...interface{}) { colorPrint(format, FgHiBlack, a...) } + +// HiRed is a convenient helper function to print with hi-intensity red foreground. A +// newline is appended to format by default. +func HiRed(format string, a ...interface{}) { colorPrint(format, FgHiRed, a...) } + +// HiGreen is a convenient helper function to print with hi-intensity green foreground. A +// newline is appended to format by default. +func HiGreen(format string, a ...interface{}) { colorPrint(format, FgHiGreen, a...) } + +// HiYellow is a convenient helper function to print with hi-intensity yellow foreground. +// A newline is appended to format by default. +func HiYellow(format string, a ...interface{}) { colorPrint(format, FgHiYellow, a...) } + +// HiBlue is a convenient helper function to print with hi-intensity blue foreground. A +// newline is appended to format by default. +func HiBlue(format string, a ...interface{}) { colorPrint(format, FgHiBlue, a...) } + +// HiMagenta is a convenient helper function to print with hi-intensity magenta foreground. +// A newline is appended to format by default. +func HiMagenta(format string, a ...interface{}) { colorPrint(format, FgHiMagenta, a...) } + +// HiCyan is a convenient helper function to print with hi-intensity cyan foreground. A +// newline is appended to format by default. +func HiCyan(format string, a ...interface{}) { colorPrint(format, FgHiCyan, a...) } + +// HiWhite is a convenient helper function to print with hi-intensity white foreground. A +// newline is appended to format by default. +func HiWhite(format string, a ...interface{}) { colorPrint(format, FgHiWhite, a...) } + +// HiBlackString is a convenient helper function to return a string with hi-intensity black +// foreground. +func HiBlackString(format string, a ...interface{}) string { + return colorString(format, FgHiBlack, a...) +} + +// HiRedString is a convenient helper function to return a string with hi-intensity red +// foreground. +func HiRedString(format string, a ...interface{}) string { return colorString(format, FgHiRed, a...) } + +// HiGreenString is a convenient helper function to return a string with hi-intensity green +// foreground. +func HiGreenString(format string, a ...interface{}) string { + return colorString(format, FgHiGreen, a...) +} + +// HiYellowString is a convenient helper function to return a string with hi-intensity yellow +// foreground. +func HiYellowString(format string, a ...interface{}) string { + return colorString(format, FgHiYellow, a...) +} + +// HiBlueString is a convenient helper function to return a string with hi-intensity blue +// foreground. +func HiBlueString(format string, a ...interface{}) string { return colorString(format, FgHiBlue, a...) } + +// HiMagentaString is a convenient helper function to return a string with hi-intensity magenta +// foreground. +func HiMagentaString(format string, a ...interface{}) string { + return colorString(format, FgHiMagenta, a...) +} + +// HiCyanString is a convenient helper function to return a string with hi-intensity cyan +// foreground. +func HiCyanString(format string, a ...interface{}) string { return colorString(format, FgHiCyan, a...) } + +// HiWhiteString is a convenient helper function to return a string with hi-intensity white +// foreground. +func HiWhiteString(format string, a ...interface{}) string { + return colorString(format, FgHiWhite, a...) +} diff --git a/vendor/github.com/fatih/color/doc.go b/vendor/github.com/fatih/color/doc.go new file mode 100644 index 00000000..cf1e9650 --- /dev/null +++ b/vendor/github.com/fatih/color/doc.go @@ -0,0 +1,133 @@ +/* +Package color is an ANSI color package to output colorized or SGR defined +output to the standard output. The API can be used in several way, pick one +that suits you. + +Use simple and default helper functions with predefined foreground colors: + + color.Cyan("Prints text in cyan.") + + // a newline will be appended automatically + color.Blue("Prints %s in blue.", "text") + + // More default foreground colors.. + color.Red("We have red") + color.Yellow("Yellow color too!") + color.Magenta("And many others ..") + + // Hi-intensity colors + color.HiGreen("Bright green color.") + color.HiBlack("Bright black means gray..") + color.HiWhite("Shiny white color!") + +However there are times where custom color mixes are required. Below are some +examples to create custom color objects and use the print functions of each +separate color object. + + // Create a new color object + c := color.New(color.FgCyan).Add(color.Underline) + c.Println("Prints cyan text with an underline.") + + // Or just add them to New() + d := color.New(color.FgCyan, color.Bold) + d.Printf("This prints bold cyan %s\n", "too!.") + + + // Mix up foreground and background colors, create new mixes! + red := color.New(color.FgRed) + + boldRed := red.Add(color.Bold) + boldRed.Println("This will print text in bold red.") + + whiteBackground := red.Add(color.BgWhite) + whiteBackground.Println("Red text with White background.") + + // Use your own io.Writer output + color.New(color.FgBlue).Fprintln(myWriter, "blue color!") + + blue := color.New(color.FgBlue) + blue.Fprint(myWriter, "This will print text in blue.") + +You can create PrintXxx functions to simplify even more: + + // Create a custom print function for convenient + red := color.New(color.FgRed).PrintfFunc() + red("warning") + red("error: %s", err) + + // Mix up multiple attributes + notice := color.New(color.Bold, color.FgGreen).PrintlnFunc() + notice("don't forget this...") + +You can also FprintXxx functions to pass your own io.Writer: + + blue := color.New(FgBlue).FprintfFunc() + blue(myWriter, "important notice: %s", stars) + + // Mix up with multiple attributes + success := color.New(color.Bold, color.FgGreen).FprintlnFunc() + success(myWriter, don't forget this...") + + +Or create SprintXxx functions to mix strings with other non-colorized strings: + + yellow := New(FgYellow).SprintFunc() + red := New(FgRed).SprintFunc() + + fmt.Printf("this is a %s and this is %s.\n", yellow("warning"), red("error")) + + info := New(FgWhite, BgGreen).SprintFunc() + fmt.Printf("this %s rocks!\n", info("package")) + +Windows support is enabled by default. All Print functions work as intended. +However only for color.SprintXXX functions, user should use fmt.FprintXXX and +set the output to color.Output: + + fmt.Fprintf(color.Output, "Windows support: %s", color.GreenString("PASS")) + + info := New(FgWhite, BgGreen).SprintFunc() + fmt.Fprintf(color.Output, "this %s rocks!\n", info("package")) + +Using with existing code is possible. Just use the Set() method to set the +standard output to the given parameters. That way a rewrite of an existing +code is not required. + + // Use handy standard colors. + color.Set(color.FgYellow) + + fmt.Println("Existing text will be now in Yellow") + fmt.Printf("This one %s\n", "too") + + color.Unset() // don't forget to unset + + // You can mix up parameters + color.Set(color.FgMagenta, color.Bold) + defer color.Unset() // use it in your function + + fmt.Println("All text will be now bold magenta.") + +There might be a case where you want to disable color output (for example to +pipe the standard output of your app to somewhere else). `Color` has support to +disable colors both globally and for single color definition. For example +suppose you have a CLI app and a `--no-color` bool flag. You can easily disable +the color output with: + + var flagNoColor = flag.Bool("no-color", false, "Disable color output") + + if *flagNoColor { + color.NoColor = true // disables colorized output + } + +It also has support for single color definitions (local). You can +disable/enable color output on the fly: + + c := color.New(color.FgCyan) + c.Println("Prints cyan text") + + c.DisableColor() + c.Println("This is printed without any color") + + c.EnableColor() + c.Println("This prints again cyan...") +*/ +package color diff --git a/vendor/github.com/gardener/gardener/.github/pull_request_template.md b/vendor/github.com/gardener/gardener/.github/pull_request_template.md index 1711df66..66a8b1be 100644 --- a/vendor/github.com/gardener/gardener/.github/pull_request_template.md +++ b/vendor/github.com/gardener/gardener/.github/pull_request_template.md @@ -32,9 +32,9 @@ Write your release note: Format of block header: Possible values: -- category: improvement|noteworthy|action -- target_group: user|operator|developer +- category: breaking|feature|bugfix|doc|other +- target_group: user|operator|developer|dependency --> -```improvement operator +```other operator ``` diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/log.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/log.go index fb8593c1..18a55903 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/log.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/log.go @@ -18,8 +18,7 @@ import ( "fmt" "github.com/go-logr/logr" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/event" ) @@ -61,54 +60,36 @@ func PrefixLogValues(prefix string, logValues []interface{}) []interface{} { return out } -func eventObjectLogValues(meta metav1.Object, obj runtime.Object) []interface{} { - var values []interface{} - if meta != nil { - values = append(values, MetaObjectLogValues(meta)...) - } - if obj != nil { - values = append(values, RuntimeObjectLogValues(obj)...) - } - return values -} - // CreateEventLogValues extracts the log values from the given CreateEvent. func CreateEventLogValues(event event.CreateEvent) []interface{} { - return eventObjectLogValues(event.Meta, event.Object) + return ObjectLogValues(event.Object) } // DeleteEventLogValues extracts the log values from the given DeleteEvent. func DeleteEventLogValues(event event.DeleteEvent) []interface{} { - return append(eventObjectLogValues(event.Meta, event.Object), "delete-state-unknown", event.DeleteStateUnknown) + return append(ObjectLogValues(event.Object), "delete-state-unknown", event.DeleteStateUnknown) } // GenericEventLogValues extracts the log values from the given GenericEvent. func GenericEventLogValues(event event.GenericEvent) []interface{} { - return eventObjectLogValues(event.Meta, event.Object) + return ObjectLogValues(event.Object) } // UpdateEventLogValues extracts the log values from the given UpdateEvent. func UpdateEventLogValues(event event.UpdateEvent) []interface{} { var values []interface{} - values = append(values, PrefixLogValues("old", eventObjectLogValues(event.MetaOld, event.ObjectOld))...) - values = append(values, PrefixLogValues("new", eventObjectLogValues(event.MetaNew, event.ObjectNew))...) + values = append(values, PrefixLogValues("old", ObjectLogValues(event.ObjectOld))...) + values = append(values, PrefixLogValues("new", ObjectLogValues(event.ObjectNew))...) return values } -// MetaObjectLogValues extracts the log values from the given metav1.Object. -func MetaObjectLogValues(obj metav1.Object) []interface{} { +// ObjectLogValues extracts the log values from the given client.Object. +func ObjectLogValues(obj client.Object) []interface{} { values := []interface{}{"meta.name", obj.GetName()} if namespace := obj.GetNamespace(); namespace != "" { values = append(values, "meta.namespace", namespace) } - return values -} - -// RuntimeObjectLogValues extracts the log values from the given runtime.Object. -func RuntimeObjectLogValues(obj runtime.Object) []interface{} { apiVersion, kind := obj.GetObjectKind().GroupVersionKind().ToAPIVersionAndKind() - return []interface{}{ - "object.apiVersion", apiVersion, - "object.kind", kind, - } + values = append(values, "object.apiVersion", apiVersion, "object.kind", kind) + return values } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/reconciler.go index 426356f0..f4b27437 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/reconciler.go @@ -18,10 +18,7 @@ import ( "context" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" - contextutil "github.com/gardener/gardener/pkg/utils/context" - "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" @@ -30,17 +27,16 @@ import ( type operationAnnotationWrapper struct { reconcile.Reconciler client client.Client - ctx context.Context - objectType runtime.Object + newObjFunc func() client.Object } // OperationAnnotationWrapper is a wrapper for an reconciler that // removes the Gardener operation annotation before `Reconcile` is called. // // This is useful in conjunction with the HasOperationAnnotationPredicate. -func OperationAnnotationWrapper(objectType runtime.Object, reconciler reconcile.Reconciler) reconcile.Reconciler { +func OperationAnnotationWrapper(newObjFunc func() client.Object, reconciler reconcile.Reconciler) reconcile.Reconciler { return &operationAnnotationWrapper{ - objectType: objectType, + newObjFunc: newObjFunc, Reconciler: reconciler, } } @@ -56,25 +52,14 @@ func (o *operationAnnotationWrapper) InjectFunc(f inject.Func) error { return f(o.Reconciler) } -// InjectStopChannel is an implementation for getting the respective stop channel managed by the controller-runtime. -func (o *operationAnnotationWrapper) InjectStopChannel(stopCh <-chan struct{}) error { - o.ctx = contextutil.FromStopChannel(stopCh) - return nil -} - // Reconcile removes the Gardener operation annotation if available and calls the inner `Reconcile`. -func (o *operationAnnotationWrapper) Reconcile(request reconcile.Request) (reconcile.Result, error) { - obj := o.objectType.DeepCopyObject() - if err := o.client.Get(o.ctx, request.NamespacedName, obj); client.IgnoreNotFound(err) != nil { - return reconcile.Result{}, err - } - - acc, err := meta.Accessor(obj) - if err != nil { +func (o *operationAnnotationWrapper) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) { + obj := o.newObjFunc() + if err := o.client.Get(ctx, request.NamespacedName, obj); client.IgnoreNotFound(err) != nil { return reconcile.Result{}, err } - annotations := acc.GetAnnotations() + annotations := obj.GetAnnotations() if annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationWaitForState { return reconcile.Result{}, nil } @@ -82,10 +67,10 @@ func (o *operationAnnotationWrapper) Reconcile(request reconcile.Request) (recon if annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationReconcile { withOpAnnotation := obj.DeepCopyObject() delete(annotations, v1beta1constants.GardenerOperation) - acc.SetAnnotations(annotations) - if err := o.client.Patch(o.ctx, obj, client.MergeFrom(withOpAnnotation)); err != nil { + obj.SetAnnotations(annotations) + if err := o.client.Patch(ctx, obj, client.MergeFrom(withOpAnnotation)); err != nil { return reconcile.Result{}, err } } - return o.Reconciler.Reconcile(request) + return o.Reconciler.Reconcile(ctx, request) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/shoot.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/shoot.go index 330d6170..49ed0a84 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/shoot.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/shoot.go @@ -20,7 +20,7 @@ import ( ) const ( - // ShootNoCleanupLabel is a constant for a label on a resource indicating the the Gardener cleaner should not delete this + // ShootNoCleanupLabel is a constant for a label on a resource indicating that the Gardener cleaner should not delete this // resource when cleaning a shoot during the deletion flow. ShootNoCleanupLabel = "shoot.gardener.cloud/no-cleanup" ) diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go index 66e82257..36b00a5e 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/utils.go @@ -24,7 +24,7 @@ import ( gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - contextutil "github.com/gardener/gardener/pkg/utils/context" + "github.com/gardener/gardener/pkg/controllerutils" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" resourcemanagerv1alpha1 "github.com/gardener/gardener-resource-manager/pkg/apis/resources/v1alpha1" @@ -42,7 +42,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/manager" - "sigs.k8s.io/controller-runtime/pkg/manager/signals" "sigs.k8s.io/controller-runtime/pkg/reconcile" ) @@ -91,11 +90,6 @@ func ReconcileErrCauseOrErr(err error) error { return err } -// SetupSignalHandlerContext sets up a context from signals.SetupSignalHandler stop channel. -func SetupSignalHandlerContext() context.Context { - return contextutil.FromStopChannel(signals.SetupSignalHandler()) -} - // AddToManagerBuilder aggregates various AddToManager functions. type AddToManagerBuilder []func(manager.Manager) error @@ -143,48 +137,16 @@ func HasFinalizer(obj runtime.Object, finalizerName string) (bool, error) { // EnsureFinalizer ensures that a finalizer of the given name is set on the given object. // If the finalizer is not set, it adds it to the list of finalizers and updates the remote object. -func EnsureFinalizer(ctx context.Context, client client.Client, finalizerName string, obj runtime.Object) error { - finalizers, accessor, err := finalizersAndAccessorOf(obj) - if err != nil { - return err - } - - if finalizers.Has(finalizerName) { - return nil - } - - finalizers.Insert(finalizerName) - accessor.SetFinalizers(finalizers.UnsortedList()) - - return client.Update(ctx, obj) -} +var EnsureFinalizer = controllerutils.EnsureFinalizer // DeleteFinalizer ensures that the given finalizer is not present anymore in the given object. // If it is set, it removes it and issues an update. -func DeleteFinalizer(ctx context.Context, client client.Client, finalizerName string, obj runtime.Object) error { - finalizers, accessor, err := finalizersAndAccessorOf(obj) - if err != nil { - return err - } - - if !finalizers.Has(finalizerName) { - return nil - } - - finalizers.Delete(finalizerName) - accessor.SetFinalizers(finalizers.UnsortedList()) - - return client.Update(ctx, obj) -} +var DeleteFinalizer = controllerutils.RemoveFinalizer // DeleteAllFinalizers removes all finalizers from the object and issues an update. -func DeleteAllFinalizers(ctx context.Context, client client.Client, obj runtime.Object) error { +func DeleteAllFinalizers(ctx context.Context, client client.Client, obj client.Object) error { return TryUpdate(ctx, retry.DefaultBackoff, client, obj, func() error { - accessor, err := meta.Accessor(obj) - if err != nil { - return err - } - accessor.SetFinalizers(nil) + obj.SetFinalizers(nil) return nil }) } @@ -265,16 +227,12 @@ func GetVerticalPodAutoscalerObject() *unstructured.Unstructured { } // RemoveAnnotation removes an annotation key passed as annotation -func RemoveAnnotation(ctx context.Context, c client.Client, obj runtime.Object, annotation string) error { - accessor, err := meta.Accessor(obj) - if err != nil { - return err - } +func RemoveAnnotation(ctx context.Context, c client.Client, obj client.Object, annotation string) error { withAnnotation := obj.DeepCopyObject() - annotations := accessor.GetAnnotations() + annotations := obj.GetAnnotations() delete(annotations, annotation) - accessor.SetAnnotations(annotations) + obj.SetAnnotations(annotations) return c.Patch(ctx, obj, client.MergeFrom(withAnnotation)) } @@ -294,6 +252,6 @@ func IsMigrated(obj runtime.Object) bool { // GetObjectByReference gets an object by the given reference, in the given namespace. // If the object kind doesn't match the given reference kind this will result in an error. -func GetObjectByReference(ctx context.Context, c client.Client, ref *autoscalingv1.CrossVersionObjectReference, namespace string, obj runtime.Object) error { +func GetObjectByReference(ctx context.Context, c client.Client, ref *autoscalingv1.CrossVersionObjectReference, namespace string, obj client.Object) error { return c.Get(ctx, client.ObjectKey{Namespace: namespace, Name: v1beta1constants.ReferencedResourcesPrefix + ref.Name}, obj) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/event/event.go b/vendor/github.com/gardener/gardener/extensions/pkg/event/event.go deleted file mode 100644 index a2b7abde..00000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/event/event.go +++ /dev/null @@ -1,43 +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 event - -import ( - "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "sigs.k8s.io/controller-runtime/pkg/event" -) - -// NewFromObject creates a new GenericEvent from the given runtime.Object. -// -// It tries to extract a metav1.Object from the given Object. If it fails, the Meta -// of the resulting GenericEvent will be `nil`. -func NewFromObject(obj runtime.Object) event.GenericEvent { - accessor, err := meta.Accessor(obj) - if err != nil { - return NewGeneric(nil, obj) - } - - return NewGeneric(accessor, obj) -} - -// NewGeneric creates a new GenericEvent from the given metav1.Object and runtime.Object. -func NewGeneric(meta metav1.Object, obj runtime.Object) event.GenericEvent { - return event.GenericEvent{ - Meta: meta, - Object: obj, - } -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/predicate/mapper.go b/vendor/github.com/gardener/gardener/extensions/pkg/predicate/mapper.go index 2a199ac7..a24c79af 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/predicate/mapper.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/predicate/mapper.go @@ -15,8 +15,6 @@ package predicate import ( - extensionsevent "github.com/gardener/gardener/extensions/pkg/event" - "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/runtime/inject" @@ -74,7 +72,7 @@ func (m *mapperWithTriggers) InjectFunc(f inject.Func) error { // Create implements Predicate. func (m *mapperWithTriggers) Create(e event.CreateEvent) bool { if _, ok := m.triggers[CreateTrigger]; ok { - return m.mapper.Map(extensionsevent.NewGeneric(e.Meta, e.Object)) + return m.mapper.Map(event.GenericEvent(e)) } return true } @@ -82,7 +80,7 @@ func (m *mapperWithTriggers) Create(e event.CreateEvent) bool { // Delete implements Predicate. func (m *mapperWithTriggers) Delete(e event.DeleteEvent) bool { if _, ok := m.triggers[DeleteTrigger]; ok { - return m.mapper.Map(extensionsevent.NewGeneric(e.Meta, e.Object)) + return m.mapper.Map(event.GenericEvent{Object: e.Object}) } return true } @@ -90,10 +88,10 @@ func (m *mapperWithTriggers) Delete(e event.DeleteEvent) bool { // Update implements Predicate. func (m *mapperWithTriggers) Update(e event.UpdateEvent) bool { if _, ok := m.triggers[UpdateOldTrigger]; ok { - return m.mapper.Map(extensionsevent.NewGeneric(e.MetaOld, e.ObjectOld)) + return m.mapper.Map(event.GenericEvent{Object: e.ObjectOld}) } if _, ok := m.triggers[UpdateNewTrigger]; ok { - return m.mapper.Map(extensionsevent.NewGeneric(e.MetaNew, e.ObjectNew)) + return m.mapper.Map(event.GenericEvent{Object: e.ObjectNew}) } return true } @@ -101,7 +99,7 @@ func (m *mapperWithTriggers) Update(e event.UpdateEvent) bool { // Generic implements Predicate. func (m *mapperWithTriggers) Generic(e event.GenericEvent) bool { if _, ok := m.triggers[GenericTrigger]; ok { - return m.mapper.Map(extensionsevent.NewGeneric(e.Meta, e.Object)) + return m.mapper.Map(event.GenericEvent{Object: e.Object}) } return true } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/predicate/predicate.go b/vendor/github.com/gardener/gardener/extensions/pkg/predicate/predicate.go index 6edfb972..a43f43f4 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/predicate/predicate.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/predicate/predicate.go @@ -17,8 +17,9 @@ package predicate import ( "errors" + "sigs.k8s.io/controller-runtime/pkg/client" + extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - extensionsevent "github.com/gardener/gardener/extensions/pkg/event" extensionsinject "github.com/gardener/gardener/extensions/pkg/inject" gardencore "github.com/gardener/gardener/pkg/api/core" "github.com/gardener/gardener/pkg/api/extensions" @@ -38,9 +39,8 @@ import ( var Log logr.Logger = log.Log // EvalGeneric returns true if all predicates match for the given object. -func EvalGeneric(obj runtime.Object, predicates ...predicate.Predicate) bool { - e := extensionsevent.NewFromObject(obj) - +func EvalGeneric(obj client.Object, predicates ...predicate.Predicate) bool { + e := event.GenericEvent{Object: obj} for _, p := range predicates { if !p.Generic(e) { return false @@ -58,18 +58,14 @@ type shootNotFailedMapper struct { } func (s *shootNotFailedMapper) Map(e event.GenericEvent) bool { - if e.Meta == nil { - return false - } - // Wait for cache sync because of backing client cache. - if !s.Cache.WaitForCacheSync(s.Context.Done()) { + if !s.Cache.WaitForCacheSync(s.Context) { err := errors.New("failed to wait for caches to sync") s.log.Error(err, "Could not wait for Cache to sync", "predicate", "ShootNotFailed") return false } - cluster, err := extensionscontroller.GetCluster(s.Context, s.Client, e.Meta.GetNamespace()) + cluster, err := extensionscontroller.GetCluster(s.Context, s.Client, e.Object.GetNamespace()) if err != nil { s.log.Error(err, "Could not retrieve corresponding cluster") return false @@ -88,12 +84,6 @@ func ShootNotFailed() predicate.Predicate { CreateTrigger, UpdateNewTrigger, DeleteTrigger, GenericTrigger) } -// Or builds a logical OR gate of passed predicates. -// Deprecated: Use sigs.k8s.io/controller-runtime/pkg/predicate.Or directly. Will be removed in gardener version v1.12. -func Or(predicates ...predicate.Predicate) predicate.Predicate { - return predicate.Or(predicates...) -} - // HasType filters the incoming OperatingSystemConfigs for ones that have the same type // as the given type. func HasType(typeName string) predicate.Predicate { @@ -110,16 +100,16 @@ func HasType(typeName string) predicate.Predicate { // HasName returns a predicate that matches the given name of a resource. func HasName(name string) predicate.Predicate { return FromMapper(MapperFunc(func(e event.GenericEvent) bool { - return e.Meta.GetName() == name + return e.Object.GetName() == name }), CreateTrigger, UpdateNewTrigger, DeleteTrigger, GenericTrigger) } // HasOperationAnnotation is a predicate for the operation annotation. func HasOperationAnnotation() predicate.Predicate { return FromMapper(MapperFunc(func(e event.GenericEvent) bool { - return e.Meta.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationReconcile || - e.Meta.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationRestore || - e.Meta.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationMigrate + return e.Object.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationReconcile || + e.Object.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationRestore || + e.Object.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationMigrate }), CreateTrigger, UpdateNewTrigger, GenericTrigger) } @@ -155,7 +145,7 @@ func LastOperationNotSuccessful() predicate.Predicate { // IsDeleting is a predicate for objects having a deletion timestamp. func IsDeleting() predicate.Predicate { return FromMapper(MapperFunc(func(e event.GenericEvent) bool { - return e.Meta.GetDeletionTimestamp() != nil + return e.Object.GetDeletionTimestamp() != nil }), CreateTrigger, UpdateNewTrigger, GenericTrigger) } diff --git a/vendor/github.com/gardener/gardener/hack/.ci/prepare_release b/vendor/github.com/gardener/gardener/hack/.ci/prepare_release index 11a18aac..882afd47 100755 --- a/vendor/github.com/gardener/gardener/hack/.ci/prepare_release +++ b/vendor/github.com/gardener/gardener/hack/.ci/prepare_release @@ -35,7 +35,7 @@ apk add --no-cache \ gcc \ sed -GOLANG_VERSION="$(sed -rn 's/FROM golang:([^ ]+).*/\1/p' < "$repo_root_dir/Dockerfile")" +GOLANG_VERSION="$(sed -rn 's/FROM (eu\.gcr\.io\/gardener-project\/3rd\/golang|golang):([^ ]+).*/\2/p' < "$repo_root_dir/Dockerfile")" export \ GOROOT="$(go env GOROOT)" \ 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 3fd18b97..0e149c7c 100755 --- a/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version +++ b/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version @@ -108,7 +108,9 @@ elif name == 'vpn': elif name == 'external-dns-management': names = ['dns-controller-manager'] elif name == 'logging': - names = ['fluent-bit'] + names = ['fluent-bit-plugin-installer'] +elif name == 'etcd-custom-image': + names = ['etcd'] else: names = [name] diff --git a/vendor/github.com/gardener/gardener/hack/hook-me.sh b/vendor/github.com/gardener/gardener/hack/hook-me.sh index 8506f748..0ec64587 100755 --- a/vendor/github.com/gardener/gardener/hack/hook-me.sh +++ b/vendor/github.com/gardener/gardener/hack/hook-me.sh @@ -27,7 +27,7 @@ providerName=${2:-} [[ -z $providerName ]] && echo "Please specify the provider name (aws,gcp,azure,..etc.)!" && exit 1 tmpService=$(mktemp) -kubectl get svc gardener-extension-provider-$providerName -o yaml --export > $tmpService +kubectl get svc gardener-extension-provider-$providerName -o yaml > $tmpService cat < ./hack/hook-me.sh " - echo "> \`make EXTENSION_NAMESPACE= start\`" + echo "> ./hack/hook-me.sh " + echo "> \`make EXTENSION_NAMESPACE= WEBHOOK_CONFIG_MODE=service start\`" echo "==================================================================================================================================" echo "" @@ -294,7 +294,7 @@ if [[ "${BASH_SOURCE[0]}" = "$0" ]]; then createOrUpdateWebhookSVC $namespace $providerName echo "[STEP 7] Initializing the inlets client"; - echo "[Info] Inlets initialized, you are ready to go ahead and run \"make EXTENSION_NAMESPACE=$namespace start\"" + echo "[Info] Inlets initialized, you are ready to go ahead and run \"make EXTENSION_NAMESPACE=$namespace WEBHOOK_CONFIG_MODE=service start\"" echo "[Info] It will take about 5 seconds for the connection to succeeed!" inlets client --remote ws://$loadbalancerIPOrHostName:8000 --upstream https://localhost:$webhookServerPort --token=21d809ed61915c9177fbceeaa87e307e766be5f2 diff --git a/vendor/github.com/gardener/gardener/hack/install-requirements.sh b/vendor/github.com/gardener/gardener/hack/install-requirements.sh index 2d10c348..0b34709a 100755 --- a/vendor/github.com/gardener/gardener/hack/install-requirements.sh +++ b/vendor/github.com/gardener/gardener/hack/install-requirements.sh @@ -22,7 +22,7 @@ GO111MODULE=off go get golang.org/x/tools/cmd/goimports export GO111MODULE=on curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.27.0 -curl -s "https://raw.githubusercontent.com/helm/helm/v2.16.9/scripts/get" | bash -s -- --version 'v2.13.1' +curl -s "https://raw.githubusercontent.com/helm/helm/v2.17.0/scripts/get" | bash -s -- --version 'v2.17.0' if [[ "$(uname -s)" == *"Darwin"* ]]; then cat < Test Cover" -GO111MODULE=on ginkgo -cover -race -mod=vendor $@ +GO111MODULE=on ginkgo -cover -timeout=2m -race -mod=vendor $@ REPO_ROOT="$(git rev-parse --show-toplevel)" COVERPROFILE="$REPO_ROOT/test.coverprofile" diff --git a/vendor/github.com/gardener/gardener/hack/test.sh b/vendor/github.com/gardener/gardener/hack/test.sh index f9f98d2c..9a96f1d4 100755 --- a/vendor/github.com/gardener/gardener/hack/test.sh +++ b/vendor/github.com/gardener/gardener/hack/test.sh @@ -15,8 +15,16 @@ # limitations under the License. set -e +TEST_BIN_DIR="$(dirname "${0}")/../dev/testbin" +mkdir -p ${TEST_BIN_DIR} + +ENVTEST_ASSETS_DIR="$(realpath ${TEST_BIN_DIR})" + source "$(dirname $0)/setup-envtest.sh" +fetch_envtest_tools ${ENVTEST_ASSETS_DIR} +setup_envtest_env ${ENVTEST_ASSETS_DIR} + echo "> Test" GO111MODULE=on go test -race -mod=vendor $@ | grep -v 'no test files' diff --git a/vendor/github.com/gardener/gardener/hack/tools.go b/vendor/github.com/gardener/gardener/hack/tools.go index 0d0d2304..1af0eac8 100755 --- a/vendor/github.com/gardener/gardener/hack/tools.go +++ b/vendor/github.com/gardener/gardener/hack/tools.go @@ -25,4 +25,5 @@ import ( _ "k8s.io/code-generator" _ "k8s.io/code-generator/cmd/go-to-protobuf/protoc-gen-gogo" _ "k8s.io/kube-openapi/cmd/openapi-gen" + _ "sigs.k8s.io/controller-tools/cmd/controller-gen" ) diff --git a/vendor/github.com/gardener/gardener/hack/update-codegen.sh b/vendor/github.com/gardener/gardener/hack/update-codegen.sh index 380f6b1c..192f2775 100755 --- a/vendor/github.com/gardener/gardener/hack/update-codegen.sh +++ b/vendor/github.com/gardener/gardener/hack/update-codegen.sh @@ -49,6 +49,23 @@ bash "${PROJECT_ROOT}"/vendor/k8s.io/code-generator/generate-groups.sh \ github.com/gardener/gardener/pkg/apis \ "extensions:v1alpha1" \ -h "${PROJECT_ROOT}/hack/LICENSE_BOILERPLATE.txt" + +# seedmanagement.gardener.cloud APIs + +bash "${PROJECT_ROOT}"/vendor/k8s.io/code-generator/generate-groups.sh \ + "all" \ + github.com/gardener/gardener/pkg/client/seedmanagement \ + github.com/gardener/gardener/pkg/apis \ + "seedmanagement:v1alpha1" \ + -h "${PROJECT_ROOT}/hack/LICENSE_BOILERPLATE.txt" + +bash "${PROJECT_ROOT}"/vendor/k8s.io/code-generator/generate-internal-groups.sh \ + "deepcopy,defaulter,conversion" \ + github.com/gardener/gardener/pkg/client/seedmanagement \ + github.com/gardener/gardener/pkg/apis \ + github.com/gardener/gardener/pkg/apis \ + "seedmanagement:v1alpha1" \ + -h "${PROJECT_ROOT}/hack/LICENSE_BOILERPLATE.txt" # settings.gardener.cloud APIs @@ -173,6 +190,7 @@ ${GOPATH}/bin/openapi-gen "$@" \ --input-dirs=github.com/gardener/gardener/pkg/apis/core/v1alpha1 \ --input-dirs=github.com/gardener/gardener/pkg/apis/core/v1beta1 \ --input-dirs=github.com/gardener/gardener/pkg/apis/settings/v1alpha1 \ + --input-dirs=github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1 \ --input-dirs=k8s.io/api/core/v1 \ --input-dirs=k8s.io/api/rbac/v1 \ --input-dirs=k8s.io/api/autoscaling/v1 \ diff --git a/vendor/github.com/gardener/gardener/pkg/api/extensions/utils.go b/vendor/github.com/gardener/gardener/pkg/api/extensions/utils.go index b9475f0f..c877f3dd 100644 --- a/vendor/github.com/gardener/gardener/pkg/api/extensions/utils.go +++ b/vendor/github.com/gardener/gardener/pkg/api/extensions/utils.go @@ -15,21 +15,26 @@ package extensions import ( + "sigs.k8s.io/controller-runtime/pkg/client" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - "k8s.io/apimachinery/pkg/runtime" ) -// GetShootNamespacedCRsLists returns an empty CR list struct, for each CR used for Shoot managment -func GetShootNamespacedCRsLists() []runtime.Object { - return []runtime.Object{ - &extensionsv1alpha1.ControlPlaneList{}, - &extensionsv1alpha1.ExtensionList{}, - &extensionsv1alpha1.InfrastructureList{}, - //The Network CR is now handled as a shoot component - //&extensionsv1alpha1.NetworkList{}, +// GetShootNamespacedCRsLists returns an empty CR list struct, for each CR used for Shoot management +func GetShootNamespacedCRsLists() []client.ObjectList { + return []client.ObjectList{ + // The ControlPlane CR is now handled as a shoot component + // &extensionsv1alpha1.ControlPlaneList{}, + // The Extension CR is now handled as a shoot component + // &extensionsv1alpha1.ExtensionList{}, + // The Infrastructure CR is now handled as a shoot component + // &extensionsv1alpha1.InfrastructureList{}, + // The Network CR is now handled as a shoot component + // &extensionsv1alpha1.NetworkList{}, &extensionsv1alpha1.OperatingSystemConfigList{}, - &extensionsv1alpha1.WorkerList{}, - //The ContainerRuntime CR is now handled as a shoot component - //&extensionsv1alpha1.ContainerRuntimeList{}, + // The Worker CR is now handled as a shoot component + // &extensionsv1alpha1.WorkerList{}, + // The ContainerRuntime CR is now handled as a shoot component + // &extensionsv1alpha1.ContainerRuntimeList{}, } } 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 7e0ee7ad..88063036 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 @@ -63,7 +63,7 @@ type ProjectSpec struct { // Namespace is the name of the namespace that has been created for the Project object. // A nil value means that Gardener will determine the name of the namespace. Namespace *string - // Tolerations contains the default tolerations and a whitelist for taints on seed clusters. + // Tolerations contains the default tolerations and a list for allowed taints on seed clusters. Tolerations *ProjectTolerations } 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 f21a3126..6619ff8a 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 @@ -69,6 +69,8 @@ type SeedSpec struct { Taints []SeedTaint // Volume contains settings for persistentvolumes created in the seed cluster. Volume *SeedVolume + // Ingress configures Ingress specific settings of the Seed cluster. + Ingress *Ingress } func (s *Seed) GetProviderType() string { @@ -88,6 +90,11 @@ type SeedStatus struct { ObservedGeneration int64 // ClusterIdentity is the identity of Seed cluster ClusterIdentity *string + // Capacity represents the total resources of a seed. + Capacity corev1.ResourceList + // Allocatable represents the resources of a seed that are available for scheduling. + // Defaults to Capacity. + Allocatable corev1.ResourceList } // SeedBackup contains the object store configuration for backups for shoot (currently only etcd). @@ -104,11 +111,43 @@ type SeedBackup struct { SecretRef corev1.SecretReference } -// SeedDNS contains DNS-relevant information about this seed cluster. +// SeedDNS contains the external domain and configuration for the DNS provider type SeedDNS struct { // IngressDomain is the domain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. - IngressDomain string + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. + // This will be removed in the next API version and replaced by spec.ingress.domain. + IngressDomain *string + // Provider configures a DNSProvider + Provider *SeedDNSProvider +} + +// SeedDNSProvider configures a DNS provider +type SeedDNSProvider struct { + // Type describes the type of the dns-provider, for example `aws-route53` + Type string + // SecretRef is a reference to a Secret object containing cloud provider credentials used for registering external domains. + SecretRef corev1.SecretReference + // Domains contains information about which domains shall be included/excluded for this provider. + Domains *DNSIncludeExclude + // Zones contains information about which hosted zones shall be included/excluded for this provider. + Zones *DNSIncludeExclude +} + +// Ingress configures the Ingress specific settings of the Seed cluster +type Ingress struct { + // Domain specifies the ingress domain of the Seed cluster pointing to the ingress controller endpoint. It will be used + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. + Domain string + // Controller configures a Gardener managed Ingress Controller listening on the ingressDomain + Controller IngressController +} + +// IngressController enables a Gardener managed Ingress Controller listening on the ingressDomain +type IngressController struct { + // Kind defines which kind of IngressController to use, for example `nginx` + Kind string + // ProviderConfig specifies infrastructure specific configuration for the ingressController + ProviderConfig *runtime.RawExtension } // SeedNetworks contains CIDRs for the pod, service and node networks of a Kubernetes cluster. @@ -237,3 +276,9 @@ const ( // SeedGardenletReady is a constant for a condition type indicating that the Gardenlet is ready. SeedGardenletReady ConditionType = "GardenletReady" ) + +// Resource constants for Gardener object types +const ( + // ResourceShoots is a resource constant for the number of shoots. + ResourceShoots corev1.ResourceName = "shoots" +) 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 ef91f927..b3f2b6dd 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 @@ -162,7 +162,7 @@ const ( // NginxIngress describes configuration values for the nginx-ingress addon. type NginxIngress struct { Addon - // LoadBalancerSourceRanges is list of whitelist IP sources for NginxIngress + // LoadBalancerSourceRanges is list of allowed IP sources for NginxIngress LoadBalancerSourceRanges []string // Config contains custom configuration for the nginx-ingress-controller configuration. // See https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/configmap.md#configuration-options @@ -179,7 +179,7 @@ type NginxIngress struct { // DNS holds information about the provider, the hosted zone id and the domain. type DNS struct { // Domain is the external available domain of the Shoot cluster. This domain will be written into the - // kubeconfig that is handed out to end-users. + // kubeconfig that is handed out to end-users. Once set it is immutable. Domain *string // Providers is a list of DNS providers that shall be enabled for this shoot cluster. Only relevant if // not a default domain is used. @@ -366,6 +366,18 @@ type KubeAPIServerConfig struct { // Starting from kubernetes v1.19, the API server's watch cache size is adapted dynamically and setting the watch // cache size flags will have no effect, except when setting it to 0 (which disables the watch cache). WatchCacheSizes *WatchCacheSizes + // Requests contains configuration for request-specific settings for the kube-apiserver. + Requests *KubeAPIServerRequests +} + +// KubeAPIServerRequests contains configuration for request-specific settings for the kube-apiserver. +type KubeAPIServerRequests struct { + // MaxNonMutatingInflight is the maximum number of non-mutating requests in flight at a given time. When the server + // exceeds this, it rejects requests. + MaxNonMutatingInflight *int32 + // MaxMutatingInflight is the maximum number of mutating requests in flight at a given time. When the server + // exceeds this, it rejects requests. + MaxMutatingInflight *int32 } // ServiceAccountConfig is the kube-apiserver configuration for service accounts. @@ -467,6 +479,8 @@ type KubeControllerManagerConfig struct { HorizontalPodAutoscalerConfig *HorizontalPodAutoscalerConfig // NodeCIDRMaskSize defines the mask size for node cidr in cluster (default is 24) NodeCIDRMaskSize *int32 + // PodEvictionTimeout defines the grace period for deleting pods on failed nodes. + PodEvictionTimeout *metav1.Duration } // HorizontalPodAutoscalerConfig contains horizontal pod autoscaler configuration settings for the kube-controller-manager. @@ -681,6 +695,13 @@ const ( // Maintenance relevant types // ////////////////////////////////////////////////////////////////////////////////////////////////// +const ( + // MaintenanceTimeWindowDurationMinimum is the minimum duration for a maintenance time window. + MaintenanceTimeWindowDurationMinimum = 30 * time.Minute + // MaintenanceTimeWindowDurationMaximum is the maximum duration for a maintenance time window. + MaintenanceTimeWindowDurationMaximum = 6 * time.Hour +) + // Maintenance contains information about the time window for maintenance operations and which // operations should be performed. type Maintenance struct { @@ -921,6 +942,9 @@ const ( ShootSystemComponentsHealthy ConditionType = "SystemComponentsHealthy" // ShootHibernationPossible is a constant for a condition type indicating whether the Shoot can be hibernated. ShootHibernationPossible ConditionType = "HibernationPossible" + // ShootMaintenancePreconditionsSatisfied is a constant for a condition type indicating whether all preconditions + // for a shoot maintenance operation are satisfied. + ShootMaintenancePreconditionsSatisfied ConditionType = "MaintenancePreconditionsSatisfied" ) // DNSUnmanaged is a constant for the 'unmanaged' DNS provider. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/constants/types_constants.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/constants/types_constants.go new file mode 100644 index 00000000..ca925c3c --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/constants/types_constants.go @@ -0,0 +1,258 @@ +// 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 constants + +const ( + // SecretNameCACluster is a constant for the name of a Kubernetes secret object that contains the CA + // certificate of a shoot cluster. + SecretNameCACluster = "ca" + // SecretNameCAETCD is a constant for the name of a Kubernetes secret object that contains the CA + // certificate of the etcd of a shoot cluster. + SecretNameCAETCD = "ca-etcd" + // SecretNameCAFrontProxy is a constant for the name of a Kubernetes secret object that contains the CA + // certificate of the kube-aggregator a shoot cluster. + SecretNameCAFrontProxy = "ca-front-proxy" + // SecretNameCAKubelet is a constant for the name of a Kubernetes secret object that contains the CA + // certificate of the kubelet of a shoot cluster. + SecretNameCAKubelet = "ca-kubelet" + // SecretNameCAMetricsServer is a constant for the name of a Kubernetes secret object that contains the CA + // certificate of the metrics-server of a shoot cluster. + SecretNameCAMetricsServer = "ca-metrics-server" + // SecretNameCloudProvider is a constant for the name of a Kubernetes secret object that contains the provider + // specific credentials that shall be used to create/delete the shoot. + SecretNameCloudProvider = "cloudprovider" + // SecretNameSSHKeyPair is a constant for the name of a Kubernetes secret object that contains the SSH key pair + // (public and private key) that can be used to SSH into the shoot nodes. + SecretNameSSHKeyPair = "ssh-keypair" + + // 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 + // controllers in order to communicate with the shoot's API server. The client certificate has administrator + // privileges. + SecretNameGardener = "gardener" + + // DeploymentNameClusterAutoscaler is a constant for the name of a Kubernetes deployment object that contains + // the cluster-autoscaler pod. + DeploymentNameClusterAutoscaler = "cluster-autoscaler" + // DeploymentNameKubeAPIServer is a constant for the name of a Kubernetes deployment object that contains + // the kube-apiserver pod. + DeploymentNameKubeAPIServer = "kube-apiserver" + // DeploymentNameKubeControllerManager is a constant for the name of a Kubernetes deployment object that contains + // the kube-controller-manager pod. + DeploymentNameKubeControllerManager = "kube-controller-manager" + + // DeploymentNameKubeScheduler is a constant for the name of a Kubernetes deployment object that contains + // the kube-scheduler pod. + DeploymentNameKubeScheduler = "kube-scheduler" + // DeploymentNameGardenerResourceManager is a constant for the name of a Kubernetes deployment object that contains + // the gardener-resource-manager pod. + DeploymentNameGardenerResourceManager = "gardener-resource-manager" + // DeploymentNameGrafanaOperators is a constant for the name of a Kubernetes deployment object that contains + // the grafana-operators pod. + DeploymentNameGrafanaOperators = "grafana-operators" + // DeploymentNameGrafanaUsers is a constant for the name of a Kubernetes deployment object that contains + // the grafana-users pod. + DeploymentNameGrafanaUsers = "grafana-users" + // DeploymentNameKubeStateMetricsShoot is a constant for the name of a Kubernetes deployment object that contains + // the kube-state-metrics pod. + DeploymentNameKubeStateMetricsShoot = "kube-state-metrics" + + // StatefulSetNameAlertManager is a constant for the name of a Kubernetes stateful set object that contains + // the alertmanager pod. + StatefulSetNameAlertManager = "alertmanager" + // ETCDRoleMain is a constant for the main etcd role. + ETCDRoleMain = "main" + // ETCDRoleEvents is a constant for the events etcd role. + ETCDRoleEvents = "events" + // ETCDMain is a constant for the name of etcd-main Etcd object. + ETCDMain = "etcd-" + ETCDRoleMain + // ETCDEvents is a constant for the name of etcd-events Etcd object. + ETCDEvents = "etcd-" + ETCDRoleEvents + + // StatefulSetNamePrometheus is a constant for the name of a Kubernetes stateful set object that contains + // the prometheus pod. + StatefulSetNamePrometheus = "prometheus" + + // GardenerPurpose is a constant for the key in a label describing the purpose of the respective object. + GardenerPurpose = "gardener.cloud/purpose" + + // GardenerOperation is a constant for an annotation on a resource that describes a desired operation. + GardenerOperation = "gardener.cloud/operation" + // GardenerOperationReconcile is a constant for the value of the operation annotation describing a reconcile + // operation. + GardenerOperationReconcile = "reconcile" + // GardenerOperationMigrate is a constant for the value of the operation annotation describing a migration + // operation. + GardenerOperationMigrate = "migrate" + // GardenerOperationRestore is a constant for the value of the operation annotation describing a restoration + // operation. + GardenerOperationRestore = "restore" + // GardenerOperationWaitForState is a constant for the value of the operation annotation describing a wait + // operation. + GardenerOperationWaitForState = "wait-for-state" + + // DeprecatedGardenRole is the key for an annotation on a Kubernetes object indicating what it is used for. + // + // Deprecated: Use `GardenRole` instead. + DeprecatedGardenRole = "garden.sapcloud.io/role" + // GardenRole is a constant for a label that describes a role. + GardenRole = "gardener.cloud/role" + // GardenRoleExtension is a constant for a label that describes the 'extensions' role. + GardenRoleExtension = "extension" + // GardenRoleSeed is the value of the GardenRole key indicating type 'seed'. + GardenRoleSeed = "seed" + // GardenRoleShoot is the value of the GardenRole key indicating type 'shoot'. + GardenRoleShoot = "shoot" + // GardenRoleLogging is the value of the GardenRole key indicating type 'logging'. + GardenRoleLogging = "logging" + // GardenRoleProject is the value of GardenRole key indicating type 'project'. + GardenRoleProject = "project" + // GardenRoleControlPlane is the value of the GardenRole key indicating type 'controlplane'. + GardenRoleControlPlane = "controlplane" + // GardenRoleSystemComponent is the value of the GardenRole key indicating type 'system-component'. + GardenRoleSystemComponent = "system-component" + // GardenRoleMonitoring is the value of the GardenRole key indicating type 'monitoring'. + GardenRoleMonitoring = "monitoring" + // GardenRoleOptionalAddon is the value of the GardenRole key indicating type 'optional-addon'. + GardenRoleOptionalAddon = "optional-addon" + + // DeprecatedShootUID is an annotation key for the shoot namespace in the seed cluster, + // which value will be the value of `shoot.status.uid` + // + // Deprecated: Use the `Cluster` resource or the annotation key from the new API group `ShootUID`. + DeprecatedShootUID = "shoot.garden.sapcloud.io/uid" + // ShootUID is an annotation key for the shoot namespace in the seed cluster, + // which value will be the value of `shoot.status.uid` + ShootUID = "shoot.gardener.cloud/uid" + + // SeedResourceManagerClass is the resource-class managed by the Gardener-Resource-Manager + // instance in the garden namespace on the seeds. + SeedResourceManagerClass = "seed" + // LabelBackupProvider is used to identify the backup provider. + LabelBackupProvider = "backup.gardener.cloud/provider" + // LabelSeedProvider is used to identify the seed provider. + LabelSeedProvider = "seed.gardener.cloud/provider" + // LabelShootProvider is used to identify the shoot provider. + LabelShootProvider = "shoot.gardener.cloud/provider" + // LabelNetworkingProvider is used to identify the networking provider for the cni plugin. + LabelNetworkingProvider = "networking.shoot.gardener.cloud/provider" + // LabelExtensionConfiguration is used to identify the provider's configuration which will be added to Gardener configuration + LabelExtensionConfiguration = "extensions.gardener.cloud/configuration" + // LabelLogging is a constant for a label for logging stack configurations + LabelLogging = "logging" + // LabelMonitoring is a constant for a label for monitoring stack configurations + LabelMonitoring = "monitoring" + + // LabelNetworkPolicyToBlockedCIDRs allows Egress from pods labeled with 'networking.gardener.cloud/to-blocked-cidrs=allowed'. + LabelNetworkPolicyToBlockedCIDRs = "networking.gardener.cloud/to-blocked-cidrs" + // LabelNetworkPolicyToDNS allows Egress from pods labeled with 'networking.gardener.cloud/to-dns=allowed' to DNS running in 'kube-system'. + // In practice, most of the Pods which require network Egress need this label. + LabelNetworkPolicyToDNS = "networking.gardener.cloud/to-dns" + // LabelNetworkPolicyToPrivateNetworks allows Egress from pods labeled with 'networking.gardener.cloud/to-private-networks=allowed' to the + // private networks (RFC1918), Carrier-grade NAT (RFC6598) except for cloudProvider's specific metadata service IP, seed networks, + // shoot networks. + LabelNetworkPolicyToPrivateNetworks = "networking.gardener.cloud/to-private-networks" + // LabelNetworkPolicyToPublicNetworks allows Egress from pods labeled with 'networking.gardener.cloud/to-public-networks=allowed' to all public + // network IPs, except for private networks (RFC1918), carrier-grade NAT (RFC6598), cloudProvider's specific metadata service IP. + // In practice, this blocks Egress traffic to all networks in the Seed cluster and only traffic to public IPv4 addresses. + LabelNetworkPolicyToPublicNetworks = "networking.gardener.cloud/to-public-networks" + // LabelNetworkPolicyToSeedAPIServer allows Egress from pods labeled with 'networking.gardener.cloud/to-seed-apiserver=allowed' to Seed's Kubernetes + // API Server. + LabelNetworkPolicyToSeedAPIServer = "networking.gardener.cloud/to-seed-apiserver" + // LabelNetworkPolicyToShootAPIServer allows Egress from pods labeled with 'networking.gardener.cloud/to-shoot-apiserver=allowed' to talk to Shoot's + // Kubernetes API Server. + LabelNetworkPolicyToShootAPIServer = "networking.gardener.cloud/to-shoot-apiserver" + // LabelNetworkPolicyToAll disables all Ingress and Egress traffic into/from this namespace when set to "disallowed". + LabelNetworkPolicyToAll = "networking.gardener.cloud/to-all" + // LabelNetworkPolicyFromPrometheus allows Ingress from Prometheus to pods labeled with 'networking.gardener.cloud/from-prometheus=allowed' and ports + // named 'metrics' in the PodSpecification. + LabelNetworkPolicyFromPrometheus = "networking.gardener.cloud/from-prometheus" + // LabelNetworkPolicyAllowed is a constant for allowing a network policy. + LabelNetworkPolicyAllowed = "allowed" + // LabelNetworkPolicyDisallowed is a constant for disallowing a network policy. + LabelNetworkPolicyDisallowed = "disallowed" + + // LabelApp is a constant for a label key. + LabelApp = "app" + // LabelRole is a constant for a label key. + LabelRole = "role" + // LabelKubernetes is a constant for a label for Kubernetes workload. + LabelKubernetes = "kubernetes" + // LabelAPIServer is a constant for a label for the kube-apiserver. + LabelAPIServer = "apiserver" + // LabelControllerManager is a constant for a label for the kube-controller-manager. + LabelControllerManager = "controller-manager" + // LabelScheduler is a constant for a label for the kube-scheduler. + LabelScheduler = "scheduler" + // LabelExtensionProjectRole is a constant for a label value for extension project roles + LabelExtensionProjectRole = "extension-project-role" + + // LabelAPIServerExposure is a constant for label key which gardener can add to various objects related + // to kube-apiserver exposure. + LabelAPIServerExposure = "core.gardener.cloud/apiserver-exposure" + // LabelAPIServerExposureGardenerManaged is a constant for label value which gardener sets on the label key + // "core.gardener.cloud/apiserver-exposure" to indicate that it's responsible for apiserver exposure (via SNI). + LabelAPIServerExposureGardenerManaged = "gardener-managed" + + // LabelWorkerPoolSystemComponents is a constant that indicates whether the worker pool should host system components + LabelWorkerPoolSystemComponents = "worker.gardener.cloud/system-components" + + // GardenNamespace is the namespace in which the configuration and secrets for + // the Gardener controller manager will be stored (e.g., secrets for the Seed clusters). + // It is also used by the gardener-apiserver. + GardenNamespace = "garden" + + // AnnotationShootUseAsSeed is a constant for an annotation on a Shoot resource indicating that the Shoot shall be registered as Seed in the + // Garden cluster once successfully created. + AnnotationShootUseAsSeed = "shoot.gardener.cloud/use-as-seed" + // AnnotationShootIgnoreAlerts is the key for an annotation of a Shoot cluster whose value indicates + // if alerts for this cluster should be ignored + AnnotationShootIgnoreAlerts = "shoot.gardener.cloud/ignore-alerts" + // AnnotationShootSkipCleanup is a key for an annotation on a Shoot resource that declares that the clean up steps should be skipped when the + // cluster is deleted. Concretely, this will skip everything except the deletion of (load balancer) services and persistent volume resources. + AnnotationShootSkipCleanup = "shoot.gardener.cloud/skip-cleanup" + // AnnotationShootKonnectivityTunnel is the key for an annotation of a Shoot cluster whose value indicates + // if a konnectivity-tunnel should be deployed into the shoot cluster or not. + AnnotationShootKonnectivityTunnel = "alpha.featuregates.shoot.gardener.cloud/konnectivity-tunnel" + + // OperatingSystemConfigUnitNameKubeletService is a constant for a unit in the operating system config that contains the kubelet service. + OperatingSystemConfigUnitNameKubeletService = "kubelet.service" + // OperatingSystemConfigUnitNameDockerService is a constant for a unit in the operating system config that contains the docker service. + OperatingSystemConfigUnitNameDockerService = "docker.service" + // OperatingSystemConfigFilePathKernelSettings is a constant for a path to a file in the operating system config that contains some general kernel settings. + OperatingSystemConfigFilePathKernelSettings = "/etc/sysctl.d/99-k8s-general.conf" + // OperatingSystemConfigFilePathKubeletConfig is a constant for a path to a file in the operating system config that contains the kubelet configuration. + OperatingSystemConfigFilePathKubeletConfig = "/var/lib/kubelet/config/kubelet" + + // FluentBitConfigMapKubernetesFilter is a constant for the Fluent Bit ConfigMap's section regarding Kubernetes filters + FluentBitConfigMapKubernetesFilter = "filter-kubernetes.conf" + // FluentBitConfigMapParser is a constant for the Fluent Bit ConfigMap's section regarding Parsers for common container types + FluentBitConfigMapParser = "parsers.conf" + // PrometheusConfigMapAlertingRules is a constant for the Prometheus alerting rules tag in provider-specific monitoring configuration + PrometheusConfigMapAlertingRules = "alerting_rules" + // PrometheusConfigMapScrapeConfig is a constant for the Prometheus scrape config tag in provider-specific monitoring configuration + PrometheusConfigMapScrapeConfig = "scrape_config" + // GrafanaConfigMapUserDashboard is a constant for the Grafana user dashboard tag in provider-specific monitoring configuration + GrafanaConfigMapUserDashboard = "dashboard_users" + // GrafanaConfigMapOperatorDashboard is a constant for the Grafana operator dashboard tag in provider-specific monitoring configuration + GrafanaConfigMapOperatorDashboard = "dashboard_operators" + + // LabelControllerRegistrationName is the key of a label on extension namespaces that indicates the controller registration name. + LabelControllerRegistrationName = "controllerregistration.core.gardener.cloud/name" + + // EventResourceReferenced indicates that the resource deletion is in waiting mode because the resource is still + // being referenced by at least one other resource (e.g. a SecretBinding is still referenced by a Shoot) + EventResourceReferenced = "ResourceReferenced" +) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/conversions.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/conversions.go index d3e02349..48dce7b5 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/conversions.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/conversions.go @@ -243,6 +243,10 @@ func Convert_v1alpha1_SeedNetworks_To_core_SeedNetworks(in *SeedNetworks, out *c return autoConvert_v1alpha1_SeedNetworks_To_core_SeedNetworks(in, out, s) } +func Convert_core_SeedStatus_To_v1alpha1_SeedStatus(in *core.SeedStatus, out *SeedStatus, s conversion.Scope) error { + return autoConvert_core_SeedStatus_To_v1alpha1_SeedStatus(in, out, s) +} + func Convert_core_ShootStatus_To_v1alpha1_ShootStatus(in *core.ShootStatus, out *ShootStatus, s conversion.Scope) error { if err := autoConvert_core_ShootStatus_To_v1alpha1_ShootStatus(in, out, s); err != nil { return err diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/defaults.go index 1548cf98..349bb6a9 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/defaults.go @@ -16,6 +16,7 @@ package v1alpha1 import ( "math" + "time" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" "github.com/gardener/gardener/pkg/utils" @@ -24,6 +25,7 @@ import ( corev1 "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/utils/pointer" @@ -117,20 +119,6 @@ func SetDefaults_Seed(obj *Seed) { if obj.Spec.Settings.VerticalPodAutoscaler == nil { obj.Spec.Settings.VerticalPodAutoscaler = &SeedSettingVerticalPodAutoscaler{Enabled: true} } - - // TODO: remove taints removal in version >=1.13 - taintsToRemove := []string{ - "seed.gardener.cloud/disable-capacity-reservation", - "seed.gardener.cloud/disable-dns", - "seed.gardener.cloud/invisible", - } - for _, taint := range taintsToRemove { - for i := len(obj.Spec.Taints) - 1; i >= 0; i-- { - if obj.Spec.Taints[i].Key == taint { - obj.Spec.Taints = append(obj.Spec.Taints[:i], obj.Spec.Taints[i+1:]...) - } - } - } } // SetDefaults_Shoot sets default values for Shoot objects. @@ -153,6 +141,15 @@ func SetDefaults_Shoot(obj *Shoot) { obj.Spec.Kubernetes.KubeAPIServer.EnableBasicAuthentication = pointer.BoolPtr(false) } } + if obj.Spec.Kubernetes.KubeAPIServer.Requests == nil { + obj.Spec.Kubernetes.KubeAPIServer.Requests = &KubeAPIServerRequests{} + } + if obj.Spec.Kubernetes.KubeAPIServer.Requests.MaxNonMutatingInflight == nil { + obj.Spec.Kubernetes.KubeAPIServer.Requests.MaxNonMutatingInflight = pointer.Int32Ptr(400) + } + if obj.Spec.Kubernetes.KubeAPIServer.Requests.MaxMutatingInflight == nil { + obj.Spec.Kubernetes.KubeAPIServer.Requests.MaxMutatingInflight = pointer.Int32Ptr(200) + } if obj.Spec.Kubernetes.KubeControllerManager == nil { obj.Spec.Kubernetes.KubeControllerManager = &KubeControllerManagerConfig{} @@ -160,6 +157,9 @@ func SetDefaults_Shoot(obj *Shoot) { if obj.Spec.Kubernetes.KubeControllerManager.NodeCIDRMaskSize == nil { obj.Spec.Kubernetes.KubeControllerManager.NodeCIDRMaskSize = calculateDefaultNodeCIDRMaskSize(obj.Spec.Kubernetes.Kubelet, obj.Spec.Provider.Workers) } + if obj.Spec.Kubernetes.KubeControllerManager.PodEvictionTimeout == nil { + obj.Spec.Kubernetes.KubeControllerManager.PodEvictionTimeout = &metav1.Duration{Duration: 2 * time.Minute} + } if obj.Spec.Kubernetes.KubeProxy == nil { obj.Spec.Kubernetes.KubeProxy = &KubeProxyConfig{} 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 ac97b64f..5ddc5f21 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 @@ -1,5 +1,5 @@ /* -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 +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. @@ -1371,10 +1371,66 @@ func (m *HorizontalPodAutoscalerConfig) XXX_DiscardUnknown() { var xxx_messageInfo_HorizontalPodAutoscalerConfig proto.InternalMessageInfo +func (m *Ingress) Reset() { *m = Ingress{} } +func (*Ingress) ProtoMessage() {} +func (*Ingress) Descriptor() ([]byte, []int) { + return fileDescriptor_f1caaec5647a9dbf, []int{47} +} +func (m *Ingress) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Ingress) 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 *Ingress) XXX_Merge(src proto.Message) { + xxx_messageInfo_Ingress.Merge(m, src) +} +func (m *Ingress) XXX_Size() int { + return m.Size() +} +func (m *Ingress) XXX_DiscardUnknown() { + xxx_messageInfo_Ingress.DiscardUnknown(m) +} + +var xxx_messageInfo_Ingress proto.InternalMessageInfo + +func (m *IngressController) Reset() { *m = IngressController{} } +func (*IngressController) ProtoMessage() {} +func (*IngressController) Descriptor() ([]byte, []int) { + return fileDescriptor_f1caaec5647a9dbf, []int{48} +} +func (m *IngressController) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressController) 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 *IngressController) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressController.Merge(m, src) +} +func (m *IngressController) XXX_Size() int { + return m.Size() +} +func (m *IngressController) XXX_DiscardUnknown() { + xxx_messageInfo_IngressController.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressController proto.InternalMessageInfo + func (m *KubeAPIServerConfig) Reset() { *m = KubeAPIServerConfig{} } func (*KubeAPIServerConfig) ProtoMessage() {} func (*KubeAPIServerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{47} + return fileDescriptor_f1caaec5647a9dbf, []int{49} } func (m *KubeAPIServerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1399,10 +1455,38 @@ func (m *KubeAPIServerConfig) XXX_DiscardUnknown() { var xxx_messageInfo_KubeAPIServerConfig proto.InternalMessageInfo +func (m *KubeAPIServerRequests) Reset() { *m = KubeAPIServerRequests{} } +func (*KubeAPIServerRequests) ProtoMessage() {} +func (*KubeAPIServerRequests) Descriptor() ([]byte, []int) { + return fileDescriptor_f1caaec5647a9dbf, []int{50} +} +func (m *KubeAPIServerRequests) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *KubeAPIServerRequests) 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 *KubeAPIServerRequests) XXX_Merge(src proto.Message) { + xxx_messageInfo_KubeAPIServerRequests.Merge(m, src) +} +func (m *KubeAPIServerRequests) XXX_Size() int { + return m.Size() +} +func (m *KubeAPIServerRequests) XXX_DiscardUnknown() { + xxx_messageInfo_KubeAPIServerRequests.DiscardUnknown(m) +} + +var xxx_messageInfo_KubeAPIServerRequests proto.InternalMessageInfo + func (m *KubeControllerManagerConfig) Reset() { *m = KubeControllerManagerConfig{} } func (*KubeControllerManagerConfig) ProtoMessage() {} func (*KubeControllerManagerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{48} + return fileDescriptor_f1caaec5647a9dbf, []int{51} } func (m *KubeControllerManagerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1430,7 +1514,7 @@ var xxx_messageInfo_KubeControllerManagerConfig proto.InternalMessageInfo func (m *KubeProxyConfig) Reset() { *m = KubeProxyConfig{} } func (*KubeProxyConfig) ProtoMessage() {} func (*KubeProxyConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{49} + return fileDescriptor_f1caaec5647a9dbf, []int{52} } func (m *KubeProxyConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1458,7 +1542,7 @@ var xxx_messageInfo_KubeProxyConfig proto.InternalMessageInfo func (m *KubeSchedulerConfig) Reset() { *m = KubeSchedulerConfig{} } func (*KubeSchedulerConfig) ProtoMessage() {} func (*KubeSchedulerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{50} + return fileDescriptor_f1caaec5647a9dbf, []int{53} } func (m *KubeSchedulerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1486,7 +1570,7 @@ var xxx_messageInfo_KubeSchedulerConfig proto.InternalMessageInfo func (m *KubeletConfig) Reset() { *m = KubeletConfig{} } func (*KubeletConfig) ProtoMessage() {} func (*KubeletConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{51} + return fileDescriptor_f1caaec5647a9dbf, []int{54} } func (m *KubeletConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1514,7 +1598,7 @@ var xxx_messageInfo_KubeletConfig proto.InternalMessageInfo func (m *KubeletConfigEviction) Reset() { *m = KubeletConfigEviction{} } func (*KubeletConfigEviction) ProtoMessage() {} func (*KubeletConfigEviction) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{52} + return fileDescriptor_f1caaec5647a9dbf, []int{55} } func (m *KubeletConfigEviction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1542,7 +1626,7 @@ var xxx_messageInfo_KubeletConfigEviction proto.InternalMessageInfo func (m *KubeletConfigEvictionMinimumReclaim) Reset() { *m = KubeletConfigEvictionMinimumReclaim{} } func (*KubeletConfigEvictionMinimumReclaim) ProtoMessage() {} func (*KubeletConfigEvictionMinimumReclaim) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{53} + return fileDescriptor_f1caaec5647a9dbf, []int{56} } func (m *KubeletConfigEvictionMinimumReclaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1570,7 +1654,7 @@ var xxx_messageInfo_KubeletConfigEvictionMinimumReclaim proto.InternalMessageInf func (m *KubeletConfigEvictionSoftGracePeriod) Reset() { *m = KubeletConfigEvictionSoftGracePeriod{} } func (*KubeletConfigEvictionSoftGracePeriod) ProtoMessage() {} func (*KubeletConfigEvictionSoftGracePeriod) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{54} + return fileDescriptor_f1caaec5647a9dbf, []int{57} } func (m *KubeletConfigEvictionSoftGracePeriod) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1598,7 +1682,7 @@ var xxx_messageInfo_KubeletConfigEvictionSoftGracePeriod proto.InternalMessageIn func (m *KubeletConfigReserved) Reset() { *m = KubeletConfigReserved{} } func (*KubeletConfigReserved) ProtoMessage() {} func (*KubeletConfigReserved) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{55} + return fileDescriptor_f1caaec5647a9dbf, []int{58} } func (m *KubeletConfigReserved) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1626,7 +1710,7 @@ var xxx_messageInfo_KubeletConfigReserved proto.InternalMessageInfo func (m *Kubernetes) Reset() { *m = Kubernetes{} } func (*Kubernetes) ProtoMessage() {} func (*Kubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{56} + return fileDescriptor_f1caaec5647a9dbf, []int{59} } func (m *Kubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1654,7 +1738,7 @@ var xxx_messageInfo_Kubernetes proto.InternalMessageInfo func (m *KubernetesConfig) Reset() { *m = KubernetesConfig{} } func (*KubernetesConfig) ProtoMessage() {} func (*KubernetesConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{57} + return fileDescriptor_f1caaec5647a9dbf, []int{60} } func (m *KubernetesConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1682,7 +1766,7 @@ var xxx_messageInfo_KubernetesConfig proto.InternalMessageInfo func (m *KubernetesDashboard) Reset() { *m = KubernetesDashboard{} } func (*KubernetesDashboard) ProtoMessage() {} func (*KubernetesDashboard) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{58} + return fileDescriptor_f1caaec5647a9dbf, []int{61} } func (m *KubernetesDashboard) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1710,7 +1794,7 @@ var xxx_messageInfo_KubernetesDashboard proto.InternalMessageInfo func (m *KubernetesInfo) Reset() { *m = KubernetesInfo{} } func (*KubernetesInfo) ProtoMessage() {} func (*KubernetesInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{59} + return fileDescriptor_f1caaec5647a9dbf, []int{62} } func (m *KubernetesInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1738,7 +1822,7 @@ var xxx_messageInfo_KubernetesInfo proto.InternalMessageInfo func (m *KubernetesSettings) Reset() { *m = KubernetesSettings{} } func (*KubernetesSettings) ProtoMessage() {} func (*KubernetesSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{60} + return fileDescriptor_f1caaec5647a9dbf, []int{63} } func (m *KubernetesSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1766,7 +1850,7 @@ var xxx_messageInfo_KubernetesSettings proto.InternalMessageInfo func (m *LastError) Reset() { *m = LastError{} } func (*LastError) ProtoMessage() {} func (*LastError) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{61} + return fileDescriptor_f1caaec5647a9dbf, []int{64} } func (m *LastError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1794,7 +1878,7 @@ var xxx_messageInfo_LastError proto.InternalMessageInfo func (m *LastOperation) Reset() { *m = LastOperation{} } func (*LastOperation) ProtoMessage() {} func (*LastOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{62} + return fileDescriptor_f1caaec5647a9dbf, []int{65} } func (m *LastOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1822,7 +1906,7 @@ var xxx_messageInfo_LastOperation proto.InternalMessageInfo func (m *Machine) Reset() { *m = Machine{} } func (*Machine) ProtoMessage() {} func (*Machine) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{63} + return fileDescriptor_f1caaec5647a9dbf, []int{66} } func (m *Machine) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1850,7 +1934,7 @@ var xxx_messageInfo_Machine proto.InternalMessageInfo func (m *MachineControllerManagerSettings) Reset() { *m = MachineControllerManagerSettings{} } func (*MachineControllerManagerSettings) ProtoMessage() {} func (*MachineControllerManagerSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{64} + return fileDescriptor_f1caaec5647a9dbf, []int{67} } func (m *MachineControllerManagerSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1878,7 +1962,7 @@ var xxx_messageInfo_MachineControllerManagerSettings proto.InternalMessageInfo func (m *MachineImage) Reset() { *m = MachineImage{} } func (*MachineImage) ProtoMessage() {} func (*MachineImage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{65} + return fileDescriptor_f1caaec5647a9dbf, []int{68} } func (m *MachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1906,7 +1990,7 @@ var xxx_messageInfo_MachineImage proto.InternalMessageInfo func (m *MachineImageVersion) Reset() { *m = MachineImageVersion{} } func (*MachineImageVersion) ProtoMessage() {} func (*MachineImageVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{66} + return fileDescriptor_f1caaec5647a9dbf, []int{69} } func (m *MachineImageVersion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1934,7 +2018,7 @@ var xxx_messageInfo_MachineImageVersion proto.InternalMessageInfo func (m *MachineType) Reset() { *m = MachineType{} } func (*MachineType) ProtoMessage() {} func (*MachineType) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{67} + return fileDescriptor_f1caaec5647a9dbf, []int{70} } func (m *MachineType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1962,7 +2046,7 @@ var xxx_messageInfo_MachineType proto.InternalMessageInfo func (m *MachineTypeStorage) Reset() { *m = MachineTypeStorage{} } func (*MachineTypeStorage) ProtoMessage() {} func (*MachineTypeStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{68} + return fileDescriptor_f1caaec5647a9dbf, []int{71} } func (m *MachineTypeStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1990,7 +2074,7 @@ var xxx_messageInfo_MachineTypeStorage proto.InternalMessageInfo func (m *Maintenance) Reset() { *m = Maintenance{} } func (*Maintenance) ProtoMessage() {} func (*Maintenance) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{69} + return fileDescriptor_f1caaec5647a9dbf, []int{72} } func (m *Maintenance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2018,7 +2102,7 @@ var xxx_messageInfo_Maintenance proto.InternalMessageInfo func (m *MaintenanceAutoUpdate) Reset() { *m = MaintenanceAutoUpdate{} } func (*MaintenanceAutoUpdate) ProtoMessage() {} func (*MaintenanceAutoUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{70} + return fileDescriptor_f1caaec5647a9dbf, []int{73} } func (m *MaintenanceAutoUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2046,7 +2130,7 @@ var xxx_messageInfo_MaintenanceAutoUpdate proto.InternalMessageInfo func (m *MaintenanceTimeWindow) Reset() { *m = MaintenanceTimeWindow{} } func (*MaintenanceTimeWindow) ProtoMessage() {} func (*MaintenanceTimeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{71} + return fileDescriptor_f1caaec5647a9dbf, []int{74} } func (m *MaintenanceTimeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2074,7 +2158,7 @@ var xxx_messageInfo_MaintenanceTimeWindow proto.InternalMessageInfo func (m *Monitoring) Reset() { *m = Monitoring{} } func (*Monitoring) ProtoMessage() {} func (*Monitoring) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{72} + return fileDescriptor_f1caaec5647a9dbf, []int{75} } func (m *Monitoring) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2102,7 +2186,7 @@ var xxx_messageInfo_Monitoring proto.InternalMessageInfo func (m *NamedResourceReference) Reset() { *m = NamedResourceReference{} } func (*NamedResourceReference) ProtoMessage() {} func (*NamedResourceReference) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{73} + return fileDescriptor_f1caaec5647a9dbf, []int{76} } func (m *NamedResourceReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2130,7 +2214,7 @@ var xxx_messageInfo_NamedResourceReference proto.InternalMessageInfo func (m *Networking) Reset() { *m = Networking{} } func (*Networking) ProtoMessage() {} func (*Networking) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{74} + return fileDescriptor_f1caaec5647a9dbf, []int{77} } func (m *Networking) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2158,7 +2242,7 @@ var xxx_messageInfo_Networking proto.InternalMessageInfo func (m *NginxIngress) Reset() { *m = NginxIngress{} } func (*NginxIngress) ProtoMessage() {} func (*NginxIngress) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{75} + return fileDescriptor_f1caaec5647a9dbf, []int{78} } func (m *NginxIngress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2186,7 +2270,7 @@ var xxx_messageInfo_NginxIngress proto.InternalMessageInfo func (m *OIDCConfig) Reset() { *m = OIDCConfig{} } func (*OIDCConfig) ProtoMessage() {} func (*OIDCConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{76} + return fileDescriptor_f1caaec5647a9dbf, []int{79} } func (m *OIDCConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2214,7 +2298,7 @@ var xxx_messageInfo_OIDCConfig proto.InternalMessageInfo func (m *OpenIDConnectClientAuthentication) Reset() { *m = OpenIDConnectClientAuthentication{} } func (*OpenIDConnectClientAuthentication) ProtoMessage() {} func (*OpenIDConnectClientAuthentication) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{77} + return fileDescriptor_f1caaec5647a9dbf, []int{80} } func (m *OpenIDConnectClientAuthentication) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2242,7 +2326,7 @@ var xxx_messageInfo_OpenIDConnectClientAuthentication proto.InternalMessageInfo func (m *Plant) Reset() { *m = Plant{} } func (*Plant) ProtoMessage() {} func (*Plant) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{78} + return fileDescriptor_f1caaec5647a9dbf, []int{81} } func (m *Plant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2270,7 +2354,7 @@ var xxx_messageInfo_Plant proto.InternalMessageInfo func (m *PlantList) Reset() { *m = PlantList{} } func (*PlantList) ProtoMessage() {} func (*PlantList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{79} + return fileDescriptor_f1caaec5647a9dbf, []int{82} } func (m *PlantList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2298,7 +2382,7 @@ var xxx_messageInfo_PlantList proto.InternalMessageInfo func (m *PlantSpec) Reset() { *m = PlantSpec{} } func (*PlantSpec) ProtoMessage() {} func (*PlantSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{80} + return fileDescriptor_f1caaec5647a9dbf, []int{83} } func (m *PlantSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2326,7 +2410,7 @@ var xxx_messageInfo_PlantSpec proto.InternalMessageInfo func (m *PlantStatus) Reset() { *m = PlantStatus{} } func (*PlantStatus) ProtoMessage() {} func (*PlantStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{81} + return fileDescriptor_f1caaec5647a9dbf, []int{84} } func (m *PlantStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2354,7 +2438,7 @@ var xxx_messageInfo_PlantStatus proto.InternalMessageInfo func (m *Project) Reset() { *m = Project{} } func (*Project) ProtoMessage() {} func (*Project) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{82} + return fileDescriptor_f1caaec5647a9dbf, []int{85} } func (m *Project) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2382,7 +2466,7 @@ var xxx_messageInfo_Project proto.InternalMessageInfo func (m *ProjectList) Reset() { *m = ProjectList{} } func (*ProjectList) ProtoMessage() {} func (*ProjectList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{83} + return fileDescriptor_f1caaec5647a9dbf, []int{86} } func (m *ProjectList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2410,7 +2494,7 @@ var xxx_messageInfo_ProjectList proto.InternalMessageInfo func (m *ProjectMember) Reset() { *m = ProjectMember{} } func (*ProjectMember) ProtoMessage() {} func (*ProjectMember) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{84} + return fileDescriptor_f1caaec5647a9dbf, []int{87} } func (m *ProjectMember) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2438,7 +2522,7 @@ var xxx_messageInfo_ProjectMember proto.InternalMessageInfo func (m *ProjectSpec) Reset() { *m = ProjectSpec{} } func (*ProjectSpec) ProtoMessage() {} func (*ProjectSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{85} + return fileDescriptor_f1caaec5647a9dbf, []int{88} } func (m *ProjectSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2466,7 +2550,7 @@ var xxx_messageInfo_ProjectSpec proto.InternalMessageInfo func (m *ProjectStatus) Reset() { *m = ProjectStatus{} } func (*ProjectStatus) ProtoMessage() {} func (*ProjectStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{86} + return fileDescriptor_f1caaec5647a9dbf, []int{89} } func (m *ProjectStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2494,7 +2578,7 @@ var xxx_messageInfo_ProjectStatus proto.InternalMessageInfo func (m *ProjectTolerations) Reset() { *m = ProjectTolerations{} } func (*ProjectTolerations) ProtoMessage() {} func (*ProjectTolerations) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{87} + return fileDescriptor_f1caaec5647a9dbf, []int{90} } func (m *ProjectTolerations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2522,7 +2606,7 @@ var xxx_messageInfo_ProjectTolerations proto.InternalMessageInfo func (m *Provider) Reset() { *m = Provider{} } func (*Provider) ProtoMessage() {} func (*Provider) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{88} + return fileDescriptor_f1caaec5647a9dbf, []int{91} } func (m *Provider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2550,7 +2634,7 @@ var xxx_messageInfo_Provider proto.InternalMessageInfo func (m *Quota) Reset() { *m = Quota{} } func (*Quota) ProtoMessage() {} func (*Quota) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{89} + return fileDescriptor_f1caaec5647a9dbf, []int{92} } func (m *Quota) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2578,7 +2662,7 @@ var xxx_messageInfo_Quota proto.InternalMessageInfo func (m *QuotaList) Reset() { *m = QuotaList{} } func (*QuotaList) ProtoMessage() {} func (*QuotaList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{90} + return fileDescriptor_f1caaec5647a9dbf, []int{93} } func (m *QuotaList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2606,7 +2690,7 @@ var xxx_messageInfo_QuotaList proto.InternalMessageInfo func (m *QuotaSpec) Reset() { *m = QuotaSpec{} } func (*QuotaSpec) ProtoMessage() {} func (*QuotaSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{91} + return fileDescriptor_f1caaec5647a9dbf, []int{94} } func (m *QuotaSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2634,7 +2718,7 @@ var xxx_messageInfo_QuotaSpec proto.InternalMessageInfo func (m *Region) Reset() { *m = Region{} } func (*Region) ProtoMessage() {} func (*Region) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{92} + return fileDescriptor_f1caaec5647a9dbf, []int{95} } func (m *Region) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2662,7 +2746,7 @@ var xxx_messageInfo_Region proto.InternalMessageInfo func (m *ResourceData) Reset() { *m = ResourceData{} } func (*ResourceData) ProtoMessage() {} func (*ResourceData) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{93} + return fileDescriptor_f1caaec5647a9dbf, []int{96} } func (m *ResourceData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2690,7 +2774,7 @@ var xxx_messageInfo_ResourceData proto.InternalMessageInfo func (m *ResourceWatchCacheSize) Reset() { *m = ResourceWatchCacheSize{} } func (*ResourceWatchCacheSize) ProtoMessage() {} func (*ResourceWatchCacheSize) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{94} + return fileDescriptor_f1caaec5647a9dbf, []int{97} } func (m *ResourceWatchCacheSize) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2718,7 +2802,7 @@ var xxx_messageInfo_ResourceWatchCacheSize proto.InternalMessageInfo func (m *SecretBinding) Reset() { *m = SecretBinding{} } func (*SecretBinding) ProtoMessage() {} func (*SecretBinding) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{95} + return fileDescriptor_f1caaec5647a9dbf, []int{98} } func (m *SecretBinding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2746,7 +2830,7 @@ var xxx_messageInfo_SecretBinding proto.InternalMessageInfo func (m *SecretBindingList) Reset() { *m = SecretBindingList{} } func (*SecretBindingList) ProtoMessage() {} func (*SecretBindingList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{96} + return fileDescriptor_f1caaec5647a9dbf, []int{99} } func (m *SecretBindingList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2774,7 +2858,7 @@ var xxx_messageInfo_SecretBindingList proto.InternalMessageInfo func (m *Seed) Reset() { *m = Seed{} } func (*Seed) ProtoMessage() {} func (*Seed) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{97} + return fileDescriptor_f1caaec5647a9dbf, []int{100} } func (m *Seed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2802,7 +2886,7 @@ var xxx_messageInfo_Seed proto.InternalMessageInfo func (m *SeedBackup) Reset() { *m = SeedBackup{} } func (*SeedBackup) ProtoMessage() {} func (*SeedBackup) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{98} + return fileDescriptor_f1caaec5647a9dbf, []int{101} } func (m *SeedBackup) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2830,7 +2914,7 @@ var xxx_messageInfo_SeedBackup proto.InternalMessageInfo func (m *SeedDNS) Reset() { *m = SeedDNS{} } func (*SeedDNS) ProtoMessage() {} func (*SeedDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{99} + return fileDescriptor_f1caaec5647a9dbf, []int{102} } func (m *SeedDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2855,10 +2939,38 @@ func (m *SeedDNS) XXX_DiscardUnknown() { var xxx_messageInfo_SeedDNS proto.InternalMessageInfo +func (m *SeedDNSProvider) Reset() { *m = SeedDNSProvider{} } +func (*SeedDNSProvider) ProtoMessage() {} +func (*SeedDNSProvider) Descriptor() ([]byte, []int) { + return fileDescriptor_f1caaec5647a9dbf, []int{103} +} +func (m *SeedDNSProvider) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SeedDNSProvider) 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 *SeedDNSProvider) XXX_Merge(src proto.Message) { + xxx_messageInfo_SeedDNSProvider.Merge(m, src) +} +func (m *SeedDNSProvider) XXX_Size() int { + return m.Size() +} +func (m *SeedDNSProvider) XXX_DiscardUnknown() { + xxx_messageInfo_SeedDNSProvider.DiscardUnknown(m) +} + +var xxx_messageInfo_SeedDNSProvider proto.InternalMessageInfo + func (m *SeedList) Reset() { *m = SeedList{} } func (*SeedList) ProtoMessage() {} func (*SeedList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{100} + return fileDescriptor_f1caaec5647a9dbf, []int{104} } func (m *SeedList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2886,7 +2998,7 @@ var xxx_messageInfo_SeedList proto.InternalMessageInfo func (m *SeedNetworks) Reset() { *m = SeedNetworks{} } func (*SeedNetworks) ProtoMessage() {} func (*SeedNetworks) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{101} + return fileDescriptor_f1caaec5647a9dbf, []int{105} } func (m *SeedNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2914,7 +3026,7 @@ var xxx_messageInfo_SeedNetworks proto.InternalMessageInfo func (m *SeedProvider) Reset() { *m = SeedProvider{} } func (*SeedProvider) ProtoMessage() {} func (*SeedProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{102} + return fileDescriptor_f1caaec5647a9dbf, []int{106} } func (m *SeedProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2942,7 +3054,7 @@ var xxx_messageInfo_SeedProvider proto.InternalMessageInfo func (m *SeedSelector) Reset() { *m = SeedSelector{} } func (*SeedSelector) ProtoMessage() {} func (*SeedSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{103} + return fileDescriptor_f1caaec5647a9dbf, []int{107} } func (m *SeedSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2970,7 +3082,7 @@ var xxx_messageInfo_SeedSelector proto.InternalMessageInfo func (m *SeedSettingExcessCapacityReservation) Reset() { *m = SeedSettingExcessCapacityReservation{} } func (*SeedSettingExcessCapacityReservation) ProtoMessage() {} func (*SeedSettingExcessCapacityReservation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{104} + return fileDescriptor_f1caaec5647a9dbf, []int{108} } func (m *SeedSettingExcessCapacityReservation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2998,7 +3110,7 @@ var xxx_messageInfo_SeedSettingExcessCapacityReservation proto.InternalMessageIn func (m *SeedSettingLoadBalancerServices) Reset() { *m = SeedSettingLoadBalancerServices{} } func (*SeedSettingLoadBalancerServices) ProtoMessage() {} func (*SeedSettingLoadBalancerServices) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{105} + return fileDescriptor_f1caaec5647a9dbf, []int{109} } func (m *SeedSettingLoadBalancerServices) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3026,7 +3138,7 @@ var xxx_messageInfo_SeedSettingLoadBalancerServices proto.InternalMessageInfo func (m *SeedSettingScheduling) Reset() { *m = SeedSettingScheduling{} } func (*SeedSettingScheduling) ProtoMessage() {} func (*SeedSettingScheduling) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{106} + return fileDescriptor_f1caaec5647a9dbf, []int{110} } func (m *SeedSettingScheduling) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3054,7 +3166,7 @@ var xxx_messageInfo_SeedSettingScheduling proto.InternalMessageInfo func (m *SeedSettingShootDNS) Reset() { *m = SeedSettingShootDNS{} } func (*SeedSettingShootDNS) ProtoMessage() {} func (*SeedSettingShootDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{107} + return fileDescriptor_f1caaec5647a9dbf, []int{111} } func (m *SeedSettingShootDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3082,7 +3194,7 @@ var xxx_messageInfo_SeedSettingShootDNS proto.InternalMessageInfo func (m *SeedSettingVerticalPodAutoscaler) Reset() { *m = SeedSettingVerticalPodAutoscaler{} } func (*SeedSettingVerticalPodAutoscaler) ProtoMessage() {} func (*SeedSettingVerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{108} + return fileDescriptor_f1caaec5647a9dbf, []int{112} } func (m *SeedSettingVerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3110,7 +3222,7 @@ var xxx_messageInfo_SeedSettingVerticalPodAutoscaler proto.InternalMessageInfo func (m *SeedSettings) Reset() { *m = SeedSettings{} } func (*SeedSettings) ProtoMessage() {} func (*SeedSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{109} + return fileDescriptor_f1caaec5647a9dbf, []int{113} } func (m *SeedSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3138,7 +3250,7 @@ var xxx_messageInfo_SeedSettings proto.InternalMessageInfo func (m *SeedSpec) Reset() { *m = SeedSpec{} } func (*SeedSpec) ProtoMessage() {} func (*SeedSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{110} + return fileDescriptor_f1caaec5647a9dbf, []int{114} } func (m *SeedSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3166,7 +3278,7 @@ var xxx_messageInfo_SeedSpec proto.InternalMessageInfo func (m *SeedStatus) Reset() { *m = SeedStatus{} } func (*SeedStatus) ProtoMessage() {} func (*SeedStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{111} + return fileDescriptor_f1caaec5647a9dbf, []int{115} } func (m *SeedStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3194,7 +3306,7 @@ var xxx_messageInfo_SeedStatus proto.InternalMessageInfo func (m *SeedTaint) Reset() { *m = SeedTaint{} } func (*SeedTaint) ProtoMessage() {} func (*SeedTaint) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{112} + return fileDescriptor_f1caaec5647a9dbf, []int{116} } func (m *SeedTaint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3222,7 +3334,7 @@ var xxx_messageInfo_SeedTaint proto.InternalMessageInfo func (m *SeedVolume) Reset() { *m = SeedVolume{} } func (*SeedVolume) ProtoMessage() {} func (*SeedVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{113} + return fileDescriptor_f1caaec5647a9dbf, []int{117} } func (m *SeedVolume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3250,7 +3362,7 @@ var xxx_messageInfo_SeedVolume proto.InternalMessageInfo func (m *SeedVolumeProvider) Reset() { *m = SeedVolumeProvider{} } func (*SeedVolumeProvider) ProtoMessage() {} func (*SeedVolumeProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{114} + return fileDescriptor_f1caaec5647a9dbf, []int{118} } func (m *SeedVolumeProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3278,7 +3390,7 @@ var xxx_messageInfo_SeedVolumeProvider proto.InternalMessageInfo func (m *ServiceAccountConfig) Reset() { *m = ServiceAccountConfig{} } func (*ServiceAccountConfig) ProtoMessage() {} func (*ServiceAccountConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{115} + return fileDescriptor_f1caaec5647a9dbf, []int{119} } func (m *ServiceAccountConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3306,7 +3418,7 @@ var xxx_messageInfo_ServiceAccountConfig proto.InternalMessageInfo func (m *Shoot) Reset() { *m = Shoot{} } func (*Shoot) ProtoMessage() {} func (*Shoot) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{116} + return fileDescriptor_f1caaec5647a9dbf, []int{120} } func (m *Shoot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3334,7 +3446,7 @@ var xxx_messageInfo_Shoot proto.InternalMessageInfo func (m *ShootList) Reset() { *m = ShootList{} } func (*ShootList) ProtoMessage() {} func (*ShootList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{117} + return fileDescriptor_f1caaec5647a9dbf, []int{121} } func (m *ShootList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3362,7 +3474,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{118} + return fileDescriptor_f1caaec5647a9dbf, []int{122} } func (m *ShootMachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3390,7 +3502,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{119} + return fileDescriptor_f1caaec5647a9dbf, []int{123} } func (m *ShootNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3418,7 +3530,7 @@ var xxx_messageInfo_ShootNetworks proto.InternalMessageInfo func (m *ShootSpec) Reset() { *m = ShootSpec{} } func (*ShootSpec) ProtoMessage() {} func (*ShootSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{120} + return fileDescriptor_f1caaec5647a9dbf, []int{124} } func (m *ShootSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3446,7 +3558,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{121} + return fileDescriptor_f1caaec5647a9dbf, []int{125} } func (m *ShootState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3474,7 +3586,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{122} + return fileDescriptor_f1caaec5647a9dbf, []int{126} } func (m *ShootStateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3502,7 +3614,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{123} + return fileDescriptor_f1caaec5647a9dbf, []int{127} } func (m *ShootStateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3530,7 +3642,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{124} + return fileDescriptor_f1caaec5647a9dbf, []int{128} } func (m *ShootStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3558,7 +3670,7 @@ var xxx_messageInfo_ShootStatus proto.InternalMessageInfo func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} func (*Toleration) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{125} + return fileDescriptor_f1caaec5647a9dbf, []int{129} } func (m *Toleration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3586,7 +3698,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{126} + return fileDescriptor_f1caaec5647a9dbf, []int{130} } func (m *VerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3614,7 +3726,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{127} + return fileDescriptor_f1caaec5647a9dbf, []int{131} } func (m *Volume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3642,7 +3754,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{128} + return fileDescriptor_f1caaec5647a9dbf, []int{132} } func (m *VolumeType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3670,7 +3782,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{129} + return fileDescriptor_f1caaec5647a9dbf, []int{133} } func (m *WatchCacheSizes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3698,7 +3810,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{130} + return fileDescriptor_f1caaec5647a9dbf, []int{134} } func (m *Worker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3726,7 +3838,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{131} + return fileDescriptor_f1caaec5647a9dbf, []int{135} } func (m *WorkerKubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3754,7 +3866,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{132} + return fileDescriptor_f1caaec5647a9dbf, []int{136} } func (m *WorkerSystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3827,8 +3939,11 @@ func init() { proto.RegisterType((*Hibernation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.Hibernation") proto.RegisterType((*HibernationSchedule)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.HibernationSchedule") proto.RegisterType((*HorizontalPodAutoscalerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.HorizontalPodAutoscalerConfig") + proto.RegisterType((*Ingress)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.Ingress") + proto.RegisterType((*IngressController)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.IngressController") proto.RegisterType((*KubeAPIServerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeAPIServerConfig") proto.RegisterMapType((map[string]bool)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeAPIServerConfig.RuntimeConfigEntry") + proto.RegisterType((*KubeAPIServerRequests)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeAPIServerRequests") proto.RegisterType((*KubeControllerManagerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeControllerManagerConfig") proto.RegisterType((*KubeProxyConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeProxyConfig") proto.RegisterType((*KubeSchedulerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeSchedulerConfig") @@ -3887,6 +4002,7 @@ func init() { proto.RegisterType((*Seed)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.Seed") proto.RegisterType((*SeedBackup)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.SeedBackup") proto.RegisterType((*SeedDNS)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.SeedDNS") + proto.RegisterType((*SeedDNSProvider)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.SeedDNSProvider") proto.RegisterType((*SeedList)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.SeedList") proto.RegisterType((*SeedNetworks)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.SeedNetworks") proto.RegisterType((*SeedProvider)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.SeedProvider") @@ -3930,559 +4046,573 @@ func init() { } var fileDescriptor_f1caaec5647a9dbf = []byte{ - // 8821 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0xbd, 0x7d, 0x6c, 0x24, 0xc9, - 0x75, 0x18, 0x7e, 0x3d, 0xfc, 0x9a, 0x79, 0x43, 0x72, 0xc9, 0xda, 0x8f, 0xe3, 0xed, 0xed, 0xed, - 0xac, 0x5a, 0x3a, 0xff, 0xee, 0x7e, 0x92, 0xb9, 0x3e, 0x9d, 0x64, 0xe9, 0x4e, 0xba, 0xd3, 0x72, - 0x66, 0xb8, 0xbb, 0xa3, 0x5d, 0xee, 0xf2, 0x6a, 0x96, 0x77, 0xfa, 0x08, 0x7c, 0x6a, 0x76, 0x17, - 0x87, 0x7d, 0xec, 0xe9, 0x9e, 0xeb, 0xee, 0xe1, 0x2e, 0xf7, 0x9c, 0x48, 0x91, 0x6d, 0x39, 0x89, - 0x13, 0x23, 0x86, 0x15, 0x28, 0x88, 0x0c, 0x2b, 0x32, 0x02, 0xc3, 0x41, 0x82, 0xc8, 0x08, 0x62, - 0x07, 0x46, 0x02, 0xff, 0x61, 0xff, 0x61, 0x45, 0x0e, 0x0c, 0x21, 0x70, 0x0c, 0xc5, 0x70, 0xa8, - 0x88, 0x01, 0xf2, 0xe1, 0x7c, 0xfc, 0x13, 0xe4, 0x9f, 0x85, 0x13, 0x04, 0xf5, 0xd1, 0xd5, 0xd5, - 0x3d, 0xdd, 0xe4, 0xb0, 0x9b, 0xcb, 0xbb, 0xfb, 0x6b, 0xa6, 0xeb, 0x55, 0xbd, 0x57, 0x1f, 0xaf, - 0x5e, 0xbd, 0x7a, 0xf5, 0xea, 0x15, 0xb4, 0x7a, 0x76, 0xb8, 0x3d, 0xdc, 0x5c, 0x36, 0xbd, 0xfe, - 0xd5, 0x9e, 0xe1, 0x5b, 0xc4, 0x25, 0x7e, 0xfc, 0x67, 0xb0, 0xd3, 0xbb, 0x6a, 0x0c, 0xec, 0xe0, - 0xaa, 0xe9, 0xf9, 0xe4, 0xea, 0xee, 0x0b, 0x86, 0x33, 0xd8, 0x36, 0x5e, 0xb8, 0xda, 0xa3, 0x40, - 0x23, 0x24, 0xd6, 0xf2, 0xc0, 0xf7, 0x42, 0x0f, 0xbd, 0x18, 0x23, 0x59, 0x8e, 0xca, 0xc6, 0x7f, - 0x06, 0x3b, 0xbd, 0x65, 0x8a, 0x64, 0x99, 0x22, 0x59, 0x8e, 0x90, 0x5c, 0x6c, 0x1e, 0x8b, 0xf2, - 0x26, 0x09, 0x47, 0x09, 0x5f, 0xfc, 0x71, 0x15, 0x87, 0xd7, 0xf3, 0xae, 0xb2, 0xe4, 0xcd, 0xe1, - 0x16, 0xfb, 0x62, 0x1f, 0xec, 0x9f, 0xc8, 0xfe, 0xfc, 0xce, 0x27, 0x83, 0x65, 0xdb, 0xa3, 0x88, - 0xaf, 0x1a, 0xc3, 0xd0, 0x0b, 0x4c, 0xc3, 0xb1, 0xdd, 0xde, 0xd5, 0xdd, 0x51, 0xcc, 0xba, 0x92, - 0x55, 0x54, 0xe1, 0xd0, 0x3c, 0xfe, 0xa6, 0x61, 0x66, 0xe5, 0xf9, 0x58, 0x9c, 0xa7, 0x6f, 0x98, - 0xdb, 0xb6, 0x4b, 0xfc, 0xbd, 0xa8, 0x71, 0x57, 0x7d, 0x12, 0x78, 0x43, 0xdf, 0x24, 0xc7, 0x2a, - 0x15, 0x5c, 0xed, 0x93, 0xd0, 0xc8, 0xa2, 0x75, 0x35, 0xaf, 0x94, 0x3f, 0x74, 0x43, 0xbb, 0x3f, - 0x4a, 0xe6, 0x27, 0x8f, 0x2a, 0x10, 0x98, 0xdb, 0xa4, 0x6f, 0x8c, 0x94, 0x7b, 0x31, 0xaf, 0xdc, - 0x30, 0xb4, 0x9d, 0xab, 0xb6, 0x1b, 0x06, 0xa1, 0x9f, 0x2e, 0xa4, 0x7f, 0x14, 0xa6, 0x56, 0x2c, - 0xcb, 0x73, 0xd1, 0xf3, 0x30, 0x43, 0x5c, 0x63, 0xd3, 0x21, 0xd6, 0x92, 0x76, 0x45, 0x7b, 0xae, - 0xda, 0x3c, 0xf3, 0xdd, 0xfd, 0xc6, 0x13, 0x07, 0xfb, 0x8d, 0x99, 0x55, 0x9e, 0x8c, 0x23, 0xb8, - 0xfe, 0x8d, 0x0a, 0x4c, 0xb3, 0x42, 0x01, 0xfa, 0x65, 0x0d, 0xce, 0xee, 0x0c, 0x37, 0x89, 0xef, - 0x92, 0x90, 0x04, 0x6d, 0x23, 0xd8, 0xde, 0xf4, 0x0c, 0x9f, 0xa3, 0xa8, 0x7f, 0xf4, 0xe6, 0x72, - 0x01, 0x16, 0x5c, 0xbe, 0x35, 0x8a, 0xaf, 0xf9, 0xe4, 0xc1, 0x7e, 0xe3, 0x6c, 0x06, 0x00, 0x67, - 0x51, 0x47, 0xf7, 0x61, 0xd6, 0xed, 0xd9, 0xee, 0x83, 0x8e, 0xdb, 0xf3, 0x49, 0x10, 0x2c, 0x55, - 0x58, 0x6d, 0x56, 0x0a, 0xd5, 0xe6, 0x8e, 0x82, 0xa8, 0xb9, 0x70, 0xb0, 0xdf, 0x98, 0x55, 0x53, - 0x70, 0x82, 0x90, 0xfe, 0x35, 0x0d, 0xce, 0xac, 0x58, 0x7d, 0x3b, 0x08, 0x6c, 0xcf, 0x5d, 0x77, - 0x86, 0x3d, 0xdb, 0x45, 0x57, 0x60, 0xd2, 0x35, 0xfa, 0x84, 0x75, 0x49, 0xad, 0x39, 0x2b, 0x7a, - 0x75, 0xf2, 0x8e, 0xd1, 0x27, 0x98, 0x41, 0xd0, 0x6b, 0x30, 0x6d, 0x7a, 0xee, 0x96, 0xdd, 0x13, - 0x15, 0xfd, 0xf1, 0x65, 0x3e, 0x92, 0xcb, 0xea, 0x48, 0xb2, 0xfa, 0x09, 0x0e, 0x58, 0xc6, 0xc6, - 0xfd, 0xd5, 0x07, 0x21, 0x71, 0x29, 0x99, 0x26, 0x1c, 0xec, 0x37, 0xa6, 0x5b, 0x0c, 0x01, 0x16, - 0x88, 0xf4, 0xeb, 0x50, 0x5d, 0x71, 0x88, 0x1f, 0xda, 0x6e, 0x0f, 0xbd, 0x0c, 0xf3, 0xa4, 0x6f, - 0xd8, 0x0e, 0x26, 0x26, 0xb1, 0x77, 0x89, 0x1f, 0x2c, 0x69, 0x57, 0x26, 0x9e, 0xab, 0x35, 0xd1, - 0xc1, 0x7e, 0x63, 0x7e, 0x35, 0x01, 0xc1, 0xa9, 0x9c, 0xfa, 0x57, 0x35, 0xa8, 0xaf, 0x0c, 0x2d, - 0x3b, 0xe4, 0xf8, 0x51, 0x00, 0x75, 0x83, 0x7e, 0xae, 0x7b, 0x8e, 0x6d, 0xee, 0x89, 0x61, 0xbe, - 0x56, 0xa8, 0x63, 0x57, 0x62, 0x3c, 0xcd, 0x33, 0x07, 0xfb, 0x8d, 0xba, 0x92, 0x80, 0x55, 0x2a, - 0xfa, 0x36, 0xa8, 0x30, 0xf4, 0x79, 0x98, 0xe5, 0xad, 0x5c, 0x33, 0x06, 0x98, 0x6c, 0x89, 0x4a, - 0x7c, 0x50, 0xe9, 0xb4, 0x88, 0xd2, 0xf2, 0xdd, 0xcd, 0xb7, 0x88, 0x19, 0x62, 0xb2, 0x45, 0x7c, - 0xe2, 0x9a, 0x84, 0x8f, 0x5f, 0x4b, 0x29, 0x8c, 0x13, 0xa8, 0xf4, 0x1f, 0x6a, 0xb0, 0xb0, 0xb2, - 0x6b, 0xd8, 0x8e, 0xb1, 0x69, 0x3b, 0x76, 0xb8, 0xf7, 0x05, 0xcf, 0x25, 0x63, 0x0c, 0xe0, 0x06, - 0x3c, 0x39, 0x74, 0x0d, 0x5e, 0xce, 0x21, 0x6b, 0x7c, 0xc8, 0xee, 0xed, 0x0d, 0x08, 0x65, 0x3d, - 0xda, 0xd5, 0x4f, 0x1f, 0xec, 0x37, 0x9e, 0xdc, 0xc8, 0xce, 0x82, 0xf3, 0xca, 0x22, 0x0c, 0x17, - 0x14, 0xd0, 0xeb, 0x9e, 0x33, 0xec, 0x0b, 0xac, 0x13, 0x0c, 0xeb, 0xc5, 0x83, 0xfd, 0xc6, 0x85, - 0x8d, 0xcc, 0x1c, 0x38, 0xa7, 0xa4, 0xfe, 0xbd, 0x0a, 0xcc, 0x36, 0x0d, 0x73, 0x67, 0x38, 0x68, - 0x0e, 0xcd, 0x1d, 0x12, 0xa2, 0x2f, 0x41, 0x95, 0x4a, 0x2e, 0xcb, 0x08, 0x0d, 0xd1, 0x93, 0x3f, - 0x91, 0xcb, 0x7e, 0x6c, 0x14, 0x69, 0xee, 0xb8, 0x6f, 0xd7, 0x48, 0x68, 0x34, 0x91, 0xe8, 0x13, - 0x88, 0xd3, 0xb0, 0xc4, 0x8a, 0x7a, 0x30, 0x19, 0x0c, 0x88, 0x29, 0x98, 0x7b, 0xb5, 0x10, 0xb3, - 0xa8, 0x55, 0xee, 0x0e, 0x88, 0x19, 0x0f, 0x03, 0xfd, 0xc2, 0x8c, 0x00, 0xf2, 0x60, 0x3a, 0x08, - 0x8d, 0x70, 0x48, 0xfb, 0x87, 0x92, 0xba, 0x51, 0x9e, 0x14, 0x43, 0xd7, 0x9c, 0x17, 0xc4, 0xa6, - 0xf9, 0x37, 0x16, 0x64, 0xf4, 0x1f, 0x68, 0xb0, 0xa0, 0x66, 0xbf, 0x6d, 0x07, 0x21, 0xfa, 0x4b, - 0x23, 0x1d, 0xba, 0x3c, 0x5e, 0x87, 0xd2, 0xd2, 0xac, 0x3b, 0x17, 0x04, 0xb9, 0x6a, 0x94, 0xa2, - 0x74, 0xe6, 0x16, 0x4c, 0xd9, 0x21, 0xe9, 0x73, 0xc6, 0x2a, 0x2a, 0xd3, 0xd4, 0x3a, 0x37, 0xe7, - 0x04, 0xb5, 0xa9, 0x0e, 0xc5, 0x8b, 0x39, 0x7a, 0xfd, 0x4b, 0x70, 0x4e, 0xcd, 0xb5, 0xee, 0x7b, - 0xbb, 0xb6, 0x45, 0x7c, 0x3a, 0x19, 0xc2, 0xbd, 0xc1, 0xc8, 0x64, 0xa0, 0xcc, 0x85, 0x19, 0x04, - 0xfd, 0x18, 0x4c, 0xfb, 0xa4, 0x67, 0x7b, 0x2e, 0x1b, 0xf0, 0x5a, 0xdc, 0x79, 0x98, 0xa5, 0x62, - 0x01, 0xd5, 0xff, 0xbc, 0x92, 0xec, 0x3c, 0x3a, 0x90, 0xe8, 0x3e, 0x54, 0x07, 0x82, 0x94, 0xe8, - 0xbc, 0x4e, 0xe9, 0x16, 0x46, 0x75, 0x8f, 0xfb, 0x35, 0x4a, 0xc1, 0x92, 0x18, 0xb2, 0x61, 0x3e, - 0xfa, 0xdf, 0x2a, 0x21, 0x8b, 0x99, 0x4c, 0x5d, 0x4f, 0x20, 0xc2, 0x29, 0xc4, 0xe8, 0x1e, 0xd4, - 0x02, 0x62, 0xfa, 0x84, 0xca, 0x25, 0xc1, 0xa9, 0x99, 0xc2, 0xab, 0x1b, 0x65, 0x12, 0xc2, 0x6b, - 0x51, 0x54, 0xbf, 0x26, 0x01, 0x38, 0x46, 0x84, 0x2e, 0xc1, 0x64, 0x40, 0x88, 0xb5, 0x34, 0xc9, - 0x3a, 0xbd, 0xca, 0xa6, 0x06, 0x21, 0x16, 0x66, 0xa9, 0xfa, 0xaf, 0x4d, 0x02, 0x1a, 0x65, 0x6c, - 0xb5, 0xd5, 0x3c, 0x45, 0x74, 0x7a, 0x99, 0x56, 0x8b, 0x39, 0x92, 0x42, 0x8c, 0xde, 0x81, 0x39, - 0xc7, 0x08, 0xc2, 0xbb, 0x03, 0xaa, 0x7e, 0x44, 0xdc, 0x51, 0xff, 0x68, 0xb3, 0xd0, 0xf0, 0xde, - 0x56, 0x31, 0x35, 0x17, 0x0f, 0xf6, 0x1b, 0x73, 0x89, 0x24, 0x9c, 0xa4, 0x85, 0x76, 0xa0, 0x46, - 0x13, 0x56, 0x7d, 0xdf, 0xf3, 0x45, 0x97, 0xbf, 0x5a, 0x98, 0x30, 0xc3, 0xd2, 0x9c, 0xa3, 0x23, - 0x21, 0x3f, 0x71, 0x8c, 0x1f, 0x7d, 0x16, 0x90, 0xb7, 0x19, 0x10, 0x7f, 0x97, 0x58, 0x37, 0xb8, - 0xb6, 0x45, 0x9b, 0x4b, 0xc7, 0x65, 0xa2, 0x79, 0x51, 0x8c, 0x21, 0xba, 0x3b, 0x92, 0x03, 0x67, - 0x94, 0x42, 0x3b, 0x80, 0xa4, 0xc6, 0x26, 0x87, 0x7d, 0x69, 0x6a, 0x7c, 0xa6, 0xb9, 0x40, 0x89, - 0xdd, 0x18, 0x41, 0x81, 0x33, 0xd0, 0xea, 0x7f, 0x50, 0x81, 0x3a, 0x67, 0x92, 0x55, 0x37, 0xf4, - 0xf7, 0x4e, 0x61, 0x69, 0xd8, 0x4a, 0x2c, 0x0d, 0xed, 0x12, 0x53, 0x9d, 0xd5, 0x38, 0x77, 0x65, - 0x70, 0x53, 0x2b, 0xc3, 0xf5, 0xd2, 0x94, 0x0e, 0x5f, 0x18, 0xfe, 0x44, 0x83, 0x33, 0x4a, 0xee, - 0x53, 0x58, 0x17, 0x48, 0x72, 0x5d, 0xb8, 0x56, 0xb6, 0x81, 0x39, 0xcb, 0x82, 0x99, 0x68, 0x17, - 0x13, 0xd9, 0x1f, 0x05, 0xd8, 0x64, 0x32, 0xe5, 0x4e, 0xac, 0x24, 0xc9, 0x51, 0x6f, 0x4a, 0x08, - 0x56, 0x72, 0x49, 0x61, 0x55, 0xc9, 0x14, 0x56, 0xff, 0xaa, 0x02, 0x8b, 0x23, 0x7d, 0x3d, 0x2a, - 0x40, 0xb4, 0x77, 0x4b, 0x80, 0x54, 0xde, 0x15, 0x01, 0x32, 0x51, 0x44, 0x80, 0xe8, 0xbf, 0xaf, - 0xc1, 0x44, 0x0b, 0x77, 0xd0, 0x87, 0x13, 0x4a, 0xec, 0x93, 0xaa, 0x12, 0xfb, 0x68, 0xbf, 0x31, - 0xd3, 0xc2, 0x1d, 0x45, 0x9f, 0xfd, 0x45, 0x0d, 0x16, 0x4d, 0xcf, 0x0d, 0x0d, 0xca, 0x91, 0x98, - 0x4b, 0xfc, 0x88, 0xb3, 0x8a, 0xe9, 0x6f, 0xad, 0x14, 0xb6, 0xe6, 0x53, 0xa2, 0x06, 0x8b, 0x69, - 0x48, 0x80, 0x47, 0x49, 0xeb, 0x1b, 0x50, 0x6b, 0x39, 0xde, 0xd0, 0xea, 0xb8, 0x5b, 0xde, 0x09, - 0xaa, 0x20, 0xff, 0x4e, 0x83, 0x59, 0x86, 0x77, 0xdd, 0xf7, 0xb6, 0x6c, 0x87, 0xbc, 0x4f, 0x94, - 0x61, 0xb5, 0xca, 0x79, 0x22, 0x8f, 0xe9, 0xa6, 0x6a, 0xc6, 0xf7, 0x8b, 0x6e, 0xaa, 0xd6, 0x39, - 0x47, 0x08, 0x7d, 0x73, 0x26, 0xd9, 0x34, 0x26, 0x86, 0x9e, 0x83, 0xaa, 0x69, 0x34, 0x87, 0xae, - 0xe5, 0x48, 0xce, 0xa0, 0xd5, 0x6c, 0xad, 0xf0, 0x34, 0x2c, 0xa1, 0xe8, 0x1d, 0x80, 0xd8, 0x68, - 0x20, 0x06, 0xe2, 0x46, 0x49, 0x4b, 0x45, 0x97, 0x84, 0x74, 0xaf, 0x1d, 0xc4, 0xa3, 0x1f, 0xc3, - 0xb0, 0x42, 0x0e, 0xfd, 0x15, 0x98, 0x13, 0xdd, 0xdc, 0xe9, 0x1b, 0x3d, 0xb1, 0x95, 0x2b, 0xda, - 0x57, 0x6b, 0x0a, 0xa6, 0xe6, 0x79, 0x41, 0x79, 0x4e, 0x4d, 0x0d, 0x70, 0x92, 0x1c, 0x7a, 0x08, - 0xb3, 0x7d, 0x75, 0x7f, 0x3a, 0x59, 0x62, 0xb9, 0x50, 0x36, 0xab, 0xcd, 0x73, 0x82, 0xfa, 0x6c, - 0x62, 0x6b, 0x9b, 0xa0, 0x95, 0xa1, 0x63, 0x4f, 0x3d, 0x2e, 0x1d, 0x7b, 0x0b, 0x66, 0xf8, 0x1c, - 0x0f, 0x96, 0xa6, 0x59, 0x0b, 0x3f, 0x55, 0xa8, 0x85, 0x5c, 0x5e, 0xc4, 0xa6, 0x30, 0xfe, 0x1d, - 0xe0, 0x08, 0x39, 0xba, 0x0f, 0xb3, 0x74, 0xc9, 0xea, 0x12, 0x87, 0x98, 0xa1, 0xe7, 0x2f, 0xcd, - 0x94, 0xb0, 0x34, 0x75, 0x15, 0x44, 0xdc, 0x52, 0xa1, 0xa6, 0xe0, 0x04, 0x21, 0x29, 0x04, 0xab, - 0xb9, 0x42, 0x70, 0x17, 0xea, 0xbb, 0x8a, 0xc9, 0xa0, 0xc6, 0xba, 0xe1, 0x33, 0x85, 0x6a, 0x16, - 0x1b, 0x10, 0x9a, 0x67, 0x05, 0xa5, 0xba, 0x6a, 0x6c, 0x50, 0x09, 0xe9, 0x3f, 0x3f, 0x0d, 0x8b, - 0x2d, 0x67, 0x18, 0x84, 0xc4, 0x5f, 0x11, 0xd6, 0x5c, 0xe2, 0xa3, 0xaf, 0x6a, 0x70, 0x81, 0xfd, - 0x6d, 0x7b, 0xf7, 0xdd, 0x36, 0x71, 0x8c, 0xbd, 0x95, 0x2d, 0x9a, 0xc3, 0xb2, 0x8e, 0x27, 0x88, - 0xda, 0x43, 0xb1, 0x66, 0x33, 0xe3, 0x47, 0x37, 0x13, 0x23, 0xce, 0xa1, 0x84, 0x7e, 0x41, 0x83, - 0xa7, 0x32, 0x40, 0x6d, 0xe2, 0x90, 0x90, 0x08, 0x49, 0x70, 0xdc, 0x7a, 0x3c, 0x73, 0xb0, 0xdf, - 0x78, 0xaa, 0x9b, 0x87, 0x14, 0xe7, 0xd3, 0xa3, 0xab, 0xec, 0xc5, 0x0c, 0xe8, 0x75, 0xc3, 0x76, - 0x86, 0x3e, 0x11, 0x9a, 0xea, 0x71, 0xab, 0x73, 0xf9, 0x60, 0xbf, 0x71, 0xb1, 0x9b, 0x8b, 0x15, - 0x1f, 0x42, 0x11, 0x7d, 0x19, 0xce, 0x4b, 0xe8, 0x86, 0xeb, 0x12, 0x62, 0x11, 0xeb, 0x9e, 0xdd, - 0x27, 0x6c, 0xef, 0x72, 0xfc, 0xaa, 0x3c, 0x75, 0xb0, 0xdf, 0x38, 0xdf, 0xcd, 0x42, 0x88, 0xb3, - 0xe9, 0xa0, 0x1e, 0x3c, 0x13, 0x03, 0x42, 0xdb, 0xb1, 0x1f, 0x32, 0x4c, 0xf7, 0xb6, 0x7d, 0x12, - 0x6c, 0x7b, 0x8e, 0xc5, 0xe4, 0x85, 0xd6, 0xfc, 0xc0, 0xc1, 0x7e, 0xe3, 0x99, 0xee, 0x61, 0x19, - 0xf1, 0xe1, 0x78, 0x90, 0x05, 0xb3, 0x81, 0x69, 0xb8, 0x1d, 0x37, 0x24, 0xfe, 0xae, 0xe1, 0x2c, - 0x4d, 0x17, 0x6a, 0x20, 0x9f, 0xa3, 0x0a, 0x1e, 0x9c, 0xc0, 0xaa, 0xff, 0x37, 0x0d, 0xea, 0x62, - 0x26, 0x30, 0xc5, 0xc5, 0x84, 0x29, 0x93, 0x2e, 0x5b, 0x82, 0xe3, 0x5f, 0x2d, 0xbe, 0x3e, 0x52, - 0x74, 0xf1, 0xe2, 0xc8, 0x92, 0x30, 0xc7, 0x8d, 0xee, 0x67, 0xac, 0x6e, 0xad, 0x92, 0xab, 0x1b, - 0x23, 0x77, 0xc4, 0xca, 0xa6, 0xef, 0x4f, 0x40, 0xad, 0xe5, 0xb9, 0x96, 0xcd, 0x14, 0xe6, 0x17, - 0x12, 0x4a, 0xda, 0x33, 0xaa, 0x7c, 0x7a, 0xb4, 0xdf, 0x98, 0x93, 0x19, 0x15, 0x81, 0xf5, 0x92, - 0xdc, 0xa4, 0x71, 0xad, 0xed, 0x03, 0xc9, 0xcd, 0xd5, 0xa3, 0xfd, 0xc6, 0x19, 0x59, 0x2c, 0xb9, - 0xdf, 0x42, 0xbb, 0x80, 0xa8, 0xfa, 0x7c, 0xcf, 0x37, 0xdc, 0x80, 0xa3, 0xa5, 0x6c, 0xcb, 0x67, - 0xd0, 0xff, 0x3f, 0xde, 0xa8, 0xd2, 0x12, 0xb1, 0x76, 0x7d, 0x7b, 0x04, 0x1b, 0xce, 0xa0, 0x80, - 0xde, 0x82, 0x79, 0x9a, 0xba, 0x31, 0xb0, 0x8c, 0x90, 0x28, 0x53, 0xe5, 0x38, 0x34, 0x2f, 0x08, - 0x9a, 0xf3, 0xb7, 0x13, 0x98, 0x70, 0x0a, 0x33, 0x57, 0x6a, 0x8d, 0xc0, 0x73, 0xd9, 0x2c, 0x48, - 0x28, 0xb5, 0x34, 0x15, 0x0b, 0x28, 0x7a, 0x1e, 0x66, 0xfa, 0x24, 0x08, 0x8c, 0x1e, 0x61, 0x6c, - 0x5d, 0x8b, 0x57, 0xaf, 0x35, 0x9e, 0x8c, 0x23, 0x38, 0xfa, 0x08, 0x4c, 0x99, 0x9e, 0x45, 0x82, - 0xa5, 0x19, 0x66, 0x4f, 0xbe, 0xc0, 0x98, 0x89, 0x26, 0x3c, 0xda, 0x6f, 0xd4, 0xd8, 0x5e, 0x84, - 0x7e, 0x61, 0x9e, 0x49, 0xff, 0x16, 0xd5, 0x28, 0x53, 0xaa, 0x79, 0x9e, 0x71, 0x9c, 0x0f, 0x2b, - 0xdb, 0x4c, 0x9c, 0x9e, 0x65, 0x4d, 0xff, 0x7e, 0x05, 0xce, 0xd1, 0x1a, 0xfa, 0x9e, 0xe3, 0x50, - 0x31, 0x3b, 0x70, 0xbc, 0xbd, 0x3e, 0x71, 0xc3, 0x31, 0xb6, 0x0c, 0xa7, 0x68, 0xff, 0xbb, 0x06, - 0xd3, 0x03, 0x7e, 0x7c, 0x32, 0xc1, 0xaa, 0xf3, 0x1c, 0x1d, 0x44, 0x7e, 0xb6, 0xf1, 0x68, 0xbf, - 0x71, 0x31, 0xab, 0x01, 0xe2, 0x54, 0x44, 0x94, 0x43, 0x76, 0x4a, 0xeb, 0xe0, 0x4c, 0xf7, 0xe2, - 0x98, 0xaa, 0xbc, 0xb1, 0x49, 0x9c, 0x71, 0xf5, 0x0c, 0xfd, 0xbf, 0x54, 0xe0, 0x42, 0x5c, 0xa3, - 0x8e, 0x1b, 0x84, 0x86, 0xe3, 0xf0, 0x3d, 0xf1, 0xe3, 0xdf, 0x2c, 0xbd, 0x9d, 0xd8, 0x2c, 0xdd, - 0x2d, 0xbc, 0xf3, 0x1c, 0xad, 0x7c, 0xae, 0xa5, 0x68, 0x2f, 0x65, 0x29, 0x7a, 0xed, 0x24, 0x89, - 0x1e, 0x6e, 0x34, 0xfa, 0xef, 0x1a, 0x5c, 0xcc, 0x2e, 0x78, 0x0a, 0x7b, 0xb7, 0x41, 0x72, 0xef, - 0x76, 0xeb, 0x04, 0x9b, 0x9d, 0xb3, 0x8b, 0xfb, 0xe3, 0xdc, 0xe6, 0xb2, 0xfd, 0xdc, 0x16, 0x9c, - 0xa1, 0x4a, 0x76, 0x10, 0x0a, 0xe3, 0xc6, 0xf1, 0x0e, 0xfa, 0x22, 0x03, 0xc7, 0x19, 0x9c, 0xc4, - 0x81, 0xd3, 0x48, 0xd1, 0x1d, 0x98, 0xa1, 0x0c, 0x4f, 0xf1, 0x57, 0xc6, 0xc7, 0x2f, 0x65, 0x6a, - 0x97, 0x97, 0xc5, 0x11, 0x12, 0xfd, 0xff, 0x68, 0x70, 0xe9, 0xb0, 0xe1, 0x47, 0x3e, 0x80, 0x19, - 0x2d, 0x63, 0xfc, 0x28, 0xb6, 0xb0, 0x2a, 0x10, 0xa1, 0x89, 0xa7, 0x91, 0x4c, 0x0a, 0xb0, 0x42, - 0x25, 0xc3, 0xce, 0x5f, 0x79, 0x4c, 0x76, 0x7e, 0xfd, 0x7f, 0x68, 0xaa, 0xc0, 0x50, 0xbb, 0xff, - 0x7d, 0x27, 0x30, 0xd4, 0xca, 0xe7, 0xda, 0x59, 0x92, 0xb3, 0x56, 0x2d, 0xf2, 0xfe, 0x9b, 0xb5, - 0x6a, 0xed, 0x73, 0x66, 0xed, 0x2f, 0x55, 0xf2, 0x9a, 0xcb, 0x66, 0xed, 0x03, 0xa8, 0x45, 0xee, - 0x33, 0x11, 0x6f, 0xdf, 0x28, 0x5d, 0x29, 0x8e, 0x2f, 0x3e, 0xff, 0x8a, 0x52, 0x02, 0x1c, 0x13, - 0x43, 0x7b, 0x00, 0x96, 0x5c, 0x2f, 0x05, 0x03, 0x74, 0x4a, 0x92, 0x8e, 0x17, 0xe0, 0xe6, 0x3c, - 0xe5, 0xb9, 0xf8, 0x1b, 0x2b, 0xc4, 0xf4, 0xdf, 0xac, 0x00, 0x1a, 0xad, 0x2f, 0x55, 0x3a, 0x76, - 0x6c, 0xd7, 0x4a, 0x2b, 0x1d, 0xb7, 0x6c, 0xd7, 0xc2, 0x0c, 0x22, 0xd5, 0x92, 0x4a, 0xae, 0x5a, - 0xf2, 0x0a, 0x9c, 0xe9, 0x39, 0xde, 0xa6, 0xe1, 0x38, 0x7b, 0xc2, 0x0d, 0x87, 0xad, 0x4b, 0xd5, - 0xe6, 0x59, 0x2a, 0xdc, 0x6e, 0x24, 0x41, 0x38, 0x9d, 0x17, 0x0d, 0x60, 0xc1, 0x27, 0xa6, 0xe7, - 0x9a, 0xb6, 0xc3, 0x94, 0x48, 0x6f, 0x18, 0x16, 0xdc, 0xcc, 0x9d, 0x3b, 0xd8, 0x6f, 0x2c, 0xe0, - 0x14, 0x2e, 0x3c, 0x82, 0x1d, 0x3d, 0x0b, 0x33, 0x03, 0xdf, 0xee, 0x1b, 0xfe, 0x1e, 0x53, 0x53, - 0xab, 0xcd, 0x3a, 0x95, 0x92, 0xeb, 0x3c, 0x09, 0x47, 0x30, 0xfd, 0x57, 0x34, 0x98, 0x68, 0xdf, - 0xe9, 0x22, 0x1d, 0xa6, 0x2d, 0xaf, 0x6f, 0xd8, 0xae, 0xe8, 0x25, 0xe6, 0xcb, 0xd2, 0x66, 0x29, - 0x58, 0x40, 0xd0, 0xdb, 0x50, 0x8b, 0x64, 0x4c, 0xb9, 0xe3, 0x8d, 0xf6, 0x9d, 0xae, 0x3c, 0x0b, - 0x96, 0xcc, 0x14, 0xa5, 0x04, 0x38, 0xa6, 0xa2, 0x1b, 0xb0, 0xd8, 0xbe, 0xd3, 0xed, 0xb8, 0xa6, - 0x33, 0xb4, 0xc8, 0xea, 0x03, 0xf6, 0x43, 0x9b, 0x66, 0xf3, 0x14, 0xe1, 0x40, 0xc3, 0x9a, 0x26, - 0x32, 0xe1, 0x08, 0x46, 0xb3, 0x11, 0x5e, 0x42, 0x38, 0x7f, 0xb0, 0x6c, 0x02, 0x09, 0x8e, 0x60, - 0xfa, 0x9f, 0x56, 0xa0, 0xae, 0x54, 0x08, 0xf5, 0x61, 0x86, 0xb7, 0x37, 0x3a, 0x83, 0xbd, 0x5e, - 0xb4, 0x8d, 0xc9, 0x6a, 0x73, 0xf2, 0xbc, 0x4b, 0x03, 0x1c, 0xd1, 0x50, 0xc7, 0xa9, 0x92, 0x3f, - 0x4e, 0x68, 0x19, 0x80, 0x1f, 0x31, 0xb3, 0xc3, 0x1d, 0xae, 0xaf, 0xb2, 0xa9, 0xd0, 0x95, 0xa9, - 0x58, 0xc9, 0x81, 0x2e, 0x09, 0x8e, 0x56, 0x4e, 0xa1, 0x15, 0x6e, 0xee, 0xc1, 0xd4, 0x43, 0xcf, - 0x25, 0x81, 0xb0, 0xfb, 0x9d, 0x54, 0x0b, 0x6b, 0x54, 0x4a, 0x7d, 0x81, 0x22, 0xc6, 0x1c, 0xbf, - 0xfe, 0x6d, 0x0d, 0xa0, 0x6d, 0x84, 0x06, 0x37, 0x52, 0x8d, 0xe1, 0xc1, 0x73, 0x29, 0x31, 0x13, - 0xab, 0x23, 0xe7, 0x09, 0x93, 0x81, 0xfd, 0x30, 0x6a, 0xbf, 0x5c, 0x82, 0x38, 0xf6, 0xae, 0xfd, - 0x90, 0x60, 0x06, 0x47, 0x1f, 0x86, 0x1a, 0x71, 0x4d, 0x7f, 0x6f, 0x10, 0x8a, 0x83, 0xf8, 0x2a, - 0x3f, 0xe5, 0x59, 0x8d, 0x12, 0x71, 0x0c, 0xd7, 0x77, 0xa1, 0xba, 0xea, 0x5a, 0x03, 0xcf, 0xe6, - 0xfb, 0x93, 0x23, 0x2a, 0xf8, 0x0c, 0x4c, 0x0c, 0x7d, 0x47, 0xd4, 0xaf, 0x2e, 0x32, 0x4c, 0x6c, - 0xe0, 0xdb, 0x98, 0xa6, 0xd3, 0x4d, 0xdf, 0x60, 0xe8, 0x0f, 0xbc, 0x20, 0xaa, 0xa4, 0x54, 0x50, - 0xd6, 0x79, 0x32, 0x8e, 0xe0, 0xfa, 0x23, 0x0d, 0x16, 0x56, 0x1f, 0x0c, 0x6c, 0x9f, 0xb9, 0x06, - 0x11, 0x9f, 0xae, 0xec, 0xb4, 0xfc, 0x2e, 0xff, 0x2b, 0xea, 0x20, 0xcb, 0x8b, 0x1c, 0x38, 0x82, - 0xa3, 0x2d, 0x98, 0x27, 0xac, 0x38, 0x95, 0x0b, 0x6d, 0x43, 0x1a, 0xce, 0x8e, 0xb3, 0xe7, 0xe5, - 0xae, 0x67, 0x09, 0x2c, 0x38, 0x85, 0x15, 0x75, 0x61, 0xde, 0x74, 0x8c, 0x20, 0xb0, 0xb7, 0x6c, - 0x33, 0x3e, 0x01, 0xab, 0x35, 0x3f, 0x4c, 0xcb, 0xb6, 0x12, 0x90, 0x47, 0xfb, 0x8d, 0xf3, 0xa2, - 0x9e, 0x49, 0x00, 0x4e, 0xa1, 0xd0, 0x7f, 0x4f, 0x83, 0x9a, 0xd4, 0x67, 0xde, 0x5b, 0xdb, 0xc2, - 0xe7, 0xa0, 0x6a, 0xd9, 0x81, 0x2a, 0xe3, 0xd9, 0x01, 0x46, 0x5b, 0xa4, 0x61, 0x09, 0xd5, 0xff, - 0x75, 0x05, 0x2e, 0x48, 0xdc, 0xd1, 0x72, 0x43, 0xd5, 0xaf, 0x71, 0xd6, 0x9c, 0x4b, 0x82, 0xd5, - 0x14, 0x4e, 0x57, 0xd8, 0xec, 0xd9, 0x34, 0x1f, 0xd5, 0xb3, 0x78, 0x08, 0xdd, 0x81, 0x29, 0xba, - 0x69, 0x89, 0xcc, 0x1d, 0xc7, 0xec, 0x0d, 0x36, 0x5f, 0x59, 0x7d, 0x31, 0x47, 0x83, 0xde, 0x51, - 0xd5, 0x86, 0x29, 0x26, 0xe2, 0x3f, 0x7b, 0x3c, 0xe1, 0xc0, 0x3c, 0x91, 0x97, 0x69, 0x4b, 0xac, - 0xa8, 0x47, 0x32, 0x3c, 0x67, 0xb2, 0x34, 0x07, 0x3d, 0x80, 0xea, 0x0d, 0x81, 0x16, 0x5d, 0x84, - 0x8a, 0x1d, 0xf5, 0x1e, 0x88, 0x52, 0x95, 0x4e, 0x1b, 0x57, 0x6c, 0x4b, 0x4e, 0xd2, 0x4a, 0xee, - 0x24, 0x55, 0x66, 0xd1, 0xc4, 0xe1, 0xb3, 0x48, 0xff, 0x47, 0x1a, 0x9c, 0x8b, 0xa8, 0x46, 0xb5, - 0xa2, 0x12, 0x6b, 0x0c, 0x51, 0x70, 0xb4, 0xd6, 0x70, 0x17, 0x26, 0x99, 0xc2, 0x39, 0x51, 0x64, - 0x74, 0x24, 0x42, 0x5a, 0x1d, 0xcc, 0x10, 0xe9, 0xdf, 0xd1, 0xa0, 0x7e, 0xd3, 0xde, 0x24, 0xbe, - 0xcb, 0x35, 0xf9, 0x67, 0xd3, 0xce, 0xc2, 0xf5, 0x2c, 0x47, 0x61, 0xb4, 0x07, 0xb5, 0xc0, 0xdc, - 0x26, 0xd6, 0xd0, 0x91, 0xc7, 0xc7, 0xc5, 0x5c, 0x82, 0x15, 0xda, 0x5d, 0x81, 0x50, 0x71, 0x87, - 0x8a, 0x48, 0xe0, 0x98, 0x9a, 0xfe, 0x0e, 0x9c, 0xcd, 0x28, 0x84, 0x1a, 0x8c, 0x71, 0xfd, 0x50, - 0x74, 0x6f, 0xc4, 0x89, 0x7e, 0x88, 0x79, 0x3a, 0x7a, 0x0a, 0x26, 0x88, 0x1b, 0x39, 0x26, 0xcc, - 0x50, 0x19, 0xbb, 0xea, 0x5a, 0x98, 0xa6, 0xd1, 0x09, 0xea, 0x78, 0x09, 0x51, 0xc4, 0x26, 0xe8, - 0x6d, 0x91, 0x86, 0x25, 0x54, 0xff, 0x9b, 0xd3, 0xf0, 0xcc, 0x4d, 0xcf, 0xb7, 0x1f, 0x7a, 0x6e, - 0x68, 0x38, 0xeb, 0x9e, 0x15, 0x1f, 0x84, 0x88, 0xc9, 0xfe, 0x73, 0x1a, 0x3c, 0x69, 0x0e, 0x86, - 0x1d, 0xd7, 0x0e, 0x6d, 0x23, 0xb2, 0x4f, 0xaf, 0x13, 0xdf, 0xf6, 0x8a, 0x9e, 0x87, 0x30, 0x17, - 0xd3, 0xd6, 0xfa, 0x46, 0x16, 0x4a, 0x9c, 0x47, 0x0b, 0xbd, 0x05, 0xf3, 0x96, 0x77, 0xdf, 0xe5, - 0xd6, 0x72, 0xe2, 0x18, 0x7b, 0x05, 0x4f, 0x41, 0x98, 0x80, 0x6b, 0x27, 0x30, 0xe1, 0x14, 0x66, - 0x76, 0x04, 0x24, 0x93, 0xba, 0x21, 0x73, 0xb1, 0x7d, 0x18, 0x77, 0x67, 0xc1, 0x23, 0xa0, 0x76, - 0x26, 0x46, 0x9c, 0x43, 0x09, 0x7d, 0x19, 0xce, 0xdb, 0xbc, 0x23, 0x30, 0x31, 0x2c, 0xdb, 0x25, - 0x41, 0xc0, 0xdb, 0x5d, 0xe2, 0x8c, 0xa3, 0x93, 0x85, 0x10, 0x67, 0xd3, 0x41, 0x3f, 0x05, 0x10, - 0xec, 0xb9, 0xa6, 0x18, 0xeb, 0xa9, 0x42, 0x54, 0xb9, 0x06, 0x26, 0xb1, 0x60, 0x05, 0x23, 0xd5, - 0x41, 0x42, 0xcf, 0x21, 0xbe, 0xe1, 0x9a, 0xdc, 0x00, 0xac, 0x71, 0x1d, 0xe4, 0x5e, 0x94, 0x88, - 0x63, 0x38, 0xb2, 0x60, 0x76, 0x38, 0x50, 0x06, 0x7f, 0xa6, 0xf8, 0x39, 0xc8, 0x86, 0x82, 0x07, - 0x27, 0xb0, 0xea, 0xbf, 0x5e, 0x03, 0xe6, 0xbb, 0xbf, 0xb2, 0xde, 0xe9, 0x12, 0x7f, 0x57, 0x4e, - 0x82, 0x5f, 0xd0, 0x60, 0x21, 0x3e, 0x40, 0x10, 0xeb, 0xab, 0x56, 0xc2, 0x31, 0xe2, 0x56, 0x0a, - 0x59, 0x73, 0x49, 0xc8, 0x88, 0x85, 0x34, 0x04, 0x8f, 0x10, 0x46, 0x7f, 0x43, 0x83, 0x05, 0x23, - 0xe9, 0xbb, 0x1f, 0x09, 0xad, 0x62, 0x8e, 0x69, 0xa9, 0x8b, 0x00, 0x71, 0x65, 0x52, 0x80, 0x00, - 0x8f, 0xd0, 0x45, 0x1f, 0x83, 0x59, 0x63, 0x60, 0xaf, 0x0c, 0x2d, 0x9b, 0x2e, 0x60, 0x91, 0xc3, - 0x37, 0xeb, 0xe8, 0x95, 0xf5, 0x8e, 0x4c, 0xc7, 0x89, 0x5c, 0xd2, 0x3b, 0x5f, 0x74, 0xe5, 0x64, - 0x59, 0xef, 0x7c, 0xd1, 0x8b, 0xb1, 0x77, 0xbe, 0xe8, 0x3c, 0x95, 0x0a, 0xfa, 0x22, 0x3c, 0xc5, - 0xe5, 0x7d, 0xd3, 0x08, 0x6c, 0x73, 0x65, 0x18, 0x6e, 0x13, 0x37, 0x8c, 0x54, 0x36, 0xbe, 0x07, - 0x64, 0x67, 0xa4, 0xab, 0x79, 0x99, 0x70, 0x7e, 0x79, 0xe4, 0x01, 0x78, 0xb6, 0x65, 0x8a, 0x06, - 0xf1, 0x63, 0xba, 0x62, 0x67, 0xd8, 0x77, 0x3b, 0xed, 0x96, 0x68, 0x0f, 0x9b, 0x3e, 0xf1, 0x37, - 0x56, 0x48, 0xa0, 0xbf, 0xab, 0xc1, 0x9c, 0x58, 0x16, 0x05, 0xd1, 0x19, 0xc6, 0x02, 0x5f, 0x2c, - 0xcc, 0x90, 0x29, 0xae, 0x5f, 0xc6, 0x2a, 0x76, 0xee, 0x6b, 0x27, 0x5d, 0x37, 0x12, 0x30, 0x9c, - 0xac, 0x08, 0xfa, 0x86, 0x06, 0xe7, 0x02, 0xe2, 0xef, 0xda, 0x26, 0x59, 0x31, 0x4d, 0x6f, 0xe8, - 0x46, 0xe3, 0x5c, 0x2d, 0x61, 0xec, 0xe8, 0x66, 0x20, 0x6c, 0x2e, 0x1d, 0xec, 0x37, 0xce, 0x65, - 0x41, 0x70, 0x66, 0x05, 0xd0, 0xcf, 0x68, 0x70, 0xe6, 0xbe, 0x11, 0x9a, 0xdb, 0x2d, 0xc3, 0xdc, - 0x66, 0x1b, 0xa2, 0x60, 0xa9, 0x56, 0xc2, 0xa5, 0xf3, 0x8d, 0x24, 0x2e, 0x6e, 0xec, 0x48, 0x25, - 0xe2, 0x34, 0xc5, 0x8b, 0xd7, 0x00, 0x8d, 0xf6, 0x2d, 0x5a, 0x80, 0x89, 0x1d, 0xc2, 0x6f, 0xaa, - 0xd4, 0x30, 0xfd, 0x8b, 0xce, 0xc1, 0xd4, 0xae, 0xe1, 0x0c, 0xb9, 0x02, 0x55, 0xc5, 0xfc, 0xe3, - 0xe5, 0xca, 0x27, 0x35, 0xfd, 0x5b, 0x13, 0xf0, 0x34, 0x1d, 0xb2, 0xd8, 0x98, 0xb3, 0x66, 0xb8, - 0x46, 0xef, 0x3d, 0x2a, 0xb0, 0xbe, 0xa3, 0xc1, 0x93, 0xdb, 0xd9, 0x5a, 0x86, 0x58, 0xc5, 0x71, - 0x31, 0x65, 0xeb, 0x30, 0xcd, 0x85, 0x1f, 0xbe, 0x1f, 0x9a, 0x05, 0xe7, 0xd5, 0x0a, 0x5d, 0x83, - 0x05, 0xd7, 0xb3, 0x48, 0xab, 0xd3, 0xc6, 0x6b, 0x46, 0xb0, 0xd3, 0x8d, 0xf6, 0xd4, 0x53, 0xdc, - 0xbc, 0x74, 0x27, 0x05, 0xc3, 0x23, 0xb9, 0xf5, 0xef, 0x69, 0x70, 0x86, 0x76, 0xcd, 0xba, 0xef, - 0x3d, 0xd8, 0x7b, 0x4f, 0x8e, 0xca, 0xf3, 0x30, 0xd9, 0xf7, 0xac, 0x48, 0x3b, 0x3f, 0x4f, 0x15, - 0xe9, 0x35, 0xcf, 0x22, 0x8f, 0xb8, 0xa9, 0xe9, 0xc1, 0x1e, 0xfd, 0xc0, 0x2c, 0x8b, 0xfe, 0x67, - 0x1a, 0x5f, 0x17, 0x23, 0xed, 0xf4, 0xbd, 0xc9, 0x66, 0x9f, 0x80, 0x39, 0x9a, 0xb6, 0x66, 0x3c, - 0x58, 0x6f, 0xbf, 0xee, 0x39, 0xd1, 0xe9, 0x3c, 0xf3, 0x99, 0xbd, 0xa5, 0x02, 0x70, 0x32, 0x9f, - 0xfe, 0xed, 0x39, 0x60, 0x19, 0x1c, 0x12, 0xbe, 0x27, 0x1b, 0xf6, 0x02, 0xd4, 0xcd, 0xc1, 0xb0, - 0x75, 0xbd, 0xfb, 0xda, 0xd0, 0x0b, 0x0d, 0x61, 0x06, 0x63, 0x6b, 0x5d, 0x6b, 0x7d, 0x23, 0x4a, - 0xc6, 0x6a, 0x1e, 0xca, 0xc0, 0xe6, 0x60, 0x28, 0x84, 0xc2, 0xba, 0x7a, 0x88, 0xcb, 0x18, 0xb8, - 0xb5, 0xbe, 0x91, 0x80, 0xe1, 0x91, 0xdc, 0xe8, 0x2b, 0x1a, 0xcc, 0x92, 0x5d, 0xdb, 0xa4, 0xab, - 0xdb, 0x4d, 0xc3, 0xb7, 0xc4, 0x22, 0xfd, 0xd9, 0xc2, 0xcd, 0x97, 0xbd, 0xbb, 0x2a, 0xb0, 0x72, - 0x2d, 0x61, 0x55, 0xa1, 0x81, 0x13, 0x14, 0xd9, 0x82, 0x2d, 0xbe, 0xe9, 0x60, 0x79, 0xd6, 0x0d, - 0xdf, 0x30, 0x89, 0xa2, 0x90, 0x4e, 0x89, 0x05, 0x3b, 0x2f, 0x13, 0xce, 0x2f, 0x8f, 0xfe, 0xb1, - 0x06, 0x17, 0x24, 0xd4, 0x76, 0xed, 0xfe, 0xb0, 0x8f, 0x89, 0xe9, 0x18, 0x76, 0x5f, 0xac, 0xde, - 0x9f, 0x3b, 0xb9, 0x96, 0x26, 0xf1, 0xf3, 0xed, 0x40, 0x36, 0x0c, 0xe7, 0xd4, 0x09, 0xfd, 0x7d, - 0x0d, 0xae, 0x44, 0xa0, 0x75, 0x9f, 0x04, 0xc1, 0xd0, 0x27, 0xb1, 0x8f, 0x87, 0xe8, 0x93, 0x62, - 0x5a, 0xf1, 0x87, 0x0e, 0xf6, 0x1b, 0x57, 0x56, 0x8f, 0xc0, 0x8d, 0x8f, 0xa4, 0x9e, 0xe0, 0x98, - 0xae, 0xb7, 0x15, 0x8a, 0xe5, 0xfe, 0xb1, 0x71, 0x0c, 0xa5, 0x81, 0x13, 0x14, 0xd1, 0x6f, 0x6a, - 0xf0, 0xa4, 0x9a, 0xa0, 0x32, 0x0c, 0x5f, 0xe7, 0x3f, 0x7f, 0x72, 0xb5, 0x49, 0x11, 0xe0, 0x1b, - 0xdb, 0x1c, 0x20, 0xce, 0xab, 0x16, 0x7a, 0x16, 0x66, 0xfa, 0x8c, 0x39, 0x83, 0x25, 0x60, 0x2c, - 0xcd, 0x2c, 0x14, 0x9c, 0x5f, 0x03, 0x1c, 0xc1, 0xa8, 0x9e, 0x3d, 0xf0, 0xac, 0x75, 0xdb, 0x0a, - 0x6e, 0xdb, 0x7d, 0x3b, 0x5c, 0xaa, 0x33, 0x27, 0x7b, 0xd6, 0x1f, 0xeb, 0x9e, 0xb5, 0xde, 0x69, - 0xf3, 0x74, 0x9c, 0xc8, 0xc5, 0xfc, 0x08, 0xed, 0xbe, 0xd1, 0x23, 0xeb, 0x43, 0xc7, 0x59, 0xf7, - 0x3d, 0x76, 0xf9, 0xb7, 0x4d, 0x0c, 0xcb, 0xb1, 0x5d, 0xb2, 0x34, 0x5b, 0xdc, 0x8f, 0xb0, 0x93, - 0x87, 0x14, 0xe7, 0xd3, 0x43, 0xcb, 0x00, 0x5b, 0x86, 0xed, 0x74, 0xef, 0x1b, 0x83, 0xbb, 0xee, - 0xd2, 0x1c, 0x13, 0x63, 0x4c, 0xc5, 0xbd, 0x2e, 0x53, 0xb1, 0x92, 0x83, 0x31, 0x14, 0x15, 0x86, - 0x98, 0xf0, 0xdb, 0x02, 0x4b, 0xf3, 0x27, 0xc5, 0x50, 0x11, 0x46, 0xde, 0x81, 0xb7, 0x14, 0x1a, - 0x38, 0x41, 0x11, 0x7d, 0x4d, 0x83, 0xf9, 0x60, 0x2f, 0x08, 0x49, 0x5f, 0x56, 0xe2, 0xcc, 0x89, - 0x57, 0x82, 0xd9, 0x24, 0xba, 0x09, 0x2a, 0x38, 0x45, 0x55, 0xdf, 0xaf, 0xc0, 0xf9, 0x4c, 0x2e, - 0x44, 0xaf, 0xc0, 0x99, 0x3e, 0xe9, 0x7b, 0xfe, 0xde, 0x4a, 0x74, 0x8d, 0x56, 0xd8, 0x8c, 0x98, - 0x32, 0xba, 0x96, 0x04, 0xe1, 0x74, 0x5e, 0xba, 0x52, 0xb0, 0x11, 0xbb, 0xde, 0x8d, 0xcb, 0x57, - 0xe2, 0x95, 0xa2, 0x93, 0x82, 0xe1, 0x91, 0xdc, 0xa8, 0x05, 0x8b, 0x22, 0xad, 0x43, 0xd5, 0xa0, - 0xe0, 0xba, 0x4f, 0x22, 0xa3, 0x2c, 0xd5, 0x2a, 0x16, 0x3b, 0x69, 0x20, 0x1e, 0xcd, 0x4f, 0x5b, - 0x41, 0x3f, 0xd4, 0x5a, 0x4c, 0xc6, 0xad, 0xb8, 0x93, 0x04, 0xe1, 0x74, 0xde, 0x48, 0x61, 0x4b, - 0x54, 0x61, 0x2a, 0x6e, 0xc5, 0x9d, 0x14, 0x0c, 0x8f, 0xe4, 0xd6, 0xff, 0x6c, 0x12, 0x3e, 0x38, - 0x86, 0xf0, 0x46, 0xfd, 0xec, 0xee, 0x3e, 0x62, 0x1e, 0x2d, 0x47, 0x56, 0xdc, 0xe5, 0xd7, 0x86, - 0x86, 0x1b, 0xda, 0xe1, 0xde, 0x98, 0xc3, 0x33, 0xc8, 0x19, 0x9e, 0xe3, 0xd3, 0x1b, 0x77, 0x38, - 0x83, 0xbc, 0xe1, 0x3c, 0x3e, 0xc9, 0xf1, 0x87, 0xbf, 0x9f, 0x3d, 0xfc, 0x05, 0x7b, 0xf5, 0x48, - 0x76, 0x19, 0xe4, 0xb0, 0x4b, 0xc1, 0x5e, 0x1d, 0x83, 0xbd, 0xfe, 0xfd, 0x24, 0x7c, 0x68, 0x9c, - 0x55, 0xa4, 0x20, 0x7f, 0x65, 0xc8, 0xe9, 0xc7, 0xca, 0x5f, 0x79, 0x07, 0xef, 0x8f, 0x91, 0xbf, - 0x32, 0x48, 0x3e, 0x6e, 0xfe, 0xca, 0xeb, 0xd5, 0xc7, 0xc5, 0x5f, 0x79, 0xbd, 0x3a, 0x06, 0x7f, - 0xfd, 0xaf, 0xf4, 0xfa, 0x20, 0x97, 0xb0, 0x0e, 0x4c, 0x98, 0x83, 0x61, 0x41, 0x21, 0xc5, 0x0e, - 0x16, 0x5a, 0xeb, 0x1b, 0x98, 0xe2, 0x40, 0x18, 0xa6, 0x39, 0xff, 0x14, 0x14, 0x41, 0xcc, 0x69, - 0x82, 0xb3, 0x24, 0x16, 0x98, 0x68, 0x57, 0x91, 0xc1, 0x36, 0xe9, 0x13, 0xdf, 0x70, 0xba, 0xa1, - 0xe7, 0x1b, 0xbd, 0xa2, 0xd2, 0x86, 0x75, 0xd5, 0x6a, 0x0a, 0x17, 0x1e, 0xc1, 0x4e, 0x3b, 0x64, - 0x60, 0x5b, 0x05, 0xe5, 0x0b, 0xeb, 0x90, 0xf5, 0x4e, 0x1b, 0x53, 0x1c, 0xfa, 0xf7, 0xaa, 0xa0, - 0x78, 0x99, 0xd3, 0x0d, 0x8b, 0xe1, 0x38, 0xde, 0xfd, 0x75, 0xdf, 0xde, 0xb5, 0x1d, 0xd2, 0x23, - 0x96, 0x74, 0x43, 0x0e, 0xc4, 0xf9, 0x13, 0xd3, 0x9e, 0x56, 0xf2, 0x32, 0xe1, 0xfc, 0xf2, 0x54, - 0x97, 0x5b, 0x34, 0xd3, 0xd7, 0x55, 0xc4, 0x40, 0x5c, 0x2f, 0xe8, 0xa1, 0x9f, 0xc2, 0xc6, 0x27, - 0xd4, 0x48, 0x32, 0x1e, 0xa5, 0x8b, 0xfe, 0xaa, 0xc6, 0x77, 0xdb, 0xd2, 0x68, 0x28, 0x06, 0xed, - 0xe6, 0x49, 0x99, 0x1f, 0xe3, 0x7d, 0xbb, 0x04, 0xe0, 0x24, 0x45, 0xf4, 0x6d, 0x0d, 0xce, 0xef, - 0x64, 0x59, 0xc1, 0xc4, 0xd8, 0xae, 0x17, 0xae, 0x4b, 0x8e, 0x5d, 0x8d, 0x9f, 0xa2, 0x64, 0x66, - 0xc0, 0xd9, 0x35, 0x91, 0xfd, 0x24, 0x4d, 0x27, 0x42, 0x0e, 0x14, 0xef, 0xa7, 0x94, 0x11, 0x26, - 0xee, 0x27, 0x09, 0xc0, 0x49, 0x8a, 0xe8, 0x6d, 0xa8, 0xed, 0x44, 0xa6, 0x28, 0xb1, 0xb9, 0x6d, - 0x17, 0x26, 0xaf, 0x18, 0xb4, 0xf8, 0x79, 0x8d, 0x4c, 0xc4, 0x31, 0x15, 0x64, 0xc3, 0xcc, 0x0e, - 0x97, 0x46, 0x62, 0x53, 0xda, 0x2c, 0xaf, 0x2f, 0xf3, 0x9d, 0x91, 0x48, 0xc2, 0x11, 0x7e, 0xf5, - 0x2c, 0xbb, 0x7a, 0x84, 0x47, 0xc8, 0x37, 0x35, 0x38, 0xbf, 0x4b, 0xfc, 0xd0, 0x36, 0xd3, 0x66, - 0xc8, 0x5a, 0x09, 0xa5, 0xfe, 0xf5, 0x2c, 0x8c, 0x9c, 0x55, 0x32, 0x41, 0x38, 0xbb, 0x0e, 0xfa, - 0x7f, 0xd6, 0x60, 0xc4, 0x1a, 0x84, 0x7e, 0x49, 0x83, 0xd9, 0x2d, 0x62, 0x84, 0x43, 0x9f, 0xdc, - 0x30, 0x42, 0xe9, 0xab, 0xf8, 0xc6, 0x89, 0x58, 0xa1, 0x96, 0xaf, 0x2b, 0x98, 0xb9, 0x85, 0x5f, - 0x5e, 0x8f, 0x54, 0x41, 0x38, 0x51, 0x85, 0x8b, 0x9f, 0x81, 0xc5, 0x91, 0x82, 0xc7, 0x32, 0x5f, - 0xff, 0xae, 0xb0, 0x27, 0xa6, 0xc3, 0x61, 0xbd, 0x09, 0x53, 0x86, 0x65, 0xc9, 0x90, 0x1b, 0x2f, - 0x17, 0x3c, 0xcd, 0xb2, 0x54, 0xa7, 0x50, 0xf6, 0x89, 0x39, 0x5e, 0x74, 0x1d, 0x90, 0x91, 0x38, - 0xb7, 0x59, 0xf3, 0xac, 0x68, 0xbb, 0xc4, 0x02, 0x50, 0xac, 0x8c, 0x40, 0x71, 0x46, 0x09, 0xfd, - 0x53, 0x30, 0x9f, 0xbc, 0x74, 0x74, 0x0c, 0xbf, 0x24, 0xfd, 0xaf, 0x6b, 0x80, 0x46, 0x2f, 0xe4, - 0xa2, 0x00, 0xaa, 0x22, 0x47, 0x34, 0xc8, 0xc5, 0x4c, 0x8d, 0x69, 0x97, 0xa9, 0xd8, 0x2f, 0x57, - 0x24, 0x04, 0x58, 0x12, 0xd2, 0xff, 0x42, 0x83, 0xf8, 0x6a, 0x3f, 0xfa, 0x38, 0xd4, 0x2d, 0x12, - 0x98, 0xbe, 0x3d, 0x08, 0xe3, 0x86, 0xc8, 0x8b, 0x94, 0xed, 0x18, 0x84, 0xd5, 0x7c, 0x48, 0x87, - 0xe9, 0xd0, 0x08, 0x76, 0x3a, 0x6d, 0xb1, 0x71, 0x64, 0xcb, 0xfc, 0x3d, 0x96, 0x82, 0x05, 0x24, - 0xbe, 0xc1, 0x33, 0x31, 0xc6, 0x0d, 0x1e, 0xb4, 0x75, 0x02, 0xd7, 0x95, 0xd0, 0xd1, 0x57, 0x95, - 0xf4, 0x7f, 0x53, 0x81, 0x64, 0x38, 0x85, 0xa2, 0x5d, 0x30, 0x7a, 0xbf, 0xaa, 0xf2, 0xd8, 0xee, - 0x57, 0x7d, 0x84, 0x85, 0x1e, 0xe2, 0x01, 0xe3, 0xf8, 0xa1, 0x84, 0x1a, 0x2f, 0x88, 0x47, 0x7b, - 0x93, 0x39, 0xd0, 0x4b, 0xaa, 0x07, 0x54, 0xad, 0xf9, 0xc1, 0x68, 0x5e, 0x30, 0xb7, 0xa6, 0x47, - 0xe2, 0x06, 0x99, 0x6c, 0x7f, 0xc2, 0xd9, 0xe9, 0xe3, 0xc2, 0x7f, 0x67, 0x2a, 0x71, 0xcb, 0x2d, - 0xba, 0x1a, 0xb7, 0x98, 0x28, 0x18, 0x3b, 0xf5, 0xe8, 0x5f, 0xd7, 0x60, 0x46, 0x5c, 0xae, 0x1e, - 0xc3, 0x71, 0xad, 0x07, 0x53, 0x4c, 0x5d, 0x2f, 0xa5, 0xc9, 0x74, 0xb7, 0x3d, 0x2f, 0x4c, 0x5c, - 0x32, 0x67, 0x0e, 0x33, 0xec, 0x2f, 0xe6, 0xf8, 0xf5, 0x6f, 0x4e, 0xc2, 0x15, 0x91, 0x65, 0x64, - 0x99, 0x96, 0x93, 0x70, 0x0f, 0xce, 0x8a, 0x61, 0x6a, 0xfb, 0x86, 0xed, 0x46, 0xae, 0xc8, 0xc5, - 0x76, 0x60, 0x2c, 0x16, 0xe0, 0xda, 0x28, 0x3a, 0x9c, 0x45, 0x03, 0xfd, 0x34, 0x9c, 0x13, 0xc9, - 0x37, 0x89, 0xe1, 0x84, 0xdb, 0x11, 0xed, 0x62, 0xbb, 0x31, 0x76, 0x32, 0xba, 0x96, 0x81, 0x0f, - 0x67, 0x52, 0x61, 0x3e, 0x2f, 0x02, 0xd0, 0xf2, 0x89, 0x11, 0x5d, 0x1c, 0xa4, 0x15, 0x28, 0xe1, - 0xf3, 0xb2, 0x96, 0x89, 0x11, 0xe7, 0x50, 0x62, 0xa6, 0x2c, 0xe3, 0x01, 0xdb, 0x19, 0x63, 0x12, - 0xfa, 0x36, 0xbb, 0xf6, 0x4f, 0x19, 0x9c, 0xef, 0x65, 0x93, 0x20, 0x9c, 0xce, 0x8b, 0x5e, 0x86, - 0x79, 0x76, 0x0e, 0x17, 0x5f, 0x5a, 0x99, 0x8a, 0xe3, 0x07, 0xde, 0x49, 0x40, 0x70, 0x2a, 0xa7, - 0xfe, 0x1b, 0x1a, 0xcc, 0xaa, 0x0c, 0x34, 0x86, 0x7b, 0xdb, 0xae, 0x22, 0xb0, 0xcb, 0xf8, 0x8c, - 0xa9, 0x64, 0xc7, 0x94, 0xd9, 0x67, 0x33, 0xca, 0xb0, 0x43, 0x2b, 0x92, 0x12, 0xfe, 0xa5, 0x0e, - 0xad, 0x46, 0x56, 0x12, 0x79, 0x68, 0x95, 0x86, 0xe0, 0x11, 0xc2, 0xe8, 0x0d, 0x98, 0x30, 0x7d, - 0x5b, 0x74, 0xcc, 0x27, 0x8b, 0xed, 0x4f, 0x70, 0x27, 0xf6, 0x20, 0x6e, 0xe1, 0x0e, 0xa6, 0x18, - 0xf5, 0xdf, 0x99, 0x80, 0xba, 0x12, 0xbb, 0x01, 0xad, 0x95, 0xd9, 0xdf, 0xc6, 0xe8, 0xa3, 0x3d, - 0xee, 0x1a, 0x4c, 0xf4, 0x06, 0xc3, 0x82, 0x1b, 0x5c, 0x89, 0xee, 0x06, 0x45, 0xd7, 0x1b, 0x0c, - 0xd1, 0xeb, 0x72, 0xcb, 0x5c, 0x6c, 0x53, 0x2b, 0xef, 0xe0, 0xa5, 0xb6, 0xcd, 0x11, 0x7b, 0x4e, - 0xe6, 0xb2, 0xa7, 0x0b, 0x33, 0x81, 0xd8, 0x4f, 0x4f, 0x95, 0x08, 0x1d, 0xa2, 0x74, 0xb5, 0xd8, - 0x40, 0x73, 0x3d, 0x3c, 0xda, 0x5f, 0x47, 0x44, 0xa8, 0x16, 0x30, 0x64, 0x7e, 0xbf, 0x6c, 0x8b, - 0x51, 0xe5, 0x5a, 0xc0, 0x06, 0x4b, 0xc1, 0x02, 0xa2, 0xff, 0x33, 0x0d, 0xd0, 0x28, 0x42, 0xf4, - 0x41, 0x98, 0x62, 0xee, 0xcf, 0x62, 0xb2, 0x29, 0xf7, 0xc5, 0x8d, 0x20, 0xc0, 0x1c, 0x86, 0xde, - 0x10, 0xbe, 0xed, 0xc5, 0x46, 0x46, 0x2e, 0xe1, 0x82, 0xa6, 0xe2, 0x0c, 0x1f, 0xad, 0x51, 0x13, - 0x79, 0x6b, 0x94, 0xfe, 0xc3, 0x0a, 0x65, 0x39, 0xdb, 0x0d, 0x89, 0xcb, 0xbc, 0xd1, 0x1e, 0x02, - 0x18, 0xc3, 0xd0, 0xe3, 0x6b, 0xb2, 0xe0, 0xbc, 0xcf, 0x16, 0xec, 0x5d, 0x89, 0x75, 0x45, 0x62, - 0xe4, 0x87, 0x22, 0xf1, 0x37, 0x56, 0xa8, 0x51, 0xda, 0xa1, 0xdd, 0x27, 0x6f, 0xd8, 0xae, 0xe5, - 0xdd, 0x17, 0x9d, 0x51, 0x9a, 0xf6, 0x3d, 0x89, 0x91, 0xd3, 0x8e, 0xbf, 0xb1, 0x42, 0x0d, 0x7d, - 0x0e, 0x96, 0x58, 0x14, 0x52, 0x97, 0x45, 0xb2, 0x11, 0x95, 0xf3, 0x1c, 0x27, 0x5a, 0x25, 0xaa, - 0xcd, 0x4b, 0x07, 0xfb, 0x8d, 0xa5, 0x56, 0x4e, 0x1e, 0x9c, 0x5b, 0x5a, 0xff, 0x8e, 0x06, 0xe7, - 0x33, 0xfb, 0x02, 0xdd, 0x80, 0xc5, 0xf8, 0x40, 0x5c, 0x95, 0x6a, 0xd5, 0x38, 0x34, 0xd3, 0xad, - 0x74, 0x06, 0x3c, 0x5a, 0x06, 0xad, 0xc9, 0xa5, 0x5d, 0x95, 0x9a, 0xe2, 0x34, 0xfd, 0x69, 0x81, - 0x2a, 0x4b, 0xb0, 0xe2, 0xac, 0x72, 0xfa, 0x17, 0x13, 0x15, 0x8e, 0x3b, 0x8c, 0x32, 0xf3, 0x26, - 0xe9, 0xc9, 0x8b, 0x42, 0x92, 0x99, 0x9b, 0x34, 0x11, 0x73, 0x18, 0x7a, 0x46, 0xf5, 0xde, 0x95, - 0x52, 0x23, 0xf2, 0xe0, 0xd5, 0x87, 0x00, 0x6b, 0x9e, 0x6b, 0x87, 0x9e, 0x6f, 0xbb, 0x3d, 0xd4, - 0x83, 0xaa, 0x21, 0x62, 0xe4, 0x0a, 0x66, 0x7b, 0xa5, 0xd8, 0xce, 0x48, 0x20, 0xe1, 0xee, 0xc0, - 0xd1, 0x17, 0x96, 0xc8, 0xf5, 0x7f, 0xa8, 0xc1, 0x85, 0x6c, 0xcf, 0xf4, 0x31, 0x96, 0xc3, 0x3e, - 0xd4, 0xfd, 0xb8, 0x98, 0xe0, 0xcc, 0x9f, 0x54, 0xef, 0xa8, 0x2a, 0x31, 0xb3, 0xa9, 0xaa, 0xd0, - 0xf2, 0xbd, 0x20, 0x1a, 0x9d, 0xf4, 0xb5, 0x55, 0x39, 0x5d, 0x95, 0x9a, 0x60, 0x15, 0xbf, 0xfe, - 0xd5, 0x0a, 0xc0, 0x1d, 0x12, 0xde, 0xf7, 0xfc, 0x1d, 0xda, 0x47, 0xef, 0xa9, 0x1b, 0x12, 0x97, - 0x60, 0x72, 0xe0, 0x59, 0x81, 0x90, 0x28, 0xec, 0xea, 0x02, 0x3b, 0xcd, 0x65, 0xa9, 0xa8, 0x01, - 0x53, 0xcc, 0x6e, 0x2b, 0x64, 0x37, 0xd3, 0x54, 0xa9, 0x76, 0x12, 0x60, 0x9e, 0x8e, 0x9e, 0x83, - 0xaa, 0xf0, 0x5e, 0x0b, 0x84, 0xee, 0xcd, 0x06, 0x4c, 0xf8, 0xb9, 0x05, 0x58, 0x42, 0xf5, 0x9f, - 0x9d, 0x84, 0x44, 0x94, 0xe7, 0x78, 0x07, 0x3d, 0xf9, 0x98, 0x76, 0xd0, 0x9f, 0x83, 0x25, 0xc7, - 0x33, 0xac, 0xa6, 0xe1, 0x50, 0xb6, 0xf7, 0xbb, 0x7c, 0x3c, 0x0c, 0xb7, 0x47, 0xa2, 0x68, 0xcd, - 0x4c, 0x04, 0xdc, 0xce, 0xc9, 0x83, 0x73, 0x4b, 0xa3, 0xa1, 0x12, 0x5c, 0x9a, 0xea, 0x0c, 0x6b, - 0xa5, 0xa3, 0x60, 0x2f, 0xab, 0xae, 0x8b, 0x72, 0x21, 0x4d, 0x06, 0xa0, 0x46, 0x5f, 0xd3, 0xe0, - 0x3c, 0x79, 0x10, 0x12, 0xdf, 0x35, 0x9c, 0x7b, 0xbe, 0xb1, 0xb5, 0x65, 0x9b, 0x09, 0x7f, 0x99, - 0xf5, 0x83, 0xfd, 0xc6, 0xf9, 0xd5, 0xac, 0x0c, 0x8f, 0xf6, 0x1b, 0x2f, 0x8e, 0x86, 0x79, 0x8f, - 0x1c, 0x15, 0x33, 0x8b, 0x30, 0x76, 0xcc, 0x26, 0x77, 0xf1, 0x25, 0xa8, 0x1f, 0xc3, 0x1d, 0xb0, - 0xa6, 0xda, 0x53, 0x7e, 0x75, 0x1a, 0x14, 0x37, 0xd1, 0x63, 0x44, 0x18, 0xfb, 0x07, 0x1a, 0x9c, - 0x33, 0x1d, 0x9b, 0xb8, 0x61, 0xca, 0x1d, 0x96, 0x4f, 0x8d, 0xd7, 0x8b, 0x39, 0xb0, 0x0e, 0x88, - 0xdb, 0x69, 0xb7, 0x3c, 0xd7, 0x25, 0x66, 0xd8, 0xca, 0xc0, 0xce, 0x37, 0x27, 0x59, 0x10, 0x9c, - 0x59, 0x1b, 0xd6, 0x20, 0x96, 0xde, 0x69, 0xab, 0x17, 0x1a, 0x5a, 0x22, 0x0d, 0x4b, 0x28, 0x7a, - 0x01, 0xea, 0x3d, 0xdf, 0x1b, 0x0e, 0x82, 0x16, 0xf3, 0xe4, 0xe1, 0x33, 0x8c, 0xb9, 0x4a, 0xdd, - 0x88, 0x93, 0xb1, 0x9a, 0x07, 0x7d, 0x0c, 0x66, 0xf9, 0xe7, 0xba, 0x4f, 0xb6, 0xec, 0x07, 0x62, - 0xc6, 0x31, 0xc7, 0x80, 0x1b, 0x4a, 0x3a, 0x4e, 0xe4, 0x42, 0x1f, 0x86, 0x9a, 0x1d, 0x04, 0x43, - 0xe2, 0x6f, 0xe0, 0xdb, 0x22, 0x7c, 0x09, 0xb3, 0x86, 0x76, 0xa2, 0x44, 0x1c, 0xc3, 0xd1, 0x2f, - 0x6b, 0x30, 0xef, 0x93, 0xb7, 0x87, 0xb6, 0x4f, 0x2c, 0x46, 0x34, 0x10, 0xce, 0xba, 0xdd, 0x92, - 0x1e, 0xc2, 0xcb, 0x38, 0x81, 0x95, 0x73, 0xba, 0xb4, 0x23, 0x24, 0x81, 0x38, 0x55, 0x05, 0xda, - 0x57, 0x81, 0xdd, 0x73, 0x6d, 0xb7, 0xb7, 0xe2, 0xf4, 0x82, 0xa5, 0x2a, 0x9b, 0xbd, 0xac, 0xaf, - 0xba, 0x71, 0x32, 0x56, 0xf3, 0xa0, 0x4f, 0xc0, 0xdc, 0x30, 0xa0, 0xbc, 0xdb, 0x27, 0xbc, 0x83, - 0x6b, 0xb1, 0x8b, 0xdd, 0x86, 0x0a, 0xc0, 0xc9, 0x7c, 0x74, 0x6b, 0x16, 0x25, 0x88, 0x6e, 0x06, - 0x7e, 0x45, 0x91, 0xd6, 0x73, 0x23, 0x01, 0xc1, 0xa9, 0x9c, 0x17, 0x57, 0xe0, 0x6c, 0x46, 0x33, - 0x8f, 0x35, 0x41, 0x7e, 0xa3, 0x02, 0x1f, 0x38, 0x92, 0x2d, 0xd1, 0xaf, 0x6a, 0x50, 0x27, 0x0f, - 0x42, 0xdf, 0x90, 0x0e, 0x7f, 0x74, 0x8c, 0x7a, 0x8f, 0x67, 0x12, 0x2c, 0xaf, 0xc6, 0x94, 0xf8, - 0xb8, 0xc9, 0x35, 0x4f, 0x81, 0x60, 0xb5, 0x42, 0x54, 0xc5, 0xe6, 0x57, 0x58, 0x55, 0x43, 0x9b, - 0x08, 0x8b, 0x2b, 0x20, 0x17, 0x5f, 0x85, 0x85, 0x34, 0xe6, 0x63, 0x75, 0xd5, 0x6f, 0x55, 0x60, - 0x6a, 0xdd, 0x31, 0xdc, 0xd3, 0x08, 0xb8, 0xfe, 0xa5, 0x44, 0x14, 0x84, 0x62, 0xb1, 0x25, 0x58, - 0x5d, 0x73, 0xa3, 0xa4, 0x6c, 0xa7, 0xa2, 0xa4, 0x5c, 0x2b, 0x41, 0xe3, 0xf0, 0xa0, 0x28, 0xdf, - 0xd3, 0xa0, 0xc6, 0xf2, 0x9d, 0x42, 0x34, 0x85, 0x37, 0x93, 0xd1, 0x14, 0x5e, 0x2e, 0xde, 0xa8, - 0x9c, 0xe0, 0x09, 0x7f, 0x12, 0x35, 0x86, 0xc5, 0x4a, 0xf8, 0xbc, 0x1a, 0x07, 0x9c, 0xb7, 0xe6, - 0xb9, 0xac, 0xd8, 0x23, 0xb7, 0x3d, 0xd3, 0x70, 0xd2, 0x9a, 0xdc, 0xe1, 0xc1, 0xc0, 0x5d, 0xa8, - 0x11, 0x71, 0xb7, 0x38, 0x6a, 0x4d, 0x31, 0xdd, 0x36, 0xba, 0xa1, 0x1c, 0xd3, 0x8b, 0x52, 0x02, - 0x1c, 0x93, 0xd0, 0x7f, 0xb7, 0x02, 0x75, 0x65, 0x34, 0xdf, 0x95, 0x18, 0x27, 0xd7, 0x33, 0xa3, - 0xe6, 0x56, 0x98, 0x43, 0xdf, 0x85, 0x63, 0x84, 0xdc, 0x0e, 0xa0, 0x6e, 0xc6, 0x41, 0xdb, 0x4a, - 0x31, 0xb8, 0x12, 0xfc, 0x4d, 0x38, 0x16, 0xc7, 0x09, 0x58, 0xa5, 0xa2, 0xff, 0x8b, 0x0a, 0xcc, - 0xac, 0xfb, 0x1e, 0x1d, 0xe3, 0x53, 0x10, 0x10, 0x9b, 0x09, 0x01, 0x51, 0x70, 0xf2, 0xf2, 0xda, - 0xe6, 0x8a, 0x88, 0xb7, 0x52, 0x22, 0xa2, 0x59, 0x8a, 0xca, 0xe1, 0x42, 0xe2, 0x8f, 0x34, 0xa8, - 0x8b, 0x9c, 0xa7, 0x20, 0x26, 0x8c, 0xa4, 0x98, 0xf8, 0x74, 0x99, 0x86, 0xe5, 0x08, 0x8a, 0xbf, - 0xa7, 0xc1, 0x9c, 0xc8, 0xb1, 0x46, 0xfa, 0x9b, 0xc4, 0x47, 0xd7, 0x61, 0x26, 0x18, 0xb2, 0xb1, - 0x14, 0x2d, 0x7a, 0x5a, 0x15, 0x15, 0xfe, 0xa6, 0x61, 0xb2, 0xe8, 0xef, 0x3c, 0x8b, 0x12, 0x9e, - 0x88, 0x27, 0xe0, 0xa8, 0x30, 0xdd, 0xd0, 0xf9, 0x9e, 0x33, 0x72, 0x79, 0x18, 0x7b, 0x0e, 0xc1, - 0x0c, 0x42, 0xf7, 0x51, 0xf4, 0x37, 0x3a, 0x52, 0x62, 0xfb, 0x28, 0x0a, 0x0e, 0x30, 0x4f, 0xd7, - 0x7f, 0x7e, 0x52, 0xf6, 0x36, 0x93, 0x63, 0x37, 0xa1, 0x66, 0xfa, 0xc4, 0x08, 0x89, 0xd5, 0xdc, - 0x1b, 0xa7, 0x72, 0x4c, 0xa1, 0x6b, 0x45, 0x25, 0x70, 0x5c, 0x98, 0xaa, 0x4e, 0xea, 0x29, 0x51, - 0x25, 0x56, 0x33, 0x73, 0x4f, 0x88, 0x3e, 0x0d, 0x53, 0xde, 0x7d, 0x57, 0xfa, 0x49, 0x1c, 0x4a, - 0x98, 0x35, 0xe5, 0x2e, 0xcd, 0x8d, 0x79, 0x21, 0xf5, 0xba, 0xfb, 0xe4, 0x21, 0xd7, 0xdd, 0xfb, - 0x30, 0xd3, 0x67, 0xc3, 0x10, 0x5d, 0x4e, 0x2f, 0xc5, 0xcc, 0x7c, 0x44, 0xd5, 0xb0, 0x7c, 0x0c, - 0x35, 0x8e, 0x68, 0x50, 0x25, 0x98, 0xea, 0x69, 0xc1, 0xc0, 0x30, 0x89, 0xaa, 0x04, 0xdf, 0x89, - 0x12, 0x71, 0x0c, 0x47, 0x0f, 0xa1, 0xce, 0xef, 0x73, 0x72, 0x59, 0x3b, 0x53, 0xc2, 0x26, 0x29, - 0xea, 0x77, 0x2f, 0x46, 0xc7, 0x3b, 0x5f, 0x49, 0xc0, 0x2a, 0x31, 0xfd, 0x17, 0x27, 0x24, 0x9b, - 0x0a, 0xc1, 0x9f, 0x1d, 0xba, 0x5c, 0x2b, 0xf4, 0xf6, 0xc1, 0x8b, 0x30, 0x35, 0xd8, 0x36, 0x82, - 0x88, 0x57, 0xa3, 0x18, 0x92, 0x53, 0xeb, 0x34, 0xf1, 0xd1, 0x7e, 0x63, 0x56, 0x90, 0x66, 0xdf, - 0x98, 0xe7, 0x45, 0x43, 0x38, 0x1b, 0x84, 0x86, 0x43, 0xba, 0xb6, 0x30, 0x1f, 0x05, 0xa1, 0xd1, - 0x1f, 0x14, 0x08, 0x05, 0xc9, 0x4e, 0x99, 0xba, 0xa3, 0xa8, 0x70, 0x16, 0x7e, 0xf4, 0xb3, 0x1a, - 0x2c, 0xb1, 0xf4, 0x95, 0x61, 0xe8, 0xf1, 0xf8, 0xae, 0x31, 0xf1, 0xe3, 0x1f, 0xb2, 0xb2, 0xcd, - 0x7e, 0x37, 0x07, 0x1f, 0xce, 0xa5, 0xa4, 0xff, 0x6f, 0x0d, 0xd0, 0xe8, 0x28, 0xa2, 0x3e, 0x54, - 0x2d, 0xb2, 0x65, 0x0c, 0x9d, 0x30, 0x5a, 0x8c, 0x8b, 0xdd, 0xa1, 0x8c, 0x71, 0xc6, 0x02, 0xb2, - 0x2d, 0x10, 0x63, 0x49, 0x02, 0x0d, 0xa0, 0x76, 0x7f, 0xdb, 0x0e, 0x89, 0x63, 0x07, 0xa1, 0x10, - 0x92, 0xa5, 0xe9, 0x49, 0xfd, 0xe3, 0x8d, 0x08, 0x33, 0x8e, 0x89, 0xe8, 0x7f, 0x6d, 0x02, 0xaa, - 0xc7, 0x78, 0xa2, 0x66, 0x08, 0xc8, 0xe4, 0x67, 0x95, 0x54, 0x69, 0x21, 0x65, 0xec, 0x56, 0x4c, - 0xb3, 0x68, 0x8d, 0x20, 0xc3, 0x19, 0x04, 0xd0, 0x3b, 0x70, 0xce, 0x76, 0xb7, 0x7c, 0x23, 0x08, - 0xfd, 0xa1, 0x19, 0x0e, 0xfd, 0x88, 0x70, 0xa1, 0x30, 0x0d, 0x6c, 0xb3, 0xdf, 0xc9, 0x40, 0x87, - 0x33, 0x89, 0xa0, 0x2d, 0x98, 0xb9, 0xef, 0xf9, 0x3b, 0x54, 0x86, 0x4d, 0x96, 0x88, 0x88, 0xfd, - 0x06, 0xc3, 0x11, 0x0b, 0x2f, 0xfe, 0x1d, 0xe0, 0x08, 0xb9, 0xfe, 0x87, 0x1a, 0x4c, 0xf1, 0xcb, - 0x52, 0xef, 0x8f, 0x8d, 0x0e, 0xab, 0x6b, 0x6e, 0x74, 0x37, 0xba, 0xfd, 0x60, 0x39, 0xde, 0x2f, - 0xdb, 0x0f, 0x56, 0xd9, 0x1c, 0xad, 0xe2, 0x0f, 0x27, 0x44, 0x63, 0xd8, 0xb2, 0xdd, 0x81, 0xb3, - 0x42, 0x03, 0xbd, 0x6d, 0x6f, 0x11, 0xca, 0x60, 0x6d, 0x63, 0x8f, 0x9f, 0x15, 0x4d, 0x71, 0xe9, - 0xd7, 0x1a, 0x05, 0xe3, 0xac, 0x32, 0xe8, 0x5f, 0x6a, 0x74, 0x81, 0x0c, 0x7d, 0xdb, 0x2c, 0x17, - 0x89, 0x4e, 0x56, 0x6e, 0x79, 0x8d, 0x63, 0xe3, 0x3b, 0xf8, 0x8d, 0x78, 0xa5, 0x64, 0xa9, 0x8f, - 0xf6, 0x1b, 0x8d, 0x0c, 0x0b, 0x61, 0x64, 0xd3, 0xa6, 0x5d, 0xfb, 0xd5, 0x1f, 0x1e, 0x9a, 0x85, - 0xd9, 0xd7, 0xa3, 0x2a, 0xa3, 0x9b, 0x30, 0x15, 0x98, 0xde, 0x80, 0x1c, 0xf6, 0x18, 0x53, 0x7a, - 0xff, 0x25, 0x7b, 0xb8, 0x4b, 0x4b, 0x62, 0x8e, 0xe0, 0xe2, 0x5b, 0x30, 0xab, 0xd6, 0x3c, 0xc3, - 0x42, 0xd0, 0x56, 0x2d, 0x04, 0xc7, 0x3e, 0x6f, 0x53, 0x2d, 0x0a, 0xbf, 0x57, 0x01, 0xf1, 0x9e, - 0xc5, 0x18, 0xa7, 0x08, 0x6f, 0x45, 0x91, 0xb7, 0xca, 0x3c, 0xe2, 0x91, 0x7e, 0x19, 0x2f, 0xee, - 0x04, 0x35, 0xf8, 0x16, 0xf2, 0x60, 0xda, 0x31, 0x36, 0x89, 0x13, 0xbd, 0x6d, 0x70, 0xa3, 0x44, - 0xe8, 0x7d, 0x1e, 0xad, 0x36, 0x48, 0xd9, 0x9a, 0x79, 0x22, 0x16, 0x64, 0x2e, 0xbe, 0x04, 0x75, - 0x25, 0xdb, 0xb1, 0xcc, 0x32, 0x7f, 0xa4, 0xc1, 0x6c, 0x22, 0xfc, 0x4e, 0x1f, 0x26, 0x7c, 0xb9, - 0x1d, 0x2f, 0x7a, 0xcc, 0x12, 0x79, 0x03, 0x3d, 0x7d, 0x48, 0x26, 0x4c, 0xe9, 0xc8, 0x48, 0x3d, - 0x95, 0x93, 0x8a, 0xd4, 0xf3, 0x0d, 0x0d, 0x2e, 0x44, 0x0d, 0x4a, 0xde, 0x98, 0x47, 0xcf, 0x41, - 0xd5, 0x18, 0xd8, 0xcc, 0xf8, 0xaa, 0xda, 0xaf, 0x57, 0xd6, 0x3b, 0x2c, 0x0d, 0x4b, 0x28, 0xfa, - 0x08, 0x54, 0x23, 0xd6, 0x13, 0xca, 0x97, 0x94, 0x5b, 0xf2, 0xe0, 0x48, 0xe6, 0x40, 0xcf, 0x2a, - 0xd1, 0xd1, 0xa6, 0xe2, 0x85, 0x5a, 0x12, 0xe6, 0xe7, 0xc1, 0xfa, 0xd7, 0x2b, 0x30, 0xc7, 0x8d, - 0x15, 0x4d, 0xdb, 0xb5, 0x6c, 0xb7, 0x77, 0x0a, 0x0b, 0x44, 0xe2, 0xa9, 0xb5, 0xca, 0x49, 0x3d, - 0xb5, 0x76, 0x0b, 0xa6, 0xdf, 0xa6, 0x92, 0x2a, 0x62, 0xf0, 0xb1, 0x04, 0x86, 0x64, 0x5e, 0x26, - 0xe4, 0x02, 0x2c, 0x50, 0xe8, 0x7f, 0xaa, 0xc1, 0x62, 0xa2, 0x5b, 0x4e, 0x61, 0xa5, 0xe9, 0x25, - 0x57, 0x9a, 0x66, 0xc1, 0xc8, 0x11, 0x4a, 0xa5, 0x73, 0x56, 0x9c, 0x7f, 0x5a, 0x01, 0xf6, 0xb0, - 0xd3, 0x29, 0x0c, 0xf5, 0x9b, 0x09, 0x5d, 0xe0, 0x95, 0xe2, 0x2f, 0x70, 0xe4, 0x19, 0x34, 0x7a, - 0x29, 0x83, 0xc6, 0x67, 0x8a, 0x93, 0x38, 0xdc, 0x9a, 0xf1, 0xad, 0x0a, 0x00, 0xcd, 0xc6, 0x9f, - 0xc0, 0x12, 0x7e, 0x89, 0xf1, 0x93, 0x88, 0xb5, 0xf7, 0xca, 0x3b, 0x86, 0xba, 0x7c, 0x65, 0x69, - 0x22, 0x36, 0x9b, 0x27, 0x5f, 0x58, 0x4a, 0x4e, 0xc0, 0xc9, 0x13, 0x9a, 0x80, 0xfa, 0x75, 0x60, - 0x71, 0x97, 0xdb, 0x77, 0xba, 0xe8, 0x53, 0x30, 0x67, 0xf3, 0x63, 0xc9, 0xb6, 0x1a, 0x47, 0x54, - 0x46, 0x54, 0xe9, 0xa8, 0x40, 0x9c, 0xcc, 0xab, 0x7f, 0x57, 0x83, 0x2a, 0x45, 0x74, 0x0a, 0x53, - 0xee, 0xa7, 0x92, 0x53, 0xee, 0xa5, 0xc2, 0xcc, 0x93, 0x33, 0xd3, 0xfe, 0x42, 0x03, 0x16, 0xc6, - 0x5d, 0x9c, 0xdd, 0x2b, 0xc7, 0xe1, 0x5a, 0xce, 0x71, 0xf8, 0x15, 0x71, 0x9a, 0x9e, 0xb2, 0x04, - 0x29, 0x27, 0xea, 0x1f, 0x51, 0x0e, 0xcc, 0x27, 0x92, 0x9c, 0x37, 0x7a, 0x68, 0x8e, 0xde, 0x81, - 0xb9, 0x60, 0xdb, 0xf3, 0xc2, 0x68, 0x43, 0x28, 0x86, 0xbb, 0x59, 0xdc, 0xf3, 0x34, 0x6a, 0x0b, - 0x3f, 0x08, 0xeb, 0xaa, 0xc8, 0x71, 0x92, 0x96, 0xfe, 0xfb, 0xa2, 0xf9, 0xc7, 0xd8, 0x04, 0x9e, - 0xe2, 0x4c, 0xf9, 0xb1, 0xd4, 0x4c, 0xc9, 0x7b, 0x8f, 0xec, 0xb7, 0x44, 0x2b, 0xe4, 0x2b, 0x3f, - 0x0e, 0xcc, 0x39, 0x6a, 0xb8, 0x7e, 0xc1, 0x98, 0x85, 0x22, 0xfd, 0x8b, 0x47, 0xee, 0x94, 0x24, - 0x9c, 0x44, 0x8e, 0x3e, 0x01, 0x73, 0x51, 0xc5, 0xd5, 0xc7, 0x8b, 0x59, 0xc1, 0x75, 0x15, 0x80, - 0x93, 0xf9, 0xf4, 0xd7, 0xe0, 0x43, 0xbc, 0xda, 0xcc, 0xdd, 0x77, 0xf5, 0x81, 0x49, 0x82, 0xa0, - 0x65, 0x0c, 0x0c, 0x93, 0xaa, 0xac, 0xec, 0xc2, 0x1c, 0xb7, 0xe8, 0x1c, 0xe3, 0x8d, 0xf1, 0xaf, - 0x54, 0xa0, 0xa1, 0xe0, 0x4c, 0x38, 0x3e, 0x44, 0x1c, 0xf7, 0x2b, 0x1a, 0xd4, 0x0d, 0xd7, 0xf5, - 0x42, 0x43, 0x3d, 0x67, 0x20, 0x25, 0x1e, 0x5f, 0xca, 0xa5, 0xb5, 0xbc, 0x12, 0xd3, 0x49, 0x1d, - 0x2b, 0x2a, 0x10, 0xac, 0x56, 0xe7, 0xe2, 0xab, 0xb0, 0x90, 0x2e, 0x75, 0x2c, 0xdd, 0xb4, 0x09, - 0xe7, 0x95, 0x5a, 0x89, 0x7b, 0x47, 0x54, 0x6f, 0x7a, 0x1e, 0x66, 0x76, 0xed, 0xc0, 0x8e, 0xee, - 0xb0, 0x2a, 0xdd, 0xf8, 0x3a, 0x4f, 0xc6, 0x11, 0x5c, 0xbf, 0x06, 0x67, 0x55, 0x1c, 0x6c, 0xce, - 0xdc, 0xe9, 0x1e, 0x67, 0x20, 0xd6, 0xe0, 0x8a, 0x82, 0x21, 0xf3, 0xe6, 0xcd, 0x71, 0xd0, 0xfd, - 0xdc, 0x74, 0xc4, 0xe2, 0xc2, 0x35, 0xfc, 0xb7, 0x35, 0x78, 0x8a, 0xe4, 0x71, 0x8c, 0xe0, 0xf7, - 0xcf, 0x97, 0x1d, 0xd2, 0x5c, 0x96, 0x14, 0x91, 0x4e, 0xf2, 0xc0, 0x38, 0xbf, 0x6a, 0xe8, 0x21, - 0x40, 0x20, 0xc7, 0xa4, 0x94, 0xc7, 0x60, 0xe6, 0x28, 0x8b, 0x20, 0x7f, 0xf2, 0x1b, 0x2b, 0xd4, - 0x90, 0x0f, 0xd5, 0x40, 0x8c, 0x65, 0xa9, 0x0b, 0x82, 0x19, 0xbc, 0x21, 0x9c, 0xa2, 0xc4, 0x17, - 0x96, 0x74, 0xd0, 0xaf, 0x69, 0x70, 0xce, 0xc9, 0x98, 0x1a, 0x42, 0xce, 0xdf, 0x7b, 0x1c, 0xd3, - 0x8e, 0x5b, 0xb9, 0xb2, 0x20, 0x38, 0xb3, 0x2e, 0xe8, 0xd7, 0x73, 0xaf, 0xa2, 0x71, 0x67, 0xdd, - 0x8d, 0xb2, 0xb5, 0x3c, 0xa9, 0x5b, 0x69, 0x7f, 0x3e, 0xcd, 0x55, 0x0f, 0x66, 0x8a, 0x31, 0x61, - 0x7a, 0x93, 0x29, 0x7b, 0x82, 0xdf, 0x8b, 0xab, 0x96, 0xe2, 0x8d, 0x67, 0xa6, 0x8a, 0xf1, 0xff, - 0x58, 0xa0, 0x46, 0xcb, 0x00, 0x9b, 0x8e, 0x67, 0xee, 0xb4, 0x3a, 0x6d, 0x1c, 0x89, 0x76, 0xc6, - 0x63, 0x4d, 0x99, 0x8a, 0x95, 0x1c, 0xe8, 0x8b, 0x30, 0x61, 0xb9, 0x91, 0xb2, 0xfb, 0xe9, 0xc2, - 0x35, 0xa2, 0x2c, 0x25, 0x3d, 0x31, 0x29, 0x47, 0x51, 0xac, 0xc8, 0x83, 0xaa, 0x2b, 0x56, 0x77, - 0xc1, 0x3f, 0xc5, 0xdf, 0xcc, 0x93, 0x6a, 0x82, 0xd4, 0x4e, 0xa2, 0x14, 0x2c, 0x89, 0x50, 0x82, - 0x52, 0x8b, 0x9e, 0x2a, 0x49, 0x70, 0xac, 0x07, 0xc5, 0xd7, 0x55, 0xcd, 0x77, 0x7a, 0x7c, 0xcd, - 0x77, 0x2e, 0x77, 0xdb, 0xb9, 0x05, 0xd3, 0xa1, 0xc1, 0x4e, 0xf4, 0x67, 0x4a, 0x1c, 0xa8, 0xd3, - 0x06, 0xdc, 0xa3, 0x68, 0x62, 0x2d, 0x84, 0x7d, 0x06, 0x58, 0x60, 0xa7, 0xdc, 0xc8, 0xdf, 0xf3, - 0x13, 0x91, 0x86, 0x8a, 0x73, 0x23, 0x0f, 0x90, 0xce, 0xb9, 0x91, 0xff, 0xc7, 0x02, 0x35, 0xda, - 0xa1, 0xba, 0x25, 0x5f, 0x02, 0xc4, 0x2d, 0xd1, 0x95, 0xb2, 0x53, 0x33, 0x88, 0xfc, 0x39, 0xf9, - 0x17, 0x96, 0x04, 0xf4, 0xdf, 0x99, 0xe0, 0x3b, 0xaa, 0x77, 0xd1, 0x3b, 0xa1, 0x07, 0xd5, 0x08, - 0x59, 0xa9, 0x2d, 0x6a, 0x14, 0x33, 0x9a, 0xb7, 0x55, 0x46, 0x90, 0x96, 0xc8, 0x51, 0x2b, 0xcb, - 0xb1, 0x5b, 0x09, 0x1b, 0x33, 0x96, 0x53, 0xf7, 0x49, 0x3e, 0x61, 0xfe, 0x0a, 0x9c, 0x89, 0x3c, - 0x1d, 0x2c, 0xc2, 0xac, 0x98, 0xc2, 0x17, 0x90, 0xdd, 0x3e, 0x6a, 0x25, 0x41, 0x38, 0x9d, 0x57, - 0xbf, 0x05, 0x35, 0xc9, 0xb2, 0xe8, 0x19, 0x45, 0x7d, 0x8a, 0xa5, 0xca, 0x2d, 0xb2, 0xc7, 0x75, - 0xa9, 0x46, 0x42, 0x97, 0xe2, 0x7b, 0x9e, 0xd7, 0x69, 0x82, 0x50, 0xab, 0xf4, 0xff, 0xaa, 0x71, - 0x46, 0x10, 0xef, 0x02, 0x18, 0x50, 0xef, 0xf3, 0x30, 0x34, 0x2c, 0x14, 0x61, 0xb1, 0xbb, 0x2e, - 0xec, 0x88, 0x74, 0x2d, 0x46, 0x83, 0x55, 0x9c, 0xe8, 0xc1, 0xe8, 0xe3, 0x15, 0x37, 0x4a, 0xce, - 0xa7, 0xb1, 0xdf, 0xb0, 0x40, 0xa3, 0x65, 0xd4, 0x87, 0x02, 0xb4, 0xc3, 0x1f, 0x0a, 0x38, 0x3a, - 0xde, 0xb9, 0xfe, 0x4f, 0x34, 0xc8, 0x0c, 0x13, 0x8a, 0x74, 0x98, 0xe6, 0x6e, 0x9a, 0xea, 0xb3, - 0x1e, 0xdc, 0x87, 0x13, 0x0b, 0x08, 0xf2, 0xe1, 0x9c, 0xf0, 0x81, 0xbc, 0x45, 0xf6, 0xe2, 0xe7, - 0x24, 0xc4, 0xec, 0x18, 0xdf, 0x13, 0x8a, 0xc5, 0xa7, 0xe8, 0xa6, 0x30, 0xe1, 0x4c, 0xdc, 0xcc, - 0x0b, 0x8f, 0xa9, 0x36, 0xef, 0x93, 0xc3, 0x29, 0x56, 0xd7, 0xc7, 0xec, 0x85, 0xc7, 0x69, 0x1c, - 0xed, 0x85, 0xc7, 0xf2, 0xbd, 0x5f, 0x8e, 0xc1, 0x58, 0x65, 0x73, 0x4c, 0x25, 0x7f, 0xa0, 0xc1, - 0xe2, 0xc8, 0xcd, 0xd6, 0x31, 0xce, 0x50, 0x4e, 0xd1, 0x60, 0xf0, 0x6c, 0xfa, 0x21, 0x81, 0x7a, - 0xe6, 0x95, 0xf7, 0x37, 0x60, 0x2e, 0x61, 0x28, 0x91, 0x37, 0x24, 0xb4, 0xcc, 0x1b, 0x12, 0xea, - 0x05, 0x88, 0xca, 0xa1, 0x17, 0x20, 0xfe, 0xe7, 0xac, 0x18, 0x6f, 0xa6, 0x9e, 0xbe, 0x09, 0xd3, - 0xec, 0x96, 0x42, 0xf4, 0x32, 0xcd, 0xa7, 0x8a, 0x5f, 0x7f, 0x08, 0xb8, 0x28, 0xe0, 0xff, 0xb1, - 0x40, 0x8b, 0xda, 0xb0, 0x60, 0x2a, 0xef, 0x79, 0xdf, 0x89, 0xa5, 0x8e, 0xbc, 0x1a, 0xd9, 0x4a, - 0xc1, 0xf1, 0x48, 0x09, 0xd4, 0x55, 0x15, 0xd6, 0x4f, 0x16, 0x7d, 0x5b, 0x86, 0x87, 0xa2, 0x91, - 0x8a, 0xaa, 0x0f, 0x40, 0xa2, 0xa1, 0x8b, 0x4e, 0xce, 0x5f, 0x2d, 0x78, 0xed, 0x53, 0x72, 0x40, - 0x24, 0x37, 0x64, 0x52, 0x80, 0x15, 0x2a, 0x28, 0x80, 0xfa, 0x76, 0xfc, 0x76, 0x81, 0x50, 0x57, - 0xaf, 0x95, 0x7d, 0x38, 0x81, 0x2f, 0x54, 0x4a, 0x02, 0x56, 0xa9, 0xa0, 0x20, 0xf1, 0x6e, 0x6c, - 0x99, 0x48, 0xdb, 0xb1, 0x86, 0x71, 0xe4, 0x6b, 0xe8, 0x01, 0x80, 0x2b, 0x2f, 0x1b, 0x09, 0xdf, - 0xa5, 0x62, 0x44, 0xe3, 0x3b, 0x4b, 0x31, 0xd1, 0x38, 0x0d, 0x2b, 0x64, 0x68, 0xf7, 0xf6, 0xe3, - 0x2b, 0x66, 0x42, 0xc9, 0xbd, 0x56, 0xf6, 0xae, 0x9f, 0xd0, 0x03, 0xe2, 0x04, 0xac, 0x52, 0x41, - 0x1e, 0x40, 0x5f, 0x5e, 0x3d, 0x13, 0x1a, 0x6f, 0xb1, 0x96, 0xc6, 0x37, 0xd8, 0xf8, 0xf6, 0x2d, - 0xfe, 0xc6, 0x0a, 0x09, 0xaa, 0x60, 0xcb, 0x0d, 0x0f, 0x94, 0x50, 0x38, 0xc7, 0xda, 0xec, 0x7c, - 0x3c, 0xd6, 0x2a, 0xea, 0x6c, 0xde, 0x3e, 0xad, 0x68, 0x14, 0x8f, 0xf6, 0x1b, 0xb3, 0x4c, 0x98, - 0x8c, 0x68, 0x18, 0xb1, 0x5d, 0x74, 0xf6, 0x30, 0xbb, 0x28, 0xba, 0x01, 0x8b, 0x81, 0x7a, 0xda, - 0xc4, 0x04, 0xc4, 0x1c, 0x2b, 0x22, 0x2f, 0x2b, 0x76, 0xd3, 0x19, 0xf0, 0x68, 0x19, 0x2e, 0x01, - 0x89, 0xc5, 0xca, 0xcf, 0xab, 0x12, 0x90, 0xa7, 0x61, 0x09, 0x1d, 0x79, 0xd8, 0xfd, 0xcc, 0x69, - 0x3d, 0xec, 0xfe, 0xd3, 0xea, 0x53, 0x38, 0x0b, 0x25, 0x9c, 0x29, 0x8a, 0xbc, 0x85, 0x83, 0x76, - 0x93, 0xde, 0x84, 0x8b, 0x27, 0xe3, 0xbc, 0x25, 0x6d, 0xa5, 0xb9, 0x9e, 0x84, 0xff, 0x96, 0x2a, - 0xe6, 0x91, 0x22, 0x42, 0x4e, 0x41, 0x3b, 0x23, 0x09, 0xed, 0xac, 0x55, 0x4e, 0x73, 0x22, 0xb9, - 0xfe, 0x43, 0x7f, 0xac, 0xc1, 0x7c, 0x9c, 0xed, 0x14, 0xb4, 0x27, 0x2b, 0xa9, 0x3d, 0x7d, 0xa6, - 0x64, 0xc3, 0x72, 0x54, 0xa8, 0xff, 0x5b, 0x51, 0x9b, 0xc5, 0x94, 0x84, 0xfb, 0xca, 0x06, 0x97, - 0x6f, 0xa9, 0x3b, 0xa5, 0x36, 0xb8, 0xaa, 0x57, 0x46, 0xdc, 0xe2, 0x8c, 0x0d, 0xef, 0x97, 0x13, - 0x2b, 0x74, 0x19, 0xf7, 0xa3, 0xec, 0x37, 0xb5, 0x8e, 0x5c, 0xae, 0x7d, 0x75, 0xc6, 0x72, 0x8f, - 0x80, 0x95, 0x82, 0x2e, 0x2f, 0x4a, 0x93, 0x0f, 0x7f, 0xb3, 0xea, 0xeb, 0x35, 0xa8, 0x2b, 0x8a, - 0xfb, 0xbb, 0x62, 0xd2, 0x18, 0x42, 0xdd, 0xf4, 0xdc, 0x20, 0xf4, 0x0d, 0xe5, 0x9a, 0x49, 0x59, - 0xa2, 0x52, 0x54, 0xb4, 0x62, 0xd4, 0x58, 0xa5, 0x43, 0x17, 0x36, 0xc9, 0x68, 0x13, 0x27, 0x61, - 0x49, 0x39, 0x8c, 0xb9, 0x3e, 0x06, 0x10, 0x29, 0x49, 0xf2, 0x49, 0x3f, 0x19, 0xcb, 0xab, 0x13, - 0xdc, 0x94, 0x30, 0xac, 0xe4, 0x43, 0xef, 0xc0, 0x9c, 0xa3, 0x46, 0xf1, 0x11, 0x2a, 0x5c, 0xb1, - 0xa3, 0xd0, 0x44, 0x3c, 0xa0, 0xe8, 0x14, 0x4f, 0x49, 0xc2, 0x49, 0x5a, 0x68, 0x07, 0x6a, 0x4e, - 0x14, 0x7a, 0x4a, 0xe8, 0x71, 0xaf, 0x16, 0x26, 0xcc, 0xb0, 0x70, 0x9b, 0xa4, 0xfc, 0xc4, 0x31, - 0x7e, 0xca, 0x77, 0xf2, 0xa3, 0x9c, 0x5d, 0x32, 0xa6, 0x26, 0xf9, 0x4e, 0x26, 0x05, 0x58, 0xa1, - 0x92, 0x63, 0x9c, 0xaa, 0x16, 0x32, 0x4e, 0x0d, 0xe1, 0xac, 0x4f, 0x42, 0x7f, 0xaf, 0xb5, 0x67, - 0xb2, 0x97, 0xa2, 0xfc, 0x90, 0x45, 0x99, 0xaa, 0x15, 0x73, 0x17, 0xc7, 0xa3, 0xa8, 0x70, 0x16, - 0x7e, 0xba, 0x4f, 0xa3, 0x8b, 0xbe, 0xb8, 0xad, 0xc9, 0xf6, 0x69, 0xec, 0x21, 0x69, 0x96, 0x8a, - 0x3e, 0x0e, 0xf5, 0x90, 0x98, 0xdb, 0xae, 0x6d, 0x1a, 0x4e, 0xa7, 0x2d, 0x34, 0xaa, 0x78, 0x0d, - 0x8d, 0x41, 0x58, 0xcd, 0x87, 0x9a, 0x30, 0x31, 0xb4, 0x2d, 0xa1, 0x4a, 0xfd, 0x84, 0x7c, 0x22, - 0xb2, 0xd3, 0x7e, 0xb4, 0xdf, 0xf8, 0x40, 0xec, 0x0c, 0x29, 0x5b, 0x72, 0x75, 0xb0, 0xd3, 0xbb, - 0x1a, 0xee, 0x0d, 0x48, 0xb0, 0xbc, 0xd1, 0x69, 0x63, 0x5a, 0x38, 0xcb, 0x58, 0x37, 0x77, 0x0c, - 0x63, 0xdd, 0x6d, 0x80, 0x78, 0x89, 0x2f, 0x6d, 0xad, 0xfb, 0x4f, 0x53, 0x70, 0xbe, 0xec, 0x81, - 0x23, 0x8b, 0xc0, 0xc4, 0x82, 0xc4, 0xaf, 0x6c, 0x85, 0xc4, 0xbf, 0x7b, 0x77, 0xed, 0xde, 0xb6, - 0x4f, 0x82, 0x6d, 0xcf, 0xb1, 0x0a, 0x86, 0x80, 0x8a, 0x9f, 0x19, 0x18, 0xc1, 0x88, 0x73, 0x28, - 0xa1, 0x16, 0x2c, 0x46, 0x81, 0xea, 0x31, 0x5d, 0x52, 0x86, 0x7e, 0x10, 0x0a, 0x7f, 0x39, 0x66, - 0x94, 0x5d, 0x4d, 0x03, 0xf1, 0x68, 0xfe, 0x34, 0x12, 0x1e, 0xb0, 0x7e, 0x92, 0xbd, 0xf0, 0x35, - 0x82, 0x84, 0x47, 0xad, 0x1f, 0xcd, 0xaf, 0x22, 0x91, 0x2f, 0x82, 0x31, 0xf1, 0x94, 0x42, 0x12, - 0x3f, 0x17, 0x36, 0x9a, 0x1f, 0x59, 0x70, 0xc9, 0x27, 0xa6, 0xd7, 0xef, 0x13, 0xd7, 0xe2, 0xd1, - 0xfb, 0x0c, 0xbf, 0x67, 0xbb, 0xd7, 0x7d, 0x83, 0x65, 0x14, 0xcf, 0x8e, 0x5d, 0x39, 0xd8, 0x6f, - 0x5c, 0xc2, 0x87, 0xe4, 0xc3, 0x87, 0x62, 0x41, 0x7d, 0x38, 0x33, 0x64, 0xc1, 0x4a, 0xfc, 0x8e, - 0x1b, 0x12, 0x7f, 0xd7, 0x70, 0x0a, 0xbe, 0xc4, 0xc0, 0x78, 0x77, 0x23, 0x89, 0x0a, 0xa7, 0x71, - 0xa3, 0x3d, 0x2a, 0x0a, 0x44, 0x75, 0x14, 0x92, 0xd5, 0xe2, 0x31, 0xca, 0xf0, 0x28, 0x3a, 0x9c, - 0x45, 0x43, 0xff, 0x3b, 0x1a, 0x88, 0xf3, 0x11, 0xf9, 0x3c, 0xa7, 0x96, 0xf9, 0x3c, 0xe7, 0xc9, - 0x3c, 0x53, 0xfb, 0xff, 0xc5, 0x6f, 0xff, 0x66, 0x3e, 0x52, 0x2b, 0x5f, 0x69, 0xbe, 0x0f, 0xa2, - 0x30, 0x8b, 0x08, 0x35, 0x56, 0x38, 0xa1, 0xa3, 0x1f, 0xc9, 0x8c, 0x03, 0x1a, 0x4d, 0xe4, 0x06, - 0x34, 0xfa, 0x6d, 0x0d, 0xd2, 0xef, 0x3d, 0xa1, 0x67, 0x61, 0x46, 0xdc, 0x30, 0x11, 0x3e, 0xea, - 0xfc, 0x61, 0x63, 0x9e, 0x84, 0x23, 0x58, 0x72, 0xff, 0x54, 0x46, 0x1b, 0xcc, 0xf6, 0xa2, 0x3d, - 0x42, 0x2f, 0xdb, 0x9f, 0x87, 0x69, 0x7e, 0x25, 0x02, 0xfd, 0x4c, 0xa6, 0x77, 0xca, 0xed, 0x12, - 0xb7, 0x2e, 0x0a, 0x38, 0xa1, 0x24, 0x82, 0x56, 0x54, 0x0e, 0x0d, 0x5a, 0xd1, 0xe5, 0x91, 0xc5, - 0xca, 0x98, 0xcf, 0x5a, 0xb8, 0x23, 0x42, 0x5b, 0x8b, 0xa8, 0x62, 0x68, 0x98, 0xb0, 0x2a, 0x4d, - 0x96, 0x88, 0x9a, 0xc6, 0xbb, 0x40, 0xb1, 0x2d, 0xcd, 0x1f, 0x62, 0x57, 0x8a, 0x5d, 0xd0, 0xa7, - 0x4a, 0x1c, 0xb9, 0x88, 0x5e, 0x1f, 0xc3, 0x05, 0x5d, 0xb2, 0xfd, 0x74, 0x2e, 0xdb, 0xf7, 0x60, - 0x46, 0x08, 0x0e, 0x21, 0xc5, 0x3e, 0x5d, 0x26, 0x6e, 0x98, 0x72, 0x7b, 0x90, 0x27, 0xe0, 0x08, - 0x3b, 0x5d, 0x1b, 0xfb, 0xc6, 0x03, 0xbb, 0x3f, 0xec, 0x33, 0xd9, 0x35, 0xa5, 0x66, 0x65, 0xc9, - 0x38, 0x82, 0xb3, 0xac, 0xfc, 0xac, 0x8a, 0x69, 0x3c, 0x6a, 0x56, 0xf1, 0x3a, 0x43, 0x04, 0x47, - 0x5f, 0x80, 0x6a, 0xdf, 0x78, 0xd0, 0x1d, 0xfa, 0x3d, 0x22, 0xcc, 0x49, 0xf9, 0x3b, 0xf2, 0x61, - 0x68, 0x3b, 0xcb, 0x54, 0x57, 0x0f, 0xfd, 0xe5, 0x8e, 0x1b, 0xde, 0xf5, 0xbb, 0xa1, 0x2f, 0xe3, - 0x23, 0xad, 0x09, 0x2c, 0x58, 0xe2, 0x43, 0x0e, 0xcc, 0xf7, 0x8d, 0x07, 0x1b, 0xae, 0x21, 0x83, - 0xc8, 0xd7, 0x0b, 0x52, 0x60, 0xb6, 0xf5, 0xb5, 0x04, 0x2e, 0x9c, 0xc2, 0x9d, 0x61, 0xc6, 0x9f, - 0x7d, 0x5c, 0x66, 0xfc, 0x15, 0x79, 0x62, 0x3f, 0xc7, 0xd8, 0xf0, 0xa9, 0xac, 0x43, 0xad, 0xc3, - 0x0f, 0xe3, 0xdf, 0x94, 0x87, 0xf1, 0xf3, 0x25, 0x6c, 0xef, 0x87, 0x1c, 0xc4, 0xef, 0x42, 0xdd, - 0x92, 0x2f, 0xa5, 0x07, 0x4b, 0x67, 0x4a, 0x98, 0x0d, 0xe2, 0x17, 0xd7, 0x95, 0xd0, 0xae, 0x31, - 0x6e, 0xac, 0x12, 0x42, 0x77, 0x79, 0x90, 0x71, 0x87, 0x84, 0x71, 0x16, 0x66, 0x97, 0x5b, 0xe0, - 0x76, 0xbd, 0x28, 0x24, 0xf8, 0x48, 0x06, 0x9c, 0x5d, 0x8e, 0xaa, 0x93, 0xfc, 0x8a, 0xcb, 0x62, - 0x7c, 0x6f, 0x39, 0x71, 0x2f, 0xe5, 0x6f, 0x69, 0xb0, 0xc0, 0x9f, 0x7f, 0x69, 0x79, 0xfd, 0x81, - 0xe7, 0x12, 0x3a, 0x30, 0x88, 0xf5, 0xea, 0xad, 0x12, 0xf2, 0xa1, 0x9b, 0x42, 0x29, 0x0e, 0x24, - 0x53, 0xa9, 0x78, 0x84, 0x34, 0xfa, 0xe7, 0x1a, 0x2c, 0xf5, 0x73, 0x22, 0xa7, 0x2e, 0x9d, 0x2d, - 0xe1, 0xae, 0x74, 0x54, 0x38, 0x56, 0xfe, 0x34, 0xd5, 0x51, 0xb9, 0x70, 0x6e, 0xe5, 0xca, 0x7a, - 0x36, 0x96, 0xb9, 0xb0, 0xf3, 0x97, 0x61, 0x21, 0xbd, 0x12, 0xa8, 0x51, 0xd1, 0xb5, 0xc7, 0x1b, - 0x15, 0x5d, 0x7f, 0x05, 0x2e, 0x64, 0x8f, 0x3a, 0xd5, 0x8e, 0xd8, 0x23, 0x03, 0x62, 0x43, 0x12, - 0x87, 0xf9, 0xa2, 0x89, 0x98, 0xc3, 0x9a, 0xcb, 0xdf, 0xfd, 0xd1, 0xe5, 0x27, 0xbe, 0xff, 0xa3, - 0xcb, 0x4f, 0xfc, 0xe0, 0x47, 0x97, 0x9f, 0xf8, 0xca, 0xc1, 0x65, 0xed, 0xbb, 0x07, 0x97, 0xb5, - 0xef, 0x1f, 0x5c, 0xd6, 0x7e, 0x70, 0x70, 0x59, 0xfb, 0x0f, 0x07, 0x97, 0xb5, 0xbf, 0xfd, 0x1f, - 0x2f, 0x3f, 0xf1, 0x85, 0x6a, 0x54, 0xa5, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x87, 0x26, 0xe0, - 0xe0, 0x08, 0xaa, 0x00, 0x00, + // 9050 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x7d, 0x6d, 0x70, 0x24, 0xc7, + 0x75, 0x98, 0x66, 0xf1, 0xb5, 0x78, 0x0b, 0xe0, 0x80, 0xbe, 0x0f, 0x82, 0x47, 0xf2, 0x96, 0x1a, + 0x89, 0x0a, 0x19, 0xc9, 0x38, 0x53, 0x94, 0x2c, 0x91, 0x22, 0x29, 0x62, 0x77, 0x71, 0x77, 0xab, + 0x3b, 0xdc, 0x2d, 0x7b, 0x0f, 0xa4, 0x3e, 0x52, 0xa6, 0x06, 0x33, 0x8d, 0xc5, 0x10, 0xb3, 0x33, + 0xcb, 0x99, 0x59, 0x1c, 0x70, 0x74, 0x22, 0x45, 0xb6, 0xe5, 0x24, 0x4e, 0x5c, 0x71, 0x59, 0x29, + 0xa5, 0x22, 0x95, 0x6d, 0xb9, 0x52, 0x29, 0xa7, 0xf2, 0x21, 0x97, 0x2b, 0x56, 0xca, 0x95, 0x94, + 0x7f, 0xd8, 0x3f, 0xac, 0xc8, 0x29, 0x47, 0x95, 0x72, 0x5c, 0x8a, 0xcb, 0x81, 0x22, 0xa4, 0x2a, + 0xdf, 0xc9, 0x9f, 0x54, 0xfe, 0x5c, 0x39, 0x29, 0x57, 0x7f, 0x4c, 0x4f, 0xcf, 0xec, 0x0c, 0xb0, + 0x98, 0xc1, 0x81, 0xe4, 0x2f, 0x60, 0xfb, 0x75, 0xbf, 0xd7, 0xd3, 0xfd, 0xfa, 0xf5, 0x7b, 0xaf, + 0x5f, 0xbf, 0x86, 0x66, 0xcf, 0x0e, 0xb7, 0x87, 0x9b, 0x2b, 0xa6, 0xd7, 0xbf, 0xda, 0x33, 0x7c, + 0x8b, 0xb8, 0xc4, 0x8f, 0xff, 0x19, 0xec, 0xf4, 0xae, 0x1a, 0x03, 0x3b, 0xb8, 0x6a, 0x7a, 0x3e, + 0xb9, 0xba, 0xfb, 0xac, 0xe1, 0x0c, 0xb6, 0x8d, 0x67, 0xaf, 0xf6, 0x28, 0xd0, 0x08, 0x89, 0xb5, + 0x32, 0xf0, 0xbd, 0xd0, 0x43, 0xcf, 0xc5, 0x48, 0x56, 0xa2, 0xb6, 0xf1, 0x3f, 0x83, 0x9d, 0xde, + 0x0a, 0x45, 0xb2, 0x42, 0x91, 0xac, 0x44, 0x48, 0x2e, 0x37, 0x4e, 0x44, 0x79, 0x93, 0x84, 0xa3, + 0x84, 0x2f, 0xff, 0x98, 0x8a, 0xc3, 0xeb, 0x79, 0x57, 0x59, 0xf1, 0xe6, 0x70, 0x8b, 0xfd, 0x62, + 0x3f, 0xd8, 0x7f, 0xa2, 0xfa, 0x33, 0x3b, 0x9f, 0x0c, 0x56, 0x6c, 0x8f, 0x22, 0xbe, 0x6a, 0x0c, + 0x43, 0x2f, 0x30, 0x0d, 0xc7, 0x76, 0x7b, 0x57, 0x77, 0x47, 0x31, 0xeb, 0x4a, 0x55, 0xd1, 0x85, + 0x23, 0xeb, 0xf8, 0x9b, 0x86, 0x99, 0x55, 0xe7, 0x63, 0x71, 0x9d, 0xbe, 0x61, 0x6e, 0xdb, 0x2e, + 0xf1, 0xf7, 0xa3, 0x8f, 0xbb, 0xea, 0x93, 0xc0, 0x1b, 0xfa, 0x26, 0x39, 0x51, 0xab, 0xe0, 0x6a, + 0x9f, 0x84, 0x46, 0x16, 0xad, 0xab, 0x79, 0xad, 0xfc, 0xa1, 0x1b, 0xda, 0xfd, 0x51, 0x32, 0x3f, + 0x71, 0x5c, 0x83, 0xc0, 0xdc, 0x26, 0x7d, 0x63, 0xa4, 0xdd, 0x73, 0x79, 0xed, 0x86, 0xa1, 0xed, + 0x5c, 0xb5, 0xdd, 0x30, 0x08, 0xfd, 0x74, 0x23, 0xfd, 0xa3, 0x30, 0xb5, 0x6a, 0x59, 0x9e, 0x8b, + 0x9e, 0x81, 0x19, 0xe2, 0x1a, 0x9b, 0x0e, 0xb1, 0x96, 0xb5, 0x27, 0xb5, 0xa7, 0xab, 0x8d, 0x73, + 0xdf, 0x3d, 0xa8, 0xbf, 0xef, 0xf0, 0xa0, 0x3e, 0xb3, 0xc6, 0x8b, 0x71, 0x04, 0xd7, 0xbf, 0x5e, + 0x81, 0x69, 0xd6, 0x28, 0x40, 0xbf, 0xa4, 0xc1, 0xf9, 0x9d, 0xe1, 0x26, 0xf1, 0x5d, 0x12, 0x92, + 0xa0, 0x65, 0x04, 0xdb, 0x9b, 0x9e, 0xe1, 0x73, 0x14, 0xb5, 0x8f, 0xde, 0x58, 0x29, 0xc0, 0x82, + 0x2b, 0x37, 0x47, 0xf1, 0x35, 0x1e, 0x39, 0x3c, 0xa8, 0x9f, 0xcf, 0x00, 0xe0, 0x2c, 0xea, 0xe8, + 0x1e, 0xcc, 0xb9, 0x3d, 0xdb, 0xdd, 0x6b, 0xbb, 0x3d, 0x9f, 0x04, 0xc1, 0x72, 0x85, 0xf5, 0x66, + 0xb5, 0x50, 0x6f, 0x6e, 0x2b, 0x88, 0x1a, 0x8b, 0x87, 0x07, 0xf5, 0x39, 0xb5, 0x04, 0x27, 0x08, + 0xe9, 0x5f, 0xd5, 0xe0, 0xdc, 0xaa, 0xd5, 0xb7, 0x83, 0xc0, 0xf6, 0xdc, 0x8e, 0x33, 0xec, 0xd9, + 0x2e, 0x7a, 0x12, 0x26, 0x5d, 0xa3, 0x4f, 0xd8, 0x90, 0xcc, 0x36, 0xe6, 0xc4, 0xa8, 0x4e, 0xde, + 0x36, 0xfa, 0x04, 0x33, 0x08, 0x7a, 0x15, 0xa6, 0x4d, 0xcf, 0xdd, 0xb2, 0x7b, 0xa2, 0xa3, 0x3f, + 0xb6, 0xc2, 0x67, 0x72, 0x45, 0x9d, 0x49, 0xd6, 0x3f, 0xc1, 0x01, 0x2b, 0xd8, 0xb8, 0xb7, 0xb6, + 0x17, 0x12, 0x97, 0x92, 0x69, 0xc0, 0xe1, 0x41, 0x7d, 0xba, 0xc9, 0x10, 0x60, 0x81, 0x48, 0xbf, + 0x06, 0xd5, 0x55, 0x87, 0xf8, 0xa1, 0xed, 0xf6, 0xd0, 0x0b, 0xb0, 0x40, 0xfa, 0x86, 0xed, 0x60, + 0x62, 0x12, 0x7b, 0x97, 0xf8, 0xc1, 0xb2, 0xf6, 0xe4, 0xc4, 0xd3, 0xb3, 0x0d, 0x74, 0x78, 0x50, + 0x5f, 0x58, 0x4b, 0x40, 0x70, 0xaa, 0xa6, 0xfe, 0x15, 0x0d, 0x6a, 0xab, 0x43, 0xcb, 0x0e, 0x39, + 0x7e, 0x14, 0x40, 0xcd, 0xa0, 0x3f, 0x3b, 0x9e, 0x63, 0x9b, 0xfb, 0x62, 0x9a, 0x5f, 0x29, 0x34, + 0xb0, 0xab, 0x31, 0x9e, 0xc6, 0xb9, 0xc3, 0x83, 0x7a, 0x4d, 0x29, 0xc0, 0x2a, 0x15, 0x7d, 0x1b, + 0x54, 0x18, 0xfa, 0x1c, 0xcc, 0xf1, 0xaf, 0x5c, 0x37, 0x06, 0x98, 0x6c, 0x89, 0x4e, 0x7c, 0x40, + 0x19, 0xb4, 0x88, 0xd2, 0xca, 0x9d, 0xcd, 0x37, 0x89, 0x19, 0x62, 0xb2, 0x45, 0x7c, 0xe2, 0x9a, + 0x84, 0xcf, 0x5f, 0x53, 0x69, 0x8c, 0x13, 0xa8, 0xf4, 0x1f, 0x6a, 0xb0, 0xb8, 0xba, 0x6b, 0xd8, + 0x8e, 0xb1, 0x69, 0x3b, 0x76, 0xb8, 0xff, 0x79, 0xcf, 0x25, 0x63, 0x4c, 0xe0, 0x06, 0x3c, 0x32, + 0x74, 0x0d, 0xde, 0xce, 0x21, 0xeb, 0x7c, 0xca, 0xee, 0xee, 0x0f, 0x08, 0x65, 0x3d, 0x3a, 0xd4, + 0x8f, 0x1d, 0x1e, 0xd4, 0x1f, 0xd9, 0xc8, 0xae, 0x82, 0xf3, 0xda, 0x22, 0x0c, 0x97, 0x14, 0xd0, + 0x6b, 0x9e, 0x33, 0xec, 0x0b, 0xac, 0x13, 0x0c, 0xeb, 0xe5, 0xc3, 0x83, 0xfa, 0xa5, 0x8d, 0xcc, + 0x1a, 0x38, 0xa7, 0xa5, 0xfe, 0xbd, 0x0a, 0xcc, 0x35, 0x0c, 0x73, 0x67, 0x38, 0x68, 0x0c, 0xcd, + 0x1d, 0x12, 0xa2, 0x2f, 0x42, 0x95, 0x4a, 0x2e, 0xcb, 0x08, 0x0d, 0x31, 0x92, 0x3f, 0x9e, 0xcb, + 0x7e, 0x6c, 0x16, 0x69, 0xed, 0x78, 0x6c, 0xd7, 0x49, 0x68, 0x34, 0x90, 0x18, 0x13, 0x88, 0xcb, + 0xb0, 0xc4, 0x8a, 0x7a, 0x30, 0x19, 0x0c, 0x88, 0x29, 0x98, 0x7b, 0xad, 0x10, 0xb3, 0xa8, 0x5d, + 0xee, 0x0e, 0x88, 0x19, 0x4f, 0x03, 0xfd, 0x85, 0x19, 0x01, 0xe4, 0xc1, 0x74, 0x10, 0x1a, 0xe1, + 0x90, 0x8e, 0x0f, 0x25, 0x75, 0xbd, 0x3c, 0x29, 0x86, 0xae, 0xb1, 0x20, 0x88, 0x4d, 0xf3, 0xdf, + 0x58, 0x90, 0xd1, 0x7f, 0xa0, 0xc1, 0xa2, 0x5a, 0xfd, 0x96, 0x1d, 0x84, 0xe8, 0x2f, 0x8d, 0x0c, + 0xe8, 0xca, 0x78, 0x03, 0x4a, 0x5b, 0xb3, 0xe1, 0x5c, 0x14, 0xe4, 0xaa, 0x51, 0x89, 0x32, 0x98, + 0x5b, 0x30, 0x65, 0x87, 0xa4, 0xcf, 0x19, 0xab, 0xa8, 0x4c, 0x53, 0xfb, 0xdc, 0x98, 0x17, 0xd4, + 0xa6, 0xda, 0x14, 0x2f, 0xe6, 0xe8, 0xf5, 0x2f, 0xc2, 0x05, 0xb5, 0x56, 0xc7, 0xf7, 0x76, 0x6d, + 0x8b, 0xf8, 0x74, 0x31, 0x84, 0xfb, 0x83, 0x91, 0xc5, 0x40, 0x99, 0x0b, 0x33, 0x08, 0xfa, 0x10, + 0x4c, 0xfb, 0xa4, 0x67, 0x7b, 0x2e, 0x9b, 0xf0, 0xd9, 0x78, 0xf0, 0x30, 0x2b, 0xc5, 0x02, 0xaa, + 0xff, 0xf7, 0x4a, 0x72, 0xf0, 0xe8, 0x44, 0xa2, 0x7b, 0x50, 0x1d, 0x08, 0x52, 0x62, 0xf0, 0xda, + 0xa5, 0xbf, 0x30, 0xea, 0x7b, 0x3c, 0xae, 0x51, 0x09, 0x96, 0xc4, 0x90, 0x0d, 0x0b, 0xd1, 0xff, + 0xcd, 0x12, 0xb2, 0x98, 0xc9, 0xd4, 0x4e, 0x02, 0x11, 0x4e, 0x21, 0x46, 0x77, 0x61, 0x36, 0x20, + 0xa6, 0x4f, 0xa8, 0x5c, 0x12, 0x9c, 0x9a, 0x29, 0xbc, 0xba, 0x51, 0x25, 0x21, 0xbc, 0x96, 0x44, + 0xf7, 0x67, 0x25, 0x00, 0xc7, 0x88, 0xd0, 0xe3, 0x30, 0x19, 0x10, 0x62, 0x2d, 0x4f, 0xb2, 0x41, + 0xaf, 0xb2, 0xa5, 0x41, 0x88, 0x85, 0x59, 0xa9, 0xfe, 0x6b, 0x93, 0x80, 0x46, 0x19, 0x5b, 0xfd, + 0x6a, 0x5e, 0x22, 0x06, 0xbd, 0xcc, 0x57, 0x8b, 0x35, 0x92, 0x42, 0x8c, 0xde, 0x86, 0x79, 0xc7, + 0x08, 0xc2, 0x3b, 0x03, 0xaa, 0x7e, 0x44, 0xdc, 0x51, 0xfb, 0x68, 0xa3, 0xd0, 0xf4, 0xde, 0x52, + 0x31, 0x35, 0x96, 0x0e, 0x0f, 0xea, 0xf3, 0x89, 0x22, 0x9c, 0xa4, 0x85, 0x76, 0x60, 0x96, 0x16, + 0xac, 0xf9, 0xbe, 0xe7, 0x8b, 0x21, 0x7f, 0xb9, 0x30, 0x61, 0x86, 0xa5, 0x31, 0x4f, 0x67, 0x42, + 0xfe, 0xc4, 0x31, 0x7e, 0xf4, 0x19, 0x40, 0xde, 0x66, 0x40, 0xfc, 0x5d, 0x62, 0x5d, 0xe7, 0xda, + 0x16, 0xfd, 0x5c, 0x3a, 0x2f, 0x13, 0x8d, 0xcb, 0x62, 0x0e, 0xd1, 0x9d, 0x91, 0x1a, 0x38, 0xa3, + 0x15, 0xda, 0x01, 0x24, 0x35, 0x36, 0x39, 0xed, 0xcb, 0x53, 0xe3, 0x33, 0xcd, 0x25, 0x4a, 0xec, + 0xfa, 0x08, 0x0a, 0x9c, 0x81, 0x56, 0xff, 0xfd, 0x0a, 0xd4, 0x38, 0x93, 0xac, 0xb9, 0xa1, 0xbf, + 0x7f, 0x06, 0x5b, 0xc3, 0x56, 0x62, 0x6b, 0x68, 0x95, 0x58, 0xea, 0xac, 0xc7, 0xb9, 0x3b, 0x83, + 0x9b, 0xda, 0x19, 0xae, 0x95, 0xa6, 0x74, 0xf4, 0xc6, 0xf0, 0xc7, 0x1a, 0x9c, 0x53, 0x6a, 0x9f, + 0xc1, 0xbe, 0x40, 0x92, 0xfb, 0xc2, 0x2b, 0x65, 0x3f, 0x30, 0x67, 0x5b, 0x30, 0x13, 0xdf, 0xc5, + 0x44, 0xf6, 0x47, 0x01, 0x36, 0x99, 0x4c, 0xb9, 0x1d, 0x2b, 0x49, 0x72, 0xd6, 0x1b, 0x12, 0x82, + 0x95, 0x5a, 0x52, 0x58, 0x55, 0x32, 0x85, 0xd5, 0xbf, 0xaa, 0xc0, 0xd2, 0xc8, 0x58, 0x8f, 0x0a, + 0x10, 0xed, 0x9d, 0x12, 0x20, 0x95, 0x77, 0x44, 0x80, 0x4c, 0x14, 0x11, 0x20, 0xfa, 0xef, 0x69, + 0x30, 0xd1, 0xc4, 0x6d, 0xf4, 0xe1, 0x84, 0x12, 0xfb, 0x88, 0xaa, 0xc4, 0x3e, 0x38, 0xa8, 0xcf, + 0x34, 0x71, 0x5b, 0xd1, 0x67, 0x7f, 0x41, 0x83, 0x25, 0xd3, 0x73, 0x43, 0x83, 0x72, 0x24, 0xe6, + 0x12, 0x3f, 0xe2, 0xac, 0x62, 0xfa, 0x5b, 0x33, 0x85, 0xad, 0xf1, 0xa8, 0xe8, 0xc1, 0x52, 0x1a, + 0x12, 0xe0, 0x51, 0xd2, 0xfa, 0x06, 0xcc, 0x36, 0x1d, 0x6f, 0x68, 0xb5, 0xdd, 0x2d, 0xef, 0x14, + 0x55, 0x90, 0x7f, 0xaf, 0xc1, 0x1c, 0xc3, 0xdb, 0xf1, 0xbd, 0x2d, 0xdb, 0x21, 0xef, 0x11, 0x65, + 0x58, 0xed, 0x72, 0x9e, 0xc8, 0x63, 0xba, 0xa9, 0x5a, 0xf1, 0xbd, 0xa2, 0x9b, 0xaa, 0x7d, 0xce, + 0x11, 0x42, 0xdf, 0x98, 0x49, 0x7e, 0x1a, 0x13, 0x43, 0x4f, 0x43, 0xd5, 0x34, 0x1a, 0x43, 0xd7, + 0x72, 0x24, 0x67, 0xd0, 0x6e, 0x36, 0x57, 0x79, 0x19, 0x96, 0x50, 0xf4, 0x36, 0x40, 0xec, 0x34, + 0x10, 0x13, 0x71, 0xbd, 0xa4, 0xa7, 0xa2, 0x4b, 0x42, 0x6a, 0x6b, 0x07, 0xf1, 0xec, 0xc7, 0x30, + 0xac, 0x90, 0x43, 0x7f, 0x05, 0xe6, 0xc5, 0x30, 0xb7, 0xfb, 0x46, 0x4f, 0x98, 0x72, 0x45, 0xc7, + 0x6a, 0x5d, 0xc1, 0xd4, 0xb8, 0x28, 0x28, 0xcf, 0xab, 0xa5, 0x01, 0x4e, 0x92, 0x43, 0xf7, 0x61, + 0xae, 0xaf, 0xda, 0xa7, 0x93, 0x25, 0xb6, 0x0b, 0xc5, 0x58, 0x6d, 0x5c, 0x10, 0xd4, 0xe7, 0x12, + 0xa6, 0x6d, 0x82, 0x56, 0x86, 0x8e, 0x3d, 0xf5, 0xb0, 0x74, 0xec, 0x2d, 0x98, 0xe1, 0x6b, 0x3c, + 0x58, 0x9e, 0x66, 0x5f, 0xf8, 0xa9, 0x42, 0x5f, 0xc8, 0xe5, 0x45, 0xec, 0x0a, 0xe3, 0xbf, 0x03, + 0x1c, 0x21, 0x47, 0xf7, 0x60, 0x8e, 0x6e, 0x59, 0x5d, 0xe2, 0x10, 0x33, 0xf4, 0xfc, 0xe5, 0x99, + 0x12, 0x9e, 0xa6, 0xae, 0x82, 0x88, 0x7b, 0x2a, 0xd4, 0x12, 0x9c, 0x20, 0x24, 0x85, 0x60, 0x35, + 0x57, 0x08, 0xee, 0x42, 0x6d, 0x57, 0x71, 0x19, 0xcc, 0xb2, 0x61, 0xf8, 0x74, 0xa1, 0x9e, 0xc5, + 0x0e, 0x84, 0xc6, 0x79, 0x41, 0xa9, 0xa6, 0x3a, 0x1b, 0x54, 0x42, 0xfa, 0xcf, 0x4d, 0xc3, 0x52, + 0xd3, 0x19, 0x06, 0x21, 0xf1, 0x57, 0x85, 0x37, 0x97, 0xf8, 0xe8, 0x2b, 0x1a, 0x5c, 0x62, 0xff, + 0xb6, 0xbc, 0x7b, 0x6e, 0x8b, 0x38, 0xc6, 0xfe, 0xea, 0x16, 0xad, 0x61, 0x59, 0x27, 0x13, 0x44, + 0xad, 0xa1, 0xd8, 0xb3, 0x99, 0xf3, 0xa3, 0x9b, 0x89, 0x11, 0xe7, 0x50, 0x42, 0x3f, 0xaf, 0xc1, + 0xa3, 0x19, 0xa0, 0x16, 0x71, 0x48, 0x48, 0x84, 0x24, 0x38, 0x69, 0x3f, 0x9e, 0x38, 0x3c, 0xa8, + 0x3f, 0xda, 0xcd, 0x43, 0x8a, 0xf3, 0xe9, 0xd1, 0x5d, 0xf6, 0x72, 0x06, 0xf4, 0x9a, 0x61, 0x3b, + 0x43, 0x9f, 0x08, 0x4d, 0xf5, 0xa4, 0xdd, 0xb9, 0x72, 0x78, 0x50, 0xbf, 0xdc, 0xcd, 0xc5, 0x8a, + 0x8f, 0xa0, 0x88, 0xbe, 0x04, 0x17, 0x25, 0x74, 0xc3, 0x75, 0x09, 0xb1, 0x88, 0x75, 0xd7, 0xee, + 0x13, 0x66, 0xbb, 0x9c, 0xbc, 0x2b, 0x8f, 0x1e, 0x1e, 0xd4, 0x2f, 0x76, 0xb3, 0x10, 0xe2, 0x6c, + 0x3a, 0xa8, 0x07, 0x4f, 0xc4, 0x80, 0xd0, 0x76, 0xec, 0xfb, 0x0c, 0xd3, 0xdd, 0x6d, 0x9f, 0x04, + 0xdb, 0x9e, 0x63, 0x31, 0x79, 0xa1, 0x35, 0xde, 0x7f, 0x78, 0x50, 0x7f, 0xa2, 0x7b, 0x54, 0x45, + 0x7c, 0x34, 0x1e, 0x64, 0xc1, 0x5c, 0x60, 0x1a, 0x6e, 0xdb, 0x0d, 0x89, 0xbf, 0x6b, 0x38, 0xcb, + 0xd3, 0x85, 0x3e, 0x90, 0xaf, 0x51, 0x05, 0x0f, 0x4e, 0x60, 0xd5, 0xff, 0x87, 0x06, 0x35, 0xb1, + 0x12, 0x98, 0xe2, 0x62, 0xc2, 0x94, 0x49, 0xb7, 0x2d, 0xc1, 0xf1, 0x2f, 0x17, 0xdf, 0x1f, 0x29, + 0xba, 0x78, 0x73, 0x64, 0x45, 0x98, 0xe3, 0x46, 0xf7, 0x32, 0x76, 0xb7, 0x66, 0xc9, 0xdd, 0x8d, + 0x91, 0x3b, 0x66, 0x67, 0xd3, 0x0f, 0x26, 0x60, 0xb6, 0xe9, 0xb9, 0x96, 0xcd, 0x14, 0xe6, 0x67, + 0x13, 0x4a, 0xda, 0x13, 0xaa, 0x7c, 0x7a, 0x70, 0x50, 0x9f, 0x97, 0x15, 0x15, 0x81, 0xf5, 0xbc, + 0x34, 0xd2, 0xb8, 0xd6, 0xf6, 0xfe, 0xa4, 0x71, 0xf5, 0xe0, 0xa0, 0x7e, 0x4e, 0x36, 0x4b, 0xda, + 0x5b, 0x68, 0x17, 0x10, 0x55, 0x9f, 0xef, 0xfa, 0x86, 0x1b, 0x70, 0xb4, 0x94, 0x6d, 0xf9, 0x0a, + 0xfa, 0x8b, 0xe3, 0xcd, 0x2a, 0x6d, 0x11, 0x6b, 0xd7, 0xb7, 0x46, 0xb0, 0xe1, 0x0c, 0x0a, 0xe8, + 0x4d, 0x58, 0xa0, 0xa5, 0x1b, 0x03, 0xcb, 0x08, 0x89, 0xb2, 0x54, 0x4e, 0x42, 0xf3, 0x92, 0xa0, + 0xb9, 0x70, 0x2b, 0x81, 0x09, 0xa7, 0x30, 0x73, 0xa5, 0xd6, 0x08, 0x3c, 0x97, 0xad, 0x82, 0x84, + 0x52, 0x4b, 0x4b, 0xb1, 0x80, 0xa2, 0x67, 0x60, 0xa6, 0x4f, 0x82, 0xc0, 0xe8, 0x11, 0xc6, 0xd6, + 0xb3, 0xf1, 0xee, 0xb5, 0xce, 0x8b, 0x71, 0x04, 0x47, 0x1f, 0x81, 0x29, 0xd3, 0xb3, 0x48, 0xb0, + 0x3c, 0xc3, 0xfc, 0xc9, 0x97, 0x18, 0x33, 0xd1, 0x82, 0x07, 0x07, 0xf5, 0x59, 0x66, 0x8b, 0xd0, + 0x5f, 0x98, 0x57, 0xd2, 0x7f, 0x85, 0x6a, 0x94, 0x29, 0xd5, 0x3c, 0xcf, 0x39, 0xce, 0xa7, 0x95, + 0x19, 0x13, 0x67, 0xe7, 0x59, 0xd3, 0xbf, 0x5f, 0x81, 0x0b, 0xb4, 0x87, 0xbe, 0xe7, 0x38, 0x54, + 0xcc, 0x0e, 0x1c, 0x6f, 0xbf, 0x4f, 0xdc, 0x70, 0x0c, 0x93, 0xe1, 0x0c, 0xfd, 0x7f, 0xaf, 0xc0, + 0xf4, 0x80, 0x1f, 0x9f, 0x4c, 0xb0, 0xee, 0x3c, 0x4d, 0x27, 0x91, 0x9f, 0x6d, 0x3c, 0x38, 0xa8, + 0x5f, 0xce, 0xfa, 0x00, 0x71, 0x2a, 0x22, 0xda, 0x21, 0x3b, 0xa5, 0x75, 0x70, 0xa6, 0x7b, 0x6e, + 0x4c, 0x55, 0xde, 0xd8, 0x24, 0xce, 0xb8, 0x7a, 0x86, 0xfe, 0x5f, 0x2b, 0x70, 0x29, 0xee, 0x51, + 0xdb, 0x0d, 0x42, 0xc3, 0x71, 0xb8, 0x4d, 0xfc, 0xf0, 0x8d, 0xa5, 0xb7, 0x12, 0xc6, 0xd2, 0x9d, + 0xc2, 0x96, 0xe7, 0x68, 0xe7, 0x73, 0x3d, 0x45, 0xfb, 0x29, 0x4f, 0xd1, 0xab, 0xa7, 0x49, 0xf4, + 0x68, 0xa7, 0xd1, 0xff, 0xd4, 0xe0, 0x72, 0x76, 0xc3, 0x33, 0xb0, 0xdd, 0x06, 0x49, 0xdb, 0xed, + 0xe6, 0x29, 0x7e, 0x76, 0x8e, 0x15, 0xf7, 0x47, 0xb9, 0x9f, 0xcb, 0xec, 0xb9, 0x2d, 0x38, 0x47, + 0x95, 0xec, 0x20, 0x14, 0xce, 0x8d, 0x93, 0x1d, 0xf4, 0x45, 0x0e, 0x8e, 0x73, 0x38, 0x89, 0x03, + 0xa7, 0x91, 0xa2, 0xdb, 0x30, 0x43, 0x19, 0x9e, 0xe2, 0xaf, 0x8c, 0x8f, 0x5f, 0xca, 0xd4, 0x2e, + 0x6f, 0x8b, 0x23, 0x24, 0xfa, 0xff, 0xd3, 0xe0, 0xf1, 0xa3, 0xa6, 0x1f, 0xf9, 0x00, 0x66, 0xb4, + 0x8d, 0xf1, 0xa3, 0xd8, 0xc2, 0xaa, 0x40, 0x84, 0x26, 0x5e, 0x46, 0xb2, 0x28, 0xc0, 0x0a, 0x95, + 0x0c, 0x3f, 0x7f, 0xe5, 0x21, 0xf9, 0xf9, 0xf5, 0xff, 0xa5, 0xa9, 0x02, 0x43, 0x1d, 0xfe, 0xf7, + 0x9c, 0xc0, 0x50, 0x3b, 0x9f, 0xeb, 0x67, 0x49, 0xae, 0x5a, 0xb5, 0xc9, 0x7b, 0x6f, 0xd5, 0xaa, + 0xbd, 0xcf, 0x59, 0xb5, 0xbf, 0x58, 0xc9, 0xfb, 0x5c, 0xb6, 0x6a, 0xf7, 0x60, 0x36, 0x0a, 0x9f, + 0x89, 0x78, 0xfb, 0x7a, 0xe9, 0x4e, 0x71, 0x7c, 0xf1, 0xf9, 0x57, 0x54, 0x12, 0xe0, 0x98, 0x18, + 0xda, 0x07, 0xb0, 0xe4, 0x7e, 0x29, 0x18, 0xa0, 0x5d, 0x92, 0x74, 0xbc, 0x01, 0x37, 0x16, 0x28, + 0xcf, 0xc5, 0xbf, 0xb1, 0x42, 0x4c, 0xff, 0x8d, 0x0a, 0xa0, 0xd1, 0xfe, 0x52, 0xa5, 0x63, 0xc7, + 0x76, 0xad, 0xb4, 0xd2, 0x71, 0xd3, 0x76, 0x2d, 0xcc, 0x20, 0x52, 0x2d, 0xa9, 0xe4, 0xaa, 0x25, + 0x2f, 0xc1, 0xb9, 0x9e, 0xe3, 0x6d, 0x1a, 0x8e, 0xb3, 0x2f, 0xc2, 0x70, 0xd8, 0xbe, 0x54, 0x6d, + 0x9c, 0xa7, 0xc2, 0xed, 0x7a, 0x12, 0x84, 0xd3, 0x75, 0xd1, 0x00, 0x16, 0x7d, 0x62, 0x7a, 0xae, + 0x69, 0x3b, 0x4c, 0x89, 0xf4, 0x86, 0x61, 0x41, 0x63, 0xee, 0xc2, 0xe1, 0x41, 0x7d, 0x11, 0xa7, + 0x70, 0xe1, 0x11, 0xec, 0xe8, 0x29, 0x98, 0x19, 0xf8, 0x76, 0xdf, 0xf0, 0xf7, 0x99, 0x9a, 0x5a, + 0x6d, 0xd4, 0xa8, 0x94, 0xec, 0xf0, 0x22, 0x1c, 0xc1, 0xf4, 0x6f, 0x6a, 0x30, 0xd1, 0xba, 0xdd, + 0x45, 0x3a, 0x4c, 0x5b, 0x5e, 0xdf, 0xb0, 0x5d, 0x31, 0x4a, 0x2c, 0x96, 0xa5, 0xc5, 0x4a, 0xb0, + 0x80, 0xa0, 0xb7, 0x60, 0x36, 0x92, 0x31, 0xe5, 0x8e, 0x37, 0x5a, 0xb7, 0xbb, 0xf2, 0x2c, 0x58, + 0x32, 0x53, 0x54, 0x12, 0xe0, 0x98, 0x8a, 0x6e, 0xc0, 0x52, 0xeb, 0x76, 0xb7, 0xed, 0x9a, 0xce, + 0xd0, 0x22, 0x6b, 0x7b, 0xec, 0x0f, 0xfd, 0x34, 0x9b, 0x97, 0x88, 0x00, 0x1a, 0xf6, 0x69, 0xa2, + 0x12, 0x8e, 0x60, 0xb4, 0x1a, 0xe1, 0x2d, 0x44, 0xf0, 0x07, 0xab, 0x26, 0x90, 0xe0, 0x08, 0xa6, + 0xff, 0x49, 0x05, 0x6a, 0x4a, 0x87, 0x50, 0x1f, 0x66, 0xf8, 0xf7, 0x46, 0x67, 0xb0, 0xd7, 0x8a, + 0x7e, 0x63, 0xb2, 0xdb, 0x9c, 0x3c, 0x1f, 0xd2, 0x00, 0x47, 0x34, 0xd4, 0x79, 0xaa, 0xe4, 0xcf, + 0x13, 0x5a, 0x01, 0xe0, 0x47, 0xcc, 0xec, 0x70, 0x87, 0xeb, 0xab, 0x6c, 0x29, 0x74, 0x65, 0x29, + 0x56, 0x6a, 0xa0, 0xc7, 0x05, 0x47, 0x2b, 0xa7, 0xd0, 0x0a, 0x37, 0xf7, 0x60, 0xea, 0xbe, 0xe7, + 0x92, 0x40, 0xf8, 0xfd, 0x4e, 0xeb, 0x0b, 0x67, 0xa9, 0x94, 0xfa, 0x3c, 0x45, 0x8c, 0x39, 0x7e, + 0xfd, 0x5b, 0x1a, 0x40, 0xcb, 0x08, 0x0d, 0xee, 0xa4, 0x1a, 0x23, 0x82, 0xe7, 0xf1, 0xc4, 0x4a, + 0xac, 0x8e, 0x9c, 0x27, 0x4c, 0x06, 0xf6, 0xfd, 0xe8, 0xfb, 0xe5, 0x16, 0xc4, 0xb1, 0x77, 0xed, + 0xfb, 0x04, 0x33, 0x38, 0xfa, 0x30, 0xcc, 0x12, 0xd7, 0xf4, 0xf7, 0x07, 0xa1, 0x38, 0x88, 0xaf, + 0xf2, 0x53, 0x9e, 0xb5, 0xa8, 0x10, 0xc7, 0x70, 0x7d, 0x17, 0xaa, 0x6b, 0xae, 0x35, 0xf0, 0x6c, + 0x6e, 0x9f, 0x1c, 0xd3, 0xc1, 0x27, 0x60, 0x62, 0xe8, 0x3b, 0xa2, 0x7f, 0x35, 0x51, 0x61, 0x62, + 0x03, 0xdf, 0xc2, 0xb4, 0x9c, 0x1a, 0x7d, 0x83, 0xa1, 0x3f, 0xf0, 0x82, 0xa8, 0x93, 0x52, 0x41, + 0xe9, 0xf0, 0x62, 0x1c, 0xc1, 0xf5, 0x07, 0x1a, 0x2c, 0xae, 0xed, 0x0d, 0x6c, 0x9f, 0x85, 0x06, + 0x11, 0x9f, 0xee, 0xec, 0xb4, 0xfd, 0x2e, 0xff, 0x57, 0xf4, 0x41, 0xb6, 0x17, 0x35, 0x70, 0x04, + 0x47, 0x5b, 0xb0, 0x40, 0x58, 0x73, 0x2a, 0x17, 0x5a, 0x86, 0x74, 0x9c, 0x9d, 0xc4, 0xe6, 0xe5, + 0xa1, 0x67, 0x09, 0x2c, 0x38, 0x85, 0x15, 0x75, 0x61, 0xc1, 0x74, 0x8c, 0x20, 0xb0, 0xb7, 0x6c, + 0x33, 0x3e, 0x01, 0x9b, 0x6d, 0x7c, 0x98, 0xb6, 0x6d, 0x26, 0x20, 0x0f, 0x0e, 0xea, 0x17, 0x45, + 0x3f, 0x93, 0x00, 0x9c, 0x42, 0xa1, 0xff, 0xae, 0x06, 0xb3, 0x52, 0x9f, 0x79, 0x77, 0x99, 0x85, + 0x4f, 0x43, 0xd5, 0xb2, 0x03, 0x55, 0xc6, 0xb3, 0x03, 0x8c, 0x96, 0x28, 0xc3, 0x12, 0xaa, 0xff, + 0xeb, 0x0a, 0x5c, 0x92, 0xb8, 0xa3, 0xed, 0x86, 0xaa, 0x5f, 0xe3, 0xec, 0x39, 0x8f, 0x0b, 0x56, + 0x53, 0x38, 0x5d, 0x61, 0xb3, 0xa7, 0xd2, 0x7c, 0x54, 0xcb, 0xe2, 0x21, 0x74, 0x1b, 0xa6, 0xa8, + 0xd1, 0x12, 0xb9, 0x3b, 0x4e, 0x38, 0x1a, 0x6c, 0xbd, 0xb2, 0xfe, 0x62, 0x8e, 0x06, 0xbd, 0xad, + 0xaa, 0x0d, 0x53, 0x4c, 0xc4, 0x7f, 0xe6, 0x64, 0xc2, 0x81, 0x45, 0x22, 0xaf, 0xd0, 0x2f, 0xb1, + 0xa2, 0x11, 0xc9, 0x88, 0x9c, 0xc9, 0xd2, 0x1c, 0xf4, 0x00, 0xaa, 0xd7, 0x05, 0x5a, 0x74, 0x19, + 0x2a, 0x76, 0x34, 0x7a, 0x20, 0x5a, 0x55, 0xda, 0x2d, 0x5c, 0xb1, 0x2d, 0xb9, 0x48, 0x2b, 0xb9, + 0x8b, 0x54, 0x59, 0x45, 0x13, 0x47, 0xaf, 0x22, 0xfd, 0x1f, 0x69, 0x70, 0x21, 0xa2, 0x1a, 0xf5, + 0x8a, 0x4a, 0xac, 0x31, 0x44, 0xc1, 0xf1, 0x5a, 0xc3, 0x1d, 0x98, 0x64, 0x0a, 0xe7, 0x44, 0x91, + 0xd9, 0x91, 0x08, 0x69, 0x77, 0x30, 0x43, 0xa4, 0x7f, 0x5b, 0x83, 0xda, 0x0d, 0x7b, 0x93, 0xf8, + 0x2e, 0xd7, 0xe4, 0x9f, 0x4a, 0x07, 0x0b, 0xd7, 0xb2, 0x02, 0x85, 0xd1, 0x3e, 0xcc, 0x06, 0xe6, + 0x36, 0xb1, 0x86, 0x8e, 0x3c, 0x3e, 0x2e, 0x16, 0x12, 0xac, 0xd0, 0xee, 0x0a, 0x84, 0x4a, 0x38, + 0x54, 0x44, 0x02, 0xc7, 0xd4, 0xf4, 0xb7, 0xe1, 0x7c, 0x46, 0x23, 0x54, 0x67, 0x8c, 0xeb, 0x87, + 0x62, 0x78, 0x23, 0x4e, 0xf4, 0x43, 0xcc, 0xcb, 0xd1, 0xa3, 0x30, 0x41, 0xdc, 0x28, 0x30, 0x61, + 0x86, 0xca, 0xd8, 0x35, 0xd7, 0xc2, 0xb4, 0x8c, 0x2e, 0x50, 0xc7, 0x4b, 0x88, 0x22, 0xb6, 0x40, + 0x6f, 0x89, 0x32, 0x2c, 0xa1, 0xfa, 0xdf, 0x9c, 0x86, 0x27, 0x6e, 0x78, 0xbe, 0x7d, 0xdf, 0x73, + 0x43, 0xc3, 0xe9, 0x78, 0x56, 0x7c, 0x10, 0x22, 0x16, 0xfb, 0xcf, 0x6a, 0xf0, 0x88, 0x39, 0x18, + 0xb6, 0x5d, 0x3b, 0xb4, 0x8d, 0xc8, 0x3f, 0xdd, 0x21, 0xbe, 0xed, 0x15, 0x3d, 0x0f, 0x61, 0x21, + 0xa6, 0xcd, 0xce, 0x46, 0x16, 0x4a, 0x9c, 0x47, 0x0b, 0xbd, 0x09, 0x0b, 0x96, 0x77, 0xcf, 0xe5, + 0xde, 0x72, 0xe2, 0x18, 0xfb, 0x05, 0x4f, 0x41, 0x98, 0x80, 0x6b, 0x25, 0x30, 0xe1, 0x14, 0x66, + 0x76, 0x04, 0x24, 0x8b, 0xba, 0x21, 0x0b, 0xb1, 0xbd, 0x1f, 0x0f, 0x67, 0xc1, 0x23, 0xa0, 0x56, + 0x26, 0x46, 0x9c, 0x43, 0x09, 0x7d, 0x09, 0x2e, 0xda, 0x7c, 0x20, 0x30, 0x31, 0x2c, 0xdb, 0x25, + 0x41, 0xc0, 0xbf, 0xbb, 0xc4, 0x19, 0x47, 0x3b, 0x0b, 0x21, 0xce, 0xa6, 0x83, 0x7e, 0x12, 0x20, + 0xd8, 0x77, 0x4d, 0x31, 0xd7, 0x53, 0x85, 0xa8, 0x72, 0x0d, 0x4c, 0x62, 0xc1, 0x0a, 0x46, 0xaa, + 0x83, 0x84, 0x9e, 0x43, 0x7c, 0xc3, 0x35, 0xb9, 0x03, 0x58, 0xe3, 0x3a, 0xc8, 0xdd, 0xa8, 0x10, + 0xc7, 0x70, 0x64, 0xc1, 0xdc, 0x70, 0xa0, 0x4c, 0xfe, 0x4c, 0xf1, 0x73, 0x90, 0x0d, 0x05, 0x0f, + 0x4e, 0x60, 0xd5, 0xff, 0x89, 0x06, 0x33, 0x22, 0x42, 0x1e, 0x7d, 0x28, 0xa5, 0xf0, 0x4b, 0x67, + 0x58, 0x4a, 0xe9, 0xbf, 0xcf, 0xbc, 0x24, 0xc2, 0xa4, 0x12, 0x4c, 0x59, 0x4c, 0x5f, 0x14, 0x94, + 0x63, 0x03, 0x2d, 0xe1, 0x2d, 0x89, 0x8c, 0x36, 0x85, 0x9a, 0xfe, 0xab, 0x1a, 0x2c, 0x8d, 0xb4, + 0x1a, 0x63, 0x6b, 0x3d, 0x43, 0x4f, 0xf7, 0x37, 0x01, 0xd8, 0x75, 0x88, 0xd5, 0x4e, 0xbb, 0x4b, + 0xfc, 0x5d, 0x29, 0x57, 0x7e, 0x5e, 0x83, 0xc5, 0xf8, 0x4c, 0x46, 0xf4, 0x42, 0x2b, 0x11, 0x6b, + 0x72, 0x33, 0x85, 0xac, 0xb1, 0x2c, 0x3e, 0x7c, 0x31, 0x0d, 0xc1, 0x23, 0x84, 0xd1, 0xdf, 0xd0, + 0x60, 0xd1, 0x48, 0x5e, 0x87, 0x88, 0xf6, 0x81, 0x62, 0xb1, 0x7e, 0xa9, 0xbb, 0x15, 0x71, 0x67, + 0x52, 0x80, 0x00, 0x8f, 0xd0, 0x45, 0x1f, 0x83, 0x39, 0x63, 0x60, 0xaf, 0x0e, 0x2d, 0x9b, 0xea, + 0x04, 0x51, 0x0c, 0x3d, 0xe3, 0xdd, 0xd5, 0x4e, 0x5b, 0x96, 0xe3, 0x44, 0x2d, 0x79, 0xe1, 0x41, + 0x0c, 0xe5, 0x64, 0xd9, 0x0b, 0x0f, 0x62, 0x14, 0xe3, 0x0b, 0x0f, 0x62, 0xf0, 0x54, 0x2a, 0xe8, + 0x0b, 0xf0, 0x28, 0xdf, 0x42, 0x1b, 0x46, 0x60, 0x9b, 0xab, 0xc3, 0x70, 0x9b, 0xb8, 0x61, 0xa4, + 0x05, 0x73, 0xb3, 0x9a, 0x1d, 0x3b, 0xaf, 0xe5, 0x55, 0xc2, 0xf9, 0xed, 0x91, 0x07, 0xe0, 0xd9, + 0x96, 0x29, 0x3e, 0x88, 0x9f, 0x7c, 0x16, 0x0b, 0x0b, 0xb8, 0xd3, 0x6e, 0x35, 0xc5, 0xf7, 0x30, + 0x89, 0x14, 0xff, 0xc6, 0x0a, 0x09, 0xf4, 0x77, 0x35, 0x98, 0x17, 0x8c, 0x2e, 0x88, 0xce, 0x30, + 0x16, 0xf8, 0x42, 0x61, 0x86, 0x4c, 0x71, 0xfd, 0x0a, 0x56, 0xb1, 0xf3, 0xf0, 0x45, 0x19, 0x0d, + 0x93, 0x80, 0xe1, 0x64, 0x47, 0xd0, 0xd7, 0x35, 0xb8, 0x10, 0x10, 0x7f, 0xd7, 0x36, 0xc9, 0xaa, + 0x69, 0x7a, 0x43, 0x37, 0x9a, 0xe7, 0x6a, 0x09, 0xff, 0x51, 0x37, 0x03, 0x61, 0x63, 0xf9, 0xf0, + 0xa0, 0x7e, 0x21, 0x0b, 0x82, 0x33, 0x3b, 0x80, 0x7e, 0x5a, 0x83, 0x73, 0xf7, 0x8c, 0xd0, 0xdc, + 0x6e, 0x1a, 0xe6, 0x36, 0xb3, 0x31, 0x83, 0xe5, 0xd9, 0x12, 0x51, 0xb2, 0xaf, 0x27, 0x71, 0x71, + 0xff, 0x51, 0xaa, 0x10, 0xa7, 0x29, 0xa2, 0x10, 0xaa, 0x3e, 0x79, 0x6b, 0x48, 0x82, 0x30, 0x58, + 0x06, 0x46, 0xfd, 0x33, 0xe5, 0x27, 0x0d, 0x0b, 0x8c, 0x5c, 0x7d, 0x8a, 0x7e, 0x61, 0x49, 0xe9, + 0xf2, 0x2b, 0x80, 0x46, 0x67, 0x14, 0x2d, 0xc2, 0xc4, 0x0e, 0xe1, 0x57, 0x8e, 0x66, 0x31, 0xfd, + 0x17, 0x5d, 0x80, 0xa9, 0x5d, 0xc3, 0x19, 0x72, 0x4d, 0xb8, 0x8a, 0xf9, 0x8f, 0x17, 0x2a, 0x9f, + 0xd4, 0xf4, 0xef, 0x68, 0x70, 0x31, 0x93, 0x26, 0xc2, 0x70, 0xa9, 0x6f, 0xec, 0xdd, 0xf6, 0xdc, + 0xf5, 0x61, 0x68, 0x84, 0xb6, 0xdb, 0x6b, 0xbb, 0x5b, 0x8e, 0xdd, 0xdb, 0xe6, 0x1a, 0xe1, 0x14, + 0xd7, 0x29, 0xd6, 0x33, 0x6b, 0xe0, 0x9c, 0x96, 0xa8, 0x0d, 0xe7, 0xfb, 0xc6, 0xde, 0x08, 0xc2, + 0x0a, 0x43, 0xc8, 0x6e, 0xae, 0xad, 0x8f, 0x82, 0x71, 0x56, 0x1b, 0xfd, 0xeb, 0x93, 0xf0, 0x18, + 0xed, 0x78, 0xbc, 0xef, 0xac, 0x1b, 0xae, 0xd1, 0x7b, 0x97, 0xca, 0xf7, 0x6f, 0x6b, 0xf0, 0xc8, + 0x76, 0xb6, 0x9e, 0x2b, 0xb6, 0x3e, 0x5c, 0x4c, 0xdd, 0x3f, 0x4a, 0x77, 0xe6, 0xe1, 0x1f, 0x47, + 0x56, 0xc1, 0x79, 0xbd, 0x42, 0xaf, 0xc0, 0xa2, 0xeb, 0x59, 0xa4, 0xd9, 0x6e, 0xe1, 0x75, 0x23, + 0xd8, 0xe9, 0x46, 0x5e, 0x9d, 0x29, 0xee, 0xe0, 0xbc, 0x9d, 0x82, 0xe1, 0x91, 0xda, 0x68, 0x17, + 0xd0, 0xc0, 0xb3, 0xd6, 0x76, 0x6d, 0x33, 0x8a, 0x02, 0x28, 0xee, 0x54, 0x65, 0xc1, 0xf9, 0x9d, + 0x11, 0x6c, 0x38, 0x83, 0x82, 0xfe, 0x3d, 0x0d, 0xce, 0xd1, 0x29, 0xe9, 0xf8, 0xde, 0xde, 0xfe, + 0xbb, 0x92, 0x1b, 0x9e, 0x81, 0xc9, 0xbe, 0x67, 0x45, 0x76, 0xe9, 0x45, 0xaa, 0x1c, 0xad, 0x7b, + 0x16, 0x79, 0xc0, 0x9d, 0xac, 0x7b, 0xfb, 0xf4, 0x07, 0x66, 0x55, 0xf4, 0x3f, 0xd5, 0xb8, 0xfa, + 0x12, 0xd9, 0x65, 0xef, 0x4e, 0xf6, 0xfe, 0x04, 0xcc, 0xd3, 0xb2, 0x75, 0x63, 0xaf, 0xd3, 0x7a, + 0xcd, 0x73, 0xa2, 0xb8, 0x14, 0x16, 0x2d, 0x7e, 0x53, 0x05, 0xe0, 0x64, 0x3d, 0xfd, 0x5b, 0xf3, + 0xc0, 0x2a, 0x38, 0x24, 0x7c, 0x57, 0x7e, 0xd8, 0xb3, 0x50, 0x33, 0x07, 0xc3, 0xe6, 0xb5, 0xee, + 0xab, 0x43, 0x2f, 0x34, 0x84, 0x03, 0x98, 0xa9, 0x24, 0xcd, 0xce, 0x46, 0x54, 0x8c, 0xd5, 0x3a, + 0x74, 0xe1, 0x98, 0x83, 0xa1, 0x10, 0x46, 0x1d, 0x35, 0x7c, 0x81, 0x2d, 0x9c, 0x66, 0x67, 0x23, + 0x01, 0xc3, 0x23, 0xb5, 0xd1, 0x97, 0x35, 0x98, 0x23, 0x82, 0xa9, 0x6f, 0x18, 0xbe, 0x25, 0xd6, + 0x4c, 0xf1, 0x0d, 0x45, 0x8e, 0x6e, 0xb4, 0x54, 0xb8, 0x32, 0xb7, 0xa6, 0xd0, 0xc0, 0x09, 0x8a, + 0x4c, 0xaf, 0x12, 0xbf, 0xe9, 0x64, 0x79, 0xd6, 0x75, 0xdf, 0x30, 0x89, 0x62, 0x8a, 0x4d, 0x09, + 0xbd, 0x2a, 0xaf, 0x12, 0xce, 0x6f, 0x8f, 0xfe, 0xb1, 0x06, 0x97, 0x24, 0xd4, 0x76, 0xed, 0xfe, + 0xb0, 0x8f, 0x89, 0xe9, 0x18, 0x76, 0x5f, 0x28, 0x59, 0x9f, 0x3d, 0xbd, 0x2f, 0x4d, 0xe2, 0xe7, + 0x9b, 0x56, 0x36, 0x0c, 0xe7, 0xf4, 0x09, 0xfd, 0xaa, 0x06, 0x4f, 0x46, 0xa0, 0x0e, 0x35, 0x75, + 0x86, 0x3e, 0x89, 0xa3, 0x9b, 0xc4, 0x98, 0x14, 0xb3, 0x07, 0x3f, 0x78, 0x78, 0x50, 0x7f, 0x72, + 0xed, 0x18, 0xdc, 0xf8, 0x58, 0xea, 0x09, 0x8e, 0xe9, 0x7a, 0x5b, 0xa1, 0xd0, 0xca, 0x1e, 0x1a, + 0xc7, 0x50, 0x1a, 0x38, 0x41, 0x11, 0xfd, 0x86, 0x06, 0x8f, 0xa8, 0x05, 0x2a, 0xc3, 0x70, 0x75, + 0xec, 0x73, 0xa7, 0xd7, 0x9b, 0x14, 0x01, 0xee, 0xd2, 0xc9, 0x01, 0xe2, 0xbc, 0x6e, 0xa1, 0xa7, + 0x60, 0xa6, 0xcf, 0x98, 0x93, 0xab, 0x6c, 0x53, 0xdc, 0x37, 0xc7, 0xf9, 0x35, 0xc0, 0x11, 0x8c, + 0x9a, 0x43, 0x03, 0xcf, 0xea, 0xd8, 0x56, 0x70, 0xcb, 0xee, 0xdb, 0xe1, 0x72, 0x8d, 0x5d, 0x2f, + 0x61, 0xe3, 0xd1, 0xf1, 0xac, 0x4e, 0xbb, 0xc5, 0xcb, 0x71, 0xa2, 0x16, 0x8b, 0xa0, 0xb5, 0xfb, + 0x46, 0x8f, 0x74, 0x86, 0x8e, 0xd3, 0xf1, 0x3d, 0x66, 0x24, 0xb7, 0x88, 0x61, 0x39, 0xb6, 0x4b, + 0x96, 0xe7, 0x8a, 0x47, 0xd0, 0xb6, 0xf3, 0x90, 0xe2, 0x7c, 0x7a, 0x68, 0x05, 0x60, 0xcb, 0xb0, + 0x9d, 0xee, 0x3d, 0x63, 0x70, 0xc7, 0x5d, 0x9e, 0x67, 0x62, 0x8c, 0x59, 0x22, 0xd7, 0x64, 0x29, + 0x56, 0x6a, 0x30, 0x86, 0xa2, 0xc2, 0x10, 0x13, 0x7e, 0x4f, 0x66, 0x79, 0xe1, 0xb4, 0x18, 0x2a, + 0xc2, 0xc8, 0x07, 0xf0, 0xa6, 0x42, 0x03, 0x27, 0x28, 0xa2, 0xaf, 0x6a, 0xb0, 0x10, 0xec, 0x07, + 0x21, 0xe9, 0xcb, 0x4e, 0x9c, 0x3b, 0xf5, 0x4e, 0x30, 0x0f, 0x42, 0x37, 0x41, 0x05, 0xa7, 0xa8, + 0xea, 0x07, 0x15, 0xae, 0x22, 0x8f, 0x70, 0x21, 0x7a, 0x09, 0xce, 0xf5, 0x49, 0xdf, 0xf3, 0xf7, + 0x57, 0xa3, 0x0b, 0xe4, 0xc2, 0xe7, 0xc1, 0x6c, 0x86, 0xf5, 0x24, 0x08, 0xa7, 0xeb, 0xd2, 0x9d, + 0x82, 0xcd, 0xd8, 0xb5, 0x6e, 0xdc, 0xbe, 0x12, 0xef, 0x14, 0xed, 0x14, 0x0c, 0x8f, 0xd4, 0x46, + 0x4d, 0x58, 0x12, 0x65, 0x6d, 0xaa, 0x7e, 0x05, 0xd7, 0x7c, 0x12, 0x1d, 0x47, 0x50, 0xad, 0x62, + 0xa9, 0x9d, 0x06, 0xe2, 0xd1, 0xfa, 0xf4, 0x2b, 0xe8, 0x0f, 0xb5, 0x17, 0x93, 0xf1, 0x57, 0xdc, + 0x4e, 0x82, 0x70, 0xba, 0x6e, 0xa4, 0x28, 0x26, 0xba, 0x30, 0x15, 0x7f, 0xc5, 0xed, 0x14, 0x0c, + 0x8f, 0xd4, 0xd6, 0xff, 0x74, 0x12, 0x3e, 0x30, 0x86, 0xf0, 0x46, 0xfd, 0xec, 0xe1, 0x3e, 0x66, + 0x1d, 0xad, 0x44, 0xe7, 0x17, 0x2b, 0xaf, 0x0e, 0x0d, 0x37, 0xb4, 0xc3, 0xfd, 0x31, 0xa7, 0x67, + 0x90, 0x33, 0x3d, 0x27, 0xa7, 0x37, 0xee, 0x74, 0x06, 0x79, 0xd3, 0x79, 0x72, 0x92, 0xe3, 0x4f, + 0x7f, 0x3f, 0x7b, 0xfa, 0x0b, 0x8e, 0xea, 0xb1, 0xec, 0x32, 0xc8, 0x61, 0x97, 0x82, 0xa3, 0x3a, + 0x06, 0x7b, 0xfd, 0x87, 0x49, 0xf8, 0xe0, 0x38, 0xbb, 0x48, 0x41, 0xfe, 0xca, 0x90, 0xd3, 0x0f, + 0x95, 0xbf, 0xf2, 0x42, 0x4e, 0x1e, 0x22, 0x7f, 0x65, 0x90, 0x7c, 0xd8, 0xfc, 0x95, 0x37, 0xaa, + 0x0f, 0x8b, 0xbf, 0xf2, 0x46, 0x75, 0x0c, 0xfe, 0xfa, 0x3f, 0xe9, 0xfd, 0x41, 0x6e, 0x61, 0x6d, + 0x98, 0x30, 0x07, 0xc3, 0x82, 0x42, 0x8a, 0x1d, 0xa9, 0x35, 0x3b, 0x1b, 0x98, 0xe2, 0x40, 0x18, + 0xa6, 0x39, 0xff, 0x14, 0x14, 0x41, 0x2c, 0x5c, 0x88, 0xb3, 0x24, 0x16, 0x98, 0xe8, 0x50, 0x91, + 0xc1, 0x36, 0xe9, 0x13, 0xdf, 0x70, 0xba, 0xa1, 0xe7, 0x1b, 0xbd, 0xa2, 0xd2, 0x86, 0x0d, 0xd5, + 0x5a, 0x0a, 0x17, 0x1e, 0xc1, 0x4e, 0x07, 0x64, 0x60, 0x5b, 0x05, 0xe5, 0x0b, 0x1b, 0x90, 0x4e, + 0xbb, 0x85, 0x29, 0x0e, 0xfd, 0x7b, 0x55, 0x50, 0xee, 0x57, 0x50, 0x83, 0xc5, 0x70, 0x1c, 0xef, + 0x5e, 0xc7, 0xb7, 0x77, 0x6d, 0x87, 0xf4, 0x88, 0x25, 0x03, 0xf0, 0x03, 0x71, 0xf2, 0xca, 0xb4, + 0xa7, 0xd5, 0xbc, 0x4a, 0x38, 0xbf, 0x3d, 0xd5, 0xe5, 0x96, 0xcc, 0xf4, 0x45, 0xad, 0x52, 0x47, + 0x2d, 0x23, 0xd7, 0xbe, 0xf8, 0x82, 0x1a, 0x29, 0xc6, 0xa3, 0x74, 0xd1, 0x5f, 0xd5, 0xb8, 0xb5, + 0x2d, 0x5d, 0x76, 0x62, 0xd2, 0x6e, 0x9c, 0x96, 0x97, 0x38, 0xb6, 0xdb, 0x63, 0xaf, 0x60, 0x92, + 0x22, 0xfa, 0x96, 0x06, 0x17, 0x77, 0xb2, 0xbc, 0x6f, 0x62, 0x6e, 0x3b, 0x85, 0xfb, 0x92, 0xe3, + 0xcf, 0xe3, 0xe7, 0x87, 0x99, 0x15, 0x70, 0x76, 0x4f, 0xe4, 0x38, 0x49, 0xd7, 0x89, 0x90, 0x03, + 0xc5, 0xc7, 0x29, 0xe5, 0x84, 0x89, 0xc7, 0x49, 0x02, 0x70, 0x92, 0x22, 0x7a, 0x0b, 0x66, 0x77, + 0x22, 0x57, 0x94, 0x30, 0x6e, 0x5b, 0x85, 0xc9, 0x2b, 0x0e, 0x2d, 0x7e, 0x52, 0x29, 0x0b, 0x71, + 0x4c, 0x05, 0xd9, 0x30, 0xb3, 0xc3, 0xa5, 0x91, 0x30, 0x4a, 0x1b, 0xe5, 0xf5, 0x65, 0x6e, 0x19, + 0x89, 0x22, 0x1c, 0xe1, 0x57, 0xa3, 0x38, 0xaa, 0xc7, 0xc4, 0x42, 0x7d, 0x43, 0x83, 0x8b, 0xbb, + 0xc4, 0x0f, 0x6d, 0x33, 0xed, 0xfe, 0x9c, 0x2d, 0xa1, 0xd4, 0xbf, 0x96, 0x85, 0x91, 0xb3, 0x4a, + 0x26, 0x08, 0x67, 0xf7, 0x41, 0xff, 0x2f, 0x1a, 0x8c, 0x78, 0x83, 0xd0, 0x2f, 0x6a, 0x30, 0xb7, + 0x45, 0x8c, 0x70, 0xe8, 0x93, 0xeb, 0x46, 0x28, 0xa3, 0x74, 0x5f, 0x3f, 0x15, 0x2f, 0xd4, 0xca, + 0x35, 0x05, 0x33, 0x3f, 0x88, 0x91, 0x17, 0x83, 0x55, 0x10, 0x4e, 0x74, 0xe1, 0xf2, 0xa7, 0x61, + 0x69, 0xa4, 0xe1, 0x89, 0xfc, 0xfd, 0xbf, 0x23, 0xfc, 0x89, 0xe9, 0x44, 0x70, 0x6f, 0xc0, 0x94, + 0x61, 0x59, 0x32, 0xd9, 0xcc, 0x0b, 0x05, 0x0f, 0x1d, 0x2d, 0x35, 0x1c, 0x9a, 0xfd, 0xc4, 0x1c, + 0x2f, 0xba, 0x06, 0xc8, 0x48, 0x1c, 0xaf, 0xad, 0x7b, 0x56, 0x64, 0x2e, 0x31, 0xef, 0xee, 0xea, + 0x08, 0x14, 0x67, 0xb4, 0xd0, 0x3f, 0x05, 0x0b, 0xc9, 0xeb, 0x76, 0x27, 0x88, 0xc8, 0xd3, 0xff, + 0xba, 0x06, 0x68, 0xf4, 0x2a, 0x3a, 0x0a, 0xa0, 0x2a, 0x6a, 0x44, 0x93, 0x5c, 0xcc, 0xd5, 0x98, + 0x0e, 0x16, 0x8c, 0x23, 0xd2, 0x45, 0x41, 0x80, 0x25, 0x21, 0xfd, 0xcf, 0x34, 0x88, 0x93, 0x5a, + 0xa0, 0x8f, 0x43, 0xcd, 0x22, 0x81, 0xe9, 0xdb, 0x83, 0x30, 0xfe, 0x10, 0x79, 0x85, 0xb8, 0x15, + 0x83, 0xb0, 0x5a, 0x0f, 0xe9, 0x30, 0x1d, 0x1a, 0xc1, 0x4e, 0xbb, 0x25, 0x0c, 0x47, 0xb6, 0xcd, + 0xdf, 0x65, 0x25, 0x58, 0x40, 0xe2, 0xbb, 0x6b, 0x13, 0x63, 0xdc, 0x5d, 0x43, 0x5b, 0xa7, 0x70, + 0x51, 0x0f, 0x1d, 0x7f, 0x49, 0x4f, 0xff, 0xb7, 0x15, 0x48, 0x26, 0x12, 0x29, 0x3a, 0x04, 0xa3, + 0x37, 0x0b, 0x2b, 0x0f, 0xed, 0x66, 0xe1, 0x47, 0x58, 0xd2, 0x2d, 0x9e, 0x2a, 0x91, 0x1f, 0x86, + 0xa8, 0x99, 0xb2, 0x78, 0x9e, 0x43, 0x59, 0x03, 0x3d, 0xaf, 0xc6, 0xfe, 0xcd, 0x36, 0x3e, 0x10, + 0xad, 0x0b, 0x16, 0xd0, 0xf7, 0x40, 0xdc, 0x9d, 0x94, 0xdf, 0x9f, 0x08, 0xf3, 0xfb, 0xb8, 0x88, + 0x5c, 0x9b, 0x4a, 0xdc, 0xef, 0x8c, 0x2e, 0x85, 0x2e, 0x25, 0x1a, 0xc6, 0xe1, 0x6c, 0xfa, 0xd7, + 0x34, 0x98, 0x11, 0x69, 0x05, 0xc6, 0x08, 0xd9, 0xec, 0xc1, 0x14, 0x53, 0xd7, 0x4b, 0x69, 0x32, + 0xdd, 0x6d, 0xcf, 0x0b, 0x13, 0xe9, 0x15, 0x58, 0xa8, 0x18, 0xfb, 0x17, 0x73, 0xfc, 0xfa, 0x37, + 0x26, 0xe1, 0x49, 0x51, 0x65, 0x64, 0x9b, 0x96, 0x8b, 0x70, 0x1f, 0xce, 0x8b, 0x69, 0x6a, 0xf9, + 0x86, 0x2d, 0xcf, 0x8b, 0x8a, 0x59, 0x60, 0xe2, 0x2c, 0x71, 0x04, 0x1d, 0xce, 0xa2, 0x81, 0x7e, + 0x0a, 0x2e, 0x88, 0xe2, 0x1b, 0xc4, 0x70, 0xc2, 0xed, 0x88, 0x76, 0x31, 0x6b, 0x8c, 0x1d, 0x60, + 0xaf, 0x67, 0xe0, 0xc3, 0x99, 0x54, 0x58, 0xb4, 0x97, 0x00, 0x34, 0x7d, 0x62, 0xa8, 0x87, 0x65, + 0x25, 0xa2, 0xbd, 0xd6, 0x33, 0x31, 0xe2, 0x1c, 0x4a, 0xcc, 0x95, 0x65, 0xec, 0x31, 0xcb, 0x18, + 0x93, 0xd0, 0xb7, 0x59, 0xc2, 0x0b, 0xca, 0xe0, 0xdc, 0x96, 0x4d, 0x82, 0x70, 0xba, 0x2e, 0x7a, + 0x01, 0x16, 0xd8, 0xf9, 0x5f, 0x7c, 0x5d, 0x6b, 0x2a, 0xce, 0x9c, 0x79, 0x3b, 0x01, 0xc1, 0xa9, + 0x9a, 0xfa, 0xaf, 0x6b, 0x30, 0xa7, 0x32, 0xd0, 0x18, 0x81, 0x9d, 0xbb, 0x8a, 0xc0, 0x2e, 0x13, + 0x2d, 0xa9, 0x92, 0x1d, 0x53, 0x66, 0x9f, 0xcf, 0x68, 0xc3, 0x0e, 0xad, 0x48, 0x4a, 0xf8, 0x97, + 0x3a, 0xb4, 0x1a, 0xd9, 0x49, 0xe4, 0xa1, 0x55, 0x1a, 0x82, 0x47, 0x08, 0xa3, 0xd7, 0x61, 0xc2, + 0xf4, 0x6d, 0x31, 0x30, 0x9f, 0x2c, 0x66, 0x9f, 0xe0, 0x76, 0x1c, 0x3b, 0xdf, 0xc4, 0x6d, 0x4c, + 0x31, 0xea, 0xbf, 0x3d, 0x01, 0x35, 0x25, 0x6b, 0x09, 0x5a, 0x2f, 0x63, 0xdf, 0xc6, 0xe8, 0x23, + 0x1b, 0x77, 0x1d, 0x26, 0x7a, 0x83, 0x61, 0x41, 0x03, 0x57, 0xa2, 0xbb, 0x4e, 0xd1, 0xf5, 0x06, + 0x43, 0xf4, 0x9a, 0x34, 0x99, 0x8b, 0x19, 0xb5, 0x32, 0xe0, 0x2e, 0x65, 0x36, 0x47, 0xec, 0x39, + 0x99, 0xcb, 0x9e, 0x2e, 0xcc, 0x04, 0xc2, 0x9e, 0x9e, 0x2a, 0x91, 0x34, 0x47, 0x19, 0x6a, 0x61, + 0x40, 0x73, 0x3d, 0x3c, 0xb2, 0xaf, 0x23, 0x22, 0x54, 0x0b, 0x18, 0xb2, 0x88, 0x77, 0x66, 0x62, + 0x54, 0xb9, 0x16, 0xb0, 0xc1, 0x4a, 0xb0, 0x80, 0xe8, 0xff, 0x4c, 0x03, 0x34, 0x8a, 0x10, 0x7d, + 0x00, 0xa6, 0x58, 0xe0, 0xbf, 0x58, 0x6c, 0x4a, 0xa6, 0x04, 0x23, 0x08, 0x30, 0x87, 0xa1, 0xd7, + 0xc5, 0xad, 0x8e, 0x62, 0x33, 0x23, 0xb7, 0x70, 0x41, 0x53, 0xb9, 0x06, 0x12, 0xed, 0x51, 0x13, + 0x79, 0x7b, 0x94, 0xfe, 0xc3, 0x0a, 0x65, 0x39, 0xdb, 0x0d, 0x89, 0xcb, 0xe2, 0x30, 0xef, 0x03, + 0x18, 0xc3, 0xd0, 0xe3, 0x7b, 0xb2, 0xe0, 0xbc, 0xcf, 0x14, 0x1c, 0x5d, 0x89, 0x75, 0x55, 0x62, + 0xe4, 0x87, 0x22, 0xf1, 0x6f, 0xac, 0x50, 0xa3, 0xb4, 0x43, 0xbb, 0x4f, 0x5e, 0xb7, 0x5d, 0xcb, + 0xbb, 0x27, 0x06, 0xa3, 0x34, 0xed, 0xbb, 0x12, 0x23, 0xa7, 0x1d, 0xff, 0xc6, 0x0a, 0x35, 0xf4, + 0x59, 0x58, 0x66, 0xf9, 0x77, 0x5d, 0x96, 0xc3, 0x49, 0x74, 0xce, 0x73, 0x9c, 0x68, 0x97, 0xa8, + 0x36, 0x1e, 0x3f, 0x3c, 0xa8, 0x2f, 0x37, 0x73, 0xea, 0xe0, 0xdc, 0xd6, 0xfa, 0xb7, 0x35, 0xb8, + 0x98, 0x39, 0x16, 0xe8, 0x3a, 0x2c, 0xc5, 0x07, 0xe2, 0xaa, 0x54, 0xab, 0xc6, 0x49, 0xc9, 0x6e, + 0xa6, 0x2b, 0xe0, 0xd1, 0x36, 0x68, 0x5d, 0x6e, 0xed, 0xaa, 0xd4, 0x14, 0xa7, 0xe9, 0x8f, 0x09, + 0x54, 0x59, 0x82, 0x15, 0x67, 0xb5, 0xd3, 0xbf, 0x90, 0xe8, 0x70, 0x3c, 0x60, 0x94, 0x99, 0x37, + 0x49, 0x4f, 0x46, 0xcc, 0x4a, 0x66, 0x6e, 0xd0, 0x42, 0xcc, 0x61, 0xe8, 0x09, 0x35, 0x6e, 0x5d, + 0x4a, 0x8d, 0x28, 0x76, 0x5d, 0x1f, 0x02, 0xac, 0x7b, 0xae, 0x1d, 0x7a, 0xbe, 0xed, 0xf6, 0x50, + 0x0f, 0xaa, 0x86, 0xc8, 0x0e, 0x2d, 0x98, 0xed, 0xa5, 0x62, 0x96, 0x91, 0x40, 0xc2, 0x23, 0xb9, + 0xa2, 0x5f, 0x58, 0x22, 0xd7, 0xff, 0xa1, 0x06, 0x97, 0xb2, 0xef, 0x64, 0x8c, 0xb1, 0x1d, 0xf6, + 0xa1, 0xe6, 0xc7, 0xcd, 0x04, 0x67, 0xfe, 0x84, 0x7a, 0x3b, 0x5b, 0xc9, 0x16, 0x4f, 0x55, 0x85, + 0xa6, 0xef, 0x05, 0xd1, 0xec, 0xa4, 0x2f, 0x6c, 0xcb, 0xe5, 0xaa, 0xf4, 0x04, 0xab, 0xf8, 0xf5, + 0xaf, 0x54, 0x00, 0x6e, 0x93, 0xf0, 0x9e, 0xe7, 0xef, 0xd0, 0x31, 0x7a, 0x57, 0xdd, 0x0d, 0x7a, + 0x1c, 0x26, 0x07, 0x9e, 0x15, 0x08, 0x89, 0xc2, 0x2e, 0xed, 0xb0, 0xd3, 0x5c, 0x56, 0x8a, 0xea, + 0x30, 0xc5, 0xfc, 0xb6, 0x42, 0x76, 0x33, 0x4d, 0x95, 0x6a, 0x27, 0x01, 0xe6, 0xe5, 0xe8, 0x69, + 0xa8, 0x8a, 0x20, 0xc3, 0x40, 0xe8, 0xde, 0x6c, 0xc2, 0x44, 0x38, 0x62, 0x80, 0x25, 0x54, 0xff, + 0x99, 0x49, 0x48, 0xe4, 0x37, 0x8f, 0x2d, 0xe8, 0xc9, 0x87, 0x64, 0x41, 0x7f, 0x16, 0x96, 0x1d, + 0xcf, 0xb0, 0x1a, 0x86, 0x43, 0xd9, 0xde, 0xef, 0xf2, 0xf9, 0x30, 0xdc, 0x1e, 0x89, 0xf2, 0x94, + 0x33, 0x11, 0x70, 0x2b, 0xa7, 0x0e, 0xce, 0x6d, 0x8d, 0x86, 0x4a, 0x5a, 0x75, 0xaa, 0x33, 0xac, + 0x97, 0xce, 0xff, 0xbe, 0xa2, 0x46, 0x98, 0xca, 0x8d, 0x34, 0x99, 0x7a, 0x1d, 0x7d, 0x55, 0x83, + 0x8b, 0x64, 0x2f, 0x24, 0xbe, 0x6b, 0x38, 0x77, 0x7d, 0x63, 0x6b, 0xcb, 0x36, 0x13, 0xf1, 0x32, + 0x9d, 0xc3, 0x83, 0xfa, 0xc5, 0xb5, 0xac, 0x0a, 0x0f, 0x0e, 0xea, 0xcf, 0x8d, 0x3e, 0x70, 0x10, + 0xc5, 0x93, 0x66, 0x36, 0x61, 0xec, 0x98, 0x4d, 0xee, 0xf2, 0xf3, 0x50, 0x3b, 0x41, 0xfc, 0xe4, + 0xac, 0xea, 0x4f, 0xf9, 0xe5, 0x69, 0x50, 0xa2, 0x79, 0x4f, 0x90, 0x5b, 0xef, 0xef, 0x6b, 0x70, + 0xc1, 0x74, 0x6c, 0xe2, 0x86, 0xa9, 0xa8, 0x65, 0xbe, 0x34, 0x5e, 0x2b, 0x16, 0x67, 0x3c, 0x20, + 0x6e, 0xbb, 0xd5, 0xf4, 0x5c, 0x97, 0x98, 0x61, 0x33, 0x03, 0x3b, 0x37, 0x4e, 0xb2, 0x20, 0x38, + 0xb3, 0x37, 0xec, 0x83, 0x58, 0x79, 0xbb, 0xa5, 0x5e, 0xe5, 0x69, 0x8a, 0x32, 0x2c, 0xa1, 0xe8, + 0x59, 0xa8, 0xf5, 0x7c, 0x6f, 0x38, 0x08, 0x9a, 0x2c, 0x92, 0x87, 0xaf, 0x30, 0x16, 0x2a, 0x75, + 0x3d, 0x2e, 0xc6, 0x6a, 0x1d, 0xf4, 0x31, 0x98, 0xe3, 0x3f, 0x3b, 0x3e, 0xd9, 0xb2, 0xf7, 0xc4, + 0x8a, 0x63, 0x81, 0x01, 0xd7, 0x95, 0x72, 0x9c, 0xa8, 0x85, 0x3e, 0x0c, 0xb3, 0x76, 0x10, 0x0c, + 0x89, 0xbf, 0x81, 0x6f, 0x89, 0xc4, 0x3d, 0xcc, 0x1b, 0xda, 0x8e, 0x0a, 0x71, 0x0c, 0x47, 0xbf, + 0xa4, 0xc1, 0x82, 0x4f, 0xde, 0x1a, 0xda, 0x3e, 0xb1, 0x18, 0xd1, 0x40, 0xc4, 0x54, 0x77, 0x4b, + 0x06, 0x72, 0xaf, 0xe0, 0x04, 0x56, 0xce, 0xe9, 0xd2, 0x8f, 0x90, 0x04, 0xe2, 0x54, 0x17, 0xe8, + 0x58, 0x05, 0x76, 0xcf, 0xb5, 0xdd, 0xde, 0xaa, 0xd3, 0x0b, 0x96, 0xab, 0x6c, 0xf5, 0xb2, 0xb1, + 0xea, 0xc6, 0xc5, 0x58, 0xad, 0x83, 0x3e, 0x01, 0xf3, 0xc3, 0x80, 0xf2, 0x6e, 0x9f, 0xf0, 0x01, + 0x9e, 0x8d, 0x43, 0xec, 0x36, 0x54, 0x00, 0x4e, 0xd6, 0xa3, 0xa6, 0x59, 0x54, 0x20, 0x86, 0x19, + 0xf8, 0xe5, 0x5c, 0xda, 0xcf, 0x8d, 0x04, 0x04, 0xa7, 0x6a, 0x5e, 0x5e, 0x85, 0xf3, 0x19, 0x9f, + 0x79, 0xa2, 0x05, 0xf2, 0xeb, 0x15, 0x78, 0xff, 0xb1, 0x6c, 0x89, 0x7e, 0x59, 0x83, 0x1a, 0xd9, + 0x0b, 0x7d, 0x43, 0x06, 0xfc, 0xd1, 0x39, 0xea, 0x3d, 0x9c, 0x45, 0xb0, 0xb2, 0x16, 0x53, 0xe2, + 0xf3, 0x26, 0xf7, 0x3c, 0x05, 0x82, 0xd5, 0x0e, 0x51, 0x15, 0x9b, 0x5f, 0xde, 0x56, 0x1d, 0x6d, + 0x22, 0x21, 0xb4, 0x80, 0x5c, 0x7e, 0x19, 0x16, 0xd3, 0x98, 0x4f, 0x34, 0x54, 0xbf, 0x55, 0x81, + 0xa9, 0x8e, 0x63, 0xb8, 0x67, 0xf1, 0xd4, 0xc0, 0x17, 0x13, 0xf9, 0x3f, 0x8a, 0x65, 0x55, 0x61, + 0x7d, 0xcd, 0xcd, 0x0f, 0xb4, 0x9d, 0xca, 0x0f, 0xf4, 0x4a, 0x09, 0x1a, 0x47, 0xa7, 0x03, 0xfa, + 0x9e, 0x06, 0xb3, 0xac, 0xde, 0x19, 0xe4, 0x11, 0x79, 0x23, 0x99, 0x47, 0xe4, 0x85, 0xe2, 0x1f, + 0x95, 0x93, 0x36, 0xe4, 0x8f, 0xa3, 0x8f, 0x61, 0x59, 0x42, 0x3e, 0xa7, 0x66, 0xc0, 0xe7, 0x5f, + 0xf3, 0x74, 0x56, 0xd6, 0x9d, 0x5b, 0x9e, 0x69, 0x38, 0x69, 0x4d, 0xee, 0xe8, 0x34, 0xf8, 0x2e, + 0xcc, 0x12, 0x71, 0xab, 0x3e, 0xfa, 0x9a, 0x62, 0xba, 0x6d, 0x74, 0x37, 0x3f, 0xa6, 0x17, 0x95, + 0x04, 0x38, 0x26, 0xa1, 0xff, 0x4e, 0x05, 0x6a, 0xca, 0x6c, 0xbe, 0x23, 0xd9, 0x7d, 0xae, 0x65, + 0xe6, 0x8b, 0xae, 0xb0, 0x80, 0xbe, 0x4b, 0x27, 0x48, 0x36, 0x1f, 0x40, 0xcd, 0x8c, 0xd3, 0x15, + 0x96, 0x62, 0x70, 0x25, 0xed, 0xa1, 0x08, 0x2c, 0x8e, 0x0b, 0xb0, 0x4a, 0x45, 0xff, 0x17, 0x15, + 0x98, 0xe9, 0xf8, 0x1e, 0x9d, 0xe3, 0x33, 0x10, 0x10, 0x9b, 0x09, 0x01, 0x51, 0x70, 0xf1, 0xf2, + 0xde, 0xe6, 0x8a, 0x88, 0x37, 0x53, 0x22, 0xa2, 0x51, 0x8a, 0xca, 0xd1, 0x42, 0xe2, 0x0f, 0x35, + 0xa8, 0x89, 0x9a, 0x67, 0x20, 0x26, 0x8c, 0xa4, 0x98, 0x78, 0xb1, 0xcc, 0x87, 0xe5, 0x08, 0x8a, + 0xbf, 0xa7, 0xc1, 0xbc, 0xa8, 0xb1, 0x4e, 0xfa, 0x9b, 0xc4, 0x47, 0xd7, 0x60, 0x26, 0x18, 0xb2, + 0xb9, 0x14, 0x5f, 0xf4, 0x98, 0x2a, 0x2a, 0xfc, 0x4d, 0xc3, 0x64, 0xef, 0x1e, 0xf0, 0x2a, 0x4a, + 0x62, 0x2e, 0x5e, 0x80, 0xa3, 0xc6, 0xd4, 0xa0, 0xf3, 0x3d, 0x67, 0xe4, 0xda, 0x3c, 0xf6, 0x1c, + 0x82, 0x19, 0x84, 0xda, 0x51, 0xf4, 0x6f, 0x74, 0xa4, 0xc4, 0xec, 0x28, 0x0a, 0x0e, 0x30, 0x2f, + 0xd7, 0x7f, 0x6e, 0x52, 0x8e, 0x36, 0x93, 0x63, 0x37, 0x60, 0xd6, 0xf4, 0x89, 0x11, 0x12, 0xab, + 0xb1, 0x3f, 0x4e, 0xe7, 0x98, 0x42, 0xd7, 0x8c, 0x5a, 0xe0, 0xb8, 0x31, 0x55, 0x9d, 0xd4, 0x53, + 0xa2, 0x4a, 0xac, 0x66, 0xe6, 0x9e, 0x10, 0xbd, 0x08, 0x53, 0xde, 0x3d, 0x57, 0xc6, 0x49, 0x1c, + 0x49, 0x98, 0x7d, 0xca, 0x1d, 0x5a, 0x1b, 0xf3, 0x46, 0x6a, 0xa2, 0x87, 0xc9, 0x23, 0x12, 0x3d, + 0xf4, 0x61, 0xa6, 0xcf, 0xa6, 0x21, 0x4a, 0xcb, 0x50, 0x8a, 0x99, 0xf9, 0x8c, 0xaa, 0x09, 0x29, + 0x19, 0x6a, 0x1c, 0xd1, 0xa0, 0x4a, 0x30, 0xd5, 0xd3, 0x82, 0x81, 0x61, 0x12, 0x55, 0x09, 0xbe, + 0x1d, 0x15, 0xe2, 0x18, 0x8e, 0xee, 0x43, 0x8d, 0xdf, 0x64, 0xe6, 0xb2, 0x76, 0xa6, 0x84, 0x4f, + 0x52, 0xf4, 0xef, 0x6e, 0x8c, 0x8e, 0x0f, 0xbe, 0x52, 0x80, 0x55, 0x62, 0xfa, 0x2f, 0x4c, 0x48, + 0x36, 0x15, 0x82, 0x3f, 0x3b, 0x69, 0xbf, 0x56, 0xe8, 0xd5, 0x8f, 0xe7, 0x60, 0x6a, 0xb0, 0x6d, + 0x04, 0x11, 0xaf, 0x46, 0xd9, 0x53, 0xa7, 0x3a, 0xb4, 0xf0, 0xc1, 0x41, 0x7d, 0x4e, 0x90, 0x66, + 0xbf, 0x31, 0xaf, 0x8b, 0x86, 0x70, 0x3e, 0x08, 0x0d, 0x87, 0x74, 0x6d, 0xe1, 0x3e, 0x0a, 0x42, + 0xa3, 0x3f, 0x28, 0x90, 0x04, 0x95, 0x9d, 0x32, 0x75, 0x47, 0x51, 0xe1, 0x2c, 0xfc, 0xe8, 0x67, + 0x34, 0x58, 0x66, 0xe5, 0xab, 0xc3, 0xd0, 0xe3, 0x99, 0x8d, 0x63, 0xe2, 0x27, 0x3f, 0x64, 0x65, + 0xc6, 0x7e, 0x37, 0x07, 0x1f, 0xce, 0xa5, 0xa4, 0xff, 0x5f, 0x0d, 0xd0, 0xe8, 0x2c, 0xa2, 0x3e, + 0x54, 0x2d, 0xb2, 0x65, 0x0c, 0x9d, 0x30, 0xda, 0x8c, 0x8b, 0x5d, 0x75, 0x8d, 0x71, 0xc6, 0x02, + 0xb2, 0x25, 0x10, 0x63, 0x49, 0x02, 0x0d, 0x60, 0xf6, 0xde, 0xb6, 0x1d, 0x12, 0xc7, 0x0e, 0x42, + 0x21, 0x24, 0x4b, 0xd3, 0x93, 0xfa, 0xc7, 0xeb, 0x11, 0x66, 0x1c, 0x13, 0xd1, 0xff, 0xda, 0x04, + 0x54, 0x4f, 0xf0, 0x38, 0xd3, 0x10, 0x90, 0xb8, 0xe8, 0x4e, 0x95, 0x16, 0x52, 0xc6, 0x6f, 0xc5, + 0x34, 0x8b, 0xe6, 0x08, 0x32, 0x9c, 0x41, 0x00, 0xbd, 0x0d, 0x17, 0x6c, 0x77, 0xcb, 0x37, 0x82, + 0xd0, 0x1f, 0x9a, 0xe1, 0xd0, 0x8f, 0x08, 0x17, 0x4a, 0x50, 0xc2, 0x8c, 0xfd, 0x76, 0x06, 0x3a, + 0x9c, 0x49, 0x04, 0x6d, 0xc1, 0xcc, 0x3d, 0xcf, 0xdf, 0xa1, 0x32, 0x6c, 0xb2, 0x44, 0x2e, 0xf8, + 0xd7, 0x19, 0x8e, 0x58, 0x78, 0xf1, 0xdf, 0x01, 0x8e, 0x90, 0xeb, 0x7f, 0xa0, 0xc1, 0x14, 0xbf, + 0x2c, 0xf5, 0xde, 0x30, 0x74, 0x58, 0x5f, 0x73, 0xf3, 0x1a, 0x52, 0xf3, 0x83, 0xd5, 0x78, 0xaf, + 0x98, 0x1f, 0xac, 0xb3, 0x39, 0x5a, 0xc5, 0x1f, 0x4c, 0x88, 0x8f, 0x61, 0xdb, 0x76, 0x1b, 0xce, + 0x0b, 0x0d, 0xf4, 0x96, 0xbd, 0x45, 0x28, 0x83, 0xb5, 0x8c, 0xfd, 0x40, 0x5c, 0x00, 0x66, 0xd2, + 0xaf, 0x39, 0x0a, 0xc6, 0x59, 0x6d, 0xd0, 0xbf, 0xd4, 0xe8, 0x06, 0x19, 0xfa, 0xb6, 0x59, 0x2e, + 0x07, 0xa3, 0xec, 0xdc, 0xca, 0x3a, 0xc7, 0xc6, 0x2d, 0xf8, 0x8d, 0x78, 0xa7, 0x64, 0xa5, 0x0f, + 0x0e, 0xea, 0xf5, 0x0c, 0x0f, 0x61, 0xe4, 0xd3, 0xa6, 0x43, 0xfb, 0x95, 0x1f, 0x1e, 0x59, 0x85, + 0xf9, 0xd7, 0xa3, 0x2e, 0xa3, 0x1b, 0x30, 0x15, 0x98, 0xde, 0x80, 0x1c, 0xf5, 0x0c, 0x59, 0xda, + 0xfe, 0x92, 0x23, 0xdc, 0xa5, 0x2d, 0x31, 0x47, 0x70, 0xf9, 0x4d, 0x98, 0x53, 0x7b, 0x9e, 0xe1, + 0x21, 0x68, 0xa9, 0x1e, 0x82, 0x13, 0x9f, 0xb7, 0xa9, 0x1e, 0x85, 0xdf, 0xad, 0x80, 0x78, 0xc9, + 0x65, 0x8c, 0x53, 0x84, 0x37, 0xa3, 0x9c, 0x73, 0x65, 0x9e, 0xaf, 0x49, 0xbf, 0x09, 0x19, 0x0f, + 0x82, 0x9a, 0x76, 0x0e, 0x79, 0x30, 0xed, 0x18, 0x9b, 0xc4, 0x89, 0x5e, 0xf5, 0xb8, 0x5e, 0xe2, + 0xd1, 0x09, 0x9e, 0xa7, 0x39, 0x48, 0xf9, 0x9a, 0x79, 0x21, 0x16, 0x64, 0x2e, 0x3f, 0x0f, 0x35, + 0xa5, 0xda, 0x89, 0xdc, 0x32, 0x7f, 0xa8, 0xc1, 0x5c, 0x22, 0xf1, 0x54, 0x1f, 0x26, 0x7c, 0x69, + 0x8e, 0x17, 0x3d, 0x66, 0x89, 0xa2, 0x81, 0x1e, 0x3b, 0xa2, 0x12, 0xa6, 0x74, 0x64, 0x8e, 0xaa, + 0xca, 0x69, 0xe5, 0xa8, 0xfa, 0xba, 0x06, 0x97, 0xa2, 0x0f, 0x4a, 0x26, 0x36, 0x40, 0x4f, 0x43, + 0xd5, 0x18, 0xd8, 0xcc, 0xf9, 0xaa, 0xfa, 0xaf, 0x57, 0x3b, 0x6d, 0x56, 0x86, 0x25, 0x14, 0x7d, + 0x04, 0xaa, 0x11, 0xeb, 0x09, 0xe5, 0x4b, 0xca, 0x2d, 0x79, 0x70, 0x24, 0x6b, 0xa0, 0xa7, 0x94, + 0xbc, 0x80, 0x53, 0xf1, 0x46, 0x2d, 0x09, 0xf3, 0xf3, 0x60, 0xfd, 0x6b, 0x15, 0x98, 0xe7, 0xce, + 0x8a, 0x86, 0xed, 0x5a, 0xb6, 0xdb, 0x3b, 0x83, 0x0d, 0x22, 0xf1, 0xc8, 0x60, 0xe5, 0xb4, 0x1e, + 0x19, 0xbc, 0x09, 0xd3, 0x6f, 0x51, 0x49, 0x15, 0x31, 0xf8, 0x58, 0x02, 0x43, 0x32, 0x2f, 0x13, + 0x72, 0x01, 0x16, 0x28, 0xf4, 0x3f, 0xd1, 0x60, 0x29, 0x31, 0x2c, 0x67, 0xb0, 0xd3, 0xf4, 0x92, + 0x3b, 0x4d, 0xa3, 0x60, 0x82, 0x0f, 0xa5, 0xd3, 0x39, 0x3b, 0xce, 0x6f, 0x56, 0x80, 0x3d, 0x69, + 0x76, 0x06, 0x53, 0xfd, 0x46, 0x42, 0x17, 0x78, 0xa9, 0xf8, 0xdb, 0x33, 0x79, 0x0e, 0x8d, 0x5e, + 0xca, 0xa1, 0xf1, 0xe9, 0xe2, 0x24, 0x8e, 0xf6, 0x66, 0xfc, 0x4a, 0x05, 0x80, 0x56, 0xe3, 0x8f, + 0xbf, 0x89, 0xb8, 0xc4, 0xf8, 0x31, 0xd0, 0xd9, 0x77, 0xcb, 0x0b, 0x9e, 0xba, 0x7c, 0x5f, 0x6c, + 0x22, 0x76, 0x9b, 0x27, 0xdf, 0x16, 0x4b, 0x2e, 0xc0, 0xc9, 0x53, 0x5a, 0x80, 0xfa, 0x6f, 0x6a, + 0xc0, 0x52, 0x8e, 0xb7, 0x6e, 0x77, 0xd1, 0x27, 0x60, 0xde, 0xe6, 0xe7, 0x92, 0x2d, 0x35, 0xa3, + 0x16, 0x3b, 0x3b, 0x69, 0xab, 0x00, 0x9c, 0xac, 0x87, 0x5c, 0x65, 0x5c, 0xcb, 0xbc, 0xbc, 0x28, + 0x3a, 0x22, 0x73, 0xea, 0xce, 0x65, 0xcf, 0x8c, 0xfe, 0xa3, 0x0a, 0x9c, 0x4b, 0xd5, 0x1d, 0xc3, + 0x54, 0x79, 0x38, 0x12, 0x4c, 0x49, 0xb3, 0x3b, 0x71, 0x06, 0x69, 0x76, 0x65, 0xc6, 0xdb, 0xc9, + 0x87, 0x9c, 0xf1, 0xf6, 0xbb, 0x1a, 0x54, 0xe9, 0x18, 0x9f, 0x81, 0x0c, 0xfd, 0xc9, 0xa4, 0x0c, + 0x7d, 0xbe, 0x30, 0xef, 0xe4, 0x88, 0xce, 0x3f, 0xd3, 0x80, 0xbd, 0x48, 0x21, 0x82, 0x31, 0x94, + 0xf8, 0x06, 0x2d, 0x27, 0xbe, 0xe1, 0x49, 0x11, 0x1e, 0x91, 0x72, 0xed, 0x29, 0x21, 0x12, 0x1f, + 0x51, 0x22, 0x20, 0x26, 0x92, 0xa2, 0x64, 0x34, 0x0a, 0x02, 0xbd, 0x0d, 0xf3, 0xc1, 0xb6, 0xe7, + 0x85, 0x91, 0x85, 0x2f, 0x66, 0xaf, 0x51, 0x3c, 0x94, 0x38, 0xfa, 0x16, 0xbe, 0x3a, 0xbb, 0x2a, + 0x72, 0x9c, 0xa4, 0xa5, 0xff, 0x9e, 0xf8, 0xfc, 0x13, 0x2c, 0x95, 0x33, 0x14, 0x7d, 0x1f, 0x4a, + 0x89, 0xbe, 0xbc, 0xa7, 0x15, 0x7f, 0x4b, 0x7c, 0x85, 0x7c, 0xb0, 0xcc, 0x81, 0x79, 0x47, 0x7d, + 0x79, 0x44, 0x30, 0x66, 0xa1, 0x47, 0x4b, 0xc4, 0x7b, 0x9d, 0x4a, 0x11, 0x4e, 0x22, 0xa7, 0xb2, + 0x31, 0xea, 0xb8, 0xfa, 0x0e, 0x3b, 0x6b, 0xd8, 0x51, 0x01, 0x38, 0x59, 0x4f, 0x7f, 0x15, 0x3e, + 0xc8, 0xbb, 0xcd, 0xe2, 0xb7, 0xd7, 0xf6, 0x4c, 0x12, 0x04, 0x4d, 0x63, 0x60, 0x98, 0xd4, 0x06, + 0x61, 0x37, 0x20, 0xb9, 0x8b, 0xee, 0x99, 0x74, 0x06, 0x54, 0xe9, 0x17, 0x48, 0x67, 0x41, 0xd5, + 0xbf, 0x5c, 0x81, 0xba, 0x82, 0x33, 0x11, 0xc9, 0x12, 0x71, 0xdc, 0x37, 0x35, 0xa8, 0x19, 0xae, + 0xeb, 0x85, 0x86, 0x7a, 0x70, 0x44, 0x4a, 0xbc, 0x23, 0x97, 0x4b, 0x6b, 0x65, 0x35, 0xa6, 0x93, + 0x3a, 0x27, 0x56, 0x20, 0x58, 0xed, 0xce, 0xe5, 0x97, 0x61, 0x31, 0xdd, 0xea, 0x44, 0xc6, 0x46, + 0x03, 0x2e, 0x2a, 0xbd, 0x12, 0x17, 0xc9, 0xa8, 0x22, 0xfc, 0x0c, 0xcc, 0xec, 0xda, 0x81, 0x1d, + 0x5d, 0x4a, 0x56, 0x86, 0xf1, 0x35, 0x5e, 0x8c, 0x23, 0xb8, 0xfe, 0x0a, 0x9c, 0x57, 0x71, 0xb0, + 0x35, 0x73, 0xbb, 0x7b, 0x92, 0x89, 0x58, 0x87, 0x27, 0x15, 0x0c, 0x99, 0x57, 0xa9, 0x4e, 0x82, + 0xee, 0x67, 0xa7, 0x23, 0x16, 0x17, 0xb1, 0xfe, 0xdf, 0xd1, 0xe0, 0x51, 0x92, 0xc7, 0x31, 0x82, + 0xdf, 0x3f, 0x57, 0x76, 0x4a, 0x73, 0x59, 0x52, 0xa4, 0xae, 0xc9, 0x03, 0xe3, 0xfc, 0xae, 0xa1, + 0xfb, 0x00, 0x81, 0x9c, 0x93, 0x52, 0x21, 0xa0, 0x99, 0xb3, 0x2c, 0xf2, 0x95, 0xca, 0xdf, 0x58, + 0xa1, 0x86, 0x7c, 0xa8, 0x06, 0x62, 0x2e, 0x4b, 0xdd, 0xf8, 0xcc, 0xe0, 0x0d, 0x11, 0xe5, 0x26, + 0x7e, 0x61, 0x49, 0x07, 0xfd, 0x9a, 0x06, 0x17, 0x9c, 0x8c, 0xa5, 0x21, 0xe4, 0xfc, 0xdd, 0x87, + 0xb1, 0xec, 0xb8, 0xdb, 0x32, 0x0b, 0x82, 0x33, 0xfb, 0x82, 0xfe, 0x41, 0xee, 0xdd, 0x42, 0x1e, + 0x7d, 0xbd, 0x51, 0xb6, 0x97, 0xa7, 0x75, 0xcd, 0xf0, 0xdf, 0xcc, 0x70, 0xd5, 0x83, 0xf9, 0xd6, + 0x4c, 0x98, 0xde, 0x64, 0xda, 0xbb, 0xe0, 0xf7, 0xe2, 0xb6, 0x82, 0x78, 0xae, 0x9e, 0xe9, 0xd6, + 0xfc, 0x7f, 0x2c, 0x50, 0xa3, 0x15, 0x80, 0x4d, 0xc7, 0x33, 0x77, 0x9a, 0xed, 0x16, 0x8e, 0x44, + 0x3b, 0xe3, 0xb1, 0x86, 0x2c, 0xc5, 0x4a, 0x0d, 0xf4, 0x05, 0x98, 0xb0, 0xa4, 0xc2, 0xf7, 0x62, + 0x19, 0x5d, 0x37, 0x0e, 0xad, 0xa5, 0x1c, 0x45, 0xb1, 0x22, 0x0f, 0xaa, 0xae, 0xd8, 0xdd, 0x05, + 0xff, 0x14, 0x7f, 0xfe, 0x53, 0xaa, 0x09, 0x52, 0x3b, 0x89, 0x4a, 0xb0, 0x24, 0x42, 0x09, 0x4a, + 0xf5, 0x7d, 0xaa, 0x24, 0x41, 0xa9, 0xbb, 0x1f, 0x65, 0x59, 0x75, 0x54, 0x4d, 0x7c, 0x7a, 0x7c, + 0x4d, 0x7c, 0x3e, 0x57, 0x0b, 0xdf, 0x82, 0xe9, 0xd0, 0x60, 0x21, 0x1a, 0x33, 0x25, 0x22, 0x24, + 0xe8, 0x07, 0xdc, 0xa5, 0x68, 0x62, 0x2d, 0x84, 0xfd, 0x0c, 0xb0, 0xc0, 0x4e, 0xb9, 0x91, 0x3f, + 0x4d, 0x2a, 0x52, 0x47, 0x15, 0xe7, 0x46, 0xfe, 0xd6, 0x03, 0xe7, 0x46, 0xfe, 0x3f, 0x16, 0xa8, + 0xd1, 0x0e, 0xd5, 0x2d, 0xf9, 0x16, 0x20, 0xae, 0xfd, 0xae, 0x96, 0x5d, 0x9a, 0x41, 0x14, 0xa0, + 0xcb, 0x7f, 0x61, 0x49, 0x00, 0x99, 0x30, 0x23, 0x8c, 0x39, 0x91, 0x90, 0xf3, 0xc5, 0x32, 0x49, + 0x91, 0xa3, 0x27, 0x4c, 0xf8, 0x1d, 0xbf, 0x08, 0xb3, 0xfe, 0xdb, 0x13, 0xdc, 0x0e, 0x7f, 0x07, + 0x63, 0x5a, 0x7a, 0x50, 0x8d, 0x90, 0x95, 0x72, 0x6c, 0x44, 0x39, 0xf6, 0xf9, 0x80, 0xca, 0x8c, + 0xfb, 0x12, 0x39, 0x6a, 0x66, 0x5d, 0x07, 0x50, 0x92, 0x0d, 0x8d, 0x75, 0x15, 0x20, 0xfb, 0xf0, + 0x77, 0xb2, 0xd0, 0xe1, 0xef, 0x4b, 0x70, 0x2e, 0x8a, 0x8f, 0xb1, 0x08, 0xf3, 0x7d, 0x8b, 0x08, + 0x52, 0x76, 0x67, 0xad, 0x99, 0x04, 0xe1, 0x74, 0x5d, 0xfd, 0x26, 0xcc, 0xca, 0x75, 0x81, 0x9e, + 0x50, 0x74, 0xb4, 0x58, 0x74, 0xdd, 0x24, 0xfb, 0x5c, 0x61, 0xab, 0x27, 0x14, 0x36, 0x6e, 0x58, + 0xbd, 0x46, 0x0b, 0x84, 0xee, 0xa6, 0xff, 0x37, 0x8d, 0x33, 0x82, 0x78, 0x47, 0xc5, 0x80, 0x5a, + 0x9f, 0x27, 0x2f, 0x62, 0x89, 0x33, 0x8b, 0xdd, 0x90, 0x62, 0x07, 0xeb, 0xeb, 0x31, 0x1a, 0xac, + 0xe2, 0x44, 0x7b, 0xa3, 0x8f, 0xfd, 0x5c, 0x2f, 0xb9, 0x68, 0xc7, 0x7e, 0xf3, 0x07, 0x8d, 0xb6, + 0x51, 0x1f, 0x56, 0xd1, 0x8e, 0x7e, 0x58, 0xe5, 0xf8, 0xf7, 0x21, 0xf4, 0x7f, 0xaa, 0x41, 0x66, + 0x0e, 0x60, 0xa4, 0xc3, 0x34, 0x0f, 0xee, 0x55, 0x9f, 0x41, 0xe2, 0x91, 0xbf, 0x58, 0x40, 0x90, + 0x0f, 0x17, 0x44, 0xe4, 0xec, 0x4d, 0xb2, 0x1f, 0x3f, 0xbf, 0x23, 0x56, 0xc7, 0xf8, 0xf1, 0x73, + 0x2c, 0xab, 0x49, 0x37, 0x85, 0x09, 0x67, 0xe2, 0x66, 0xb1, 0x9b, 0x4c, 0x7f, 0x7a, 0x8f, 0x1c, + 0x69, 0xb2, 0xbe, 0x3e, 0xe4, 0xd8, 0x4d, 0x4e, 0xe3, 0xf8, 0xd8, 0x4d, 0x56, 0xef, 0xbd, 0x72, + 0x78, 0xca, 0x3a, 0x9b, 0xe3, 0x8f, 0xf9, 0x7d, 0x0d, 0x96, 0x46, 0xee, 0x43, 0x8f, 0x71, 0xf2, + 0x76, 0x86, 0x5e, 0x89, 0xa7, 0xd2, 0x0f, 0xaf, 0xd4, 0x32, 0x13, 0x25, 0xbc, 0x0e, 0xf3, 0x09, + 0x6f, 0x8c, 0xbc, 0x57, 0xa3, 0x65, 0xde, 0xab, 0x51, 0xaf, 0xcd, 0x54, 0x8e, 0xbc, 0x36, 0xf3, + 0xbf, 0xe7, 0xc4, 0x7c, 0x33, 0x1d, 0xf8, 0x0d, 0x98, 0x66, 0x77, 0x5b, 0xa2, 0x97, 0xbc, 0x3e, + 0x55, 0xfc, 0xd2, 0x4c, 0xc0, 0x45, 0x01, 0xff, 0x1f, 0x0b, 0xb4, 0xa8, 0x05, 0x8b, 0xec, 0xb1, + 0xe7, 0x8e, 0xef, 0x6d, 0xd9, 0x0e, 0xb9, 0x1d, 0x4b, 0x1d, 0x79, 0xa1, 0xb6, 0x99, 0x82, 0xe3, + 0x91, 0x16, 0xa8, 0xab, 0x6a, 0xc5, 0x9f, 0x2c, 0xea, 0x99, 0xe4, 0x09, 0x8c, 0xa4, 0x36, 0xec, + 0x03, 0x90, 0x68, 0xea, 0xa2, 0x78, 0x8b, 0x97, 0x0b, 0x5e, 0x16, 0x96, 0x1c, 0x10, 0xc9, 0x0d, + 0x59, 0x14, 0x60, 0x85, 0x0a, 0x0a, 0xa0, 0xb6, 0x1d, 0xbf, 0xf5, 0x22, 0x74, 0xe2, 0x57, 0xca, + 0x3e, 0x34, 0xc3, 0x37, 0x2a, 0xa5, 0x00, 0xab, 0x54, 0x50, 0x90, 0x78, 0x67, 0xbb, 0x4c, 0x1a, + 0xfd, 0x58, 0xc3, 0x38, 0xee, 0x8d, 0x6d, 0x4a, 0xd4, 0x95, 0x57, 0xd4, 0x44, 0xc4, 0x5b, 0x31, + 0xa2, 0xf1, 0x4d, 0xb7, 0x98, 0x68, 0x5c, 0x86, 0x15, 0x32, 0x74, 0x78, 0xfb, 0xf1, 0xc5, 0x44, + 0xa1, 0x49, 0xbf, 0x52, 0xf6, 0x86, 0xa8, 0xd0, 0x03, 0xe2, 0x02, 0xac, 0x52, 0x41, 0x1e, 0x40, + 0x5f, 0x5e, 0x58, 0x14, 0x6a, 0x75, 0xb1, 0x2f, 0x8d, 0xef, 0x3d, 0x72, 0x1b, 0x31, 0xfe, 0x8d, + 0x15, 0x12, 0x54, 0x8b, 0x97, 0x56, 0x15, 0x94, 0x50, 0x38, 0xc7, 0xb2, 0xa8, 0x3e, 0x1e, 0x6b, + 0x15, 0x35, 0xb6, 0x6e, 0x1f, 0x53, 0x34, 0x8a, 0x07, 0x07, 0xf5, 0x39, 0x26, 0x4c, 0x46, 0x34, + 0x8c, 0xd8, 0xf9, 0x3a, 0x77, 0x94, 0xf3, 0x15, 0x5d, 0x87, 0xa5, 0x40, 0x3d, 0xa3, 0x64, 0x02, + 0x62, 0x9e, 0x35, 0x91, 0x57, 0x5c, 0xbb, 0xe9, 0x0a, 0x78, 0xb4, 0x0d, 0x97, 0x80, 0xc4, 0x62, + 0xed, 0x17, 0x54, 0x09, 0xc8, 0xcb, 0xb0, 0x84, 0xa2, 0x7b, 0xa9, 0x27, 0xa9, 0xcf, 0x95, 0x36, + 0x84, 0xc6, 0x7b, 0xa0, 0x1a, 0xfd, 0x94, 0xfa, 0x74, 0xd8, 0x62, 0x89, 0x10, 0x9c, 0x22, 0x6f, + 0x87, 0xa1, 0xdd, 0x64, 0x0c, 0xea, 0xd2, 0xe9, 0x84, 0xfc, 0x49, 0x87, 0x6c, 0x6e, 0xfc, 0xe9, + 0xbf, 0xa3, 0x8a, 0x79, 0xa4, 0x88, 0x90, 0x33, 0xd0, 0xce, 0x48, 0x42, 0x3b, 0x6b, 0x96, 0xd3, + 0x9c, 0x48, 0x6e, 0xd4, 0xd9, 0x1f, 0x69, 0xb0, 0x10, 0x57, 0x3b, 0x03, 0xed, 0xc9, 0x4a, 0x6a, + 0x4f, 0x9f, 0x2e, 0xf9, 0x61, 0x39, 0x2a, 0xd4, 0xff, 0xaf, 0xa8, 0x9f, 0xc5, 0x94, 0x84, 0x7b, + 0x8a, 0x81, 0xcb, 0x4d, 0xea, 0x76, 0x29, 0x03, 0x57, 0x8d, 0xe5, 0x89, 0xbf, 0x38, 0xc3, 0xe0, + 0xfd, 0x52, 0x62, 0x87, 0x2e, 0x13, 0xb4, 0x96, 0xfd, 0x06, 0xe1, 0xb1, 0xdb, 0xb5, 0xaf, 0xae, + 0x58, 0x1e, 0x47, 0xb2, 0x5a, 0x30, 0x50, 0x4a, 0xf9, 0xe4, 0xa3, 0xdf, 0xf8, 0xfb, 0xda, 0x2c, + 0xd4, 0x14, 0xc5, 0xfd, 0x1d, 0x71, 0x69, 0x0c, 0xa1, 0x66, 0x7a, 0x6e, 0x10, 0xfa, 0x86, 0x72, + 0x39, 0xa9, 0x2c, 0x51, 0x29, 0x2a, 0x9a, 0x31, 0x6a, 0xac, 0xd2, 0xa1, 0x1b, 0x9b, 0x64, 0xb4, + 0x89, 0xd3, 0xf0, 0xa4, 0x1c, 0xc5, 0x5c, 0x1f, 0x03, 0x88, 0x94, 0x24, 0xf9, 0x04, 0xaa, 0xcc, + 0x00, 0xd7, 0x0e, 0x6e, 0x48, 0x18, 0x56, 0xea, 0xa1, 0xb7, 0x61, 0xde, 0x51, 0x73, 0x3f, 0x09, + 0x15, 0xae, 0xd8, 0x79, 0x6b, 0x22, 0x8b, 0x54, 0x74, 0x54, 0xa8, 0x14, 0xe1, 0x24, 0x2d, 0xb4, + 0x03, 0xb3, 0x4e, 0x94, 0xb0, 0x4c, 0xe8, 0x71, 0x2f, 0x17, 0x26, 0xcc, 0xb0, 0x70, 0xc7, 0xa7, + 0xfc, 0x89, 0x63, 0xfc, 0x94, 0xef, 0xe4, 0x8f, 0x72, 0xce, 0xcf, 0x98, 0x9a, 0xe4, 0x3b, 0x59, + 0x14, 0x60, 0x85, 0x4a, 0x8e, 0x73, 0xaa, 0x5a, 0xc8, 0x39, 0x35, 0x84, 0xf3, 0x3e, 0x09, 0xfd, + 0xfd, 0xe6, 0xbe, 0xc9, 0x5e, 0xd6, 0xf3, 0x43, 0x96, 0x9b, 0x6c, 0xb6, 0xd8, 0x25, 0x03, 0x3c, + 0x8a, 0x0a, 0x67, 0xe1, 0xa7, 0x76, 0x1a, 0xdd, 0xf4, 0xc5, 0x1d, 0x5f, 0x66, 0xa7, 0xb1, 0x87, + 0xf7, 0x59, 0x29, 0xfa, 0x38, 0xd4, 0x42, 0x62, 0x6e, 0xbb, 0xb6, 0x69, 0x38, 0xed, 0x96, 0xd0, + 0xa8, 0xe2, 0x3d, 0x34, 0x06, 0x61, 0xb5, 0x1e, 0x6a, 0xc0, 0xc4, 0xd0, 0xb6, 0x84, 0x2a, 0xf5, + 0xe3, 0xf2, 0x49, 0xdd, 0x76, 0xeb, 0xc1, 0x41, 0xfd, 0xfd, 0x71, 0x08, 0xad, 0xfc, 0x92, 0xab, + 0x83, 0x9d, 0xde, 0xd5, 0x70, 0x7f, 0x40, 0x82, 0x95, 0x8d, 0x76, 0x0b, 0xd3, 0xc6, 0x59, 0xce, + 0xba, 0xf9, 0x13, 0x38, 0xeb, 0x6e, 0x01, 0xc4, 0x5b, 0x7c, 0x69, 0x6f, 0xdd, 0x7f, 0x9e, 0x82, + 0x8b, 0x65, 0x4f, 0x35, 0x59, 0xde, 0x2e, 0xf6, 0xb4, 0xc0, 0xea, 0x56, 0x48, 0xfc, 0x3b, 0x77, + 0xd6, 0xef, 0x6e, 0xfb, 0x24, 0xd8, 0xf6, 0x1c, 0xab, 0x60, 0xe2, 0xb0, 0xf8, 0x71, 0x8a, 0x11, + 0x8c, 0x38, 0x87, 0x12, 0x6a, 0xc2, 0x52, 0xf4, 0xbc, 0x01, 0xa6, 0x5b, 0xca, 0xd0, 0x0f, 0x42, + 0x11, 0x65, 0xc9, 0x9c, 0xb2, 0x6b, 0x69, 0x20, 0x1e, 0xad, 0x9f, 0x46, 0xc2, 0x9f, 0x39, 0x98, + 0x64, 0x2f, 0x22, 0x8e, 0x20, 0xe1, 0x6f, 0x1d, 0x8c, 0xd6, 0x57, 0x91, 0xc8, 0x17, 0x14, 0x99, + 0x78, 0x4a, 0x21, 0x89, 0x9f, 0x57, 0x1c, 0xad, 0x8f, 0x2c, 0x78, 0xdc, 0x27, 0xa6, 0xd7, 0xef, + 0x13, 0xd7, 0xe2, 0x39, 0x1f, 0x0d, 0xbf, 0x67, 0xbb, 0xd7, 0x7c, 0x83, 0x55, 0x14, 0xcf, 0x34, + 0x3e, 0x79, 0x78, 0x50, 0x7f, 0x1c, 0x1f, 0x51, 0x0f, 0x1f, 0x89, 0x05, 0xf5, 0xe1, 0xdc, 0x90, + 0xa5, 0xb8, 0xf1, 0xdb, 0x6e, 0x48, 0xfc, 0x5d, 0xc3, 0x29, 0xf8, 0x7e, 0x07, 0xe3, 0xdd, 0x8d, + 0x24, 0x2a, 0x9c, 0xc6, 0x8d, 0xf6, 0xa9, 0x28, 0x10, 0xdd, 0x51, 0x48, 0x56, 0x8b, 0x67, 0xb6, + 0xc3, 0xa3, 0xe8, 0x70, 0x16, 0x0d, 0xfd, 0xef, 0x68, 0x20, 0x0e, 0x61, 0xe4, 0x73, 0xc6, 0x5a, + 0xe6, 0x73, 0xc6, 0xa7, 0xf3, 0xac, 0xf7, 0x5f, 0x88, 0xdf, 0x4a, 0xcf, 0x7c, 0xd4, 0x5b, 0xbe, + 0x6a, 0x7f, 0x0f, 0x44, 0x63, 0x96, 0x47, 0x6c, 0xac, 0x24, 0x54, 0xc7, 0x3f, 0x2a, 0x1c, 0xa7, + 0xc1, 0x9a, 0xc8, 0x4d, 0x83, 0xf5, 0x1d, 0x0d, 0xd2, 0x8f, 0xb9, 0xa1, 0xa7, 0x60, 0x46, 0xdc, + 0x4b, 0x12, 0x37, 0x1b, 0x78, 0x84, 0x1a, 0x2f, 0xc2, 0x11, 0x2c, 0x69, 0x3f, 0x95, 0xd1, 0x06, + 0xb3, 0x63, 0xaf, 0x8f, 0xd1, 0xcb, 0x0e, 0x16, 0x60, 0x9a, 0x5f, 0xa4, 0x41, 0x3f, 0x9d, 0x19, + 0x02, 0x73, 0xab, 0xc4, 0x5d, 0x9d, 0x02, 0x91, 0x2e, 0x89, 0x54, 0x27, 0x95, 0x23, 0x53, 0x9d, + 0x74, 0x79, 0x3e, 0xba, 0x32, 0xee, 0xb3, 0x26, 0x6e, 0x8b, 0x84, 0xe8, 0x22, 0x17, 0x1d, 0x1a, + 0x26, 0xbc, 0x4a, 0x93, 0x25, 0x72, 0xed, 0xf1, 0x21, 0x50, 0x7c, 0x4b, 0x0b, 0x47, 0xf8, 0x95, + 0xe2, 0x8b, 0x0b, 0x53, 0x25, 0x8e, 0x5c, 0xc4, 0xa8, 0x8f, 0x71, 0x71, 0x41, 0xb2, 0xfd, 0x74, + 0x2e, 0xdb, 0xf7, 0x60, 0x46, 0x08, 0x0e, 0x21, 0xc5, 0x5e, 0x2c, 0x93, 0x6d, 0x4e, 0xb9, 0x73, + 0xca, 0x0b, 0x70, 0x84, 0x9d, 0xee, 0x8d, 0x7d, 0x63, 0xcf, 0xee, 0x0f, 0xfb, 0x4c, 0x76, 0x4d, + 0xa9, 0x55, 0x59, 0x31, 0x8e, 0xe0, 0xac, 0x2a, 0x3f, 0xab, 0x62, 0x1a, 0x8f, 0x5a, 0x55, 0xbc, + 0xe9, 0x11, 0xc1, 0xd1, 0xe7, 0xa1, 0xda, 0x37, 0xf6, 0xba, 0x43, 0xbf, 0x47, 0x84, 0x3b, 0x29, + 0xdf, 0x22, 0x1f, 0x86, 0xb6, 0xb3, 0x42, 0x75, 0xf5, 0xd0, 0x5f, 0x69, 0xbb, 0xe1, 0x1d, 0xbf, + 0x1b, 0xfa, 0x32, 0xab, 0xd6, 0xba, 0xc0, 0x82, 0x25, 0x3e, 0xe4, 0xc0, 0x42, 0xdf, 0xd8, 0xdb, + 0x70, 0x0d, 0xf9, 0xf4, 0x40, 0xad, 0x20, 0x05, 0xe6, 0x5b, 0x5f, 0x4f, 0xe0, 0xc2, 0x29, 0xdc, + 0x19, 0x6e, 0xfc, 0xb9, 0x87, 0xe5, 0xc6, 0x5f, 0x95, 0x61, 0x01, 0xf3, 0x8c, 0x0d, 0x1f, 0xcd, + 0x3a, 0xd4, 0x3a, 0xfa, 0xc4, 0xff, 0x0d, 0x79, 0xe2, 0xbf, 0x50, 0xc2, 0xf7, 0x7e, 0xc4, 0x69, + 0xff, 0x2e, 0xd4, 0x2c, 0x23, 0x34, 0x78, 0x69, 0xb0, 0x7c, 0xae, 0x84, 0xdb, 0xa0, 0x25, 0xf1, + 0x28, 0x09, 0x81, 0x63, 0xdc, 0x58, 0x25, 0x84, 0xee, 0xf0, 0xd4, 0xf4, 0x0e, 0x09, 0xe3, 0x2a, + 0xcc, 0x2f, 0xb7, 0xc8, 0xfd, 0x7a, 0x51, 0x22, 0xf9, 0x91, 0x0a, 0x38, 0xbb, 0x1d, 0x55, 0x27, + 0x79, 0x68, 0xf2, 0x52, 0x7c, 0xdb, 0x3d, 0x71, 0x9b, 0xe9, 0x6f, 0x69, 0xb0, 0xc8, 0x1f, 0x0d, + 0x6a, 0x7a, 0xfd, 0x81, 0xe7, 0x12, 0x3a, 0x31, 0x88, 0x8d, 0xea, 0xcd, 0x12, 0xf2, 0xa1, 0x9b, + 0x42, 0x29, 0x0e, 0x24, 0x53, 0xa5, 0x78, 0x84, 0x34, 0xfa, 0xe7, 0x1a, 0x2c, 0xf7, 0x73, 0xf2, + 0xed, 0x2e, 0x9f, 0x2f, 0x11, 0x13, 0x75, 0x5c, 0x12, 0x5f, 0xfe, 0xa0, 0xd9, 0x71, 0xb5, 0x70, + 0x6e, 0xe7, 0xca, 0x86, 0x4f, 0x96, 0xb9, 0xe6, 0xf5, 0x97, 0x61, 0x31, 0xbd, 0x13, 0xa8, 0xb9, + 0xf4, 0xb5, 0x87, 0x9b, 0x4b, 0x5f, 0x7f, 0x09, 0x2e, 0x65, 0xcf, 0x3a, 0xd5, 0x8e, 0xd8, 0xd3, + 0x14, 0xc2, 0x20, 0x89, 0x93, 0xc3, 0xd1, 0x42, 0xcc, 0x61, 0x8d, 0x95, 0xef, 0xfe, 0xe8, 0xca, + 0xfb, 0xbe, 0xff, 0xa3, 0x2b, 0xef, 0xfb, 0xc1, 0x8f, 0xae, 0xbc, 0xef, 0xcb, 0x87, 0x57, 0xb4, + 0xef, 0x1e, 0x5e, 0xd1, 0xbe, 0x7f, 0x78, 0x45, 0xfb, 0xc1, 0xe1, 0x15, 0xed, 0x3f, 0x1e, 0x5e, + 0xd1, 0xfe, 0xf6, 0x7f, 0xba, 0xf2, 0xbe, 0xcf, 0x57, 0xa3, 0x2e, 0xfd, 0x79, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xa6, 0x4b, 0xaa, 0xf1, 0x38, 0xaf, 0x00, 0x00, } func (m *Addon) Marshal() (dAtA []byte, err error) { @@ -6876,6 +7006,84 @@ func (m *HorizontalPodAutoscalerConfig) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *Ingress) 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 *Ingress) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Ingress) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Controller.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Domain) + copy(dAtA[i:], m.Domain) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Domain))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *IngressController) 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 *IngressController) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressController) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ProviderConfig != nil { + { + size, err := m.ProviderConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *KubeAPIServerConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6896,6 +7104,18 @@ func (m *KubeAPIServerConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Requests != nil { + { + size, err := m.Requests.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } if m.WatchCacheSizes != nil { { size, err := m.WatchCacheSizes.MarshalToSizedBuffer(dAtA[:i]) @@ -7017,6 +7237,39 @@ func (m *KubeAPIServerConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *KubeAPIServerRequests) 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 *KubeAPIServerRequests) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *KubeAPIServerRequests) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MaxMutatingInflight != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.MaxMutatingInflight)) + i-- + dAtA[i] = 0x10 + } + if m.MaxNonMutatingInflight != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.MaxNonMutatingInflight)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *KubeControllerManagerConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -7037,6 +7290,18 @@ func (m *KubeControllerManagerConfig) MarshalToSizedBuffer(dAtA []byte) (int, er _ = i var l int _ = l + if m.PodEvictionTimeout != nil { + { + size, err := m.PodEvictionTimeout.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } if m.NodeCIDRMaskSize != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.NodeCIDRMaskSize)) i-- @@ -9981,9 +10246,85 @@ func (m *SeedDNS) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - i -= len(m.IngressDomain) - copy(dAtA[i:], m.IngressDomain) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.IngressDomain))) + if m.Provider != nil { + { + size, err := m.Provider.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.IngressDomain != nil { + i -= len(*m.IngressDomain) + copy(dAtA[i:], *m.IngressDomain) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.IngressDomain))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *SeedDNSProvider) 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 *SeedDNSProvider) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SeedDNSProvider) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Zones != nil { + { + size, err := m.Zones.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.Domains != nil { + { + size, err := m.Domains.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -10451,6 +10792,18 @@ func (m *SeedSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Ingress != nil { + { + size, err := m.Ingress.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } if m.Settings != nil { { size, err := m.Settings.MarshalToSizedBuffer(dAtA[:i]) @@ -12943,6 +13296,34 @@ func (m *HorizontalPodAutoscalerConfig) Size() (n int) { return n } +func (m *Ingress) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Domain) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Controller.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *IngressController) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + if m.ProviderConfig != nil { + l = m.ProviderConfig.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *KubeAPIServerConfig) Size() (n int) { if m == nil { return 0 @@ -12990,6 +13371,25 @@ func (m *KubeAPIServerConfig) Size() (n int) { l = m.WatchCacheSizes.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Requests != nil { + l = m.Requests.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *KubeAPIServerRequests) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MaxNonMutatingInflight != nil { + n += 1 + sovGenerated(uint64(*m.MaxNonMutatingInflight)) + } + if m.MaxMutatingInflight != nil { + n += 1 + sovGenerated(uint64(*m.MaxMutatingInflight)) + } return n } @@ -13008,6 +13408,10 @@ func (m *KubeControllerManagerConfig) Size() (n int) { if m.NodeCIDRMaskSize != nil { n += 1 + sovGenerated(uint64(*m.NodeCIDRMaskSize)) } + if m.PodEvictionTimeout != nil { + l = m.PodEvictionTimeout.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -14090,8 +14494,35 @@ func (m *SeedDNS) Size() (n int) { } var l int _ = l - l = len(m.IngressDomain) + if m.IngressDomain != nil { + l = len(*m.IngressDomain) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Provider != nil { + l = m.Provider.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *SeedDNSProvider) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = m.SecretRef.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Domains != nil { + l = m.Domains.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Zones != nil { + l = m.Zones.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -14295,6 +14726,10 @@ func (m *SeedSpec) Size() (n int) { l = m.Settings.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Ingress != nil { + l = m.Ingress.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -15502,6 +15937,28 @@ func (this *HorizontalPodAutoscalerConfig) String() string { }, "") return s } +func (this *Ingress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Ingress{`, + `Domain:` + fmt.Sprintf("%v", this.Domain) + `,`, + `Controller:` + strings.Replace(strings.Replace(this.Controller.String(), "IngressController", "IngressController", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressController) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressController{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `ProviderConfig:` + strings.Replace(fmt.Sprintf("%v", this.ProviderConfig), "RawExtension", "runtime.RawExtension", 1) + `,`, + `}`, + }, "") + return s +} func (this *KubeAPIServerConfig) String() string { if this == nil { return "nil" @@ -15531,6 +15988,18 @@ func (this *KubeAPIServerConfig) String() string { `RuntimeConfig:` + mapStringForRuntimeConfig + `,`, `ServiceAccountConfig:` + strings.Replace(this.ServiceAccountConfig.String(), "ServiceAccountConfig", "ServiceAccountConfig", 1) + `,`, `WatchCacheSizes:` + strings.Replace(this.WatchCacheSizes.String(), "WatchCacheSizes", "WatchCacheSizes", 1) + `,`, + `Requests:` + strings.Replace(this.Requests.String(), "KubeAPIServerRequests", "KubeAPIServerRequests", 1) + `,`, + `}`, + }, "") + return s +} +func (this *KubeAPIServerRequests) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&KubeAPIServerRequests{`, + `MaxNonMutatingInflight:` + valueToStringGenerated(this.MaxNonMutatingInflight) + `,`, + `MaxMutatingInflight:` + valueToStringGenerated(this.MaxMutatingInflight) + `,`, `}`, }, "") return s @@ -15543,6 +16012,7 @@ func (this *KubeControllerManagerConfig) String() string { `KubernetesConfig:` + strings.Replace(strings.Replace(this.KubernetesConfig.String(), "KubernetesConfig", "KubernetesConfig", 1), `&`, ``, 1) + `,`, `HorizontalPodAutoscalerConfig:` + strings.Replace(this.HorizontalPodAutoscalerConfig.String(), "HorizontalPodAutoscalerConfig", "HorizontalPodAutoscalerConfig", 1) + `,`, `NodeCIDRMaskSize:` + valueToStringGenerated(this.NodeCIDRMaskSize) + `,`, + `PodEvictionTimeout:` + strings.Replace(fmt.Sprintf("%v", this.PodEvictionTimeout), "Duration", "v11.Duration", 1) + `,`, `}`, }, "") return s @@ -16311,7 +16781,21 @@ func (this *SeedDNS) String() string { return "nil" } s := strings.Join([]string{`&SeedDNS{`, - `IngressDomain:` + fmt.Sprintf("%v", this.IngressDomain) + `,`, + `IngressDomain:` + valueToStringGenerated(this.IngressDomain) + `,`, + `Provider:` + strings.Replace(this.Provider.String(), "SeedDNSProvider", "SeedDNSProvider", 1) + `,`, + `}`, + }, "") + return s +} +func (this *SeedDNSProvider) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SeedDNSProvider{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `SecretRef:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretReference", "v1.SecretReference", 1), `&`, ``, 1) + `,`, + `Domains:` + strings.Replace(this.Domains.String(), "DNSIncludeExclude", "DNSIncludeExclude", 1) + `,`, + `Zones:` + strings.Replace(this.Zones.String(), "DNSIncludeExclude", "DNSIncludeExclude", 1) + `,`, `}`, }, "") return s @@ -16461,6 +16945,7 @@ func (this *SeedSpec) String() string { `Taints:` + repeatedStringForTaints + `,`, `Volume:` + strings.Replace(this.Volume.String(), "SeedVolume", "SeedVolume", 1) + `,`, `Settings:` + strings.Replace(this.Settings.String(), "SeedSettings", "SeedSettings", 1) + `,`, + `Ingress:` + strings.Replace(this.Ingress.String(), "Ingress", "Ingress", 1) + `,`, `}`, }, "") return s @@ -23914,7 +24399,7 @@ func (m *HorizontalPodAutoscalerConfig) Unmarshal(dAtA []byte) error { } return nil } -func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { +func (m *Ingress) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -23937,82 +24422,321 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: KubeAPIServerConfig: wiretype end group for non-group") + return fmt.Errorf("proto: Ingress: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: KubeAPIServerConfig: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: Ingress: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KubernetesConfig", 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.KubernetesConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AdmissionPlugins", 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.AdmissionPlugins = append(m.AdmissionPlugins, AdmissionPlugin{}) - if err := m.AdmissionPlugins[len(m.AdmissionPlugins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field APIAudiences", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Domain", 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.Domain = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Controller", 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.Controller.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 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressController) 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: IngressController: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressController: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", 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.Kind = 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 { + 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.ProviderConfig == nil { + m.ProviderConfig = &runtime.RawExtension{} + } + if err := m.ProviderConfig.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 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *KubeAPIServerConfig) 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: KubeAPIServerConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KubeAPIServerConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubernetesConfig", 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.KubernetesConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdmissionPlugins", 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.AdmissionPlugins = append(m.AdmissionPlugins, AdmissionPlugin{}) + if err := m.AdmissionPlugins[len(m.AdmissionPlugins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIAudiences", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -24315,71 +25039,269 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.WatchCacheSizes == nil { - m.WatchCacheSizes = &WatchCacheSizes{} + if m.WatchCacheSizes == nil { + m.WatchCacheSizes = &WatchCacheSizes{} + } + if err := m.WatchCacheSizes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Requests", 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.Requests == nil { + m.Requests = &KubeAPIServerRequests{} + } + if err := m.Requests.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 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *KubeAPIServerRequests) 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: KubeAPIServerRequests: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KubeAPIServerRequests: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxNonMutatingInflight", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.MaxNonMutatingInflight = &v + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxMutatingInflight", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.MaxMutatingInflight = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *KubeControllerManagerConfig) 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: KubeControllerManagerConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KubeControllerManagerConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubernetesConfig", 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.KubernetesConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HorizontalPodAutoscalerConfig", 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.HorizontalPodAutoscalerConfig == nil { + m.HorizontalPodAutoscalerConfig = &HorizontalPodAutoscalerConfig{} } - if err := m.WatchCacheSizes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.HorizontalPodAutoscalerConfig.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 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *KubeControllerManagerConfig) 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: KubeControllerManagerConfig: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: KubeControllerManagerConfig: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field KubernetesConfig", wireType) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeCIDRMaskSize", wireType) } - var msglen int + var v int32 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -24389,28 +25311,15 @@ func (m *KubeControllerManagerConfig) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + v |= int32(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.KubernetesConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: + m.NodeCIDRMaskSize = &v + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HorizontalPodAutoscalerConfig", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PodEvictionTimeout", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24437,33 +25346,13 @@ func (m *KubeControllerManagerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.HorizontalPodAutoscalerConfig == nil { - m.HorizontalPodAutoscalerConfig = &HorizontalPodAutoscalerConfig{} + if m.PodEvictionTimeout == nil { + m.PodEvictionTimeout = &v11.Duration{} } - if err := m.HorizontalPodAutoscalerConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.PodEvictionTimeout.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field NodeCIDRMaskSize", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= int32(b&0x7F) << shift - if b < 0x80 { - break - } - } - m.NodeCIDRMaskSize = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -33048,17 +33937,169 @@ func (m *Seed) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Seed: wiretype end group for non-group") + return fmt.Errorf("proto: Seed: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Seed: 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 + 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 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SeedBackup) 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: SeedBackup: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Seed: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SeedBackup: 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 Provider", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -33068,28 +34109,27 @@ func (m *Seed) 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.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Provider = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProviderConfig", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -33116,13 +34156,49 @@ func (m *Seed) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.ProviderConfig == nil { + m.ProviderConfig = &runtime.RawExtension{} + } + if err := m.ProviderConfig.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) + return fmt.Errorf("proto: wrong wireType = %d for field Region", 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.Region = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -33149,7 +34225,7 @@ func (m *Seed) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -33177,7 +34253,7 @@ func (m *Seed) Unmarshal(dAtA []byte) error { } return nil } -func (m *SeedBackup) Unmarshal(dAtA []byte) error { +func (m *SeedDNS) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -33200,15 +34276,15 @@ func (m *SeedBackup) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SeedBackup: wiretype end group for non-group") + return fmt.Errorf("proto: SeedDNS: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SeedBackup: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SeedDNS: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Provider", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field IngressDomain", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -33236,11 +34312,12 @@ func (m *SeedBackup) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Provider = string(dAtA[iNdEx:postIndex]) + s := string(dAtA[iNdEx:postIndex]) + m.IngressDomain = &s 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 Provider", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -33267,16 +34344,69 @@ func (m *SeedBackup) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ProviderConfig == nil { - m.ProviderConfig = &runtime.RawExtension{} + if m.Provider == nil { + m.Provider = &SeedDNSProvider{} } - if err := m.ProviderConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Provider.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SeedDNSProvider) 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: SeedDNSProvider: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SeedDNSProvider: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -33304,10 +34434,9 @@ func (m *SeedBackup) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.Region = &s + m.Type = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) } @@ -33340,64 +34469,47 @@ func (m *SeedBackup) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Domains", wireType) } - if skippy < 0 { + 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 } - if (iNdEx + skippy) < 0 { + postIndex := iNdEx + msglen + if postIndex < 0 { return ErrInvalidLengthGenerated } - if (iNdEx + skippy) > l { + if postIndex > l { return io.ErrUnexpectedEOF } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SeedDNS) 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 + if m.Domains == nil { + m.Domains = &DNSIncludeExclude{} } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + if err := m.Domains.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SeedDNS: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SeedDNS: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IngressDomain", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Zones", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -33407,23 +34519,27 @@ func (m *SeedDNS) 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.IngressDomain = string(dAtA[iNdEx:postIndex]) + if m.Zones == nil { + m.Zones = &DNSIncludeExclude{} + } + if err := m.Zones.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex @@ -35072,6 +36188,42 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ingress", 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.Ingress == nil { + m.Ingress = &Ingress{} + } + if err := m.Ingress.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 0e792ff3..b50c3c85 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 @@ -1,5 +1,5 @@ /* -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 +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. @@ -499,7 +499,7 @@ message ControllerResource { // DNS holds information about the provider, the hosted zone id and the domain. message DNS { // Domain is the external available domain of the Shoot cluster. This domain will be written into the - // kubeconfig that is handed out to end-users. + // kubeconfig that is handed out to end-users. Once set it is immutable. // +optional optional string domain = 1; @@ -712,6 +712,26 @@ message HorizontalPodAutoscalerConfig { optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration upscaleDelay = 7; } +// Ingress configures the Ingress specific settings of the Seed cluster. +message Ingress { + // Domain specifies the IngressDomain of the Seed cluster pointing to the ingress controller endpoint. It will be used + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. + optional string domain = 1; + + // Controller configures a Gardener managed Ingress Controller listening on the ingressDomain + optional IngressController controller = 2; +} + +// IngressController enables a Gardener managed Ingress Controller listening on the ingressDomain +message IngressController { + // Kind defines which kind of IngressController to use, for example `nginx` + optional string kind = 1; + + // ProviderConfig specifies infrastructure specific configuration for the ingressController + // +optional + optional k8s.io.apimachinery.pkg.runtime.RawExtension providerConfig = 2; +} + // KubeAPIServerConfig contains configuration settings for the kube-apiserver. message KubeAPIServerConfig { optional KubernetesConfig kubernetesConfig = 1; @@ -759,6 +779,23 @@ message KubeAPIServerConfig { // cache size flags will have no effect, except when setting it to 0 (which disables the watch cache). // +optional optional WatchCacheSizes watchCacheSizes = 9; + + // Requests contains configuration for request-specific settings for the kube-apiserver. + // +optional + optional KubeAPIServerRequests requests = 10; +} + +// KubeAPIServerRequests contains configuration for request-specific settings for the kube-apiserver. +message KubeAPIServerRequests { + // MaxNonMutatingInflight is the maximum number of non-mutating requests in flight at a given time. When the server + // exceeds this, it rejects requests. + // +optional + optional int32 maxNonMutatingInflight = 1; + + // MaxMutatingInflight is the maximum number of mutating requests in flight at a given time. When the server + // exceeds this, it rejects requests. + // +optional + optional int32 maxMutatingInflight = 2; } // KubeControllerManagerConfig contains configuration settings for the kube-controller-manager. @@ -772,6 +809,10 @@ message KubeControllerManagerConfig { // NodeCIDRMaskSize defines the mask size for node cidr in cluster (default is 24) // +optional optional int32 nodeCIDRMaskSize = 3; + + // PodEvictionTimeout defines the grace period for deleting pods on failed nodes. Defaults to 2m. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration podEvictionTimeout = 4; } // KubeProxyConfig contains configuration settings for the kube-proxy. @@ -1247,7 +1288,7 @@ message Networking { message NginxIngress { optional Addon addon = 4; - // LoadBalancerSourceRanges is list of whitelist IP sources for NginxIngress + // LoadBalancerSourceRanges is list of allowed IP sources for NginxIngress // +optional repeated string loadBalancerSourceRanges = 1; @@ -1640,8 +1681,31 @@ message SeedBackup { // SeedDNS contains DNS-relevant information about this seed cluster. message SeedDNS { // IngressDomain is the domain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. + // This will be removed in the next API version and replaced by spec.ingress.domain. + // +optional optional string ingressDomain = 1; + + // Provider configures a DNSProvider + // +optional + optional SeedDNSProvider provider = 2; +} + +// SeedDNSProvider configures a DNSProvider +message SeedDNSProvider { + // Type describes the type of the dns-provider, for example `aws-route53` + optional string type = 1; + + // SecretRef is a reference to a Secret object containing cloud provider credentials used for registering external domains. + optional k8s.io.api.core.v1.SecretReference secretRef = 2; + + // Domains contains information about which domains shall be included/excluded for this provider. + // +optional + optional DNSIncludeExclude domains = 3; + + // Zones contains information about which hosted zones shall be included/excluded for this provider. + // +optional + optional DNSIncludeExclude zones = 4; } // SeedList is a collection of Seeds. @@ -1798,6 +1862,10 @@ message SeedSpec { // Settings contains certain settings for this seed cluster. // +optional optional SeedSettings settings = 9; + + // Ingress configures Ingress specific settings of the Seed cluster. + // +optional + optional Ingress ingress = 10; } // SeedStatus is the status of a Seed. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/condition_builder.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/condition_builder.go new file mode 100644 index 00000000..515292e4 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/condition_builder.go @@ -0,0 +1,155 @@ +// 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 helper + +import ( + "fmt" + + gardencorev1alpha1 "github.com/gardener/gardener/pkg/apis/core/v1alpha1" + + apiequality "k8s.io/apimachinery/pkg/api/equality" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// ConditionBuilder build a Condition. +type ConditionBuilder interface { + WithOldCondition(old gardencorev1alpha1.Condition) ConditionBuilder + WithStatus(status gardencorev1alpha1.ConditionStatus) ConditionBuilder + WithReason(reason string) ConditionBuilder + WithMessage(message string) ConditionBuilder + WithCodes(codes ...gardencorev1alpha1.ErrorCode) ConditionBuilder + WithNowFunc(now func() metav1.Time) ConditionBuilder + Build() (new gardencorev1alpha1.Condition, updated bool) +} + +// defaultConditionBuilder build a Condition. +type defaultConditionBuilder struct { + old gardencorev1alpha1.Condition + status gardencorev1alpha1.ConditionStatus + conditionType gardencorev1alpha1.ConditionType + reason string + message string + codes []gardencorev1alpha1.ErrorCode + nowFunc func() metav1.Time +} + +// NewConditionBuilder returns a ConditionBuilder for a specific condition. +func NewConditionBuilder(conditionType gardencorev1alpha1.ConditionType) (ConditionBuilder, error) { + if conditionType == "" { + return nil, fmt.Errorf("conditionType cannot be empty") + } + + return &defaultConditionBuilder{ + conditionType: conditionType, + nowFunc: metav1.Now, + }, nil +} + +// WithOldCondition sets the old condition. It can be used to prodive default values. +// The old's condition type is overridden to the one specified in the builder. +func (b *defaultConditionBuilder) WithOldCondition(old gardencorev1alpha1.Condition) ConditionBuilder { + old.Type = b.conditionType + b.old = old + + return b +} + +// WithStatus sets the status of the condition. +func (b *defaultConditionBuilder) WithStatus(status gardencorev1alpha1.ConditionStatus) ConditionBuilder { + b.status = status + return b +} + +// WithReason sets the reason of the condition. +func (b *defaultConditionBuilder) WithReason(reason string) ConditionBuilder { + b.reason = reason + return b +} + +// WithMessage sets the message of the condition. +func (b *defaultConditionBuilder) WithMessage(message string) ConditionBuilder { + b.message = message + return b +} + +// WithCodes sets the codes of the condition. +func (b *defaultConditionBuilder) WithCodes(codes ...gardencorev1alpha1.ErrorCode) ConditionBuilder { + b.codes = codes + return b +} + +// WithNowFunc sets the function used for getting the current time. +// Should only be used for tests. +func (b *defaultConditionBuilder) WithNowFunc(now func() metav1.Time) ConditionBuilder { + b.nowFunc = now + return b +} + +// Build creates the condition and returns if there are modifications with the OldCondition. +// If OldCondition is provided: +// - Any changes to status set the `LastTransitionTime` +// - Any updates to the message or the reason cause set `LastUpdateTime` to the current time. +func (b *defaultConditionBuilder) Build() (new gardencorev1alpha1.Condition, updated bool) { + var ( + now = b.nowFunc() + emptyTime = metav1.Time{} + ) + + new = *b.old.DeepCopy() + + if new.LastTransitionTime == emptyTime { + new.LastTransitionTime = now + } + + if new.LastUpdateTime == emptyTime { + new.LastUpdateTime = now + } + + new.Type = b.conditionType + + if b.status != "" { + new.Status = b.status + } else if b.status == "" && b.old.Status == "" { + new.Status = gardencorev1alpha1.ConditionUnknown + } + + if b.reason != "" { + new.Reason = b.reason + } else if b.reason == "" && b.old.Reason == "" { + new.Reason = "ConditionInitialized" + } + + if b.message != "" { + new.Message = b.message + } else if b.message == "" && b.old.Message == "" { + new.Message = "The condition has been initialized but its semantic check has not been performed yet." + } + + if b.codes != nil { + new.Codes = b.codes + } else if b.codes == nil && b.old.Codes == nil { + new.Codes = nil + } + + if new.Status != b.old.Status { + new.LastTransitionTime = now + } + + if new.Reason != b.old.Reason || new.Message != b.old.Message { + new.LastUpdateTime = now + } + + return new, !apiequality.Semantic.DeepEqual(new, b.old) +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/helper.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/helper.go new file mode 100644 index 00000000..6a9109db --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/helper.go @@ -0,0 +1,781 @@ +// 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 helper + +import ( + "fmt" + "sort" + "strconv" + "strings" + + gardencorev1alpha1 "github.com/gardener/gardener/pkg/apis/core/v1alpha1" + v1alpha1constants "github.com/gardener/gardener/pkg/apis/core/v1alpha1/constants" + "github.com/gardener/gardener/pkg/logger" + versionutils "github.com/gardener/gardener/pkg/utils/version" + + "github.com/Masterminds/semver" + "github.com/pkg/errors" + apiequality "k8s.io/apimachinery/pkg/api/equality" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +// Now determines the current metav1.Time. +var Now = metav1.Now + +// InitCondition initializes a new Condition with an Unknown status. +func InitCondition(conditionType gardencorev1alpha1.ConditionType) gardencorev1alpha1.Condition { + return gardencorev1alpha1.Condition{ + Type: conditionType, + Status: gardencorev1alpha1.ConditionUnknown, + Reason: "ConditionInitialized", + Message: "The condition has been initialized but its semantic check has not been performed yet.", + LastTransitionTime: Now(), + LastUpdateTime: Now(), + } +} + +// NewConditions initializes the provided conditions based on an existing list. If a condition type does not exist +// in the list yet, it will be set to default values. +func NewConditions(conditions []gardencorev1alpha1.Condition, conditionTypes ...gardencorev1alpha1.ConditionType) []*gardencorev1alpha1.Condition { + newConditions := []*gardencorev1alpha1.Condition{} + + // We retrieve the current conditions in order to update them appropriately. + for _, conditionType := range conditionTypes { + if c := GetCondition(conditions, conditionType); c != nil { + newConditions = append(newConditions, c) + continue + } + initializedCondition := InitCondition(conditionType) + newConditions = append(newConditions, &initializedCondition) + } + + return newConditions +} + +// GetCondition returns the condition with the given out of the list of . +// In case the required type could not be found, it returns nil. +func GetCondition(conditions []gardencorev1alpha1.Condition, conditionType gardencorev1alpha1.ConditionType) *gardencorev1alpha1.Condition { + for _, condition := range conditions { + if condition.Type == conditionType { + c := condition + return &c + } + } + return nil +} + +// GetOrInitCondition tries to retrieve the condition with the given condition type from the given conditions. +// If the condition could not be found, it returns an initialized condition of the given type. +func GetOrInitCondition(conditions []gardencorev1alpha1.Condition, conditionType gardencorev1alpha1.ConditionType) gardencorev1alpha1.Condition { + if condition := GetCondition(conditions, conditionType); condition != nil { + return *condition + } + return InitCondition(conditionType) +} + +// UpdatedCondition updates the properties of one specific condition. +func UpdatedCondition(condition gardencorev1alpha1.Condition, status gardencorev1alpha1.ConditionStatus, reason, message string, codes ...gardencorev1alpha1.ErrorCode) gardencorev1alpha1.Condition { + newCondition := gardencorev1alpha1.Condition{ + Type: condition.Type, + Status: status, + Reason: reason, + Message: message, + LastTransitionTime: condition.LastTransitionTime, + LastUpdateTime: Now(), + Codes: codes, + } + + if condition.Status != status { + newCondition.LastTransitionTime = Now() + } + return newCondition +} + +// UpdatedConditionUnknownError updates the condition to 'Unknown' status and the message of the given error. +func UpdatedConditionUnknownError(condition gardencorev1alpha1.Condition, err error, codes ...gardencorev1alpha1.ErrorCode) gardencorev1alpha1.Condition { + return UpdatedConditionUnknownErrorMessage(condition, err.Error(), codes...) +} + +// UpdatedConditionUnknownErrorMessage updates the condition with 'Unknown' status and the given message. +func UpdatedConditionUnknownErrorMessage(condition gardencorev1alpha1.Condition, message string, codes ...gardencorev1alpha1.ErrorCode) gardencorev1alpha1.Condition { + return UpdatedCondition(condition, gardencorev1alpha1.ConditionUnknown, gardencorev1alpha1.ConditionCheckError, message, codes...) +} + +// MergeConditions merges the given with the . Existing conditions are superseded by +// the (depending on the condition type). +func MergeConditions(oldConditions []gardencorev1alpha1.Condition, newConditions ...gardencorev1alpha1.Condition) []gardencorev1alpha1.Condition { + var ( + out = make([]gardencorev1alpha1.Condition, 0, len(oldConditions)+len(newConditions)) + typeToIndex = make(map[gardencorev1alpha1.ConditionType]int, len(oldConditions)) + ) + + for i, condition := range oldConditions { + out = append(out, condition) + typeToIndex[condition.Type] = i + } + + for _, condition := range newConditions { + if index, ok := typeToIndex[condition.Type]; ok { + out[index] = condition + continue + } + out = append(out, condition) + } + + return out +} + +// ConditionsNeedUpdate returns true if the must be updated based on . +func ConditionsNeedUpdate(existingConditions, newConditions []gardencorev1alpha1.Condition) bool { + return existingConditions == nil || !apiequality.Semantic.DeepEqual(newConditions, existingConditions) +} + +// IsResourceSupported returns true if a given combination of kind/type is part of a controller resources list. +func IsResourceSupported(resources []gardencorev1alpha1.ControllerResource, resourceKind, resourceType string) bool { + for _, resource := range resources { + if resource.Kind == resourceKind && strings.EqualFold(resource.Type, resourceType) { + return true + } + } + + return false +} + +// IsControllerInstallationSuccessful returns true if a ControllerInstallation has been marked as "successfully" +// installed. +func IsControllerInstallationSuccessful(controllerInstallation gardencorev1alpha1.ControllerInstallation) bool { + var ( + installed bool + healthy bool + ) + + for _, condition := range controllerInstallation.Status.Conditions { + if condition.Type == gardencorev1alpha1.ControllerInstallationInstalled && condition.Status == gardencorev1alpha1.ConditionTrue { + installed = true + } + if condition.Type == gardencorev1alpha1.ControllerInstallationHealthy && condition.Status == gardencorev1alpha1.ConditionTrue { + healthy = true + } + } + + return installed && healthy +} + +// ComputeOperationType checks the and determines whether it is Create, Delete, Reconcile, Migrate or Restore operation +func ComputeOperationType(meta metav1.ObjectMeta, lastOperation *gardencorev1alpha1.LastOperation) gardencorev1alpha1.LastOperationType { + switch { + case meta.Annotations[v1alpha1constants.GardenerOperation] == v1alpha1constants.GardenerOperationMigrate: + return gardencorev1alpha1.LastOperationTypeMigrate + case meta.Annotations[v1alpha1constants.GardenerOperation] == v1alpha1constants.GardenerOperationRestore: + return gardencorev1alpha1.LastOperationTypeRestore + case meta.DeletionTimestamp != nil: + return gardencorev1alpha1.LastOperationTypeDelete + case lastOperation == nil: + return gardencorev1alpha1.LastOperationTypeCreate + case (lastOperation.Type == gardencorev1alpha1.LastOperationTypeCreate && lastOperation.State != gardencorev1alpha1.LastOperationStateSucceeded): + return gardencorev1alpha1.LastOperationTypeCreate + case (lastOperation.Type == gardencorev1alpha1.LastOperationTypeMigrate && lastOperation.State != gardencorev1alpha1.LastOperationStateSucceeded): + return gardencorev1alpha1.LastOperationTypeMigrate + case (lastOperation.Type == gardencorev1alpha1.LastOperationTypeRestore && lastOperation.State != gardencorev1alpha1.LastOperationStateSucceeded): + return gardencorev1alpha1.LastOperationTypeRestore + } + return gardencorev1alpha1.LastOperationTypeReconcile +} + +// TaintsHave returns true if the given key is part of the taints list. +func TaintsHave(taints []gardencorev1alpha1.SeedTaint, key string) bool { + for _, taint := range taints { + if taint.Key == key { + return true + } + } + return false +} + +type ShootedSeed struct { + DisableDNS *bool + DisableCapacityReservation *bool + Protected *bool + Visible *bool + MinimumVolumeSize *string + APIServer *ShootedSeedAPIServer + BlockCIDRs []string + ShootDefaults *gardencorev1alpha1.ShootNetworks + Backup *gardencorev1alpha1.SeedBackup + NoGardenlet bool + UseServiceAccountBootstrapping bool + WithSecretRef bool +} + +type ShootedSeedAPIServer struct { + Replicas *int32 + Autoscaler *ShootedSeedAPIServerAutoscaler +} + +type ShootedSeedAPIServerAutoscaler struct { + MinReplicas *int32 + MaxReplicas int32 +} + +func parseInt32(s string) (int32, error) { + i64, err := strconv.ParseInt(s, 10, 32) + if err != nil { + return 0, err + } + return int32(i64), nil +} + +func parseShootedSeed(annotation string) (*ShootedSeed, error) { + var ( + flags = make(map[string]struct{}) + settings = make(map[string]string) + + trueVar = true + falseVar = false + + shootedSeed ShootedSeed + ) + + for _, fragment := range strings.Split(annotation, ",") { + parts := strings.SplitN(fragment, "=", 2) + if len(parts) == 1 { + flags[fragment] = struct{}{} + continue + } + + settings[parts[0]] = parts[1] + } + + if _, ok := flags["true"]; !ok { + return nil, nil + } + + apiServer, err := parseShootedSeedAPIServer(settings) + if err != nil { + return nil, err + } + shootedSeed.APIServer = apiServer + + blockCIDRs, err := parseShootedSeedBlockCIDRs(settings) + if err != nil { + return nil, err + } + shootedSeed.BlockCIDRs = blockCIDRs + + shootDefaults, err := parseShootedSeedShootDefaults(settings) + if err != nil { + return nil, err + } + shootedSeed.ShootDefaults = shootDefaults + + backup, err := parseShootedSeedBackup(settings) + if err != nil { + return nil, err + } + shootedSeed.Backup = backup + + if size, ok := settings["minimumVolumeSize"]; ok { + shootedSeed.MinimumVolumeSize = &size + } + + if _, ok := flags["disable-dns"]; ok { + shootedSeed.DisableDNS = &trueVar + } + if _, ok := flags["disable-capacity-reservation"]; ok { + shootedSeed.DisableCapacityReservation = &trueVar + } + if _, ok := flags["no-gardenlet"]; ok { + shootedSeed.NoGardenlet = true + } + if _, ok := flags["use-serviceaccount-bootstrapping"]; ok { + shootedSeed.UseServiceAccountBootstrapping = true + } + if _, ok := flags["with-secret-ref"]; ok { + shootedSeed.WithSecretRef = true + } + + if _, ok := flags["protected"]; ok { + shootedSeed.Protected = &trueVar + } + if _, ok := flags["unprotected"]; ok { + shootedSeed.Protected = &falseVar + } + if _, ok := flags["visible"]; ok { + shootedSeed.Visible = &trueVar + } + if _, ok := flags["invisible"]; ok { + shootedSeed.Visible = &falseVar + } + + return &shootedSeed, nil +} + +func parseShootedSeedBlockCIDRs(settings map[string]string) ([]string, error) { + cidrs, ok := settings["blockCIDRs"] + if !ok { + return nil, nil + } + + return strings.Split(cidrs, ";"), nil +} + +func parseShootedSeedShootDefaults(settings map[string]string) (*gardencorev1alpha1.ShootNetworks, error) { + var ( + podCIDR, ok1 = settings["shootDefaults.pods"] + serviceCIDR, ok2 = settings["shootDefaults.services"] + ) + + if !ok1 && !ok2 { + return nil, nil + } + + shootNetworks := &gardencorev1alpha1.ShootNetworks{} + + if ok1 { + shootNetworks.Pods = &podCIDR + } + + if ok2 { + shootNetworks.Services = &serviceCIDR + } + + return shootNetworks, nil +} + +func parseShootedSeedBackup(settings map[string]string) (*gardencorev1alpha1.SeedBackup, error) { + var ( + provider, ok1 = settings["backup.provider"] + region, ok2 = settings["backup.region"] + secretRefName, ok3 = settings["backup.secretRef.name"] + secretRefNamespace, ok4 = settings["backup.secretRef.namespace"] + ) + + if ok1 && provider == "none" { + return nil, nil + } + + backup := &gardencorev1alpha1.SeedBackup{} + + if ok1 { + backup.Provider = provider + } + if ok2 { + backup.Region = ®ion + } + if ok3 { + backup.SecretRef.Name = secretRefName + } + if ok4 { + backup.SecretRef.Namespace = secretRefNamespace + } + + return backup, nil +} + +func parseShootedSeedAPIServer(settings map[string]string) (*ShootedSeedAPIServer, error) { + apiServerAutoscaler, err := parseShootedSeedAPIServerAutoscaler(settings) + if err != nil { + return nil, err + } + + replicasString, ok := settings["apiServer.replicas"] + if !ok && apiServerAutoscaler == nil { + return nil, nil + } + + var apiServer ShootedSeedAPIServer + + apiServer.Autoscaler = apiServerAutoscaler + + if ok { + replicas, err := parseInt32(replicasString) + if err != nil { + return nil, err + } + + apiServer.Replicas = &replicas + } + + return &apiServer, nil +} + +func parseShootedSeedAPIServerAutoscaler(settings map[string]string) (*ShootedSeedAPIServerAutoscaler, error) { + minReplicasString, ok1 := settings["apiServer.autoscaler.minReplicas"] + maxReplicasString, ok2 := settings["apiServer.autoscaler.maxReplicas"] + if !ok1 && !ok2 { + return nil, nil + } + if !ok2 { + return nil, fmt.Errorf("apiSrvMaxReplicas has to be specified for shooted seed API server autoscaler") + } + + var apiServerAutoscaler ShootedSeedAPIServerAutoscaler + + if ok1 { + minReplicas, err := parseInt32(minReplicasString) + if err != nil { + return nil, err + } + apiServerAutoscaler.MinReplicas = &minReplicas + } + + maxReplicas, err := parseInt32(maxReplicasString) + if err != nil { + return nil, err + } + apiServerAutoscaler.MaxReplicas = maxReplicas + + return &apiServerAutoscaler, nil +} + +func validateShootedSeed(shootedSeed *ShootedSeed, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if shootedSeed.APIServer != nil { + allErrs = validateShootedSeedAPIServer(shootedSeed.APIServer, fldPath.Child("apiServer")) + } + + return allErrs +} + +func validateShootedSeedAPIServer(apiServer *ShootedSeedAPIServer, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if apiServer.Replicas != nil && *apiServer.Replicas < 1 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("replicas"), *apiServer.Replicas, "must be greater than 0")) + } + if apiServer.Autoscaler != nil { + allErrs = append(allErrs, validateShootedSeedAPIServerAutoscaler(apiServer.Autoscaler, fldPath.Child("autoscaler"))...) + } + + return allErrs +} + +func validateShootedSeedAPIServerAutoscaler(autoscaler *ShootedSeedAPIServerAutoscaler, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if autoscaler.MinReplicas != nil && *autoscaler.MinReplicas < 1 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("minReplicas"), *autoscaler.MinReplicas, "must be greater than 0")) + } + if autoscaler.MaxReplicas < 1 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("maxReplicas"), autoscaler.MaxReplicas, "must be greater than 0")) + } + if autoscaler.MinReplicas != nil && autoscaler.MaxReplicas < *autoscaler.MinReplicas { + allErrs = append(allErrs, field.Invalid(fldPath.Child("maxReplicas"), autoscaler.MaxReplicas, "must be greater than or equal to `minReplicas`")) + } + + return allErrs +} + +func setDefaults_ShootedSeed(shootedSeed *ShootedSeed) { + if shootedSeed.APIServer == nil { + shootedSeed.APIServer = &ShootedSeedAPIServer{} + } + setDefaults_ShootedSeedAPIServer(shootedSeed.APIServer) +} + +func setDefaults_ShootedSeedAPIServer(apiServer *ShootedSeedAPIServer) { + if apiServer.Replicas == nil { + three := int32(3) + apiServer.Replicas = &three + } + if apiServer.Autoscaler == nil { + apiServer.Autoscaler = &ShootedSeedAPIServerAutoscaler{ + MaxReplicas: 3, + } + } + setDefaults_ShootedSeedAPIServerAutoscaler(apiServer.Autoscaler) +} + +func minInt32(a int32, b int32) int32 { + if a < b { + return a + } + return b +} + +func setDefaults_ShootedSeedAPIServerAutoscaler(autoscaler *ShootedSeedAPIServerAutoscaler) { + if autoscaler.MinReplicas == nil { + minReplicas := minInt32(3, autoscaler.MaxReplicas) + autoscaler.MinReplicas = &minReplicas + } +} + +// ReadShootedSeed determines whether the Shoot has been marked to be registered automatically as a Seed cluster. +func ReadShootedSeed(shoot *gardencorev1alpha1.Shoot) (*ShootedSeed, error) { + if shoot.Namespace != v1alpha1constants.GardenNamespace || shoot.Annotations == nil { + return nil, nil + } + + val, ok := shoot.Annotations[v1alpha1constants.AnnotationShootUseAsSeed] + if !ok { + return nil, nil + } + + shootedSeed, err := parseShootedSeed(val) + if err != nil { + return nil, err + } + + if shootedSeed == nil { + return nil, nil + } + + setDefaults_ShootedSeed(shootedSeed) + + if errs := validateShootedSeed(shootedSeed, nil); len(errs) > 0 { + return nil, errs.ToAggregate() + } + + return shootedSeed, nil +} + +// HibernationIsEnabled checks if the given shoot's desired state is hibernated. +func HibernationIsEnabled(shoot *gardencorev1alpha1.Shoot) bool { + return shoot.Spec.Hibernation != nil && shoot.Spec.Hibernation.Enabled != nil && *shoot.Spec.Hibernation.Enabled +} + +// ShootWantsClusterAutoscaler checks if the given Shoot needs a cluster autoscaler. +// This is determined by checking whether one of the Shoot workers has a different +// Maximum than Minimum. +func ShootWantsClusterAutoscaler(shoot *gardencorev1alpha1.Shoot) (bool, error) { + for _, worker := range shoot.Spec.Provider.Workers { + if worker.Maximum > worker.Minimum { + return true, nil + } + } + return false, nil +} + +// ShootIgnoresAlerts checks if the alerts for the annotated shoot cluster should be ignored. +func ShootIgnoresAlerts(shoot *gardencorev1alpha1.Shoot) bool { + ignore := false + if value, ok := shoot.Annotations[v1alpha1constants.AnnotationShootIgnoreAlerts]; ok { + ignore, _ = strconv.ParseBool(value) + } + return ignore +} + +// ShootWantsBasicAuthentication returns true if basic authentication is not configured or +// if it is set explicitly to 'true'. +func ShootWantsBasicAuthentication(shoot *gardencorev1alpha1.Shoot) bool { + kubeAPIServerConfig := shoot.Spec.Kubernetes.KubeAPIServer + if kubeAPIServerConfig == nil { + return true + } + if kubeAPIServerConfig.EnableBasicAuthentication == nil { + return true + } + return *kubeAPIServerConfig.EnableBasicAuthentication +} + +// ShootUsesUnmanagedDNS returns true if the shoot's DNS section is marked as 'unmanaged'. +func ShootUsesUnmanagedDNS(shoot *gardencorev1alpha1.Shoot) bool { + return shoot.Spec.DNS != nil && len(shoot.Spec.DNS.Providers) > 0 && shoot.Spec.DNS.Providers[0].Type != nil && *shoot.Spec.DNS.Providers[0].Type == "unmanaged" +} + +// SystemComponentsAllowed checks if the given worker allows system components to be scheduled onto it +func SystemComponentsAllowed(worker *gardencorev1alpha1.Worker) bool { + return worker.SystemComponents == nil || worker.SystemComponents.Allow +} + +// GetMachineImagesFor returns a list of all machine images for a given shoot. +func GetMachineImagesFor(shoot *gardencorev1alpha1.Shoot) []*gardencorev1alpha1.ShootMachineImage { + var workerMachineImages []*gardencorev1alpha1.ShootMachineImage + for _, worker := range shoot.Spec.Provider.Workers { + if worker.Machine.Image != nil { + workerMachineImages = append(workerMachineImages, worker.Machine.Image) + } + } + return workerMachineImages +} + +// 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. +func DetermineMachineImageForName(cloudProfile *gardencorev1alpha1.CloudProfile, name string) (bool, gardencorev1alpha1.MachineImage, error) { + for _, image := range cloudProfile.Spec.MachineImages { + if strings.EqualFold(image.Name, name) { + return true, image, nil + } + } + return false, gardencorev1alpha1.MachineImage{}, nil +} + +// ShootMachineImageVersionExists checks if the shoot machine image (name, version) exists in the machine image constraint and returns true if yes and the index in the versions slice +func ShootMachineImageVersionExists(constraint gardencorev1alpha1.MachineImage, image gardencorev1alpha1.ShootMachineImage) (bool, int) { + if constraint.Name != image.Name { + return false, 0 + } + + for index, v := range constraint.Versions { + if image.Version != nil && v.Version == *image.Version { + return true, index + } + } + + return false, 0 +} + +// DetermineLatestMachineImageVersion determines the latest MachineImageVersion from a MachineImage +func DetermineLatestMachineImageVersion(image gardencorev1alpha1.MachineImage) (*semver.Version, gardencorev1alpha1.MachineImageVersion, error) { + var ( + latestSemVerVersion *semver.Version + latestMachineImageVersion gardencorev1alpha1.MachineImageVersion + ) + + for _, imageVersion := range image.Versions { + v, err := semver.NewVersion(imageVersion.Version) + if err != nil { + return nil, gardencorev1alpha1.MachineImageVersion{}, fmt.Errorf("error while parsing machine image version '%s' of machine image '%s': version not valid: %s", imageVersion.Version, image.Name, err.Error()) + } + if latestSemVerVersion == nil || v.GreaterThan(latestSemVerVersion) { + latestSemVerVersion = v + latestMachineImageVersion = imageVersion + } + } + return latestSemVerVersion, latestMachineImageVersion, nil +} + +// GetShootMachineImageFromLatestMachineImageVersion determines the latest version in a machine image and returns that as a ShootMachineImage +func GetShootMachineImageFromLatestMachineImageVersion(image gardencorev1alpha1.MachineImage) (*semver.Version, gardencorev1alpha1.ShootMachineImage, error) { + latestSemVerVersion, latestImage, err := DetermineLatestMachineImageVersion(image) + if err != nil { + return nil, gardencorev1alpha1.ShootMachineImage{}, err + } + return latestSemVerVersion, gardencorev1alpha1.ShootMachineImage{Name: image.Name, Version: &latestImage.Version}, nil +} + +// UpdateMachineImages updates the machine images in place. +func UpdateMachineImages(workers []gardencorev1alpha1.Worker, machineImages []*gardencorev1alpha1.ShootMachineImage) { + for _, machineImage := range machineImages { + for idx, worker := range workers { + if worker.Machine.Image != nil && machineImage.Name == worker.Machine.Image.Name { + logger.Logger.Infof("Updating worker images of worker '%s' from version %s to version %s", worker.Name, *worker.Machine.Image.Version, *machineImage.Version) + workers[idx].Machine.Image = machineImage + } + } + } +} + +// KubernetesVersionExistsInCloudProfile checks if the given Kubernetes version exists in the CloudProfile +func KubernetesVersionExistsInCloudProfile(cloudProfile *gardencorev1alpha1.CloudProfile, currentVersion string) (bool, gardencorev1alpha1.ExpirableVersion, error) { + for _, version := range cloudProfile.Spec.Kubernetes.Versions { + ok, err := versionutils.CompareVersions(version.Version, "=", currentVersion) + if err != nil { + return false, gardencorev1alpha1.ExpirableVersion{}, err + } + if ok { + return true, version, nil + } + } + return false, gardencorev1alpha1.ExpirableVersion{}, nil +} + +// DetermineLatestKubernetesPatchVersion finds the latest Kubernetes patch version in the compared +// to the given . In case it does not find a newer patch version, it returns false. Otherwise, +// true and the found version will be returned. +func DetermineLatestKubernetesPatchVersion(cloudProfile *gardencorev1alpha1.CloudProfile, currentVersion string) (bool, string, error) { + ok, newerVersions, _, err := determineNextKubernetesVersions(cloudProfile, currentVersion, "~") + if err != nil || !ok { + return ok, "", err + } + sort.Strings(newerVersions) + return true, newerVersions[len(newerVersions)-1], nil +} + +// DetermineNextKubernetesMinorVersion finds the next available Kubernetes minor version in the compared +// to the given . In case it does not find a newer minor version, it returns false. Otherwise, +// true and the found version will be returned. +func DetermineNextKubernetesMinorVersion(cloudProfile *gardencorev1alpha1.CloudProfile, currentVersion string) (bool, string, error) { + ok, newerVersions, _, err := determineNextKubernetesVersions(cloudProfile, currentVersion, "^") + if err != nil || !ok { + return ok, "", err + } + sort.Strings(newerVersions) + return true, newerVersions[0], nil +} + +// determineKubernetesVersions finds newer Kubernetes versions in the compared +// with the to the given . The has to be a github.com/Masterminds/semver +// range comparison symbol. In case it does not find a newer version, it returns false. Otherwise, +// true and the found version will be returned. +func determineNextKubernetesVersions(cloudProfile *gardencorev1alpha1.CloudProfile, currentVersion, operator string) (bool, []string, []gardencorev1alpha1.ExpirableVersion, error) { + var ( + newerVersions = []gardencorev1alpha1.ExpirableVersion{} + newerVersionsString = []string{} + ) + + for _, version := range cloudProfile.Spec.Kubernetes.Versions { + ok, err := versionutils.CompareVersions(version.Version, operator, currentVersion) + if err != nil { + return false, []string{}, []gardencorev1alpha1.ExpirableVersion{}, err + } + if version.Version != currentVersion && ok { + newerVersions = append(newerVersions, version) + newerVersionsString = append(newerVersionsString, version.Version) + } + } + + if len(newerVersions) == 0 { + return false, []string{}, []gardencorev1alpha1.ExpirableVersion{}, nil + } + + return true, newerVersionsString, newerVersions, nil +} + +// SetMachineImageVersionsToMachineImage sets imageVersions to the matching imageName in the machineImages. +func SetMachineImageVersionsToMachineImage(machineImages []gardencorev1alpha1.MachineImage, imageName string, imageVersions []gardencorev1alpha1.MachineImageVersion) ([]gardencorev1alpha1.MachineImage, error) { + for index, image := range machineImages { + if strings.EqualFold(image.Name, imageName) { + machineImages[index].Versions = imageVersions + return machineImages, nil + } + } + return nil, fmt.Errorf("machine image with name '%s' could not be found", imageName) +} + +// GetDefaultMachineImageFromCloudProfile gets the first MachineImage from the CloudProfile +func GetDefaultMachineImageFromCloudProfile(profile gardencorev1alpha1.CloudProfile) *gardencorev1alpha1.MachineImage { + if len(profile.Spec.MachineImages) == 0 { + return nil + } + return &profile.Spec.MachineImages[0] +} + +// WrapWithLastError is wrapper function for gardencorev1alpha1.LastError +func WrapWithLastError(err error, lastError *gardencorev1alpha1.LastError) error { + if err == nil || lastError == nil { + return err + } + return errors.Wrapf(err, "last error: %s", lastError.Description) +} + +// IsAPIServerExposureManaged returns true, if the Object is managed by Gardener for API server exposure. +// This indicates to extensions that they should not mutate the object. +// Gardener marks the kube-apiserver Service and Deployment as managed by it when it uses SNI to expose them. +func IsAPIServerExposureManaged(obj metav1.Object) bool { + if obj == nil { + return false + } + + if v, found := obj.GetLabels()[v1alpha1constants.LabelAPIServerExposure]; found && + v == v1alpha1constants.LabelAPIServerExposureGardenerManaged { + return true + } + + return false +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/shootstate_list.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/shootstate_list.go new file mode 100644 index 00000000..99519423 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper/shootstate_list.go @@ -0,0 +1,142 @@ +// 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 helper + +import ( + gardencorev1alpha1 "github.com/gardener/gardener/pkg/apis/core/v1alpha1" + autoscalingv1 "k8s.io/api/autoscaling/v1" + apiequality "k8s.io/apimachinery/pkg/api/equality" +) + +// ExtensionResourceStateList is a list of ExtensionResourceStates +type ExtensionResourceStateList []gardencorev1alpha1.ExtensionResourceState + +// Get retrieves an ExtensionResourceState for given kind, name and purpose from a list of ExtensionResourceStates +// If no ExtensionResourceStates can be found, nil is returned. +func (e *ExtensionResourceStateList) Get(kind string, name, purpose *string) *gardencorev1alpha1.ExtensionResourceState { + for _, obj := range *e { + if matchesExtensionResourceState(&obj, kind, name, purpose) { + return &obj + } + } + return nil +} + +// Delete removes an ExtensionResourceState from the list by kind, name and purpose +func (e *ExtensionResourceStateList) Delete(kind string, name, purpose *string) { + for i := len(*e) - 1; i >= 0; i-- { + if matchesExtensionResourceState(&(*e)[i], kind, name, purpose) { + *e = append((*e)[:i], (*e)[i+1:]...) + return + } + } +} + +// Upsert either inserts or updates an already existing ExtensionResourceState with kind, name and purpose in the list +func (e *ExtensionResourceStateList) Upsert(extensionResourceState *gardencorev1alpha1.ExtensionResourceState) { + for i, obj := range *e { + if matchesExtensionResourceState(&obj, extensionResourceState.Kind, extensionResourceState.Name, extensionResourceState.Purpose) { + (*e)[i].State = extensionResourceState.State + (*e)[i].Resources = extensionResourceState.Resources + return + } + } + *e = append(*e, *extensionResourceState) +} + +func matchesExtensionResourceState(extensionResourceState *gardencorev1alpha1.ExtensionResourceState, kind string, name, purpose *string) bool { + if extensionResourceState.Kind == kind && apiequality.Semantic.DeepEqual(extensionResourceState.Name, name) && apiequality.Semantic.DeepEqual(extensionResourceState.Purpose, purpose) { + return true + } + return false +} + +// GardenerResourceDataList is a list of GardenerResourceData +type GardenerResourceDataList []gardencorev1alpha1.GardenerResourceData + +// Delete deletes an item from the list +func (g *GardenerResourceDataList) Delete(name string) { + for i := len(*g) - 1; i >= 0; i-- { + if (*g)[i].Name == name { + *g = append((*g)[:i], (*g)[i+1:]...) + return + } + } +} + +// Get returns the item from the list +func (g *GardenerResourceDataList) Get(name string) *gardencorev1alpha1.GardenerResourceData { + for _, resourceDataEntry := range *g { + if resourceDataEntry.Name == name { + return &resourceDataEntry + } + } + return nil +} + +// Upsert inserts a new element or updates an existing one +func (g *GardenerResourceDataList) Upsert(data *gardencorev1alpha1.GardenerResourceData) { + for i, obj := range *g { + if obj.Name == data.Name { + (*g)[i].Type = data.Type + (*g)[i].Data = data.Data + return + } + } + *g = append(*g, *data) +} + +// DeepCopy makes a deep copy of a GardenerResourceDataList +func (g GardenerResourceDataList) DeepCopy() GardenerResourceDataList { + res := GardenerResourceDataList{} + for _, obj := range g { + res = append(res, *obj.DeepCopy()) + } + return res +} + +// ResourceDataList is a list of ResourceData +type ResourceDataList []gardencorev1alpha1.ResourceData + +// Delete deletes an item from the list +func (r *ResourceDataList) Delete(ref *autoscalingv1.CrossVersionObjectReference) { + for i := len(*r) - 1; i >= 0; i-- { + if apiequality.Semantic.DeepEqual((*r)[i].CrossVersionObjectReference, *ref) { + *r = append((*r)[:i], (*r)[i+1:]...) + return + } + } +} + +// Get returns the item from the list +func (r *ResourceDataList) Get(ref *autoscalingv1.CrossVersionObjectReference) *gardencorev1alpha1.ResourceData { + for _, obj := range *r { + if apiequality.Semantic.DeepEqual(obj.CrossVersionObjectReference, *ref) { + return &obj + } + } + return nil +} + +// Upsert inserts a new element or updates an existing one +func (r *ResourceDataList) Upsert(data *gardencorev1alpha1.ResourceData) { + for i, obj := range *r { + if apiequality.Semantic.DeepEqual(obj.CrossVersionObjectReference, data.CrossVersionObjectReference) { + (*r)[i].Data = data.Data + return + } + } + *r = append(*r, *data) +} 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 4f8aa452..17bd41c3 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 @@ -117,11 +117,6 @@ const ( // ExternalGardenerName is the value in a Kubernetes core resources `.metadata.finalizers[]` array on which the // Gardener will react when performing a delete request on a resource. ExternalGardenerName = "gardener.cloud/gardener" - // ExternalGardenerNameDeprecated is the value in a Kubernetes core resources `.metadata.finalizers[]` array on which the - // Gardener will react when performing a delete request on a resource. - // - // Deprecated: Use `ExternalGardenerName` instead. - ExternalGardenerNameDeprecated = "garden.sapcloud.io/gardener" ) const ( 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 c94a410c..25d8e7e1 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 @@ -79,6 +79,9 @@ type SeedSpec struct { // Settings contains certain settings for this seed cluster. // +optional Settings *SeedSettings `json:"settings,omitempty" protobuf:"bytes,9,opt,name=settings"` + // Ingress configures Ingress specific settings of the Seed cluster. + // +optional + Ingress *Ingress `json:"ingress,omitempty" protobuf:"bytes,10,opt,name=ingress"` } // SeedStatus is the status of a Seed. @@ -122,8 +125,45 @@ type SeedBackup struct { // SeedDNS contains DNS-relevant information about this seed cluster. type SeedDNS struct { // IngressDomain is the domain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. - IngressDomain string `json:"ingressDomain" protobuf:"bytes,1,opt,name=ingressDomain"` + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. + // This will be removed in the next API version and replaced by spec.ingress.domain. + // +optional + IngressDomain *string `json:"ingressDomain,omitempty" protobuf:"bytes,1,opt,name=ingressDomain"` + // Provider configures a DNSProvider + // +optional + Provider *SeedDNSProvider `json:"provider,omitempty" protobuf:"bytes,2,opt,name=provider"` +} + +// SeedDNSProvider configures a DNSProvider +type SeedDNSProvider struct { + // Type describes the type of the dns-provider, for example `aws-route53` + Type string `json:"type" protobuf:"bytes,1,opt,name=type"` + // SecretRef is a reference to a Secret object containing cloud provider credentials used for registering external domains. + SecretRef corev1.SecretReference `json:"secretRef" protobuf:"bytes,2,opt,name=secretRef"` + // Domains contains information about which domains shall be included/excluded for this provider. + // +optional + Domains *DNSIncludeExclude `json:"domains,omitempty" protobuf:"bytes,3,opt,name=domains"` + // Zones contains information about which hosted zones shall be included/excluded for this provider. + // +optional + Zones *DNSIncludeExclude `json:"zones,omitempty" protobuf:"bytes,4,opt,name=zones"` +} + +// Ingress configures the Ingress specific settings of the Seed cluster. +type Ingress struct { + // Domain specifies the IngressDomain of the Seed cluster pointing to the ingress controller endpoint. It will be used + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. + Domain string `json:"domain" protobuf:"bytes,1,opt,name=domain"` + // Controller configures a Gardener managed Ingress Controller listening on the ingressDomain + Controller IngressController `json:"controller" protobuf:"bytes,2,opt,name=controller"` +} + +// IngressController enables a Gardener managed Ingress Controller listening on the ingressDomain +type IngressController struct { + // Kind defines which kind of IngressController to use, for example `nginx` + Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` + // ProviderConfig specifies infrastructure specific configuration for the ingressController + // +optional + ProviderConfig *runtime.RawExtension `json:"providerConfig,omitempty" protobuf:"bytes,2,opt,name=providerConfig"` } // SeedNetworks contains CIDRs for the pod, service and node networks of a Kubernetes cluster. 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 7ab4ab9a..59dbd529 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 @@ -193,7 +193,7 @@ const ( // NginxIngress describes configuration values for the nginx-ingress addon. type NginxIngress struct { Addon `json:",inline" protobuf:"bytes,4,opt,name=addon"` - // LoadBalancerSourceRanges is list of whitelist IP sources for NginxIngress + // LoadBalancerSourceRanges is list of allowed IP sources for NginxIngress // +optional LoadBalancerSourceRanges []string `json:"loadBalancerSourceRanges,omitempty" protobuf:"bytes,1,rep,name=loadBalancerSourceRanges"` // Config contains custom configuration for the nginx-ingress-controller configuration. @@ -213,7 +213,7 @@ type NginxIngress struct { // DNS holds information about the provider, the hosted zone id and the domain. type DNS struct { // Domain is the external available domain of the Shoot cluster. This domain will be written into the - // kubeconfig that is handed out to end-users. + // kubeconfig that is handed out to end-users. Once set it is immutable. // +optional Domain *string `json:"domain,omitempty" protobuf:"bytes,1,opt,name=domain"` // Providers is a list of DNS providers that shall be enabled for this shoot cluster. Only relevant if @@ -469,6 +469,21 @@ type KubeAPIServerConfig struct { // cache size flags will have no effect, except when setting it to 0 (which disables the watch cache). // +optional WatchCacheSizes *WatchCacheSizes `json:"watchCacheSizes,omitempty" protobuf:"bytes,9,opt,name=watchCacheSizes"` + // Requests contains configuration for request-specific settings for the kube-apiserver. + // +optional + Requests *KubeAPIServerRequests `json:"requests,omitempty" protobuf:"bytes,10,opt,name=requests"` +} + +// KubeAPIServerRequests contains configuration for request-specific settings for the kube-apiserver. +type KubeAPIServerRequests struct { + // MaxNonMutatingInflight is the maximum number of non-mutating requests in flight at a given time. When the server + // exceeds this, it rejects requests. + // +optional + MaxNonMutatingInflight *int32 `json:"maxNonMutatingInflight,omitempty" protobuf:"bytes,1,name=maxNonMutatingInflight"` + // MaxMutatingInflight is the maximum number of mutating requests in flight at a given time. When the server + // exceeds this, it rejects requests. + // +optional + MaxMutatingInflight *int32 `json:"maxMutatingInflight,omitempty" protobuf:"bytes,2,name=maxMutatingInflight"` } // ServiceAccountConfig is the kube-apiserver configuration for service accounts. @@ -592,6 +607,9 @@ type KubeControllerManagerConfig struct { // NodeCIDRMaskSize defines the mask size for node cidr in cluster (default is 24) // +optional NodeCIDRMaskSize *int32 `json:"nodeCIDRMaskSize,omitempty" protobuf:"varint,3,opt,name=nodeCIDRMaskSize"` + // PodEvictionTimeout defines the grace period for deleting pods on failed nodes. Defaults to 2m. + // +optional + PodEvictionTimeout *metav1.Duration `json:"podEvictionTimeout,omitempty" protobuf:"bytes,4,opt,name=podEvictionTimeout"` } // HorizontalPodAutoscalerConfig contains horizontal pod autoscaler configuration settings for the kube-controller-manager. @@ -852,6 +870,13 @@ const ( // Maintenance relevant types // ////////////////////////////////////////////////////////////////////////////////////////////////// +const ( + // MaintenanceTimeWindowDurationMinimum is the minimum duration for a maintenance time window. + MaintenanceTimeWindowDurationMinimum = 30 * time.Minute + // MaintenanceTimeWindowDurationMaximum is the maximum duration for a maintenance time window. + MaintenanceTimeWindowDurationMaximum = 6 * time.Hour +) + // Maintenance contains information about the time window for maintenance operations and which // operations should be performed. type Maintenance struct { @@ -1134,6 +1159,9 @@ const ( ShootSystemComponentsHealthy ConditionType = "SystemComponentsHealthy" // ShootHibernationPossible is a constant for a condition type indicating whether the Shoot can be hibernated. ShootHibernationPossible ConditionType = "HibernationPossible" + // ShootMaintenancePreconditionsSatisfied is a constant for a condition type indicating whether all preconditions + // for a shoot maintenance operation are satisfied. + ShootMaintenancePreconditionsSatisfied ConditionType = "MaintenancePreconditionsSatisfied" ) // ShootPurpose is a type alias for string. 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 bb773da7..6169e130 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 @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -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 +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. @@ -472,6 +472,26 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*Ingress)(nil), (*core.Ingress)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_Ingress_To_core_Ingress(a.(*Ingress), b.(*core.Ingress), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.Ingress)(nil), (*Ingress)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_Ingress_To_v1alpha1_Ingress(a.(*core.Ingress), b.(*Ingress), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*IngressController)(nil), (*core.IngressController)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_IngressController_To_core_IngressController(a.(*IngressController), b.(*core.IngressController), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.IngressController)(nil), (*IngressController)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_IngressController_To_v1alpha1_IngressController(a.(*core.IngressController), b.(*IngressController), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*KubeAPIServerConfig)(nil), (*core.KubeAPIServerConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_KubeAPIServerConfig_To_core_KubeAPIServerConfig(a.(*KubeAPIServerConfig), b.(*core.KubeAPIServerConfig), scope) }); err != nil { @@ -482,6 +502,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*KubeAPIServerRequests)(nil), (*core.KubeAPIServerRequests)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(a.(*KubeAPIServerRequests), b.(*core.KubeAPIServerRequests), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.KubeAPIServerRequests)(nil), (*KubeAPIServerRequests)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_KubeAPIServerRequests_To_v1alpha1_KubeAPIServerRequests(a.(*core.KubeAPIServerRequests), b.(*KubeAPIServerRequests), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*KubeControllerManagerConfig)(nil), (*core.KubeControllerManagerConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_KubeControllerManagerConfig_To_core_KubeControllerManagerConfig(a.(*KubeControllerManagerConfig), b.(*core.KubeControllerManagerConfig), scope) }); err != nil { @@ -972,6 +1002,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*SeedDNSProvider)(nil), (*core.SeedDNSProvider)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_SeedDNSProvider_To_core_SeedDNSProvider(a.(*SeedDNSProvider), b.(*core.SeedDNSProvider), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.SeedDNSProvider)(nil), (*SeedDNSProvider)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_SeedDNSProvider_To_v1alpha1_SeedDNSProvider(a.(*core.SeedDNSProvider), b.(*SeedDNSProvider), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*SeedList)(nil), (*core.SeedList)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_SeedList_To_core_SeedList(a.(*SeedList), b.(*core.SeedList), scope) }); err != nil { @@ -1067,11 +1107,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*core.SeedStatus)(nil), (*SeedStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_core_SeedStatus_To_v1alpha1_SeedStatus(a.(*core.SeedStatus), b.(*SeedStatus), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*SeedTaint)(nil), (*core.SeedTaint)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_SeedTaint_To_core_SeedTaint(a.(*SeedTaint), b.(*core.SeedTaint), scope) }); err != nil { @@ -1312,6 +1347,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*core.SeedStatus)(nil), (*SeedStatus)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_SeedStatus_To_v1alpha1_SeedStatus(a.(*core.SeedStatus), b.(*SeedStatus), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*core.Seed)(nil), (*Seed)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_core_Seed_To_v1alpha1_Seed(a.(*core.Seed), b.(*Seed), scope) }); err != nil { @@ -2549,6 +2589,54 @@ func Convert_core_HorizontalPodAutoscalerConfig_To_v1alpha1_HorizontalPodAutosca return autoConvert_core_HorizontalPodAutoscalerConfig_To_v1alpha1_HorizontalPodAutoscalerConfig(in, out, s) } +func autoConvert_v1alpha1_Ingress_To_core_Ingress(in *Ingress, out *core.Ingress, s conversion.Scope) error { + out.Domain = in.Domain + if err := Convert_v1alpha1_IngressController_To_core_IngressController(&in.Controller, &out.Controller, s); err != nil { + return err + } + return nil +} + +// Convert_v1alpha1_Ingress_To_core_Ingress is an autogenerated conversion function. +func Convert_v1alpha1_Ingress_To_core_Ingress(in *Ingress, out *core.Ingress, s conversion.Scope) error { + return autoConvert_v1alpha1_Ingress_To_core_Ingress(in, out, s) +} + +func autoConvert_core_Ingress_To_v1alpha1_Ingress(in *core.Ingress, out *Ingress, s conversion.Scope) error { + out.Domain = in.Domain + if err := Convert_core_IngressController_To_v1alpha1_IngressController(&in.Controller, &out.Controller, s); err != nil { + return err + } + return nil +} + +// Convert_core_Ingress_To_v1alpha1_Ingress is an autogenerated conversion function. +func Convert_core_Ingress_To_v1alpha1_Ingress(in *core.Ingress, out *Ingress, s conversion.Scope) error { + return autoConvert_core_Ingress_To_v1alpha1_Ingress(in, out, s) +} + +func autoConvert_v1alpha1_IngressController_To_core_IngressController(in *IngressController, out *core.IngressController, s conversion.Scope) error { + out.Kind = in.Kind + out.ProviderConfig = (*runtime.RawExtension)(unsafe.Pointer(in.ProviderConfig)) + return nil +} + +// Convert_v1alpha1_IngressController_To_core_IngressController is an autogenerated conversion function. +func Convert_v1alpha1_IngressController_To_core_IngressController(in *IngressController, out *core.IngressController, s conversion.Scope) error { + return autoConvert_v1alpha1_IngressController_To_core_IngressController(in, out, s) +} + +func autoConvert_core_IngressController_To_v1alpha1_IngressController(in *core.IngressController, out *IngressController, s conversion.Scope) error { + out.Kind = in.Kind + out.ProviderConfig = (*runtime.RawExtension)(unsafe.Pointer(in.ProviderConfig)) + return nil +} + +// Convert_core_IngressController_To_v1alpha1_IngressController is an autogenerated conversion function. +func Convert_core_IngressController_To_v1alpha1_IngressController(in *core.IngressController, out *IngressController, s conversion.Scope) error { + return autoConvert_core_IngressController_To_v1alpha1_IngressController(in, out, s) +} + func autoConvert_v1alpha1_KubeAPIServerConfig_To_core_KubeAPIServerConfig(in *KubeAPIServerConfig, out *core.KubeAPIServerConfig, s conversion.Scope) error { if err := Convert_v1alpha1_KubernetesConfig_To_core_KubernetesConfig(&in.KubernetesConfig, &out.KubernetesConfig, s); err != nil { return err @@ -2561,6 +2649,7 @@ func autoConvert_v1alpha1_KubeAPIServerConfig_To_core_KubeAPIServerConfig(in *Ku out.RuntimeConfig = *(*map[string]bool)(unsafe.Pointer(&in.RuntimeConfig)) out.ServiceAccountConfig = (*core.ServiceAccountConfig)(unsafe.Pointer(in.ServiceAccountConfig)) out.WatchCacheSizes = (*core.WatchCacheSizes)(unsafe.Pointer(in.WatchCacheSizes)) + out.Requests = (*core.KubeAPIServerRequests)(unsafe.Pointer(in.Requests)) return nil } @@ -2581,6 +2670,7 @@ func autoConvert_core_KubeAPIServerConfig_To_v1alpha1_KubeAPIServerConfig(in *co out.RuntimeConfig = *(*map[string]bool)(unsafe.Pointer(&in.RuntimeConfig)) out.ServiceAccountConfig = (*ServiceAccountConfig)(unsafe.Pointer(in.ServiceAccountConfig)) out.WatchCacheSizes = (*WatchCacheSizes)(unsafe.Pointer(in.WatchCacheSizes)) + out.Requests = (*KubeAPIServerRequests)(unsafe.Pointer(in.Requests)) return nil } @@ -2589,12 +2679,35 @@ func Convert_core_KubeAPIServerConfig_To_v1alpha1_KubeAPIServerConfig(in *core.K return autoConvert_core_KubeAPIServerConfig_To_v1alpha1_KubeAPIServerConfig(in, out, s) } +func autoConvert_v1alpha1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(in *KubeAPIServerRequests, out *core.KubeAPIServerRequests, s conversion.Scope) error { + out.MaxNonMutatingInflight = (*int32)(unsafe.Pointer(in.MaxNonMutatingInflight)) + out.MaxMutatingInflight = (*int32)(unsafe.Pointer(in.MaxMutatingInflight)) + return nil +} + +// Convert_v1alpha1_KubeAPIServerRequests_To_core_KubeAPIServerRequests is an autogenerated conversion function. +func Convert_v1alpha1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(in *KubeAPIServerRequests, out *core.KubeAPIServerRequests, s conversion.Scope) error { + return autoConvert_v1alpha1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(in, out, s) +} + +func autoConvert_core_KubeAPIServerRequests_To_v1alpha1_KubeAPIServerRequests(in *core.KubeAPIServerRequests, out *KubeAPIServerRequests, s conversion.Scope) error { + out.MaxNonMutatingInflight = (*int32)(unsafe.Pointer(in.MaxNonMutatingInflight)) + out.MaxMutatingInflight = (*int32)(unsafe.Pointer(in.MaxMutatingInflight)) + return nil +} + +// Convert_core_KubeAPIServerRequests_To_v1alpha1_KubeAPIServerRequests is an autogenerated conversion function. +func Convert_core_KubeAPIServerRequests_To_v1alpha1_KubeAPIServerRequests(in *core.KubeAPIServerRequests, out *KubeAPIServerRequests, s conversion.Scope) error { + return autoConvert_core_KubeAPIServerRequests_To_v1alpha1_KubeAPIServerRequests(in, out, s) +} + func autoConvert_v1alpha1_KubeControllerManagerConfig_To_core_KubeControllerManagerConfig(in *KubeControllerManagerConfig, out *core.KubeControllerManagerConfig, s conversion.Scope) error { if err := Convert_v1alpha1_KubernetesConfig_To_core_KubernetesConfig(&in.KubernetesConfig, &out.KubernetesConfig, s); err != nil { return err } out.HorizontalPodAutoscalerConfig = (*core.HorizontalPodAutoscalerConfig)(unsafe.Pointer(in.HorizontalPodAutoscalerConfig)) out.NodeCIDRMaskSize = (*int32)(unsafe.Pointer(in.NodeCIDRMaskSize)) + out.PodEvictionTimeout = (*metav1.Duration)(unsafe.Pointer(in.PodEvictionTimeout)) return nil } @@ -2609,6 +2722,7 @@ func autoConvert_core_KubeControllerManagerConfig_To_v1alpha1_KubeControllerMana } out.HorizontalPodAutoscalerConfig = (*HorizontalPodAutoscalerConfig)(unsafe.Pointer(in.HorizontalPodAutoscalerConfig)) out.NodeCIDRMaskSize = (*int32)(unsafe.Pointer(in.NodeCIDRMaskSize)) + out.PodEvictionTimeout = (*metav1.Duration)(unsafe.Pointer(in.PodEvictionTimeout)) return nil } @@ -3963,7 +4077,8 @@ func Convert_core_SeedBackup_To_v1alpha1_SeedBackup(in *core.SeedBackup, out *Se } func autoConvert_v1alpha1_SeedDNS_To_core_SeedDNS(in *SeedDNS, out *core.SeedDNS, s conversion.Scope) error { - out.IngressDomain = in.IngressDomain + out.IngressDomain = (*string)(unsafe.Pointer(in.IngressDomain)) + out.Provider = (*core.SeedDNSProvider)(unsafe.Pointer(in.Provider)) return nil } @@ -3973,7 +4088,8 @@ func Convert_v1alpha1_SeedDNS_To_core_SeedDNS(in *SeedDNS, out *core.SeedDNS, s } func autoConvert_core_SeedDNS_To_v1alpha1_SeedDNS(in *core.SeedDNS, out *SeedDNS, s conversion.Scope) error { - out.IngressDomain = in.IngressDomain + out.IngressDomain = (*string)(unsafe.Pointer(in.IngressDomain)) + out.Provider = (*SeedDNSProvider)(unsafe.Pointer(in.Provider)) return nil } @@ -3982,6 +4098,32 @@ func Convert_core_SeedDNS_To_v1alpha1_SeedDNS(in *core.SeedDNS, out *SeedDNS, s return autoConvert_core_SeedDNS_To_v1alpha1_SeedDNS(in, out, s) } +func autoConvert_v1alpha1_SeedDNSProvider_To_core_SeedDNSProvider(in *SeedDNSProvider, out *core.SeedDNSProvider, s conversion.Scope) error { + out.Type = in.Type + out.SecretRef = in.SecretRef + out.Domains = (*core.DNSIncludeExclude)(unsafe.Pointer(in.Domains)) + out.Zones = (*core.DNSIncludeExclude)(unsafe.Pointer(in.Zones)) + return nil +} + +// Convert_v1alpha1_SeedDNSProvider_To_core_SeedDNSProvider is an autogenerated conversion function. +func Convert_v1alpha1_SeedDNSProvider_To_core_SeedDNSProvider(in *SeedDNSProvider, out *core.SeedDNSProvider, s conversion.Scope) error { + return autoConvert_v1alpha1_SeedDNSProvider_To_core_SeedDNSProvider(in, out, s) +} + +func autoConvert_core_SeedDNSProvider_To_v1alpha1_SeedDNSProvider(in *core.SeedDNSProvider, out *SeedDNSProvider, s conversion.Scope) error { + out.Type = in.Type + out.SecretRef = in.SecretRef + out.Domains = (*DNSIncludeExclude)(unsafe.Pointer(in.Domains)) + out.Zones = (*DNSIncludeExclude)(unsafe.Pointer(in.Zones)) + return nil +} + +// Convert_core_SeedDNSProvider_To_v1alpha1_SeedDNSProvider is an autogenerated conversion function. +func Convert_core_SeedDNSProvider_To_v1alpha1_SeedDNSProvider(in *core.SeedDNSProvider, out *SeedDNSProvider, s conversion.Scope) error { + return autoConvert_core_SeedDNSProvider_To_v1alpha1_SeedDNSProvider(in, out, s) +} + func autoConvert_v1alpha1_SeedList_To_core_SeedList(in *SeedList, out *core.SeedList, s conversion.Scope) error { out.ListMeta = in.ListMeta if in.Items != nil { @@ -4231,6 +4373,7 @@ func autoConvert_v1alpha1_SeedSpec_To_core_SeedSpec(in *SeedSpec, out *core.Seed out.Taints = *(*[]core.SeedTaint)(unsafe.Pointer(&in.Taints)) out.Volume = (*core.SeedVolume)(unsafe.Pointer(in.Volume)) out.Settings = (*core.SeedSettings)(unsafe.Pointer(in.Settings)) + out.Ingress = (*core.Ingress)(unsafe.Pointer(in.Ingress)) return nil } @@ -4249,6 +4392,7 @@ func autoConvert_core_SeedSpec_To_v1alpha1_SeedSpec(in *core.SeedSpec, out *Seed out.Settings = (*SeedSettings)(unsafe.Pointer(in.Settings)) out.Taints = *(*[]SeedTaint)(unsafe.Pointer(&in.Taints)) out.Volume = (*SeedVolume)(unsafe.Pointer(in.Volume)) + out.Ingress = (*Ingress)(unsafe.Pointer(in.Ingress)) return nil } @@ -4272,14 +4416,11 @@ func autoConvert_core_SeedStatus_To_v1alpha1_SeedStatus(in *core.SeedStatus, out out.Conditions = *(*[]Condition)(unsafe.Pointer(&in.Conditions)) out.ObservedGeneration = in.ObservedGeneration out.ClusterIdentity = (*string)(unsafe.Pointer(in.ClusterIdentity)) + // WARNING: in.Capacity requires manual conversion: does not exist in peer-type + // WARNING: in.Allocatable requires manual conversion: does not exist in peer-type return nil } -// Convert_core_SeedStatus_To_v1alpha1_SeedStatus is an autogenerated conversion function. -func Convert_core_SeedStatus_To_v1alpha1_SeedStatus(in *core.SeedStatus, out *SeedStatus, s conversion.Scope) error { - return autoConvert_core_SeedStatus_To_v1alpha1_SeedStatus(in, out, s) -} - func autoConvert_v1alpha1_SeedTaint_To_core_SeedTaint(in *SeedTaint, out *core.SeedTaint, s conversion.Scope) error { out.Key = in.Key out.Value = (*string)(unsafe.Pointer(in.Value)) 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 1c87b2ea..133b3765 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 @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -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 +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. @@ -1321,6 +1321,44 @@ func (in *HorizontalPodAutoscalerConfig) DeepCopy() *HorizontalPodAutoscalerConf return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Ingress) DeepCopyInto(out *Ingress) { + *out = *in + in.Controller.DeepCopyInto(&out.Controller) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ingress. +func (in *Ingress) DeepCopy() *Ingress { + if in == nil { + return nil + } + out := new(Ingress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressController) DeepCopyInto(out *IngressController) { + *out = *in + if in.ProviderConfig != nil { + in, out := &in.ProviderConfig, &out.ProviderConfig + *out = new(runtime.RawExtension) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressController. +func (in *IngressController) DeepCopy() *IngressController { + if in == nil { + return nil + } + out := new(IngressController) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KubeAPIServerConfig) DeepCopyInto(out *KubeAPIServerConfig) { *out = *in @@ -1369,6 +1407,11 @@ func (in *KubeAPIServerConfig) DeepCopyInto(out *KubeAPIServerConfig) { *out = new(WatchCacheSizes) (*in).DeepCopyInto(*out) } + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = new(KubeAPIServerRequests) + (*in).DeepCopyInto(*out) + } return } @@ -1382,6 +1425,32 @@ func (in *KubeAPIServerConfig) DeepCopy() *KubeAPIServerConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeAPIServerRequests) DeepCopyInto(out *KubeAPIServerRequests) { + *out = *in + if in.MaxNonMutatingInflight != nil { + in, out := &in.MaxNonMutatingInflight, &out.MaxNonMutatingInflight + *out = new(int32) + **out = **in + } + if in.MaxMutatingInflight != nil { + in, out := &in.MaxMutatingInflight, &out.MaxMutatingInflight + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeAPIServerRequests. +func (in *KubeAPIServerRequests) DeepCopy() *KubeAPIServerRequests { + if in == nil { + return nil + } + out := new(KubeAPIServerRequests) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KubeControllerManagerConfig) DeepCopyInto(out *KubeControllerManagerConfig) { *out = *in @@ -1396,6 +1465,11 @@ func (in *KubeControllerManagerConfig) DeepCopyInto(out *KubeControllerManagerCo *out = new(int32) **out = **in } + if in.PodEvictionTimeout != nil { + in, out := &in.PodEvictionTimeout, &out.PodEvictionTimeout + *out = new(metav1.Duration) + **out = **in + } return } @@ -2928,6 +3002,16 @@ func (in *SeedBackup) DeepCopy() *SeedBackup { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedDNS) DeepCopyInto(out *SeedDNS) { *out = *in + if in.IngressDomain != nil { + in, out := &in.IngressDomain, &out.IngressDomain + *out = new(string) + **out = **in + } + if in.Provider != nil { + in, out := &in.Provider, &out.Provider + *out = new(SeedDNSProvider) + (*in).DeepCopyInto(*out) + } return } @@ -2941,6 +3025,33 @@ func (in *SeedDNS) DeepCopy() *SeedDNS { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SeedDNSProvider) DeepCopyInto(out *SeedDNSProvider) { + *out = *in + out.SecretRef = in.SecretRef + if in.Domains != nil { + in, out := &in.Domains, &out.Domains + *out = new(DNSIncludeExclude) + (*in).DeepCopyInto(*out) + } + if in.Zones != nil { + in, out := &in.Zones, &out.Zones + *out = new(DNSIncludeExclude) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedDNSProvider. +func (in *SeedDNSProvider) DeepCopy() *SeedDNSProvider { + if in == nil { + return nil + } + out := new(SeedDNSProvider) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedList) DeepCopyInto(out *SeedList) { *out = *in @@ -3188,7 +3299,7 @@ func (in *SeedSpec) DeepCopyInto(out *SeedSpec) { *out = make([]string, len(*in)) copy(*out, *in) } - out.DNS = in.DNS + in.DNS.DeepCopyInto(&out.DNS) in.Networks.DeepCopyInto(&out.Networks) in.Provider.DeepCopyInto(&out.Provider) if in.SecretRef != nil { @@ -3213,6 +3324,11 @@ func (in *SeedSpec) DeepCopyInto(out *SeedSpec) { *out = new(SeedSettings) (*in).DeepCopyInto(*out) } + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = new(Ingress) + (*in).DeepCopyInto(*out) + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.defaults.go index 79e08b5c..0c335385 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.defaults.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -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 +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. 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 9476f914..dac01d54 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 @@ -90,10 +90,14 @@ const ( // StatefulSetNameAlertManager is a constant for the name of a Kubernetes stateful set object that contains // the alertmanager pod. StatefulSetNameAlertManager = "alertmanager" + // ETCDRoleMain is a constant for the main etcd role. + ETCDRoleMain = "main" + // ETCDRoleEvents is a constant for the events etcd role. + ETCDRoleEvents = "events" // ETCDMain is a constant for the name of etcd-main Etcd object. - ETCDMain = "etcd-main" + ETCDMain = "etcd-" + ETCDRoleMain // ETCDEvents is a constant for the name of etcd-events Etcd object. - ETCDEvents = "etcd-events" + ETCDEvents = "etcd-" + ETCDRoleEvents // StatefulSetNameLoki is a constant for the name of a Kubernetes stateful set object that contains // the loki pod. StatefulSetNameLoki = "loki" @@ -103,6 +107,8 @@ const ( // GardenerPurpose is a constant for the key in a label describing the purpose of the respective object. GardenerPurpose = "gardener.cloud/purpose" + // GardenerDescription is a constant for a key in an annotation describing what the resource is used for. + GardenerDescription = "gardener.cloud/description" // GardenerOperation is a constant for an annotation on a resource that describes a desired operation. GardenerOperation = "gardener.cloud/operation" @@ -146,6 +152,8 @@ const ( GardenRoleMonitoring = "monitoring" // GardenRoleOptionalAddon is the value of the GardenRole key indicating type 'optional-addon'. GardenRoleOptionalAddon = "optional-addon" + // GardenRoleCloudConfig is the value of the GardenRole key indicating type 'cloud-config'. + GardenRoleCloudConfig = "cloud-config" // GardenRoleKubeconfig is the value of the GardenRole key indicating type 'kubeconfig'. GardenRoleKubeconfig = "kubeconfig" // GardenRoleSSHKeyPair is the value of the GardenRole key indicating type 'ssh-keypair'. @@ -153,8 +161,12 @@ const ( // DeprecatedShootUID is an annotation key for the shoot namespace in the seed cluster, // which value will be the value of `shoot.status.uid` - // +deprecated: Use `Cluster` resource instead. + // + // Deprecated: Use the `Cluster` resource or the annotation key from the new API group `ShootUID`. DeprecatedShootUID = "shoot.garden.sapcloud.io/uid" + // ShootUID is an annotation key for the shoot namespace in the seed cluster, + // which value will be the value of `shoot.status.uid` + ShootUID = "shoot.gardener.cloud/uid" // SeedResourceManagerClass is the resource-class managed by the Gardener-Resource-Manager // instance in the garden namespace on the seeds. @@ -201,6 +213,13 @@ const ( // LabelNetworkPolicyFromPrometheus allows Ingress from Prometheus to pods labeled with 'networking.gardener.cloud/from-prometheus=allowed' and ports // named 'metrics' in the PodSpecification. LabelNetworkPolicyFromPrometheus = "networking.gardener.cloud/from-prometheus" + // LabelNetworkPolicyShootFromSeed allows Ingress traffic from the seed cluster (where the shoot's kube-apiserver + // runs). + LabelNetworkPolicyShootFromSeed = "networking.gardener.cloud/from-seed" + // LabelNetworkPolicyShootToAPIServer allows Egress traffic to the shoot's API server. + LabelNetworkPolicyShootToAPIServer = "networking.gardener.cloud/to-apiserver" + // LabelNetworkPolicyShootToKubelet allows Egress traffic to the kubelets. + LabelNetworkPolicyShootToKubelet = "networking.gardener.cloud/to-kubelet" // LabelNetworkPolicyAllowed is a constant for allowing a network policy. LabelNetworkPolicyAllowed = "allowed" // LabelNetworkPolicyDisallowed is a constant for disallowing a network policy. @@ -236,19 +255,9 @@ const ( // AnnotationShootUseAsSeed is a constant for an annotation on a Shoot resource indicating that the Shoot shall be registered as Seed in the // Garden cluster once successfully created. AnnotationShootUseAsSeed = "shoot.gardener.cloud/use-as-seed" - // AnnotationShootUseAsSeedDeprecated is a constant for an annotation on a Shoot resource indicating that the Shoot shall be registered as Seed in the - // Garden cluster once successfully created. - // - // Deprecated: Use `AnnotationShootUseAsSeed` instead. - AnnotationShootUseAsSeedDeprecated = "shoot.garden.sapcloud.io/use-as-seed" // AnnotationShootIgnoreAlerts is the key for an annotation of a Shoot cluster whose value indicates // if alerts for this cluster should be ignored AnnotationShootIgnoreAlerts = "shoot.gardener.cloud/ignore-alerts" - // AnnotationShootIgnoreAlertsDeprecated is the key for an annotation of a Shoot cluster whose value indicates - // if alerts for this cluster should be ignored - // - // Deprecated: Use `AnnotationShootIgnoreAlerts` instead. - AnnotationShootIgnoreAlertsDeprecated = "shoot.garden.sapcloud.io/ignore-alerts" // AnnotationShootSkipCleanup is a key for an annotation on a Shoot resource that declares that the clean up steps should be skipped when the // cluster is deleted. Concretely, this will skip everything except the deletion of (load balancer) services and persistent volume resources. AnnotationShootSkipCleanup = "shoot.gardener.cloud/skip-cleanup" @@ -256,6 +265,15 @@ const ( // if a konnectivity-tunnel should be deployed into the shoot cluster or not. AnnotationShootKonnectivityTunnel = "alpha.featuregates.shoot.gardener.cloud/konnectivity-tunnel" + // AnnotationShootAPIServerSNIPodInjector is the key for an annotation of a Shoot cluster whose value indicates + // if pod injection of 'KUBERNETES_SERVICE_HOST' environment variable should happen for clusters where APIServerSNI + // featuregate is enabled. + // Any value than 'disable' enables this feature. + AnnotationShootAPIServerSNIPodInjector = "alpha.featuregates.shoot.gardener.cloud/apiserver-sni-pod-injector" + // AnnotationShootAPIServerSNIPodInjectorDisableValue is the value of the + // `alpha.featuregates.shoot.gardener.cloud/apiserver-sni-pod-injector` annotation that disables the pod injection. + AnnotationShootAPIServerSNIPodInjectorDisableValue = "disable" + // OperatingSystemConfigUnitNameKubeletService is a constant for a unit in the operating system config that contains the kubelet service. OperatingSystemConfigUnitNameKubeletService = "kubelet.service" // OperatingSystemConfigUnitNameDockerService is a constant for a unit in the operating system config that contains the docker service. @@ -282,26 +300,33 @@ const ( // LabelControllerRegistrationName is the key of a label on extension namespaces that indicates the controller registration name. LabelControllerRegistrationName = "controllerregistration.core.gardener.cloud/name" - - // EventResourceReferenced indicates that the resource deletion is in waiting mode because the resource is still - // being referenced by at least one other resource (e.g. a SecretBinding is still referenced by a Shoot) - EventResourceReferenced = "ResourceReferenced" - // LabelPodMaintenanceRestart is a constant for a label that describes that a pod should be restarted during maintenance. LabelPodMaintenanceRestart = "maintenance.gardener.cloud/restart" - // LabelWorkerPool is a constant for a label that indicates the worker pool the node belongs to LabelWorkerPool = "worker.gardener.cloud/pool" // LabelWorkerPoolDeprecated is a deprecated constant for a label that indicates the worker pool the node belongs to LabelWorkerPoolDeprecated = "worker.garden.sapcloud.io/group" - // LabelWorkerPoolSystemComponents is a constant that indicates whether the worker pool should host system components LabelWorkerPoolSystemComponents = "worker.gardener.cloud/system-components" + // EventResourceReferenced indicates that the resource deletion is in waiting mode because the resource is still + // being referenced by at least one other resource (e.g. a SecretBinding is still referenced by a Shoot) + EventResourceReferenced = "ResourceReferenced" + + // PriorityClassNameShootControlPlane is the name of a priority class for critical pods of a shoot control plane. + PriorityClassNameShootControlPlane = "gardener-shoot-controlplane" + // ReferencedResourcesPrefix is the prefix used when copying referenced resources to the Shoot namespace in the Seed, // to avoid naming collisions with resources managed by Gardener. ReferencedResourcesPrefix = "ref-" // ClusterIdentity is a constant equal to the name and data key (that stores the identity) of the cluster-identity ConfigMap ClusterIdentity = "cluster-identity" + + // SeedNginxIngressClass defines the ingress class for the seed nginx ingress controller + SeedNginxIngressClass = "nginx-gardener" + // IngressKindNginx defines nginx as kind as managed Seed ingress + IngressKindNginx = "nginx" + // ShootNginxIngressClass defines the ingress class for the seed nginx ingress controller + ShootNginxIngressClass = "nginx" ) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/utils.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/utils.go index 6529c1f1..dadb1ce2 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/utils.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/utils.go @@ -14,27 +14,6 @@ package constants -// GetShootUseAsSeedAnnotation fetches the value for AnnotationShootUseAsSeed annotation. -// If not present, it fallbacks to AnnotationShootUseAsSeedDeprecated. -func GetShootUseAsSeedAnnotation(annotations map[string]string) (string, bool) { - return getDeprecatedAnnotation(annotations, AnnotationShootUseAsSeed, AnnotationShootUseAsSeedDeprecated) -} - -// GetShootIgnoreAlertsAnnotation fetches the value for AnnotationShootIgnoreAlerts annotation. -// If not present, it fallbacks to AnnotationShootIgnoreAlertsDeprecated. -func GetShootIgnoreAlertsAnnotation(annotations map[string]string) (string, bool) { - return getDeprecatedAnnotation(annotations, AnnotationShootIgnoreAlerts, AnnotationShootIgnoreAlertsDeprecated) -} - -func getDeprecatedAnnotation(annotations map[string]string, annotationKey, deprecatedAnnotationKey string) (string, bool) { - val, ok := annotations[annotationKey] - if !ok { - val, ok = annotations[deprecatedAnnotationKey] - } - - return val, ok -} - // GetShootVPADeploymentNames returns the names of all VPA related deployments related to shoot clusters. func GetShootVPADeploymentNames() []string { return []string{ diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go index 1d85ae43..fc30a75b 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go @@ -16,6 +16,7 @@ package v1beta1 import ( "math" + "time" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" "github.com/gardener/gardener/pkg/utils" @@ -24,6 +25,7 @@ import ( corev1 "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/utils/pointer" @@ -117,20 +119,6 @@ func SetDefaults_Seed(obj *Seed) { if obj.Spec.Settings.VerticalPodAutoscaler == nil { obj.Spec.Settings.VerticalPodAutoscaler = &SeedSettingVerticalPodAutoscaler{Enabled: true} } - - // TODO: remove taints removal in version >=1.13 - taintsToRemove := []string{ - "seed.gardener.cloud/disable-capacity-reservation", - "seed.gardener.cloud/disable-dns", - "seed.gardener.cloud/invisible", - } - for _, taint := range taintsToRemove { - for i := len(obj.Spec.Taints) - 1; i >= 0; i-- { - if obj.Spec.Taints[i].Key == taint { - obj.Spec.Taints = append(obj.Spec.Taints[:i], obj.Spec.Taints[i+1:]...) - } - } - } } // SetDefaults_Shoot sets default values for Shoot objects. @@ -153,6 +141,15 @@ func SetDefaults_Shoot(obj *Shoot) { obj.Spec.Kubernetes.KubeAPIServer.EnableBasicAuthentication = pointer.BoolPtr(false) } } + if obj.Spec.Kubernetes.KubeAPIServer.Requests == nil { + obj.Spec.Kubernetes.KubeAPIServer.Requests = &KubeAPIServerRequests{} + } + if obj.Spec.Kubernetes.KubeAPIServer.Requests.MaxNonMutatingInflight == nil { + obj.Spec.Kubernetes.KubeAPIServer.Requests.MaxNonMutatingInflight = pointer.Int32Ptr(400) + } + if obj.Spec.Kubernetes.KubeAPIServer.Requests.MaxMutatingInflight == nil { + obj.Spec.Kubernetes.KubeAPIServer.Requests.MaxMutatingInflight = pointer.Int32Ptr(200) + } if obj.Spec.Kubernetes.KubeControllerManager == nil { obj.Spec.Kubernetes.KubeControllerManager = &KubeControllerManagerConfig{} @@ -160,6 +157,9 @@ func SetDefaults_Shoot(obj *Shoot) { if obj.Spec.Kubernetes.KubeControllerManager.NodeCIDRMaskSize == nil { obj.Spec.Kubernetes.KubeControllerManager.NodeCIDRMaskSize = calculateDefaultNodeCIDRMaskSize(obj.Spec.Kubernetes.Kubelet, obj.Spec.Provider.Workers) } + if obj.Spec.Kubernetes.KubeControllerManager.PodEvictionTimeout == nil { + obj.Spec.Kubernetes.KubeControllerManager.PodEvictionTimeout = &metav1.Duration{Duration: 2 * time.Minute} + } if obj.Spec.Kubernetes.KubeProxy == nil { obj.Spec.Kubernetes.KubeProxy = &KubeProxyConfig{} 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 3f65ca5a..8f09d53e 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 @@ -1,5 +1,5 @@ /* -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 +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. @@ -1313,10 +1313,66 @@ func (m *HorizontalPodAutoscalerConfig) XXX_DiscardUnknown() { var xxx_messageInfo_HorizontalPodAutoscalerConfig proto.InternalMessageInfo +func (m *Ingress) Reset() { *m = Ingress{} } +func (*Ingress) ProtoMessage() {} +func (*Ingress) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{45} +} +func (m *Ingress) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Ingress) 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 *Ingress) XXX_Merge(src proto.Message) { + xxx_messageInfo_Ingress.Merge(m, src) +} +func (m *Ingress) XXX_Size() int { + return m.Size() +} +func (m *Ingress) XXX_DiscardUnknown() { + xxx_messageInfo_Ingress.DiscardUnknown(m) +} + +var xxx_messageInfo_Ingress proto.InternalMessageInfo + +func (m *IngressController) Reset() { *m = IngressController{} } +func (*IngressController) ProtoMessage() {} +func (*IngressController) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{46} +} +func (m *IngressController) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IngressController) 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 *IngressController) XXX_Merge(src proto.Message) { + xxx_messageInfo_IngressController.Merge(m, src) +} +func (m *IngressController) XXX_Size() int { + return m.Size() +} +func (m *IngressController) XXX_DiscardUnknown() { + xxx_messageInfo_IngressController.DiscardUnknown(m) +} + +var xxx_messageInfo_IngressController proto.InternalMessageInfo + func (m *KubeAPIServerConfig) Reset() { *m = KubeAPIServerConfig{} } func (*KubeAPIServerConfig) ProtoMessage() {} func (*KubeAPIServerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{45} + return fileDescriptor_ca37af0df9a5bbd2, []int{47} } func (m *KubeAPIServerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1341,10 +1397,38 @@ func (m *KubeAPIServerConfig) XXX_DiscardUnknown() { var xxx_messageInfo_KubeAPIServerConfig proto.InternalMessageInfo +func (m *KubeAPIServerRequests) Reset() { *m = KubeAPIServerRequests{} } +func (*KubeAPIServerRequests) ProtoMessage() {} +func (*KubeAPIServerRequests) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{48} +} +func (m *KubeAPIServerRequests) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *KubeAPIServerRequests) 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 *KubeAPIServerRequests) XXX_Merge(src proto.Message) { + xxx_messageInfo_KubeAPIServerRequests.Merge(m, src) +} +func (m *KubeAPIServerRequests) XXX_Size() int { + return m.Size() +} +func (m *KubeAPIServerRequests) XXX_DiscardUnknown() { + xxx_messageInfo_KubeAPIServerRequests.DiscardUnknown(m) +} + +var xxx_messageInfo_KubeAPIServerRequests proto.InternalMessageInfo + func (m *KubeControllerManagerConfig) Reset() { *m = KubeControllerManagerConfig{} } func (*KubeControllerManagerConfig) ProtoMessage() {} func (*KubeControllerManagerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{46} + return fileDescriptor_ca37af0df9a5bbd2, []int{49} } func (m *KubeControllerManagerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1372,7 +1456,7 @@ var xxx_messageInfo_KubeControllerManagerConfig proto.InternalMessageInfo func (m *KubeProxyConfig) Reset() { *m = KubeProxyConfig{} } func (*KubeProxyConfig) ProtoMessage() {} func (*KubeProxyConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{47} + return fileDescriptor_ca37af0df9a5bbd2, []int{50} } func (m *KubeProxyConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1400,7 +1484,7 @@ var xxx_messageInfo_KubeProxyConfig proto.InternalMessageInfo func (m *KubeSchedulerConfig) Reset() { *m = KubeSchedulerConfig{} } func (*KubeSchedulerConfig) ProtoMessage() {} func (*KubeSchedulerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{48} + return fileDescriptor_ca37af0df9a5bbd2, []int{51} } func (m *KubeSchedulerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1428,7 +1512,7 @@ var xxx_messageInfo_KubeSchedulerConfig proto.InternalMessageInfo func (m *KubeletConfig) Reset() { *m = KubeletConfig{} } func (*KubeletConfig) ProtoMessage() {} func (*KubeletConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{49} + return fileDescriptor_ca37af0df9a5bbd2, []int{52} } func (m *KubeletConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1456,7 +1540,7 @@ var xxx_messageInfo_KubeletConfig proto.InternalMessageInfo func (m *KubeletConfigEviction) Reset() { *m = KubeletConfigEviction{} } func (*KubeletConfigEviction) ProtoMessage() {} func (*KubeletConfigEviction) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{50} + return fileDescriptor_ca37af0df9a5bbd2, []int{53} } func (m *KubeletConfigEviction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1484,7 +1568,7 @@ var xxx_messageInfo_KubeletConfigEviction proto.InternalMessageInfo func (m *KubeletConfigEvictionMinimumReclaim) Reset() { *m = KubeletConfigEvictionMinimumReclaim{} } func (*KubeletConfigEvictionMinimumReclaim) ProtoMessage() {} func (*KubeletConfigEvictionMinimumReclaim) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{51} + return fileDescriptor_ca37af0df9a5bbd2, []int{54} } func (m *KubeletConfigEvictionMinimumReclaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1512,7 +1596,7 @@ var xxx_messageInfo_KubeletConfigEvictionMinimumReclaim proto.InternalMessageInf func (m *KubeletConfigEvictionSoftGracePeriod) Reset() { *m = KubeletConfigEvictionSoftGracePeriod{} } func (*KubeletConfigEvictionSoftGracePeriod) ProtoMessage() {} func (*KubeletConfigEvictionSoftGracePeriod) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{52} + return fileDescriptor_ca37af0df9a5bbd2, []int{55} } func (m *KubeletConfigEvictionSoftGracePeriod) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1540,7 +1624,7 @@ var xxx_messageInfo_KubeletConfigEvictionSoftGracePeriod proto.InternalMessageIn func (m *KubeletConfigReserved) Reset() { *m = KubeletConfigReserved{} } func (*KubeletConfigReserved) ProtoMessage() {} func (*KubeletConfigReserved) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{53} + return fileDescriptor_ca37af0df9a5bbd2, []int{56} } func (m *KubeletConfigReserved) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1568,7 +1652,7 @@ var xxx_messageInfo_KubeletConfigReserved proto.InternalMessageInfo func (m *Kubernetes) Reset() { *m = Kubernetes{} } func (*Kubernetes) ProtoMessage() {} func (*Kubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{54} + return fileDescriptor_ca37af0df9a5bbd2, []int{57} } func (m *Kubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1596,7 +1680,7 @@ var xxx_messageInfo_Kubernetes proto.InternalMessageInfo func (m *KubernetesConfig) Reset() { *m = KubernetesConfig{} } func (*KubernetesConfig) ProtoMessage() {} func (*KubernetesConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{55} + return fileDescriptor_ca37af0df9a5bbd2, []int{58} } func (m *KubernetesConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1624,7 +1708,7 @@ var xxx_messageInfo_KubernetesConfig proto.InternalMessageInfo func (m *KubernetesDashboard) Reset() { *m = KubernetesDashboard{} } func (*KubernetesDashboard) ProtoMessage() {} func (*KubernetesDashboard) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{56} + return fileDescriptor_ca37af0df9a5bbd2, []int{59} } func (m *KubernetesDashboard) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1652,7 +1736,7 @@ var xxx_messageInfo_KubernetesDashboard proto.InternalMessageInfo func (m *KubernetesInfo) Reset() { *m = KubernetesInfo{} } func (*KubernetesInfo) ProtoMessage() {} func (*KubernetesInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{57} + return fileDescriptor_ca37af0df9a5bbd2, []int{60} } func (m *KubernetesInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1680,7 +1764,7 @@ var xxx_messageInfo_KubernetesInfo proto.InternalMessageInfo func (m *KubernetesSettings) Reset() { *m = KubernetesSettings{} } func (*KubernetesSettings) ProtoMessage() {} func (*KubernetesSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{58} + return fileDescriptor_ca37af0df9a5bbd2, []int{61} } func (m *KubernetesSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1708,7 +1792,7 @@ var xxx_messageInfo_KubernetesSettings proto.InternalMessageInfo func (m *LastError) Reset() { *m = LastError{} } func (*LastError) ProtoMessage() {} func (*LastError) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{59} + return fileDescriptor_ca37af0df9a5bbd2, []int{62} } func (m *LastError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1736,7 +1820,7 @@ var xxx_messageInfo_LastError proto.InternalMessageInfo func (m *LastOperation) Reset() { *m = LastOperation{} } func (*LastOperation) ProtoMessage() {} func (*LastOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{60} + return fileDescriptor_ca37af0df9a5bbd2, []int{63} } func (m *LastOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1764,7 +1848,7 @@ var xxx_messageInfo_LastOperation proto.InternalMessageInfo func (m *Machine) Reset() { *m = Machine{} } func (*Machine) ProtoMessage() {} func (*Machine) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{61} + return fileDescriptor_ca37af0df9a5bbd2, []int{64} } func (m *Machine) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1792,7 +1876,7 @@ var xxx_messageInfo_Machine proto.InternalMessageInfo func (m *MachineControllerManagerSettings) Reset() { *m = MachineControllerManagerSettings{} } func (*MachineControllerManagerSettings) ProtoMessage() {} func (*MachineControllerManagerSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{62} + return fileDescriptor_ca37af0df9a5bbd2, []int{65} } func (m *MachineControllerManagerSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1820,7 +1904,7 @@ var xxx_messageInfo_MachineControllerManagerSettings proto.InternalMessageInfo func (m *MachineImage) Reset() { *m = MachineImage{} } func (*MachineImage) ProtoMessage() {} func (*MachineImage) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{63} + return fileDescriptor_ca37af0df9a5bbd2, []int{66} } func (m *MachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1848,7 +1932,7 @@ var xxx_messageInfo_MachineImage proto.InternalMessageInfo func (m *MachineImageVersion) Reset() { *m = MachineImageVersion{} } func (*MachineImageVersion) ProtoMessage() {} func (*MachineImageVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{64} + return fileDescriptor_ca37af0df9a5bbd2, []int{67} } func (m *MachineImageVersion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1876,7 +1960,7 @@ var xxx_messageInfo_MachineImageVersion proto.InternalMessageInfo func (m *MachineType) Reset() { *m = MachineType{} } func (*MachineType) ProtoMessage() {} func (*MachineType) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{65} + return fileDescriptor_ca37af0df9a5bbd2, []int{68} } func (m *MachineType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1904,7 +1988,7 @@ var xxx_messageInfo_MachineType proto.InternalMessageInfo func (m *MachineTypeStorage) Reset() { *m = MachineTypeStorage{} } func (*MachineTypeStorage) ProtoMessage() {} func (*MachineTypeStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{66} + return fileDescriptor_ca37af0df9a5bbd2, []int{69} } func (m *MachineTypeStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1932,7 +2016,7 @@ var xxx_messageInfo_MachineTypeStorage proto.InternalMessageInfo func (m *Maintenance) Reset() { *m = Maintenance{} } func (*Maintenance) ProtoMessage() {} func (*Maintenance) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{67} + return fileDescriptor_ca37af0df9a5bbd2, []int{70} } func (m *Maintenance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1960,7 +2044,7 @@ var xxx_messageInfo_Maintenance proto.InternalMessageInfo func (m *MaintenanceAutoUpdate) Reset() { *m = MaintenanceAutoUpdate{} } func (*MaintenanceAutoUpdate) ProtoMessage() {} func (*MaintenanceAutoUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{68} + return fileDescriptor_ca37af0df9a5bbd2, []int{71} } func (m *MaintenanceAutoUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1988,7 +2072,7 @@ var xxx_messageInfo_MaintenanceAutoUpdate proto.InternalMessageInfo func (m *MaintenanceTimeWindow) Reset() { *m = MaintenanceTimeWindow{} } func (*MaintenanceTimeWindow) ProtoMessage() {} func (*MaintenanceTimeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{69} + return fileDescriptor_ca37af0df9a5bbd2, []int{72} } func (m *MaintenanceTimeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2016,7 +2100,7 @@ var xxx_messageInfo_MaintenanceTimeWindow proto.InternalMessageInfo func (m *Monitoring) Reset() { *m = Monitoring{} } func (*Monitoring) ProtoMessage() {} func (*Monitoring) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{70} + return fileDescriptor_ca37af0df9a5bbd2, []int{73} } func (m *Monitoring) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2044,7 +2128,7 @@ var xxx_messageInfo_Monitoring proto.InternalMessageInfo func (m *NamedResourceReference) Reset() { *m = NamedResourceReference{} } func (*NamedResourceReference) ProtoMessage() {} func (*NamedResourceReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{71} + return fileDescriptor_ca37af0df9a5bbd2, []int{74} } func (m *NamedResourceReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2072,7 +2156,7 @@ var xxx_messageInfo_NamedResourceReference proto.InternalMessageInfo func (m *Networking) Reset() { *m = Networking{} } func (*Networking) ProtoMessage() {} func (*Networking) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{72} + return fileDescriptor_ca37af0df9a5bbd2, []int{75} } func (m *Networking) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2100,7 +2184,7 @@ var xxx_messageInfo_Networking proto.InternalMessageInfo func (m *NginxIngress) Reset() { *m = NginxIngress{} } func (*NginxIngress) ProtoMessage() {} func (*NginxIngress) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{73} + return fileDescriptor_ca37af0df9a5bbd2, []int{76} } func (m *NginxIngress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2128,7 +2212,7 @@ var xxx_messageInfo_NginxIngress proto.InternalMessageInfo func (m *OIDCConfig) Reset() { *m = OIDCConfig{} } func (*OIDCConfig) ProtoMessage() {} func (*OIDCConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{74} + return fileDescriptor_ca37af0df9a5bbd2, []int{77} } func (m *OIDCConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2156,7 +2240,7 @@ var xxx_messageInfo_OIDCConfig proto.InternalMessageInfo func (m *OpenIDConnectClientAuthentication) Reset() { *m = OpenIDConnectClientAuthentication{} } func (*OpenIDConnectClientAuthentication) ProtoMessage() {} func (*OpenIDConnectClientAuthentication) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{75} + return fileDescriptor_ca37af0df9a5bbd2, []int{78} } func (m *OpenIDConnectClientAuthentication) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2184,7 +2268,7 @@ var xxx_messageInfo_OpenIDConnectClientAuthentication proto.InternalMessageInfo func (m *Plant) Reset() { *m = Plant{} } func (*Plant) ProtoMessage() {} func (*Plant) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{76} + return fileDescriptor_ca37af0df9a5bbd2, []int{79} } func (m *Plant) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2212,7 +2296,7 @@ var xxx_messageInfo_Plant proto.InternalMessageInfo func (m *PlantList) Reset() { *m = PlantList{} } func (*PlantList) ProtoMessage() {} func (*PlantList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{77} + return fileDescriptor_ca37af0df9a5bbd2, []int{80} } func (m *PlantList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2240,7 +2324,7 @@ var xxx_messageInfo_PlantList proto.InternalMessageInfo func (m *PlantSpec) Reset() { *m = PlantSpec{} } func (*PlantSpec) ProtoMessage() {} func (*PlantSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{78} + return fileDescriptor_ca37af0df9a5bbd2, []int{81} } func (m *PlantSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2268,7 +2352,7 @@ var xxx_messageInfo_PlantSpec proto.InternalMessageInfo func (m *PlantStatus) Reset() { *m = PlantStatus{} } func (*PlantStatus) ProtoMessage() {} func (*PlantStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{79} + return fileDescriptor_ca37af0df9a5bbd2, []int{82} } func (m *PlantStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2296,7 +2380,7 @@ var xxx_messageInfo_PlantStatus proto.InternalMessageInfo func (m *Project) Reset() { *m = Project{} } func (*Project) ProtoMessage() {} func (*Project) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{80} + return fileDescriptor_ca37af0df9a5bbd2, []int{83} } func (m *Project) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2324,7 +2408,7 @@ var xxx_messageInfo_Project proto.InternalMessageInfo func (m *ProjectList) Reset() { *m = ProjectList{} } func (*ProjectList) ProtoMessage() {} func (*ProjectList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{81} + return fileDescriptor_ca37af0df9a5bbd2, []int{84} } func (m *ProjectList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2352,7 +2436,7 @@ var xxx_messageInfo_ProjectList proto.InternalMessageInfo func (m *ProjectMember) Reset() { *m = ProjectMember{} } func (*ProjectMember) ProtoMessage() {} func (*ProjectMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{82} + return fileDescriptor_ca37af0df9a5bbd2, []int{85} } func (m *ProjectMember) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2380,7 +2464,7 @@ var xxx_messageInfo_ProjectMember proto.InternalMessageInfo func (m *ProjectSpec) Reset() { *m = ProjectSpec{} } func (*ProjectSpec) ProtoMessage() {} func (*ProjectSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{83} + return fileDescriptor_ca37af0df9a5bbd2, []int{86} } func (m *ProjectSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2408,7 +2492,7 @@ var xxx_messageInfo_ProjectSpec proto.InternalMessageInfo func (m *ProjectStatus) Reset() { *m = ProjectStatus{} } func (*ProjectStatus) ProtoMessage() {} func (*ProjectStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{84} + return fileDescriptor_ca37af0df9a5bbd2, []int{87} } func (m *ProjectStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2436,7 +2520,7 @@ var xxx_messageInfo_ProjectStatus proto.InternalMessageInfo func (m *ProjectTolerations) Reset() { *m = ProjectTolerations{} } func (*ProjectTolerations) ProtoMessage() {} func (*ProjectTolerations) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{85} + return fileDescriptor_ca37af0df9a5bbd2, []int{88} } func (m *ProjectTolerations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2464,7 +2548,7 @@ var xxx_messageInfo_ProjectTolerations proto.InternalMessageInfo func (m *Provider) Reset() { *m = Provider{} } func (*Provider) ProtoMessage() {} func (*Provider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{86} + return fileDescriptor_ca37af0df9a5bbd2, []int{89} } func (m *Provider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2492,7 +2576,7 @@ var xxx_messageInfo_Provider proto.InternalMessageInfo func (m *Quota) Reset() { *m = Quota{} } func (*Quota) ProtoMessage() {} func (*Quota) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{87} + return fileDescriptor_ca37af0df9a5bbd2, []int{90} } func (m *Quota) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2520,7 +2604,7 @@ var xxx_messageInfo_Quota proto.InternalMessageInfo func (m *QuotaList) Reset() { *m = QuotaList{} } func (*QuotaList) ProtoMessage() {} func (*QuotaList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{88} + return fileDescriptor_ca37af0df9a5bbd2, []int{91} } func (m *QuotaList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2548,7 +2632,7 @@ var xxx_messageInfo_QuotaList proto.InternalMessageInfo func (m *QuotaSpec) Reset() { *m = QuotaSpec{} } func (*QuotaSpec) ProtoMessage() {} func (*QuotaSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{89} + return fileDescriptor_ca37af0df9a5bbd2, []int{92} } func (m *QuotaSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2576,7 +2660,7 @@ var xxx_messageInfo_QuotaSpec proto.InternalMessageInfo func (m *Region) Reset() { *m = Region{} } func (*Region) ProtoMessage() {} func (*Region) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{90} + return fileDescriptor_ca37af0df9a5bbd2, []int{93} } func (m *Region) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2604,7 +2688,7 @@ var xxx_messageInfo_Region proto.InternalMessageInfo func (m *ResourceWatchCacheSize) Reset() { *m = ResourceWatchCacheSize{} } func (*ResourceWatchCacheSize) ProtoMessage() {} func (*ResourceWatchCacheSize) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{91} + return fileDescriptor_ca37af0df9a5bbd2, []int{94} } func (m *ResourceWatchCacheSize) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2632,7 +2716,7 @@ var xxx_messageInfo_ResourceWatchCacheSize proto.InternalMessageInfo func (m *SecretBinding) Reset() { *m = SecretBinding{} } func (*SecretBinding) ProtoMessage() {} func (*SecretBinding) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{92} + return fileDescriptor_ca37af0df9a5bbd2, []int{95} } func (m *SecretBinding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2660,7 +2744,7 @@ var xxx_messageInfo_SecretBinding proto.InternalMessageInfo func (m *SecretBindingList) Reset() { *m = SecretBindingList{} } func (*SecretBindingList) ProtoMessage() {} func (*SecretBindingList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{93} + return fileDescriptor_ca37af0df9a5bbd2, []int{96} } func (m *SecretBindingList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2688,7 +2772,7 @@ var xxx_messageInfo_SecretBindingList proto.InternalMessageInfo func (m *Seed) Reset() { *m = Seed{} } func (*Seed) ProtoMessage() {} func (*Seed) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{94} + return fileDescriptor_ca37af0df9a5bbd2, []int{97} } func (m *Seed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2716,7 +2800,7 @@ var xxx_messageInfo_Seed proto.InternalMessageInfo func (m *SeedBackup) Reset() { *m = SeedBackup{} } func (*SeedBackup) ProtoMessage() {} func (*SeedBackup) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{95} + return fileDescriptor_ca37af0df9a5bbd2, []int{98} } func (m *SeedBackup) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2744,7 +2828,7 @@ var xxx_messageInfo_SeedBackup proto.InternalMessageInfo func (m *SeedDNS) Reset() { *m = SeedDNS{} } func (*SeedDNS) ProtoMessage() {} func (*SeedDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{96} + return fileDescriptor_ca37af0df9a5bbd2, []int{99} } func (m *SeedDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2769,10 +2853,38 @@ func (m *SeedDNS) XXX_DiscardUnknown() { var xxx_messageInfo_SeedDNS proto.InternalMessageInfo +func (m *SeedDNSProvider) Reset() { *m = SeedDNSProvider{} } +func (*SeedDNSProvider) ProtoMessage() {} +func (*SeedDNSProvider) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{100} +} +func (m *SeedDNSProvider) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SeedDNSProvider) 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 *SeedDNSProvider) XXX_Merge(src proto.Message) { + xxx_messageInfo_SeedDNSProvider.Merge(m, src) +} +func (m *SeedDNSProvider) XXX_Size() int { + return m.Size() +} +func (m *SeedDNSProvider) XXX_DiscardUnknown() { + xxx_messageInfo_SeedDNSProvider.DiscardUnknown(m) +} + +var xxx_messageInfo_SeedDNSProvider proto.InternalMessageInfo + func (m *SeedList) Reset() { *m = SeedList{} } func (*SeedList) ProtoMessage() {} func (*SeedList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{97} + return fileDescriptor_ca37af0df9a5bbd2, []int{101} } func (m *SeedList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2800,7 +2912,7 @@ var xxx_messageInfo_SeedList proto.InternalMessageInfo func (m *SeedNetworks) Reset() { *m = SeedNetworks{} } func (*SeedNetworks) ProtoMessage() {} func (*SeedNetworks) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{98} + return fileDescriptor_ca37af0df9a5bbd2, []int{102} } func (m *SeedNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2828,7 +2940,7 @@ var xxx_messageInfo_SeedNetworks proto.InternalMessageInfo func (m *SeedProvider) Reset() { *m = SeedProvider{} } func (*SeedProvider) ProtoMessage() {} func (*SeedProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{99} + return fileDescriptor_ca37af0df9a5bbd2, []int{103} } func (m *SeedProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2856,7 +2968,7 @@ var xxx_messageInfo_SeedProvider proto.InternalMessageInfo func (m *SeedSelector) Reset() { *m = SeedSelector{} } func (*SeedSelector) ProtoMessage() {} func (*SeedSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{100} + return fileDescriptor_ca37af0df9a5bbd2, []int{104} } func (m *SeedSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2884,7 +2996,7 @@ var xxx_messageInfo_SeedSelector proto.InternalMessageInfo func (m *SeedSettingExcessCapacityReservation) Reset() { *m = SeedSettingExcessCapacityReservation{} } func (*SeedSettingExcessCapacityReservation) ProtoMessage() {} func (*SeedSettingExcessCapacityReservation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{101} + return fileDescriptor_ca37af0df9a5bbd2, []int{105} } func (m *SeedSettingExcessCapacityReservation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2912,7 +3024,7 @@ var xxx_messageInfo_SeedSettingExcessCapacityReservation proto.InternalMessageIn func (m *SeedSettingLoadBalancerServices) Reset() { *m = SeedSettingLoadBalancerServices{} } func (*SeedSettingLoadBalancerServices) ProtoMessage() {} func (*SeedSettingLoadBalancerServices) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{102} + return fileDescriptor_ca37af0df9a5bbd2, []int{106} } func (m *SeedSettingLoadBalancerServices) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2940,7 +3052,7 @@ var xxx_messageInfo_SeedSettingLoadBalancerServices proto.InternalMessageInfo func (m *SeedSettingScheduling) Reset() { *m = SeedSettingScheduling{} } func (*SeedSettingScheduling) ProtoMessage() {} func (*SeedSettingScheduling) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{103} + return fileDescriptor_ca37af0df9a5bbd2, []int{107} } func (m *SeedSettingScheduling) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2968,7 +3080,7 @@ var xxx_messageInfo_SeedSettingScheduling proto.InternalMessageInfo func (m *SeedSettingShootDNS) Reset() { *m = SeedSettingShootDNS{} } func (*SeedSettingShootDNS) ProtoMessage() {} func (*SeedSettingShootDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{104} + return fileDescriptor_ca37af0df9a5bbd2, []int{108} } func (m *SeedSettingShootDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2996,7 +3108,7 @@ var xxx_messageInfo_SeedSettingShootDNS proto.InternalMessageInfo func (m *SeedSettingVerticalPodAutoscaler) Reset() { *m = SeedSettingVerticalPodAutoscaler{} } func (*SeedSettingVerticalPodAutoscaler) ProtoMessage() {} func (*SeedSettingVerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{105} + return fileDescriptor_ca37af0df9a5bbd2, []int{109} } func (m *SeedSettingVerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3024,7 +3136,7 @@ var xxx_messageInfo_SeedSettingVerticalPodAutoscaler proto.InternalMessageInfo func (m *SeedSettings) Reset() { *m = SeedSettings{} } func (*SeedSettings) ProtoMessage() {} func (*SeedSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{106} + return fileDescriptor_ca37af0df9a5bbd2, []int{110} } func (m *SeedSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3052,7 +3164,7 @@ var xxx_messageInfo_SeedSettings proto.InternalMessageInfo func (m *SeedSpec) Reset() { *m = SeedSpec{} } func (*SeedSpec) ProtoMessage() {} func (*SeedSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{107} + return fileDescriptor_ca37af0df9a5bbd2, []int{111} } func (m *SeedSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3080,7 +3192,7 @@ var xxx_messageInfo_SeedSpec proto.InternalMessageInfo func (m *SeedStatus) Reset() { *m = SeedStatus{} } func (*SeedStatus) ProtoMessage() {} func (*SeedStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{108} + return fileDescriptor_ca37af0df9a5bbd2, []int{112} } func (m *SeedStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3108,7 +3220,7 @@ var xxx_messageInfo_SeedStatus proto.InternalMessageInfo func (m *SeedTaint) Reset() { *m = SeedTaint{} } func (*SeedTaint) ProtoMessage() {} func (*SeedTaint) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{109} + return fileDescriptor_ca37af0df9a5bbd2, []int{113} } func (m *SeedTaint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3136,7 +3248,7 @@ var xxx_messageInfo_SeedTaint proto.InternalMessageInfo func (m *SeedVolume) Reset() { *m = SeedVolume{} } func (*SeedVolume) ProtoMessage() {} func (*SeedVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{110} + return fileDescriptor_ca37af0df9a5bbd2, []int{114} } func (m *SeedVolume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3164,7 +3276,7 @@ var xxx_messageInfo_SeedVolume proto.InternalMessageInfo func (m *SeedVolumeProvider) Reset() { *m = SeedVolumeProvider{} } func (*SeedVolumeProvider) ProtoMessage() {} func (*SeedVolumeProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{111} + return fileDescriptor_ca37af0df9a5bbd2, []int{115} } func (m *SeedVolumeProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3192,7 +3304,7 @@ var xxx_messageInfo_SeedVolumeProvider proto.InternalMessageInfo func (m *ServiceAccountConfig) Reset() { *m = ServiceAccountConfig{} } func (*ServiceAccountConfig) ProtoMessage() {} func (*ServiceAccountConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{112} + return fileDescriptor_ca37af0df9a5bbd2, []int{116} } func (m *ServiceAccountConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3220,7 +3332,7 @@ var xxx_messageInfo_ServiceAccountConfig proto.InternalMessageInfo func (m *Shoot) Reset() { *m = Shoot{} } func (*Shoot) ProtoMessage() {} func (*Shoot) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{113} + return fileDescriptor_ca37af0df9a5bbd2, []int{117} } func (m *Shoot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3248,7 +3360,7 @@ var xxx_messageInfo_Shoot proto.InternalMessageInfo func (m *ShootList) Reset() { *m = ShootList{} } func (*ShootList) ProtoMessage() {} func (*ShootList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{114} + return fileDescriptor_ca37af0df9a5bbd2, []int{118} } func (m *ShootList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3276,7 +3388,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{115} + return fileDescriptor_ca37af0df9a5bbd2, []int{119} } func (m *ShootMachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3304,7 +3416,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{116} + return fileDescriptor_ca37af0df9a5bbd2, []int{120} } func (m *ShootNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3332,7 +3444,7 @@ var xxx_messageInfo_ShootNetworks proto.InternalMessageInfo func (m *ShootSpec) Reset() { *m = ShootSpec{} } func (*ShootSpec) ProtoMessage() {} func (*ShootSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{117} + return fileDescriptor_ca37af0df9a5bbd2, []int{121} } func (m *ShootSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3360,7 +3472,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{118} + return fileDescriptor_ca37af0df9a5bbd2, []int{122} } func (m *ShootStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3388,7 +3500,7 @@ var xxx_messageInfo_ShootStatus proto.InternalMessageInfo func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} func (*Toleration) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{119} + return fileDescriptor_ca37af0df9a5bbd2, []int{123} } func (m *Toleration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3416,7 +3528,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{120} + return fileDescriptor_ca37af0df9a5bbd2, []int{124} } func (m *VerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3444,7 +3556,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{121} + return fileDescriptor_ca37af0df9a5bbd2, []int{125} } func (m *Volume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3472,7 +3584,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{122} + return fileDescriptor_ca37af0df9a5bbd2, []int{126} } func (m *VolumeType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3500,7 +3612,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{123} + return fileDescriptor_ca37af0df9a5bbd2, []int{127} } func (m *WatchCacheSizes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3528,7 +3640,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{124} + return fileDescriptor_ca37af0df9a5bbd2, []int{128} } func (m *Worker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3556,7 +3668,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{125} + return fileDescriptor_ca37af0df9a5bbd2, []int{129} } func (m *WorkerKubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3584,7 +3696,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{126} + return fileDescriptor_ca37af0df9a5bbd2, []int{130} } func (m *WorkerSystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3655,8 +3767,11 @@ func init() { proto.RegisterType((*Hibernation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.Hibernation") proto.RegisterType((*HibernationSchedule)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.HibernationSchedule") proto.RegisterType((*HorizontalPodAutoscalerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.HorizontalPodAutoscalerConfig") + proto.RegisterType((*Ingress)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.Ingress") + proto.RegisterType((*IngressController)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.IngressController") proto.RegisterType((*KubeAPIServerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeAPIServerConfig") proto.RegisterMapType((map[string]bool)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeAPIServerConfig.RuntimeConfigEntry") + proto.RegisterType((*KubeAPIServerRequests)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeAPIServerRequests") proto.RegisterType((*KubeControllerManagerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeControllerManagerConfig") proto.RegisterType((*KubeProxyConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeProxyConfig") proto.RegisterType((*KubeSchedulerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeSchedulerConfig") @@ -3714,6 +3829,7 @@ func init() { proto.RegisterType((*Seed)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.Seed") proto.RegisterType((*SeedBackup)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedBackup") proto.RegisterType((*SeedDNS)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedDNS") + proto.RegisterType((*SeedDNSProvider)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedDNSProvider") proto.RegisterType((*SeedList)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedList") proto.RegisterType((*SeedNetworks)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedNetworks") proto.RegisterType((*SeedProvider)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedProvider") @@ -3727,6 +3843,8 @@ func init() { proto.RegisterType((*SeedSettings)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedSettings") proto.RegisterType((*SeedSpec)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedSpec") proto.RegisterType((*SeedStatus)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedStatus") + proto.RegisterMapType((k8s_io_api_core_v1.ResourceList)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedStatus.AllocatableEntry") + proto.RegisterMapType((k8s_io_api_core_v1.ResourceList)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedStatus.CapacityEntry") proto.RegisterType((*SeedTaint)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedTaint") proto.RegisterType((*SeedVolume)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedVolume") proto.RegisterType((*SeedVolumeProvider)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedVolumeProvider") @@ -3754,541 +3872,561 @@ func init() { } var fileDescriptor_ca37af0df9a5bbd2 = []byte{ - // 8544 bytes of a gzipped FileDescriptorProto + // 8855 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x7d, 0x6d, 0x8c, 0x24, 0xc7, - 0x75, 0x18, 0x7b, 0xf6, 0x6b, 0xe6, 0xcd, 0xee, 0xde, 0x6e, 0xdd, 0x07, 0x97, 0x4b, 0xf2, 0xe6, - 0xd4, 0x12, 0x0d, 0x32, 0x92, 0xf6, 0x4c, 0x4a, 0x32, 0x45, 0x52, 0x14, 0xb9, 0x33, 0xb3, 0x7b, - 0x37, 0xba, 0xdb, 0xbb, 0x61, 0xcd, 0x2d, 0x29, 0xd3, 0x09, 0xa3, 0xde, 0xee, 0xda, 0xd9, 0xe6, - 0xf6, 0x74, 0x0f, 0xbb, 0x7b, 0xf6, 0x76, 0x4f, 0x0e, 0xa4, 0x08, 0x91, 0x9d, 0x0f, 0xc7, 0x31, - 0x9c, 0x38, 0x42, 0xac, 0x18, 0xb2, 0x11, 0x04, 0x46, 0x60, 0x40, 0x36, 0xe0, 0x28, 0x1f, 0x48, - 0x02, 0x04, 0x36, 0x02, 0xc9, 0x06, 0x02, 0x08, 0x41, 0x84, 0x30, 0x48, 0x3c, 0x8e, 0x36, 0x80, - 0x90, 0x20, 0xf9, 0x67, 0xe4, 0xcf, 0xc1, 0x40, 0x8c, 0xfa, 0xe8, 0xea, 0xea, 0x9e, 0xee, 0xfd, - 0xe8, 0xd9, 0x5b, 0x92, 0xbf, 0x76, 0xa7, 0x5e, 0xd5, 0x7b, 0xd5, 0x55, 0xaf, 0x5e, 0xbd, 0xf7, - 0xea, 0xd5, 0x2b, 0xa8, 0x77, 0xed, 0x70, 0x67, 0xb0, 0xb5, 0x62, 0x7a, 0xbd, 0xeb, 0x5d, 0xc3, - 0xb7, 0x88, 0x4b, 0xfc, 0xf8, 0x9f, 0xfe, 0x6e, 0xf7, 0xba, 0xd1, 0xb7, 0x83, 0xeb, 0xa6, 0xe7, - 0x93, 0xeb, 0x7b, 0xcf, 0x6f, 0x91, 0xd0, 0x78, 0xfe, 0x7a, 0x97, 0xc2, 0x8c, 0x90, 0x58, 0x2b, - 0x7d, 0xdf, 0x0b, 0x3d, 0xf4, 0x42, 0x8c, 0x63, 0x25, 0x6a, 0x1a, 0xff, 0xd3, 0xdf, 0xed, 0xae, - 0x50, 0x1c, 0x2b, 0x14, 0xc7, 0x8a, 0xc0, 0xb1, 0xfc, 0x69, 0x95, 0xae, 0xd7, 0xf5, 0xae, 0x33, - 0x54, 0x5b, 0x83, 0x6d, 0xf6, 0x8b, 0xfd, 0x60, 0xff, 0x71, 0x12, 0xcb, 0xcf, 0xed, 0x7e, 0x3e, - 0x58, 0xb1, 0x3d, 0xda, 0x99, 0xeb, 0xc6, 0x20, 0xf4, 0x02, 0xd3, 0x70, 0x6c, 0xb7, 0x7b, 0x7d, - 0x6f, 0xa4, 0x37, 0xcb, 0xba, 0x52, 0x55, 0x74, 0xfb, 0xc8, 0x3a, 0xfe, 0x96, 0x61, 0x66, 0xd5, - 0xf9, 0x6c, 0x5c, 0xa7, 0x67, 0x98, 0x3b, 0xb6, 0x4b, 0xfc, 0x83, 0x68, 0x40, 0xae, 0xfb, 0x24, - 0xf0, 0x06, 0xbe, 0x49, 0x4e, 0xd5, 0x2a, 0xb8, 0xde, 0x23, 0xa1, 0x91, 0x45, 0xeb, 0x7a, 0x5e, - 0x2b, 0x7f, 0xe0, 0x86, 0x76, 0x6f, 0x94, 0xcc, 0xcf, 0x1c, 0xd7, 0x20, 0x30, 0x77, 0x48, 0xcf, - 0x18, 0x69, 0xf7, 0x99, 0xbc, 0x76, 0x83, 0xd0, 0x76, 0xae, 0xdb, 0x6e, 0x18, 0x84, 0x7e, 0xba, - 0x91, 0xfe, 0x02, 0x4c, 0xad, 0x5a, 0x96, 0xe7, 0xa2, 0xe7, 0x60, 0x86, 0xb8, 0xc6, 0x96, 0x43, - 0xac, 0x25, 0xed, 0x9a, 0xf6, 0x6c, 0xb9, 0x7e, 0xe1, 0x07, 0xc3, 0xda, 0x63, 0x87, 0xc3, 0xda, - 0xcc, 0x1a, 0x2f, 0xc6, 0x11, 0x5c, 0xff, 0xb5, 0x12, 0x4c, 0xb3, 0x46, 0x01, 0xfa, 0x55, 0x0d, - 0x2e, 0xee, 0x0e, 0xb6, 0x88, 0xef, 0x92, 0x90, 0x04, 0x4d, 0x23, 0xd8, 0xd9, 0xf2, 0x0c, 0x9f, - 0xa3, 0xa8, 0xbe, 0x70, 0x63, 0xe5, 0xf4, 0xdc, 0xb3, 0x72, 0x6b, 0x14, 0x5d, 0xfd, 0xf1, 0xc3, - 0x61, 0xed, 0x62, 0x06, 0x00, 0x67, 0x11, 0x47, 0x7b, 0x30, 0xeb, 0x76, 0x6d, 0x77, 0xbf, 0xe5, - 0x76, 0x7d, 0x12, 0x04, 0x4b, 0x25, 0xd6, 0x99, 0xd7, 0x8b, 0x74, 0xe6, 0x8e, 0x82, 0xa7, 0xbe, - 0x70, 0x38, 0xac, 0xcd, 0xaa, 0x25, 0x38, 0x41, 0x47, 0xff, 0x05, 0x0d, 0x2e, 0xac, 0x5a, 0x3d, - 0x3b, 0x08, 0x6c, 0xcf, 0x6d, 0x3b, 0x83, 0xae, 0xed, 0xa2, 0x6b, 0x30, 0xe9, 0x1a, 0x3d, 0xc2, - 0x06, 0xa4, 0x52, 0x9f, 0x15, 0x63, 0x3a, 0x79, 0xc7, 0xe8, 0x11, 0xcc, 0x20, 0xe8, 0x0d, 0x98, - 0x36, 0x3d, 0x77, 0xdb, 0xee, 0x8a, 0x7e, 0x7e, 0x7a, 0x85, 0xcf, 0xe3, 0x8a, 0x3a, 0x8f, 0xac, - 0x7b, 0x62, 0xfe, 0x57, 0xb0, 0x71, 0x7f, 0x6d, 0x3f, 0x24, 0x2e, 0x25, 0x53, 0x87, 0xc3, 0x61, - 0x6d, 0xba, 0xc1, 0x10, 0x60, 0x81, 0x48, 0x5f, 0x87, 0xf2, 0xaa, 0x43, 0xfc, 0xd0, 0x76, 0xbb, - 0xe8, 0x65, 0x98, 0x27, 0x3d, 0xc3, 0x76, 0x30, 0x31, 0x89, 0xbd, 0x47, 0xfc, 0x60, 0x49, 0xbb, - 0x36, 0xf1, 0x6c, 0xa5, 0x8e, 0x0e, 0x87, 0xb5, 0xf9, 0xb5, 0x04, 0x04, 0xa7, 0x6a, 0xea, 0x7f, - 0x5d, 0x83, 0xea, 0xea, 0xc0, 0xb2, 0x43, 0x8e, 0x1f, 0xf9, 0x50, 0x35, 0xe8, 0xcf, 0xb6, 0xe7, - 0xd8, 0xe6, 0x81, 0x98, 0xe4, 0xd7, 0x8a, 0x8c, 0xeb, 0x6a, 0x8c, 0xa6, 0x7e, 0xe1, 0x70, 0x58, - 0xab, 0x2a, 0x05, 0x58, 0x25, 0xa2, 0xef, 0x80, 0x0a, 0x43, 0x3f, 0x0b, 0xb3, 0xfc, 0x23, 0x37, - 0x8c, 0x3e, 0x26, 0xdb, 0xa2, 0x0f, 0x1f, 0x57, 0xc6, 0x2c, 0x22, 0xb4, 0x72, 0x77, 0xeb, 0x5d, - 0x62, 0x86, 0x98, 0x6c, 0x13, 0x9f, 0xb8, 0x26, 0xe1, 0xd3, 0xd7, 0x50, 0x1a, 0xe3, 0x04, 0x2a, - 0xfd, 0x4f, 0x35, 0x58, 0x58, 0xdd, 0x33, 0x6c, 0xc7, 0xd8, 0xb2, 0x1d, 0x3b, 0x3c, 0x78, 0xdb, - 0x73, 0xc9, 0x09, 0xe6, 0x6f, 0x13, 0x1e, 0x1f, 0xb8, 0x06, 0x6f, 0xe7, 0x90, 0x0d, 0x3e, 0x63, - 0xf7, 0x0e, 0xfa, 0x84, 0x32, 0x1e, 0x1d, 0xe9, 0x27, 0x0f, 0x87, 0xb5, 0xc7, 0x37, 0xb3, 0xab, - 0xe0, 0xbc, 0xb6, 0x08, 0xc3, 0x15, 0x05, 0xf4, 0xa6, 0xe7, 0x0c, 0x7a, 0x02, 0xeb, 0x04, 0xc3, - 0xba, 0x7c, 0x38, 0xac, 0x5d, 0xd9, 0xcc, 0xac, 0x81, 0x73, 0x5a, 0xea, 0x3f, 0x28, 0xc1, 0x6c, - 0xdd, 0x30, 0x77, 0x07, 0xfd, 0xfa, 0xc0, 0xdc, 0x25, 0x21, 0xfa, 0x0a, 0x94, 0xa9, 0xd8, 0xb2, - 0x8c, 0xd0, 0x10, 0x23, 0xf9, 0xd3, 0xb9, 0xdc, 0xc7, 0x26, 0x91, 0xd6, 0x8e, 0xc7, 0x76, 0x83, - 0x84, 0x46, 0x1d, 0x89, 0x31, 0x81, 0xb8, 0x0c, 0x4b, 0xac, 0x68, 0x1b, 0x26, 0x83, 0x3e, 0x31, - 0x05, 0x6f, 0x37, 0x8b, 0xf0, 0x8a, 0xda, 0xe3, 0x4e, 0x9f, 0x98, 0xf1, 0x2c, 0xd0, 0x5f, 0x98, - 0xe1, 0x47, 0x2e, 0x4c, 0x07, 0xa1, 0x11, 0x0e, 0xe8, 0xf0, 0x50, 0x4a, 0xeb, 0x63, 0x53, 0x62, - 0xd8, 0xea, 0xf3, 0x82, 0xd6, 0x34, 0xff, 0x8d, 0x05, 0x15, 0xfd, 0xbf, 0x68, 0xb0, 0xa0, 0x56, - 0xbf, 0x6d, 0x07, 0x21, 0xfa, 0xcb, 0x23, 0xc3, 0xb9, 0x72, 0xb2, 0xe1, 0xa4, 0xad, 0xd9, 0x60, - 0x2e, 0x08, 0x72, 0xe5, 0xa8, 0x44, 0x19, 0x4a, 0x02, 0x53, 0x76, 0x48, 0x7a, 0x9c, 0xad, 0x0a, - 0xca, 0x33, 0xb5, 0xcb, 0xf5, 0x39, 0x41, 0x6c, 0xaa, 0x45, 0xd1, 0x62, 0x8e, 0x5d, 0xff, 0x0a, - 0x5c, 0x52, 0x6b, 0xb5, 0x7d, 0x6f, 0xcf, 0xb6, 0x88, 0x4f, 0x57, 0x42, 0x78, 0xd0, 0x1f, 0x59, - 0x09, 0x94, 0xb3, 0x30, 0x83, 0xa0, 0x9f, 0x82, 0x69, 0x9f, 0x74, 0x6d, 0xcf, 0x65, 0xb3, 0x5d, - 0x89, 0xc7, 0x0e, 0xb3, 0x52, 0x2c, 0xa0, 0xfa, 0xff, 0x2b, 0x25, 0xc7, 0x8e, 0x4e, 0x23, 0xda, - 0x83, 0x72, 0x5f, 0x90, 0x12, 0x63, 0x77, 0x73, 0xdc, 0x0f, 0x8c, 0xba, 0x1e, 0x8f, 0x6a, 0x54, - 0x82, 0x25, 0x2d, 0x64, 0xc3, 0x7c, 0xf4, 0x7f, 0x63, 0x0c, 0x31, 0xcc, 0xc4, 0x69, 0x3b, 0x81, - 0x08, 0xa7, 0x10, 0xa3, 0x7b, 0x50, 0x09, 0x88, 0xe9, 0x13, 0x2a, 0x93, 0x04, 0x9b, 0x66, 0x0a, - 0xae, 0x4e, 0x54, 0x49, 0x08, 0xae, 0x45, 0xd1, 0xfd, 0x8a, 0x04, 0xe0, 0x18, 0x11, 0x7a, 0x16, - 0xca, 0x01, 0x21, 0x16, 0x95, 0x48, 0x4b, 0x93, 0x7c, 0x6e, 0xe8, 0xa7, 0x76, 0x44, 0x19, 0x96, - 0x50, 0xfd, 0x37, 0x27, 0x01, 0x8d, 0xb2, 0xb8, 0x3a, 0x02, 0xbc, 0x44, 0x8c, 0xff, 0x38, 0x23, - 0x20, 0x56, 0x4b, 0x0a, 0x31, 0x7a, 0x00, 0x73, 0x8e, 0x11, 0x84, 0x77, 0xfb, 0x54, 0x07, 0x89, - 0x18, 0xa5, 0xfa, 0xc2, 0x6a, 0x91, 0x99, 0xbe, 0xad, 0x22, 0xaa, 0x2f, 0x1e, 0x0e, 0x6b, 0x73, - 0x89, 0x22, 0x9c, 0x24, 0x85, 0xde, 0x85, 0x0a, 0x2d, 0x58, 0xf3, 0x7d, 0xcf, 0x17, 0xa3, 0xff, - 0x6a, 0x51, 0xba, 0x0c, 0x49, 0x7d, 0x8e, 0xce, 0x89, 0xfc, 0x89, 0x63, 0xf4, 0xe8, 0x4b, 0x80, - 0xbc, 0xad, 0x80, 0xf8, 0x7b, 0xc4, 0xba, 0xc1, 0x15, 0x2e, 0xfa, 0xb1, 0x74, 0x76, 0x26, 0xea, - 0xcb, 0x62, 0x36, 0xd1, 0xdd, 0x91, 0x1a, 0x38, 0xa3, 0x15, 0xda, 0x05, 0x24, 0x95, 0x36, 0xc9, - 0x00, 0x4b, 0x53, 0x27, 0x67, 0x9f, 0x2b, 0x94, 0xd8, 0x8d, 0x11, 0x14, 0x38, 0x03, 0xad, 0xfe, - 0x1f, 0x4a, 0x50, 0xe5, 0x2c, 0xb2, 0xe6, 0x86, 0xfe, 0xc1, 0x39, 0x6c, 0x10, 0x24, 0xb1, 0x41, - 0x34, 0x8a, 0xaf, 0x79, 0xd6, 0xe1, 0xdc, 0xfd, 0xa1, 0x97, 0xda, 0x1f, 0xd6, 0xc6, 0x25, 0x74, - 0xf4, 0xf6, 0xf0, 0x23, 0x0d, 0x2e, 0x28, 0xb5, 0xcf, 0x61, 0x77, 0xb0, 0x92, 0xbb, 0xc3, 0x6b, - 0x63, 0x7e, 0x5f, 0xce, 0xe6, 0xe0, 0x25, 0x3e, 0x8b, 0x09, 0xee, 0x17, 0x00, 0xb6, 0x98, 0x38, - 0xb9, 0x13, 0xeb, 0x49, 0x72, 0xca, 0xeb, 0x12, 0x82, 0x95, 0x5a, 0x09, 0x99, 0x55, 0x3a, 0x52, - 0x66, 0x7d, 0xbf, 0x04, 0x8b, 0x23, 0xc3, 0x3e, 0x2a, 0x47, 0xb4, 0x0f, 0x48, 0x8e, 0x94, 0x3e, - 0x08, 0x39, 0x32, 0x51, 0x44, 0x8e, 0xe8, 0x7f, 0xa0, 0xc1, 0x44, 0x03, 0xb7, 0xd0, 0x27, 0x13, - 0x1a, 0xed, 0xe3, 0xaa, 0x46, 0xfb, 0x70, 0x58, 0x9b, 0x69, 0xe0, 0x96, 0xa2, 0xdc, 0xfe, 0x5d, - 0x0d, 0x16, 0x4d, 0xcf, 0x0d, 0x0d, 0xca, 0x9a, 0x98, 0x8b, 0xfd, 0x88, 0xc5, 0x0a, 0x29, 0x73, - 0x8d, 0x14, 0xb2, 0xfa, 0x13, 0xa2, 0x03, 0x8b, 0x69, 0x48, 0x80, 0x47, 0x29, 0xeb, 0x9b, 0x50, - 0x69, 0x38, 0xde, 0xc0, 0x6a, 0xb9, 0xdb, 0xde, 0x19, 0x6a, 0x24, 0xef, 0x6b, 0x30, 0xcb, 0xf0, - 0xb6, 0x7d, 0x6f, 0xdb, 0x76, 0xc8, 0x47, 0x43, 0x31, 0x56, 0x7b, 0x9c, 0x27, 0xf8, 0x98, 0xa2, - 0xaa, 0x56, 0xfc, 0x88, 0x28, 0xaa, 0x6a, 0x97, 0x73, 0x64, 0xd1, 0xaf, 0xcd, 0x24, 0xbf, 0x8c, - 0x49, 0xa3, 0x67, 0xa1, 0x6c, 0x1a, 0xf5, 0x81, 0x6b, 0x39, 0x92, 0x2f, 0x68, 0x2f, 0x1b, 0xab, - 0xbc, 0x0c, 0x4b, 0x28, 0x7a, 0x00, 0x10, 0x3b, 0x0f, 0xc4, 0x34, 0xac, 0x8f, 0xe7, 0xb0, 0xe8, - 0x90, 0x90, 0xda, 0xdc, 0x41, 0x3c, 0xf5, 0x31, 0x0c, 0x2b, 0xd4, 0xd0, 0x5f, 0x83, 0x39, 0x31, - 0xc8, 0xad, 0x9e, 0xd1, 0x15, 0x36, 0x5d, 0xc1, 0x91, 0xda, 0x50, 0x10, 0xd5, 0x2f, 0x0b, 0xc2, - 0x73, 0x6a, 0x69, 0x80, 0x93, 0xd4, 0xd0, 0x01, 0xcc, 0xf6, 0x54, 0x3b, 0x75, 0xb2, 0xf8, 0x96, - 0xa1, 0xd8, 0xac, 0xf5, 0x4b, 0x82, 0xf8, 0x6c, 0xc2, 0xc2, 0x4d, 0x90, 0xca, 0x50, 0xb7, 0xa7, - 0x1e, 0x95, 0xba, 0x4d, 0x60, 0x86, 0x2f, 0xef, 0x60, 0x69, 0x9a, 0x7d, 0xe0, 0xcb, 0x45, 0x3e, - 0x90, 0x4b, 0x8a, 0xd8, 0x1b, 0xc6, 0x7f, 0x07, 0x38, 0xc2, 0x8d, 0xf6, 0x60, 0x96, 0xee, 0x56, - 0x1d, 0xe2, 0x10, 0x33, 0xf4, 0xfc, 0xa5, 0x99, 0xe2, 0xde, 0xa6, 0x8e, 0x82, 0x87, 0xbb, 0x2b, - 0xd4, 0x12, 0x9c, 0xa0, 0x23, 0xa5, 0x5f, 0x39, 0x57, 0xfa, 0x0d, 0xa0, 0xba, 0xa7, 0xf8, 0x0d, - 0x2a, 0x6c, 0x10, 0xbe, 0x58, 0xa4, 0x63, 0xb1, 0x13, 0xa1, 0x7e, 0x51, 0x10, 0xaa, 0xaa, 0x0e, - 0x07, 0x95, 0x8e, 0xfe, 0x8b, 0xd3, 0xb0, 0xd8, 0x70, 0x06, 0x41, 0x48, 0xfc, 0x55, 0xe1, 0xce, - 0x25, 0x3e, 0xfa, 0x86, 0x06, 0x57, 0xd8, 0xbf, 0x4d, 0xef, 0xbe, 0xdb, 0x24, 0x8e, 0x71, 0xb0, - 0xba, 0x4d, 0x6b, 0x58, 0xd6, 0xe9, 0x24, 0x50, 0x73, 0x20, 0x76, 0x6a, 0xe6, 0x00, 0xe9, 0x64, - 0x62, 0xc4, 0x39, 0x94, 0xd0, 0xdf, 0xd1, 0xe0, 0x89, 0x0c, 0x50, 0x93, 0x38, 0x24, 0x24, 0x42, - 0x06, 0x9c, 0xb6, 0x1f, 0x4f, 0x1f, 0x0e, 0x6b, 0x4f, 0x74, 0xf2, 0x90, 0xe2, 0x7c, 0x7a, 0xe8, - 0x97, 0x35, 0x58, 0xce, 0x80, 0xae, 0x1b, 0xb6, 0x33, 0xf0, 0x89, 0x50, 0x54, 0x4f, 0xdb, 0x9d, - 0xab, 0x87, 0xc3, 0xda, 0x72, 0x27, 0x17, 0x2b, 0x3e, 0x82, 0x22, 0xfa, 0x1a, 0x5c, 0x96, 0xd0, - 0x4d, 0xd7, 0x25, 0xc4, 0x22, 0xd6, 0x3d, 0x5b, 0xd8, 0x95, 0xa7, 0xef, 0xca, 0x13, 0x87, 0xc3, - 0xda, 0xe5, 0x4e, 0x16, 0x42, 0x9c, 0x4d, 0x07, 0x75, 0xe1, 0xe9, 0x18, 0x10, 0xda, 0x8e, 0xfd, - 0x80, 0x61, 0xba, 0xb7, 0xe3, 0x93, 0x60, 0xc7, 0x73, 0x2c, 0x26, 0x2c, 0xb4, 0xfa, 0xc7, 0x0e, - 0x87, 0xb5, 0xa7, 0x3b, 0x47, 0x55, 0xc4, 0x47, 0xe3, 0x41, 0x16, 0xcc, 0x06, 0xa6, 0xe1, 0xb6, - 0xdc, 0x90, 0xf8, 0x7b, 0x86, 0xb3, 0x34, 0x5d, 0xe8, 0x03, 0xf9, 0x12, 0x55, 0xf0, 0xe0, 0x04, - 0x56, 0xfd, 0x7f, 0x6b, 0x50, 0x15, 0x2b, 0x81, 0x29, 0x2c, 0x5b, 0x30, 0x65, 0xd2, 0x0d, 0x4b, - 0x70, 0xfc, 0xab, 0x85, 0x37, 0x46, 0x8a, 0x2d, 0xde, 0x15, 0x59, 0x11, 0xe6, 0xa8, 0xd1, 0x5e, - 0xc6, 0xb6, 0x56, 0x1f, 0x6f, 0x5b, 0x63, 0xd4, 0x8e, 0xd9, 0xd2, 0xf4, 0xe1, 0x04, 0x54, 0x1a, - 0x9e, 0x6b, 0xd9, 0x4c, 0x49, 0x7e, 0x3e, 0xa1, 0x9a, 0x3d, 0xad, 0x0a, 0xa7, 0x87, 0xc3, 0xda, - 0x9c, 0xac, 0xa8, 0x48, 0xab, 0x97, 0xa4, 0x85, 0xc6, 0x75, 0xb5, 0x8f, 0x25, 0x4d, 0xab, 0x87, - 0xc3, 0xda, 0x05, 0xd9, 0x2c, 0x69, 0x6d, 0xa1, 0x3d, 0x40, 0x54, 0x67, 0xbe, 0xe7, 0x1b, 0x6e, - 0xc0, 0xd1, 0x52, 0xa6, 0xe5, 0xeb, 0xe7, 0x2f, 0x9d, 0x6c, 0x4e, 0x69, 0x8b, 0x58, 0xa5, 0xbe, - 0x3d, 0x82, 0x0d, 0x67, 0x50, 0x40, 0xef, 0xc2, 0x3c, 0x2d, 0xdd, 0xec, 0x5b, 0x46, 0x48, 0x94, - 0x85, 0x72, 0x1a, 0x9a, 0x57, 0x04, 0xcd, 0xf9, 0xdb, 0x09, 0x4c, 0x38, 0x85, 0x99, 0xab, 0xb2, - 0x46, 0xe0, 0xb9, 0x6c, 0x0d, 0x24, 0x54, 0x59, 0x5a, 0x8a, 0x05, 0x14, 0x3d, 0x07, 0x33, 0x3d, - 0x12, 0x04, 0x46, 0x97, 0x30, 0xa6, 0xae, 0xc4, 0x3b, 0xd7, 0x06, 0x2f, 0xc6, 0x11, 0x1c, 0x7d, - 0x0a, 0xa6, 0x4c, 0xcf, 0x22, 0xc1, 0xd2, 0x0c, 0xf3, 0x28, 0x5f, 0x61, 0xbc, 0x44, 0x0b, 0x1e, - 0x0e, 0x6b, 0x15, 0x66, 0x80, 0xd0, 0x5f, 0x98, 0x57, 0xd2, 0xbf, 0x43, 0x15, 0xc9, 0x94, 0x42, - 0x7e, 0x02, 0x15, 0xfc, 0xfc, 0xfc, 0x6b, 0xfa, 0x0f, 0x4b, 0x70, 0x89, 0xf6, 0xd0, 0xf7, 0x1c, - 0x87, 0x0a, 0xd9, 0xbe, 0xe3, 0x1d, 0xf4, 0x88, 0x1b, 0x7e, 0xa8, 0x7a, 0x89, 0x5e, 0x87, 0xe9, - 0x3e, 0x3f, 0x3f, 0x99, 0x60, 0xdd, 0x79, 0x96, 0x4e, 0x22, 0x3f, 0xdd, 0x78, 0x38, 0xac, 0x2d, - 0x67, 0x7d, 0x80, 0x38, 0x17, 0x11, 0xed, 0x90, 0x9d, 0xd2, 0x38, 0x38, 0xd3, 0x7d, 0xe6, 0x84, - 0x1a, 0xbc, 0xb1, 0x45, 0x9c, 0x93, 0x2a, 0x19, 0xfa, 0x4f, 0x4a, 0x70, 0x25, 0xee, 0x51, 0xcb, - 0x0d, 0x42, 0xc3, 0x71, 0xb8, 0x1d, 0xfc, 0xe8, 0x4d, 0xa4, 0x7e, 0xc2, 0x44, 0xba, 0x53, 0xd4, - 0xdc, 0x1c, 0xed, 0x7b, 0xae, 0x97, 0x68, 0x3f, 0xe5, 0x25, 0x6a, 0x9f, 0x21, 0xcd, 0xa3, 0x1d, - 0x46, 0xff, 0x47, 0x83, 0xe5, 0xec, 0x86, 0xe7, 0x60, 0xb0, 0x79, 0x49, 0x83, 0xed, 0x4b, 0x67, - 0xf7, 0xd5, 0x39, 0xa6, 0xdb, 0x7f, 0xce, 0xfd, 0x5a, 0x66, 0xc4, 0x6d, 0xc3, 0x05, 0xaa, 0x5d, - 0x07, 0xa1, 0x70, 0x67, 0x9c, 0xee, 0x9c, 0x2f, 0x72, 0x69, 0x5c, 0xc0, 0x49, 0x1c, 0x38, 0x8d, - 0x14, 0xdd, 0x81, 0x19, 0xca, 0xed, 0x14, 0x7f, 0xe9, 0xe4, 0xf8, 0xa5, 0x40, 0xed, 0xf0, 0xb6, - 0x38, 0x42, 0xa2, 0xff, 0xb9, 0x06, 0x4f, 0x1d, 0x35, 0xfb, 0xe8, 0x3d, 0x00, 0x33, 0xda, 0xc3, - 0xf8, 0x41, 0x6c, 0x51, 0x2d, 0x20, 0xc2, 0x12, 0x2f, 0x21, 0x59, 0x14, 0x60, 0x85, 0x48, 0x86, - 0x77, 0xbf, 0xf4, 0x88, 0xbc, 0xfb, 0xfa, 0xff, 0xd5, 0x54, 0x61, 0xa1, 0x8e, 0xfe, 0x47, 0x4d, - 0x58, 0xa8, 0x7d, 0xcf, 0xf5, 0xac, 0x24, 0x97, 0xac, 0xda, 0xe4, 0x23, 0xb7, 0x64, 0xd5, 0xce, - 0xe7, 0x2c, 0xd9, 0xbf, 0x57, 0xca, 0xfb, 0x5a, 0xb6, 0x64, 0xef, 0x43, 0x25, 0x8a, 0x9b, 0x89, - 0x18, 0x7b, 0x7d, 0xdc, 0x3e, 0x71, 0x74, 0xf1, 0xf1, 0x57, 0x54, 0x12, 0xe0, 0x98, 0x16, 0xda, - 0x07, 0xb0, 0xe4, 0x46, 0x29, 0x66, 0xff, 0xe6, 0x78, 0x94, 0xe3, 0x8d, 0xb7, 0x3e, 0x4f, 0xf9, - 0x2d, 0xfe, 0x8d, 0x15, 0x5a, 0xfa, 0xef, 0x95, 0x00, 0x8d, 0x76, 0x97, 0x2a, 0x1b, 0xbb, 0xb6, - 0x6b, 0xa5, 0x95, 0x8d, 0x5b, 0xb6, 0x6b, 0x61, 0x06, 0x91, 0xea, 0x48, 0x29, 0x57, 0x1d, 0x79, - 0x15, 0x2e, 0x74, 0x1d, 0x6f, 0xcb, 0x70, 0x9c, 0x03, 0x11, 0x7d, 0xc3, 0x36, 0xa4, 0x72, 0xfd, - 0x22, 0x95, 0x6b, 0x37, 0x92, 0x20, 0x9c, 0xae, 0x8b, 0xfa, 0xb0, 0xe0, 0x13, 0xd3, 0x73, 0x4d, - 0xdb, 0x61, 0xca, 0xa3, 0x37, 0x08, 0x0b, 0x9a, 0x70, 0x97, 0x0e, 0x87, 0xb5, 0x05, 0x9c, 0xc2, - 0x85, 0x47, 0xb0, 0xa3, 0x67, 0x60, 0xa6, 0xef, 0xdb, 0x3d, 0xc3, 0x3f, 0x60, 0xea, 0x69, 0xb9, - 0x5e, 0xa5, 0x02, 0xb2, 0xcd, 0x8b, 0x70, 0x04, 0xd3, 0xbf, 0xad, 0xc1, 0x44, 0xf3, 0x4e, 0x07, - 0xe9, 0x30, 0x6d, 0x79, 0x3d, 0xc3, 0x76, 0xc5, 0x28, 0xb1, 0x20, 0x96, 0x26, 0x2b, 0xc1, 0x02, - 0x82, 0xfa, 0x50, 0x89, 0xe4, 0xcb, 0x58, 0x87, 0x1a, 0xcd, 0x3b, 0x1d, 0x79, 0x10, 0x2c, 0x59, - 0x29, 0x2a, 0x09, 0x70, 0x4c, 0x44, 0x37, 0x60, 0xb1, 0x79, 0xa7, 0xd3, 0x72, 0x4d, 0x67, 0x60, - 0x91, 0xb5, 0x7d, 0xf6, 0x87, 0x7e, 0x99, 0xcd, 0x4b, 0x44, 0xe0, 0x0c, 0xfb, 0x32, 0x51, 0x09, - 0x47, 0x30, 0x5a, 0x8d, 0xf0, 0x16, 0x22, 0xea, 0x83, 0x55, 0x13, 0x48, 0x70, 0x04, 0xd3, 0xdf, - 0x2f, 0x41, 0x55, 0xe9, 0x10, 0x72, 0x60, 0x86, 0x7f, 0x6e, 0x74, 0xe8, 0xba, 0x56, 0xf0, 0x13, - 0x93, 0xbd, 0xe6, 0xd4, 0xf9, 0x80, 0x06, 0x38, 0x22, 0xa1, 0xce, 0x52, 0x29, 0x7f, 0x96, 0xd0, - 0x0a, 0x00, 0x3f, 0x5e, 0x66, 0xe7, 0x33, 0x5c, 0x4b, 0x65, 0x0b, 0xa1, 0x23, 0x4b, 0xb1, 0x52, - 0x03, 0x3d, 0x25, 0xf8, 0x99, 0x9f, 0x3e, 0x97, 0x53, 0xbc, 0xbc, 0x0d, 0x53, 0x0f, 0x3c, 0x97, - 0x04, 0xc2, 0xd1, 0x77, 0x46, 0x1f, 0x58, 0xa1, 0x02, 0xea, 0x6d, 0x8a, 0x17, 0x73, 0xf4, 0xfa, - 0x6f, 0x69, 0x00, 0x4d, 0x23, 0x34, 0xb8, 0x5f, 0xea, 0x04, 0x81, 0x3b, 0x4f, 0x25, 0x96, 0x61, - 0x79, 0xe4, 0xe8, 0x60, 0x32, 0xb0, 0x1f, 0x44, 0x9f, 0x2f, 0xf7, 0x1e, 0x8e, 0xbd, 0x63, 0x3f, - 0x20, 0x98, 0xc1, 0xd1, 0x27, 0xa1, 0x42, 0x5c, 0xd3, 0x3f, 0xe8, 0x87, 0xc4, 0x62, 0x23, 0x50, - 0xe6, 0xe7, 0x39, 0x6b, 0x51, 0x21, 0x8e, 0xe1, 0xfa, 0x1e, 0x94, 0xd7, 0x5c, 0xab, 0xef, 0xd9, - 0xdc, 0x28, 0x39, 0xa6, 0x83, 0x4f, 0xc3, 0xc4, 0xc0, 0x77, 0x44, 0xff, 0xaa, 0xa2, 0xc2, 0xc4, - 0x26, 0xbe, 0x8d, 0x69, 0x39, 0xb5, 0xf4, 0xfa, 0x03, 0xbf, 0xef, 0x05, 0x51, 0x27, 0xa5, 0x62, - 0xd2, 0xe6, 0xc5, 0x38, 0x82, 0xeb, 0x0f, 0x35, 0x58, 0x58, 0xdb, 0xef, 0xdb, 0x3e, 0x8b, 0x08, - 0x22, 0x3e, 0xdd, 0xd2, 0x69, 0xfb, 0x3d, 0xfe, 0xaf, 0xe8, 0x83, 0x6c, 0x2f, 0x6a, 0xe0, 0x08, - 0x8e, 0xb6, 0x61, 0x9e, 0xb0, 0xe6, 0x54, 0x28, 0x34, 0x0d, 0xe9, 0x2b, 0x3b, 0x8d, 0xa1, 0xcb, - 0x03, 0xce, 0x12, 0x58, 0x70, 0x0a, 0x2b, 0xea, 0xc0, 0xbc, 0xe9, 0x18, 0x41, 0x60, 0x6f, 0xdb, - 0x66, 0x7c, 0xd6, 0x55, 0xa9, 0x7f, 0x92, 0xb6, 0x6d, 0x24, 0x20, 0x0f, 0x87, 0xb5, 0xcb, 0xa2, - 0x9f, 0x49, 0x00, 0x4e, 0xa1, 0xd0, 0xff, 0x40, 0x83, 0x8a, 0x54, 0x64, 0x3e, 0x5c, 0xb6, 0xe0, - 0xb3, 0x50, 0xb6, 0xec, 0x40, 0x15, 0xf0, 0xec, 0xb4, 0xa2, 0x29, 0xca, 0xb0, 0x84, 0xea, 0x01, - 0x94, 0x6f, 0x88, 0x35, 0x82, 0x96, 0xa1, 0x64, 0x47, 0xfb, 0x0b, 0x88, 0x0f, 0x28, 0xb5, 0x9a, - 0xb8, 0x64, 0x5b, 0x92, 0xab, 0x4a, 0xb9, 0x5c, 0xa5, 0x4c, 0xfb, 0xc4, 0xd1, 0xd3, 0xae, 0x7f, - 0x57, 0x83, 0xea, 0x4d, 0x7b, 0x8b, 0xf8, 0x2e, 0xd7, 0xe2, 0x9e, 0x49, 0xc7, 0x88, 0x56, 0xb3, - 0xe2, 0x43, 0xd1, 0x3e, 0x54, 0x02, 0x73, 0x87, 0x58, 0x03, 0x47, 0x9e, 0x15, 0x16, 0x8a, 0x04, - 0x55, 0x48, 0x77, 0x04, 0x3e, 0x25, 0x16, 0x26, 0xa2, 0x80, 0x63, 0x62, 0xfa, 0x57, 0xe1, 0x62, - 0x46, 0x23, 0x54, 0x83, 0xa9, 0x20, 0x34, 0xfc, 0x50, 0x8c, 0x19, 0x93, 0x1d, 0x1d, 0x5a, 0x80, - 0x79, 0x39, 0x7a, 0x02, 0x26, 0x88, 0x6b, 0x89, 0x41, 0x9b, 0xa1, 0xab, 0x6c, 0xcd, 0xb5, 0x30, - 0x2d, 0xa3, 0x53, 0xe4, 0x78, 0x09, 0x66, 0x64, 0x53, 0x74, 0x5b, 0x94, 0x61, 0x09, 0xd5, 0x7f, - 0x69, 0x1a, 0x9e, 0xbe, 0xe9, 0xf9, 0xf6, 0x03, 0xcf, 0x0d, 0x0d, 0xa7, 0xed, 0x59, 0xb1, 0xf7, - 0x5b, 0x4c, 0xf7, 0x37, 0x35, 0x78, 0xdc, 0xec, 0x0f, 0x5a, 0xae, 0x1d, 0xda, 0x46, 0xe4, 0x94, - 0x6c, 0x13, 0xdf, 0xf6, 0x8a, 0x3a, 0xc1, 0x59, 0x6c, 0x61, 0xa3, 0xbd, 0x99, 0x85, 0x12, 0xe7, - 0xd1, 0x42, 0xef, 0xc2, 0xbc, 0xe5, 0xdd, 0x77, 0xb9, 0x8b, 0x94, 0x38, 0xc6, 0x41, 0x41, 0xd7, - 0x37, 0x63, 0xf1, 0x66, 0x02, 0x13, 0x4e, 0x61, 0x66, 0x7e, 0x7f, 0x59, 0xd4, 0x09, 0x59, 0x6c, - 0xe5, 0x83, 0x78, 0x38, 0x0b, 0xfa, 0xfd, 0x9b, 0x99, 0x18, 0x71, 0x0e, 0x25, 0xf4, 0x35, 0xb8, - 0x6c, 0xf3, 0x81, 0xc0, 0xc4, 0xb0, 0x6c, 0x97, 0x04, 0x01, 0xff, 0xee, 0x31, 0x1c, 0xdb, 0xad, - 0x2c, 0x84, 0x38, 0x9b, 0x0e, 0x7a, 0x07, 0x20, 0x38, 0x70, 0x4d, 0x31, 0xd7, 0x53, 0x85, 0xa8, - 0xf2, 0x2d, 0x58, 0x62, 0xc1, 0x0a, 0x46, 0xba, 0x0b, 0x85, 0x9e, 0x43, 0x7c, 0xc3, 0x35, 0xb9, - 0xdf, 0x4f, 0xe3, 0xbb, 0xd0, 0xbd, 0xa8, 0x10, 0xc7, 0x70, 0x64, 0xc1, 0xec, 0xa0, 0xaf, 0x4c, - 0xfe, 0x4c, 0x71, 0xe7, 0xf7, 0xa6, 0x82, 0x07, 0x27, 0xb0, 0xea, 0xdf, 0xa9, 0x00, 0x0b, 0xd9, - 0x5e, 0x6d, 0xb7, 0x3a, 0xc4, 0xdf, 0x93, 0x8b, 0xe0, 0x6f, 0x6b, 0xb0, 0x10, 0xfb, 0x8d, 0x85, - 0x84, 0xd5, 0x8a, 0x9f, 0x82, 0xdf, 0x4a, 0xe1, 0xaa, 0x2f, 0x09, 0x11, 0xb1, 0x90, 0x86, 0xe0, - 0x11, 0xba, 0xe8, 0x6f, 0x69, 0xb0, 0x60, 0x24, 0x43, 0xb6, 0x23, 0x91, 0x55, 0x28, 0x14, 0x29, - 0x15, 0xfe, 0x1d, 0xf7, 0x25, 0x05, 0x08, 0xf0, 0x08, 0x59, 0xf4, 0x59, 0x98, 0x35, 0xfa, 0xf6, - 0xea, 0xc0, 0xb2, 0x89, 0x6b, 0xca, 0x38, 0x5f, 0x36, 0xcc, 0xab, 0xed, 0x96, 0x2c, 0xc7, 0x89, - 0x5a, 0x32, 0x26, 0x5b, 0x0c, 0xe4, 0xe4, 0x98, 0x31, 0xd9, 0x62, 0x0c, 0xe3, 0x98, 0x6c, 0x31, - 0x74, 0x2a, 0x11, 0xf4, 0x73, 0xf0, 0x04, 0x97, 0xf5, 0x75, 0x23, 0xb0, 0xcd, 0xd5, 0x41, 0xb8, - 0x43, 0xdc, 0x30, 0xda, 0xb1, 0xb9, 0xfe, 0xcf, 0x4e, 0xc5, 0xd6, 0xf2, 0x2a, 0xe1, 0xfc, 0xf6, - 0xc8, 0x05, 0xf0, 0x6c, 0xcb, 0x14, 0xdf, 0xc3, 0x0f, 0x66, 0x0a, 0x1d, 0x5a, 0xde, 0x6d, 0x35, - 0x1b, 0xe2, 0x73, 0xd8, 0xd2, 0x89, 0x7f, 0x63, 0x85, 0x02, 0xfa, 0x96, 0x06, 0x73, 0x62, 0x03, - 0x17, 0x34, 0x67, 0xd8, 0xfc, 0xbf, 0x5d, 0x94, 0x19, 0x53, 0x0c, 0xbf, 0x82, 0x55, 0xe4, 0x3c, - 0xb8, 0x4a, 0x1e, 0xd3, 0x27, 0x60, 0x38, 0xd9, 0x0f, 0xf4, 0x0f, 0x35, 0xb8, 0x14, 0x10, 0x7f, - 0xcf, 0x36, 0xc9, 0xaa, 0x69, 0x7a, 0x03, 0x37, 0x9a, 0xe4, 0x72, 0x71, 0x2b, 0xb7, 0x93, 0x81, - 0xaf, 0xbe, 0x74, 0x38, 0xac, 0x5d, 0xca, 0x82, 0xe0, 0x4c, 0xfa, 0x54, 0xa6, 0x5f, 0xb8, 0x6f, - 0x84, 0xe6, 0x4e, 0xc3, 0x30, 0x77, 0x98, 0x32, 0x1c, 0x2c, 0x55, 0x8a, 0xc7, 0xef, 0xbd, 0x95, - 0x44, 0xc5, 0x8d, 0xdc, 0x54, 0x21, 0x4e, 0x13, 0x5c, 0x7e, 0x1d, 0xd0, 0xe8, 0xc8, 0xa2, 0x05, - 0x98, 0xd8, 0x25, 0xfc, 0x6a, 0x42, 0x05, 0xd3, 0x7f, 0xd1, 0x25, 0x98, 0xda, 0x33, 0x9c, 0x01, - 0x57, 0x89, 0xca, 0x98, 0xff, 0x78, 0xb9, 0xf4, 0x79, 0x4d, 0xff, 0x8d, 0x09, 0x78, 0x92, 0x4e, - 0x58, 0x6c, 0xc4, 0x6f, 0x18, 0xae, 0xd1, 0xfd, 0x70, 0x4a, 0xaa, 0xef, 0x6a, 0xf0, 0xf8, 0x4e, - 0xb6, 0x76, 0x21, 0x76, 0xef, 0x37, 0x0a, 0xe9, 0x58, 0x47, 0x29, 0x2c, 0xfc, 0xa0, 0xf5, 0xc8, - 0x2a, 0x38, 0xaf, 0x53, 0xe8, 0x75, 0x58, 0x70, 0x3d, 0x8b, 0x34, 0x5a, 0x4d, 0xbc, 0x61, 0x04, - 0xbb, 0x9d, 0xc8, 0x98, 0x9a, 0xe2, 0x4e, 0x85, 0x3b, 0x29, 0x18, 0x1e, 0xa9, 0xad, 0xff, 0x91, - 0x06, 0x17, 0xe8, 0xc8, 0xb4, 0x7d, 0x6f, 0xff, 0xe0, 0xc3, 0x38, 0x27, 0xcf, 0xc1, 0x64, 0xcf, - 0xb3, 0x22, 0x65, 0xfb, 0x32, 0x55, 0xb4, 0x37, 0x3c, 0x8b, 0x3c, 0xe4, 0x0e, 0x86, 0xfd, 0x03, - 0xfa, 0x03, 0xb3, 0x2a, 0xfa, 0x7f, 0xd3, 0xf8, 0x6e, 0x18, 0xe9, 0xa4, 0x1f, 0x4a, 0x1e, 0x7b, - 0x11, 0xe6, 0x68, 0xd9, 0x86, 0xb1, 0xdf, 0x6e, 0xbe, 0xe9, 0x39, 0xd1, 0x49, 0x2c, 0x8b, 0x89, - 0xbc, 0xa5, 0x02, 0x70, 0xb2, 0x9e, 0xfe, 0xad, 0x39, 0x60, 0x15, 0x1c, 0x12, 0x7e, 0x18, 0xbf, - 0xeb, 0x79, 0xa8, 0x9a, 0xfd, 0x41, 0x63, 0xbd, 0xf3, 0xc6, 0xc0, 0x0b, 0x0d, 0xe1, 0xfb, 0x60, - 0x5b, 0x5c, 0xa3, 0xbd, 0x19, 0x15, 0x63, 0xb5, 0x0e, 0xe5, 0x5e, 0xb3, 0x3f, 0x10, 0xf2, 0xa0, - 0xad, 0x9e, 0xd7, 0x31, 0xee, 0x6d, 0xb4, 0x37, 0x13, 0x30, 0x3c, 0x52, 0x1b, 0x7d, 0x0d, 0x66, - 0xc9, 0x9e, 0x6d, 0xd2, 0x3d, 0xed, 0xa6, 0xe1, 0x5b, 0x62, 0x67, 0x6e, 0x15, 0xfd, 0x78, 0x39, - 0xb4, 0x6b, 0x02, 0x29, 0xd7, 0x0c, 0xd6, 0x14, 0x12, 0x38, 0x41, 0x90, 0xed, 0xd2, 0xe2, 0x37, - 0x9d, 0x29, 0xcf, 0xba, 0xe1, 0x1b, 0x26, 0x51, 0x54, 0xd0, 0x29, 0xb1, 0x4b, 0xe7, 0x55, 0xc2, - 0xf9, 0xed, 0xd1, 0xef, 0x68, 0x70, 0x45, 0x42, 0x6d, 0xd7, 0xee, 0x0d, 0x7a, 0x98, 0x98, 0x8e, - 0x61, 0xf7, 0xc4, 0x96, 0xfd, 0xd6, 0x99, 0x7d, 0x68, 0x12, 0x3d, 0xd7, 0xff, 0xb3, 0x61, 0x38, - 0xa7, 0x4b, 0xe8, 0x37, 0x35, 0xb8, 0x16, 0x81, 0xda, 0x3e, 0x09, 0x82, 0x81, 0x4f, 0xe2, 0xb3, - 0x7c, 0x31, 0x24, 0xc5, 0xd4, 0xe0, 0x4f, 0x1c, 0x0e, 0x6b, 0xd7, 0xd6, 0x8e, 0xc1, 0x8d, 0x8f, - 0xa5, 0xae, 0xb2, 0x4b, 0xc7, 0xdb, 0x0e, 0xc5, 0x1e, 0xff, 0xa8, 0xd8, 0x85, 0x92, 0xc0, 0x09, - 0x82, 0xe8, 0x77, 0x35, 0x78, 0x5c, 0x2d, 0x50, 0xb9, 0x85, 0x6f, 0xee, 0x5f, 0x3e, 0xb3, 0xce, - 0xa4, 0xf0, 0x73, 0x33, 0x36, 0x07, 0x88, 0xf3, 0x7a, 0x85, 0x9e, 0x81, 0x99, 0x1e, 0x63, 0xcc, - 0x60, 0x09, 0x18, 0x3b, 0x33, 0x77, 0x04, 0xe7, 0xd5, 0x00, 0x47, 0x30, 0xaa, 0x57, 0xf7, 0x3d, - 0xab, 0x6d, 0x5b, 0xc1, 0x6d, 0xbb, 0x67, 0x87, 0x4b, 0x55, 0x16, 0x3e, 0xcd, 0x86, 0xa3, 0xed, - 0x59, 0xed, 0x56, 0x93, 0x97, 0xe3, 0x44, 0x2d, 0x16, 0x2a, 0x66, 0xf7, 0x8c, 0x2e, 0x69, 0x0f, - 0x1c, 0xa7, 0xed, 0x7b, 0xec, 0x8a, 0x67, 0x93, 0x18, 0x96, 0x63, 0xbb, 0x64, 0x69, 0xb6, 0x78, - 0xa8, 0x58, 0x2b, 0x0f, 0x29, 0xce, 0xa7, 0x87, 0x56, 0x00, 0xb6, 0x0d, 0xdb, 0xe9, 0xdc, 0x37, - 0xfa, 0x77, 0xdd, 0xa5, 0x39, 0x26, 0xc0, 0x98, 0x52, 0xbb, 0x2e, 0x4b, 0xb1, 0x52, 0x83, 0x72, - 0x13, 0x95, 0x82, 0x98, 0xf0, 0x30, 0xf0, 0xa5, 0xf9, 0x33, 0xe2, 0xa6, 0x08, 0x21, 0x1f, 0xbe, - 0x5b, 0x0a, 0x09, 0x9c, 0x20, 0x88, 0xbe, 0xa9, 0xc1, 0x7c, 0x70, 0x10, 0x84, 0xa4, 0x27, 0xfb, - 0x70, 0xe1, 0xac, 0xfb, 0xc0, 0xdc, 0x0f, 0x9d, 0x04, 0x11, 0x9c, 0x22, 0xaa, 0x0f, 0x4b, 0x70, - 0x39, 0x93, 0x05, 0xd1, 0xab, 0x70, 0xa1, 0x47, 0x7a, 0x9e, 0x7f, 0xb0, 0x1a, 0x5d, 0x95, 0x14, - 0xee, 0x21, 0xa6, 0x7e, 0x6e, 0x24, 0x41, 0x38, 0x5d, 0x97, 0x6e, 0x10, 0x6c, 0xba, 0xd6, 0x3b, - 0x71, 0xfb, 0x52, 0xbc, 0x41, 0xb4, 0x52, 0x30, 0x3c, 0x52, 0x1b, 0x35, 0x60, 0x51, 0x94, 0xb5, - 0xa8, 0xea, 0x13, 0xac, 0xfb, 0x24, 0xf2, 0xe4, 0x52, 0x55, 0x62, 0xb1, 0x95, 0x06, 0xe2, 0xd1, - 0xfa, 0xf4, 0x2b, 0xe8, 0x0f, 0xb5, 0x17, 0x93, 0xf1, 0x57, 0xdc, 0x49, 0x82, 0x70, 0xba, 0x6e, - 0xa4, 0xa4, 0x25, 0xba, 0x30, 0x15, 0x7f, 0xc5, 0x9d, 0x14, 0x0c, 0x8f, 0xd4, 0xd6, 0xff, 0xfb, - 0x24, 0x7c, 0xfc, 0x04, 0x62, 0x1b, 0xf5, 0xb2, 0x87, 0xfb, 0x98, 0x45, 0xb4, 0x12, 0x1d, 0xf4, - 0xad, 0xbc, 0x31, 0x30, 0xdc, 0xd0, 0x0e, 0x0f, 0x4e, 0x38, 0x3d, 0xfd, 0x9c, 0xe9, 0x39, 0x3d, - 0xbd, 0x93, 0x4e, 0x67, 0x90, 0x37, 0x9d, 0xa7, 0x27, 0x79, 0xf2, 0xe9, 0xef, 0x65, 0x4f, 0x7f, - 0xc1, 0x51, 0x3d, 0x96, 0x5d, 0xfa, 0x39, 0xec, 0x52, 0x70, 0x54, 0x4f, 0xc0, 0x5e, 0x7f, 0x32, - 0x09, 0x9f, 0x38, 0xc9, 0x16, 0x52, 0x90, 0xbf, 0x32, 0x84, 0xf4, 0x23, 0xe5, 0xaf, 0xbc, 0x23, - 0xd6, 0x47, 0xc8, 0x5f, 0x19, 0x24, 0x1f, 0x35, 0x7f, 0xe5, 0x8d, 0xea, 0xa3, 0xe2, 0xaf, 0xbc, - 0x51, 0x3d, 0x01, 0x7f, 0xfd, 0x59, 0x7a, 0x7f, 0x90, 0x3b, 0x58, 0x0b, 0x26, 0xcc, 0xfe, 0xa0, - 0xa0, 0x90, 0x62, 0x67, 0x08, 0x8d, 0xf6, 0x26, 0xa6, 0x38, 0x10, 0x86, 0x69, 0xce, 0x3f, 0x05, - 0x45, 0x10, 0x3b, 0x1e, 0xe7, 0x2c, 0x89, 0x05, 0x26, 0x3a, 0x54, 0xa4, 0xbf, 0x43, 0x7a, 0xc4, - 0x37, 0x9c, 0x4e, 0xe8, 0xf9, 0x46, 0xb7, 0xa8, 0xb4, 0x61, 0x43, 0xb5, 0x96, 0xc2, 0x85, 0x47, - 0xb0, 0xd3, 0x01, 0xe9, 0xdb, 0x56, 0x41, 0xf9, 0xc2, 0x06, 0xa4, 0xdd, 0x6a, 0x62, 0x8a, 0x43, - 0xff, 0xc3, 0x32, 0x28, 0x71, 0xc4, 0xd4, 0x52, 0x31, 0x1c, 0xc7, 0xbb, 0xdf, 0xf6, 0xed, 0x3d, - 0xdb, 0x21, 0x5d, 0x62, 0xc9, 0x40, 0xd3, 0x40, 0x9c, 0x34, 0x31, 0xd5, 0x69, 0x35, 0xaf, 0x12, - 0xce, 0x6f, 0x4f, 0x2d, 0xd1, 0x45, 0x33, 0x7d, 0x1d, 0x41, 0x4c, 0xc4, 0x5a, 0xb1, 0x08, 0xec, - 0x14, 0x32, 0xbe, 0x9e, 0x46, 0x8a, 0xf1, 0x28, 0x59, 0xf4, 0x75, 0x8d, 0x9b, 0xd8, 0xd2, 0x47, - 0x28, 0xe6, 0xec, 0xc6, 0x19, 0x39, 0x1b, 0x63, 0x5b, 0x5d, 0x02, 0x70, 0x92, 0x20, 0xb5, 0x85, - 0x2e, 0xef, 0x66, 0x79, 0xbd, 0xc4, 0xcc, 0xde, 0x2d, 0xda, 0x95, 0x1c, 0x37, 0x1a, 0x3f, 0x2d, - 0xc9, 0xac, 0x80, 0xb3, 0x3b, 0x22, 0x47, 0x49, 0x3a, 0x4b, 0x84, 0x10, 0x28, 0x3c, 0x4a, 0x29, - 0xaf, 0x4b, 0x3c, 0x4a, 0x12, 0x80, 0x93, 0x04, 0x51, 0x1f, 0x2a, 0xbb, 0x91, 0xeb, 0x49, 0x58, - 0xb4, 0x8d, 0xa2, 0xd4, 0x15, 0xff, 0x15, 0x3f, 0x95, 0x91, 0x85, 0x38, 0x26, 0x82, 0x76, 0x60, - 0x66, 0x97, 0x0b, 0x22, 0x61, 0x89, 0xae, 0x8e, 0xad, 0x29, 0x73, 0x83, 0x48, 0x14, 0xe1, 0x08, - 0xbd, 0x7a, 0x02, 0x5c, 0x3e, 0xe6, 0xe0, 0xff, 0xd7, 0x35, 0xb8, 0xbc, 0x47, 0xfc, 0xd0, 0x36, - 0xd3, 0x3e, 0xc7, 0x4a, 0x71, 0x6d, 0xfe, 0xcd, 0x2c, 0x84, 0x9c, 0x4d, 0x32, 0x41, 0x38, 0xbb, - 0x0b, 0xfa, 0x4f, 0x34, 0x18, 0xf1, 0xfe, 0xa0, 0x5f, 0xd1, 0x60, 0x76, 0x9b, 0x18, 0xe1, 0xc0, - 0x27, 0x37, 0x8c, 0x50, 0x06, 0xa3, 0xbd, 0x79, 0x16, 0x4e, 0xa7, 0x95, 0x75, 0x05, 0x31, 0xf7, - 0xe4, 0xcb, 0x3b, 0x6f, 0x2a, 0x08, 0x27, 0x7a, 0xb0, 0xfc, 0x1a, 0x2c, 0x8e, 0x34, 0x3c, 0x95, - 0xa3, 0xfa, 0xdf, 0x09, 0xe7, 0x61, 0x3a, 0xd1, 0xd1, 0x3b, 0x30, 0x65, 0x58, 0x96, 0x4c, 0xa3, - 0xf0, 0x52, 0xb1, 0x13, 0x2b, 0x4b, 0x8d, 0xf9, 0x63, 0x3f, 0x31, 0x47, 0x8b, 0xd6, 0x01, 0x19, - 0x89, 0xc3, 0x99, 0x0d, 0xcf, 0x8a, 0xac, 0x24, 0x96, 0x55, 0x60, 0x75, 0x04, 0x8a, 0x33, 0x5a, - 0xe8, 0xaf, 0xc0, 0x7c, 0xf2, 0x36, 0xc9, 0x29, 0x62, 0x4f, 0xf4, 0xbf, 0xa9, 0x01, 0x1a, 0xbd, - 0x62, 0x89, 0x7c, 0x28, 0x8b, 0x1a, 0xd1, 0x14, 0x17, 0xf2, 0x2b, 0xa6, 0xa3, 0x62, 0xe2, 0xa0, - 0x4b, 0x51, 0x10, 0x60, 0x49, 0x47, 0xff, 0x73, 0x0d, 0xe2, 0x7b, 0xda, 0xe8, 0x73, 0x50, 0xb5, - 0x48, 0x60, 0xfa, 0x76, 0x3f, 0x8c, 0xbf, 0x43, 0x5e, 0x8f, 0x6b, 0xc6, 0x20, 0xac, 0xd6, 0x43, - 0x3a, 0x4c, 0x87, 0x46, 0xb0, 0xdb, 0x6a, 0x0a, 0x73, 0x91, 0x6d, 0xee, 0xf7, 0x58, 0x09, 0x16, - 0x90, 0xf8, 0x66, 0xc6, 0xc4, 0x09, 0x6e, 0x66, 0xa0, 0xed, 0x33, 0xb8, 0x86, 0x82, 0x8e, 0xbf, - 0x82, 0xa2, 0xff, 0xa7, 0x12, 0x24, 0xaf, 0xc6, 0x17, 0x1d, 0x82, 0xd1, 0x7b, 0x33, 0xa5, 0x47, - 0x76, 0x6f, 0xe6, 0x53, 0x2c, 0xaf, 0x0c, 0x4f, 0x04, 0xc6, 0x8f, 0x1f, 0xd4, 0x6c, 0x30, 0x3c, - 0x8d, 0x97, 0xac, 0x81, 0x5e, 0x62, 0x91, 0x22, 0x61, 0x64, 0x44, 0x7f, 0x3c, 0x5a, 0x16, 0x1d, - 0x5a, 0xf8, 0x50, 0xdc, 0x0c, 0x92, 0xdf, 0xcf, 0x4a, 0x31, 0x6f, 0x81, 0x3e, 0x27, 0x02, 0x8b, - 0xa6, 0x12, 0xb7, 0x97, 0xa2, 0x2b, 0x4f, 0x8b, 0x89, 0x86, 0x71, 0xb4, 0x91, 0xfe, 0xf7, 0x35, - 0x98, 0x11, 0xf7, 0x65, 0x4f, 0x10, 0x9b, 0xb4, 0x0d, 0x53, 0x4c, 0x49, 0x1f, 0x47, 0x7f, 0xe9, - 0xec, 0x78, 0x5e, 0x98, 0xb8, 0x35, 0xcc, 0x02, 0x62, 0xd8, 0xbf, 0x98, 0xa3, 0xd7, 0xbf, 0x3d, - 0x09, 0xd7, 0x44, 0x95, 0x91, 0xed, 0x59, 0x2e, 0xc1, 0x03, 0xb8, 0x28, 0x66, 0xa9, 0xe9, 0x1b, - 0xb6, 0x1b, 0x45, 0x9a, 0x16, 0x33, 0xbb, 0x58, 0x8a, 0xb7, 0x8d, 0x51, 0x74, 0x38, 0x8b, 0x06, - 0xfa, 0x79, 0xb8, 0x24, 0x8a, 0x6f, 0x12, 0xc3, 0x09, 0x77, 0x22, 0xda, 0xc5, 0x4c, 0x30, 0x76, - 0xfe, 0xb9, 0x91, 0x81, 0x0f, 0x67, 0x52, 0x61, 0x31, 0x2d, 0x02, 0xd0, 0xf0, 0x89, 0x11, 0xdd, - 0x07, 0xa3, 0x1d, 0x18, 0x23, 0xa6, 0x65, 0x23, 0x13, 0x23, 0xce, 0xa1, 0xc4, 0xfc, 0x57, 0xc6, - 0x3e, 0x33, 0x87, 0x31, 0x09, 0x7d, 0x9b, 0xdd, 0xe3, 0xa6, 0xfc, 0xcd, 0x0d, 0xd8, 0x24, 0x08, - 0xa7, 0xeb, 0xa2, 0x97, 0x61, 0x9e, 0x1d, 0xb8, 0xc5, 0xd7, 0x11, 0xa6, 0xe2, 0xbc, 0x70, 0x77, - 0x12, 0x10, 0x9c, 0xaa, 0xa9, 0xff, 0xb6, 0x06, 0xb3, 0x2a, 0x03, 0x9d, 0x20, 0x96, 0x71, 0xa0, - 0x88, 0xeb, 0x31, 0x42, 0xc2, 0x54, 0xaa, 0x27, 0x91, 0xd8, 0x0f, 0x35, 0xb8, 0x98, 0xd1, 0x86, - 0x1d, 0x4f, 0x91, 0x94, 0xe8, 0x1f, 0xe7, 0x78, 0x6a, 0x64, 0x1b, 0x91, 0xc7, 0x53, 0x69, 0x08, - 0x1e, 0xa1, 0x8b, 0xde, 0x84, 0x09, 0xd3, 0xb7, 0xc5, 0xb0, 0xbc, 0x58, 0xc8, 0x24, 0xc1, 0xad, - 0x38, 0x40, 0xb4, 0x81, 0x5b, 0x98, 0x22, 0xd4, 0xff, 0xd5, 0x04, 0x54, 0x95, 0xab, 0xf8, 0x68, - 0x63, 0x1c, 0x8b, 0x36, 0x46, 0x1f, 0x59, 0xb5, 0x1b, 0x30, 0xd1, 0xed, 0x0f, 0x0a, 0x9a, 0xb4, - 0x12, 0xdd, 0x0d, 0x8a, 0xae, 0xdb, 0x1f, 0xa0, 0x37, 0xa5, 0x91, 0x5c, 0xcc, 0x8c, 0x95, 0x37, - 0xab, 0x52, 0x86, 0x72, 0xc4, 0x9b, 0x93, 0xb9, 0xbc, 0xd9, 0x83, 0x99, 0x40, 0x58, 0xd0, 0x53, - 0xc5, 0xd3, 0x40, 0x28, 0x23, 0x2d, 0x2c, 0x66, 0xae, 0x7e, 0x47, 0x06, 0x75, 0x44, 0x83, 0x2a, - 0x00, 0x03, 0x16, 0xd5, 0xc9, 0xec, 0x8a, 0x32, 0x57, 0x00, 0x36, 0x59, 0x09, 0x16, 0x10, 0xfd, - 0x9f, 0x6b, 0x80, 0x46, 0x11, 0xa2, 0x8f, 0xc3, 0x14, 0x0b, 0x6e, 0x15, 0x0b, 0x4d, 0xb9, 0x01, - 0x6c, 0x04, 0x01, 0xe6, 0x30, 0xf4, 0x96, 0x88, 0x5c, 0x2e, 0x36, 0x31, 0x72, 0xf7, 0x16, 0x34, - 0x95, 0x50, 0xe7, 0x68, 0x7b, 0x9a, 0xc8, 0xdb, 0x9e, 0xf4, 0x3f, 0x29, 0x51, 0x8e, 0xb3, 0xdd, - 0x90, 0xb8, 0x2c, 0xd2, 0xec, 0x00, 0xc0, 0x18, 0x84, 0x1e, 0xdf, 0x8e, 0x05, 0xe3, 0xb5, 0x8a, - 0x0d, 0xae, 0x44, 0xba, 0x2a, 0x11, 0xf2, 0x13, 0x90, 0xf8, 0x37, 0x56, 0x88, 0x51, 0xd2, 0xa1, - 0xdd, 0x23, 0x6f, 0xd9, 0xae, 0xe5, 0xdd, 0x17, 0x63, 0x31, 0x2e, 0xe9, 0x7b, 0x12, 0x21, 0x27, - 0x1d, 0xff, 0xc6, 0x0a, 0x31, 0xf4, 0x65, 0x58, 0x62, 0x89, 0x25, 0x5d, 0x96, 0x92, 0x44, 0xf4, - 0xcd, 0x73, 0x9c, 0x68, 0x7f, 0x28, 0xd7, 0x9f, 0x3a, 0x1c, 0xd6, 0x96, 0x1a, 0x39, 0x75, 0x70, - 0x6e, 0x6b, 0xfd, 0x77, 0x35, 0xb8, 0x9c, 0x39, 0x14, 0xe8, 0x06, 0x2c, 0xc6, 0xc7, 0xde, 0xaa, - 0x40, 0x2b, 0xc7, 0x19, 0x76, 0x6e, 0xa5, 0x2b, 0xe0, 0xd1, 0x36, 0x68, 0x43, 0x6e, 0xea, 0xaa, - 0xc0, 0x14, 0x67, 0xe6, 0x4f, 0x0a, 0x54, 0x59, 0x32, 0x15, 0x67, 0xb5, 0xd3, 0x7f, 0x2e, 0xd1, - 0xe1, 0x78, 0xc0, 0x28, 0x2b, 0x6f, 0x91, 0xae, 0xbc, 0x01, 0x22, 0x59, 0xb9, 0x4e, 0x0b, 0x31, - 0x87, 0xa1, 0xa7, 0xd5, 0xb8, 0x5c, 0x29, 0x32, 0xa2, 0xd8, 0x5c, 0x3d, 0x04, 0xd8, 0xf0, 0x5c, - 0x3b, 0xf4, 0x7c, 0xdb, 0xed, 0xa2, 0x6d, 0x28, 0x1b, 0x22, 0xeb, 0xa9, 0x60, 0xb5, 0x2f, 0x14, - 0x32, 0x88, 0x04, 0x0e, 0x1e, 0xe7, 0x1b, 0xfd, 0xc2, 0x12, 0xb7, 0xfe, 0xcf, 0x34, 0xb8, 0x42, - 0xa5, 0x87, 0x15, 0x5d, 0xf9, 0x91, 0x57, 0x03, 0x4f, 0xb0, 0x0f, 0xf6, 0xa0, 0xea, 0xc7, 0xcd, - 0x04, 0x5f, 0xfe, 0x8c, 0x7a, 0xed, 0x50, 0x49, 0x81, 0x4c, 0x75, 0x84, 0x86, 0xef, 0x05, 0xd1, - 0xe4, 0xa4, 0x6f, 0x22, 0xca, 0xb5, 0xaa, 0xf4, 0x04, 0xab, 0xf8, 0xf5, 0x6f, 0x94, 0x00, 0xee, - 0x90, 0xf0, 0xbe, 0xe7, 0xef, 0xd2, 0x21, 0xfa, 0x50, 0x05, 0xbf, 0x3f, 0x05, 0x93, 0x7d, 0xcf, - 0x0a, 0x84, 0x38, 0x61, 0xf7, 0x2f, 0xd8, 0xc1, 0x2d, 0x2b, 0x45, 0x35, 0x98, 0x62, 0x5e, 0x5a, - 0x21, 0xb7, 0x99, 0x8a, 0x4a, 0xd5, 0x92, 0x00, 0xf3, 0x72, 0x9e, 0x43, 0x8c, 0x05, 0xa7, 0x05, - 0x42, 0xe7, 0x16, 0x39, 0xc4, 0x78, 0x19, 0x96, 0x50, 0xfd, 0x1b, 0x93, 0x90, 0x48, 0xdb, 0x1b, - 0xdb, 0xcd, 0xda, 0xa3, 0xb1, 0x9b, 0xbf, 0x0c, 0x4b, 0x8e, 0x67, 0x58, 0x75, 0xc3, 0xa1, 0x4c, - 0xef, 0x77, 0xf8, 0x74, 0x18, 0x6e, 0x57, 0xe6, 0x84, 0x65, 0x02, 0xe0, 0x76, 0x4e, 0x1d, 0x9c, - 0xdb, 0x1a, 0x85, 0x32, 0x59, 0x30, 0xcf, 0x18, 0x74, 0x7b, 0xdc, 0xa4, 0xc6, 0x2b, 0x6a, 0x58, - 0xa2, 0xdc, 0x42, 0x93, 0xf9, 0x84, 0xd1, 0x2f, 0x68, 0x70, 0x99, 0xec, 0x87, 0xc4, 0x77, 0x0d, - 0xe7, 0x9e, 0x6f, 0x6c, 0x6f, 0xdb, 0xa6, 0x08, 0x89, 0xe1, 0x93, 0xd3, 0x3e, 0x1c, 0xd6, 0x2e, - 0xaf, 0x65, 0x55, 0x78, 0x38, 0xac, 0x7d, 0x66, 0x34, 0x67, 0x77, 0x14, 0x85, 0x98, 0xd9, 0x84, - 0x31, 0x63, 0x36, 0xb9, 0xe5, 0x97, 0xa0, 0x7a, 0x8a, 0x60, 0xbf, 0x8a, 0xea, 0x43, 0xf9, 0xc7, - 0xd3, 0xa0, 0x44, 0x80, 0x9e, 0x22, 0x4f, 0xd4, 0x3f, 0xd1, 0xe0, 0x92, 0xe9, 0xd8, 0xc4, 0x0d, - 0x53, 0x81, 0xae, 0x7c, 0x61, 0x6c, 0x16, 0x0a, 0x4d, 0xed, 0x13, 0xb7, 0xd5, 0x6c, 0x78, 0xae, - 0x4b, 0xcc, 0xb0, 0x91, 0x81, 0x9c, 0x9b, 0x24, 0x59, 0x10, 0x9c, 0xd9, 0x19, 0xf6, 0x3d, 0xac, - 0xbc, 0xd5, 0x54, 0xaf, 0x29, 0x34, 0x44, 0x19, 0x96, 0x50, 0xf4, 0x3c, 0x54, 0xbb, 0xbe, 0x37, - 0xe8, 0x07, 0x0d, 0x16, 0xad, 0xc3, 0x67, 0x90, 0x05, 0x43, 0xdd, 0x88, 0x8b, 0xb1, 0x5a, 0x07, - 0x7d, 0x16, 0x66, 0xf9, 0xcf, 0xb6, 0x4f, 0xb6, 0xed, 0x7d, 0xb1, 0xdc, 0x58, 0x08, 0xc0, 0x0d, - 0xa5, 0x1c, 0x27, 0x6a, 0xa1, 0x4f, 0x42, 0xc5, 0x0e, 0x82, 0x01, 0xf1, 0x37, 0xf1, 0x6d, 0x91, - 0x8b, 0x82, 0x79, 0x3f, 0x5b, 0x51, 0x21, 0x8e, 0xe1, 0xe8, 0x57, 0x35, 0x98, 0xf7, 0xc9, 0x7b, - 0x03, 0xdb, 0x27, 0x16, 0x23, 0x1a, 0x88, 0x30, 0x5c, 0x3c, 0x5e, 0xe8, 0xef, 0x0a, 0x4e, 0x20, - 0xe5, 0x7c, 0x2e, 0x7d, 0x07, 0x49, 0x20, 0x4e, 0xf5, 0x80, 0x0e, 0x55, 0x60, 0x77, 0x5d, 0xdb, - 0xed, 0xae, 0x3a, 0xdd, 0x60, 0xa9, 0xcc, 0x96, 0x2e, 0x1b, 0xaa, 0x4e, 0x5c, 0x8c, 0xd5, 0x3a, - 0xe8, 0x45, 0x98, 0x1b, 0x04, 0x94, 0x73, 0x7b, 0x84, 0x8f, 0x6f, 0x25, 0x0e, 0xa1, 0xdb, 0x54, - 0x01, 0x38, 0x59, 0x8f, 0xda, 0x63, 0x51, 0x81, 0x18, 0x65, 0xe0, 0x37, 0xcf, 0x68, 0x3f, 0x37, - 0x13, 0x10, 0x9c, 0xaa, 0xb9, 0xbc, 0x0a, 0x17, 0x33, 0x3e, 0xf3, 0x54, 0xcb, 0xe3, 0xb7, 0x4b, - 0xf0, 0xb1, 0x63, 0xb9, 0x12, 0xfd, 0x86, 0x06, 0x55, 0xb2, 0x1f, 0xfa, 0x86, 0x0c, 0xe8, 0xa3, - 0x53, 0xb4, 0xfd, 0x48, 0x96, 0xc0, 0xca, 0x5a, 0x4c, 0x88, 0x4f, 0x9b, 0xdc, 0xee, 0x14, 0x08, - 0x56, 0xfb, 0x43, 0x55, 0x6b, 0x7e, 0x2f, 0x51, 0xf5, 0xad, 0x89, 0xec, 0xa6, 0x02, 0xb2, 0xfc, - 0x45, 0x58, 0x48, 0x63, 0x3e, 0xd5, 0x48, 0xfd, 0x7e, 0x09, 0xa6, 0xda, 0x8e, 0xe1, 0x9e, 0x47, - 0xf6, 0xec, 0xbf, 0x9a, 0xb8, 0xd4, 0x5e, 0x28, 0x53, 0x00, 0xeb, 0x6a, 0x6e, 0xc2, 0x8b, 0x6e, - 0x2a, 0xe1, 0xc5, 0x6b, 0xc5, 0x49, 0x1c, 0x9d, 0xdf, 0xe2, 0x8f, 0x34, 0xa8, 0xb0, 0x7a, 0xe7, - 0x70, 0x37, 0xfe, 0x9d, 0xe4, 0xdd, 0xf8, 0x97, 0x0a, 0x7f, 0x53, 0xce, 0x55, 0xf8, 0x1f, 0x45, - 0xdf, 0xc2, 0x6e, 0xbe, 0xff, 0xac, 0x9a, 0xd5, 0x99, 0x7f, 0xcc, 0xb3, 0x59, 0x69, 0x24, 0x6e, - 0x7b, 0xa6, 0xe1, 0xa4, 0x35, 0xb8, 0xa3, 0x53, 0x3b, 0xf7, 0xa0, 0x42, 0xc4, 0x75, 0xd1, 0xe8, - 0x63, 0x0a, 0xa9, 0xb4, 0xd1, 0x9d, 0xd3, 0x98, 0x5c, 0x54, 0x12, 0xe0, 0x98, 0x82, 0xfe, 0x6f, - 0x4b, 0x50, 0x55, 0xe6, 0xf2, 0x83, 0xc8, 0x56, 0xb1, 0x9e, 0x99, 0xf0, 0xb4, 0xc4, 0x22, 0xf6, - 0xae, 0x9c, 0x22, 0x69, 0xb2, 0x0f, 0x55, 0x33, 0x4e, 0xbc, 0x35, 0x0e, 0x73, 0x2b, 0xf9, 0xbb, - 0x44, 0xc8, 0x70, 0x5c, 0x80, 0x55, 0x22, 0xfa, 0xbf, 0x2e, 0xc1, 0x4c, 0xdb, 0xf7, 0xe8, 0x04, - 0x9f, 0x83, 0x68, 0x30, 0x12, 0xa2, 0xa1, 0xd8, 0xba, 0xe5, 0x9d, 0xcd, 0x15, 0x0e, 0x76, 0x4a, - 0x38, 0xac, 0x8e, 0x43, 0xe4, 0x68, 0xf1, 0xf0, 0x1f, 0x35, 0xa8, 0x8a, 0x9a, 0xe7, 0x20, 0x20, - 0xbe, 0x92, 0x14, 0x10, 0xaf, 0x8c, 0xf1, 0x5d, 0x39, 0x22, 0xe2, 0xd7, 0x35, 0x98, 0x13, 0x35, - 0x36, 0x48, 0x6f, 0x8b, 0xf8, 0x68, 0x1d, 0x66, 0x82, 0x01, 0x9b, 0x48, 0xf1, 0x41, 0x4f, 0xaa, - 0x42, 0xc2, 0xdf, 0x32, 0x4c, 0x96, 0xbb, 0x9b, 0x57, 0x51, 0x72, 0xcc, 0xf0, 0x02, 0x1c, 0x35, - 0xa6, 0x26, 0x9c, 0xef, 0x39, 0x23, 0x17, 0x7c, 0xb1, 0xe7, 0x10, 0xcc, 0x20, 0xd4, 0x72, 0xa2, - 0x7f, 0xa3, 0xc3, 0x23, 0x66, 0x39, 0x51, 0x70, 0x80, 0x79, 0xb9, 0xfe, 0xcd, 0x49, 0x39, 0xd8, - 0x4c, 0x82, 0xdd, 0x84, 0x8a, 0xe9, 0x13, 0x23, 0x24, 0x56, 0xfd, 0xe0, 0x24, 0x9d, 0x63, 0x5a, - 0x5c, 0x23, 0x6a, 0x81, 0xe3, 0xc6, 0x54, 0x61, 0x52, 0xcf, 0x83, 0x4a, 0xb1, 0x6e, 0x99, 0x7b, - 0x16, 0xf4, 0x05, 0x98, 0xf2, 0xee, 0xbb, 0x32, 0x10, 0xe2, 0x48, 0xc2, 0xec, 0x53, 0xee, 0xd2, - 0xda, 0x98, 0x37, 0x62, 0x19, 0x0d, 0xc4, 0x1d, 0x78, 0xae, 0xc8, 0x56, 0xb3, 0xee, 0xbf, 0x23, - 0x07, 0x66, 0x7a, 0x6c, 0x1a, 0xb8, 0x97, 0x7b, 0x3c, 0x56, 0xe6, 0x13, 0xaa, 0xe6, 0x55, 0x63, - 0x98, 0x71, 0x44, 0x82, 0x2a, 0xbe, 0x54, 0x39, 0x0b, 0xfa, 0x86, 0x49, 0x54, 0xc5, 0xf7, 0x4e, - 0x54, 0x88, 0x63, 0x38, 0x3a, 0x80, 0x2a, 0xbf, 0x99, 0xc9, 0xa5, 0xec, 0x4c, 0x71, 0x07, 0xa4, - 0xe8, 0xde, 0xbd, 0x18, 0x1b, 0x1f, 0x7a, 0xa5, 0x00, 0xab, 0xb4, 0xf4, 0x5f, 0x9e, 0x90, 0x4c, - 0x2a, 0x24, 0x7e, 0x76, 0xbe, 0x69, 0xad, 0x50, 0xde, 0xfa, 0xcf, 0xc0, 0x54, 0x7f, 0xc7, 0x08, - 0x22, 0x4e, 0x8d, 0x72, 0x00, 0x4e, 0xb5, 0x69, 0xe1, 0xc3, 0x61, 0x6d, 0x56, 0x90, 0x66, 0xbf, - 0x31, 0xaf, 0x8b, 0x06, 0x70, 0x31, 0x08, 0x0d, 0x87, 0x74, 0x6c, 0xe1, 0x2d, 0x0a, 0x42, 0xa3, - 0xd7, 0x2f, 0x90, 0xca, 0x8f, 0x1d, 0x27, 0x75, 0x46, 0x51, 0xe1, 0x2c, 0xfc, 0xe8, 0x6f, 0x68, - 0xb0, 0xc4, 0xca, 0x57, 0x07, 0xa1, 0xc7, 0xb3, 0x73, 0xc6, 0xc4, 0x4f, 0x7f, 0x98, 0xca, 0xac, - 0xfb, 0x4e, 0x0e, 0x3e, 0x9c, 0x4b, 0x49, 0xff, 0x33, 0x0d, 0xd0, 0xe8, 0x2c, 0x22, 0x07, 0xca, - 0x16, 0xd9, 0x36, 0x06, 0x4e, 0x18, 0xed, 0xc2, 0x85, 0xee, 0x43, 0xc6, 0x28, 0x63, 0xe1, 0xd8, - 0x14, 0x78, 0xb1, 0xa4, 0x80, 0x3c, 0xa8, 0xdc, 0xdf, 0xb1, 0x43, 0xe2, 0xd8, 0x41, 0x28, 0x04, - 0xe4, 0xb8, 0xe4, 0xa4, 0xda, 0xf1, 0x56, 0x84, 0x18, 0xc7, 0x34, 0xf4, 0x5f, 0x9c, 0x80, 0xf2, - 0x29, 0x5e, 0x19, 0x19, 0x00, 0x32, 0xf9, 0x91, 0x24, 0xd5, 0x55, 0xc8, 0x38, 0x5e, 0x2a, 0xa6, - 0x51, 0x34, 0x46, 0x90, 0xe1, 0x0c, 0x02, 0xe8, 0xab, 0x70, 0xc9, 0x76, 0xb7, 0x7d, 0x23, 0x08, - 0xfd, 0x81, 0x19, 0x0e, 0xfc, 0x88, 0xf0, 0x44, 0x11, 0xc2, 0xcc, 0xba, 0x6f, 0x65, 0xa0, 0xc3, - 0x99, 0x44, 0x10, 0x81, 0x99, 0xfb, 0x9e, 0xbf, 0x4b, 0xe5, 0xd7, 0x64, 0xf1, 0x54, 0xc6, 0x6f, - 0x31, 0x14, 0xb1, 0xe0, 0xe2, 0xbf, 0x03, 0x1c, 0xe1, 0xd6, 0xff, 0x58, 0x83, 0x29, 0x7e, 0xfd, - 0xe9, 0x23, 0x61, 0xda, 0xb0, 0xae, 0xe6, 0xa6, 0xe7, 0xa2, 0x16, 0x07, 0xab, 0xf1, 0x11, 0xb1, - 0x38, 0x58, 0x5f, 0x73, 0xd4, 0x89, 0x3f, 0x9e, 0x10, 0xdf, 0xc2, 0xf6, 0xeb, 0x16, 0x5c, 0x14, - 0x7a, 0xe7, 0x6d, 0x7b, 0x9b, 0x50, 0xee, 0x6a, 0x1a, 0x07, 0xfc, 0x4c, 0x68, 0x8a, 0x0b, 0xbe, - 0xc6, 0x28, 0x18, 0x67, 0xb5, 0x41, 0xff, 0x46, 0xa3, 0x3b, 0x63, 0xe8, 0xdb, 0xe6, 0x58, 0x99, - 0xc4, 0x64, 0xdf, 0x56, 0x36, 0x38, 0x32, 0x6e, 0xb0, 0x6f, 0xc6, 0x5b, 0x24, 0x2b, 0x7d, 0x38, - 0xac, 0xd5, 0x32, 0xbc, 0x81, 0x91, 0xf7, 0x9a, 0x0e, 0xec, 0x37, 0xfe, 0xf4, 0xc8, 0x2a, 0xcc, - 0x93, 0x1e, 0xf5, 0x18, 0xdd, 0x84, 0xa9, 0xc0, 0xf4, 0xfa, 0xe4, 0xa8, 0xc7, 0x74, 0xd2, 0x16, - 0x97, 0x1c, 0xe0, 0x0e, 0x6d, 0x89, 0x39, 0x82, 0xe5, 0x77, 0x61, 0x56, 0xed, 0x79, 0x86, 0x43, - 0xa0, 0xa9, 0x3a, 0x04, 0x4e, 0x7d, 0xac, 0xa6, 0x3a, 0x10, 0xfe, 0x7d, 0x09, 0xc4, 0xfb, 0x03, - 0x27, 0x38, 0x2f, 0xb0, 0xa3, 0xec, 0x49, 0x63, 0xbc, 0xb9, 0x90, 0x7e, 0xd4, 0x2c, 0x1e, 0x03, - 0x35, 0x81, 0x12, 0x72, 0x61, 0xda, 0x31, 0xb6, 0x88, 0x13, 0x65, 0xa3, 0x5f, 0x2f, 0x9e, 0x2e, - 0x9d, 0x67, 0x19, 0x0d, 0x52, 0x5e, 0x65, 0x5e, 0x88, 0x05, 0x95, 0xe5, 0x97, 0xa0, 0xaa, 0x54, - 0x3b, 0x95, 0x0f, 0xe6, 0x5b, 0x1a, 0x5c, 0x89, 0x58, 0x22, 0x79, 0x51, 0x1c, 0x3d, 0x0b, 0x65, - 0xa3, 0x6f, 0x33, 0xb7, 0xa4, 0xea, 0xd8, 0x5d, 0x6d, 0xb7, 0x58, 0x19, 0x96, 0x50, 0xf4, 0x29, - 0x28, 0x47, 0xf3, 0x24, 0x74, 0x14, 0xb9, 0xc4, 0xe5, 0x79, 0x8a, 0xac, 0x81, 0x9e, 0x51, 0xf2, - 0x41, 0x4d, 0xc5, 0x3b, 0x9a, 0x24, 0xcc, 0xcf, 0x48, 0xf5, 0x7f, 0x50, 0x82, 0x39, 0x6e, 0xcb, - 0xd7, 0x6d, 0xd7, 0xb2, 0xdd, 0xee, 0x39, 0x88, 0xd2, 0xc4, 0xbb, 0x52, 0xa5, 0xb3, 0x7a, 0x57, - 0xea, 0x16, 0x4c, 0xbf, 0x47, 0x97, 0x75, 0xc4, 0x0e, 0x27, 0x5a, 0x5d, 0x72, 0xae, 0x99, 0x44, - 0x08, 0xb0, 0x40, 0xa1, 0xff, 0x57, 0x0d, 0x16, 0x13, 0xc3, 0x72, 0x0e, 0x42, 0x79, 0x3b, 0x29, - 0x94, 0x57, 0x8b, 0xa5, 0x4b, 0x50, 0xfa, 0x9c, 0x23, 0x9c, 0x7f, 0xaf, 0x04, 0x93, 0x1d, 0x42, - 0xac, 0x73, 0x98, 0xe9, 0x77, 0x12, 0x9b, 0xe6, 0x17, 0x0a, 0xbf, 0x31, 0x90, 0x67, 0xf1, 0x6f, - 0xa7, 0x2c, 0xfe, 0x2f, 0x16, 0xa6, 0x70, 0xb4, 0xb9, 0xff, 0x9d, 0x12, 0x00, 0xad, 0xc6, 0x5f, - 0xf6, 0x11, 0x31, 0x7a, 0xf1, 0xdb, 0x6f, 0x95, 0x0f, 0xcb, 0x8b, 0x6d, 0xba, 0x7c, 0x3f, 0x66, - 0x22, 0xf6, 0x27, 0x27, 0xdf, 0x8e, 0x49, 0xae, 0xbe, 0xc9, 0x33, 0x5a, 0x7d, 0xfa, 0x3a, 0xb0, - 0xf4, 0xb2, 0xcd, 0x3b, 0x1d, 0xf4, 0x0a, 0xcc, 0xd9, 0xfc, 0xb0, 0xae, 0xa9, 0xe6, 0x4c, 0x94, - 0x39, 0x44, 0x5a, 0x2a, 0x10, 0x27, 0xeb, 0xea, 0xdf, 0xd7, 0x80, 0x3d, 0xab, 0x74, 0x0e, 0xeb, - 0xed, 0xaf, 0x24, 0xd7, 0xdb, 0xe7, 0x8b, 0xf2, 0x4e, 0xce, 0x32, 0xfb, 0x9d, 0x12, 0xb0, 0x4c, - 0xd5, 0xe2, 0x38, 0x5b, 0x39, 0x21, 0xd6, 0x72, 0x4e, 0x88, 0xaf, 0x89, 0x03, 0xe6, 0x94, 0xab, - 0x44, 0x39, 0x64, 0xfe, 0x94, 0x72, 0x86, 0x3c, 0x91, 0x64, 0xbc, 0xd1, 0x73, 0x64, 0xf4, 0x00, - 0xe6, 0x82, 0x1d, 0xcf, 0x0b, 0x23, 0xa3, 0x49, 0xcc, 0xf6, 0x6a, 0xe1, 0x20, 0xcc, 0xe8, 0x53, - 0xf8, 0xf1, 0x50, 0x47, 0xc5, 0x8d, 0x93, 0xa4, 0xd0, 0x0a, 0xc0, 0x96, 0xe3, 0x99, 0xbb, 0x8d, - 0x56, 0x13, 0x47, 0xa1, 0x7a, 0x2c, 0x06, 0xa5, 0x2e, 0x4b, 0xb1, 0x52, 0x43, 0xff, 0x43, 0x8d, - 0x8f, 0xd6, 0x29, 0x0c, 0xab, 0x73, 0x5c, 0x57, 0x3f, 0x95, 0x5a, 0x57, 0x79, 0xef, 0x32, 0x7d, - 0x4f, 0x7c, 0x85, 0x7c, 0xf4, 0xc4, 0x81, 0x39, 0x47, 0x4d, 0x60, 0x2e, 0xd8, 0xb8, 0x50, 0xee, - 0x73, 0xf1, 0xd4, 0x97, 0x52, 0x84, 0x93, 0xc8, 0xd1, 0x8b, 0x30, 0x17, 0x75, 0x5c, 0x7d, 0xd0, - 0x95, 0x35, 0x6c, 0xab, 0x00, 0x9c, 0xac, 0xa7, 0xbf, 0x01, 0x9f, 0xe0, 0xdd, 0x66, 0x91, 0xb2, - 0x6b, 0xfb, 0x26, 0x09, 0x82, 0x86, 0xd1, 0x37, 0x4c, 0xaa, 0x0a, 0xb2, 0x0b, 0x66, 0xdc, 0x47, - 0x72, 0x8a, 0x47, 0x97, 0xff, 0xbf, 0x06, 0x35, 0x05, 0x67, 0x22, 0x76, 0x20, 0x62, 0xd0, 0x6f, - 0x6b, 0x50, 0x35, 0x5c, 0xd7, 0x0b, 0x0d, 0xd5, 0x65, 0x6f, 0x15, 0x7f, 0x8a, 0x26, 0x97, 0xd4, - 0xca, 0x6a, 0x4c, 0x26, 0x75, 0x38, 0xa7, 0x40, 0xb0, 0xda, 0x9b, 0xe5, 0x2f, 0xc2, 0x42, 0xba, - 0xd5, 0xa9, 0x94, 0xbe, 0x3a, 0x5c, 0x56, 0x7a, 0x25, 0xae, 0xea, 0x50, 0x0d, 0xeb, 0x39, 0x98, - 0xd9, 0xb3, 0x03, 0x3b, 0xba, 0xf2, 0xa9, 0x8c, 0xe2, 0x9b, 0xbc, 0x18, 0x47, 0x70, 0xfd, 0x75, - 0xb8, 0xa8, 0xe2, 0x60, 0x4b, 0xec, 0x4e, 0xe7, 0x34, 0xf3, 0xb0, 0x01, 0xd7, 0x14, 0x0c, 0x99, - 0xf7, 0x55, 0x4e, 0x83, 0xee, 0xeb, 0xd3, 0x11, 0x87, 0x8b, 0xa0, 0xea, 0xef, 0x69, 0xf0, 0x04, - 0xc9, 0x63, 0x18, 0xc1, 0xee, 0x5f, 0x1e, 0x73, 0x46, 0x73, 0x19, 0x52, 0x24, 0x04, 0xc9, 0x03, - 0xe3, 0xfc, 0x9e, 0xa1, 0x03, 0x80, 0x40, 0x4e, 0xc9, 0x38, 0xf1, 0x76, 0x99, 0x73, 0x2c, 0x92, - 0xdf, 0xc9, 0xdf, 0x58, 0x21, 0x86, 0xde, 0x83, 0x72, 0x20, 0x66, 0x72, 0x9c, 0xeb, 0x74, 0x19, - 0x8c, 0x21, 0x42, 0x8a, 0xc4, 0x2f, 0x2c, 0xc9, 0xa0, 0xdf, 0xd2, 0xe0, 0x92, 0x93, 0xb1, 0x2e, - 0xc4, 0x96, 0xd0, 0x79, 0x04, 0x4b, 0x8e, 0x3b, 0x8d, 0xb2, 0x20, 0x38, 0xb3, 0x2b, 0xe8, 0x9f, - 0xe6, 0xde, 0xdd, 0xe2, 0x51, 0xae, 0xf7, 0xc6, 0xec, 0xe4, 0x59, 0x5d, 0xe3, 0xfa, 0xfd, 0x69, - 0xae, 0xa2, 0x30, 0xdf, 0xc6, 0x16, 0x4c, 0x6f, 0x31, 0xa5, 0x50, 0xb0, 0x7a, 0x61, 0x0d, 0x54, - 0x3c, 0x74, 0xcb, 0x34, 0x36, 0xfe, 0x3f, 0x16, 0x98, 0xd1, 0xdb, 0x30, 0x61, 0xb9, 0x51, 0x1e, - 0xfc, 0x57, 0x8a, 0x12, 0xa0, 0xec, 0x21, 0x43, 0x12, 0x29, 0x77, 0x50, 0xa4, 0xc8, 0x85, 0xb2, - 0x2b, 0x76, 0x75, 0xc1, 0x8b, 0x85, 0x5f, 0x02, 0x93, 0xda, 0x81, 0xd4, 0x49, 0xa2, 0x12, 0x2c, - 0x69, 0x50, 0x7a, 0x52, 0x75, 0x9e, 0x1c, 0x8f, 0xde, 0x89, 0x9e, 0x4b, 0x6e, 0xab, 0xda, 0xee, - 0x29, 0x1e, 0xa1, 0x9d, 0xcb, 0xb5, 0x33, 0x09, 0x4c, 0x87, 0x06, 0x3b, 0xe1, 0x9e, 0x2e, 0x7e, - 0xc2, 0x4c, 0xfb, 0x7f, 0x8f, 0x62, 0x89, 0x55, 0x09, 0xf6, 0x33, 0xc0, 0x02, 0x39, 0x65, 0x2c, - 0xfe, 0x48, 0x99, 0x38, 0x62, 0x29, 0xcc, 0x58, 0x3c, 0x03, 0x34, 0x67, 0x2c, 0xfe, 0x3f, 0x16, - 0x98, 0xd1, 0xbb, 0x54, 0x9d, 0xe4, 0x72, 0x5c, 0xe4, 0xef, 0x79, 0x7d, 0xcc, 0x35, 0x16, 0x44, - 0x41, 0x8d, 0xfc, 0x17, 0x96, 0xf8, 0xf5, 0x7f, 0x39, 0xc1, 0x4d, 0x28, 0x71, 0x72, 0xb3, 0x0d, - 0xe5, 0x08, 0xeb, 0x38, 0xc1, 0xaf, 0x51, 0x8e, 0x61, 0x4e, 0x36, 0xfa, 0x85, 0x25, 0x6e, 0xd4, - 0xc8, 0x8a, 0x33, 0x8e, 0xf3, 0x9f, 0x9d, 0x2c, 0xc6, 0x38, 0x19, 0x58, 0x30, 0x71, 0x1e, 0x81, - 0x05, 0x67, 0xf9, 0x22, 0xf3, 0xab, 0x70, 0x21, 0x3a, 0xf7, 0xb7, 0x08, 0x73, 0xef, 0x89, 0x88, - 0x38, 0x76, 0xf3, 0xa6, 0x91, 0x04, 0xe1, 0x74, 0x5d, 0xfd, 0x16, 0x54, 0x24, 0xbb, 0xa2, 0xa7, - 0x15, 0x05, 0x28, 0x16, 0x27, 0xb7, 0xc8, 0x01, 0xd7, 0x86, 0x6a, 0x09, 0x6d, 0x88, 0xdb, 0x38, - 0x6f, 0xd2, 0x02, 0xa1, 0x18, 0xe9, 0xff, 0x4b, 0xe3, 0x6c, 0x20, 0xb2, 0x9e, 0x1b, 0x50, 0xed, - 0xf1, 0xbc, 0x2b, 0x2c, 0xdf, 0x5e, 0xb1, 0xab, 0x1e, 0xec, 0xd4, 0x70, 0x23, 0x46, 0x83, 0x55, - 0x9c, 0xe8, 0xfe, 0x68, 0x5e, 0xfe, 0xf5, 0xf1, 0xd6, 0xd2, 0x89, 0xd3, 0xf3, 0xa3, 0xd1, 0x36, - 0x6a, 0x16, 0x74, 0xed, 0xe8, 0x2c, 0xe8, 0xc7, 0xe7, 0xc6, 0xd6, 0xbf, 0xab, 0x41, 0x66, 0x1e, - 0x4c, 0xa4, 0xc3, 0x34, 0x8f, 0x55, 0x54, 0x1f, 0x2c, 0xe0, 0x81, 0x8c, 0x58, 0x40, 0x90, 0x0f, - 0x97, 0x44, 0x24, 0xe0, 0x2d, 0x72, 0x10, 0xa7, 0xca, 0x17, 0xfb, 0xcc, 0xc9, 0x63, 0x82, 0x58, - 0x3e, 0x86, 0x4e, 0x0a, 0x13, 0xce, 0xc4, 0xcd, 0x82, 0xd1, 0x98, 0x7a, 0xf2, 0xd1, 0x38, 0xb1, - 0x61, 0x5d, 0x7d, 0xb4, 0xc1, 0x68, 0x9c, 0xc4, 0xf1, 0xc1, 0x68, 0xac, 0xde, 0x47, 0xe4, 0x68, - 0x88, 0xf5, 0x35, 0xc7, 0x2d, 0xf2, 0x7d, 0x0d, 0x16, 0x47, 0x6e, 0x74, 0x9e, 0xe8, 0x60, 0xe1, - 0xdc, 0xac, 0xfd, 0x67, 0xd2, 0x19, 0xe7, 0xab, 0x99, 0x17, 0xbd, 0xdf, 0x82, 0xb9, 0x84, 0x57, - 0x44, 0x5e, 0x10, 0xd0, 0x32, 0x2f, 0x08, 0xa8, 0xf1, 0xff, 0xa5, 0x23, 0xe3, 0xff, 0x0f, 0x67, - 0xc5, 0x74, 0x33, 0x0d, 0xf3, 0x1d, 0x98, 0x66, 0x51, 0xfa, 0xd1, 0x8b, 0x1b, 0x2f, 0x17, 0x8e, - 0xfe, 0x0f, 0xb8, 0x18, 0xe0, 0xff, 0x63, 0x81, 0x15, 0x35, 0x61, 0xc1, 0x54, 0x5e, 0x25, 0x56, - 0xde, 0x38, 0x97, 0x77, 0x02, 0x1b, 0x29, 0x38, 0x1e, 0x69, 0x81, 0x30, 0xd7, 0x51, 0xf9, 0x42, - 0x78, 0xb1, 0xe0, 0x9b, 0x19, 0x3c, 0xeb, 0x8a, 0xd4, 0x4d, 0xdf, 0x03, 0x20, 0xd1, 0xc4, 0x45, - 0x07, 0xc9, 0xaf, 0x16, 0xbb, 0xed, 0x28, 0xa7, 0x3f, 0x92, 0x18, 0xb2, 0x28, 0xc0, 0x0a, 0x11, - 0xe4, 0x43, 0x75, 0x27, 0x4e, 0xc8, 0x2f, 0x14, 0xc6, 0xd7, 0xc6, 0x7c, 0x0c, 0x80, 0x6f, 0x50, - 0x4a, 0x01, 0x56, 0x89, 0x20, 0x3f, 0xf1, 0x02, 0xe6, 0x18, 0x09, 0xa4, 0x63, 0x5d, 0xe6, 0xd8, - 0x07, 0x9d, 0x7d, 0x00, 0x57, 0x5e, 0xb3, 0x19, 0x47, 0xc3, 0x8c, 0x2f, 0xeb, 0xc4, 0x34, 0xe3, - 0x32, 0xac, 0x50, 0xa1, 0x63, 0xdb, 0x8b, 0xaf, 0x56, 0x09, 0x85, 0xf3, 0xb5, 0x31, 0xaf, 0xb8, - 0x89, 0xcd, 0x3f, 0x2e, 0xc0, 0x2a, 0x11, 0xe4, 0x02, 0xf4, 0xe4, 0x8d, 0x2b, 0x91, 0x03, 0xa4, - 0xd0, 0x77, 0xc6, 0xf7, 0xb6, 0xb8, 0x69, 0x1f, 0xff, 0xc6, 0x0a, 0x05, 0xaa, 0x51, 0x4b, 0xf3, - 0x06, 0x8a, 0xab, 0xb5, 0x27, 0x32, 0x6d, 0x3e, 0x17, 0x6b, 0x12, 0x55, 0xb6, 0x5e, 0x9f, 0x54, - 0xb4, 0x88, 0x87, 0xc3, 0xda, 0x2c, 0x93, 0x21, 0x23, 0x5a, 0x45, 0xec, 0xcb, 0x9c, 0x3d, 0xca, - 0x97, 0x89, 0x6e, 0xc0, 0x62, 0xa0, 0x9e, 0x26, 0x31, 0xc1, 0x30, 0xc7, 0x9a, 0xc8, 0x1b, 0x7a, - 0x9d, 0x74, 0x05, 0x3c, 0xda, 0x86, 0x0b, 0x3e, 0x62, 0xb1, 0xf6, 0xf3, 0xaa, 0xe0, 0xe3, 0x65, - 0x58, 0x42, 0x47, 0x9e, 0xa6, 0xbe, 0x70, 0x4e, 0x4f, 0x53, 0x7f, 0x55, 0x7d, 0x0c, 0x6c, 0xa1, - 0x78, 0x58, 0x41, 0xf6, 0x2d, 0xbb, 0x63, 0x1e, 0x04, 0x1b, 0x24, 0x03, 0xea, 0x16, 0xcf, 0x24, - 0x82, 0x49, 0x7a, 0x37, 0x73, 0x83, 0xe9, 0xbe, 0x5b, 0x86, 0xaa, 0xa2, 0x7b, 0x7c, 0x10, 0xc1, - 0xd3, 0x21, 0x54, 0x4d, 0xcf, 0x0d, 0x42, 0xdf, 0x50, 0x02, 0xc6, 0xc7, 0xa4, 0x29, 0x3f, 0xbc, - 0x11, 0x63, 0xc6, 0x2a, 0x19, 0xba, 0x44, 0xa5, 0xe5, 0x39, 0x71, 0x06, 0x96, 0xa7, 0x5c, 0xa2, - 0x19, 0xd6, 0xe7, 0x67, 0x01, 0x22, 0x49, 0x2f, 0x5f, 0x5b, 0x92, 0x19, 0x78, 0x5a, 0xc1, 0x4d, - 0x09, 0xc3, 0x4a, 0x3d, 0xf4, 0x00, 0xe6, 0x1c, 0x35, 0xfb, 0x86, 0xd8, 0x86, 0x0a, 0x9d, 0xdb, - 0x24, 0xd2, 0x78, 0x44, 0x47, 0x08, 0x4a, 0x11, 0x4e, 0x92, 0xa2, 0x6c, 0xe0, 0x44, 0x19, 0x63, - 0xc6, 0xf2, 0x70, 0xc8, 0xbc, 0x33, 0x31, 0x1b, 0xc8, 0xa2, 0x00, 0x2b, 0x44, 0x72, 0x4c, 0xdd, - 0x99, 0x42, 0xa6, 0xee, 0x00, 0x2e, 0xfa, 0x24, 0xf4, 0x0f, 0x1a, 0x07, 0x26, 0x7b, 0x53, 0xc5, - 0x0f, 0x59, 0xba, 0x96, 0x72, 0xb1, 0x78, 0x4c, 0x3c, 0x8a, 0x0a, 0x67, 0xe1, 0x4f, 0x88, 0xb8, - 0xca, 0x91, 0x22, 0xee, 0x73, 0x50, 0x0d, 0x89, 0xb9, 0xe3, 0xda, 0xa6, 0xe1, 0xb4, 0x9a, 0xe2, - 0xce, 0x54, 0xbc, 0x5a, 0x63, 0x10, 0x56, 0xeb, 0xa1, 0x3a, 0x4c, 0x0c, 0x6c, 0x4b, 0xc8, 0xf9, - 0x9f, 0x96, 0x4f, 0x6b, 0xb5, 0x9a, 0x0f, 0x87, 0xb5, 0x8f, 0xc5, 0xf1, 0x47, 0xf2, 0xab, 0xae, - 0xf7, 0x77, 0xbb, 0xd7, 0xc3, 0x83, 0x3e, 0x09, 0x56, 0x36, 0x5b, 0x4d, 0x4c, 0x1b, 0x67, 0xb9, - 0x01, 0x66, 0x4f, 0xe1, 0x06, 0xb8, 0x0d, 0x10, 0x0b, 0x93, 0xb1, 0xfd, 0x00, 0x3f, 0x99, 0x82, - 0xcb, 0xe3, 0x1e, 0x46, 0xb0, 0xbc, 0x26, 0x2c, 0xd9, 0x32, 0x7b, 0x15, 0xfe, 0xee, 0xdd, 0x8d, - 0xf8, 0xe1, 0xf5, 0x52, 0xf1, 0xbc, 0x26, 0x6b, 0x99, 0x18, 0x71, 0x0e, 0x25, 0xd4, 0x80, 0xc5, - 0x28, 0xe1, 0x33, 0x36, 0x42, 0x52, 0x1f, 0xf8, 0x41, 0x28, 0xa2, 0x6e, 0x98, 0x87, 0x69, 0x2d, - 0x0d, 0xc4, 0xa3, 0xf5, 0xd3, 0x48, 0x78, 0xe2, 0xe7, 0x49, 0xf6, 0x2e, 0xce, 0x08, 0x12, 0x9e, - 0xfd, 0x79, 0xb4, 0xbe, 0x8a, 0x44, 0xbe, 0xa3, 0x23, 0x5e, 0xa0, 0x4f, 0x20, 0x89, 0x1f, 0xd9, - 0x19, 0xad, 0x8f, 0x2c, 0x78, 0xca, 0x27, 0xa6, 0xd7, 0xeb, 0x11, 0xd7, 0xe2, 0x19, 0xb1, 0x0c, - 0xbf, 0x6b, 0xbb, 0xeb, 0xbe, 0xc1, 0x2a, 0x8a, 0xc7, 0x7a, 0xae, 0x1d, 0x0e, 0x6b, 0x4f, 0xe1, - 0x23, 0xea, 0xe1, 0x23, 0xb1, 0xa0, 0x1e, 0x5c, 0x18, 0xb0, 0x44, 0x00, 0xbe, 0x7c, 0xd2, 0x7e, - 0xa6, 0x78, 0x9e, 0xce, 0xcd, 0x24, 0x2a, 0x9c, 0xc6, 0x8d, 0x0e, 0xa8, 0x58, 0x10, 0xdd, 0x51, - 0x48, 0x96, 0x8b, 0x67, 0xfe, 0xc1, 0xa3, 0xe8, 0x70, 0x16, 0x0d, 0xfd, 0x1f, 0x69, 0x20, 0xdc, - 0xae, 0xd4, 0x3e, 0x54, 0x8c, 0xdc, 0xf2, 0x07, 0xff, 0xbc, 0xdf, 0x7d, 0x10, 0x08, 0x58, 0xba, - 0x95, 0x13, 0x25, 0xeb, 0x38, 0xfe, 0xbd, 0xb6, 0x38, 0x5d, 0xc8, 0x44, 0x6e, 0xba, 0x90, 0xef, - 0x69, 0x90, 0x7e, 0x30, 0x85, 0x5a, 0xdd, 0x22, 0xa6, 0x5b, 0x44, 0x86, 0xf2, 0x37, 0x21, 0x79, - 0x11, 0x8e, 0x60, 0x49, 0x5d, 0x6d, 0x8c, 0x10, 0xd0, 0xec, 0x70, 0xbc, 0xa3, 0x75, 0x35, 0xfd, - 0x47, 0xf3, 0x30, 0xcd, 0xa3, 0x90, 0xa9, 0xec, 0xc9, 0x38, 0xbb, 0xbe, 0x55, 0x3c, 0xce, 0xb9, - 0xc0, 0x11, 0x75, 0xe2, 0x56, 0x78, 0xe9, 0xc8, 0x5b, 0xe1, 0x98, 0xe7, 0xec, 0x19, 0xc3, 0x3e, - 0x6f, 0xe0, 0x96, 0x48, 0x13, 0x2b, 0xf2, 0xf5, 0xa0, 0x30, 0x61, 0xb8, 0x4e, 0x16, 0xcf, 0x46, - 0xc4, 0x07, 0x40, 0x31, 0x5f, 0xe7, 0x8f, 0x30, 0x5d, 0xe3, 0xb0, 0xcf, 0xa9, 0xe2, 0xce, 0x5c, - 0x31, 0xe4, 0x27, 0x08, 0xfb, 0x94, 0x1c, 0x3f, 0x9d, 0xcb, 0xf1, 0xdb, 0x30, 0x23, 0xe4, 0x86, - 0x10, 0x62, 0xaf, 0x8c, 0x91, 0x8f, 0x47, 0xb9, 0xa7, 0xc3, 0x0b, 0x70, 0x84, 0x9c, 0xee, 0x8c, - 0x3d, 0x63, 0xdf, 0xee, 0x0d, 0x7a, 0x4c, 0x72, 0x4d, 0xa9, 0x55, 0x59, 0x31, 0x8e, 0xe0, 0xac, - 0x2a, 0xf7, 0x81, 0x33, 0x7d, 0x44, 0xad, 0x2a, 0xd2, 0x9c, 0x47, 0x70, 0xf4, 0x36, 0x94, 0x7b, - 0xc6, 0x7e, 0x67, 0xe0, 0x77, 0x89, 0x30, 0x59, 0xf3, 0x1d, 0xb1, 0x83, 0xd0, 0x76, 0x56, 0xa8, - 0x16, 0x1d, 0xfa, 0x2b, 0x2d, 0x37, 0xbc, 0xeb, 0x77, 0x42, 0x5f, 0xa6, 0x1e, 0xd9, 0x10, 0x58, - 0xb0, 0xc4, 0x87, 0x1c, 0x98, 0xef, 0x19, 0xfb, 0x9b, 0xae, 0x21, 0xb3, 0x31, 0x57, 0x0b, 0x52, - 0x60, 0x7e, 0xbb, 0x8d, 0x04, 0x2e, 0x9c, 0xc2, 0x9d, 0xe1, 0x22, 0x9c, 0x7d, 0x54, 0x2e, 0xc2, - 0x55, 0x79, 0x08, 0x38, 0xc7, 0x98, 0xf0, 0x89, 0x2c, 0x6f, 0xf9, 0xd1, 0x07, 0x7c, 0xef, 0xc8, - 0x03, 0xbe, 0xf9, 0xe2, 0x7e, 0xbd, 0x23, 0x0e, 0xf7, 0x06, 0x50, 0xb5, 0xe4, 0xf3, 0xb2, 0xc1, - 0xd2, 0x85, 0xe2, 0x76, 0x65, 0xfc, 0x4a, 0xad, 0x92, 0x2b, 0x31, 0x46, 0x8d, 0x55, 0x3a, 0xe8, - 0x2e, 0xcf, 0xd6, 0xeb, 0x90, 0x30, 0xae, 0xc2, 0xf4, 0xe2, 0x05, 0xee, 0x3a, 0x88, 0x92, 0xeb, - 0x8e, 0x54, 0xc0, 0xd9, 0xed, 0xa8, 0x2a, 0xc9, 0x23, 0xca, 0x17, 0xe3, 0xeb, 0x81, 0x89, 0x38, - 0xf0, 0x5f, 0xd2, 0x60, 0x81, 0xbf, 0xa2, 0xd0, 0xf0, 0x7a, 0x7d, 0xcf, 0x25, 0x74, 0x5a, 0x10, - 0x1b, 0xd3, 0x2f, 0x15, 0x97, 0x0d, 0x9d, 0x14, 0x46, 0x71, 0xcc, 0x91, 0x2a, 0xc5, 0x23, 0x94, - 0xd1, 0xbf, 0xd0, 0x60, 0xa9, 0x97, 0x93, 0x8a, 0x70, 0xe9, 0x62, 0xf1, 0x48, 0x86, 0xe3, 0xd2, - 0x1b, 0xf2, 0x97, 0x5d, 0x8e, 0xab, 0x85, 0x73, 0xfb, 0x36, 0x6e, 0xbc, 0xd3, 0x38, 0xf1, 0xf1, - 0x3f, 0x0f, 0x0b, 0xe9, 0x3d, 0x40, 0xcd, 0x2f, 0xac, 0x3d, 0xd2, 0xfc, 0xc2, 0xfa, 0xab, 0x70, - 0x25, 0x7b, 0xce, 0xa9, 0x4a, 0xc4, 0x12, 0x75, 0x0b, 0x4b, 0x24, 0xce, 0x9e, 0x43, 0x0b, 0x31, - 0x87, 0xd5, 0x3f, 0xfd, 0x83, 0x1f, 0x5f, 0x7d, 0xec, 0x87, 0x3f, 0xbe, 0xfa, 0xd8, 0xfb, 0x3f, - 0xbe, 0xfa, 0xd8, 0xd7, 0x0f, 0xaf, 0x6a, 0x3f, 0x38, 0xbc, 0xaa, 0xfd, 0xf0, 0xf0, 0xaa, 0xf6, - 0xfe, 0xe1, 0x55, 0xed, 0x7f, 0x1c, 0x5e, 0xd5, 0x7e, 0xe5, 0x7f, 0x5e, 0x7d, 0xec, 0xed, 0x19, - 0xd1, 0xa3, 0xbf, 0x08, 0x00, 0x00, 0xff, 0xff, 0xce, 0x35, 0xef, 0x0e, 0xe6, 0xa2, 0x00, 0x00, + 0x75, 0x18, 0x7b, 0xf6, 0x6b, 0xf6, 0xcd, 0x7e, 0xd6, 0x7d, 0x70, 0xb9, 0x24, 0x6f, 0x4e, 0x2d, + 0x51, 0x20, 0x23, 0x69, 0xcf, 0xa4, 0x24, 0x53, 0x24, 0x45, 0x91, 0x3b, 0x33, 0x7b, 0x77, 0xa3, + 0xbb, 0xdd, 0x1b, 0xd6, 0xdc, 0x1e, 0x25, 0x3a, 0x61, 0xd4, 0xdb, 0x5d, 0x3b, 0xdb, 0xdc, 0x9e, + 0xee, 0x61, 0x77, 0xcf, 0xde, 0xee, 0xc9, 0x81, 0x14, 0x21, 0xb2, 0xf3, 0xe1, 0x38, 0x86, 0x63, + 0x45, 0x88, 0x95, 0xc0, 0x32, 0x82, 0xc4, 0x08, 0x1c, 0xc8, 0x0e, 0x12, 0x19, 0x09, 0x92, 0x00, + 0x86, 0x8d, 0x40, 0xb2, 0x91, 0x00, 0x42, 0x10, 0x21, 0x0a, 0x12, 0xaf, 0xa2, 0x0d, 0x20, 0x24, + 0x48, 0xfe, 0x19, 0xf9, 0x73, 0x30, 0x10, 0xa3, 0x3e, 0xba, 0xba, 0xba, 0xa7, 0x7b, 0x77, 0xb6, + 0x67, 0xf7, 0x48, 0xfe, 0xda, 0x9d, 0x7a, 0x55, 0xef, 0x55, 0x57, 0xbd, 0x7a, 0xf5, 0xde, 0xab, + 0x57, 0xaf, 0xa0, 0xd6, 0xb1, 0xc3, 0x9d, 0xfe, 0xd6, 0x8a, 0xe9, 0x75, 0xaf, 0x75, 0x0c, 0xdf, + 0x22, 0x2e, 0xf1, 0xe3, 0x7f, 0x7a, 0xbb, 0x9d, 0x6b, 0x46, 0xcf, 0x0e, 0xae, 0x99, 0x9e, 0x4f, + 0xae, 0xed, 0x3d, 0xbf, 0x45, 0x42, 0xe3, 0xf9, 0x6b, 0x1d, 0x0a, 0x33, 0x42, 0x62, 0xad, 0xf4, + 0x7c, 0x2f, 0xf4, 0xd0, 0x0b, 0x31, 0x8e, 0x95, 0xa8, 0x69, 0xfc, 0x4f, 0x6f, 0xb7, 0xb3, 0x42, + 0x71, 0xac, 0x50, 0x1c, 0x2b, 0x02, 0xc7, 0xf2, 0x27, 0x54, 0xba, 0x5e, 0xc7, 0xbb, 0xc6, 0x50, + 0x6d, 0xf5, 0xb7, 0xd9, 0x2f, 0xf6, 0x83, 0xfd, 0xc7, 0x49, 0x2c, 0x3f, 0xb7, 0xfb, 0x99, 0x60, + 0xc5, 0xf6, 0x68, 0x67, 0xae, 0x19, 0xfd, 0xd0, 0x0b, 0x4c, 0xc3, 0xb1, 0xdd, 0xce, 0xb5, 0xbd, + 0x81, 0xde, 0x2c, 0xeb, 0x4a, 0x55, 0xd1, 0xed, 0x63, 0xeb, 0xf8, 0x5b, 0x86, 0x99, 0x55, 0xe7, + 0x53, 0x71, 0x9d, 0xae, 0x61, 0xee, 0xd8, 0x2e, 0xf1, 0x0f, 0xa2, 0x01, 0xb9, 0xe6, 0x93, 0xc0, + 0xeb, 0xfb, 0x26, 0x39, 0x55, 0xab, 0xe0, 0x5a, 0x97, 0x84, 0x46, 0x16, 0xad, 0x6b, 0x79, 0xad, + 0xfc, 0xbe, 0x1b, 0xda, 0xdd, 0x41, 0x32, 0x3f, 0x7b, 0x52, 0x83, 0xc0, 0xdc, 0x21, 0x5d, 0x63, + 0xa0, 0xdd, 0x27, 0xf3, 0xda, 0xf5, 0x43, 0xdb, 0xb9, 0x66, 0xbb, 0x61, 0x10, 0xfa, 0xe9, 0x46, + 0xfa, 0x0b, 0x30, 0xb1, 0x6a, 0x59, 0x9e, 0x8b, 0x9e, 0x83, 0x29, 0xe2, 0x1a, 0x5b, 0x0e, 0xb1, + 0x96, 0xb4, 0xab, 0xda, 0xb3, 0xe5, 0xda, 0xfc, 0xf7, 0x0f, 0xab, 0x8f, 0x1d, 0x1d, 0x56, 0xa7, + 0xd6, 0x78, 0x31, 0x8e, 0xe0, 0xfa, 0x37, 0x4a, 0x30, 0xc9, 0x1a, 0x05, 0xe8, 0x57, 0x35, 0xb8, + 0xb0, 0xdb, 0xdf, 0x22, 0xbe, 0x4b, 0x42, 0x12, 0x34, 0x8c, 0x60, 0x67, 0xcb, 0x33, 0x7c, 0x8e, + 0xa2, 0xf2, 0xc2, 0x8d, 0x95, 0xd3, 0x73, 0xcf, 0xca, 0xad, 0x41, 0x74, 0xb5, 0xc7, 0x8f, 0x0e, + 0xab, 0x17, 0x32, 0x00, 0x38, 0x8b, 0x38, 0xda, 0x83, 0x19, 0xb7, 0x63, 0xbb, 0xfb, 0x4d, 0xb7, + 0xe3, 0x93, 0x20, 0x58, 0x2a, 0xb1, 0xce, 0xbc, 0x5e, 0xa4, 0x33, 0x1b, 0x0a, 0x9e, 0xda, 0xc2, + 0xd1, 0x61, 0x75, 0x46, 0x2d, 0xc1, 0x09, 0x3a, 0xfa, 0x2f, 0x68, 0x30, 0xbf, 0x6a, 0x75, 0xed, + 0x20, 0xb0, 0x3d, 0xb7, 0xe5, 0xf4, 0x3b, 0xb6, 0x8b, 0xae, 0xc2, 0xb8, 0x6b, 0x74, 0x09, 0x1b, + 0x90, 0xe9, 0xda, 0x8c, 0x18, 0xd3, 0xf1, 0x0d, 0xa3, 0x4b, 0x30, 0x83, 0xa0, 0x37, 0x60, 0xd2, + 0xf4, 0xdc, 0x6d, 0xbb, 0x23, 0xfa, 0xf9, 0x89, 0x15, 0x3e, 0x8f, 0x2b, 0xea, 0x3c, 0xb2, 0xee, + 0x89, 0xf9, 0x5f, 0xc1, 0xc6, 0xfd, 0xb5, 0xfd, 0x90, 0xb8, 0x94, 0x4c, 0x0d, 0x8e, 0x0e, 0xab, + 0x93, 0x75, 0x86, 0x00, 0x0b, 0x44, 0xfa, 0x75, 0x28, 0xaf, 0x3a, 0xc4, 0x0f, 0x6d, 0xb7, 0x83, + 0x5e, 0x86, 0x39, 0xd2, 0x35, 0x6c, 0x07, 0x13, 0x93, 0xd8, 0x7b, 0xc4, 0x0f, 0x96, 0xb4, 0xab, + 0x63, 0xcf, 0x4e, 0xd7, 0xd0, 0xd1, 0x61, 0x75, 0x6e, 0x2d, 0x01, 0xc1, 0xa9, 0x9a, 0xfa, 0x5f, + 0xd5, 0xa0, 0xb2, 0xda, 0xb7, 0xec, 0x90, 0xe3, 0x47, 0x3e, 0x54, 0x0c, 0xfa, 0xb3, 0xe5, 0x39, + 0xb6, 0x79, 0x20, 0x26, 0xf9, 0xb5, 0x22, 0xe3, 0xba, 0x1a, 0xa3, 0xa9, 0xcd, 0x1f, 0x1d, 0x56, + 0x2b, 0x4a, 0x01, 0x56, 0x89, 0xe8, 0x3b, 0xa0, 0xc2, 0xd0, 0x17, 0x61, 0x86, 0x7f, 0xe4, 0xba, + 0xd1, 0xc3, 0x64, 0x5b, 0xf4, 0xe1, 0xc3, 0xca, 0x98, 0x45, 0x84, 0x56, 0xee, 0x6c, 0xbd, 0x43, + 0xcc, 0x10, 0x93, 0x6d, 0xe2, 0x13, 0xd7, 0x24, 0x7c, 0xfa, 0xea, 0x4a, 0x63, 0x9c, 0x40, 0xa5, + 0xff, 0x58, 0x83, 0x85, 0xd5, 0x3d, 0xc3, 0x76, 0x8c, 0x2d, 0xdb, 0xb1, 0xc3, 0x83, 0xb7, 0x3c, + 0x97, 0x0c, 0x31, 0x7f, 0x9b, 0xf0, 0x78, 0xdf, 0x35, 0x78, 0x3b, 0x87, 0xac, 0xf3, 0x19, 0xbb, + 0x7b, 0xd0, 0x23, 0x94, 0xf1, 0xe8, 0x48, 0x3f, 0x79, 0x74, 0x58, 0x7d, 0x7c, 0x33, 0xbb, 0x0a, + 0xce, 0x6b, 0x8b, 0x30, 0x5c, 0x56, 0x40, 0xf7, 0x3c, 0xa7, 0xdf, 0x15, 0x58, 0xc7, 0x18, 0xd6, + 0xe5, 0xa3, 0xc3, 0xea, 0xe5, 0xcd, 0xcc, 0x1a, 0x38, 0xa7, 0xa5, 0xfe, 0xfd, 0x12, 0xcc, 0xd4, + 0x0c, 0x73, 0xb7, 0xdf, 0xab, 0xf5, 0xcd, 0x5d, 0x12, 0xa2, 0x2f, 0x41, 0x99, 0x8a, 0x2d, 0xcb, + 0x08, 0x0d, 0x31, 0x92, 0x3f, 0x93, 0xcb, 0x7d, 0x6c, 0x12, 0x69, 0xed, 0x78, 0x6c, 0xd7, 0x49, + 0x68, 0xd4, 0x90, 0x18, 0x13, 0x88, 0xcb, 0xb0, 0xc4, 0x8a, 0xb6, 0x61, 0x3c, 0xe8, 0x11, 0x53, + 0xf0, 0x76, 0xa3, 0x08, 0xaf, 0xa8, 0x3d, 0x6e, 0xf7, 0x88, 0x19, 0xcf, 0x02, 0xfd, 0x85, 0x19, + 0x7e, 0xe4, 0xc2, 0x64, 0x10, 0x1a, 0x61, 0x9f, 0x0e, 0x0f, 0xa5, 0x74, 0x7d, 0x64, 0x4a, 0x0c, + 0x5b, 0x6d, 0x4e, 0xd0, 0x9a, 0xe4, 0xbf, 0xb1, 0xa0, 0xa2, 0xff, 0x17, 0x0d, 0x16, 0xd4, 0xea, + 0xb7, 0xed, 0x20, 0x44, 0x7f, 0x71, 0x60, 0x38, 0x57, 0x86, 0x1b, 0x4e, 0xda, 0x9a, 0x0d, 0xe6, + 0x82, 0x20, 0x57, 0x8e, 0x4a, 0x94, 0xa1, 0x24, 0x30, 0x61, 0x87, 0xa4, 0xcb, 0xd9, 0xaa, 0xa0, + 0x3c, 0x53, 0xbb, 0x5c, 0x9b, 0x15, 0xc4, 0x26, 0x9a, 0x14, 0x2d, 0xe6, 0xd8, 0xf5, 0x2f, 0xc1, + 0x45, 0xb5, 0x56, 0xcb, 0xf7, 0xf6, 0x6c, 0x8b, 0xf8, 0x74, 0x25, 0x84, 0x07, 0xbd, 0x81, 0x95, + 0x40, 0x39, 0x0b, 0x33, 0x08, 0xfa, 0x28, 0x4c, 0xfa, 0xa4, 0x63, 0x7b, 0x2e, 0x9b, 0xed, 0xe9, + 0x78, 0xec, 0x30, 0x2b, 0xc5, 0x02, 0xaa, 0xff, 0xbf, 0x52, 0x72, 0xec, 0xe8, 0x34, 0xa2, 0x3d, + 0x28, 0xf7, 0x04, 0x29, 0x31, 0x76, 0x37, 0x47, 0xfd, 0xc0, 0xa8, 0xeb, 0xf1, 0xa8, 0x46, 0x25, + 0x58, 0xd2, 0x42, 0x36, 0xcc, 0x45, 0xff, 0xd7, 0x47, 0x10, 0xc3, 0x4c, 0x9c, 0xb6, 0x12, 0x88, + 0x70, 0x0a, 0x31, 0xba, 0x0b, 0xd3, 0x01, 0x31, 0x7d, 0x42, 0x65, 0x92, 0x60, 0xd3, 0x4c, 0xc1, + 0xd5, 0x8e, 0x2a, 0x09, 0xc1, 0xb5, 0x28, 0xba, 0x3f, 0x2d, 0x01, 0x38, 0x46, 0x84, 0x9e, 0x85, + 0x72, 0x40, 0x88, 0x45, 0x25, 0xd2, 0xd2, 0x38, 0x9f, 0x1b, 0xfa, 0xa9, 0x6d, 0x51, 0x86, 0x25, + 0x54, 0xff, 0xf6, 0x38, 0xa0, 0x41, 0x16, 0x57, 0x47, 0x80, 0x97, 0x88, 0xf1, 0x1f, 0x65, 0x04, + 0xc4, 0x6a, 0x49, 0x21, 0x46, 0x0f, 0x60, 0xd6, 0x31, 0x82, 0xf0, 0x4e, 0x8f, 0xea, 0x20, 0x11, + 0xa3, 0x54, 0x5e, 0x58, 0x2d, 0x32, 0xd3, 0xb7, 0x55, 0x44, 0xb5, 0xc5, 0xa3, 0xc3, 0xea, 0x6c, + 0xa2, 0x08, 0x27, 0x49, 0xa1, 0x77, 0x60, 0x9a, 0x16, 0xac, 0xf9, 0xbe, 0xe7, 0x8b, 0xd1, 0x7f, + 0xb5, 0x28, 0x5d, 0x86, 0xa4, 0x36, 0x4b, 0xe7, 0x44, 0xfe, 0xc4, 0x31, 0x7a, 0xf4, 0x79, 0x40, + 0xde, 0x56, 0x40, 0xfc, 0x3d, 0x62, 0xdd, 0xe0, 0x0a, 0x17, 0xfd, 0x58, 0x3a, 0x3b, 0x63, 0xb5, + 0x65, 0x31, 0x9b, 0xe8, 0xce, 0x40, 0x0d, 0x9c, 0xd1, 0x0a, 0xed, 0x02, 0x92, 0x4a, 0x9b, 0x64, + 0x80, 0xa5, 0x89, 0xe1, 0xd9, 0xe7, 0x32, 0x25, 0x76, 0x63, 0x00, 0x05, 0xce, 0x40, 0xab, 0xff, + 0xfb, 0x12, 0x54, 0x38, 0x8b, 0xac, 0xb9, 0xa1, 0x7f, 0xf0, 0x08, 0x36, 0x08, 0x92, 0xd8, 0x20, + 0xea, 0xc5, 0xd7, 0x3c, 0xeb, 0x70, 0xee, 0xfe, 0xd0, 0x4d, 0xed, 0x0f, 0x6b, 0xa3, 0x12, 0x3a, + 0x7e, 0x7b, 0xf8, 0xa1, 0x06, 0xf3, 0x4a, 0xed, 0x47, 0xb0, 0x3b, 0x58, 0xc9, 0xdd, 0xe1, 0xb5, + 0x11, 0xbf, 0x2f, 0x67, 0x73, 0xf0, 0x12, 0x9f, 0xc5, 0x04, 0xf7, 0x0b, 0x00, 0x5b, 0x4c, 0x9c, + 0x6c, 0xc4, 0x7a, 0x92, 0x9c, 0xf2, 0x9a, 0x84, 0x60, 0xa5, 0x56, 0x42, 0x66, 0x95, 0x8e, 0x95, + 0x59, 0xdf, 0x2b, 0xc1, 0xe2, 0xc0, 0xb0, 0x0f, 0xca, 0x11, 0xed, 0x3d, 0x92, 0x23, 0xa5, 0xf7, + 0x42, 0x8e, 0x8c, 0x15, 0x91, 0x23, 0xfa, 0x1f, 0x68, 0x30, 0x56, 0xc7, 0x4d, 0xf4, 0xb1, 0x84, + 0x46, 0xfb, 0xb8, 0xaa, 0xd1, 0x3e, 0x3c, 0xac, 0x4e, 0xd5, 0x71, 0x53, 0x51, 0x6e, 0xff, 0xb6, + 0x06, 0x8b, 0xa6, 0xe7, 0x86, 0x06, 0x65, 0x4d, 0xcc, 0xc5, 0x7e, 0xc4, 0x62, 0x85, 0x94, 0xb9, + 0x7a, 0x0a, 0x59, 0xed, 0x09, 0xd1, 0x81, 0xc5, 0x34, 0x24, 0xc0, 0x83, 0x94, 0xf5, 0x4d, 0x98, + 0xae, 0x3b, 0x5e, 0xdf, 0x6a, 0xba, 0xdb, 0xde, 0x19, 0x6a, 0x24, 0x3f, 0xd2, 0x60, 0x86, 0xe1, + 0x6d, 0xf9, 0xde, 0xb6, 0xed, 0x90, 0x0f, 0x86, 0x62, 0xac, 0xf6, 0x38, 0x4f, 0xf0, 0x31, 0x45, + 0x55, 0xad, 0xf8, 0x01, 0x51, 0x54, 0xd5, 0x2e, 0xe7, 0xc8, 0xa2, 0x6f, 0x4c, 0x25, 0xbf, 0x8c, + 0x49, 0xa3, 0x67, 0xa1, 0x6c, 0x1a, 0xb5, 0xbe, 0x6b, 0x39, 0x92, 0x2f, 0x68, 0x2f, 0xeb, 0xab, + 0xbc, 0x0c, 0x4b, 0x28, 0x7a, 0x00, 0x10, 0x3b, 0x0f, 0xc4, 0x34, 0x5c, 0x1f, 0xcd, 0x61, 0xd1, + 0x26, 0x21, 0xb5, 0xb9, 0x83, 0x78, 0xea, 0x63, 0x18, 0x56, 0xa8, 0xa1, 0xbf, 0x02, 0xb3, 0x62, + 0x90, 0x9b, 0x5d, 0xa3, 0x23, 0x6c, 0xba, 0x82, 0x23, 0xb5, 0xae, 0x20, 0xaa, 0x5d, 0x12, 0x84, + 0x67, 0xd5, 0xd2, 0x00, 0x27, 0xa9, 0xa1, 0x03, 0x98, 0xe9, 0xaa, 0x76, 0xea, 0x78, 0xf1, 0x2d, + 0x43, 0xb1, 0x59, 0x6b, 0x17, 0x05, 0xf1, 0x99, 0x84, 0x85, 0x9b, 0x20, 0x95, 0xa1, 0x6e, 0x4f, + 0x9c, 0x97, 0xba, 0x4d, 0x60, 0x8a, 0x2f, 0xef, 0x60, 0x69, 0x92, 0x7d, 0xe0, 0xcb, 0x45, 0x3e, + 0x90, 0x4b, 0x8a, 0xd8, 0x1b, 0xc6, 0x7f, 0x07, 0x38, 0xc2, 0x8d, 0xf6, 0x60, 0x86, 0xee, 0x56, + 0x6d, 0xe2, 0x10, 0x33, 0xf4, 0xfc, 0xa5, 0xa9, 0xe2, 0xde, 0xa6, 0xb6, 0x82, 0x87, 0xbb, 0x2b, + 0xd4, 0x12, 0x9c, 0xa0, 0x23, 0xa5, 0x5f, 0x39, 0x57, 0xfa, 0xf5, 0xa1, 0xb2, 0xa7, 0xf8, 0x0d, + 0xa6, 0xd9, 0x20, 0x7c, 0xae, 0x48, 0xc7, 0x62, 0x27, 0x42, 0xed, 0x82, 0x20, 0x54, 0x51, 0x1d, + 0x0e, 0x2a, 0x1d, 0xfd, 0x17, 0x27, 0x61, 0xb1, 0xee, 0xf4, 0x83, 0x90, 0xf8, 0xab, 0xc2, 0x9d, + 0x4b, 0x7c, 0xf4, 0x35, 0x0d, 0x2e, 0xb3, 0x7f, 0x1b, 0xde, 0x7d, 0xb7, 0x41, 0x1c, 0xe3, 0x60, + 0x75, 0x9b, 0xd6, 0xb0, 0xac, 0xd3, 0x49, 0xa0, 0x46, 0x5f, 0xec, 0xd4, 0xcc, 0x01, 0xd2, 0xce, + 0xc4, 0x88, 0x73, 0x28, 0xa1, 0xbf, 0xa5, 0xc1, 0x13, 0x19, 0xa0, 0x06, 0x71, 0x48, 0x48, 0x84, + 0x0c, 0x38, 0x6d, 0x3f, 0x9e, 0x3e, 0x3a, 0xac, 0x3e, 0xd1, 0xce, 0x43, 0x8a, 0xf3, 0xe9, 0xa1, + 0x5f, 0xd6, 0x60, 0x39, 0x03, 0x7a, 0xdd, 0xb0, 0x9d, 0xbe, 0x4f, 0x84, 0xa2, 0x7a, 0xda, 0xee, + 0x5c, 0x39, 0x3a, 0xac, 0x2e, 0xb7, 0x73, 0xb1, 0xe2, 0x63, 0x28, 0xa2, 0xaf, 0xc0, 0x25, 0x09, + 0xdd, 0x74, 0x5d, 0x42, 0x2c, 0x62, 0xdd, 0xb5, 0x85, 0x5d, 0x79, 0xfa, 0xae, 0x3c, 0x71, 0x74, + 0x58, 0xbd, 0xd4, 0xce, 0x42, 0x88, 0xb3, 0xe9, 0xa0, 0x0e, 0x3c, 0x1d, 0x03, 0x42, 0xdb, 0xb1, + 0x1f, 0x30, 0x4c, 0x77, 0x77, 0x7c, 0x12, 0xec, 0x78, 0x8e, 0xc5, 0x84, 0x85, 0x56, 0xfb, 0xd0, + 0xd1, 0x61, 0xf5, 0xe9, 0xf6, 0x71, 0x15, 0xf1, 0xf1, 0x78, 0x90, 0x05, 0x33, 0x81, 0x69, 0xb8, + 0x4d, 0x37, 0x24, 0xfe, 0x9e, 0xe1, 0x2c, 0x4d, 0x16, 0xfa, 0x40, 0xbe, 0x44, 0x15, 0x3c, 0x38, + 0x81, 0x55, 0xff, 0xdf, 0x1a, 0x54, 0xc4, 0x4a, 0x60, 0x0a, 0xcb, 0x16, 0x4c, 0x98, 0x74, 0xc3, + 0x12, 0x1c, 0xff, 0x6a, 0xe1, 0x8d, 0x91, 0x62, 0x8b, 0x77, 0x45, 0x56, 0x84, 0x39, 0x6a, 0xb4, + 0x97, 0xb1, 0xad, 0xd5, 0x46, 0xdb, 0xd6, 0x18, 0xb5, 0x13, 0xb6, 0x34, 0xfd, 0x70, 0x0c, 0xa6, + 0xeb, 0x9e, 0x6b, 0xd9, 0x4c, 0x49, 0x7e, 0x3e, 0xa1, 0x9a, 0x3d, 0xad, 0x0a, 0xa7, 0x87, 0x87, + 0xd5, 0x59, 0x59, 0x51, 0x91, 0x56, 0x2f, 0x49, 0x0b, 0x8d, 0xeb, 0x6a, 0x1f, 0x4a, 0x9a, 0x56, + 0x0f, 0x0f, 0xab, 0xf3, 0xb2, 0x59, 0xd2, 0xda, 0x42, 0x7b, 0x80, 0xa8, 0xce, 0x7c, 0xd7, 0x37, + 0xdc, 0x80, 0xa3, 0xa5, 0x4c, 0xcb, 0xd7, 0xcf, 0x5f, 0x18, 0x6e, 0x4e, 0x69, 0x8b, 0x58, 0xa5, + 0xbe, 0x3d, 0x80, 0x0d, 0x67, 0x50, 0x40, 0xef, 0xc0, 0x1c, 0x2d, 0xdd, 0xec, 0x59, 0x46, 0x48, + 0x94, 0x85, 0x72, 0x1a, 0x9a, 0x97, 0x05, 0xcd, 0xb9, 0xdb, 0x09, 0x4c, 0x38, 0x85, 0x99, 0xab, + 0xb2, 0x46, 0xe0, 0xb9, 0x6c, 0x0d, 0x24, 0x54, 0x59, 0x5a, 0x8a, 0x05, 0x14, 0x3d, 0x07, 0x53, + 0x5d, 0x12, 0x04, 0x46, 0x87, 0x30, 0xa6, 0x9e, 0x8e, 0x77, 0xae, 0x75, 0x5e, 0x8c, 0x23, 0x38, + 0xfa, 0x38, 0x4c, 0x98, 0x9e, 0x45, 0x82, 0xa5, 0x29, 0xe6, 0x51, 0xbe, 0xcc, 0x78, 0x89, 0x16, + 0x3c, 0x3c, 0xac, 0x4e, 0x33, 0x03, 0x84, 0xfe, 0xc2, 0xbc, 0x92, 0xfe, 0x1b, 0x54, 0x91, 0x4c, + 0x29, 0xe4, 0x43, 0xa8, 0xe0, 0x8f, 0xce, 0xbf, 0xa6, 0xff, 0xa0, 0x04, 0x17, 0x69, 0x0f, 0x7d, + 0xcf, 0x71, 0xa8, 0x90, 0xed, 0x39, 0xde, 0x41, 0x97, 0xb8, 0xe1, 0xfb, 0xaa, 0x97, 0xe8, 0x75, + 0x98, 0xec, 0xf1, 0xf3, 0x93, 0x31, 0xd6, 0x9d, 0x67, 0xe9, 0x24, 0xf2, 0xd3, 0x8d, 0x87, 0x87, + 0xd5, 0xe5, 0xac, 0x0f, 0x10, 0xe7, 0x22, 0xa2, 0x1d, 0xb2, 0x53, 0x1a, 0x07, 0x67, 0xba, 0x4f, + 0x0e, 0xa9, 0xc1, 0x1b, 0x5b, 0xc4, 0x19, 0x56, 0xc9, 0xd0, 0x7f, 0x5a, 0x82, 0xcb, 0x71, 0x8f, + 0x9a, 0x6e, 0x10, 0x1a, 0x8e, 0xc3, 0xed, 0xe0, 0xf3, 0x37, 0x91, 0x7a, 0x09, 0x13, 0x69, 0xa3, + 0xa8, 0xb9, 0x39, 0xd8, 0xf7, 0x5c, 0x2f, 0xd1, 0x7e, 0xca, 0x4b, 0xd4, 0x3a, 0x43, 0x9a, 0xc7, + 0x3b, 0x8c, 0xfe, 0x8f, 0x06, 0xcb, 0xd9, 0x0d, 0x1f, 0x81, 0xc1, 0xe6, 0x25, 0x0d, 0xb6, 0xcf, + 0x9f, 0xdd, 0x57, 0xe7, 0x98, 0x6e, 0xff, 0x39, 0xf7, 0x6b, 0x99, 0x11, 0xb7, 0x0d, 0xf3, 0x54, + 0xbb, 0x0e, 0x42, 0xe1, 0xce, 0x38, 0xdd, 0x39, 0x5f, 0xe4, 0xd2, 0x98, 0xc7, 0x49, 0x1c, 0x38, + 0x8d, 0x14, 0x6d, 0xc0, 0x14, 0xe5, 0x76, 0x8a, 0xbf, 0x34, 0x3c, 0x7e, 0x29, 0x50, 0xdb, 0xbc, + 0x2d, 0x8e, 0x90, 0xe8, 0x7f, 0xa6, 0xc1, 0x53, 0xc7, 0xcd, 0x3e, 0x7a, 0x17, 0xc0, 0x8c, 0xf6, + 0x30, 0x7e, 0x10, 0x5b, 0x54, 0x0b, 0x88, 0xb0, 0xc4, 0x4b, 0x48, 0x16, 0x05, 0x58, 0x21, 0x92, + 0xe1, 0xdd, 0x2f, 0x9d, 0x93, 0x77, 0x5f, 0xff, 0xbf, 0x9a, 0x2a, 0x2c, 0xd4, 0xd1, 0xff, 0xa0, + 0x09, 0x0b, 0xb5, 0xef, 0xb9, 0x9e, 0x95, 0xe4, 0x92, 0x55, 0x9b, 0x7c, 0xe0, 0x96, 0xac, 0xda, + 0xf9, 0x9c, 0x25, 0xfb, 0x77, 0x4a, 0x79, 0x5f, 0xcb, 0x96, 0xec, 0x7d, 0x98, 0x8e, 0xe2, 0x66, + 0x22, 0xc6, 0xbe, 0x3e, 0x6a, 0x9f, 0x38, 0xba, 0xf8, 0xf8, 0x2b, 0x2a, 0x09, 0x70, 0x4c, 0x0b, + 0xed, 0x03, 0x58, 0x72, 0xa3, 0x14, 0xb3, 0x7f, 0x73, 0x34, 0xca, 0xf1, 0xc6, 0x5b, 0x9b, 0xa3, + 0xfc, 0x16, 0xff, 0xc6, 0x0a, 0x2d, 0xfd, 0x77, 0x4b, 0x80, 0x06, 0xbb, 0x4b, 0x95, 0x8d, 0x5d, + 0xdb, 0xb5, 0xd2, 0xca, 0xc6, 0x2d, 0xdb, 0xb5, 0x30, 0x83, 0x48, 0x75, 0xa4, 0x94, 0xab, 0x8e, + 0xbc, 0x0a, 0xf3, 0x1d, 0xc7, 0xdb, 0x32, 0x1c, 0xe7, 0x40, 0x44, 0xdf, 0xb0, 0x0d, 0xa9, 0x5c, + 0xbb, 0x40, 0xe5, 0xda, 0x8d, 0x24, 0x08, 0xa7, 0xeb, 0xa2, 0x1e, 0x2c, 0xf8, 0xc4, 0xf4, 0x5c, + 0xd3, 0x76, 0x98, 0xf2, 0xe8, 0xf5, 0xc3, 0x82, 0x26, 0xdc, 0xc5, 0xa3, 0xc3, 0xea, 0x02, 0x4e, + 0xe1, 0xc2, 0x03, 0xd8, 0xd1, 0x33, 0x30, 0xd5, 0xf3, 0xed, 0xae, 0xe1, 0x1f, 0x30, 0xf5, 0xb4, + 0x5c, 0xab, 0x50, 0x01, 0xd9, 0xe2, 0x45, 0x38, 0x82, 0xe9, 0xdf, 0xd2, 0x60, 0xac, 0xb1, 0xd1, + 0x46, 0x3a, 0x4c, 0x5a, 0x5e, 0xd7, 0xb0, 0x5d, 0x31, 0x4a, 0x2c, 0x88, 0xa5, 0xc1, 0x4a, 0xb0, + 0x80, 0xa0, 0x1e, 0x4c, 0x47, 0xf2, 0x65, 0xa4, 0x43, 0x8d, 0xc6, 0x46, 0x5b, 0x1e, 0x04, 0x4b, + 0x56, 0x8a, 0x4a, 0x02, 0x1c, 0x13, 0xd1, 0x0d, 0x58, 0x6c, 0x6c, 0xb4, 0x9b, 0xae, 0xe9, 0xf4, + 0x2d, 0xb2, 0xb6, 0xcf, 0xfe, 0xd0, 0x2f, 0xb3, 0x79, 0x89, 0x08, 0x9c, 0x61, 0x5f, 0x26, 0x2a, + 0xe1, 0x08, 0x46, 0xab, 0x11, 0xde, 0x42, 0x44, 0x7d, 0xb0, 0x6a, 0x02, 0x09, 0x8e, 0x60, 0xfa, + 0x8f, 0x4a, 0x50, 0x51, 0x3a, 0x84, 0x1c, 0x98, 0xe2, 0x9f, 0x1b, 0x1d, 0xba, 0xae, 0x15, 0xfc, + 0xc4, 0x64, 0xaf, 0x39, 0x75, 0x3e, 0xa0, 0x01, 0x8e, 0x48, 0xa8, 0xb3, 0x54, 0xca, 0x9f, 0x25, + 0xb4, 0x02, 0xc0, 0x8f, 0x97, 0xd9, 0xf9, 0x0c, 0xd7, 0x52, 0xd9, 0x42, 0x68, 0xcb, 0x52, 0xac, + 0xd4, 0x40, 0x4f, 0x09, 0x7e, 0xe6, 0xa7, 0xcf, 0xe5, 0x14, 0x2f, 0x6f, 0xc3, 0xc4, 0x03, 0xcf, + 0x25, 0x81, 0x70, 0xf4, 0x9d, 0xd1, 0x07, 0x4e, 0x53, 0x01, 0xf5, 0x16, 0xc5, 0x8b, 0x39, 0x7a, + 0xfd, 0x37, 0x35, 0x80, 0x86, 0x11, 0x1a, 0xdc, 0x2f, 0x35, 0x44, 0xe0, 0xce, 0x53, 0x89, 0x65, + 0x58, 0x1e, 0x38, 0x3a, 0x18, 0x0f, 0xec, 0x07, 0xd1, 0xe7, 0xcb, 0xbd, 0x87, 0x63, 0x6f, 0xdb, + 0x0f, 0x08, 0x66, 0x70, 0xf4, 0x31, 0x98, 0x26, 0xae, 0xe9, 0x1f, 0xf4, 0x42, 0x62, 0xb1, 0x11, + 0x28, 0xf3, 0xf3, 0x9c, 0xb5, 0xa8, 0x10, 0xc7, 0x70, 0x7d, 0x0f, 0xca, 0x6b, 0xae, 0xd5, 0xf3, + 0x6c, 0x6e, 0x94, 0x9c, 0xd0, 0xc1, 0xa7, 0x61, 0xac, 0xef, 0x3b, 0xa2, 0x7f, 0x15, 0x51, 0x61, + 0x6c, 0x13, 0xdf, 0xc6, 0xb4, 0x9c, 0x5a, 0x7a, 0xbd, 0xbe, 0xdf, 0xf3, 0x82, 0xa8, 0x93, 0x52, + 0x31, 0x69, 0xf1, 0x62, 0x1c, 0xc1, 0xf5, 0x87, 0x1a, 0x2c, 0xac, 0xed, 0xf7, 0x6c, 0x9f, 0x45, + 0x04, 0x11, 0x9f, 0x6e, 0xe9, 0xb4, 0xfd, 0x1e, 0xff, 0x57, 0xf4, 0x41, 0xb6, 0x17, 0x35, 0x70, + 0x04, 0x47, 0xdb, 0x30, 0x47, 0x58, 0x73, 0x2a, 0x14, 0x1a, 0x86, 0xf4, 0x95, 0x9d, 0xc6, 0xd0, + 0xe5, 0x01, 0x67, 0x09, 0x2c, 0x38, 0x85, 0x15, 0xb5, 0x61, 0xce, 0x74, 0x8c, 0x20, 0xb0, 0xb7, + 0x6d, 0x33, 0x3e, 0xeb, 0x9a, 0xae, 0x7d, 0x8c, 0xb6, 0xad, 0x27, 0x20, 0x0f, 0x0f, 0xab, 0x97, + 0x44, 0x3f, 0x93, 0x00, 0x9c, 0x42, 0xa1, 0xff, 0x81, 0x06, 0xd3, 0x52, 0x91, 0x79, 0x7f, 0xd9, + 0x82, 0xcf, 0x42, 0xd9, 0xb2, 0x03, 0x55, 0xc0, 0xb3, 0xd3, 0x8a, 0x86, 0x28, 0xc3, 0x12, 0xaa, + 0x07, 0x50, 0xbe, 0x21, 0xd6, 0x08, 0x5a, 0x86, 0x92, 0x1d, 0xed, 0x2f, 0x20, 0x3e, 0xa0, 0xd4, + 0x6c, 0xe0, 0x92, 0x6d, 0x49, 0xae, 0x2a, 0xe5, 0x72, 0x95, 0x32, 0xed, 0x63, 0xc7, 0x4f, 0xbb, + 0xfe, 0x1d, 0x0d, 0x2a, 0x37, 0xed, 0x2d, 0xe2, 0xbb, 0x5c, 0x8b, 0x7b, 0x26, 0x1d, 0x23, 0x5a, + 0xc9, 0x8a, 0x0f, 0x45, 0xfb, 0x30, 0x1d, 0x98, 0x3b, 0xc4, 0xea, 0x3b, 0xf2, 0xac, 0xb0, 0x50, + 0x24, 0xa8, 0x42, 0xba, 0x2d, 0xf0, 0x29, 0xb1, 0x30, 0x11, 0x05, 0x1c, 0x13, 0xd3, 0xbf, 0x0c, + 0x17, 0x32, 0x1a, 0xa1, 0x2a, 0x4c, 0x04, 0xa1, 0xe1, 0x87, 0x62, 0xcc, 0x98, 0xec, 0x68, 0xd3, + 0x02, 0xcc, 0xcb, 0xd1, 0x13, 0x30, 0x46, 0x5c, 0x4b, 0x0c, 0xda, 0x14, 0x5d, 0x65, 0x6b, 0xae, + 0x85, 0x69, 0x19, 0x9d, 0x22, 0xc7, 0x4b, 0x30, 0x23, 0x9b, 0xa2, 0xdb, 0xa2, 0x0c, 0x4b, 0xa8, + 0xfe, 0x4b, 0x93, 0xf0, 0xf4, 0x4d, 0xcf, 0xb7, 0x1f, 0x78, 0x6e, 0x68, 0x38, 0x2d, 0xcf, 0x8a, + 0xbd, 0xdf, 0x62, 0xba, 0xbf, 0xae, 0xc1, 0xe3, 0x66, 0xaf, 0xdf, 0x74, 0xed, 0xd0, 0x36, 0x22, + 0xa7, 0x64, 0x8b, 0xf8, 0xb6, 0x57, 0xd4, 0x09, 0xce, 0x62, 0x0b, 0xeb, 0xad, 0xcd, 0x2c, 0x94, + 0x38, 0x8f, 0x16, 0x7a, 0x07, 0xe6, 0x2c, 0xef, 0xbe, 0xcb, 0x5d, 0xa4, 0xc4, 0x31, 0x0e, 0x0a, + 0xba, 0xbe, 0x19, 0x8b, 0x37, 0x12, 0x98, 0x70, 0x0a, 0x33, 0xf3, 0xfb, 0xcb, 0xa2, 0x76, 0xc8, + 0x62, 0x2b, 0x1f, 0xc4, 0xc3, 0x59, 0xd0, 0xef, 0xdf, 0xc8, 0xc4, 0x88, 0x73, 0x28, 0xa1, 0xaf, + 0xc0, 0x25, 0x9b, 0x0f, 0x04, 0x26, 0x86, 0x65, 0xbb, 0x24, 0x08, 0xf8, 0x77, 0x8f, 0xe0, 0xd8, + 0x6e, 0x66, 0x21, 0xc4, 0xd9, 0x74, 0xd0, 0xdb, 0x00, 0xc1, 0x81, 0x6b, 0x8a, 0xb9, 0x9e, 0x28, + 0x44, 0x95, 0x6f, 0xc1, 0x12, 0x0b, 0x56, 0x30, 0xd2, 0x5d, 0x28, 0xf4, 0x1c, 0xe2, 0x1b, 0xae, + 0xc9, 0xfd, 0x7e, 0x1a, 0xdf, 0x85, 0xee, 0x46, 0x85, 0x38, 0x86, 0x23, 0x0b, 0x66, 0xfa, 0x3d, + 0x65, 0xf2, 0xa7, 0x8a, 0x3b, 0xbf, 0x37, 0x15, 0x3c, 0x38, 0x81, 0x55, 0xff, 0x67, 0x1a, 0x4c, + 0x89, 0xc8, 0x68, 0xf4, 0xd1, 0x94, 0xbe, 0x27, 0xbd, 0x20, 0x29, 0x9d, 0xef, 0x80, 0xd9, 0xc7, + 0x42, 0xa3, 0x16, 0x4c, 0x59, 0x48, 0x61, 0x10, 0x84, 0x63, 0xf5, 0x3c, 0x61, 0x27, 0x47, 0x2a, + 0xbb, 0x42, 0x4c, 0xff, 0xb6, 0x06, 0x8b, 0x03, 0xad, 0x86, 0x50, 0xe6, 0x1f, 0xa1, 0x7f, 0xf3, + 0xd7, 0x00, 0x58, 0x10, 0xfc, 0x6a, 0xab, 0xd9, 0x26, 0xfe, 0x9e, 0x14, 0x2b, 0x7f, 0x53, 0x83, + 0x85, 0xd8, 0x13, 0x2f, 0x7a, 0xa1, 0x15, 0x8f, 0x2b, 0xb8, 0x95, 0xc2, 0x55, 0x5b, 0x12, 0xdf, + 0xbd, 0x90, 0x86, 0xe0, 0x01, 0xba, 0xe8, 0x6f, 0x68, 0xb0, 0x60, 0x24, 0x83, 0xe0, 0xa3, 0x4d, + 0xa0, 0x50, 0x70, 0x57, 0x2a, 0xa0, 0x3e, 0xee, 0x4b, 0x0a, 0x10, 0xe0, 0x01, 0xb2, 0xe8, 0x53, + 0x30, 0x63, 0xf4, 0xec, 0xd5, 0xbe, 0x65, 0x13, 0xd7, 0x94, 0x91, 0xd3, 0x8c, 0x71, 0x57, 0x5b, + 0x4d, 0x59, 0x8e, 0x13, 0xb5, 0x64, 0x94, 0xbb, 0x18, 0xc8, 0xf1, 0x11, 0xa3, 0xdc, 0xc5, 0x18, + 0xc6, 0x51, 0xee, 0x62, 0xe8, 0x54, 0x22, 0xe8, 0xe7, 0xe0, 0x09, 0xbe, 0x7b, 0xd6, 0x8c, 0xc0, + 0x36, 0x57, 0xfb, 0xe1, 0x0e, 0x71, 0xc3, 0x48, 0x07, 0xe2, 0x16, 0x15, 0x3b, 0x67, 0x5c, 0xcb, + 0xab, 0x84, 0xf3, 0xdb, 0x23, 0x17, 0xc0, 0xb3, 0x2d, 0x53, 0x7c, 0x0f, 0x3f, 0xea, 0x2a, 0x74, + 0x0c, 0x7c, 0xa7, 0xd9, 0xa8, 0x8b, 0xcf, 0x61, 0xc2, 0x28, 0xfe, 0x8d, 0x15, 0x0a, 0xe8, 0x9b, + 0x1a, 0xcc, 0x0a, 0x26, 0x17, 0x34, 0xa7, 0xd8, 0xfc, 0xbf, 0x55, 0x94, 0x19, 0x53, 0x0c, 0xbf, + 0x82, 0x55, 0xe4, 0x3c, 0x5c, 0x4d, 0x06, 0x3e, 0x24, 0x60, 0x38, 0xd9, 0x0f, 0xf4, 0xf7, 0x34, + 0xb8, 0x18, 0x10, 0x7f, 0xcf, 0x36, 0xc9, 0xaa, 0x69, 0x7a, 0x7d, 0x37, 0x9a, 0xe4, 0x72, 0x71, + 0xbf, 0x41, 0x3b, 0x03, 0x5f, 0x6d, 0xe9, 0xe8, 0xb0, 0x7a, 0x31, 0x0b, 0x82, 0x33, 0xe9, 0xd3, + 0x5d, 0x72, 0xfe, 0xbe, 0x11, 0x9a, 0x3b, 0x75, 0xc3, 0xdc, 0x61, 0xe6, 0x45, 0xb0, 0x34, 0x5d, + 0x3c, 0x22, 0xf2, 0xcd, 0x24, 0x2a, 0xee, 0x36, 0x48, 0x15, 0xe2, 0x34, 0x41, 0x14, 0x40, 0xd9, + 0x27, 0xef, 0xf6, 0x49, 0x10, 0x06, 0x4b, 0xc0, 0x88, 0x37, 0x47, 0x9e, 0x31, 0x2c, 0x10, 0x72, + 0xad, 0x29, 0xfa, 0x85, 0x25, 0xa1, 0xe5, 0xd7, 0x01, 0x0d, 0x4e, 0x27, 0x5a, 0x80, 0xb1, 0x5d, + 0xc2, 0x6f, 0x98, 0x4c, 0x63, 0xfa, 0x2f, 0xba, 0x08, 0x13, 0x7b, 0x86, 0xd3, 0xe7, 0x9a, 0x6d, + 0x19, 0xf3, 0x1f, 0x2f, 0x97, 0x3e, 0xa3, 0xe9, 0xbf, 0xa7, 0xc1, 0xa5, 0x4c, 0x9a, 0x08, 0xc3, + 0xe5, 0xae, 0xb1, 0xbf, 0xe1, 0xb9, 0xeb, 0xfd, 0xd0, 0x08, 0x6d, 0xb7, 0xd3, 0x74, 0xb7, 0x1d, + 0xbb, 0xb3, 0xc3, 0x15, 0xc1, 0x09, 0xae, 0x4a, 0xac, 0x67, 0xd6, 0xc0, 0x39, 0x2d, 0x51, 0x13, + 0x2e, 0x74, 0x8d, 0xfd, 0x01, 0x84, 0x25, 0x86, 0x90, 0xdd, 0x53, 0x5a, 0x1f, 0x04, 0xe3, 0xac, + 0x36, 0xfa, 0x37, 0xc6, 0xe1, 0x49, 0xda, 0xf1, 0x78, 0xbf, 0x59, 0x37, 0x5c, 0xa3, 0xf3, 0xfe, + 0x94, 0xeb, 0xdf, 0xd1, 0xe0, 0xf1, 0x9d, 0x6c, 0xed, 0x56, 0xec, 0x78, 0x6f, 0x14, 0xd2, 0xf1, + 0x8f, 0x53, 0x98, 0xf9, 0x41, 0xff, 0xb1, 0x55, 0x70, 0x5e, 0xa7, 0xd0, 0xeb, 0xb0, 0xe0, 0x7a, + 0x16, 0xa9, 0x37, 0x1b, 0x78, 0xdd, 0x08, 0x76, 0xdb, 0x91, 0x31, 0x3f, 0xc1, 0x9d, 0x5a, 0x1b, + 0x29, 0x18, 0x1e, 0xa8, 0x8d, 0xf6, 0x00, 0xf5, 0x3c, 0x6b, 0x6d, 0xcf, 0x36, 0xa3, 0x13, 0xdf, + 0xe2, 0x8e, 0x34, 0x16, 0x84, 0xdd, 0x1a, 0xc0, 0x86, 0x33, 0x28, 0xe8, 0x7f, 0xa4, 0xc1, 0x3c, + 0x9d, 0x91, 0x96, 0xef, 0xed, 0x1f, 0xbc, 0x1f, 0x79, 0xe1, 0x39, 0x18, 0xef, 0x7a, 0x56, 0x64, + 0x64, 0x5e, 0xa2, 0x1a, 0xd1, 0xba, 0x67, 0x91, 0x87, 0xdc, 0xb1, 0xb6, 0x7f, 0x40, 0x7f, 0x60, + 0x56, 0x45, 0xff, 0x6f, 0x1a, 0xd7, 0x59, 0x22, 0x5b, 0xec, 0x7d, 0xc9, 0xdb, 0x2f, 0xc2, 0x2c, + 0x2d, 0x5b, 0x37, 0xf6, 0x5b, 0x8d, 0x7b, 0x9e, 0x13, 0x45, 0x20, 0xb0, 0x58, 0xe0, 0x5b, 0x2a, + 0x00, 0x27, 0xeb, 0xe9, 0xdf, 0x9c, 0x05, 0x56, 0xc1, 0x21, 0xe1, 0xfb, 0xf1, 0xbb, 0x9e, 0x87, + 0x8a, 0xd9, 0xeb, 0xd7, 0xaf, 0xb7, 0xdf, 0xe8, 0x7b, 0xa1, 0x21, 0x7c, 0x7e, 0x4c, 0x11, 0xa9, + 0xb7, 0x36, 0xa3, 0x62, 0xac, 0xd6, 0xa1, 0xab, 0xc6, 0xec, 0xf5, 0x85, 0x1c, 0x6a, 0xa9, 0xe7, + 0xd4, 0x6c, 0xd5, 0xd4, 0x5b, 0x9b, 0x09, 0x18, 0x1e, 0xa8, 0x8d, 0xbe, 0x02, 0x33, 0x44, 0x30, + 0xf4, 0x4d, 0xc3, 0xb7, 0xc4, 0x7a, 0x29, 0xbc, 0x93, 0xc8, 0xa1, 0x8d, 0x56, 0x09, 0xd7, 0xdf, + 0xd6, 0x14, 0x12, 0x38, 0x41, 0x90, 0xe9, 0x52, 0xe2, 0x37, 0x9d, 0x29, 0xcf, 0xba, 0xe1, 0x1b, + 0x26, 0x51, 0x4c, 0xaf, 0x09, 0xa1, 0x4b, 0xe5, 0x55, 0xc2, 0xf9, 0xed, 0xd1, 0x6f, 0x6b, 0x70, + 0x59, 0x42, 0x6d, 0xd7, 0xee, 0xf6, 0xbb, 0x98, 0x98, 0x8e, 0x61, 0x77, 0x85, 0x62, 0xf5, 0xe6, + 0x99, 0x7d, 0x68, 0x12, 0x3d, 0xdf, 0xac, 0xb2, 0x61, 0x38, 0xa7, 0x4b, 0xe8, 0xdb, 0x1a, 0x5c, + 0x8d, 0x40, 0x2d, 0x6a, 0xda, 0xf4, 0x7d, 0x12, 0xc7, 0xb0, 0x88, 0x21, 0x29, 0x66, 0xfe, 0x7d, + 0xe4, 0xe8, 0xb0, 0x7a, 0x75, 0xed, 0x04, 0xdc, 0xf8, 0x44, 0xea, 0x2a, 0xbb, 0xb4, 0xbd, 0xed, + 0x50, 0x68, 0x62, 0xe7, 0xc5, 0x2e, 0x94, 0x04, 0x4e, 0x10, 0x44, 0xbf, 0xa3, 0xc1, 0xe3, 0x6a, + 0x81, 0xca, 0x2d, 0x5c, 0x05, 0xfb, 0xc2, 0x99, 0x75, 0x26, 0x85, 0x9f, 0xbb, 0x6f, 0x72, 0x80, + 0x38, 0xaf, 0x57, 0xe8, 0x19, 0x98, 0xea, 0x32, 0xc6, 0xe4, 0x6a, 0xda, 0x04, 0x77, 0xc3, 0x71, + 0x5e, 0x0d, 0x70, 0x04, 0xa3, 0xd6, 0x4f, 0xcf, 0xb3, 0x5a, 0xb6, 0x15, 0xdc, 0xb6, 0xbb, 0x76, + 0xb8, 0x54, 0x61, 0xd7, 0x06, 0xd8, 0x70, 0xb4, 0x3c, 0xab, 0xd5, 0x6c, 0xf0, 0x72, 0x9c, 0xa8, + 0xc5, 0x42, 0x24, 0xed, 0xae, 0xd1, 0x21, 0xad, 0xbe, 0xe3, 0xb4, 0x7c, 0x8f, 0x59, 0xc4, 0x0d, + 0x62, 0x58, 0x8e, 0xed, 0x92, 0xa5, 0x99, 0xe2, 0x21, 0x92, 0xcd, 0x3c, 0xa4, 0x38, 0x9f, 0x1e, + 0x5a, 0x01, 0xd8, 0x36, 0x6c, 0xa7, 0x7d, 0xdf, 0xe8, 0xdd, 0x71, 0x97, 0x66, 0x99, 0x00, 0x63, + 0xa6, 0xc7, 0x75, 0x59, 0x8a, 0x95, 0x1a, 0x94, 0x9b, 0xa8, 0x14, 0xc4, 0x84, 0x5f, 0x7f, 0x58, + 0x9a, 0x3b, 0x23, 0x6e, 0x8a, 0x10, 0xf2, 0xe1, 0xbb, 0xa5, 0x90, 0xc0, 0x09, 0x82, 0xe8, 0xeb, + 0x1a, 0xcc, 0x05, 0x07, 0x41, 0x48, 0xba, 0xb2, 0x0f, 0xf3, 0x67, 0xdd, 0x07, 0xe6, 0x2b, 0x68, + 0x27, 0x88, 0xe0, 0x14, 0x51, 0xfd, 0xb0, 0xc4, 0x95, 0xe2, 0x01, 0x16, 0x44, 0xaf, 0xc2, 0x7c, + 0x97, 0x74, 0x3d, 0xff, 0x60, 0x35, 0xba, 0x22, 0x2c, 0xbc, 0x1b, 0xcc, 0x48, 0x58, 0x4f, 0x82, + 0x70, 0xba, 0x2e, 0xdd, 0x20, 0xd8, 0x74, 0x5d, 0x6f, 0xc7, 0xed, 0x4b, 0xf1, 0x06, 0xd1, 0x4c, + 0xc1, 0xf0, 0x40, 0x6d, 0x54, 0x87, 0x45, 0x51, 0xd6, 0xa4, 0x2a, 0x57, 0x70, 0xdd, 0x27, 0xd1, + 0x09, 0x06, 0x55, 0x25, 0x16, 0x9b, 0x69, 0x20, 0x1e, 0xac, 0x4f, 0xbf, 0x82, 0xfe, 0x50, 0x7b, + 0x31, 0x1e, 0x7f, 0xc5, 0x46, 0x12, 0x84, 0xd3, 0x75, 0x23, 0xe5, 0x30, 0xd1, 0x85, 0x89, 0xf8, + 0x2b, 0x36, 0x52, 0x30, 0x3c, 0x50, 0x5b, 0xff, 0xef, 0xe3, 0xf0, 0xe1, 0x21, 0xc4, 0x36, 0xea, + 0x66, 0x0f, 0xf7, 0x09, 0x8b, 0x68, 0x25, 0x3a, 0xe0, 0x5e, 0x79, 0xa3, 0x6f, 0xb8, 0xa1, 0x1d, + 0x1e, 0x0c, 0x39, 0x3d, 0xbd, 0x9c, 0xe9, 0x39, 0x3d, 0xbd, 0x61, 0xa7, 0x33, 0xc8, 0x9b, 0xce, + 0xd3, 0x93, 0x1c, 0x7e, 0xfa, 0xbb, 0xd9, 0xd3, 0x5f, 0x70, 0x54, 0x4f, 0x64, 0x97, 0x5e, 0x0e, + 0xbb, 0x14, 0x1c, 0xd5, 0x21, 0xd8, 0xeb, 0x4f, 0xc6, 0xe1, 0x23, 0xc3, 0x6c, 0x21, 0x05, 0xf9, + 0x2b, 0x43, 0x48, 0x9f, 0x2b, 0x7f, 0xe5, 0x85, 0x16, 0x9c, 0x23, 0x7f, 0x65, 0x90, 0x3c, 0x6f, + 0xfe, 0xca, 0x1b, 0xd5, 0xf3, 0xe2, 0xaf, 0xbc, 0x51, 0x1d, 0x82, 0xbf, 0xfe, 0x34, 0xbd, 0x3f, + 0xc8, 0x1d, 0xac, 0x09, 0x63, 0x66, 0xaf, 0x5f, 0x50, 0x48, 0xb1, 0xb3, 0xb3, 0x7a, 0x6b, 0x13, + 0x53, 0x1c, 0x08, 0xc3, 0x24, 0xe7, 0x9f, 0x82, 0x22, 0x88, 0x85, 0x85, 0x70, 0x96, 0xc4, 0x02, + 0x13, 0x1d, 0x2a, 0xd2, 0xdb, 0x21, 0x5d, 0xe2, 0x1b, 0x4e, 0x3b, 0xf4, 0x7c, 0xa3, 0x53, 0x54, + 0xda, 0xb0, 0xa1, 0x5a, 0x4b, 0xe1, 0xc2, 0x03, 0xd8, 0xe9, 0x80, 0xf4, 0x6c, 0xab, 0xa0, 0x7c, + 0x61, 0x03, 0xd2, 0x6a, 0x36, 0x30, 0xc5, 0xa1, 0xff, 0x61, 0x19, 0x94, 0xf8, 0x79, 0x6a, 0xa9, + 0x18, 0x8e, 0xe3, 0xdd, 0x6f, 0xf9, 0xf6, 0x9e, 0xed, 0x90, 0x0e, 0xb1, 0x64, 0x80, 0x75, 0x20, + 0x4e, 0x58, 0x99, 0xea, 0xb4, 0x9a, 0x57, 0x09, 0xe7, 0xb7, 0xa7, 0x96, 0xe8, 0xa2, 0x99, 0xbe, + 0x86, 0x33, 0xca, 0x99, 0xca, 0xc0, 0x9d, 0x1e, 0xbe, 0x9e, 0x06, 0x8a, 0xf1, 0x20, 0x59, 0xf4, + 0x55, 0x8d, 0x9b, 0xd8, 0xd2, 0x47, 0x27, 0xe6, 0xec, 0xc6, 0x19, 0xb9, 0x84, 0x63, 0x5b, 0x3d, + 0xf6, 0x02, 0x26, 0x09, 0x52, 0x5b, 0xe8, 0xd2, 0x6e, 0x96, 0xb7, 0x4d, 0xcc, 0xec, 0x9d, 0xa2, + 0x5d, 0xc9, 0x71, 0xdf, 0xf1, 0x53, 0xc2, 0xcc, 0x0a, 0x38, 0xbb, 0x23, 0x72, 0x94, 0xa4, 0xb3, + 0x44, 0x08, 0x81, 0xc2, 0xa3, 0x94, 0xf2, 0xba, 0xc4, 0xa3, 0x24, 0x01, 0x38, 0x49, 0x10, 0xf5, + 0x60, 0x7a, 0x37, 0x72, 0x3d, 0x09, 0x8b, 0xb6, 0x5e, 0x94, 0xba, 0xe2, 0xbf, 0xe2, 0xa7, 0x91, + 0xb2, 0x10, 0xc7, 0x44, 0xd0, 0x0e, 0x4c, 0xed, 0x72, 0x41, 0x24, 0x2c, 0xd1, 0xd5, 0x91, 0x35, + 0x65, 0x6e, 0x10, 0x89, 0x22, 0x1c, 0xa1, 0x57, 0x23, 0x1f, 0xca, 0x27, 0x04, 0xbc, 0xfc, 0xba, + 0x06, 0x97, 0xf6, 0x88, 0x1f, 0xda, 0x66, 0xda, 0xd7, 0x39, 0x5d, 0x5c, 0x9b, 0xbf, 0x97, 0x85, + 0x90, 0xb3, 0x49, 0x26, 0x08, 0x67, 0x77, 0x41, 0xff, 0xa9, 0x06, 0x03, 0xde, 0x1f, 0xf4, 0x2b, + 0x1a, 0xcc, 0x6c, 0x13, 0x23, 0xec, 0xfb, 0xe4, 0x86, 0x11, 0xca, 0x20, 0xcc, 0x7b, 0x67, 0xe1, + 0x74, 0x5a, 0xb9, 0xae, 0x20, 0xe6, 0xe7, 0x2d, 0xf2, 0xae, 0xa7, 0x0a, 0xc2, 0x89, 0x1e, 0x2c, + 0xbf, 0x06, 0x8b, 0x03, 0x0d, 0x4f, 0xe5, 0xd9, 0xff, 0x77, 0xc2, 0x79, 0x98, 0x4e, 0xf0, 0xf5, + 0x36, 0x4c, 0x18, 0x96, 0x25, 0xd3, 0x87, 0xbc, 0x54, 0xec, 0x5c, 0xd1, 0x52, 0x63, 0x5d, 0xd9, + 0x4f, 0xcc, 0xd1, 0xa2, 0xeb, 0x80, 0x8c, 0xc4, 0x11, 0xda, 0xba, 0x67, 0x45, 0x56, 0x12, 0x73, + 0xe4, 0xae, 0x0e, 0x40, 0x71, 0x46, 0x0b, 0xfd, 0x15, 0x98, 0x4b, 0xde, 0xa2, 0x3a, 0x45, 0xcc, + 0x95, 0xfe, 0xd7, 0x35, 0x40, 0x83, 0x57, 0x8b, 0x91, 0x0f, 0x65, 0x51, 0x23, 0x9a, 0xe2, 0x42, + 0x7e, 0xc5, 0x74, 0x34, 0x58, 0x1c, 0x6c, 0x2c, 0x0a, 0x02, 0x2c, 0xe9, 0xe8, 0x7f, 0xa6, 0x41, + 0x9c, 0x9f, 0x00, 0x7d, 0x1a, 0x2a, 0x16, 0x09, 0x4c, 0xdf, 0xee, 0x85, 0xf1, 0x77, 0xc8, 0x6b, + 0xa1, 0x8d, 0x18, 0x84, 0xd5, 0x7a, 0x48, 0x87, 0xc9, 0xd0, 0x08, 0x76, 0x9b, 0x0d, 0x61, 0x2e, + 0xb2, 0xcd, 0xfd, 0x2e, 0x2b, 0xc1, 0x02, 0x12, 0xdf, 0x48, 0x1a, 0x1b, 0xe2, 0x46, 0x12, 0xda, + 0x3e, 0x83, 0xeb, 0x57, 0xe8, 0xe4, 0xab, 0x57, 0xfa, 0x7f, 0x2a, 0x41, 0x32, 0x25, 0x44, 0xd1, + 0x21, 0x18, 0xbc, 0x2f, 0x56, 0x3a, 0xb7, 0xfb, 0x62, 0x1f, 0x67, 0xf9, 0x94, 0x78, 0x02, 0x3c, + 0x7e, 0xec, 0xa1, 0x66, 0x41, 0xe2, 0xe9, 0xeb, 0x64, 0x0d, 0xf4, 0x12, 0x8b, 0x90, 0x0a, 0x23, + 0x23, 0xfa, 0xc3, 0xd1, 0xb2, 0x68, 0xd3, 0xc2, 0x87, 0xe2, 0x46, 0x9c, 0xfc, 0x7e, 0x56, 0x8a, + 0x79, 0x0b, 0xf4, 0x69, 0x11, 0x50, 0x37, 0x91, 0xb8, 0xb5, 0x17, 0x5d, 0xf5, 0x5b, 0x4c, 0x34, + 0x8c, 0xa3, 0xec, 0xf4, 0xbf, 0xab, 0xc1, 0x94, 0xb8, 0x27, 0x3e, 0x44, 0x4c, 0xde, 0x36, 0x4c, + 0x30, 0x25, 0x7d, 0x14, 0xfd, 0xa5, 0xbd, 0xe3, 0x79, 0x61, 0xe2, 0xb6, 0x3c, 0x0b, 0x04, 0x63, + 0xff, 0x62, 0x8e, 0x5e, 0xff, 0xd6, 0x38, 0x5c, 0x15, 0x55, 0x06, 0xb6, 0x67, 0xb9, 0x04, 0x0f, + 0xe0, 0x82, 0x98, 0xa5, 0x86, 0x6f, 0xd8, 0xf2, 0x60, 0xa8, 0x98, 0xd9, 0x25, 0x8e, 0x0c, 0x07, + 0xd0, 0xe1, 0x2c, 0x1a, 0xe8, 0xe7, 0xe1, 0xa2, 0x28, 0xbe, 0x49, 0x0c, 0x27, 0xdc, 0x89, 0x68, + 0x17, 0x33, 0xc1, 0xd8, 0x29, 0xf5, 0x7a, 0x06, 0x3e, 0x9c, 0x49, 0x85, 0xc5, 0x72, 0x09, 0x40, + 0xdd, 0x27, 0x86, 0x7a, 0x2a, 0x36, 0x42, 0x2c, 0xd7, 0x7a, 0x26, 0x46, 0x9c, 0x43, 0x89, 0xf9, + 0xaf, 0x8c, 0x7d, 0x66, 0x0e, 0x63, 0x12, 0xfa, 0x36, 0xcb, 0x5f, 0x40, 0xf9, 0x9b, 0x1b, 0xb0, + 0x49, 0x10, 0x4e, 0xd7, 0x45, 0x2f, 0xc3, 0x1c, 0x3b, 0xe8, 0x8b, 0xaf, 0xe1, 0x4c, 0xc4, 0xf9, + 0x10, 0x37, 0x12, 0x10, 0x9c, 0xaa, 0xa9, 0xff, 0x96, 0x06, 0x33, 0x2a, 0x03, 0x0d, 0x11, 0xc3, + 0xdb, 0x57, 0xc4, 0xf5, 0x08, 0xa1, 0x90, 0x2a, 0xd5, 0x61, 0x24, 0xf6, 0x43, 0x0d, 0x2e, 0x64, + 0xb4, 0x61, 0xc7, 0x53, 0x24, 0x25, 0xfa, 0x47, 0x39, 0x9e, 0x1a, 0xd8, 0x46, 0xe4, 0xf1, 0x54, + 0x1a, 0x82, 0x07, 0xe8, 0xa2, 0x7b, 0x30, 0x66, 0xfa, 0xb6, 0x18, 0x96, 0x17, 0x0b, 0x99, 0x24, + 0xb8, 0x19, 0x07, 0x46, 0xd7, 0x71, 0x13, 0x53, 0x84, 0xfa, 0xbf, 0x1a, 0x83, 0x8a, 0x92, 0x82, + 0x02, 0xad, 0x8f, 0x62, 0xd1, 0xc6, 0xe8, 0x23, 0xab, 0x76, 0x1d, 0xc6, 0x3a, 0xbd, 0x7e, 0x41, + 0x93, 0x56, 0xa2, 0xbb, 0x41, 0xd1, 0x75, 0x7a, 0x7d, 0x74, 0x4f, 0x1a, 0xc9, 0xc5, 0xcc, 0x58, + 0x19, 0x4b, 0x97, 0x32, 0x94, 0x23, 0xde, 0x1c, 0xcf, 0xe5, 0xcd, 0x2e, 0x4c, 0x05, 0xc2, 0x82, + 0x9e, 0x28, 0x9e, 0xfe, 0x44, 0x19, 0x69, 0x61, 0x31, 0x73, 0xf5, 0x3b, 0x32, 0xa8, 0x23, 0x1a, + 0x54, 0x01, 0xe8, 0xb3, 0x68, 0x66, 0x66, 0x57, 0x94, 0xb9, 0x02, 0xb0, 0xc9, 0x4a, 0xb0, 0x80, + 0xe8, 0xff, 0x52, 0x03, 0x34, 0x88, 0x10, 0x7d, 0x18, 0x26, 0x58, 0x50, 0xb7, 0x58, 0x68, 0xca, + 0xcd, 0x77, 0x23, 0x08, 0x30, 0x87, 0xa1, 0x37, 0x45, 0xc4, 0x7e, 0xb1, 0x89, 0x91, 0xbb, 0xb7, + 0xa0, 0xa9, 0x84, 0xf8, 0x47, 0xdb, 0xd3, 0x58, 0xde, 0xf6, 0xa4, 0xff, 0x49, 0x89, 0x72, 0x9c, + 0xed, 0x86, 0xc4, 0x65, 0x11, 0x96, 0x07, 0x00, 0x46, 0x3f, 0xf4, 0xf8, 0x76, 0x2c, 0x18, 0xaf, + 0x59, 0x6c, 0x70, 0x25, 0xd2, 0x55, 0x89, 0x90, 0x9f, 0x80, 0xc4, 0xbf, 0xb1, 0x42, 0x8c, 0x92, + 0x0e, 0xed, 0x2e, 0x79, 0xd3, 0x76, 0x2d, 0xef, 0xbe, 0x18, 0x8b, 0x51, 0x49, 0xdf, 0x95, 0x08, + 0x39, 0xe9, 0xf8, 0x37, 0x56, 0x88, 0xa1, 0x2f, 0xc0, 0x12, 0x4b, 0xa8, 0xea, 0xb2, 0x54, 0x3c, + 0xa2, 0x6f, 0x9e, 0xe3, 0x44, 0xfb, 0x43, 0xb9, 0xf6, 0xd4, 0xd1, 0x61, 0x75, 0xa9, 0x9e, 0x53, + 0x07, 0xe7, 0xb6, 0xd6, 0x7f, 0x47, 0x83, 0x4b, 0x99, 0x43, 0x81, 0x6e, 0xc0, 0x62, 0x7c, 0xec, + 0xad, 0x0a, 0xb4, 0x72, 0x9c, 0x59, 0xea, 0x56, 0xba, 0x02, 0x1e, 0x6c, 0x83, 0xd6, 0xe5, 0xa6, + 0xae, 0x0a, 0x4c, 0x71, 0x66, 0xfe, 0xa4, 0x40, 0x95, 0x25, 0x53, 0x71, 0x56, 0x3b, 0xfd, 0xe7, + 0x12, 0x1d, 0x8e, 0x07, 0x8c, 0xb2, 0xf2, 0x16, 0xe9, 0xc8, 0x48, 0x58, 0xc9, 0xca, 0x35, 0x5a, + 0x88, 0x39, 0x0c, 0x3d, 0xad, 0xc6, 0xa3, 0x4b, 0x91, 0x11, 0xc5, 0xa4, 0xeb, 0x21, 0xc0, 0xba, + 0xe7, 0xda, 0xa1, 0xe7, 0xdb, 0x6e, 0x07, 0x6d, 0x43, 0xd9, 0x10, 0xd9, 0x7e, 0x05, 0xab, 0x7d, + 0xb6, 0x90, 0x41, 0x24, 0x70, 0xf0, 0x48, 0xad, 0xe8, 0x17, 0x96, 0xb8, 0xf5, 0x7f, 0xaa, 0xc1, + 0x65, 0x2a, 0x3d, 0xac, 0xe8, 0xaa, 0x9b, 0xbc, 0x12, 0x3b, 0xc4, 0x3e, 0xd8, 0x85, 0x8a, 0x1f, + 0x37, 0x13, 0x7c, 0xf9, 0xb3, 0xea, 0x75, 0x5b, 0x25, 0xf5, 0x37, 0xd5, 0x11, 0xea, 0xbe, 0x17, + 0x44, 0x93, 0x93, 0xbe, 0x81, 0x2b, 0xd7, 0xaa, 0xd2, 0x13, 0xac, 0xe2, 0xd7, 0xbf, 0x56, 0x02, + 0xd8, 0x20, 0xe1, 0x7d, 0xcf, 0xdf, 0xa5, 0x43, 0xf4, 0xbe, 0xba, 0xf4, 0xf1, 0x14, 0x8c, 0xf7, + 0x3c, 0x2b, 0x10, 0xe2, 0x84, 0xdd, 0x3b, 0x62, 0x07, 0xb7, 0xac, 0x14, 0x55, 0x61, 0x82, 0x79, + 0x69, 0x85, 0xdc, 0x66, 0x2a, 0x2a, 0x55, 0x4b, 0x02, 0xcc, 0xcb, 0x79, 0xee, 0x3c, 0x16, 0x42, + 0x18, 0x08, 0x9d, 0x5b, 0xe4, 0xce, 0xe3, 0x65, 0x58, 0x42, 0xf5, 0xaf, 0x8d, 0x43, 0x22, 0x5d, + 0x75, 0x6c, 0x37, 0x6b, 0xe7, 0x63, 0x37, 0x7f, 0x01, 0x96, 0x1c, 0xcf, 0xb0, 0x6a, 0x86, 0x43, + 0x99, 0xde, 0x6f, 0xf3, 0xe9, 0x30, 0xdc, 0x8e, 0xcc, 0x85, 0xcc, 0x04, 0xc0, 0xed, 0x9c, 0x3a, + 0x38, 0xb7, 0x35, 0x0a, 0x65, 0x92, 0x6c, 0x9e, 0x29, 0xeb, 0xf6, 0xa8, 0xc9, 0xbc, 0x57, 0xd4, + 0xe0, 0x51, 0xb9, 0x85, 0x26, 0xf3, 0x68, 0xa3, 0x5f, 0xd0, 0xe0, 0x12, 0xd9, 0x0f, 0x89, 0xef, + 0x1a, 0xce, 0x5d, 0xdf, 0xd8, 0xde, 0xb6, 0x4d, 0x11, 0x12, 0xc3, 0x27, 0xa7, 0x75, 0x74, 0x58, + 0xbd, 0xb4, 0x96, 0x55, 0xe1, 0xe1, 0x61, 0xf5, 0x93, 0x83, 0xb9, 0xea, 0xa3, 0x58, 0xd1, 0xcc, + 0x26, 0x8c, 0x19, 0xb3, 0xc9, 0x2d, 0xbf, 0x04, 0x95, 0x53, 0x44, 0x47, 0x4e, 0xab, 0x3e, 0x94, + 0x7f, 0x30, 0x09, 0x4a, 0x9c, 0xee, 0x29, 0xf2, 0xa3, 0xfd, 0x23, 0x0d, 0x2e, 0x9a, 0x8e, 0x4d, + 0xdc, 0x30, 0x15, 0x8e, 0xcc, 0x17, 0xc6, 0x66, 0xa1, 0x00, 0xe2, 0x1e, 0x71, 0x9b, 0x8d, 0xba, + 0xe7, 0xba, 0xc4, 0x0c, 0xeb, 0x19, 0xc8, 0xb9, 0x49, 0x92, 0x05, 0xc1, 0x99, 0x9d, 0x61, 0xdf, + 0xc3, 0xca, 0x9b, 0x0d, 0xf5, 0x7a, 0x4e, 0x5d, 0x94, 0x61, 0x09, 0x45, 0xcf, 0x43, 0xa5, 0xe3, + 0x7b, 0xfd, 0x5e, 0x50, 0x67, 0xd1, 0x3a, 0x7c, 0x06, 0x59, 0x30, 0xd4, 0x8d, 0xb8, 0x18, 0xab, + 0x75, 0xd0, 0xa7, 0x60, 0x86, 0xff, 0x6c, 0xf9, 0x64, 0xdb, 0xde, 0x17, 0xcb, 0x8d, 0x85, 0x00, + 0xdc, 0x50, 0xca, 0x71, 0xa2, 0x16, 0xfa, 0x18, 0x4c, 0xdb, 0x41, 0xd0, 0x27, 0xfe, 0x26, 0xbe, + 0x2d, 0x72, 0xb0, 0x30, 0xef, 0x67, 0x33, 0x2a, 0xc4, 0x31, 0x1c, 0xfd, 0xaa, 0x06, 0x73, 0x3e, + 0x79, 0xb7, 0x6f, 0xfb, 0xc4, 0x62, 0x44, 0x03, 0x11, 0x2c, 0x8d, 0x47, 0x0b, 0xd0, 0x5e, 0xc1, + 0x09, 0xa4, 0x9c, 0xcf, 0xa5, 0xef, 0x20, 0x09, 0xc4, 0xa9, 0x1e, 0xd0, 0xa1, 0x0a, 0xec, 0x8e, + 0x6b, 0xbb, 0x9d, 0x55, 0xa7, 0x13, 0x2c, 0x95, 0xd9, 0xd2, 0x65, 0x43, 0xd5, 0x8e, 0x8b, 0xb1, + 0x5a, 0x07, 0xbd, 0x08, 0xb3, 0xfd, 0x80, 0x72, 0x6e, 0x97, 0xf0, 0xf1, 0x9d, 0x8e, 0x43, 0xe8, + 0x36, 0x55, 0x00, 0x4e, 0xd6, 0xa3, 0xf6, 0x58, 0x54, 0x20, 0x46, 0x19, 0xf8, 0x8d, 0x4b, 0xda, + 0xcf, 0xcd, 0x04, 0x04, 0xa7, 0x6a, 0x2e, 0xaf, 0xc2, 0x85, 0x8c, 0xcf, 0x3c, 0xd5, 0xf2, 0xf8, + 0xad, 0x12, 0x7c, 0xe8, 0x44, 0xae, 0x44, 0xff, 0x50, 0x83, 0x0a, 0xd9, 0x0f, 0x7d, 0x43, 0x06, + 0xf4, 0xd1, 0x29, 0xda, 0x3e, 0x97, 0x25, 0xb0, 0xb2, 0x16, 0x13, 0xe2, 0xd3, 0x26, 0xb7, 0x3b, + 0x05, 0x82, 0xd5, 0xfe, 0x50, 0xd5, 0x9a, 0xdf, 0xc7, 0x55, 0x7d, 0x6b, 0x22, 0xab, 0xaf, 0x80, + 0x2c, 0x7f, 0x0e, 0x16, 0xd2, 0x98, 0x4f, 0x35, 0x52, 0xff, 0xa2, 0x04, 0x13, 0x2d, 0xc7, 0x70, + 0x1f, 0x45, 0xd6, 0xf8, 0xbf, 0x9c, 0x48, 0xe6, 0x50, 0x28, 0x43, 0x06, 0xeb, 0x6a, 0x6e, 0xa2, + 0x97, 0x4e, 0x2a, 0xd1, 0xcb, 0x6b, 0xc5, 0x49, 0x1c, 0x9f, 0xd7, 0xe5, 0x8f, 0x34, 0x98, 0x66, + 0xf5, 0x1e, 0x41, 0x4e, 0x88, 0xb7, 0x93, 0x39, 0x21, 0x5e, 0x2a, 0xfc, 0x4d, 0x39, 0x29, 0x20, + 0x7e, 0x18, 0x7d, 0x0b, 0xcb, 0xf8, 0xf0, 0x45, 0x35, 0x9b, 0x39, 0xff, 0x98, 0x67, 0xb3, 0xd2, + 0xa7, 0xdc, 0xf6, 0x4c, 0xc3, 0x49, 0x6b, 0x70, 0xc7, 0xa7, 0x34, 0xef, 0xc2, 0x34, 0x11, 0xd7, + 0xa4, 0xa3, 0x8f, 0x29, 0xa4, 0xd2, 0x46, 0x77, 0xad, 0x63, 0x72, 0x51, 0x49, 0x80, 0x63, 0x0a, + 0xfa, 0xbf, 0x2d, 0x41, 0x45, 0x99, 0xcb, 0xf7, 0x22, 0x4b, 0xcb, 0xf5, 0xcc, 0x44, 0xbf, 0x25, + 0x16, 0xb1, 0x77, 0xf9, 0x14, 0xc9, 0xc2, 0x7d, 0xa8, 0x98, 0x71, 0xc2, 0xb9, 0x51, 0x98, 0x5b, + 0xc9, 0x5b, 0x27, 0x42, 0x86, 0xe3, 0x02, 0xac, 0x12, 0xd1, 0xff, 0x75, 0x09, 0xa6, 0x5a, 0xbe, + 0x47, 0x27, 0xf8, 0x11, 0x88, 0x06, 0x23, 0x21, 0x1a, 0x8a, 0xad, 0x5b, 0xde, 0xd9, 0x5c, 0xe1, + 0x60, 0xa7, 0x84, 0xc3, 0xea, 0x28, 0x44, 0x8e, 0x17, 0x0f, 0xff, 0x51, 0x83, 0x8a, 0xa8, 0xf9, + 0x08, 0x04, 0xc4, 0x97, 0x92, 0x02, 0xe2, 0x95, 0x11, 0xbe, 0x2b, 0x47, 0x44, 0xfc, 0xba, 0x06, + 0xb3, 0xa2, 0xc6, 0x3a, 0xe9, 0x6e, 0x11, 0x1f, 0x5d, 0x87, 0xa9, 0xa0, 0xcf, 0x26, 0x52, 0x7c, + 0xd0, 0x93, 0xaa, 0x90, 0xf0, 0xb7, 0x0c, 0x93, 0xe5, 0xac, 0xe7, 0x55, 0x94, 0xdc, 0x4a, 0xbc, + 0x00, 0x47, 0x8d, 0xa9, 0x09, 0xe7, 0x7b, 0xce, 0xc0, 0xc5, 0x76, 0xec, 0x39, 0x04, 0x33, 0x08, + 0xb5, 0x9c, 0xe8, 0xdf, 0xe8, 0xf0, 0x88, 0x59, 0x4e, 0x14, 0x1c, 0x60, 0x5e, 0xae, 0x7f, 0x7d, + 0x5c, 0x0e, 0x36, 0x93, 0x60, 0x37, 0x61, 0xda, 0xf4, 0x89, 0x11, 0x12, 0xab, 0x76, 0x30, 0x4c, + 0xe7, 0x98, 0x16, 0x57, 0x8f, 0x5a, 0xe0, 0xb8, 0x31, 0x55, 0x98, 0xd4, 0xf3, 0xa0, 0x52, 0xac, + 0x5b, 0xe6, 0x9e, 0x05, 0x7d, 0x16, 0x26, 0xbc, 0xfb, 0xae, 0x0c, 0x84, 0x38, 0x96, 0x30, 0xfb, + 0x94, 0x3b, 0xb4, 0x36, 0xe6, 0x8d, 0x58, 0x26, 0x0f, 0x91, 0xfb, 0x81, 0x2b, 0xb2, 0x95, 0xac, + 0xbc, 0x0f, 0xc8, 0x81, 0xa9, 0x2e, 0x9b, 0x06, 0xee, 0xe5, 0x1e, 0x8d, 0x95, 0xf9, 0x84, 0xaa, + 0xf9, 0x04, 0x19, 0x66, 0x1c, 0x91, 0xa0, 0x8a, 0x2f, 0x55, 0xce, 0x82, 0x9e, 0x61, 0x12, 0x55, + 0xf1, 0xdd, 0x88, 0x0a, 0x71, 0x0c, 0x47, 0x07, 0x50, 0xe1, 0x37, 0x92, 0xb9, 0x94, 0x9d, 0x2a, + 0xee, 0x80, 0x14, 0xdd, 0xbb, 0x1b, 0x63, 0xe3, 0x43, 0xaf, 0x14, 0x60, 0x95, 0x96, 0xfe, 0xcb, + 0x63, 0x92, 0x49, 0x85, 0xc4, 0xcf, 0xce, 0xb3, 0xae, 0x15, 0x7a, 0xaf, 0xe1, 0x93, 0x30, 0xd1, + 0xdb, 0x31, 0x82, 0x88, 0x53, 0xa3, 0xdc, 0x97, 0x13, 0x2d, 0x5a, 0xf8, 0xf0, 0xb0, 0x3a, 0x23, + 0x48, 0xb3, 0xdf, 0x98, 0xd7, 0x45, 0x7d, 0xb8, 0x10, 0x84, 0x86, 0x43, 0xda, 0xb6, 0xf0, 0x16, + 0x05, 0xa1, 0xd1, 0xed, 0x15, 0x48, 0x61, 0xc9, 0x8e, 0x93, 0xda, 0x83, 0xa8, 0x70, 0x16, 0x7e, + 0xf4, 0xd7, 0x34, 0x58, 0x62, 0xe5, 0xab, 0xfd, 0xd0, 0xe3, 0x59, 0x69, 0x63, 0xe2, 0xa7, 0x3f, + 0x4c, 0x65, 0xd6, 0x7d, 0x3b, 0x07, 0x1f, 0xce, 0xa5, 0xa4, 0xff, 0xa9, 0x06, 0x68, 0x70, 0x16, + 0x91, 0x03, 0x65, 0x8b, 0x6c, 0x1b, 0x7d, 0x27, 0x8c, 0x76, 0xe1, 0x42, 0xb7, 0x56, 0x63, 0x94, + 0xb1, 0x70, 0x6c, 0x08, 0xbc, 0x58, 0x52, 0x40, 0x1e, 0x4c, 0xdf, 0xdf, 0xb1, 0x43, 0xe2, 0xd8, + 0x41, 0x28, 0x04, 0xe4, 0xa8, 0xe4, 0xa4, 0xda, 0xf1, 0x66, 0x84, 0x18, 0xc7, 0x34, 0xf4, 0x5f, + 0x1c, 0x83, 0xf2, 0x29, 0x5e, 0xd7, 0xe9, 0x03, 0x12, 0xd7, 0xd5, 0xa9, 0xae, 0x42, 0x46, 0xf1, + 0x52, 0x31, 0x8d, 0xa2, 0x3e, 0x80, 0x0c, 0x67, 0x10, 0x40, 0x5f, 0x86, 0x8b, 0xb6, 0xbb, 0xed, + 0x1b, 0x41, 0xe8, 0xf7, 0xcd, 0xb0, 0xef, 0x47, 0x84, 0xc7, 0x8a, 0x10, 0x66, 0xd6, 0x7d, 0x33, + 0x03, 0x1d, 0xce, 0x24, 0x82, 0x08, 0x4c, 0xdd, 0xf7, 0xfc, 0x5d, 0x2a, 0xbf, 0xc6, 0x8b, 0xa7, + 0xf0, 0x7e, 0x93, 0xa1, 0x88, 0x05, 0x17, 0xff, 0x1d, 0xe0, 0x08, 0xb7, 0xfe, 0xc7, 0x1a, 0x4c, + 0xf0, 0xeb, 0x4f, 0x1f, 0x08, 0xd3, 0x86, 0x75, 0x35, 0x37, 0x2d, 0x1d, 0xb5, 0x38, 0x58, 0x8d, + 0x0f, 0x88, 0xc5, 0xc1, 0xfa, 0x9a, 0xa3, 0x4e, 0xfc, 0xf1, 0x98, 0xf8, 0x16, 0xb6, 0x5f, 0x37, + 0xe1, 0x82, 0xd0, 0x3b, 0x6f, 0xdb, 0xdb, 0x84, 0x72, 0x57, 0xc3, 0x38, 0x08, 0xc4, 0x5d, 0x5e, + 0x26, 0xf8, 0xea, 0x83, 0x60, 0x9c, 0xd5, 0x06, 0xfd, 0x1b, 0x8d, 0xee, 0x8c, 0xa1, 0x6f, 0x9b, + 0x23, 0x65, 0xd0, 0x93, 0x7d, 0x5b, 0x59, 0xe7, 0xc8, 0xb8, 0xc1, 0xbe, 0x19, 0x6f, 0x91, 0xac, + 0xf4, 0xe1, 0x61, 0xb5, 0x9a, 0xe1, 0x0d, 0x8c, 0xbc, 0xd7, 0x74, 0x60, 0xbf, 0xf6, 0xe3, 0x63, + 0xab, 0x30, 0x4f, 0x7a, 0xd4, 0x63, 0x74, 0x13, 0x26, 0x02, 0xd3, 0xeb, 0x91, 0xe3, 0x1e, 0x91, + 0x4a, 0x5b, 0x5c, 0x72, 0x80, 0xdb, 0xb4, 0x25, 0xe6, 0x08, 0x96, 0xdf, 0x81, 0x19, 0xb5, 0xe7, + 0x19, 0x0e, 0x81, 0x86, 0xea, 0x10, 0x38, 0xf5, 0xb1, 0x9a, 0xea, 0x40, 0xf8, 0xfd, 0x12, 0x88, + 0x77, 0x37, 0x86, 0x38, 0x2f, 0xb0, 0xa3, 0xac, 0x61, 0x23, 0xbc, 0x35, 0x92, 0x7e, 0xcc, 0x2f, + 0x1e, 0x03, 0x35, 0x71, 0x18, 0x72, 0x61, 0xd2, 0x31, 0xb6, 0x88, 0x13, 0xbd, 0xc2, 0x70, 0xbd, + 0xf8, 0x33, 0x01, 0x3c, 0xbb, 0x6e, 0x90, 0xf2, 0x2a, 0xf3, 0x42, 0x2c, 0xa8, 0x2c, 0xbf, 0x04, + 0x15, 0xa5, 0xda, 0xa9, 0x7c, 0x30, 0xdf, 0xd4, 0xe0, 0x72, 0xc4, 0x12, 0xc9, 0xeb, 0xfc, 0xe8, + 0x59, 0x28, 0x1b, 0x3d, 0x9b, 0xb9, 0x25, 0x55, 0xc7, 0xee, 0x6a, 0xab, 0xc9, 0xca, 0xb0, 0x84, + 0xa2, 0x8f, 0x43, 0x39, 0x9a, 0x27, 0xa1, 0xa3, 0xc8, 0x25, 0x2e, 0xcf, 0x53, 0x64, 0x0d, 0xf4, + 0x8c, 0x92, 0x07, 0x6d, 0x22, 0xde, 0xd1, 0x24, 0x61, 0x7e, 0x46, 0xaa, 0xff, 0x5a, 0x09, 0x66, + 0xb9, 0x2d, 0x5f, 0xb3, 0x5d, 0xcb, 0x76, 0x3b, 0x8f, 0x40, 0x94, 0x26, 0xde, 0x53, 0x2b, 0x9d, + 0xd5, 0x7b, 0x6a, 0xb7, 0x60, 0xf2, 0x5d, 0xba, 0xac, 0x23, 0x76, 0x18, 0x6a, 0x75, 0xc9, 0xb9, + 0x66, 0x12, 0x21, 0xc0, 0x02, 0x85, 0xfe, 0x5f, 0x35, 0x58, 0x4c, 0x0c, 0xcb, 0x23, 0x10, 0xca, + 0xdb, 0x49, 0xa1, 0xbc, 0x5a, 0x2c, 0xa9, 0x85, 0xd2, 0xe7, 0x1c, 0xe1, 0xfc, 0xbb, 0x25, 0x18, + 0x6f, 0x13, 0x62, 0x3d, 0x82, 0x99, 0x7e, 0x3b, 0xb1, 0x69, 0x7e, 0xb6, 0xf0, 0xdb, 0x1a, 0x79, + 0x16, 0xff, 0x76, 0xca, 0xe2, 0xff, 0x5c, 0x61, 0x0a, 0xc7, 0x9b, 0xfb, 0xbf, 0x51, 0x02, 0xa0, + 0xd5, 0xf8, 0x8b, 0x56, 0x22, 0x46, 0x2f, 0x7e, 0xf3, 0x70, 0xfa, 0xfd, 0xf2, 0x52, 0xa1, 0x2e, + 0xdf, 0x4d, 0x1a, 0x8b, 0xfd, 0xc9, 0xc9, 0x37, 0x93, 0x92, 0xab, 0x6f, 0xfc, 0x8c, 0x56, 0x9f, + 0xfe, 0xcf, 0x35, 0x60, 0x79, 0x95, 0x1b, 0x1b, 0x6d, 0xf4, 0x22, 0xcc, 0xda, 0xfc, 0xb4, 0xae, + 0xa1, 0x26, 0x8f, 0x62, 0x67, 0x0a, 0x4d, 0x15, 0x80, 0x93, 0xf5, 0x50, 0x57, 0x19, 0xd7, 0x11, + 0xde, 0x95, 0x13, 0xfd, 0x90, 0xd9, 0x43, 0x67, 0xb2, 0x27, 0x46, 0xff, 0x71, 0x09, 0xe6, 0x53, + 0x75, 0x87, 0xd0, 0xe7, 0xcf, 0x47, 0x7a, 0x29, 0x09, 0x45, 0xc7, 0xce, 0x3f, 0xa1, 0xa8, 0xcc, + 0xed, 0x39, 0x7e, 0xbe, 0xb9, 0x3d, 0xbf, 0xa7, 0x01, 0x7b, 0x1c, 0xee, 0x11, 0x48, 0xcf, 0xbf, + 0x94, 0x94, 0x9e, 0x9f, 0x29, 0xca, 0x38, 0x39, 0x42, 0xf3, 0xb7, 0x4b, 0xc0, 0xf2, 0xed, 0x8b, + 0xe0, 0x04, 0xe5, 0xbc, 0x5f, 0xcb, 0x39, 0xef, 0xbf, 0x2a, 0xc2, 0x05, 0x52, 0x8e, 0x2f, 0x25, + 0x64, 0xe0, 0xe3, 0x4a, 0x44, 0xc0, 0x58, 0x52, 0x8c, 0x0c, 0x46, 0x05, 0xa0, 0x07, 0x30, 0x1b, + 0xec, 0x78, 0x5e, 0x18, 0x99, 0xc0, 0x62, 0xee, 0x56, 0x0b, 0x87, 0xd4, 0x46, 0x9f, 0xc2, 0x17, + 0x66, 0x5b, 0xc5, 0x8d, 0x93, 0xa4, 0xd0, 0x0a, 0xc0, 0x96, 0xe3, 0x99, 0xbb, 0xf5, 0x66, 0x03, + 0x47, 0x81, 0x97, 0x2c, 0xa2, 0xa8, 0x26, 0x4b, 0xb1, 0x52, 0x43, 0xff, 0x43, 0x8d, 0x8f, 0xd6, + 0x29, 0x96, 0xd5, 0x23, 0x94, 0x92, 0x1f, 0x4d, 0x49, 0xc9, 0xbc, 0xd7, 0xe5, 0xbe, 0x2b, 0xbe, + 0x42, 0x3e, 0xdd, 0xe4, 0xc0, 0xac, 0xa3, 0x3e, 0xc3, 0x20, 0xd8, 0xb8, 0xd0, 0x0b, 0x0e, 0xe2, + 0xc1, 0x42, 0xa5, 0x08, 0x27, 0x91, 0x53, 0x31, 0x1a, 0x75, 0x5c, 0x7d, 0x96, 0x9a, 0x35, 0x6c, + 0xa9, 0x00, 0x9c, 0xac, 0xa7, 0xbf, 0x01, 0x1f, 0xe1, 0xdd, 0x66, 0x71, 0xcf, 0x6b, 0xfb, 0x26, + 0x09, 0x82, 0xba, 0xd1, 0x33, 0x4c, 0xaa, 0xd8, 0xb3, 0xeb, 0x82, 0xdc, 0xe3, 0x75, 0x8a, 0xa7, + 0xe3, 0xff, 0xbf, 0x06, 0x55, 0x05, 0x67, 0x22, 0x12, 0x24, 0x62, 0xd0, 0x6f, 0x69, 0x50, 0x31, + 0x5c, 0xd7, 0x0b, 0x0d, 0xf5, 0x00, 0xc6, 0x2a, 0xfe, 0xa0, 0x56, 0x2e, 0xa9, 0x95, 0xd5, 0x98, + 0x4c, 0xea, 0xa8, 0x55, 0x81, 0x60, 0xb5, 0x37, 0xcb, 0x9f, 0x83, 0x85, 0x74, 0xab, 0x53, 0xa9, + 0xf0, 0x35, 0xb8, 0xa4, 0xf4, 0x4a, 0x5c, 0xbc, 0xa2, 0xfa, 0xf2, 0x73, 0x30, 0xb5, 0x67, 0x07, + 0x76, 0x74, 0x81, 0x57, 0x19, 0xc5, 0x7b, 0xbc, 0x18, 0x47, 0x70, 0xfd, 0x75, 0xb8, 0xa0, 0xe2, + 0x60, 0x4b, 0x6c, 0xa3, 0x7d, 0x9a, 0x79, 0x58, 0x87, 0xab, 0x0a, 0x86, 0xcc, 0xdb, 0x47, 0xa7, + 0x41, 0xf7, 0xd5, 0xc9, 0x88, 0xc3, 0x45, 0x88, 0xfc, 0x77, 0x35, 0x78, 0x82, 0xe4, 0x31, 0x8c, + 0x60, 0xf7, 0x2f, 0x8c, 0x38, 0xa3, 0xb9, 0x0c, 0x29, 0xd2, 0xbb, 0xe4, 0x81, 0x71, 0x7e, 0xcf, + 0xd0, 0x01, 0x40, 0x20, 0xa7, 0x64, 0x94, 0xe8, 0xc9, 0xcc, 0x39, 0x16, 0x29, 0x3c, 0xe5, 0x6f, + 0xac, 0x10, 0x43, 0xef, 0x42, 0x39, 0x10, 0x33, 0x39, 0xca, 0xe5, 0xc8, 0x0c, 0xc6, 0x10, 0x01, + 0x62, 0xe2, 0x17, 0x96, 0x64, 0xd0, 0x6f, 0x6a, 0x70, 0xd1, 0xc9, 0x58, 0x17, 0x62, 0x4b, 0x68, + 0x9f, 0xc3, 0x92, 0xe3, 0x2e, 0xc0, 0x2c, 0x08, 0xce, 0xec, 0x0a, 0xfa, 0xc7, 0xb9, 0x37, 0xf1, + 0x78, 0xcc, 0xf2, 0xdd, 0x11, 0x3b, 0x79, 0x56, 0x97, 0xf2, 0xbe, 0x39, 0xc5, 0x55, 0x14, 0xe6, + 0xa9, 0xda, 0x82, 0xc9, 0x2d, 0xa6, 0xe2, 0x0b, 0x56, 0x2f, 0x6c, 0x4f, 0x88, 0xe7, 0xba, 0x99, + 0xfe, 0xcd, 0xff, 0xc7, 0x02, 0x33, 0x7a, 0x0b, 0xc6, 0x2c, 0x37, 0x7a, 0xcd, 0xe3, 0x95, 0x11, + 0xf4, 0xdb, 0x38, 0xc0, 0x94, 0x72, 0x07, 0x45, 0x8a, 0x5c, 0x28, 0xbb, 0x62, 0x57, 0x17, 0xbc, + 0x58, 0xf8, 0x3d, 0x43, 0xa9, 0x1d, 0x48, 0x9d, 0x24, 0x2a, 0xc1, 0x92, 0x06, 0xa5, 0x27, 0x15, + 0xf6, 0xf1, 0xd1, 0xe8, 0x0d, 0xf5, 0xe8, 0x7b, 0x4b, 0xd5, 0xbd, 0x4f, 0xf1, 0x94, 0xf6, 0x6c, + 0xae, 0xde, 0x4d, 0x60, 0x32, 0x34, 0x58, 0xbc, 0xc2, 0x64, 0xf1, 0x78, 0x01, 0xda, 0xff, 0xbb, + 0x14, 0x4b, 0xac, 0x4a, 0xb0, 0x9f, 0x01, 0x16, 0xc8, 0x29, 0x63, 0xf1, 0xa7, 0x16, 0xc5, 0x81, + 0x59, 0x61, 0xc6, 0xe2, 0x79, 0xec, 0x39, 0x63, 0xf1, 0xff, 0xb1, 0xc0, 0x8c, 0xde, 0xa1, 0xea, + 0x24, 0x97, 0xe3, 0x22, 0x1b, 0xd3, 0xeb, 0x23, 0xae, 0xb1, 0x20, 0x0a, 0x51, 0xe5, 0xbf, 0xb0, + 0xc4, 0x8f, 0xb6, 0x60, 0x4a, 0x98, 0x6e, 0xe2, 0x62, 0xed, 0x2b, 0x23, 0x64, 0xfb, 0x8d, 0x9e, + 0x66, 0xe0, 0x97, 0xdb, 0x22, 0xc4, 0xfa, 0x3f, 0x29, 0x73, 0xa3, 0x5b, 0x9c, 0xf5, 0x6d, 0x43, + 0x39, 0x42, 0x37, 0x4a, 0xb8, 0x74, 0x94, 0x8d, 0x9d, 0x7f, 0x5a, 0xf4, 0x0b, 0x4b, 0xdc, 0xa8, + 0x9e, 0x15, 0x99, 0x1e, 0x67, 0xcc, 0x1b, 0x2e, 0x2a, 0x3d, 0x19, 0x8a, 0x32, 0xf6, 0x28, 0x42, + 0x51, 0xce, 0xf2, 0xed, 0xfa, 0x57, 0x61, 0x3e, 0x8a, 0x14, 0xb1, 0x08, 0x73, 0x08, 0x8b, 0x18, + 0x4a, 0x76, 0x57, 0xab, 0x9e, 0x04, 0xe1, 0x74, 0x5d, 0xf4, 0xfb, 0x1a, 0x94, 0x4d, 0xb1, 0x4b, + 0x8b, 0x75, 0x75, 0x7b, 0x34, 0xcf, 0xcc, 0x4a, 0xb4, 0xe9, 0x73, 0x75, 0xef, 0x5e, 0x24, 0x23, + 0xa2, 0xe2, 0x33, 0xf2, 0xd4, 0xcb, 0x5e, 0xa3, 0xff, 0x40, 0x95, 0x59, 0x87, 0xe5, 0x88, 0x67, + 0x57, 0x5f, 0x78, 0x70, 0xe7, 0x9d, 0x11, 0xbf, 0x62, 0x35, 0xc6, 0xc8, 0x3f, 0xe4, 0x8b, 0x52, + 0x6f, 0x8d, 0x21, 0x67, 0xf4, 0x2d, 0x6a, 0xf7, 0x97, 0x77, 0x61, 0x36, 0x31, 0x82, 0xe7, 0x79, + 0x60, 0xb0, 0xec, 0xc2, 0x42, 0xfa, 0x43, 0xcf, 0xf5, 0x80, 0xe2, 0x16, 0x4c, 0x4b, 0x09, 0x8c, + 0x9e, 0x56, 0x08, 0xc5, 0x3b, 0xe4, 0x2d, 0x72, 0xc0, 0xa9, 0x56, 0x13, 0x0a, 0x3e, 0x37, 0xdb, + 0xef, 0xd1, 0x02, 0x81, 0x50, 0xff, 0x5f, 0x1a, 0x97, 0x3a, 0xe2, 0x39, 0x12, 0x03, 0x2a, 0x5d, + 0x9e, 0x18, 0x8a, 0x25, 0x22, 0x2d, 0x76, 0x17, 0x8d, 0x85, 0x35, 0xac, 0xc7, 0x68, 0xb0, 0x8a, + 0x13, 0xdd, 0x1f, 0x7c, 0x30, 0xe7, 0xfa, 0x68, 0xdb, 0xc3, 0xd0, 0xef, 0xe6, 0xa0, 0xc1, 0x36, + 0xea, 0xf3, 0x24, 0xda, 0xf1, 0xcf, 0x93, 0x9c, 0xfc, 0x68, 0x85, 0xfe, 0x1d, 0x0d, 0x32, 0xd3, + 0x29, 0x23, 0x1d, 0x26, 0x79, 0x30, 0xb5, 0xfa, 0x92, 0x10, 0x8f, 0xb4, 0xc6, 0x02, 0x82, 0x7c, + 0xb8, 0x28, 0x42, 0x95, 0x6f, 0x91, 0x83, 0xf8, 0x0d, 0x1b, 0xc1, 0x30, 0xc3, 0x07, 0x2d, 0xb2, + 0x84, 0x31, 0xed, 0x14, 0x26, 0x9c, 0x89, 0x9b, 0x45, 0xcb, 0x32, 0x8d, 0xfb, 0x83, 0x71, 0xa4, + 0xcc, 0xba, 0x7a, 0xbe, 0xd1, 0xb2, 0x9c, 0xc4, 0xc9, 0xd1, 0xb2, 0xac, 0xde, 0x07, 0xe4, 0xec, + 0x9a, 0xf5, 0x35, 0xc7, 0xd3, 0xf7, 0x3d, 0x0d, 0x16, 0x07, 0xae, 0x9c, 0x0f, 0x75, 0xf2, 0xf9, + 0xc8, 0x1c, 0x58, 0xcf, 0xa4, 0x9f, 0x82, 0xa9, 0x64, 0x66, 0xa2, 0x78, 0x13, 0x66, 0x13, 0x8e, + 0x3e, 0x79, 0x83, 0x49, 0xcb, 0xbc, 0xc1, 0xa4, 0x5e, 0x50, 0x2a, 0x1d, 0x7b, 0x41, 0xe9, 0x68, + 0x46, 0x4c, 0x37, 0x33, 0x9a, 0xde, 0x86, 0x49, 0x76, 0x8d, 0x28, 0x7a, 0x0a, 0xeb, 0xe5, 0xc2, + 0xd7, 0x93, 0x02, 0x2e, 0x06, 0xf8, 0xff, 0x58, 0x60, 0x45, 0x0d, 0x58, 0x60, 0x4f, 0x24, 0xb7, + 0x7c, 0x6f, 0xdb, 0x76, 0xc8, 0x46, 0x2c, 0x71, 0xe4, 0xa5, 0xe5, 0x7a, 0x0a, 0x8e, 0x07, 0x5a, + 0x20, 0xcc, 0xcd, 0x2e, 0xbe, 0x10, 0x5e, 0x2c, 0xe8, 0xf0, 0xe6, 0x69, 0xa1, 0xa4, 0xb9, 0xf5, + 0x2e, 0x00, 0x89, 0x26, 0x2e, 0x8a, 0x74, 0x79, 0xb5, 0xd8, 0x75, 0x6c, 0x39, 0xfd, 0x91, 0xc4, + 0x90, 0x45, 0x01, 0x56, 0x88, 0x20, 0x1f, 0x2a, 0x3b, 0xf1, 0x4b, 0x39, 0xc2, 0x06, 0x7a, 0x6d, + 0xc4, 0x57, 0x7a, 0xf8, 0x06, 0xa5, 0x14, 0x60, 0x95, 0x08, 0xf2, 0x13, 0x4f, 0x53, 0x8f, 0xf0, + 0x0e, 0x41, 0xac, 0x3a, 0x9f, 0xf4, 0x2c, 0x35, 0xa5, 0xe9, 0xca, 0x7b, 0x80, 0xa3, 0x18, 0x4d, + 0xf1, 0x6d, 0xc2, 0x98, 0x66, 0x5c, 0x86, 0x15, 0x2a, 0x74, 0x6c, 0xbb, 0xf1, 0xdd, 0x4f, 0x61, + 0x43, 0xbd, 0x36, 0xe2, 0x1d, 0x5c, 0xb1, 0xf9, 0xc7, 0x05, 0x58, 0x25, 0x82, 0x5c, 0x80, 0xae, + 0xbc, 0x12, 0x2a, 0x6c, 0xa9, 0x42, 0xdf, 0x19, 0x5f, 0x2c, 0xe5, 0xde, 0xaa, 0xf8, 0x37, 0x56, + 0x28, 0x50, 0x23, 0x51, 0x5a, 0xec, 0x50, 0xdc, 0x8a, 0x1a, 0xca, 0x5a, 0xff, 0x74, 0xac, 0x49, + 0x54, 0xd8, 0x7a, 0x7d, 0x52, 0xd1, 0x22, 0x1e, 0x1e, 0x56, 0x67, 0x98, 0x0c, 0x19, 0xd0, 0x2a, + 0x62, 0xf7, 0xfc, 0xcc, 0x71, 0xee, 0x79, 0x74, 0x03, 0x16, 0x03, 0xf5, 0xb8, 0x9b, 0x09, 0x86, + 0x59, 0xd6, 0x44, 0x5e, 0x21, 0x6e, 0xa7, 0x2b, 0xe0, 0xc1, 0x36, 0x5c, 0xf0, 0x11, 0x8b, 0xb5, + 0x9f, 0x53, 0x05, 0x1f, 0x2f, 0xc3, 0x12, 0x8a, 0xf6, 0x52, 0x2f, 0x38, 0xcf, 0x8f, 0x6a, 0x66, + 0x0f, 0xf7, 0x9c, 0x33, 0xfa, 0xb2, 0xfa, 0x4a, 0xe7, 0x42, 0xf1, 0xb8, 0xa7, 0xec, 0x6b, 0xc0, + 0x27, 0xbc, 0xd4, 0xd9, 0x4f, 0x46, 0xfc, 0x2e, 0x9e, 0x49, 0x88, 0xa5, 0x74, 0xd8, 0xe7, 0x46, + 0xfb, 0x7e, 0xa7, 0x0c, 0x15, 0x45, 0xf7, 0x78, 0x2f, 0x6e, 0x77, 0x84, 0x50, 0x31, 0x3d, 0x37, + 0x08, 0x7d, 0x43, 0xb9, 0xd1, 0x32, 0x22, 0x4d, 0xf9, 0xe1, 0xf5, 0x18, 0x33, 0x56, 0xc9, 0xd0, + 0x25, 0x2a, 0x1d, 0x1d, 0x63, 0x67, 0xe0, 0xe8, 0x90, 0x4b, 0x34, 0xc3, 0xd9, 0xf1, 0x29, 0x80, + 0x48, 0xd2, 0xcb, 0x67, 0x10, 0x65, 0x8a, 0xb0, 0x66, 0x70, 0x53, 0xc2, 0xb0, 0x52, 0x0f, 0x3d, + 0x80, 0x59, 0x47, 0x4d, 0x0f, 0x24, 0xb6, 0xa1, 0x42, 0x47, 0x91, 0x89, 0x3c, 0x43, 0xd1, 0xa9, + 0x98, 0x52, 0x84, 0x93, 0xa4, 0x28, 0x1b, 0x38, 0x51, 0x4a, 0xab, 0x91, 0x9c, 0x76, 0x32, 0x31, + 0x56, 0xcc, 0x06, 0xb2, 0x28, 0xc0, 0x0a, 0x91, 0x1c, 0xcf, 0xca, 0x54, 0x21, 0xcf, 0x4a, 0x1f, + 0x2e, 0xf8, 0x24, 0xf4, 0x0f, 0xea, 0x07, 0x26, 0x7b, 0xec, 0xcc, 0x0f, 0x59, 0x3e, 0xa9, 0x72, + 0xb1, 0x80, 0x71, 0x3c, 0x88, 0x0a, 0x67, 0xe1, 0x4f, 0x88, 0xb8, 0xe9, 0x63, 0x45, 0xdc, 0xa7, + 0xa1, 0x12, 0x12, 0x73, 0xc7, 0xb5, 0x4d, 0xc3, 0x69, 0x36, 0xc4, 0xa5, 0xce, 0x78, 0xb5, 0xc6, + 0x20, 0xac, 0xd6, 0x43, 0x35, 0x18, 0xeb, 0xdb, 0x96, 0x90, 0xf3, 0x3f, 0x23, 0xdf, 0xbc, 0x6c, + 0x36, 0x1e, 0x1e, 0x56, 0x3f, 0x14, 0xbb, 0x2a, 0xe4, 0x57, 0x5d, 0xeb, 0xed, 0x76, 0xae, 0x85, + 0x07, 0x3d, 0x12, 0xac, 0x6c, 0x36, 0x1b, 0x98, 0x36, 0xce, 0xf2, 0x3a, 0xcd, 0x0c, 0xef, 0x75, + 0xd2, 0x6f, 0x03, 0xc4, 0xc2, 0x64, 0x64, 0x3f, 0xc0, 0x4f, 0x27, 0xe0, 0xd2, 0xa8, 0xe7, 0x6b, + 0x2c, 0xf1, 0x12, 0xcb, 0x06, 0xbf, 0xba, 0x1d, 0x12, 0xff, 0xce, 0x9d, 0xf5, 0xbb, 0x3b, 0x3e, + 0x09, 0x76, 0x3c, 0xc7, 0x2a, 0x98, 0xf9, 0x29, 0x7e, 0x4c, 0x60, 0x00, 0x23, 0xce, 0xa1, 0x84, + 0xea, 0xb0, 0x18, 0x65, 0xa4, 0xc7, 0x46, 0x48, 0x6a, 0x7d, 0x3f, 0x08, 0x45, 0x58, 0x20, 0x73, + 0x68, 0xae, 0xa5, 0x81, 0x78, 0xb0, 0x7e, 0x1a, 0x09, 0xcf, 0x4c, 0x3f, 0xce, 0x1e, 0xac, 0x1b, + 0x40, 0xc2, 0xd3, 0xd3, 0x0f, 0xd6, 0x57, 0x91, 0xc8, 0x07, 0xee, 0x98, 0xec, 0x48, 0x21, 0x89, + 0x5f, 0xbf, 0x1b, 0xac, 0x8f, 0x2c, 0x78, 0xca, 0x27, 0xa6, 0xd7, 0xed, 0x12, 0xd7, 0xe2, 0x29, + 0xfb, 0x0c, 0xbf, 0x63, 0xbb, 0xd7, 0x7d, 0x83, 0x55, 0x14, 0xaf, 0xe8, 0x5d, 0x3d, 0x3a, 0xac, + 0x3e, 0x85, 0x8f, 0xa9, 0x87, 0x8f, 0xc5, 0x82, 0xba, 0x30, 0xdf, 0x67, 0x99, 0x4a, 0xfc, 0xa6, + 0x1b, 0x12, 0x7f, 0xcf, 0x70, 0x0a, 0xbe, 0xb7, 0xc0, 0x78, 0x77, 0x33, 0x89, 0x0a, 0xa7, 0x71, + 0xa3, 0x03, 0x2a, 0x16, 0x44, 0x77, 0x14, 0x92, 0xe5, 0xe2, 0xa9, 0xc9, 0xf0, 0x20, 0x3a, 0x9c, + 0x45, 0x43, 0xff, 0xfb, 0x1a, 0x88, 0x93, 0x04, 0x6a, 0x1f, 0x2a, 0x46, 0x6e, 0xf9, 0xbd, 0x7f, + 0x77, 0xf7, 0x3e, 0x08, 0x04, 0x2c, 0x1f, 0xd4, 0x50, 0xd9, 0x84, 0x4e, 0x7e, 0x48, 0x35, 0xce, + 0x67, 0x34, 0x96, 0x9b, 0xcf, 0xe8, 0xbb, 0x1a, 0xa4, 0xdf, 0xdd, 0xa2, 0x56, 0xb7, 0xb8, 0x74, + 0x22, 0x42, 0xd7, 0x79, 0x6c, 0x15, 0x2f, 0xc2, 0x11, 0x2c, 0xa9, 0xab, 0x8d, 0x10, 0xa3, 0x9e, + 0x1d, 0x2f, 0x7c, 0xbc, 0xae, 0xa6, 0xff, 0x70, 0x0e, 0x26, 0xf9, 0x35, 0x09, 0x2a, 0x7b, 0x32, + 0xc2, 0x31, 0x6e, 0x15, 0xbf, 0x88, 0x51, 0x20, 0xea, 0x22, 0x91, 0xb6, 0xa2, 0x74, 0x6c, 0xda, + 0x0a, 0xcc, 0x93, 0x8a, 0x8d, 0x60, 0x9f, 0xd7, 0x71, 0x53, 0xe4, 0xb1, 0x16, 0x09, 0xc5, 0x50, + 0x98, 0x30, 0x5c, 0xc7, 0x8b, 0xa7, 0x4b, 0xe3, 0x03, 0xa0, 0x98, 0xaf, 0x73, 0xc7, 0x98, 0xae, + 0x71, 0x5c, 0xfa, 0x44, 0x71, 0x67, 0xae, 0x18, 0xf2, 0x21, 0xe2, 0xd2, 0x25, 0xc7, 0x4f, 0xe6, + 0x72, 0xfc, 0x36, 0x4c, 0x09, 0xb9, 0x21, 0x84, 0xd8, 0x2b, 0x23, 0x24, 0x0c, 0x53, 0x2e, 0x12, + 0xf2, 0x02, 0x1c, 0x21, 0xa7, 0x3b, 0x63, 0xd7, 0xd8, 0xb7, 0xbb, 0xfd, 0x2e, 0x93, 0x5c, 0x13, + 0x6a, 0x55, 0x56, 0x8c, 0x23, 0x38, 0xab, 0xca, 0x7d, 0xe0, 0x4c, 0x1f, 0x51, 0xab, 0x8a, 0x77, + 0x18, 0x22, 0x38, 0x7a, 0x0b, 0xca, 0x5d, 0x63, 0xbf, 0xdd, 0xf7, 0x3b, 0x44, 0x98, 0xac, 0xf9, + 0x8e, 0xd8, 0x7e, 0x68, 0x3b, 0x2b, 0x54, 0x8b, 0x0e, 0xfd, 0x95, 0xa6, 0x1b, 0xde, 0xf1, 0xdb, + 0xa1, 0x2f, 0x73, 0x23, 0xad, 0x0b, 0x2c, 0x58, 0xe2, 0x43, 0x0e, 0xcc, 0x75, 0x8d, 0xfd, 0x4d, + 0xd7, 0x90, 0xe9, 0xe2, 0x2b, 0x05, 0x29, 0x30, 0xbf, 0xdd, 0x7a, 0x02, 0x17, 0x4e, 0xe1, 0xce, + 0x70, 0x11, 0xce, 0x9c, 0x97, 0x8b, 0x70, 0x55, 0x9e, 0x6b, 0xcf, 0x32, 0x26, 0x7c, 0x22, 0xcb, + 0x5b, 0x7e, 0xfc, 0x99, 0xf5, 0xdb, 0xf2, 0xcc, 0x7a, 0xae, 0xb8, 0x5f, 0xef, 0x98, 0xf3, 0xea, + 0x3e, 0x54, 0x2c, 0xf9, 0xee, 0x7b, 0xb0, 0x34, 0x5f, 0xdc, 0xae, 0x8c, 0x9f, 0x8f, 0x57, 0x92, + 0xb9, 0xc6, 0xa8, 0xb1, 0x4a, 0x07, 0xdd, 0xe1, 0xe9, 0xc4, 0x1d, 0x12, 0xc6, 0x55, 0x98, 0x5e, + 0xbc, 0xc0, 0x5d, 0x07, 0x51, 0xf6, 0xef, 0x81, 0x0a, 0x38, 0xbb, 0x1d, 0x55, 0x25, 0x79, 0x30, + 0xed, 0x62, 0x7c, 0x7f, 0x39, 0x71, 0x51, 0xe5, 0x97, 0x34, 0x58, 0xe0, 0xcf, 0xbc, 0xd4, 0xbd, + 0x6e, 0xcf, 0x73, 0x09, 0x9d, 0x16, 0xc4, 0xc6, 0xf4, 0xf3, 0xc5, 0x65, 0x43, 0x3b, 0x85, 0x51, + 0x1c, 0x73, 0xa4, 0x4a, 0xf1, 0x00, 0x65, 0xf4, 0x7b, 0x1a, 0x2c, 0x75, 0x73, 0x72, 0xa5, 0x2e, + 0x5d, 0x28, 0x1e, 0x9c, 0x73, 0x52, 0xfe, 0x55, 0xfe, 0xf4, 0xd4, 0x49, 0xb5, 0x70, 0x6e, 0xdf, + 0x46, 0x0d, 0xe1, 0x1b, 0xe5, 0x02, 0xcf, 0xcf, 0xc3, 0x42, 0x7a, 0x0f, 0x50, 0x13, 0xa0, 0x6b, + 0xe7, 0x9a, 0x00, 0x5d, 0x7f, 0x15, 0x2e, 0x67, 0xcf, 0x39, 0x55, 0x89, 0xd8, 0x4b, 0x02, 0xc2, + 0x12, 0x89, 0xd3, 0x7b, 0xd1, 0x42, 0xcc, 0x61, 0xb5, 0x4f, 0x7c, 0xff, 0x27, 0x57, 0x1e, 0xfb, + 0xc1, 0x4f, 0xae, 0x3c, 0xf6, 0xa3, 0x9f, 0x5c, 0x79, 0xec, 0xab, 0x47, 0x57, 0xb4, 0xef, 0x1f, + 0x5d, 0xd1, 0x7e, 0x70, 0x74, 0x45, 0xfb, 0xd1, 0xd1, 0x15, 0xed, 0x7f, 0x1c, 0x5d, 0xd1, 0x7e, + 0xe5, 0x7f, 0x5e, 0x79, 0xec, 0xad, 0x29, 0xd1, 0xa3, 0x3f, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x29, + 0xa3, 0x30, 0xff, 0x7f, 0xaa, 0x00, 0x00, } func (m *Addon) Marshal() (dAtA []byte, err error) { @@ -6571,6 +6709,84 @@ func (m *HorizontalPodAutoscalerConfig) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *Ingress) 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 *Ingress) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Ingress) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Controller.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Domain) + copy(dAtA[i:], m.Domain) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Domain))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *IngressController) 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 *IngressController) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IngressController) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ProviderConfig != nil { + { + size, err := m.ProviderConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Kind) + copy(dAtA[i:], m.Kind) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Kind))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *KubeAPIServerConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6591,6 +6807,18 @@ func (m *KubeAPIServerConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Requests != nil { + { + size, err := m.Requests.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } if m.WatchCacheSizes != nil { { size, err := m.WatchCacheSizes.MarshalToSizedBuffer(dAtA[:i]) @@ -6712,6 +6940,39 @@ func (m *KubeAPIServerConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *KubeAPIServerRequests) 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 *KubeAPIServerRequests) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *KubeAPIServerRequests) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MaxMutatingInflight != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.MaxMutatingInflight)) + i-- + dAtA[i] = 0x10 + } + if m.MaxNonMutatingInflight != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.MaxNonMutatingInflight)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *KubeControllerManagerConfig) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6732,6 +6993,18 @@ func (m *KubeControllerManagerConfig) MarshalToSizedBuffer(dAtA []byte) (int, er _ = i var l int _ = l + if m.PodEvictionTimeout != nil { + { + size, err := m.PodEvictionTimeout.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } if m.NodeCIDRMaskSize != nil { i = encodeVarintGenerated(dAtA, i, uint64(*m.NodeCIDRMaskSize)) i-- @@ -9633,9 +9906,85 @@ func (m *SeedDNS) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - i -= len(m.IngressDomain) - copy(dAtA[i:], m.IngressDomain) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.IngressDomain))) + if m.Provider != nil { + { + size, err := m.Provider.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.IngressDomain != nil { + i -= len(*m.IngressDomain) + copy(dAtA[i:], *m.IngressDomain) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.IngressDomain))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *SeedDNSProvider) 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 *SeedDNSProvider) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SeedDNSProvider) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Zones != nil { + { + size, err := m.Zones.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if m.Domains != nil { + { + size, err := m.Domains.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + { + size, err := m.SecretRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -10112,6 +10461,18 @@ func (m *SeedSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Ingress != nil { + { + size, err := m.Ingress.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } if m.Settings != nil { { size, err := m.Settings.MarshalToSizedBuffer(dAtA[:i]) @@ -10227,6 +10588,64 @@ func (m *SeedStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Allocatable) > 0 { + keysForAllocatable := make([]string, 0, len(m.Allocatable)) + for k := range m.Allocatable { + keysForAllocatable = append(keysForAllocatable, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAllocatable) + for iNdEx := len(keysForAllocatable) - 1; iNdEx >= 0; iNdEx-- { + v := m.Allocatable[k8s_io_api_core_v1.ResourceName(keysForAllocatable[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForAllocatable[iNdEx]) + copy(dAtA[i:], keysForAllocatable[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForAllocatable[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x3a + } + } + if len(m.Capacity) > 0 { + keysForCapacity := make([]string, 0, len(m.Capacity)) + for k := range m.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + for iNdEx := len(keysForCapacity) - 1; iNdEx >= 0; iNdEx-- { + v := m.Capacity[k8s_io_api_core_v1.ResourceName(keysForCapacity[iNdEx])] + baseI := i + { + size, err := (&v).MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(keysForCapacity[iNdEx]) + copy(dAtA[i:], keysForCapacity[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForCapacity[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x32 + } + } if m.ClusterIdentity != nil { i -= len(*m.ClusterIdentity) copy(dAtA[i:], *m.ClusterIdentity) @@ -12384,6 +12803,34 @@ func (m *HorizontalPodAutoscalerConfig) Size() (n int) { return n } +func (m *Ingress) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Domain) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Controller.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *IngressController) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + if m.ProviderConfig != nil { + l = m.ProviderConfig.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *KubeAPIServerConfig) Size() (n int) { if m == nil { return 0 @@ -12431,6 +12878,25 @@ func (m *KubeAPIServerConfig) Size() (n int) { l = m.WatchCacheSizes.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Requests != nil { + l = m.Requests.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *KubeAPIServerRequests) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MaxNonMutatingInflight != nil { + n += 1 + sovGenerated(uint64(*m.MaxNonMutatingInflight)) + } + if m.MaxMutatingInflight != nil { + n += 1 + sovGenerated(uint64(*m.MaxMutatingInflight)) + } return n } @@ -12449,6 +12915,10 @@ func (m *KubeControllerManagerConfig) Size() (n int) { if m.NodeCIDRMaskSize != nil { n += 1 + sovGenerated(uint64(*m.NodeCIDRMaskSize)) } + if m.PodEvictionTimeout != nil { + l = m.PodEvictionTimeout.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -13518,8 +13988,35 @@ func (m *SeedDNS) Size() (n int) { } var l int _ = l - l = len(m.IngressDomain) + if m.IngressDomain != nil { + l = len(*m.IngressDomain) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Provider != nil { + l = m.Provider.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *SeedDNSProvider) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = m.SecretRef.Size() n += 1 + l + sovGenerated(uint64(l)) + if m.Domains != nil { + l = m.Domains.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Zones != nil { + l = m.Zones.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -13723,6 +14220,10 @@ func (m *SeedSpec) Size() (n int) { l = m.Settings.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Ingress != nil { + l = m.Ingress.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -13751,6 +14252,24 @@ func (m *SeedStatus) Size() (n int) { l = len(*m.ClusterIdentity) n += 1 + l + sovGenerated(uint64(l)) } + if len(m.Capacity) > 0 { + for k, v := range m.Capacity { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Allocatable) > 0 { + for k, v := range m.Allocatable { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } return n } @@ -14838,6 +15357,28 @@ func (this *HorizontalPodAutoscalerConfig) String() string { }, "") return s } +func (this *Ingress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Ingress{`, + `Domain:` + fmt.Sprintf("%v", this.Domain) + `,`, + `Controller:` + strings.Replace(strings.Replace(this.Controller.String(), "IngressController", "IngressController", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressController) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressController{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `ProviderConfig:` + strings.Replace(fmt.Sprintf("%v", this.ProviderConfig), "RawExtension", "runtime.RawExtension", 1) + `,`, + `}`, + }, "") + return s +} func (this *KubeAPIServerConfig) String() string { if this == nil { return "nil" @@ -14867,6 +15408,18 @@ func (this *KubeAPIServerConfig) String() string { `RuntimeConfig:` + mapStringForRuntimeConfig + `,`, `ServiceAccountConfig:` + strings.Replace(this.ServiceAccountConfig.String(), "ServiceAccountConfig", "ServiceAccountConfig", 1) + `,`, `WatchCacheSizes:` + strings.Replace(this.WatchCacheSizes.String(), "WatchCacheSizes", "WatchCacheSizes", 1) + `,`, + `Requests:` + strings.Replace(this.Requests.String(), "KubeAPIServerRequests", "KubeAPIServerRequests", 1) + `,`, + `}`, + }, "") + return s +} +func (this *KubeAPIServerRequests) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&KubeAPIServerRequests{`, + `MaxNonMutatingInflight:` + valueToStringGenerated(this.MaxNonMutatingInflight) + `,`, + `MaxMutatingInflight:` + valueToStringGenerated(this.MaxMutatingInflight) + `,`, `}`, }, "") return s @@ -14879,6 +15432,7 @@ func (this *KubeControllerManagerConfig) String() string { `KubernetesConfig:` + strings.Replace(strings.Replace(this.KubernetesConfig.String(), "KubernetesConfig", "KubernetesConfig", 1), `&`, ``, 1) + `,`, `HorizontalPodAutoscalerConfig:` + strings.Replace(this.HorizontalPodAutoscalerConfig.String(), "HorizontalPodAutoscalerConfig", "HorizontalPodAutoscalerConfig", 1) + `,`, `NodeCIDRMaskSize:` + valueToStringGenerated(this.NodeCIDRMaskSize) + `,`, + `PodEvictionTimeout:` + strings.Replace(fmt.Sprintf("%v", this.PodEvictionTimeout), "Duration", "v11.Duration", 1) + `,`, `}`, }, "") return s @@ -15636,7 +16190,21 @@ func (this *SeedDNS) String() string { return "nil" } s := strings.Join([]string{`&SeedDNS{`, - `IngressDomain:` + fmt.Sprintf("%v", this.IngressDomain) + `,`, + `IngressDomain:` + valueToStringGenerated(this.IngressDomain) + `,`, + `Provider:` + strings.Replace(this.Provider.String(), "SeedDNSProvider", "SeedDNSProvider", 1) + `,`, + `}`, + }, "") + return s +} +func (this *SeedDNSProvider) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SeedDNSProvider{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `SecretRef:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretReference", "v1.SecretReference", 1), `&`, ``, 1) + `,`, + `Domains:` + strings.Replace(this.Domains.String(), "DNSIncludeExclude", "DNSIncludeExclude", 1) + `,`, + `Zones:` + strings.Replace(this.Zones.String(), "DNSIncludeExclude", "DNSIncludeExclude", 1) + `,`, `}`, }, "") return s @@ -15786,6 +16354,7 @@ func (this *SeedSpec) String() string { `Taints:` + repeatedStringForTaints + `,`, `Volume:` + strings.Replace(this.Volume.String(), "SeedVolume", "SeedVolume", 1) + `,`, `Settings:` + strings.Replace(this.Settings.String(), "SeedSettings", "SeedSettings", 1) + `,`, + `Ingress:` + strings.Replace(this.Ingress.String(), "Ingress", "Ingress", 1) + `,`, `}`, }, "") return s @@ -15799,12 +16368,34 @@ func (this *SeedStatus) String() string { repeatedStringForConditions += strings.Replace(strings.Replace(f.String(), "Condition", "Condition", 1), `&`, ``, 1) + "," } repeatedStringForConditions += "}" + keysForCapacity := make([]string, 0, len(this.Capacity)) + for k := range this.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + mapStringForCapacity := "k8s_io_api_core_v1.ResourceList{" + for _, k := range keysForCapacity { + mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[k8s_io_api_core_v1.ResourceName(k)]) + } + mapStringForCapacity += "}" + keysForAllocatable := make([]string, 0, len(this.Allocatable)) + for k := range this.Allocatable { + keysForAllocatable = append(keysForAllocatable, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAllocatable) + mapStringForAllocatable := "k8s_io_api_core_v1.ResourceList{" + for _, k := range keysForAllocatable { + mapStringForAllocatable += fmt.Sprintf("%v: %v,", k, this.Allocatable[k8s_io_api_core_v1.ResourceName(k)]) + } + mapStringForAllocatable += "}" s := strings.Join([]string{`&SeedStatus{`, `Gardener:` + strings.Replace(this.Gardener.String(), "Gardener", "Gardener", 1) + `,`, `KubernetesVersion:` + valueToStringGenerated(this.KubernetesVersion) + `,`, `Conditions:` + repeatedStringForConditions + `,`, `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, `ClusterIdentity:` + valueToStringGenerated(this.ClusterIdentity) + `,`, + `Capacity:` + mapStringForCapacity + `,`, + `Allocatable:` + mapStringForAllocatable + `,`, `}`, }, "") return s @@ -22662,54 +23253,309 @@ func (m *HorizontalPodAutoscalerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.DownscaleStabilization == nil { - m.DownscaleStabilization = &v11.Duration{} - } - if err := m.DownscaleStabilization.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.DownscaleStabilization == nil { + m.DownscaleStabilization = &v11.Duration{} + } + if err := m.DownscaleStabilization.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InitialReadinessDelay", 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.InitialReadinessDelay == nil { + m.InitialReadinessDelay = &v11.Duration{} + } + if err := m.InitialReadinessDelay.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SyncPeriod", 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.SyncPeriod == nil { + m.SyncPeriod = &v11.Duration{} + } + if err := m.SyncPeriod.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 1 { + return fmt.Errorf("proto: wrong wireType = %d for field Tolerance", wireType) + } + var v uint64 + if (iNdEx + 8) > l { + return io.ErrUnexpectedEOF + } + v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) + iNdEx += 8 + v2 := float64(math.Float64frombits(v)) + m.Tolerance = &v2 + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpscaleDelay", 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.UpscaleDelay == nil { + m.UpscaleDelay = &v11.Duration{} + } + if err := m.UpscaleDelay.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 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Ingress) 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: Ingress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Ingress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Domain", 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.Domain = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Controller", 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.Controller.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field InitialReadinessDelay", 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 - } + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err } - if msglen < 0 { + if skippy < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + msglen - if postIndex < 0 { + if (iNdEx + skippy) < 0 { return ErrInvalidLengthGenerated } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - if m.InitialReadinessDelay == nil { - m.InitialReadinessDelay = &v11.Duration{} + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *IngressController) 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 err := m.InitialReadinessDelay.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if iNdEx >= l { + return io.ErrUnexpectedEOF } - iNdEx = postIndex - case 5: + 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: IngressController: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IngressController: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SyncPeriod", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -22719,43 +23565,27 @@ func (m *HorizontalPodAutoscalerConfig) 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.SyncPeriod == nil { - m.SyncPeriod = &v11.Duration{} - } - if err := m.SyncPeriod.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + m.Kind = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 6: - if wireType != 1 { - return fmt.Errorf("proto: wrong wireType = %d for field Tolerance", wireType) - } - var v uint64 - if (iNdEx + 8) > l { - return io.ErrUnexpectedEOF - } - v = uint64(encoding_binary.LittleEndian.Uint64(dAtA[iNdEx:])) - iNdEx += 8 - v2 := float64(math.Float64frombits(v)) - m.Tolerance = &v2 - case 7: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UpscaleDelay", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ProviderConfig", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22782,10 +23612,10 @@ func (m *HorizontalPodAutoscalerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.UpscaleDelay == nil { - m.UpscaleDelay = &v11.Duration{} + if m.ProviderConfig == nil { + m.ProviderConfig = &runtime.RawExtension{} } - if err := m.UpscaleDelay.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ProviderConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -23221,6 +24051,135 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Requests", 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.Requests == nil { + m.Requests = &KubeAPIServerRequests{} + } + if err := m.Requests.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 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *KubeAPIServerRequests) 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: KubeAPIServerRequests: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KubeAPIServerRequests: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxNonMutatingInflight", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.MaxNonMutatingInflight = &v + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxMutatingInflight", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.MaxMutatingInflight = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -23363,6 +24322,42 @@ func (m *KubeControllerManagerConfig) Unmarshal(dAtA []byte) error { } } m.NodeCIDRMaskSize = &v + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodEvictionTimeout", 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.PodEvictionTimeout == nil { + m.PodEvictionTimeout = &v11.Duration{} + } + if err := m.PodEvictionTimeout.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -31623,13 +32618,286 @@ func (m *SecretBinding) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Quotas", 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.Quotas = append(m.Quotas, v1.ObjectReference{}) + if err := m.Quotas[len(m.Quotas)-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 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SecretBindingList) 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: SecretBindingList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecretBindingList: 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) + } + 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.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 Items", 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.Items = append(m.Items, SecretBinding{}) + if err := m.Items[len(m.Items)-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 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Seed) 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: Seed: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Seed: 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 case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Quotas", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -31656,8 +32924,7 @@ func (m *SecretBinding) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Quotas = append(m.Quotas, v1.ObjectReference{}) - if err := m.Quotas[len(m.Quotas)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -31685,7 +32952,7 @@ func (m *SecretBinding) Unmarshal(dAtA []byte) error { } return nil } -func (m *SecretBindingList) Unmarshal(dAtA []byte) error { +func (m *SeedBackup) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -31708,15 +32975,47 @@ func (m *SecretBindingList) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SecretBindingList: wiretype end group for non-group") + return fmt.Errorf("proto: SeedBackup: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SecretBindingList: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SeedBackup: 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 Provider", 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.Provider = 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 { @@ -31743,13 +33042,49 @@ func (m *SecretBindingList) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.ProviderConfig == nil { + m.ProviderConfig = &runtime.RawExtension{} + } + 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 Items", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Region", 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.Region = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -31776,8 +33111,7 @@ func (m *SecretBindingList) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Items = append(m.Items, SecretBinding{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -31805,7 +33139,7 @@ func (m *SecretBindingList) Unmarshal(dAtA []byte) error { } return nil } -func (m *Seed) Unmarshal(dAtA []byte) error { +func (m *SeedDNS) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -31828,17 +33162,17 @@ func (m *Seed) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Seed: wiretype end group for non-group") + return fmt.Errorf("proto: SeedDNS: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Seed: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SeedDNS: 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 IngressDomain", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -31848,28 +33182,28 @@ func (m *Seed) 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.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } + s := string(dAtA[iNdEx:postIndex]) + m.IngressDomain = &s iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Provider", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -31896,40 +33230,10 @@ func (m *Seed) Unmarshal(dAtA []byte) error { 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) + if m.Provider == nil { + m.Provider = &SeedDNSProvider{} } - 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 { + if err := m.Provider.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -31957,7 +33261,7 @@ func (m *Seed) Unmarshal(dAtA []byte) error { } return nil } -func (m *SeedBackup) Unmarshal(dAtA []byte) error { +func (m *SeedDNSProvider) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -31980,15 +33284,15 @@ func (m *SeedBackup) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: SeedBackup: wiretype end group for non-group") + return fmt.Errorf("proto: SeedDNSProvider: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: SeedBackup: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SeedDNSProvider: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Provider", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -32016,11 +33320,11 @@ func (m *SeedBackup) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Provider = string(dAtA[iNdEx:postIndex]) + m.Type = string(dAtA[iNdEx:postIndex]) 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 SecretRef", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -32047,18 +33351,15 @@ func (m *SeedBackup) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ProviderConfig == nil { - m.ProviderConfig = &runtime.RawExtension{} - } - if err := m.ProviderConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Domains", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -32068,28 +33369,31 @@ func (m *SeedBackup) 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.Region = &s + if m.Domains == nil { + m.Domains = &DNSIncludeExclude{} + } + if err := m.Domains.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Zones", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -32116,94 +33420,12 @@ func (m *SeedBackup) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if m.Zones == nil { + m.Zones = &DNSIncludeExclude{} } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { + if err := m.Zones.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *SeedDNS) 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: SeedDNS: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SeedDNS: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IngressDomain", 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.IngressDomain = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -33852,6 +35074,42 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ingress", 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.Ingress == nil { + m.Ingress = &Ingress{} + } + if err := m.Ingress.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -34060,6 +35318,264 @@ func (m *SeedStatus) Unmarshal(dAtA []byte) error { s := string(dAtA[iNdEx:postIndex]) m.ClusterIdentity = &s iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Capacity", 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.Capacity == nil { + m.Capacity = make(k8s_io_api_core_v1.ResourceList) + } + var mapkey k8s_io_api_core_v1.ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := 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) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = k8s_io_api_core_v1.ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Capacity[k8s_io_api_core_v1.ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Allocatable", 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.Allocatable == nil { + m.Allocatable = make(k8s_io_api_core_v1.ResourceList) + } + var mapkey k8s_io_api_core_v1.ResourceName + mapvalue := &resource.Quantity{} + for iNdEx < postIndex { + entryPreIndex := 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) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = k8s_io_api_core_v1.ResourceName(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapmsglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if postmsgIndex < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue = &resource.Quantity{} + if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Allocatable[k8s_io_api_core_v1.ResourceName(mapkey)] = *mapvalue + 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 bbf28ab5..ddc222f6 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 @@ -1,5 +1,5 @@ /* -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 +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. @@ -498,7 +498,7 @@ message ControllerResource { // DNS holds information about the provider, the hosted zone id and the domain. message DNS { // Domain is the external available domain of the Shoot cluster. This domain will be written into the - // kubeconfig that is handed out to end-users. + // kubeconfig that is handed out to end-users. Once set it is immutable. // +optional optional string domain = 1; @@ -676,6 +676,26 @@ message HorizontalPodAutoscalerConfig { optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration upscaleDelay = 7; } +// Ingress configures the Ingress specific settings of the Seed cluster +message Ingress { + // Domain specifies the IngressDomain of the Seed cluster pointing to the ingress controller endpoint. It will be used + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. + optional string domain = 1; + + // Controller configures a Gardener managed Ingress Controller listening on the ingressDomain + optional IngressController controller = 2; +} + +// IngressController enables a Gardener managed Ingress Controller listening on the ingressDomain +message IngressController { + // Kind defines which kind of IngressController to use, for example `nginx` + optional string kind = 1; + + // ProviderConfig specifies infrastructure specific configuration for the ingressController + // +optional + optional k8s.io.apimachinery.pkg.runtime.RawExtension providerConfig = 2; +} + // KubeAPIServerConfig contains configuration settings for the kube-apiserver. message KubeAPIServerConfig { optional KubernetesConfig kubernetesConfig = 1; @@ -723,6 +743,23 @@ message KubeAPIServerConfig { // cache size flags will have no effect, except when setting it to 0 (which disables the watch cache). // +optional optional WatchCacheSizes watchCacheSizes = 9; + + // Requests contains configuration for request-specific settings for the kube-apiserver. + // +optional + optional KubeAPIServerRequests requests = 10; +} + +// KubeAPIServerRequests contains configuration for request-specific settings for the kube-apiserver. +message KubeAPIServerRequests { + // MaxNonMutatingInflight is the maximum number of non-mutating requests in flight at a given time. When the server + // exceeds this, it rejects requests. + // +optional + optional int32 maxNonMutatingInflight = 1; + + // MaxMutatingInflight is the maximum number of mutating requests in flight at a given time. When the server + // exceeds this, it rejects requests. + // +optional + optional int32 maxMutatingInflight = 2; } // KubeControllerManagerConfig contains configuration settings for the kube-controller-manager. @@ -736,6 +773,10 @@ message KubeControllerManagerConfig { // NodeCIDRMaskSize defines the mask size for node cidr in cluster (default is 24) // +optional optional int32 nodeCIDRMaskSize = 3; + + // PodEvictionTimeout defines the grace period for deleting pods on failed nodes. Defaults to 2m. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration podEvictionTimeout = 4; } // KubeProxyConfig contains configuration settings for the kube-proxy. @@ -1211,7 +1252,7 @@ message Networking { message NginxIngress { optional Addon addon = 1; - // LoadBalancerSourceRanges is list of whitelist IP sources for NginxIngress + // LoadBalancerSourceRanges is list of allowed IP sources for NginxIngress // +optional repeated string loadBalancerSourceRanges = 2; @@ -1596,8 +1637,31 @@ message SeedBackup { // SeedDNS contains DNS-relevant information about this seed cluster. message SeedDNS { // IngressDomain is the domain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. + // This will be removed in the next API version and replaced by spec.ingress.domain. + // +optional optional string ingressDomain = 1; + + // Provider configures a DNSProvider + // +optional + optional SeedDNSProvider provider = 2; +} + +// SeedDNSProvider configures a DNSProvider for Seeds +message SeedDNSProvider { + // Type describes the type of the dns-provider, for example `aws-route53` + optional string type = 1; + + // SecretRef is a reference to a Secret object containing cloud provider credentials used for registering external domains. + optional k8s.io.api.core.v1.SecretReference secretRef = 2; + + // Domains contains information about which domains shall be included/excluded for this provider. + // +optional + optional DNSIncludeExclude domains = 3; + + // Zones contains information about which hosted zones shall be included/excluded for this provider. + // +optional + optional DNSIncludeExclude zones = 4; } // SeedList is a collection of Seeds. @@ -1754,6 +1818,10 @@ message SeedSpec { // Settings contains certain settings for this seed cluster. // +optional optional SeedSettings settings = 8; + + // Ingress configures Ingress specific settings of the Seed cluster. + // +optional + optional Ingress ingress = 9; } // SeedStatus is the status of a Seed. @@ -1780,6 +1848,15 @@ message SeedStatus { // ClusterIdentity is the identity of the Seed cluster // +optional optional string clusterIdentity = 5; + + // Capacity represents the total resources of a seed. + // +optional + map capacity = 6; + + // Allocatable represents the resources of a seed that are available for scheduling. + // Defaults to Capacity. + // +optional + map allocatable = 7; } // SeedTaint describes a taint on a seed. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition_builder.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition_builder.go new file mode 100644 index 00000000..c539b183 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/condition_builder.go @@ -0,0 +1,155 @@ +// 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 helper + +import ( + "fmt" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + + apiequality "k8s.io/apimachinery/pkg/api/equality" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// ConditionBuilder build a Condition. +type ConditionBuilder interface { + WithOldCondition(old gardencorev1beta1.Condition) ConditionBuilder + WithStatus(status gardencorev1beta1.ConditionStatus) ConditionBuilder + WithReason(reason string) ConditionBuilder + WithMessage(message string) ConditionBuilder + WithCodes(codes ...gardencorev1beta1.ErrorCode) ConditionBuilder + WithNowFunc(now func() metav1.Time) ConditionBuilder + Build() (new gardencorev1beta1.Condition, updated bool) +} + +// defaultConditionBuilder build a Condition. +type defaultConditionBuilder struct { + old gardencorev1beta1.Condition + status gardencorev1beta1.ConditionStatus + conditionType gardencorev1beta1.ConditionType + reason string + message string + codes []gardencorev1beta1.ErrorCode + nowFunc func() metav1.Time +} + +// NewConditionBuilder returns a ConditionBuilder for a specific condition. +func NewConditionBuilder(conditionType gardencorev1beta1.ConditionType) (ConditionBuilder, error) { + if conditionType == "" { + return nil, fmt.Errorf("conditionType cannot be empty") + } + + return &defaultConditionBuilder{ + conditionType: conditionType, + nowFunc: metav1.Now, + }, nil +} + +// WithOldCondition sets the old condition. It can be used to prodive default values. +// The old's condition type is overridden to the one specified in the builder. +func (b *defaultConditionBuilder) WithOldCondition(old gardencorev1beta1.Condition) ConditionBuilder { + old.Type = b.conditionType + b.old = old + + return b +} + +// WithStatus sets the status of the condition. +func (b *defaultConditionBuilder) WithStatus(status gardencorev1beta1.ConditionStatus) ConditionBuilder { + b.status = status + return b +} + +// WithReason sets the reason of the condition. +func (b *defaultConditionBuilder) WithReason(reason string) ConditionBuilder { + b.reason = reason + return b +} + +// WithMessage sets the message of the condition. +func (b *defaultConditionBuilder) WithMessage(message string) ConditionBuilder { + b.message = message + return b +} + +// WithCodes sets the codes of the condition. +func (b *defaultConditionBuilder) WithCodes(codes ...gardencorev1beta1.ErrorCode) ConditionBuilder { + b.codes = codes + return b +} + +// WithNowFunc sets the function used for getting the current time. +// Should only be used for tests. +func (b *defaultConditionBuilder) WithNowFunc(now func() metav1.Time) ConditionBuilder { + b.nowFunc = now + return b +} + +// Build creates the condition and returns if there are modifications with the OldCondition. +// If OldCondition is provided: +// - Any changes to status set the `LastTransitionTime` +// - Any updates to the message or the reason cause set `LastUpdateTime` to the current time. +func (b *defaultConditionBuilder) Build() (new gardencorev1beta1.Condition, updated bool) { + var ( + now = b.nowFunc() + emptyTime = metav1.Time{} + ) + + new = *b.old.DeepCopy() + + if new.LastTransitionTime == emptyTime { + new.LastTransitionTime = now + } + + if new.LastUpdateTime == emptyTime { + new.LastUpdateTime = now + } + + new.Type = b.conditionType + + if b.status != "" { + new.Status = b.status + } else if b.status == "" && b.old.Status == "" { + new.Status = gardencorev1beta1.ConditionUnknown + } + + if b.reason != "" { + new.Reason = b.reason + } else if b.reason == "" && b.old.Reason == "" { + new.Reason = "ConditionInitialized" + } + + if b.message != "" { + new.Message = b.message + } else if b.message == "" && b.old.Message == "" { + new.Message = "The condition has been initialized but its semantic check has not been performed yet." + } + + if b.codes != nil { + new.Codes = b.codes + } else if b.codes == nil && b.old.Codes == nil { + new.Codes = nil + } + + if new.Status != b.old.Status { + new.LastTransitionTime = now + } + + if new.Reason != b.old.Reason || new.Message != b.old.Message { + new.LastUpdateTime = now + } + + return new, !apiequality.Semantic.DeepEqual(new, b.old) +} 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 new file mode 100644 index 00000000..2694936a --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/errors.go @@ -0,0 +1,206 @@ +// 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 helper + +import ( + "errors" + "regexp" + "strings" + "time" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + utilerrors "github.com/gardener/gardener/pkg/utils/errors" + + errors2 "github.com/pkg/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" +) + +// ErrorWithCodes contains error codes and an error message. +type ErrorWithCodes struct { + message string + codes []gardencorev1beta1.ErrorCode +} + +// 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} +} + +// Codes returns all error codes. +func (e *ErrorWithCodes) Codes() []gardencorev1beta1.ErrorCode { + return e.codes +} + +// Error returns the error message. +func (e *ErrorWithCodes) Error() string { + return e.message +} + +var ( + unauthorizedRegexp = regexp.MustCompile(`(?i)(Unauthorized|InvalidClientTokenId|InvalidAuthenticationTokenTenant|SignatureDoesNotMatch|Authentication failed|AuthFailure|AuthorizationFailed|invalid character|invalid_grant|invalid_client|Authorization Profile was not found|cannot fetch token|no active subscriptions|InvalidAccessKeyId|InvalidSecretAccessKey|query returned no results|UnauthorizedOperation|not authorized)`) + quotaExceededRegexp = regexp.MustCompile(`(?i)(LimitExceeded|Quota|Throttling|Too many requests)`) + insufficientPrivilegesRegexp = regexp.MustCompile(`(?i)(AccessDenied|OperationNotAllowed|Error 403)`) + dependenciesRegexp = regexp.MustCompile(`(?i)(PendingVerification|Access Not Configured|accessNotConfigured|DependencyViolation|OptInRequired|DeleteConflict|Conflict|inactive billing state|ReadOnlyDisabledSubscription|is already being used|InUseSubnetCannotBeDeleted|VnetInUse|InUseRouteTableCannotBeDeleted|timeout while waiting for state to become|InvalidCidrBlock|already busy for|InsufficientFreeAddressesInSubnet|InternalServerError|RetryableError|Future#WaitForCompletion: context has been cancelled|internalerror|internal server error|A resource with the ID|VnetAddressSpaceCannotChangeDueToPeerings)`) + resourcesDepletedRegexp = regexp.MustCompile(`(?i)(not available in the current hardware cluster|InsufficientInstanceCapacity|SkuNotAvailable|ZonalAllocationFailed|out of stock)`) + configurationProblemRegexp = regexp.MustCompile(`(?i)(AzureBastionSubnet|not supported in your requested Availability Zone|InvalidParameter|InvalidParameterValue|not found|notFound|NetcfgInvalidSubnet|InvalidSubnet|Invalid value|KubeletHasInsufficientMemory|KubeletHasDiskPressure|KubeletHasInsufficientPID|violates constraint|no attached internet gateway found|Your query returned no results|PrivateEndpointNetworkPoliciesCannotBeEnabledOnPrivateEndpointSubnet|invalid VPC attributes|PrivateLinkServiceNetworkPoliciesCannotBeEnabledOnPrivateLinkServiceSubnet|unrecognized feature gate|runtime-config invalid key)`) +) + +// DetermineError determines the Garden error code for the given error and creates a new error with the given message. +func DetermineError(err error, message string) error { + if err == nil { + return errors.New(message) + } + + errMsg := message + if errMsg == "" { + errMsg = err.Error() + } + + codes := DetermineErrorCodes(err) + if codes == nil { + return errors.New(errMsg) + } + return &ErrorWithCodes{errMsg, codes} +} + +// DetermineErrorCodes determines error codes based on the given error. +func DetermineErrorCodes(err error) []gardencorev1beta1.ErrorCode { + var ( + coder Coder + message = err.Error() + codes = sets.NewString() + ) + + // try to re-use codes from error + if errors.As(err, &coder) { + for _, code := range coder.Codes() { + codes.Insert(string(code)) + } + } + + // determine error codes + if unauthorizedRegexp.MatchString(message) { + codes.Insert(string(gardencorev1beta1.ErrorInfraUnauthorized)) + } + if quotaExceededRegexp.MatchString(message) { + codes.Insert(string(gardencorev1beta1.ErrorInfraQuotaExceeded)) + } + if insufficientPrivilegesRegexp.MatchString(message) { + codes.Insert(string(gardencorev1beta1.ErrorInfraInsufficientPrivileges)) + } + if dependenciesRegexp.MatchString(message) { + codes.Insert(string(gardencorev1beta1.ErrorInfraDependencies)) + } + if resourcesDepletedRegexp.MatchString(message) { + codes.Insert(string(gardencorev1beta1.ErrorInfraResourcesDepleted)) + } + if configurationProblemRegexp.MatchString(message) { + codes.Insert(string(gardencorev1beta1.ErrorConfigurationProblem)) + } + + // compute error code list based on code string set + var out []gardencorev1beta1.ErrorCode + for _, c := range codes.List() { + out = append(out, gardencorev1beta1.ErrorCode(c)) + } + return out +} + +// Coder is an error that may produce a ErrorCodes visible to the outside. +type Coder interface { + error + Codes() []gardencorev1beta1.ErrorCode +} + +// ExtractErrorCodes extracts all error codes from the given error by using utilerrors.Errors +func ExtractErrorCodes(err error) []gardencorev1beta1.ErrorCode { + var codes []gardencorev1beta1.ErrorCode + for _, err := range utilerrors.Errors(err) { + var coder Coder + if errors.As(err, &coder) { + codes = append(codes, coder.Codes()...) + } + } + return codes +} + +// FormatLastErrDescription formats the error message string for the last occurred error. +func FormatLastErrDescription(err error) string { + errString := err.Error() + if len(errString) > 0 { + errString = strings.ToUpper(string(errString[0])) + errString[1:] + } + return errString +} + +// WrappedLastErrors is a structure which contains the general description of the lastErrors which occurred and an array of all lastErrors +type WrappedLastErrors struct { + Description string + LastErrors []gardencorev1beta1.LastError +} + +// NewWrappedLastErrors returns an error +func NewWrappedLastErrors(description string, err error) *WrappedLastErrors { + var lastErrors []gardencorev1beta1.LastError + + for _, partError := range utilerrors.Errors(err) { + lastErrors = append(lastErrors, *LastErrorWithTaskID( + partError.Error(), + utilerrors.GetID(partError), + ExtractErrorCodes(errors2.Cause(partError))...)) + } + + return &WrappedLastErrors{ + Description: description, + LastErrors: lastErrors, + } +} + +// LastError creates a new LastError with the given description, optional codes and sets timestamp when the error is lastly observed. +func LastError(description string, codes ...gardencorev1beta1.ErrorCode) *gardencorev1beta1.LastError { + return &gardencorev1beta1.LastError{ + Description: description, + Codes: codes, + LastUpdateTime: &metav1.Time{ + Time: time.Now(), + }, + } +} + +// LastErrorWithTaskID creates a new LastError with the given description, the ID of the task when the error occurred, optional codes and sets timestamp when the error is lastly observed. +func LastErrorWithTaskID(description string, taskID string, codes ...gardencorev1beta1.ErrorCode) *gardencorev1beta1.LastError { + return &gardencorev1beta1.LastError{ + Description: description, + Codes: codes, + TaskID: &taskID, + LastUpdateTime: &metav1.Time{ + Time: time.Now(), + }, + } +} + +// HasNonRetryableErrorCode returns true if at least one of given list of last errors has at least one error code that +// indicates that an automatic retry would not help fixing the problem. +func HasNonRetryableErrorCode(lastErrors ...gardencorev1beta1.LastError) bool { + for _, lastError := range lastErrors { + for _, code := range lastError.Codes { + if code == gardencorev1beta1.ErrorInfraUnauthorized || code == gardencorev1beta1.ErrorConfigurationProblem { + return true + } + } + } + return false +} 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 new file mode 100644 index 00000000..7849607f --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go @@ -0,0 +1,1198 @@ +// 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 helper + +import ( + "fmt" + "strconv" + "strings" + "time" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/json" + "k8s.io/utils/pointer" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + versionutils "github.com/gardener/gardener/pkg/utils/version" + + "github.com/Masterminds/semver" + "github.com/pkg/errors" + apiequality "k8s.io/apimachinery/pkg/api/equality" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +// Now determines the current metav1.Time. +var Now = metav1.Now + +// InitCondition initializes a new Condition with an Unknown status. +func InitCondition(conditionType gardencorev1beta1.ConditionType) gardencorev1beta1.Condition { + now := Now() + return gardencorev1beta1.Condition{ + Type: conditionType, + Status: gardencorev1beta1.ConditionUnknown, + Reason: "ConditionInitialized", + Message: "The condition has been initialized but its semantic check has not been performed yet.", + LastTransitionTime: now, + LastUpdateTime: now, + } +} + +// GetCondition returns the condition with the given out of the list of . +// In case the required type could not be found, it returns nil. +func GetCondition(conditions []gardencorev1beta1.Condition, conditionType gardencorev1beta1.ConditionType) *gardencorev1beta1.Condition { + for _, condition := range conditions { + if condition.Type == conditionType { + c := condition + return &c + } + } + return nil +} + +// GetOrInitCondition tries to retrieve the condition with the given condition type from the given conditions. +// If the condition could not be found, it returns an initialized condition of the given type. +func GetOrInitCondition(conditions []gardencorev1beta1.Condition, conditionType gardencorev1beta1.ConditionType) gardencorev1beta1.Condition { + if condition := GetCondition(conditions, conditionType); condition != nil { + return *condition + } + return InitCondition(conditionType) +} + +// UpdatedCondition updates the properties of one specific condition. +func UpdatedCondition(condition gardencorev1beta1.Condition, status gardencorev1beta1.ConditionStatus, reason, message string, codes ...gardencorev1beta1.ErrorCode) gardencorev1beta1.Condition { + var ( + newCondition = gardencorev1beta1.Condition{ + Type: condition.Type, + Status: status, + Reason: reason, + Message: message, + LastTransitionTime: condition.LastTransitionTime, + LastUpdateTime: condition.LastUpdateTime, + Codes: codes, + } + now = Now() + ) + + if condition.Status != status { + newCondition.LastTransitionTime = now + } + + if condition.Reason != reason || condition.Message != message || !apiequality.Semantic.DeepEqual(condition.Codes, codes) { + newCondition.LastUpdateTime = now + } + + return newCondition +} + +// UpdatedConditionUnknownError updates the condition to 'Unknown' status and the message of the given error. +func UpdatedConditionUnknownError(condition gardencorev1beta1.Condition, err error, codes ...gardencorev1beta1.ErrorCode) gardencorev1beta1.Condition { + return UpdatedConditionUnknownErrorMessage(condition, err.Error(), codes...) +} + +// UpdatedConditionUnknownErrorMessage updates the condition with 'Unknown' status and the given message. +func UpdatedConditionUnknownErrorMessage(condition gardencorev1beta1.Condition, message string, codes ...gardencorev1beta1.ErrorCode) gardencorev1beta1.Condition { + return UpdatedCondition(condition, gardencorev1beta1.ConditionUnknown, gardencorev1beta1.ConditionCheckError, message, codes...) +} + +// MergeConditions merges the given with the . Existing conditions are superseded by +// the (depending on the condition type). +func MergeConditions(oldConditions []gardencorev1beta1.Condition, newConditions ...gardencorev1beta1.Condition) []gardencorev1beta1.Condition { + var ( + out = make([]gardencorev1beta1.Condition, 0, len(oldConditions)) + typeToIndex = make(map[gardencorev1beta1.ConditionType]int, len(oldConditions)) + ) + + for i, condition := range oldConditions { + out = append(out, condition) + typeToIndex[condition.Type] = i + } + + for _, condition := range newConditions { + if index, ok := typeToIndex[condition.Type]; ok { + out[index] = condition + continue + } + out = append(out, condition) + } + + return out +} + +// ConditionsNeedUpdate returns true if the must be updated based on . +func ConditionsNeedUpdate(existingConditions, newConditions []gardencorev1beta1.Condition) bool { + return existingConditions == nil || !apiequality.Semantic.DeepEqual(newConditions, existingConditions) +} + +// IsResourceSupported returns true if a given combination of kind/type is part of a controller resources list. +func IsResourceSupported(resources []gardencorev1beta1.ControllerResource, resourceKind, resourceType string) bool { + for _, resource := range resources { + if resource.Kind == resourceKind && strings.EqualFold(resource.Type, resourceType) { + return true + } + } + + return false +} + +// IsControllerInstallationSuccessful returns true if a ControllerInstallation has been marked as "successfully" +// installed. +func IsControllerInstallationSuccessful(controllerInstallation gardencorev1beta1.ControllerInstallation) bool { + var ( + installed bool + healthy bool + ) + + for _, condition := range controllerInstallation.Status.Conditions { + if condition.Type == gardencorev1beta1.ControllerInstallationInstalled && condition.Status == gardencorev1beta1.ConditionTrue { + installed = true + } + if condition.Type == gardencorev1beta1.ControllerInstallationHealthy && condition.Status == gardencorev1beta1.ConditionTrue { + healthy = true + } + } + + return installed && healthy +} + +// IsControllerInstallationRequired returns true if a ControllerInstallation has been marked as "required". +func IsControllerInstallationRequired(controllerInstallation gardencorev1beta1.ControllerInstallation) bool { + for _, condition := range controllerInstallation.Status.Conditions { + if condition.Type == gardencorev1beta1.ControllerInstallationRequired && condition.Status == gardencorev1beta1.ConditionTrue { + return true + } + } + return false +} + +// ComputeOperationType checks the and determines whether it is Create, Delete, Reconcile, Migrate or Restore operation +func ComputeOperationType(meta metav1.ObjectMeta, lastOperation *gardencorev1beta1.LastOperation) gardencorev1beta1.LastOperationType { + switch { + case meta.Annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationMigrate: + return gardencorev1beta1.LastOperationTypeMigrate + case meta.DeletionTimestamp != nil: + return gardencorev1beta1.LastOperationTypeDelete + case lastOperation == nil: + return gardencorev1beta1.LastOperationTypeCreate + case lastOperation.Type == gardencorev1beta1.LastOperationTypeCreate && lastOperation.State != gardencorev1beta1.LastOperationStateSucceeded: + return gardencorev1beta1.LastOperationTypeCreate + case lastOperation.Type == gardencorev1beta1.LastOperationTypeMigrate && lastOperation.State != gardencorev1beta1.LastOperationStateSucceeded: + return gardencorev1beta1.LastOperationTypeMigrate + case lastOperation.Type == gardencorev1beta1.LastOperationTypeRestore && lastOperation.State != gardencorev1beta1.LastOperationStateSucceeded: + return gardencorev1beta1.LastOperationTypeRestore + } + return gardencorev1beta1.LastOperationTypeReconcile +} + +// TaintsHave returns true if the given key is part of the taints list. +func TaintsHave(taints []gardencorev1beta1.SeedTaint, key string) bool { + for _, taint := range taints { + if taint.Key == key { + return true + } + } + return false +} + +// TaintsAreTolerated returns true when all the given taints are tolerated by the given tolerations. +func TaintsAreTolerated(taints []gardencorev1beta1.SeedTaint, tolerations []gardencorev1beta1.Toleration) bool { + if len(taints) == 0 { + return true + } + if len(taints) > len(tolerations) { + return false + } + + tolerationKeyValues := make(map[string]string, len(tolerations)) + for _, toleration := range tolerations { + v := "" + if toleration.Value != nil { + v = *toleration.Value + } + tolerationKeyValues[toleration.Key] = v + } + + for _, taint := range taints { + tolerationValue, ok := tolerationKeyValues[taint.Key] + if !ok { + return false + } + if taint.Value != nil && *taint.Value != tolerationValue { + return false + } + } + + return true +} + +type ShootedSeed struct { + DisableDNS *bool + DisableCapacityReservation *bool + Protected *bool + Visible *bool + LoadBalancerServicesAnnotations map[string]string + MinimumVolumeSize *string + APIServer *ShootedSeedAPIServer + BlockCIDRs []string + ShootDefaults *gardencorev1beta1.ShootNetworks + Backup *gardencorev1beta1.SeedBackup + SeedProviderConfig *runtime.RawExtension + IngressController *gardencorev1beta1.IngressController + NoGardenlet bool + UseServiceAccountBootstrapping bool + WithSecretRef bool + FeatureGates map[string]bool + Resources *ShootedSeedResources +} + +type ShootedSeedAPIServer struct { + Replicas *int32 + Autoscaler *ShootedSeedAPIServerAutoscaler +} + +type ShootedSeedAPIServerAutoscaler struct { + MinReplicas *int32 + MaxReplicas int32 +} + +type ShootedSeedResources struct { + Capacity corev1.ResourceList + Reserved corev1.ResourceList +} + +func parseInt32(s string) (int32, error) { + i64, err := strconv.ParseInt(s, 10, 32) + if err != nil { + return 0, err + } + return int32(i64), nil +} + +func parseShootedSeed(annotation string) (*ShootedSeed, error) { + var ( + flags = make(map[string]struct{}) + settings = make(map[string]string) + ) + + for _, fragment := range strings.Split(annotation, ",") { + parts := strings.SplitN(fragment, "=", 2) + if len(parts) == 1 { + flags[fragment] = struct{}{} + continue + } + + settings[parts[0]] = parts[1] + } + + if _, ok := flags["true"]; !ok { + return nil, nil + } + + shootedSeed := ShootedSeed{ + LoadBalancerServicesAnnotations: parseShootedSeedLoadBalancerServicesAnnotations(settings), + FeatureGates: parseShootedSeedFeatureGates(settings), + } + + apiServer, err := parseShootedSeedAPIServer(settings) + if err != nil { + return nil, err + } + shootedSeed.APIServer = apiServer + + blockCIDRs, err := parseShootedSeedBlockCIDRs(settings) + if err != nil { + return nil, err + } + shootedSeed.BlockCIDRs = blockCIDRs + + shootDefaults, err := parseShootedSeedShootDefaults(settings) + if err != nil { + return nil, err + } + shootedSeed.ShootDefaults = shootDefaults + + backup, err := parseShootedSeedBackup(settings) + if err != nil { + return nil, err + } + shootedSeed.Backup = backup + + seedProviderConfig, err := parseProviderConfig("providerConfig.", settings) + if err != nil { + return nil, err + } + shootedSeed.SeedProviderConfig = seedProviderConfig + + resources, err := parseShootedSeedResources(settings) + if err != nil { + return nil, err + } + shootedSeed.Resources = resources + + ingressController, err := parseIngressController(settings) + if err != nil { + return nil, err + } + shootedSeed.IngressController = ingressController + + if size, ok := settings["minimumVolumeSize"]; ok { + shootedSeed.MinimumVolumeSize = &size + } + if _, ok := flags["disable-dns"]; ok { + shootedSeed.DisableDNS = pointer.BoolPtr(true) + } + if _, ok := flags["disable-capacity-reservation"]; ok { + shootedSeed.DisableCapacityReservation = pointer.BoolPtr(true) + } + if _, ok := flags["no-gardenlet"]; ok { + shootedSeed.NoGardenlet = true + } + if _, ok := flags["use-serviceaccount-bootstrapping"]; ok { + shootedSeed.UseServiceAccountBootstrapping = true + } + if _, ok := flags["with-secret-ref"]; ok { + shootedSeed.WithSecretRef = true + } + if _, ok := flags["protected"]; ok { + shootedSeed.Protected = pointer.BoolPtr(true) + } + if _, ok := flags["unprotected"]; ok { + shootedSeed.Protected = pointer.BoolPtr(false) + } + if _, ok := flags["visible"]; ok { + shootedSeed.Visible = pointer.BoolPtr(true) + } + if _, ok := flags["invisible"]; ok { + shootedSeed.Visible = pointer.BoolPtr(false) + } + + return &shootedSeed, nil +} + +func parseShootedSeedBlockCIDRs(settings map[string]string) ([]string, error) { + cidrs, ok := settings["blockCIDRs"] + if !ok { + return nil, nil + } + + return strings.Split(cidrs, ";"), nil +} + +func parseShootedSeedShootDefaults(settings map[string]string) (*gardencorev1beta1.ShootNetworks, error) { + var ( + podCIDR, ok1 = settings["shootDefaults.pods"] + serviceCIDR, ok2 = settings["shootDefaults.services"] + ) + + if !ok1 && !ok2 { + return nil, nil + } + + shootNetworks := &gardencorev1beta1.ShootNetworks{} + + if ok1 { + shootNetworks.Pods = &podCIDR + } + + if ok2 { + shootNetworks.Services = &serviceCIDR + } + + return shootNetworks, nil +} + +func parseIngressController(settings map[string]string) (*gardencorev1beta1.IngressController, error) { + ingressController := &gardencorev1beta1.IngressController{} + + kind, ok := settings["ingress.controller.kind"] + if !ok { + return nil, nil + } + ingressController.Kind = kind + + parsedProviderConfig, err := parseProviderConfig("ingress.controller.providerConfig.", settings) + if err != nil { + return nil, fmt.Errorf("parsing Ingress providerConfig failed: %s", err.Error()) + } + ingressController.ProviderConfig = parsedProviderConfig + + return ingressController, nil +} + +func parseShootedSeedBackup(settings map[string]string) (*gardencorev1beta1.SeedBackup, error) { + var ( + provider, ok1 = settings["backup.provider"] + region, ok2 = settings["backup.region"] + secretRefName, ok3 = settings["backup.secretRef.name"] + secretRefNamespace, ok4 = settings["backup.secretRef.namespace"] + ) + + if ok1 && provider == "none" { + return nil, nil + } + + backup := &gardencorev1beta1.SeedBackup{} + + if ok1 { + backup.Provider = provider + } + if ok2 { + backup.Region = ®ion + } + if ok3 { + backup.SecretRef.Name = secretRefName + } + if ok4 { + backup.SecretRef.Namespace = secretRefNamespace + } + + return backup, nil +} + +func parseShootedSeedFeatureGates(settings map[string]string) map[string]bool { + featureGates := make(map[string]bool) + + for k, v := range settings { + if strings.HasPrefix(k, "featureGates.") { + val, _ := strconv.ParseBool(v) + featureGates[strings.Split(k, ".")[1]] = val + } + } + + if len(featureGates) == 0 { + return nil + } + + return featureGates +} + +func parseProviderConfig(prefix string, settings map[string]string) (*runtime.RawExtension, error) { + // reconstruct providerConfig structure + providerConfig := map[string]interface{}{} + + var err error + for k, v := range settings { + if strings.HasPrefix(k, prefix) { + var value interface{} + if strings.HasPrefix(v, `"`) && strings.HasSuffix(v, `"`) { + value, err = strconv.Unquote(v) + if err != nil { + return nil, err + } + } else if b, err := strconv.ParseBool(v); err == nil { + value = b + } else if f, err := strconv.ParseFloat(v, 64); err == nil { + value = f + } else { + value = v + } + + path := strings.TrimPrefix(k, prefix) + if err := unstructured.SetNestedField(providerConfig, value, strings.Split(path, ".")...); err != nil { + return nil, err + } + } + } + + if len(providerConfig) == 0 { + return nil, nil + } + + jsonStr, err := json.Marshal(providerConfig) + if err != nil { + return nil, err + } + + return &runtime.RawExtension{ + Raw: jsonStr, + }, nil +} + +func parseShootedSeedLoadBalancerServicesAnnotations(settings map[string]string) map[string]string { + const optionPrefix = "loadBalancerServices.annotations." + + annotations := make(map[string]string) + for k, v := range settings { + if strings.HasPrefix(k, optionPrefix) { + annotationKey := strings.TrimPrefix(k, optionPrefix) + annotations[annotationKey] = v + } + } + + if len(annotations) == 0 { + return nil + } + + return annotations +} + +func parseShootedSeedAPIServer(settings map[string]string) (*ShootedSeedAPIServer, error) { + apiServerAutoscaler, err := parseShootedSeedAPIServerAutoscaler(settings) + if err != nil { + return nil, err + } + + replicasString, ok := settings["apiServer.replicas"] + if !ok && apiServerAutoscaler == nil { + return nil, nil + } + + var apiServer ShootedSeedAPIServer + + apiServer.Autoscaler = apiServerAutoscaler + + if ok { + replicas, err := parseInt32(replicasString) + if err != nil { + return nil, err + } + + apiServer.Replicas = &replicas + } + + return &apiServer, nil +} + +func parseShootedSeedAPIServerAutoscaler(settings map[string]string) (*ShootedSeedAPIServerAutoscaler, error) { + minReplicasString, ok1 := settings["apiServer.autoscaler.minReplicas"] + maxReplicasString, ok2 := settings["apiServer.autoscaler.maxReplicas"] + if !ok1 && !ok2 { + return nil, nil + } + if !ok2 { + return nil, fmt.Errorf("apiSrvMaxReplicas has to be specified for shooted seed API server autoscaler") + } + + var apiServerAutoscaler ShootedSeedAPIServerAutoscaler + + if ok1 { + minReplicas, err := parseInt32(minReplicasString) + if err != nil { + return nil, err + } + apiServerAutoscaler.MinReplicas = &minReplicas + } + + maxReplicas, err := parseInt32(maxReplicasString) + if err != nil { + return nil, err + } + apiServerAutoscaler.MaxReplicas = maxReplicas + + return &apiServerAutoscaler, nil +} + +func parseShootedSeedResources(settings map[string]string) (*ShootedSeedResources, error) { + var capacity, reserved corev1.ResourceList + + for k, v := range settings { + var resourceName corev1.ResourceName + var quantity resource.Quantity + var err error + if strings.HasPrefix(k, "resources.capacity.") || strings.HasPrefix(k, "resources.reserved.") { + resourceName = corev1.ResourceName(strings.Split(k, ".")[2]) + quantity, err = resource.ParseQuantity(v) + if err != nil { + return nil, err + } + if strings.HasPrefix(k, "resources.capacity.") { + if capacity == nil { + capacity = make(corev1.ResourceList) + } + capacity[resourceName] = quantity + } else { + if reserved == nil { + reserved = make(corev1.ResourceList) + } + reserved[resourceName] = quantity + } + } + } + + if len(capacity) == 0 && len(reserved) == 0 { + return nil, nil + } + return &ShootedSeedResources{ + Capacity: capacity, + Reserved: reserved, + }, nil +} + +func validateShootedSeed(shootedSeed *ShootedSeed, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if shootedSeed.APIServer != nil { + allErrs = append(allErrs, validateShootedSeedAPIServer(shootedSeed.APIServer, fldPath.Child("apiServer"))...) + } + if shootedSeed.Resources != nil { + allErrs = append(allErrs, validateShootedSeedResources(shootedSeed.Resources, fldPath.Child("resources"))...) + } + + return allErrs +} + +func validateShootedSeedAPIServer(apiServer *ShootedSeedAPIServer, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if apiServer.Replicas != nil && *apiServer.Replicas < 1 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("replicas"), *apiServer.Replicas, "must be greater than 0")) + } + if apiServer.Autoscaler != nil { + allErrs = append(allErrs, validateShootedSeedAPIServerAutoscaler(apiServer.Autoscaler, fldPath.Child("autoscaler"))...) + } + + return allErrs +} + +func validateShootedSeedAPIServerAutoscaler(autoscaler *ShootedSeedAPIServerAutoscaler, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if autoscaler.MinReplicas != nil && *autoscaler.MinReplicas < 1 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("minReplicas"), *autoscaler.MinReplicas, "must be greater than 0")) + } + if autoscaler.MaxReplicas < 1 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("maxReplicas"), autoscaler.MaxReplicas, "must be greater than 0")) + } + if autoscaler.MinReplicas != nil && autoscaler.MaxReplicas < *autoscaler.MinReplicas { + allErrs = append(allErrs, field.Invalid(fldPath.Child("maxReplicas"), autoscaler.MaxReplicas, "must be greater than or equal to `minReplicas`")) + } + + return allErrs +} + +func validateShootedSeedResources(resources *ShootedSeedResources, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + for resourceName, quantity := range resources.Capacity { + if reservedQuantity, ok := resources.Reserved[resourceName]; ok && reservedQuantity.Value() > quantity.Value() { + allErrs = append(allErrs, field.Invalid(fldPath.Child("reserved", string(resourceName)), resources.Reserved[resourceName], "must be lower or equal to capacity")) + } + } + for resourceName := range resources.Reserved { + if _, ok := resources.Capacity[resourceName]; !ok { + allErrs = append(allErrs, field.Invalid(fldPath.Child("reserved", string(resourceName)), resources.Reserved[resourceName], "reserved without capacity")) + } + } + + return allErrs +} + +func setDefaults_ShootedSeed(shootedSeed *ShootedSeed) { + if shootedSeed.APIServer == nil { + shootedSeed.APIServer = &ShootedSeedAPIServer{} + } + setDefaults_ShootedSeedAPIServer(shootedSeed.APIServer) + if shootedSeed.Resources == nil { + shootedSeed.Resources = &ShootedSeedResources{} + } + setDefaults_ShootedSeedResources(shootedSeed.Resources) +} + +func setDefaults_ShootedSeedAPIServer(apiServer *ShootedSeedAPIServer) { + if apiServer.Replicas == nil { + three := int32(3) + apiServer.Replicas = &three + } + if apiServer.Autoscaler == nil { + apiServer.Autoscaler = &ShootedSeedAPIServerAutoscaler{ + MaxReplicas: 3, + } + } + setDefaults_ShootedSeedAPIServerAutoscaler(apiServer.Autoscaler) +} + +func minInt32(a int32, b int32) int32 { + if a < b { + return a + } + return b +} + +func setDefaults_ShootedSeedAPIServerAutoscaler(autoscaler *ShootedSeedAPIServerAutoscaler) { + if autoscaler.MinReplicas == nil { + minReplicas := minInt32(3, autoscaler.MaxReplicas) + autoscaler.MinReplicas = &minReplicas + } +} + +func setDefaults_ShootedSeedResources(resources *ShootedSeedResources) { + if _, ok := resources.Capacity[gardencorev1beta1.ResourceShoots]; !ok { + if resources.Capacity == nil { + resources.Capacity = make(corev1.ResourceList) + } + resources.Capacity[gardencorev1beta1.ResourceShoots] = resource.MustParse("250") + } +} + +// ReadShootedSeed determines whether the Shoot has been marked to be registered automatically as a Seed cluster. +func ReadShootedSeed(shoot *gardencorev1beta1.Shoot) (*ShootedSeed, error) { + if shoot.Namespace != v1beta1constants.GardenNamespace || shoot.Annotations == nil { + return nil, nil + } + + val, ok := shoot.Annotations[v1beta1constants.AnnotationShootUseAsSeed] + if !ok { + return nil, nil + } + + shootedSeed, err := parseShootedSeed(val) + if err != nil { + return nil, err + } + + if shootedSeed == nil { + return nil, nil + } + + setDefaults_ShootedSeed(shootedSeed) + + if errs := validateShootedSeed(shootedSeed, nil); len(errs) > 0 { + return nil, errs.ToAggregate() + } + + return shootedSeed, nil +} + +// HibernationIsEnabled checks if the given shoot's desired state is hibernated. +func HibernationIsEnabled(shoot *gardencorev1beta1.Shoot) bool { + return shoot.Spec.Hibernation != nil && shoot.Spec.Hibernation.Enabled != nil && *shoot.Spec.Hibernation.Enabled +} + +// ShootWantsClusterAutoscaler checks if the given Shoot needs a cluster autoscaler. +// This is determined by checking whether one of the Shoot workers has a different +// Maximum than Minimum. +func ShootWantsClusterAutoscaler(shoot *gardencorev1beta1.Shoot) (bool, error) { + for _, worker := range shoot.Spec.Provider.Workers { + if worker.Maximum > worker.Minimum { + return true, nil + } + } + return false, nil +} + +// ShootWantsVerticalPodAutoscaler checks if the given Shoot needs a VPA. +func ShootWantsVerticalPodAutoscaler(shoot *gardencorev1beta1.Shoot) bool { + return shoot.Spec.Kubernetes.VerticalPodAutoscaler != nil && shoot.Spec.Kubernetes.VerticalPodAutoscaler.Enabled +} + +// ShootIgnoresAlerts checks if the alerts for the annotated shoot cluster should be ignored. +func ShootIgnoresAlerts(shoot *gardencorev1beta1.Shoot) bool { + ignore := false + if value, ok := shoot.Annotations[v1beta1constants.AnnotationShootIgnoreAlerts]; ok { + ignore, _ = strconv.ParseBool(value) + } + return ignore +} + +// ShootWantsAlertManager checks if the given shoot specification requires an alert manager. +func ShootWantsAlertManager(shoot *gardencorev1beta1.Shoot) bool { + return !ShootIgnoresAlerts(shoot) && shoot.Spec.Monitoring != nil && shoot.Spec.Monitoring.Alerting != nil && len(shoot.Spec.Monitoring.Alerting.EmailReceivers) > 0 +} + +// ShootWantsBasicAuthentication returns true if basic authentication is not configured or +// if it is set explicitly to 'true'. +func ShootWantsBasicAuthentication(shoot *gardencorev1beta1.Shoot) bool { + kubeAPIServerConfig := shoot.Spec.Kubernetes.KubeAPIServer + if kubeAPIServerConfig == nil { + return true + } + if kubeAPIServerConfig.EnableBasicAuthentication == nil { + return true + } + return *kubeAPIServerConfig.EnableBasicAuthentication +} + +// ShootUsesUnmanagedDNS returns true if the shoot's DNS section is marked as 'unmanaged'. +func ShootUsesUnmanagedDNS(shoot *gardencorev1beta1.Shoot) bool { + return shoot.Spec.DNS != nil && len(shoot.Spec.DNS.Providers) > 0 && shoot.Spec.DNS.Providers[0].Type != nil && *shoot.Spec.DNS.Providers[0].Type == "unmanaged" +} + +// 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. +func DetermineMachineImageForName(cloudProfile *gardencorev1beta1.CloudProfile, name string) (bool, gardencorev1beta1.MachineImage, error) { + for _, image := range cloudProfile.Spec.MachineImages { + if strings.EqualFold(image.Name, name) { + return true, image, nil + } + } + return false, gardencorev1beta1.MachineImage{}, nil +} + +// ShootMachineImageVersionExists checks if the shoot machine image (name, version) exists in the machine image constraint and returns true if yes and the index in the versions slice +func ShootMachineImageVersionExists(constraint gardencorev1beta1.MachineImage, image gardencorev1beta1.ShootMachineImage) (bool, int) { + if constraint.Name != image.Name { + return false, 0 + } + + for index, v := range constraint.Versions { + if image.Version != nil && v.Version == *image.Version { + return true, index + } + } + + return false, 0 +} + +func toExpirableVersions(versions []gardencorev1beta1.MachineImageVersion) []gardencorev1beta1.ExpirableVersion { + expVersions := []gardencorev1beta1.ExpirableVersion{} + for _, version := range versions { + expVersions = append(expVersions, version.ExpirableVersion) + } + return expVersions +} + +// GetLatestQualifyingShootMachineImage determines the latest qualifying version in a machine image and returns that as a ShootMachineImage +// A version qualifies if its classification is not preview and the version is not expired. +func GetLatestQualifyingShootMachineImage(image gardencorev1beta1.MachineImage, predicates ...VersionPredicate) (bool, *gardencorev1beta1.ShootMachineImage, error) { + predicates = append(predicates, FilterExpiredVersion()) + qualifyingVersionFound, latestImageVersion, err := GetLatestQualifyingVersion(toExpirableVersions(image.Versions), predicates...) + if err != nil { + return false, nil, err + } + if !qualifyingVersionFound { + return false, nil, nil + } + return true, &gardencorev1beta1.ShootMachineImage{Name: image.Name, Version: &latestImageVersion.Version}, nil +} + +// SystemComponentsAllowed checks if the given worker allows system components to be scheduled onto it +func SystemComponentsAllowed(worker *gardencorev1beta1.Worker) bool { + return worker.SystemComponents == nil || worker.SystemComponents.Allow +} + +// UpdateMachineImages updates the machine images in place. +func UpdateMachineImages(workers []gardencorev1beta1.Worker, machineImages []*gardencorev1beta1.ShootMachineImage) { + for _, machineImage := range machineImages { + for idx, worker := range workers { + if worker.Machine.Image != nil && machineImage.Name == worker.Machine.Image.Name { + workers[idx].Machine.Image = machineImage + } + } + } +} + +// KubernetesVersionExistsInCloudProfile checks if the given Kubernetes version exists in the CloudProfile +func KubernetesVersionExistsInCloudProfile(cloudProfile *gardencorev1beta1.CloudProfile, currentVersion string) (bool, gardencorev1beta1.ExpirableVersion, error) { + for _, version := range cloudProfile.Spec.Kubernetes.Versions { + ok, err := versionutils.CompareVersions(version.Version, "=", currentVersion) + if err != nil { + return false, gardencorev1beta1.ExpirableVersion{}, err + } + if ok { + return true, version, nil + } + } + return false, gardencorev1beta1.ExpirableVersion{}, nil +} + +// SetMachineImageVersionsToMachineImage sets imageVersions to the matching imageName in the machineImages. +func SetMachineImageVersionsToMachineImage(machineImages []gardencorev1beta1.MachineImage, imageName string, imageVersions []gardencorev1beta1.MachineImageVersion) ([]gardencorev1beta1.MachineImage, error) { + for index, image := range machineImages { + if strings.EqualFold(image.Name, imageName) { + machineImages[index].Versions = imageVersions + return machineImages, nil + } + } + return nil, fmt.Errorf("machine image with name '%s' could not be found", imageName) +} + +// GetDefaultMachineImageFromCloudProfile gets the first MachineImage from the CloudProfile +func GetDefaultMachineImageFromCloudProfile(profile gardencorev1beta1.CloudProfile) *gardencorev1beta1.MachineImage { + if len(profile.Spec.MachineImages) == 0 { + return nil + } + return &profile.Spec.MachineImages[0] +} + +// WrapWithLastError is wrapper function for gardencorev1beta1.LastError +func WrapWithLastError(err error, lastError *gardencorev1beta1.LastError) error { + if err == nil || lastError == nil { + return err + } + return errors.Wrapf(err, "last error: %s", lastError.Description) +} + +// IsAPIServerExposureManaged returns true, if the Object is managed by Gardener for API server exposure. +// This indicates to extensions that they should not mutate the object. +// Gardener marks the kube-apiserver Service and Deployment as managed by it when it uses SNI to expose them. +func IsAPIServerExposureManaged(obj metav1.Object) bool { + if obj == nil { + return false + } + + if v, found := obj.GetLabels()[v1beta1constants.LabelAPIServerExposure]; found && + v == v1beta1constants.LabelAPIServerExposureGardenerManaged { + return true + } + + return false +} + +// FindPrimaryDNSProvider finds the primary provider among the given `providers`. +// It returns the first provider in case no primary provider is available or the first one if multiple candidates are found. +func FindPrimaryDNSProvider(providers []gardencorev1beta1.DNSProvider) *gardencorev1beta1.DNSProvider { + for _, provider := range providers { + if provider.Primary != nil && *provider.Primary { + primaryProvider := provider + return &primaryProvider + } + } + return nil +} + +type VersionPredicate func(expirableVersion gardencorev1beta1.ExpirableVersion, version *semver.Version) (bool, error) + +// GetKubernetesVersionForPatchUpdate finds the latest Kubernetes patch version for its minor version in the compared +// to the given . Preview and expired versions do not qualify for the kubernetes patch update. In case it does not find a newer patch version, it returns false. Otherwise, +// true and the found version will be returned. +func GetKubernetesVersionForPatchUpdate(cloudProfile *gardencorev1beta1.CloudProfile, currentVersion string) (bool, string, error) { + currentSemVerVersion, err := semver.NewVersion(currentVersion) + if err != nil { + return false, "", err + } + + qualifyingVersionFound, latestVersion, err := GetLatestQualifyingVersion(cloudProfile.Spec.Kubernetes.Versions, FilterDifferentMajorMinorVersion(*currentSemVerVersion), FilterSameVersion(*currentSemVerVersion), FilterExpiredVersion()) + if err != nil { + return false, "", err + } + // latest version cannot be found. Do not return an error, but allow for minor upgrade if Shoot's machine image version is expired. + if !qualifyingVersionFound { + return false, "", nil + } + + return true, latestVersion.Version, nil +} + +// GetKubernetesVersionForMinorUpdate finds a Kubernetes version in the that qualifies for a Kubernetes minor level update given a . +// A qualifying version is a non-preview version having the minor version increased by exactly one version. +// In case the consecutive minor version has only expired versions, picks the latest expired version (will do another minor update during the next maintenance time) +// If a version can be found, returns true and the qualifying patch version of the next minor version. +// In case it does not find a version, it returns false. +func GetKubernetesVersionForMinorUpdate(cloudProfile *gardencorev1beta1.CloudProfile, currentVersion string) (bool, string, error) { + currentSemVerVersion, err := semver.NewVersion(currentVersion) + if err != nil { + return false, "", err + } + + qualifyingVersionFound, latestVersion, err := GetLatestQualifyingVersion(cloudProfile.Spec.Kubernetes.Versions, FilterNonConsecutiveMinorVersion(*currentSemVerVersion), FilterSameVersion(*currentSemVerVersion), FilterExpiredVersion()) + if err != nil { + return false, "", err + } + if !qualifyingVersionFound { + // in case there are only expired versions in the consecutive minor version, pick the latest expired version + qualifyingVersionFound, latestVersion, err = GetLatestQualifyingVersion(cloudProfile.Spec.Kubernetes.Versions, FilterNonConsecutiveMinorVersion(*currentSemVerVersion), FilterSameVersion(*currentSemVerVersion)) + if err != nil { + return false, "", err + } + if !qualifyingVersionFound { + return false, "", nil + } + } + + return true, latestVersion.Version, nil +} + +// GetLatestQualifyingVersion returns the latest expirable version from a set of expirable versions +// A version qualifies if its classification is not preview and the optional predicate does not filter out the version. +// If the predicate returns true, the version is not considered for the latest qualifying version. +func GetLatestQualifyingVersion(versions []gardencorev1beta1.ExpirableVersion, predicate ...VersionPredicate) (qualifyingVersionFound bool, latest *gardencorev1beta1.ExpirableVersion, err error) { + latestSemanticVersion := &semver.Version{} + var latestVersion *gardencorev1beta1.ExpirableVersion +OUTER: + for _, v := range versions { + if v.Classification != nil && *v.Classification == gardencorev1beta1.ClassificationPreview { + continue + } + + semver, err := semver.NewVersion(v.Version) + if err != nil { + return false, nil, fmt.Errorf("error while parsing version '%s': %s", v.Version, err.Error()) + } + + for _, p := range predicate { + if p == nil { + continue + } + + shouldFilter, err := p(v, semver) + if err != nil { + return false, nil, fmt.Errorf("error while evaluation predicate: '%s'", err.Error()) + } + if shouldFilter { + continue OUTER + } + } + + if semver.GreaterThan(latestSemanticVersion) { + latestSemanticVersion = semver + // avoid DeepCopy + latest := v + latestVersion = &latest + } + } + // unable to find qualified versions + if latestVersion == nil { + return false, nil, nil + } + return true, latestVersion, nil +} + +// FilterDifferentMajorMinorVersion returns a VersionPredicate(closure) that evaluates whether a given version v has a different same major.minor version compared to the currentSemVerVersion +// returns true if v has a different major.minor version +func FilterDifferentMajorMinorVersion(currentSemVerVersion semver.Version) VersionPredicate { + return func(_ gardencorev1beta1.ExpirableVersion, v *semver.Version) (bool, error) { + isWithinRange, err := versionutils.CompareVersions(v.String(), "~", currentSemVerVersion.String()) + if err != nil { + return true, err + } + return !isWithinRange, nil + } +} + +// FilterNonConsecutiveMinorVersion returns a VersionPredicate(closure) that evaluates whether a given version v has a consecutive minor version compared to the currentSemVerVersion +// returns true if v does not have a consecutive minor version +func FilterNonConsecutiveMinorVersion(currentSemVerVersion semver.Version) VersionPredicate { + return func(_ gardencorev1beta1.ExpirableVersion, v *semver.Version) (bool, error) { + isWithinRange, err := versionutils.CompareVersions(v.String(), "^", currentSemVerVersion.String()) + if err != nil { + return true, err + } + + if !isWithinRange { + return true, nil + } + + hasIncorrectMinor := currentSemVerVersion.Minor()+1 != v.Minor() + return hasIncorrectMinor, nil + } +} + +// FilterSameVersion returns a VersionPredicate(closure) that evaluates whether a given version v is equal to the currentSemVerVersion +// returns true it it is equal +func FilterSameVersion(currentSemVerVersion semver.Version) VersionPredicate { + return func(_ gardencorev1beta1.ExpirableVersion, v *semver.Version) (bool, error) { + return v.Equal(¤tSemVerVersion), nil + } +} + +// FilterLowerVersion returns a VersionPredicate(closure) that evaluates whether a given version v is lower than the currentSemVerVersion +// returns true if it is lower +func FilterLowerVersion(currentSemVerVersion semver.Version) VersionPredicate { + return func(_ gardencorev1beta1.ExpirableVersion, v *semver.Version) (bool, error) { + return v.LessThan(¤tSemVerVersion), nil + } +} + +// FilterExpiredVersion returns a closure that evaluates whether a given expirable version is expired +// returns true it it is expired +func FilterExpiredVersion() func(expirableVersion gardencorev1beta1.ExpirableVersion, version *semver.Version) (bool, error) { + return func(expirableVersion gardencorev1beta1.ExpirableVersion, _ *semver.Version) (bool, error) { + return expirableVersion.ExpirationDate != nil && (time.Now().UTC().After(expirableVersion.ExpirationDate.UTC()) || time.Now().UTC().Equal(expirableVersion.ExpirationDate.UTC())), nil + } +} + +// GetResourceByName returns the first NamedResourceReference with the given name in the given slice, or nil if not found. +func GetResourceByName(resources []gardencorev1beta1.NamedResourceReference, name string) *gardencorev1beta1.NamedResourceReference { + for _, resource := range resources { + if resource.Name == name { + return &resource + } + } + return nil +} + +// UpsertLastError adds a 'last error' to the given list of existing 'last errors' if it does not exist yet. Otherwise, +// it updates it. +func UpsertLastError(lastErrors []gardencorev1beta1.LastError, lastError gardencorev1beta1.LastError) []gardencorev1beta1.LastError { + var ( + out []gardencorev1beta1.LastError + found bool + ) + + for _, lastErr := range lastErrors { + if lastErr.TaskID != nil && lastError.TaskID != nil && *lastErr.TaskID == *lastError.TaskID { + out = append(out, lastError) + found = true + } else { + out = append(out, lastErr) + } + } + + if !found { + out = append(out, lastError) + } + + return out +} + +// DeleteLastErrorByTaskID removes the 'last error' with the given task ID from the given 'last error' list. +func DeleteLastErrorByTaskID(lastErrors []gardencorev1beta1.LastError, taskID string) []gardencorev1beta1.LastError { + var out []gardencorev1beta1.LastError + for _, lastErr := range lastErrors { + if lastErr.TaskID == nil || taskID != *lastErr.TaskID { + out = append(out, lastErr) + } + } + return out +} + +// ShootItems provides helper functions with ShootLists +type ShootItems gardencorev1beta1.ShootList + +// Union returns a set of Shoots that presents either in s or shootList +func (s *ShootItems) Union(shootItems *ShootItems) []gardencorev1beta1.Shoot { + unionedShoots := make(map[string]gardencorev1beta1.Shoot) + for _, s := range s.Items { + unionedShoots[objectKey(s.Namespace, s.Name)] = s + } + + for _, s := range shootItems.Items { + unionedShoots[objectKey(s.Namespace, s.Name)] = s + } + + shoots := make([]gardencorev1beta1.Shoot, 0, len(unionedShoots)) + for _, v := range unionedShoots { + shoots = append(shoots, v) + } + + return shoots +} + +func objectKey(namesapce, name string) string { + return fmt.Sprintf("%s/%s", namesapce, name) +} + +// GetPurpose returns the purpose of the shoot or 'evaluation' if it's nil. +func GetPurpose(s *gardencorev1beta1.Shoot) gardencorev1beta1.ShootPurpose { + if v := s.Spec.Purpose; v != nil { + return *v + } + return gardencorev1beta1.ShootPurposeEvaluation +} + +// KubernetesDashboardEnabled returns true if the kubernetes-dashboard addon is enabled in the Shoot manifest. +func KubernetesDashboardEnabled(addons *gardencorev1beta1.Addons) bool { + return addons != nil && addons.KubernetesDashboard != nil && addons.KubernetesDashboard.Enabled +} + +// NginxIngressEnabled returns true if the nginx-ingress addon is enabled in the Shoot manifest. +func NginxIngressEnabled(addons *gardencorev1beta1.Addons) bool { + return addons != nil && addons.NginxIngress != nil && addons.NginxIngress.Enabled +} 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 f4bf6df9..91228947 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 @@ -117,11 +117,6 @@ const ( // ExternalGardenerName is the value in a Kubernetes core resources `.metadata.finalizers[]` array on which the // Gardener will react when performing a delete request on a resource. ExternalGardenerName = "gardener.cloud/gardener" - // ExternalGardenerNameDeprecated is the value in a Kubernetes core resources `.metadata.finalizers[]` array on which the - // Gardener will react when performing a delete request on a resource. - // - // Deprecated: Use `ExternalGardenerName` instead. - ExternalGardenerNameDeprecated = "garden.sapcloud.io/gardener" ) const ( 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 4b95c875..fe4af0d3 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 @@ -75,6 +75,9 @@ type SeedSpec struct { // Settings contains certain settings for this seed cluster. // +optional Settings *SeedSettings `json:"settings,omitempty" protobuf:"bytes,8,opt,name=settings"` + // Ingress configures Ingress specific settings of the Seed cluster. + // +optional + Ingress *Ingress `json:"ingress,omitempty" protobuf:"bytes,9,opt,name=ingress"` } // SeedStatus is the status of a Seed. @@ -97,6 +100,13 @@ type SeedStatus struct { // ClusterIdentity is the identity of the Seed cluster // +optional ClusterIdentity *string `json:"clusterIdentity,omitempty" protobuf:"bytes,5,opt,name=clusterIdentity"` + // Capacity represents the total resources of a seed. + // +optional + Capacity corev1.ResourceList `json:"capacity,omitempty" protobuf:"bytes,6,rep,name=capacity"` + // Allocatable represents the resources of a seed that are available for scheduling. + // Defaults to Capacity. + // +optional + Allocatable corev1.ResourceList `json:"allocatable,omitempty" protobuf:"bytes,7,rep,name=allocatable"` } // SeedBackup contains the object store configuration for backups for shoot (currently only etcd). @@ -118,8 +128,45 @@ type SeedBackup struct { // SeedDNS contains DNS-relevant information about this seed cluster. type SeedDNS struct { // IngressDomain is the domain of the Seed cluster pointing to the ingress controller endpoint. It will be used - // to construct ingress URLs for system applications running in Shoot clusters. - IngressDomain string `json:"ingressDomain" protobuf:"bytes,1,opt,name=ingressDomain"` + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. + // This will be removed in the next API version and replaced by spec.ingress.domain. + // +optional + IngressDomain *string `json:"ingressDomain,omitempty" protobuf:"bytes,1,opt,name=ingressDomain"` + // Provider configures a DNSProvider + // +optional + Provider *SeedDNSProvider `json:"provider,omitempty" protobuf:"bytes,2,opt,name=provider"` +} + +// SeedDNSProvider configures a DNSProvider for Seeds +type SeedDNSProvider struct { + // Type describes the type of the dns-provider, for example `aws-route53` + Type string `json:"type" protobuf:"bytes,1,opt,name=type"` + // SecretRef is a reference to a Secret object containing cloud provider credentials used for registering external domains. + SecretRef corev1.SecretReference `json:"secretRef" protobuf:"bytes,2,opt,name=secretRef"` + // Domains contains information about which domains shall be included/excluded for this provider. + // +optional + Domains *DNSIncludeExclude `json:"domains,omitempty" protobuf:"bytes,3,opt,name=domains"` + // Zones contains information about which hosted zones shall be included/excluded for this provider. + // +optional + Zones *DNSIncludeExclude `json:"zones,omitempty" protobuf:"bytes,4,opt,name=zones"` +} + +// Ingress configures the Ingress specific settings of the Seed cluster +type Ingress struct { + // Domain specifies the IngressDomain of the Seed cluster pointing to the ingress controller endpoint. It will be used + // to construct ingress URLs for system applications running in Shoot clusters. Once set this field is immutable. + Domain string `json:"domain" protobuf:"bytes,1,opt,name=domain"` + // Controller configures a Gardener managed Ingress Controller listening on the ingressDomain + Controller IngressController `json:"controller" protobuf:"bytes,2,opt,name=controller"` +} + +// IngressController enables a Gardener managed Ingress Controller listening on the ingressDomain +type IngressController struct { + // Kind defines which kind of IngressController to use, for example `nginx` + Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` + // ProviderConfig specifies infrastructure specific configuration for the ingressController + // +optional + ProviderConfig *runtime.RawExtension `json:"providerConfig,omitempty" protobuf:"bytes,2,opt,name=providerConfig"` } // SeedNetworks contains CIDRs for the pod, service and node networks of a Kubernetes cluster. @@ -265,3 +312,9 @@ const ( // SeedGardenletReady is a constant for a condition type indicating that the Gardenlet is ready. SeedGardenletReady ConditionType = "GardenletReady" ) + +// Resource constants for Gardener object types +const ( + // ResourceShoots is a resource constant for the number of shoots. + ResourceShoots corev1.ResourceName = "shoots" +) 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 6cdef723..7dc41bbb 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 @@ -190,7 +190,7 @@ const ( // NginxIngress describes configuration values for the nginx-ingress addon. type NginxIngress struct { Addon `json:",inline" protobuf:"bytes,1,opt,name=addon"` - // LoadBalancerSourceRanges is list of whitelist IP sources for NginxIngress + // LoadBalancerSourceRanges is list of allowed IP sources for NginxIngress // +optional LoadBalancerSourceRanges []string `json:"loadBalancerSourceRanges,omitempty" protobuf:"bytes,2,rep,name=loadBalancerSourceRanges"` // Config contains custom configuration for the nginx-ingress-controller configuration. @@ -210,7 +210,7 @@ type NginxIngress struct { // DNS holds information about the provider, the hosted zone id and the domain. type DNS struct { // Domain is the external available domain of the Shoot cluster. This domain will be written into the - // kubeconfig that is handed out to end-users. + // kubeconfig that is handed out to end-users. Once set it is immutable. // +optional Domain *string `json:"domain,omitempty" protobuf:"bytes,1,opt,name=domain"` // Providers is a list of DNS providers that shall be enabled for this shoot cluster. Only relevant if @@ -466,6 +466,21 @@ type KubeAPIServerConfig struct { // cache size flags will have no effect, except when setting it to 0 (which disables the watch cache). // +optional WatchCacheSizes *WatchCacheSizes `json:"watchCacheSizes,omitempty" protobuf:"bytes,9,opt,name=watchCacheSizes"` + // Requests contains configuration for request-specific settings for the kube-apiserver. + // +optional + Requests *KubeAPIServerRequests `json:"requests,omitempty" protobuf:"bytes,10,opt,name=requests"` +} + +// KubeAPIServerRequests contains configuration for request-specific settings for the kube-apiserver. +type KubeAPIServerRequests struct { + // MaxNonMutatingInflight is the maximum number of non-mutating requests in flight at a given time. When the server + // exceeds this, it rejects requests. + // +optional + MaxNonMutatingInflight *int32 `json:"maxNonMutatingInflight,omitempty" protobuf:"bytes,1,name=maxNonMutatingInflight"` + // MaxMutatingInflight is the maximum number of mutating requests in flight at a given time. When the server + // exceeds this, it rejects requests. + // +optional + MaxMutatingInflight *int32 `json:"maxMutatingInflight,omitempty" protobuf:"bytes,2,name=maxMutatingInflight"` } // ServiceAccountConfig is the kube-apiserver configuration for service accounts. @@ -589,6 +604,9 @@ type KubeControllerManagerConfig struct { // NodeCIDRMaskSize defines the mask size for node cidr in cluster (default is 24) // +optional NodeCIDRMaskSize *int32 `json:"nodeCIDRMaskSize,omitempty" protobuf:"varint,3,opt,name=nodeCIDRMaskSize"` + // PodEvictionTimeout defines the grace period for deleting pods on failed nodes. Defaults to 2m. + // +optional + PodEvictionTimeout *metav1.Duration `json:"podEvictionTimeout,omitempty" protobuf:"bytes,4,opt,name=podEvictionTimeout"` } // HorizontalPodAutoscalerConfig contains horizontal pod autoscaler configuration settings for the kube-controller-manager. @@ -849,6 +867,13 @@ const ( // Maintenance relevant types // ////////////////////////////////////////////////////////////////////////////////////////////////// +const ( + // MaintenanceTimeWindowDurationMinimum is the minimum duration for a maintenance time window. + MaintenanceTimeWindowDurationMinimum = 30 * time.Minute + // MaintenanceTimeWindowDurationMaximum is the maximum duration for a maintenance time window. + MaintenanceTimeWindowDurationMaximum = 6 * time.Hour +) + // Maintenance contains information about the time window for maintenance operations and which // operations should be performed. type Maintenance struct { @@ -1132,6 +1157,9 @@ const ( ShootSystemComponentsHealthy ConditionType = "SystemComponentsHealthy" // ShootHibernationPossible is a constant for a condition type indicating whether the Shoot can be hibernated. ShootHibernationPossible ConditionType = "HibernationPossible" + // ShootMaintenancePreconditionsSatisfied is a constant for a condition type indicating whether all preconditions + // for a shoot maintenance operation are satisfied. + ShootMaintenancePreconditionsSatisfied ConditionType = "MaintenancePreconditionsSatisfied" ) // ShootPurpose is a type alias for string. 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 70b50dad..b987e3b2 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 @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -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 +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. @@ -491,6 +491,26 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*Ingress)(nil), (*core.Ingress)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_Ingress_To_core_Ingress(a.(*Ingress), b.(*core.Ingress), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.Ingress)(nil), (*Ingress)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_Ingress_To_v1beta1_Ingress(a.(*core.Ingress), b.(*Ingress), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*IngressController)(nil), (*core.IngressController)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_IngressController_To_core_IngressController(a.(*IngressController), b.(*core.IngressController), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.IngressController)(nil), (*IngressController)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_IngressController_To_v1beta1_IngressController(a.(*core.IngressController), b.(*IngressController), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*KubeAPIServerConfig)(nil), (*core.KubeAPIServerConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_KubeAPIServerConfig_To_core_KubeAPIServerConfig(a.(*KubeAPIServerConfig), b.(*core.KubeAPIServerConfig), scope) }); err != nil { @@ -501,6 +521,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*KubeAPIServerRequests)(nil), (*core.KubeAPIServerRequests)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(a.(*KubeAPIServerRequests), b.(*core.KubeAPIServerRequests), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.KubeAPIServerRequests)(nil), (*KubeAPIServerRequests)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_KubeAPIServerRequests_To_v1beta1_KubeAPIServerRequests(a.(*core.KubeAPIServerRequests), b.(*KubeAPIServerRequests), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*KubeControllerManagerConfig)(nil), (*core.KubeControllerManagerConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_KubeControllerManagerConfig_To_core_KubeControllerManagerConfig(a.(*KubeControllerManagerConfig), b.(*core.KubeControllerManagerConfig), scope) }); err != nil { @@ -991,6 +1021,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*SeedDNSProvider)(nil), (*core.SeedDNSProvider)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_SeedDNSProvider_To_core_SeedDNSProvider(a.(*SeedDNSProvider), b.(*core.SeedDNSProvider), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.SeedDNSProvider)(nil), (*SeedDNSProvider)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_SeedDNSProvider_To_v1beta1_SeedDNSProvider(a.(*core.SeedDNSProvider), b.(*SeedDNSProvider), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*SeedList)(nil), (*core.SeedList)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_SeedList_To_core_SeedList(a.(*SeedList), b.(*core.SeedList), scope) }); err != nil { @@ -2436,6 +2476,54 @@ func Convert_core_HorizontalPodAutoscalerConfig_To_v1beta1_HorizontalPodAutoscal return autoConvert_core_HorizontalPodAutoscalerConfig_To_v1beta1_HorizontalPodAutoscalerConfig(in, out, s) } +func autoConvert_v1beta1_Ingress_To_core_Ingress(in *Ingress, out *core.Ingress, s conversion.Scope) error { + out.Domain = in.Domain + if err := Convert_v1beta1_IngressController_To_core_IngressController(&in.Controller, &out.Controller, s); err != nil { + return err + } + return nil +} + +// Convert_v1beta1_Ingress_To_core_Ingress is an autogenerated conversion function. +func Convert_v1beta1_Ingress_To_core_Ingress(in *Ingress, out *core.Ingress, s conversion.Scope) error { + return autoConvert_v1beta1_Ingress_To_core_Ingress(in, out, s) +} + +func autoConvert_core_Ingress_To_v1beta1_Ingress(in *core.Ingress, out *Ingress, s conversion.Scope) error { + out.Domain = in.Domain + if err := Convert_core_IngressController_To_v1beta1_IngressController(&in.Controller, &out.Controller, s); err != nil { + return err + } + return nil +} + +// Convert_core_Ingress_To_v1beta1_Ingress is an autogenerated conversion function. +func Convert_core_Ingress_To_v1beta1_Ingress(in *core.Ingress, out *Ingress, s conversion.Scope) error { + return autoConvert_core_Ingress_To_v1beta1_Ingress(in, out, s) +} + +func autoConvert_v1beta1_IngressController_To_core_IngressController(in *IngressController, out *core.IngressController, s conversion.Scope) error { + out.Kind = in.Kind + out.ProviderConfig = (*runtime.RawExtension)(unsafe.Pointer(in.ProviderConfig)) + return nil +} + +// Convert_v1beta1_IngressController_To_core_IngressController is an autogenerated conversion function. +func Convert_v1beta1_IngressController_To_core_IngressController(in *IngressController, out *core.IngressController, s conversion.Scope) error { + return autoConvert_v1beta1_IngressController_To_core_IngressController(in, out, s) +} + +func autoConvert_core_IngressController_To_v1beta1_IngressController(in *core.IngressController, out *IngressController, s conversion.Scope) error { + out.Kind = in.Kind + out.ProviderConfig = (*runtime.RawExtension)(unsafe.Pointer(in.ProviderConfig)) + return nil +} + +// Convert_core_IngressController_To_v1beta1_IngressController is an autogenerated conversion function. +func Convert_core_IngressController_To_v1beta1_IngressController(in *core.IngressController, out *IngressController, s conversion.Scope) error { + return autoConvert_core_IngressController_To_v1beta1_IngressController(in, out, s) +} + func autoConvert_v1beta1_KubeAPIServerConfig_To_core_KubeAPIServerConfig(in *KubeAPIServerConfig, out *core.KubeAPIServerConfig, s conversion.Scope) error { if err := Convert_v1beta1_KubernetesConfig_To_core_KubernetesConfig(&in.KubernetesConfig, &out.KubernetesConfig, s); err != nil { return err @@ -2448,6 +2536,7 @@ func autoConvert_v1beta1_KubeAPIServerConfig_To_core_KubeAPIServerConfig(in *Kub out.RuntimeConfig = *(*map[string]bool)(unsafe.Pointer(&in.RuntimeConfig)) out.ServiceAccountConfig = (*core.ServiceAccountConfig)(unsafe.Pointer(in.ServiceAccountConfig)) out.WatchCacheSizes = (*core.WatchCacheSizes)(unsafe.Pointer(in.WatchCacheSizes)) + out.Requests = (*core.KubeAPIServerRequests)(unsafe.Pointer(in.Requests)) return nil } @@ -2468,6 +2557,7 @@ func autoConvert_core_KubeAPIServerConfig_To_v1beta1_KubeAPIServerConfig(in *cor out.RuntimeConfig = *(*map[string]bool)(unsafe.Pointer(&in.RuntimeConfig)) out.ServiceAccountConfig = (*ServiceAccountConfig)(unsafe.Pointer(in.ServiceAccountConfig)) out.WatchCacheSizes = (*WatchCacheSizes)(unsafe.Pointer(in.WatchCacheSizes)) + out.Requests = (*KubeAPIServerRequests)(unsafe.Pointer(in.Requests)) return nil } @@ -2476,12 +2566,35 @@ func Convert_core_KubeAPIServerConfig_To_v1beta1_KubeAPIServerConfig(in *core.Ku return autoConvert_core_KubeAPIServerConfig_To_v1beta1_KubeAPIServerConfig(in, out, s) } +func autoConvert_v1beta1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(in *KubeAPIServerRequests, out *core.KubeAPIServerRequests, s conversion.Scope) error { + out.MaxNonMutatingInflight = (*int32)(unsafe.Pointer(in.MaxNonMutatingInflight)) + out.MaxMutatingInflight = (*int32)(unsafe.Pointer(in.MaxMutatingInflight)) + return nil +} + +// Convert_v1beta1_KubeAPIServerRequests_To_core_KubeAPIServerRequests is an autogenerated conversion function. +func Convert_v1beta1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(in *KubeAPIServerRequests, out *core.KubeAPIServerRequests, s conversion.Scope) error { + return autoConvert_v1beta1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(in, out, s) +} + +func autoConvert_core_KubeAPIServerRequests_To_v1beta1_KubeAPIServerRequests(in *core.KubeAPIServerRequests, out *KubeAPIServerRequests, s conversion.Scope) error { + out.MaxNonMutatingInflight = (*int32)(unsafe.Pointer(in.MaxNonMutatingInflight)) + out.MaxMutatingInflight = (*int32)(unsafe.Pointer(in.MaxMutatingInflight)) + return nil +} + +// Convert_core_KubeAPIServerRequests_To_v1beta1_KubeAPIServerRequests is an autogenerated conversion function. +func Convert_core_KubeAPIServerRequests_To_v1beta1_KubeAPIServerRequests(in *core.KubeAPIServerRequests, out *KubeAPIServerRequests, s conversion.Scope) error { + return autoConvert_core_KubeAPIServerRequests_To_v1beta1_KubeAPIServerRequests(in, out, s) +} + func autoConvert_v1beta1_KubeControllerManagerConfig_To_core_KubeControllerManagerConfig(in *KubeControllerManagerConfig, out *core.KubeControllerManagerConfig, s conversion.Scope) error { if err := Convert_v1beta1_KubernetesConfig_To_core_KubernetesConfig(&in.KubernetesConfig, &out.KubernetesConfig, s); err != nil { return err } out.HorizontalPodAutoscalerConfig = (*core.HorizontalPodAutoscalerConfig)(unsafe.Pointer(in.HorizontalPodAutoscalerConfig)) out.NodeCIDRMaskSize = (*int32)(unsafe.Pointer(in.NodeCIDRMaskSize)) + out.PodEvictionTimeout = (*metav1.Duration)(unsafe.Pointer(in.PodEvictionTimeout)) return nil } @@ -2496,6 +2609,7 @@ func autoConvert_core_KubeControllerManagerConfig_To_v1beta1_KubeControllerManag } out.HorizontalPodAutoscalerConfig = (*HorizontalPodAutoscalerConfig)(unsafe.Pointer(in.HorizontalPodAutoscalerConfig)) out.NodeCIDRMaskSize = (*int32)(unsafe.Pointer(in.NodeCIDRMaskSize)) + out.PodEvictionTimeout = (*metav1.Duration)(unsafe.Pointer(in.PodEvictionTimeout)) return nil } @@ -3838,7 +3952,8 @@ func Convert_core_SeedBackup_To_v1beta1_SeedBackup(in *core.SeedBackup, out *See } func autoConvert_v1beta1_SeedDNS_To_core_SeedDNS(in *SeedDNS, out *core.SeedDNS, s conversion.Scope) error { - out.IngressDomain = in.IngressDomain + out.IngressDomain = (*string)(unsafe.Pointer(in.IngressDomain)) + out.Provider = (*core.SeedDNSProvider)(unsafe.Pointer(in.Provider)) return nil } @@ -3848,7 +3963,8 @@ func Convert_v1beta1_SeedDNS_To_core_SeedDNS(in *SeedDNS, out *core.SeedDNS, s c } func autoConvert_core_SeedDNS_To_v1beta1_SeedDNS(in *core.SeedDNS, out *SeedDNS, s conversion.Scope) error { - out.IngressDomain = in.IngressDomain + out.IngressDomain = (*string)(unsafe.Pointer(in.IngressDomain)) + out.Provider = (*SeedDNSProvider)(unsafe.Pointer(in.Provider)) return nil } @@ -3857,6 +3973,32 @@ func Convert_core_SeedDNS_To_v1beta1_SeedDNS(in *core.SeedDNS, out *SeedDNS, s c return autoConvert_core_SeedDNS_To_v1beta1_SeedDNS(in, out, s) } +func autoConvert_v1beta1_SeedDNSProvider_To_core_SeedDNSProvider(in *SeedDNSProvider, out *core.SeedDNSProvider, s conversion.Scope) error { + out.Type = in.Type + out.SecretRef = in.SecretRef + out.Domains = (*core.DNSIncludeExclude)(unsafe.Pointer(in.Domains)) + out.Zones = (*core.DNSIncludeExclude)(unsafe.Pointer(in.Zones)) + return nil +} + +// Convert_v1beta1_SeedDNSProvider_To_core_SeedDNSProvider is an autogenerated conversion function. +func Convert_v1beta1_SeedDNSProvider_To_core_SeedDNSProvider(in *SeedDNSProvider, out *core.SeedDNSProvider, s conversion.Scope) error { + return autoConvert_v1beta1_SeedDNSProvider_To_core_SeedDNSProvider(in, out, s) +} + +func autoConvert_core_SeedDNSProvider_To_v1beta1_SeedDNSProvider(in *core.SeedDNSProvider, out *SeedDNSProvider, s conversion.Scope) error { + out.Type = in.Type + out.SecretRef = in.SecretRef + out.Domains = (*DNSIncludeExclude)(unsafe.Pointer(in.Domains)) + out.Zones = (*DNSIncludeExclude)(unsafe.Pointer(in.Zones)) + return nil +} + +// Convert_core_SeedDNSProvider_To_v1beta1_SeedDNSProvider is an autogenerated conversion function. +func Convert_core_SeedDNSProvider_To_v1beta1_SeedDNSProvider(in *core.SeedDNSProvider, out *SeedDNSProvider, s conversion.Scope) error { + return autoConvert_core_SeedDNSProvider_To_v1beta1_SeedDNSProvider(in, out, s) +} + func autoConvert_v1beta1_SeedList_To_core_SeedList(in *SeedList, out *core.SeedList, s conversion.Scope) error { out.ListMeta = in.ListMeta if in.Items != nil { @@ -4116,6 +4258,7 @@ func autoConvert_v1beta1_SeedSpec_To_core_SeedSpec(in *SeedSpec, out *core.SeedS out.Taints = *(*[]core.SeedTaint)(unsafe.Pointer(&in.Taints)) out.Volume = (*core.SeedVolume)(unsafe.Pointer(in.Volume)) out.Settings = (*core.SeedSettings)(unsafe.Pointer(in.Settings)) + out.Ingress = (*core.Ingress)(unsafe.Pointer(in.Ingress)) return nil } @@ -4139,6 +4282,7 @@ func autoConvert_core_SeedSpec_To_v1beta1_SeedSpec(in *core.SeedSpec, out *SeedS out.Settings = (*SeedSettings)(unsafe.Pointer(in.Settings)) out.Taints = *(*[]SeedTaint)(unsafe.Pointer(&in.Taints)) out.Volume = (*SeedVolume)(unsafe.Pointer(in.Volume)) + out.Ingress = (*Ingress)(unsafe.Pointer(in.Ingress)) return nil } @@ -4153,6 +4297,8 @@ func autoConvert_v1beta1_SeedStatus_To_core_SeedStatus(in *SeedStatus, out *core out.Conditions = *(*[]core.Condition)(unsafe.Pointer(&in.Conditions)) out.ObservedGeneration = in.ObservedGeneration out.ClusterIdentity = (*string)(unsafe.Pointer(in.ClusterIdentity)) + out.Capacity = *(*v1.ResourceList)(unsafe.Pointer(&in.Capacity)) + out.Allocatable = *(*v1.ResourceList)(unsafe.Pointer(&in.Allocatable)) return nil } @@ -4167,6 +4313,8 @@ func autoConvert_core_SeedStatus_To_v1beta1_SeedStatus(in *core.SeedStatus, out out.Conditions = *(*[]Condition)(unsafe.Pointer(&in.Conditions)) out.ObservedGeneration = in.ObservedGeneration out.ClusterIdentity = (*string)(unsafe.Pointer(in.ClusterIdentity)) + out.Capacity = *(*v1.ResourceList)(unsafe.Pointer(&in.Capacity)) + out.Allocatable = *(*v1.ResourceList)(unsafe.Pointer(&in.Allocatable)) return nil } 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 92e1cb82..78aab253 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 @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -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 +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. @@ -1267,6 +1267,44 @@ func (in *HorizontalPodAutoscalerConfig) DeepCopy() *HorizontalPodAutoscalerConf return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Ingress) DeepCopyInto(out *Ingress) { + *out = *in + in.Controller.DeepCopyInto(&out.Controller) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ingress. +func (in *Ingress) DeepCopy() *Ingress { + if in == nil { + return nil + } + out := new(Ingress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressController) DeepCopyInto(out *IngressController) { + *out = *in + if in.ProviderConfig != nil { + in, out := &in.ProviderConfig, &out.ProviderConfig + *out = new(runtime.RawExtension) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressController. +func (in *IngressController) DeepCopy() *IngressController { + if in == nil { + return nil + } + out := new(IngressController) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KubeAPIServerConfig) DeepCopyInto(out *KubeAPIServerConfig) { *out = *in @@ -1315,6 +1353,11 @@ func (in *KubeAPIServerConfig) DeepCopyInto(out *KubeAPIServerConfig) { *out = new(WatchCacheSizes) (*in).DeepCopyInto(*out) } + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = new(KubeAPIServerRequests) + (*in).DeepCopyInto(*out) + } return } @@ -1328,6 +1371,32 @@ func (in *KubeAPIServerConfig) DeepCopy() *KubeAPIServerConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeAPIServerRequests) DeepCopyInto(out *KubeAPIServerRequests) { + *out = *in + if in.MaxNonMutatingInflight != nil { + in, out := &in.MaxNonMutatingInflight, &out.MaxNonMutatingInflight + *out = new(int32) + **out = **in + } + if in.MaxMutatingInflight != nil { + in, out := &in.MaxMutatingInflight, &out.MaxMutatingInflight + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeAPIServerRequests. +func (in *KubeAPIServerRequests) DeepCopy() *KubeAPIServerRequests { + if in == nil { + return nil + } + out := new(KubeAPIServerRequests) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KubeControllerManagerConfig) DeepCopyInto(out *KubeControllerManagerConfig) { *out = *in @@ -1342,6 +1411,11 @@ func (in *KubeControllerManagerConfig) DeepCopyInto(out *KubeControllerManagerCo *out = new(int32) **out = **in } + if in.PodEvictionTimeout != nil { + in, out := &in.PodEvictionTimeout, &out.PodEvictionTimeout + *out = new(metav1.Duration) + **out = **in + } return } @@ -2856,6 +2930,16 @@ func (in *SeedBackup) DeepCopy() *SeedBackup { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedDNS) DeepCopyInto(out *SeedDNS) { *out = *in + if in.IngressDomain != nil { + in, out := &in.IngressDomain, &out.IngressDomain + *out = new(string) + **out = **in + } + if in.Provider != nil { + in, out := &in.Provider, &out.Provider + *out = new(SeedDNSProvider) + (*in).DeepCopyInto(*out) + } return } @@ -2869,6 +2953,33 @@ func (in *SeedDNS) DeepCopy() *SeedDNS { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SeedDNSProvider) DeepCopyInto(out *SeedDNSProvider) { + *out = *in + out.SecretRef = in.SecretRef + if in.Domains != nil { + in, out := &in.Domains, &out.Domains + *out = new(DNSIncludeExclude) + (*in).DeepCopyInto(*out) + } + if in.Zones != nil { + in, out := &in.Zones, &out.Zones + *out = new(DNSIncludeExclude) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedDNSProvider. +func (in *SeedDNSProvider) DeepCopy() *SeedDNSProvider { + if in == nil { + return nil + } + out := new(SeedDNSProvider) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedList) DeepCopyInto(out *SeedList) { *out = *in @@ -3116,7 +3227,7 @@ func (in *SeedSpec) DeepCopyInto(out *SeedSpec) { *out = new(SeedBackup) (*in).DeepCopyInto(*out) } - out.DNS = in.DNS + in.DNS.DeepCopyInto(&out.DNS) in.Networks.DeepCopyInto(&out.Networks) in.Provider.DeepCopyInto(&out.Provider) if in.SecretRef != nil { @@ -3141,6 +3252,11 @@ func (in *SeedSpec) DeepCopyInto(out *SeedSpec) { *out = new(SeedSettings) (*in).DeepCopyInto(*out) } + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = new(Ingress) + (*in).DeepCopyInto(*out) + } return } @@ -3179,6 +3295,20 @@ func (in *SeedStatus) DeepCopyInto(out *SeedStatus) { *out = new(string) **out = **in } + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(v1.ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + if in.Allocatable != nil { + in, out := &in.Allocatable, &out.Allocatable + *out = make(v1.ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go index 54c185d4..1f87ca32 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.defaults.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -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 +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. 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 2411fd94..8af2eec0 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 @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -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 +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. @@ -1320,6 +1320,44 @@ func (in *HorizontalPodAutoscalerConfig) DeepCopy() *HorizontalPodAutoscalerConf return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Ingress) DeepCopyInto(out *Ingress) { + *out = *in + in.Controller.DeepCopyInto(&out.Controller) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ingress. +func (in *Ingress) DeepCopy() *Ingress { + if in == nil { + return nil + } + out := new(Ingress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *IngressController) DeepCopyInto(out *IngressController) { + *out = *in + if in.ProviderConfig != nil { + in, out := &in.ProviderConfig, &out.ProviderConfig + *out = new(runtime.RawExtension) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressController. +func (in *IngressController) DeepCopy() *IngressController { + if in == nil { + return nil + } + out := new(IngressController) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KubeAPIServerConfig) DeepCopyInto(out *KubeAPIServerConfig) { *out = *in @@ -1368,6 +1406,11 @@ func (in *KubeAPIServerConfig) DeepCopyInto(out *KubeAPIServerConfig) { *out = new(WatchCacheSizes) (*in).DeepCopyInto(*out) } + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = new(KubeAPIServerRequests) + (*in).DeepCopyInto(*out) + } return } @@ -1381,6 +1424,32 @@ func (in *KubeAPIServerConfig) DeepCopy() *KubeAPIServerConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeAPIServerRequests) DeepCopyInto(out *KubeAPIServerRequests) { + *out = *in + if in.MaxNonMutatingInflight != nil { + in, out := &in.MaxNonMutatingInflight, &out.MaxNonMutatingInflight + *out = new(int32) + **out = **in + } + if in.MaxMutatingInflight != nil { + in, out := &in.MaxMutatingInflight, &out.MaxMutatingInflight + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeAPIServerRequests. +func (in *KubeAPIServerRequests) DeepCopy() *KubeAPIServerRequests { + if in == nil { + return nil + } + out := new(KubeAPIServerRequests) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KubeControllerManagerConfig) DeepCopyInto(out *KubeControllerManagerConfig) { *out = *in @@ -1395,6 +1464,11 @@ func (in *KubeControllerManagerConfig) DeepCopyInto(out *KubeControllerManagerCo *out = new(int32) **out = **in } + if in.PodEvictionTimeout != nil { + in, out := &in.PodEvictionTimeout, &out.PodEvictionTimeout + *out = new(metav1.Duration) + **out = **in + } return } @@ -2927,6 +3001,16 @@ func (in *SeedBackup) DeepCopy() *SeedBackup { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedDNS) DeepCopyInto(out *SeedDNS) { *out = *in + if in.IngressDomain != nil { + in, out := &in.IngressDomain, &out.IngressDomain + *out = new(string) + **out = **in + } + if in.Provider != nil { + in, out := &in.Provider, &out.Provider + *out = new(SeedDNSProvider) + (*in).DeepCopyInto(*out) + } return } @@ -2940,6 +3024,33 @@ func (in *SeedDNS) DeepCopy() *SeedDNS { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SeedDNSProvider) DeepCopyInto(out *SeedDNSProvider) { + *out = *in + out.SecretRef = in.SecretRef + if in.Domains != nil { + in, out := &in.Domains, &out.Domains + *out = new(DNSIncludeExclude) + (*in).DeepCopyInto(*out) + } + if in.Zones != nil { + in, out := &in.Zones, &out.Zones + *out = new(DNSIncludeExclude) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedDNSProvider. +func (in *SeedDNSProvider) DeepCopy() *SeedDNSProvider { + if in == nil { + return nil + } + out := new(SeedDNSProvider) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeedList) DeepCopyInto(out *SeedList) { *out = *in @@ -3187,7 +3298,7 @@ func (in *SeedSpec) DeepCopyInto(out *SeedSpec) { *out = new(SeedBackup) (*in).DeepCopyInto(*out) } - out.DNS = in.DNS + in.DNS.DeepCopyInto(&out.DNS) in.Networks.DeepCopyInto(&out.Networks) in.Provider.DeepCopyInto(&out.Provider) if in.SecretRef != nil { @@ -3212,6 +3323,11 @@ func (in *SeedSpec) DeepCopyInto(out *SeedSpec) { *out = new(SeedVolume) (*in).DeepCopyInto(*out) } + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = new(Ingress) + (*in).DeepCopyInto(*out) + } return } @@ -3250,6 +3366,20 @@ func (in *SeedStatus) DeepCopyInto(out *SeedStatus) { *out = new(string) **out = **in } + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(v1.ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + if in.Allocatable != nil { + in, out := &in.Allocatable, &out.Allocatable + *out = make(v1.ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupbucket.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupbucket.go index d5ddb39f..b3545246 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupbucket.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupbucket.go @@ -27,6 +27,12 @@ const BackupBucketResource = "BackupBucket" // +genclient // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Cluster,path=backupbuckets,shortName=bb,singular=backupbucket +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the cloud provider for this resource." +// +kubebuilder:printcolumn:name=Region,JSONPath=".spec.region",type=string,description="The region into which the backup bucket should be created." +// +kubebuilder:printcolumn:name=State,JSONPath=".status.lastOperation.state",type=string,description="status of the last operation, one of Aborted, Processing, Succeeded, Error, Failed" +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // BackupBucket is a specification for backup bucket. type BackupBucket struct { @@ -34,7 +40,8 @@ type BackupBucket struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec BackupBucketSpec `json:"spec"` + Spec BackupBucketSpec `json:"spec"` + // +optional Status BackupBucketStatus `json:"status"` } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupentry.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupentry.go index 146ed608..914395e8 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupentry.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_backupentry.go @@ -28,6 +28,13 @@ const BackupEntryResource = "BackupEntry" // +genclient // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Cluster,path=backupentries,shortName=be,singular=backupentry +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the cloud provider for this resource." +// +kubebuilder:printcolumn:name=Region,JSONPath=".spec.region",type=string,description="The region into which the backup entry should be created." +// +kubebuilder:printcolumn:name=Bucket,JSONPath=".spec.bucketName",type=string,description="The name of the bucket into which the backup entry should be created." +// +kubebuilder:printcolumn:name=State,JSONPath=".status.lastOperation.state",type=string,description="status of the last operation, one of Aborted, Processing, Succeeded, Error, Failed" +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // BackupEntry is a specification for backup Entry. type BackupEntry struct { @@ -35,7 +42,8 @@ type BackupEntry struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec BackupEntrySpec `json:"spec"` + Spec BackupEntrySpec `json:"spec"` + // +optional Status BackupEntryStatus `json:"status"` } @@ -67,6 +75,8 @@ type BackupEntrySpec struct { DefaultSpec `json:",inline"` // BackupBucketProviderStatus contains the provider status that has // been generated by the controller responsible for the `BackupBucket` resource. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional BackupBucketProviderStatus *runtime.RawExtension `json:"backupBucketProviderStatus,omitempty"` // Region is the region of this Entry. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_cluster.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_cluster.go index ccfda96f..df700279 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_cluster.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_cluster.go @@ -25,6 +25,9 @@ const ClusterResource = "Cluster" // +genclient // +genclient:nonNamespaced // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Cluster,path=clusters,singular=cluster +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // Cluster is a specification for a Cluster resource. type Cluster struct { @@ -49,10 +52,16 @@ type ClusterList struct { type ClusterSpec struct { // CloudProfile is a raw extension field that contains the cloudprofile resource referenced // by the shoot that has to be reconciled. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields CloudProfile runtime.RawExtension `json:"cloudProfile"` // Seed is a raw extension field that contains the seed resource referenced by the shoot that // has to be reconciled. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields Seed runtime.RawExtension `json:"seed"` // Shoot is a raw extension field that contains the shoot resource that has to be reconciled. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields Shoot runtime.RawExtension `json:"shoot"` } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_containerruntime.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_containerruntime.go index a911a155..7578e242 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_containerruntime.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_containerruntime.go @@ -31,14 +31,20 @@ const ( // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=containerruntimes,shortName=cr,singular=containerruntime +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the Container Runtime resource." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="status of the last operation, one of Aborted, Processing, Succeeded, Error, Failed" +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // ContainerRuntime is a specification for a container runtime resource. type ContainerRuntime struct { metav1.TypeMeta `json:",inline"` // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ContainerRuntimeSpec `json:"spec"` - Status ContainerRuntimeStatus `json:"status"` + Spec ContainerRuntimeSpec `json:"spec"` + // +optional + Status ContainerRuntimeStatus `json:"status"` } // GetExtensionSpec implements Object. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_controlplane.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_controlplane.go index 563edbaf..fec2ca2e 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_controlplane.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_controlplane.go @@ -27,13 +27,20 @@ const ControlPlaneResource = "ControlPlane" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=controlplanes,shortName=cp,singular=controlplane +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The control plane type." +// +kubebuilder:printcolumn:name=Purpose,JSONPath=".spec.purpose",type=string,description="Purpose of control plane resource." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of control plane resource." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // ControlPlane is a specification for a ControlPlane resource. type ControlPlane struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ControlPlaneSpec `json:"spec"` + Spec ControlPlaneSpec `json:"spec"` + // +optional Status ControlPlaneStatus `json:"status"` } @@ -72,6 +79,8 @@ type ControlPlaneSpec struct { Purpose *Purpose `json:"purpose,omitempty"` // InfrastructureProviderStatus contains the provider status that has // been generated by the controller responsible for the `Infrastructure` resource. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional InfrastructureProviderStatus *runtime.RawExtension `json:"infrastructureProviderStatus,omitempty"` // Region is the region of this control plane. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go index 619d4790..a6339036 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_defaults.go @@ -24,8 +24,9 @@ type DefaultSpec struct { // Type contains the instance of the resource's kind. Type string `json:"type"` // ProviderConfig is the provider specific configuration. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional - ProviderConfig *runtime.RawExtension `json:"providerConfig,omitempty"` } @@ -47,6 +48,8 @@ func (d *DefaultSpec) GetProviderConfig() *runtime.RawExtension { // DefaultStatus contains common status fields for every extension resource. type DefaultStatus struct { // ProviderStatus contains provider-specific status. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional ProviderStatus *runtime.RawExtension `json:"providerStatus,omitempty"` // Conditions represents the latest available observations of a Seed's current state. @@ -61,6 +64,8 @@ type DefaultStatus struct { // ObservedGeneration is the most recent generation observed for this resource. ObservedGeneration int64 `json:"observedGeneration,omitempty"` // State can be filled by the operating controller with what ever data it needs. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional State *runtime.RawExtension `json:"state,omitempty"` // Resources holds a list of named resource references that can be referred to in the state by their names. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_extension.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_extension.go index 94953e47..26744ee7 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_extension.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_extension.go @@ -25,6 +25,11 @@ const ExtensionResource = "Extension" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=extensions,shortName=ext,singular=extension +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the Extension resource." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of Extension resource." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // Extension is a specification for a Extension resource. type Extension struct { @@ -32,7 +37,8 @@ type Extension struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec ExtensionSpec `json:"spec"` + Spec ExtensionSpec `json:"spec"` + // +optional Status ExtensionStatus `json:"status"` } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_infrastructure.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_infrastructure.go index 7e514a3f..d568a478 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_infrastructure.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_infrastructure.go @@ -26,6 +26,12 @@ const InfrastructureResource = "Infrastructure" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=infrastructures,shortName=infra,singular=infrastructure +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the cloud provider for this resource." +// +kubebuilder:printcolumn:name=Region,JSONPath=".spec.region",type=string,description="The region into which the infrastructure should be deployed." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of infrastructure resource." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // Infrastructure is a specification for cloud provider infrastructure. type Infrastructure struct { @@ -33,7 +39,8 @@ type Infrastructure struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec InfrastructureSpec `json:"spec"` + Spec InfrastructureSpec `json:"spec"` + // +optional Status InfrastructureStatus `json:"status"` } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_network.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_network.go index 0888e941..f47bce11 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_network.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_network.go @@ -25,6 +25,13 @@ const NetworkResource = "Network" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=networks,singular=network +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the network provider for this resource." +// +kubebuilder:printcolumn:name=Pod CIDR,JSONPath=".spec.podCIDR",type=string,description="The CIDR that will be used for pods." +// +kubebuilder:printcolumn:name=Service CIDR,JSONPath=".spec.serviceCIDR",type=string,description="The CIDR that will be used for services." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of network resource." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // Network is the specification for cluster networking. type Network struct { @@ -32,18 +39,19 @@ type Network struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec NetworkSpec `json:"spec"` + Spec NetworkSpec `json:"spec"` + // +optional Status NetworkStatus `json:"status"` } // GetExtensionSpec implements Object. -func (i *Network) GetExtensionSpec() Spec { - return &i.Spec +func (n *Network) GetExtensionSpec() Spec { + return &n.Spec } // GetExtensionStatus implements Object. -func (i *Network) GetExtensionStatus() Status { - return &i.Status +func (n *Network) GetExtensionStatus() Status { + return &n.Status } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go index ecbda578..866ac860 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/types_operatingsystemconfig.go @@ -26,6 +26,12 @@ const OperatingSystemConfigResource = "OperatingSystemConfig" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=operatingsystemconfigs,shortName=osc,singular=operatingsystemconfig +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the operating system configuration." +// +kubebuilder:printcolumn:name=Purpose,JSONPath=".spec.purpose",type=string,description="The purpose of the operating system configuration." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of operating system configuration." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // OperatingSystemConfig is a specification for a OperatingSystemConfig resource type OperatingSystemConfig struct { @@ -33,7 +39,8 @@ type OperatingSystemConfig struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec OperatingSystemConfigSpec `json:"spec"` + Spec OperatingSystemConfigSpec `json:"spec"` + // +optional Status OperatingSystemConfigStatus `json:"status"` } 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 bcd5595f..95a299ec 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 @@ -30,6 +30,12 @@ const WorkerResource = "Worker" // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Namespaced,path=workers,singular=worker +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name=Type,JSONPath=".spec.type",type=string,description="The type of the cloud provider for this resource." +// +kubebuilder:printcolumn:name=Region,JSONPath=".spec.region",type=string,description="The region into which the worker should be deployed." +// +kubebuilder:printcolumn:name=Status,JSONPath=".status.lastOperation.state",type=string,description="Status of the worker." +// +kubebuilder:printcolumn:name=Age,JSONPath=".metadata.creationTimestamp",type=date,description="creation timestamp" // Worker is a specification for a Worker resource. type Worker struct { @@ -37,7 +43,8 @@ type Worker struct { // +optional metav1.ObjectMeta `json:"metadata,omitempty"` - Spec WorkerSpec `json:"spec"` + Spec WorkerSpec `json:"spec"` + // +optional Status WorkerStatus `json:"status"` } @@ -70,6 +77,8 @@ type WorkerSpec struct { // InfrastructureProviderStatus is a raw extension field that contains the provider status that has // been generated by the controller responsible for the `Infrastructure` resource. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional InfrastructureProviderStatus *runtime.RawExtension `json:"infrastructureProviderStatus,omitempty"` // Region is the name of the region where the worker pool should be deployed to. @@ -113,6 +122,8 @@ type WorkerPool struct { // Name is the name of this worker pool. Name string `json:"name"` // ProviderConfig is a provider specific configuration for the worker pool. + // +kubebuilder:validation:XPreserveUnknownFields + // +kubebuilder:pruning:PreserveUnknownFields // +optional ProviderConfig *runtime.RawExtension `json:"providerConfig,omitempty"` // UserData is a base64-encoded string that contains the data that is sent to the provider's APIs diff --git a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/zz_generated.deepcopy.go index d169dce2..51466ea0 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/zz_generated.deepcopy.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/clientset.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/clientset.go index c06ffb0c..d6ec6866 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/clientset.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/clientset.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/doc.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/doc.go index 02f62866..32d85228 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/doc.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/doc.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/scheme/doc.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/scheme/doc.go index 6793d628..7d4fb776 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/scheme/doc.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/scheme/doc.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/scheme/register.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/scheme/register.go index 8a9d600a..aee592da 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/scheme/register.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/scheme/register.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/backupbucket.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/backupbucket.go index 2e367c79..8e168d58 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/backupbucket.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/backupbucket.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/backupentry.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/backupentry.go index 8cb5356a..cf367142 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/backupentry.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/backupentry.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/cloudprofile.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/cloudprofile.go index c010dc08..064d0047 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/cloudprofile.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/cloudprofile.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/controllerinstallation.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/controllerinstallation.go index 94cffc47..219170ef 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/controllerinstallation.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/controllerinstallation.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/controllerregistration.go index 2901e8a1..67890f52 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/controllerregistration.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/core_client.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/core_client.go index 9b719f0a..3d607254 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/core_client.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/core_client.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/doc.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/doc.go index 9e646c67..828c8ebe 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/doc.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/generated_expansion.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/generated_expansion.go index 76292a96..89d96278 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/generated_expansion.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/generated_expansion.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/plant.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/plant.go index 2e46c55c..2c5fb0c7 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/plant.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/plant.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/project.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/project.go index 240f8f52..a42bf152 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/project.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/project.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/quota.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/quota.go index 9299fc0a..1bd530ef 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/quota.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/quota.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/secretbinding.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/secretbinding.go index 0d61e37c..0798e053 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/secretbinding.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/secretbinding.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/seed.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/seed.go index c406ef56..97dee934 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/seed.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/seed.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/shoot.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/shoot.go index df81b5ac..5ff105c7 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/shoot.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/shootstate.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/shootstate.go index 9db09cba..2a28e0a1 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/shootstate.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1alpha1/shootstate.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/backupbucket.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/backupbucket.go index f46919de..a7238c9a 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/backupbucket.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/backupbucket.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/backupentry.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/backupentry.go index ce1ebea4..13880f07 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/backupentry.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/backupentry.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/cloudprofile.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/cloudprofile.go index 40f089c9..37b7cab2 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/cloudprofile.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/cloudprofile.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/controllerinstallation.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/controllerinstallation.go index 6377bff0..5756e846 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/controllerinstallation.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/controllerinstallation.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/controllerregistration.go index 7e59f291..c7f66b20 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/controllerregistration.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/core_client.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/core_client.go index d49693ea..01ada3d7 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/core_client.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/core_client.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/doc.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/doc.go index 0f3dafef..11866df3 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/doc.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/generated_expansion.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/generated_expansion.go index 963057bb..6ca0f943 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/generated_expansion.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/generated_expansion.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/plant.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/plant.go index f6828f43..1beb236a 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/plant.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/plant.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/project.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/project.go index 9eacf89a..b0d08d49 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/project.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/project.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/quota.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/quota.go index 03cd1801..73aef2be 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/quota.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/quota.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/secretbinding.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/secretbinding.go index 325a8c4c..953846e9 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/secretbinding.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/secretbinding.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/seed.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/seed.go index 37e6268c..05b1df25 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/seed.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/seed.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/shoot.go b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/shoot.go index 2895610c..b9c904c6 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/client/core/clientset/versioned/typed/core/v1beta1/shoot.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupbucket.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupbucket.go new file mode 100644 index 00000000..31ac02f2 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupbucket.go @@ -0,0 +1,68 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// BackupBucketLister helps list BackupBuckets. +// All objects returned here must be treated as read-only. +type BackupBucketLister interface { + // List lists all BackupBuckets in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.BackupBucket, err error) + // Get retrieves the BackupBucket from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.BackupBucket, error) + BackupBucketListerExpansion +} + +// backupBucketLister implements the BackupBucketLister interface. +type backupBucketLister struct { + indexer cache.Indexer +} + +// NewBackupBucketLister returns a new BackupBucketLister. +func NewBackupBucketLister(indexer cache.Indexer) BackupBucketLister { + return &backupBucketLister{indexer: indexer} +} + +// List lists all BackupBuckets in the indexer. +func (s *backupBucketLister) List(selector labels.Selector) (ret []*v1beta1.BackupBucket, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.BackupBucket)) + }) + return ret, err +} + +// Get retrieves the BackupBucket from the index for a given name. +func (s *backupBucketLister) Get(name string) (*v1beta1.BackupBucket, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("backupbucket"), name) + } + return obj.(*v1beta1.BackupBucket), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupentry.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupentry.go new file mode 100644 index 00000000..8ff29634 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/backupentry.go @@ -0,0 +1,99 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// BackupEntryLister helps list BackupEntries. +// All objects returned here must be treated as read-only. +type BackupEntryLister interface { + // List lists all BackupEntries in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.BackupEntry, err error) + // BackupEntries returns an object that can list and get BackupEntries. + BackupEntries(namespace string) BackupEntryNamespaceLister + BackupEntryListerExpansion +} + +// backupEntryLister implements the BackupEntryLister interface. +type backupEntryLister struct { + indexer cache.Indexer +} + +// NewBackupEntryLister returns a new BackupEntryLister. +func NewBackupEntryLister(indexer cache.Indexer) BackupEntryLister { + return &backupEntryLister{indexer: indexer} +} + +// List lists all BackupEntries in the indexer. +func (s *backupEntryLister) List(selector labels.Selector) (ret []*v1beta1.BackupEntry, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.BackupEntry)) + }) + return ret, err +} + +// BackupEntries returns an object that can list and get BackupEntries. +func (s *backupEntryLister) BackupEntries(namespace string) BackupEntryNamespaceLister { + return backupEntryNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// BackupEntryNamespaceLister helps list and get BackupEntries. +// All objects returned here must be treated as read-only. +type BackupEntryNamespaceLister interface { + // List lists all BackupEntries in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.BackupEntry, err error) + // Get retrieves the BackupEntry from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.BackupEntry, error) + BackupEntryNamespaceListerExpansion +} + +// backupEntryNamespaceLister implements the BackupEntryNamespaceLister +// interface. +type backupEntryNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all BackupEntries in the indexer for a given namespace. +func (s backupEntryNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.BackupEntry, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.BackupEntry)) + }) + return ret, err +} + +// Get retrieves the BackupEntry from the indexer for a given namespace and name. +func (s backupEntryNamespaceLister) Get(name string) (*v1beta1.BackupEntry, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("backupentry"), name) + } + return obj.(*v1beta1.BackupEntry), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/cloudprofile.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/cloudprofile.go new file mode 100644 index 00000000..27695657 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/cloudprofile.go @@ -0,0 +1,68 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// CloudProfileLister helps list CloudProfiles. +// All objects returned here must be treated as read-only. +type CloudProfileLister interface { + // List lists all CloudProfiles in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.CloudProfile, err error) + // Get retrieves the CloudProfile from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.CloudProfile, error) + CloudProfileListerExpansion +} + +// cloudProfileLister implements the CloudProfileLister interface. +type cloudProfileLister struct { + indexer cache.Indexer +} + +// NewCloudProfileLister returns a new CloudProfileLister. +func NewCloudProfileLister(indexer cache.Indexer) CloudProfileLister { + return &cloudProfileLister{indexer: indexer} +} + +// List lists all CloudProfiles in the indexer. +func (s *cloudProfileLister) List(selector labels.Selector) (ret []*v1beta1.CloudProfile, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.CloudProfile)) + }) + return ret, err +} + +// Get retrieves the CloudProfile from the index for a given name. +func (s *cloudProfileLister) Get(name string) (*v1beta1.CloudProfile, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("cloudprofile"), name) + } + return obj.(*v1beta1.CloudProfile), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerinstallation.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerinstallation.go new file mode 100644 index 00000000..c1659012 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerinstallation.go @@ -0,0 +1,68 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ControllerInstallationLister helps list ControllerInstallations. +// All objects returned here must be treated as read-only. +type ControllerInstallationLister interface { + // List lists all ControllerInstallations in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.ControllerInstallation, err error) + // Get retrieves the ControllerInstallation from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.ControllerInstallation, error) + ControllerInstallationListerExpansion +} + +// controllerInstallationLister implements the ControllerInstallationLister interface. +type controllerInstallationLister struct { + indexer cache.Indexer +} + +// NewControllerInstallationLister returns a new ControllerInstallationLister. +func NewControllerInstallationLister(indexer cache.Indexer) ControllerInstallationLister { + return &controllerInstallationLister{indexer: indexer} +} + +// List lists all ControllerInstallations in the indexer. +func (s *controllerInstallationLister) List(selector labels.Selector) (ret []*v1beta1.ControllerInstallation, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.ControllerInstallation)) + }) + return ret, err +} + +// Get retrieves the ControllerInstallation from the index for a given name. +func (s *controllerInstallationLister) Get(name string) (*v1beta1.ControllerInstallation, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("controllerinstallation"), name) + } + return obj.(*v1beta1.ControllerInstallation), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerregistration.go new file mode 100644 index 00000000..3462b34e --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/controllerregistration.go @@ -0,0 +1,68 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ControllerRegistrationLister helps list ControllerRegistrations. +// All objects returned here must be treated as read-only. +type ControllerRegistrationLister interface { + // List lists all ControllerRegistrations in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.ControllerRegistration, err error) + // Get retrieves the ControllerRegistration from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.ControllerRegistration, error) + ControllerRegistrationListerExpansion +} + +// controllerRegistrationLister implements the ControllerRegistrationLister interface. +type controllerRegistrationLister struct { + indexer cache.Indexer +} + +// NewControllerRegistrationLister returns a new ControllerRegistrationLister. +func NewControllerRegistrationLister(indexer cache.Indexer) ControllerRegistrationLister { + return &controllerRegistrationLister{indexer: indexer} +} + +// List lists all ControllerRegistrations in the indexer. +func (s *controllerRegistrationLister) List(selector labels.Selector) (ret []*v1beta1.ControllerRegistration, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.ControllerRegistration)) + }) + return ret, err +} + +// Get retrieves the ControllerRegistration from the index for a given name. +func (s *controllerRegistrationLister) Get(name string) (*v1beta1.ControllerRegistration, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("controllerregistration"), name) + } + return obj.(*v1beta1.ControllerRegistration), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/expansion_generated.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/expansion_generated.go new file mode 100644 index 00000000..102799a5 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/expansion_generated.go @@ -0,0 +1,83 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +// BackupBucketListerExpansion allows custom methods to be added to +// BackupBucketLister. +type BackupBucketListerExpansion interface{} + +// BackupEntryListerExpansion allows custom methods to be added to +// BackupEntryLister. +type BackupEntryListerExpansion interface{} + +// BackupEntryNamespaceListerExpansion allows custom methods to be added to +// BackupEntryNamespaceLister. +type BackupEntryNamespaceListerExpansion interface{} + +// CloudProfileListerExpansion allows custom methods to be added to +// CloudProfileLister. +type CloudProfileListerExpansion interface{} + +// ControllerInstallationListerExpansion allows custom methods to be added to +// ControllerInstallationLister. +type ControllerInstallationListerExpansion interface{} + +// ControllerRegistrationListerExpansion allows custom methods to be added to +// ControllerRegistrationLister. +type ControllerRegistrationListerExpansion interface{} + +// PlantListerExpansion allows custom methods to be added to +// PlantLister. +type PlantListerExpansion interface{} + +// PlantNamespaceListerExpansion allows custom methods to be added to +// PlantNamespaceLister. +type PlantNamespaceListerExpansion interface{} + +// ProjectListerExpansion allows custom methods to be added to +// ProjectLister. +type ProjectListerExpansion interface{} + +// QuotaListerExpansion allows custom methods to be added to +// QuotaLister. +type QuotaListerExpansion interface{} + +// QuotaNamespaceListerExpansion allows custom methods to be added to +// QuotaNamespaceLister. +type QuotaNamespaceListerExpansion interface{} + +// SecretBindingListerExpansion allows custom methods to be added to +// SecretBindingLister. +type SecretBindingListerExpansion interface{} + +// SecretBindingNamespaceListerExpansion allows custom methods to be added to +// SecretBindingNamespaceLister. +type SecretBindingNamespaceListerExpansion interface{} + +// SeedListerExpansion allows custom methods to be added to +// SeedLister. +type SeedListerExpansion interface{} + +// ShootListerExpansion allows custom methods to be added to +// ShootLister. +type ShootListerExpansion interface{} + +// ShootNamespaceListerExpansion allows custom methods to be added to +// ShootNamespaceLister. +type ShootNamespaceListerExpansion interface{} diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/plant.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/plant.go new file mode 100644 index 00000000..f0b959f9 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/plant.go @@ -0,0 +1,99 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// PlantLister helps list Plants. +// All objects returned here must be treated as read-only. +type PlantLister interface { + // List lists all Plants in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.Plant, err error) + // Plants returns an object that can list and get Plants. + Plants(namespace string) PlantNamespaceLister + PlantListerExpansion +} + +// plantLister implements the PlantLister interface. +type plantLister struct { + indexer cache.Indexer +} + +// NewPlantLister returns a new PlantLister. +func NewPlantLister(indexer cache.Indexer) PlantLister { + return &plantLister{indexer: indexer} +} + +// List lists all Plants in the indexer. +func (s *plantLister) List(selector labels.Selector) (ret []*v1beta1.Plant, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Plant)) + }) + return ret, err +} + +// Plants returns an object that can list and get Plants. +func (s *plantLister) Plants(namespace string) PlantNamespaceLister { + return plantNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// PlantNamespaceLister helps list and get Plants. +// All objects returned here must be treated as read-only. +type PlantNamespaceLister interface { + // List lists all Plants in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.Plant, err error) + // Get retrieves the Plant from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.Plant, error) + PlantNamespaceListerExpansion +} + +// plantNamespaceLister implements the PlantNamespaceLister +// interface. +type plantNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all Plants in the indexer for a given namespace. +func (s plantNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.Plant, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Plant)) + }) + return ret, err +} + +// Get retrieves the Plant from the indexer for a given namespace and name. +func (s plantNamespaceLister) Get(name string) (*v1beta1.Plant, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("plant"), name) + } + return obj.(*v1beta1.Plant), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/project.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/project.go new file mode 100644 index 00000000..df4c2f3c --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/project.go @@ -0,0 +1,68 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ProjectLister helps list Projects. +// All objects returned here must be treated as read-only. +type ProjectLister interface { + // List lists all Projects in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.Project, err error) + // Get retrieves the Project from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.Project, error) + ProjectListerExpansion +} + +// projectLister implements the ProjectLister interface. +type projectLister struct { + indexer cache.Indexer +} + +// NewProjectLister returns a new ProjectLister. +func NewProjectLister(indexer cache.Indexer) ProjectLister { + return &projectLister{indexer: indexer} +} + +// List lists all Projects in the indexer. +func (s *projectLister) List(selector labels.Selector) (ret []*v1beta1.Project, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Project)) + }) + return ret, err +} + +// Get retrieves the Project from the index for a given name. +func (s *projectLister) Get(name string) (*v1beta1.Project, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("project"), name) + } + return obj.(*v1beta1.Project), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/quota.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/quota.go new file mode 100644 index 00000000..14590528 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/quota.go @@ -0,0 +1,99 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// QuotaLister helps list Quotas. +// All objects returned here must be treated as read-only. +type QuotaLister interface { + // List lists all Quotas in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.Quota, err error) + // Quotas returns an object that can list and get Quotas. + Quotas(namespace string) QuotaNamespaceLister + QuotaListerExpansion +} + +// quotaLister implements the QuotaLister interface. +type quotaLister struct { + indexer cache.Indexer +} + +// NewQuotaLister returns a new QuotaLister. +func NewQuotaLister(indexer cache.Indexer) QuotaLister { + return "aLister{indexer: indexer} +} + +// List lists all Quotas in the indexer. +func (s *quotaLister) List(selector labels.Selector) (ret []*v1beta1.Quota, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Quota)) + }) + return ret, err +} + +// Quotas returns an object that can list and get Quotas. +func (s *quotaLister) Quotas(namespace string) QuotaNamespaceLister { + return quotaNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// QuotaNamespaceLister helps list and get Quotas. +// All objects returned here must be treated as read-only. +type QuotaNamespaceLister interface { + // List lists all Quotas in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.Quota, err error) + // Get retrieves the Quota from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.Quota, error) + QuotaNamespaceListerExpansion +} + +// quotaNamespaceLister implements the QuotaNamespaceLister +// interface. +type quotaNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all Quotas in the indexer for a given namespace. +func (s quotaNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.Quota, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Quota)) + }) + return ret, err +} + +// Get retrieves the Quota from the indexer for a given namespace and name. +func (s quotaNamespaceLister) Get(name string) (*v1beta1.Quota, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("quota"), name) + } + return obj.(*v1beta1.Quota), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/secretbinding.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/secretbinding.go new file mode 100644 index 00000000..d9c19222 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/secretbinding.go @@ -0,0 +1,99 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// SecretBindingLister helps list SecretBindings. +// All objects returned here must be treated as read-only. +type SecretBindingLister interface { + // List lists all SecretBindings in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.SecretBinding, err error) + // SecretBindings returns an object that can list and get SecretBindings. + SecretBindings(namespace string) SecretBindingNamespaceLister + SecretBindingListerExpansion +} + +// secretBindingLister implements the SecretBindingLister interface. +type secretBindingLister struct { + indexer cache.Indexer +} + +// NewSecretBindingLister returns a new SecretBindingLister. +func NewSecretBindingLister(indexer cache.Indexer) SecretBindingLister { + return &secretBindingLister{indexer: indexer} +} + +// List lists all SecretBindings in the indexer. +func (s *secretBindingLister) List(selector labels.Selector) (ret []*v1beta1.SecretBinding, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.SecretBinding)) + }) + return ret, err +} + +// SecretBindings returns an object that can list and get SecretBindings. +func (s *secretBindingLister) SecretBindings(namespace string) SecretBindingNamespaceLister { + return secretBindingNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// SecretBindingNamespaceLister helps list and get SecretBindings. +// All objects returned here must be treated as read-only. +type SecretBindingNamespaceLister interface { + // List lists all SecretBindings in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.SecretBinding, err error) + // Get retrieves the SecretBinding from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.SecretBinding, error) + SecretBindingNamespaceListerExpansion +} + +// secretBindingNamespaceLister implements the SecretBindingNamespaceLister +// interface. +type secretBindingNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all SecretBindings in the indexer for a given namespace. +func (s secretBindingNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.SecretBinding, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.SecretBinding)) + }) + return ret, err +} + +// Get retrieves the SecretBinding from the indexer for a given namespace and name. +func (s secretBindingNamespaceLister) Get(name string) (*v1beta1.SecretBinding, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("secretbinding"), name) + } + return obj.(*v1beta1.SecretBinding), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/seed.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/seed.go new file mode 100644 index 00000000..a0108360 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/seed.go @@ -0,0 +1,68 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// SeedLister helps list Seeds. +// All objects returned here must be treated as read-only. +type SeedLister interface { + // List lists all Seeds in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.Seed, err error) + // Get retrieves the Seed from the index for a given name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.Seed, error) + SeedListerExpansion +} + +// seedLister implements the SeedLister interface. +type seedLister struct { + indexer cache.Indexer +} + +// NewSeedLister returns a new SeedLister. +func NewSeedLister(indexer cache.Indexer) SeedLister { + return &seedLister{indexer: indexer} +} + +// List lists all Seeds in the indexer. +func (s *seedLister) List(selector labels.Selector) (ret []*v1beta1.Seed, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Seed)) + }) + return ret, err +} + +// Get retrieves the Seed from the index for a given name. +func (s *seedLister) Get(name string) (*v1beta1.Seed, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("seed"), name) + } + return obj.(*v1beta1.Seed), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/shoot.go b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/shoot.go new file mode 100644 index 00000000..9d42c6dc --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1/shoot.go @@ -0,0 +1,99 @@ +/* +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. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1beta1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// ShootLister helps list Shoots. +// All objects returned here must be treated as read-only. +type ShootLister interface { + // List lists all Shoots in the indexer. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.Shoot, err error) + // Shoots returns an object that can list and get Shoots. + Shoots(namespace string) ShootNamespaceLister + ShootListerExpansion +} + +// shootLister implements the ShootLister interface. +type shootLister struct { + indexer cache.Indexer +} + +// NewShootLister returns a new ShootLister. +func NewShootLister(indexer cache.Indexer) ShootLister { + return &shootLister{indexer: indexer} +} + +// List lists all Shoots in the indexer. +func (s *shootLister) List(selector labels.Selector) (ret []*v1beta1.Shoot, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Shoot)) + }) + return ret, err +} + +// Shoots returns an object that can list and get Shoots. +func (s *shootLister) Shoots(namespace string) ShootNamespaceLister { + return shootNamespaceLister{indexer: s.indexer, namespace: namespace} +} + +// ShootNamespaceLister helps list and get Shoots. +// All objects returned here must be treated as read-only. +type ShootNamespaceLister interface { + // List lists all Shoots in the indexer for a given namespace. + // Objects returned here must be treated as read-only. + List(selector labels.Selector) (ret []*v1beta1.Shoot, err error) + // Get retrieves the Shoot from the indexer for a given namespace and name. + // Objects returned here must be treated as read-only. + Get(name string) (*v1beta1.Shoot, error) + ShootNamespaceListerExpansion +} + +// shootNamespaceLister implements the ShootNamespaceLister +// interface. +type shootNamespaceLister struct { + indexer cache.Indexer + namespace string +} + +// List lists all Shoots in the indexer for a given namespace. +func (s shootNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.Shoot, err error) { + err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { + ret = append(ret, m.(*v1beta1.Shoot)) + }) + return ret, err +} + +// Get retrieves the Shoot from the indexer for a given namespace and name. +func (s shootNamespaceLister) Get(name string) (*v1beta1.Shoot, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1beta1.Resource("shoot"), name) + } + return obj.(*v1beta1.Shoot), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/client/extensions/clientset/versioned/scheme/doc.go b/vendor/github.com/gardener/gardener/pkg/client/extensions/clientset/versioned/scheme/doc.go index 6793d628..7d4fb776 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/extensions/clientset/versioned/scheme/doc.go +++ b/vendor/github.com/gardener/gardener/pkg/client/extensions/clientset/versioned/scheme/doc.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/extensions/clientset/versioned/scheme/register.go b/vendor/github.com/gardener/gardener/pkg/client/extensions/clientset/versioned/scheme/register.go index a7365b5e..22a1acec 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/extensions/clientset/versioned/scheme/register.go +++ b/vendor/github.com/gardener/gardener/pkg/client/extensions/clientset/versioned/scheme/register.go @@ -1,5 +1,5 @@ /* -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 +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. diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/applier.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/applier.go index 0df139e6..1718e854 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/applier.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/applier.go @@ -85,11 +85,7 @@ func (a *defaultApplier) applyObject(ctx context.Context, desired *unstructured. } } - key, err := client.ObjectKeyFromObject(desired) - if err != nil { - return err - } - + key := client.ObjectKeyFromObject(desired) if len(key.Name) == 0 { return fmt.Errorf("missing 'metadata.name' in: %+v", desired) } 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 39424026..55e60fb0 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go @@ -20,7 +20,6 @@ import ( "fmt" gardencoreclientset "github.com/gardener/gardener/pkg/client/core/clientset/versioned" - "github.com/gardener/gardener/pkg/client/kubernetes/utils" versionutils "github.com/gardener/gardener/pkg/utils/version" corev1 "k8s.io/api/core/v1" @@ -212,6 +211,7 @@ var supportedKubernetesVersions = []string{ "1.17", "1.18", "1.19", + "1.20", } func checkIfSupportedKubernetesVersion(gitVersion string) error { @@ -261,17 +261,10 @@ func newClientSet(conf *Config) (Interface, error) { } var runtimeClient client.Client - if UseCachedRuntimeClients && !conf.disableCachedClient { - if cacheOpts := conf.cacheReaderOptions; cacheOpts != nil { - runtimeClient, err = utils.NewClientWithSpecificallyCachedReader(runtimeCache, conf.restConfig, conf.clientOptions, cacheOpts.readSpecifiedFromCache, cacheOpts.specificallyCachedObjects...) - if err != nil { - return nil, err - } - } else { - runtimeClient, err = newRuntimeClientWithCache(conf.restConfig, conf.clientOptions, runtimeCache) - if err != nil { - return nil, err - } + if UseCachedRuntimeClients && !conf.disableCache { + runtimeClient, err = newRuntimeClientWithCache(conf.restConfig, conf.clientOptions, runtimeCache, conf.uncachedObjects...) + if err != nil { + return nil, err } } else { runtimeClient = directClient diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientset.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientset.go index b601962f..7ab0857f 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientset.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/clientset.go @@ -15,6 +15,7 @@ package kubernetes import ( + "context" "sync" "github.com/gardener/gardener/pkg/chartrenderer" @@ -159,10 +160,10 @@ func (c *clientSet) DiscoverVersion() (*version.Info, error) { // Start starts the cache of the ClientSet's controller-runtime client and returns immediately. // It must be called first before using the client to retrieve objects from the API server. -func (c *clientSet) Start(stopCh <-chan struct{}) { +func (c *clientSet) Start(ctx context.Context) { c.startOnce.Do(func() { go func() { - if err := c.cache.Start(stopCh); err != nil { + if err := c.cache.Start(ctx); err != nil { logger.Logger.Errorf("cache.Start returned error, which should never happen, ignoring.") } }() @@ -170,6 +171,6 @@ func (c *clientSet) Start(stopCh <-chan struct{}) { } // WaitForCacheSync waits for the cache of the ClientSet's controller-runtime client to be synced. -func (c *clientSet) WaitForCacheSync(stopCh <-chan struct{}) bool { - return c.cache.WaitForCacheSync(stopCh) +func (c *clientSet) WaitForCacheSync(ctx context.Context) bool { + return c.cache.WaitForCacheSync(ctx) } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/options.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/options.go index 429fea88..842aacb3 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/options.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/options.go @@ -18,7 +18,6 @@ import ( "errors" "time" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/rest" baseconfig "k8s.io/component-base/config" "sigs.k8s.io/controller-runtime/pkg/client" @@ -26,17 +25,11 @@ import ( // Config carries options for new ClientSets. type Config struct { - clientOptions client.Options - restConfig *rest.Config - cacheResync *time.Duration - disableCachedClient bool - cacheReaderOptions *cacheReaderOptions -} - -// cacheReaderOptions configures the specificallyCachedReader -type cacheReaderOptions struct { - readSpecifiedFromCache bool - specificallyCachedObjects []runtime.Object + clientOptions client.Options + restConfig *rest.Config + cacheResync *time.Duration + disableCache bool + uncachedObjects []client.Object } // NewConfig returns a new Config with an empty REST config to allow testing ConfigFuncs without exporting @@ -94,29 +87,15 @@ func WithCacheResyncPeriod(resync time.Duration) ConfigFunc { // DirectClient(). func WithDisabledCachedClient() ConfigFunc { return func(config *Config) error { - config.disableCachedClient = true + config.disableCache = true return nil } } -// WithDisabledCacheFor disables the cached client for the specified objects' GroupKinds. -func WithDisabledCacheFor(objects ...runtime.Object) ConfigFunc { +// WithUncached disables the cached client for the specified objects' GroupKinds. +func WithUncached(objs ...client.Object) ConfigFunc { return func(config *Config) error { - config.cacheReaderOptions = &cacheReaderOptions{ - readSpecifiedFromCache: false, - specificallyCachedObjects: objects, - } - return nil - } -} - -// WithEnabledCacheFor enables the cached client only for the specified objects' GroupKinds. -func WithEnabledCacheFor(objects ...runtime.Object) ConfigFunc { - return func(config *Config) error { - config.cacheReaderOptions = &cacheReaderOptions{ - readSpecifiedFromCache: true, - specificallyCachedObjects: objects, - } + config.uncachedObjects = append(config.uncachedObjects, objs...) return nil } } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/runtime_client.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/runtime_client.go index 834816b1..e83e41c1 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/runtime_client.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/runtime_client.go @@ -19,7 +19,10 @@ import ( "fmt" "time" + "sigs.k8s.io/controller-runtime/pkg/manager" + "github.com/gardener/gardener/pkg/logger" + "github.com/gardener/gardener/pkg/mock/go/context" "github.com/sirupsen/logrus" "golang.org/x/time/rate" @@ -45,8 +48,8 @@ func NewDirectClient(config *rest.Config, options client.Options) (client.Client } // NewRuntimeClientWithCache creates a new client.client with the given config and options. -// The client uses a new cache, which will be started immediately using the given stop channel. -func NewRuntimeClientWithCache(config *rest.Config, options client.Options, stopCh <-chan struct{}) (client.Client, error) { +// The client uses a new cache, which will be started immediately using the given context. +func NewRuntimeClientWithCache(ctx context.Context, config *rest.Config, options client.Options, uncachedObjects ...client.Object) (client.Client, error) { if err := setClientOptionsDefaults(config, &options); err != nil { return nil, err } @@ -59,36 +62,24 @@ func NewRuntimeClientWithCache(config *rest.Config, options client.Options, stop return nil, fmt.Errorf("could not create new client cache: %w", err) } - runtimeClient, err := newRuntimeClientWithCache(config, options, clientCache) + runtimeClient, err := newRuntimeClientWithCache(config, options, clientCache, uncachedObjects...) if err != nil { return nil, err } go func() { - if err := clientCache.Start(stopCh); err != nil { + if err := clientCache.Start(ctx); err != nil { logger.NewLogger(fmt.Sprint(logrus.ErrorLevel)).Errorf("cache.Start returned error, which should never happen, ignoring.") } }() - clientCache.WaitForCacheSync(stopCh) + clientCache.WaitForCacheSync(ctx) return runtimeClient, nil } -func newRuntimeClientWithCache(config *rest.Config, options client.Options, cache cache.Cache) (client.Client, error) { - c, err := client.New(config, options) - if err != nil { - return nil, err - } - - return &client.DelegatingClient{ - Reader: &client.DelegatingReader{ - CacheReader: cache, - ClientReader: c, - }, - Writer: c, - StatusClient: c, - }, nil +func newRuntimeClientWithCache(config *rest.Config, options client.Options, cache cache.Cache, uncachedObjects ...client.Object) (client.Client, error) { + return manager.NewClientBuilder().WithUncached(uncachedObjects...).Build(cache, config, options) } func setClientOptionsDefaults(config *rest.Config, options *client.Options) error { diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/scaling.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/scaling.go index 19af00a3..fa13c905 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/scaling.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/scaling.go @@ -22,7 +22,6 @@ import ( appsv1 "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -64,7 +63,7 @@ func ScaleDeployment(ctx context.Context, c client.Client, key client.ObjectKey, } // scaleResource scales resource's 'spec.replicas' to replicas count -func scaleResource(ctx context.Context, c client.Client, obj runtime.Object, replicas int32) error { +func scaleResource(ctx context.Context, c client.Client, obj client.Object, replicas int32) error { patch := []byte(fmt.Sprintf(`{"spec":{"replicas":%d}}`, replicas)) // TODO: replace this with call to scale subresource once controller-runtime supports it diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go index 596994ac..7da1186a 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go @@ -173,7 +173,7 @@ type Interface interface { // Start starts the cache of the ClientSet's controller-runtime client and returns immediately. // It must be called first before using the client to retrieve objects from the API server. - Start(stopCh <-chan struct{}) + Start(ctx context.Context) // WaitForCacheSync waits for the cache of the ClientSet's controller-runtime client to be synced. - WaitForCacheSync(stopCh <-chan struct{}) bool + WaitForCacheSync(ctx context.Context) bool } diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/utils/client.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/utils/client.go deleted file mode 100644 index 400ff5d4..00000000 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/utils/client.go +++ /dev/null @@ -1,186 +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 utils - -import ( - "context" - "strings" - - "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - kubernetesscheme "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/rest" - "sigs.k8s.io/controller-runtime/pkg/cache" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/client/apiutil" - "sigs.k8s.io/controller-runtime/pkg/manager" -) - -// NewClientFuncWithSpecificallyCachedReader returns a manager.NewClientFunc that creates a new client.Client that either -// - reads directly from the API server by default but reads the specified objects from the cache (readSpecifiedFromCache=true) -// - or reads from the cache by default but reads the specified objects directly from the API server (readSpecifiedFromCache=true). -func NewClientFuncWithSpecificallyCachedReader(readSpecifiedFromCache bool, specifiedObjects ...runtime.Object) manager.NewClientFunc { - return func(cache cache.Cache, config *rest.Config, options client.Options) (client.Client, error) { - return NewClientWithSpecificallyCachedReader(cache, config, options, readSpecifiedFromCache, specifiedObjects...) - } -} - -// NewClientFuncWithDisabledCacheFor returns a manager.NewClientFunc that creates a new client.Client that reads from -// the cache by default but reads the specified objects directly from the API server. -func NewClientFuncWithDisabledCacheFor(directlyReadingObjects ...runtime.Object) manager.NewClientFunc { - return NewClientFuncWithSpecificallyCachedReader(false, directlyReadingObjects...) -} - -// NewClientFuncWithEnabledCacheFor returns a manager.NewClientFunc that creates a new client.Client that reads directly -// from the API server by default but reads the specified objects from the cache. -func NewClientFuncWithEnabledCacheFor(cachedObjects ...runtime.Object) manager.NewClientFunc { - return NewClientFuncWithSpecificallyCachedReader(true, cachedObjects...) -} - -// NewClientWithSpecificallyCachedReader creates a new client.Client that either -// - reads directly from the API server by default but reads the specified objects from the cache (readSpecifiedFromCache=true) -// - or reads from the cache by default but reads the specified objects directly from the API server (readSpecifiedFromCache=false). -func NewClientWithSpecificallyCachedReader(cache cache.Cache, config *rest.Config, options client.Options, readSpecifiedFromCache bool, specifiedObjects ...runtime.Object) (client.Client, error) { - // create the default Client - c, err := client.New(config, options) - if err != nil { - return nil, err - } - - // create cache Reader that decides which objects to read from the cache and which to read directly from the API server - cacheReader, err := NewSpecificallyCachedReaderFor( - cache, - c, - options.Scheme, - readSpecifiedFromCache, - specifiedObjects..., - ) - if err != nil { - return nil, err - } - - return &client.DelegatingClient{ - Reader: &client.DelegatingReader{ - CacheReader: cacheReader, - ClientReader: c, - }, - Writer: c, - StatusClient: c, - }, nil -} - -// NewSpecificallyCachedReaderFor creates a new client.Reader that either -// - reads directly from the API server by default but reads the specified objects from the cache (readSpecifiedFromCache=true) -// - or reads from the cache by default but reads the specified objects directly from the API server (readSpecifiedFromCache=false). -func NewSpecificallyCachedReaderFor(cacheReader, clientReader client.Reader, scheme *runtime.Scheme, readSpecifiedFromCache bool, objectKinds ...runtime.Object) (client.Reader, error) { - if scheme == nil { - scheme = kubernetesscheme.Scheme - } - - delegatingRule, err := newDelegationRule(scheme, readSpecifiedFromCache, objectKinds...) - if err != nil { - return nil, err - } - - return &specificallyCachedReader{ - shouldReadObjectFromCache: delegatingRule, - cacheReader: cacheReader, - clientReader: clientReader, - }, nil -} - -// NewReaderWithDisabledCacheFor creates a new client.Reader that reads from the cache by default but reads the -// specified objects directly from the API server. -func NewReaderWithDisabledCacheFor(cacheReader, clientReader client.Reader, scheme *runtime.Scheme, directlyReadingObjects ...runtime.Object) (client.Reader, error) { - return NewSpecificallyCachedReaderFor(cacheReader, clientReader, scheme, false, directlyReadingObjects...) -} - -// NewReaderWithEnabledCacheFor creates a new client.Reader that reads directly from the API server by default but reads -// the specified objects from the cache. -func NewReaderWithEnabledCacheFor(cacheReader, clientReader client.Reader, scheme *runtime.Scheme, cachedObjects ...runtime.Object) (client.Reader, error) { - return NewSpecificallyCachedReaderFor(cacheReader, clientReader, scheme, true, cachedObjects...) -} - -// specificallyCachedReader implements client.Reader and delegates calls to the cache or direct client according to the -// given delegationRule. -type specificallyCachedReader struct { - shouldReadObjectFromCache delegationRule - - cacheReader client.Reader - clientReader client.Reader -} - -// delegationRule is a function that decides whether a given object should be read from the cache or directly from the -// API server. -type delegationRule func(obj runtime.Object) (readFromCache bool, err error) - -// newDelegationRule returns a delegationRule, that will either -// - only allow to read the specified object kinds from the cache (readSpecifiedFromCache=true) -// - or only read the specified object kinds directly from the API server (readSpecifiedFromCache=false) -func newDelegationRule(scheme *runtime.Scheme, readSpecifiedFromCache bool, objs ...runtime.Object) (delegationRule, error) { - specifiedGKs := make(map[schema.GroupKind]struct{}) - - for _, obj := range objs { - gvk, err := apiutil.GVKForObject(obj, scheme) - if err != nil { - return nil, err - } - specifiedGKs[gvk.GroupKind()] = struct{}{} - } - - return func(obj runtime.Object) (readFromCache bool, err error) { - gvk, err := apiutil.GVKForObject(obj, scheme) - if err != nil { - return false, err - } - - if strings.HasSuffix(gvk.Kind, "List") && meta.IsListType(obj) { - // if this is a list, treat it as a request for the item's resource - gvk.Kind = strings.TrimSuffix(gvk.Kind, "List") - } - - _, ok := specifiedGKs[gvk.GroupKind()] - // read from cache if GroupKind was specified and readSpecifiedFromCache=true - // or GroupKind was not specified and readSpecifiedFromCache=false - return ok == readSpecifiedFromCache, nil - }, nil -} - -// Get implements client.Reader by delegating calls either to the cache or the direct client based on the decision of -// the delegationRule. -func (s *specificallyCachedReader) Get(ctx context.Context, key client.ObjectKey, obj runtime.Object) error { - useCache, err := s.shouldReadObjectFromCache(obj) - if err != nil { - return err - } - if useCache { - return s.cacheReader.Get(ctx, key, obj) - } - return s.clientReader.Get(ctx, key, obj) -} - -// List implements client.Reader by delegating calls either to the cache or the direct client based on the decision of -// the delegationRule. -func (s *specificallyCachedReader) List(ctx context.Context, list runtime.Object, opts ...client.ListOption) error { - useCache, err := s.shouldReadObjectFromCache(list) - if err != nil { - return err - } - if useCache { - return s.cacheReader.List(ctx, list, opts...) - } - return s.clientReader.List(ctx, list, opts...) -} diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/associations.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/associations.go new file mode 100644 index 00000000..29cadc60 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/associations.go @@ -0,0 +1,163 @@ +// 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 controllerutils + +import ( + "context" + "fmt" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + gardencorelisters "github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1" + "github.com/gardener/gardener/pkg/logger" + + "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// DetermineShootsAssociatedTo gets a to determine the Shoots resources which are associated +// to given (either a CloudProfile a or a Seed object). +func DetermineShootsAssociatedTo(obj interface{}, shootLister gardencorelisters.ShootLister) ([]string, error) { + var associatedShoots []string + shoots, err := shootLister.List(labels.Everything()) + if err != nil { + logger.Logger.Info(err.Error()) + return nil, err + } + + for _, shoot := range shoots { + switch t := obj.(type) { + case *gardencorev1beta1.CloudProfile: + cloudProfile := obj.(*gardencorev1beta1.CloudProfile) + if shoot.Spec.CloudProfileName == cloudProfile.Name { + associatedShoots = append(associatedShoots, fmt.Sprintf("%s/%s", shoot.Namespace, shoot.Name)) + } + case *gardencorev1beta1.Seed: + seed := obj.(*gardencorev1beta1.Seed) + if shoot.Spec.SeedName != nil && *shoot.Spec.SeedName == seed.Name { + associatedShoots = append(associatedShoots, fmt.Sprintf("%s/%s", shoot.Namespace, shoot.Name)) + } + case *gardencorev1beta1.SecretBinding: + binding := obj.(*gardencorev1beta1.SecretBinding) + if shoot.Spec.SecretBindingName == binding.Name && shoot.Namespace == binding.Namespace { + associatedShoots = append(associatedShoots, fmt.Sprintf("%s/%s", shoot.Namespace, shoot.Name)) + } + default: + return nil, fmt.Errorf("unable to determine Shoot associations, due to unknown type %t", t) + } + } + return associatedShoots, nil +} + +// DetermineSecretBindingAssociations gets a to determine the SecretBinding +// resources which are associated to given Quota . +func DetermineSecretBindingAssociations(quota *gardencorev1beta1.Quota, bindingLister gardencorelisters.SecretBindingLister) ([]string, error) { + var associatedBindings []string + bindings, err := bindingLister.List(labels.Everything()) + if err != nil { + return nil, err + } + + for _, binding := range bindings { + for _, quotaRef := range binding.Quotas { + if quotaRef.Name == quota.Name && quotaRef.Namespace == quota.Namespace { + associatedBindings = append(associatedBindings, fmt.Sprintf("%s/%s", binding.Namespace, binding.Name)) + } + } + } + return associatedBindings, nil +} + +// DetermineBackupBucketAssociations determine the BackupBucket resources which are associated +// to seed with name +func DetermineBackupBucketAssociations(ctx context.Context, c client.Client, seedName string) ([]string, error) { + return determineAssociations(ctx, c, seedName, &gardencorev1beta1.BackupBucketList{}, func(o runtime.Object) (string, error) { + backupBucket, ok := o.(*gardencorev1beta1.BackupBucket) + if !ok { + return "", fmt.Errorf("got unexpected object when expecting BackupBucket") + } + if backupBucket.Spec.SeedName == nil { + return "", nil + } + return *backupBucket.Spec.SeedName, nil + }) +} + +// DetermineBackupEntryAssociations determine the BackupEntry resources which are associated +// to seed with name +func DetermineBackupEntryAssociations(ctx context.Context, c client.Client, seedName string) ([]string, error) { + return determineAssociations(ctx, c, seedName, &gardencorev1beta1.BackupEntryList{}, func(o runtime.Object) (string, error) { + backupEntry, ok := o.(*gardencorev1beta1.BackupEntry) + if !ok { + return "", fmt.Errorf("got unexpected object when expecting BackupEntry") + } + if backupEntry.Spec.SeedName == nil { + return "", nil + } + return *backupEntry.Spec.SeedName, nil + }) +} + +// DetermineControllerInstallationAssociations determine the ControllerInstallation resources which are associated +// to seed with name +func DetermineControllerInstallationAssociations(ctx context.Context, c client.Client, seedName string) ([]string, error) { + return determineAssociations(ctx, c, seedName, &gardencorev1beta1.ControllerInstallationList{}, func(o runtime.Object) (string, error) { + controllerInstallation, ok := o.(*gardencorev1beta1.ControllerInstallation) + if !ok { + return "", fmt.Errorf("got unexpected object when expecting ControllerInstallation") + } + return controllerInstallation.Spec.SeedRef.Name, nil + }) +} + +// DetermineShootAssociations determine the Shoot resources which are associated +// to seed with name +func DetermineShootAssociations(ctx context.Context, c client.Client, seedName string) ([]string, error) { + return determineAssociations(ctx, c, seedName, &gardencorev1beta1.ShootList{}, func(o runtime.Object) (string, error) { + shoot, ok := o.(*gardencorev1beta1.Shoot) + if !ok { + return "", fmt.Errorf("got unexpected object when expecting Shoot") + } + if shoot.Spec.SeedName == nil { + return "", nil + } + return *shoot.Spec.SeedName, nil + }) +} + +func determineAssociations(ctx context.Context, c client.Client, seedName string, listObj client.ObjectList, seedNameFunc func(runtime.Object) (string, error)) ([]string, error) { + if err := c.List(ctx, listObj); err != nil { + return nil, err + } + + var associations []string + err := meta.EachListItem(listObj, func(obj runtime.Object) error { + name, err := seedNameFunc(obj) + if err != nil { + return err + } + + if name == seedName { + accessor, err := meta.Accessor(obj) + if err != nil { + return err + } + associations = append(associations, accessor.GetName()) + } + return nil + }) + return associations, err +} diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/finalizers.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/finalizers.go new file mode 100644 index 00000000..8ef72535 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/finalizers.go @@ -0,0 +1,101 @@ +// 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 controllerutils + +import ( + "context" + "fmt" + "time" + + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/util/retry" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// PatchFinalizers adds the given finalizers to the object via a patch request. +func PatchFinalizers(ctx context.Context, c client.Client, obj client.Object, finalizers ...string) error { + beforePatch := obj.DeepCopyObject() + + for _, finalizer := range finalizers { + controllerutil.AddFinalizer(obj, finalizer) + } + + return c.Patch(ctx, obj, client.MergeFromWithOptions(beforePatch, client.MergeFromWithOptimisticLock{})) +} + +// PatchRemoveFinalizers removes the given finalizers from the object via a patch request. +func PatchRemoveFinalizers(ctx context.Context, c client.Client, obj client.Object, finalizers ...string) error { + beforePatch := obj.DeepCopyObject() + + for _, finalizer := range finalizers { + controllerutil.RemoveFinalizer(obj, finalizer) + } + + return c.Patch(ctx, obj, client.MergeFromWithOptions(beforePatch, client.MergeFromWithOptimisticLock{})) +} + +// EnsureFinalizer ensure the is present for the object. +func EnsureFinalizer(ctx context.Context, c client.Client, obj client.Object, finalizer string) error { + if err := kutil.TryUpdate(ctx, retry.DefaultBackoff, c, obj, func() error { + controllerutil.AddFinalizer(obj, finalizer) + return nil + }); err != nil { + return fmt.Errorf("could not ensure %q finalizer: %+v", finalizer, err) + } + return nil +} + +// RemoveGardenerFinalizer removes the gardener finalizer from the object. +func RemoveGardenerFinalizer(ctx context.Context, c client.Client, obj client.Object) error { + return RemoveFinalizer(ctx, c, obj, gardencorev1beta1.GardenerName) +} + +// RemoveFinalizer removes the from the object. +func RemoveFinalizer(ctx context.Context, c client.Client, obj client.Object, finalizer string) error { + if err := kutil.TryUpdate(ctx, retry.DefaultBackoff, c, obj, func() error { + controllerutil.RemoveFinalizer(obj, finalizer) + return nil + }); client.IgnoreNotFound(err) != nil { + return fmt.Errorf("could not remove %q finalizer: %+v", finalizer, err) + } + + // Wait until the above modifications are reflected in the cache to prevent unwanted reconcile + // operations (sometimes the cache is not synced fast enough). + pollerCtx, cancel := context.WithTimeout(ctx, 30*time.Second) + defer cancel() + return wait.PollImmediateUntil(time.Second, func() (bool, error) { + err := c.Get(ctx, client.ObjectKeyFromObject(obj), obj) + if apierrors.IsNotFound(err) { + return true, nil + } + if err != nil { + return false, err + } + if !controllerutil.ContainsFinalizer(obj, finalizer) { + return true, nil + } + return false, nil + }, pollerCtx.Done()) +} + +// HasFinalizer checks whether the given obj has the given finalizer. +// Deprecated: use controllerutil.ContainsFinalizer instead +var HasFinalizer = controllerutil.ContainsFinalizer diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/miscellaneous.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/miscellaneous.go new file mode 100644 index 00000000..486bcc07 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/miscellaneous.go @@ -0,0 +1,122 @@ +// 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 controllerutils + +import ( + "strings" + "time" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "github.com/gardener/gardener/pkg/operation/common" + "github.com/gardener/gardener/pkg/utils" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +const separator = "," + +// GetTasks returns the list of tasks in the ShootTasks annotation. +func GetTasks(annotations map[string]string) []string { + var tasks []string + if val := annotations[common.ShootTasks]; len(val) > 0 { + tasks = strings.Split(val, separator) + } + return tasks +} + +// HasTask checks if the passed task is part of the ShootTasks annotation. +func HasTask(annotations map[string]string, task string) bool { + tasks := GetTasks(annotations) + if len(tasks) == 0 { + return false + } + return utils.ValueExists(task, tasks) +} + +// AddTasks adds tasks to the ShootTasks annotation of the passed map. +func AddTasks(annotations map[string]string, tasksToAdd ...string) { + tasks := GetTasks(annotations) + + for _, taskToAdd := range tasksToAdd { + if !utils.ValueExists(taskToAdd, tasks) { + tasks = append(tasks, taskToAdd) + } + } + + setTaskAnnotations(annotations, tasks) +} + +// RemoveTasks removes tasks from the ShootTasks annotation of the passed map. +func RemoveTasks(annotations map[string]string, tasksToRemove ...string) { + tasks := GetTasks(annotations) + + for i := len(tasks) - 1; i >= 0; i-- { + if utils.ValueExists(tasks[i], tasksToRemove) { + tasks = append((tasks)[:i], (tasks)[i+1:]...) + } + } + + setTaskAnnotations(annotations, tasks) +} + +// RemoveAllTasks removes the ShootTasks annotation from the passed map. +func RemoveAllTasks(annotations map[string]string) { + delete(annotations, common.ShootTasks) +} + +func setTaskAnnotations(annotations map[string]string, tasks []string) { + if len(tasks) == 0 { + RemoveAllTasks(annotations) + return + } + + annotations[common.ShootTasks] = strings.Join(tasks, separator) +} + +var ( + // Now is a function for returning the current time. + Now = time.Now + // RandomDuration is a function for returning a random duration. + RandomDuration = utils.RandomDuration +) + +// ReconcileOncePer24hDuration returns the duration until the next reconciliation should happen while respecting that +// only one reconciliation should happen per 24h. If the deletion timestamp is set or the generation has changed or the +// last operation does not indicate success or indicates that the last reconciliation happened more than 24h ago then 0 +// will be returned. +func ReconcileOncePer24hDuration(objectMeta metav1.ObjectMeta, observedGeneration int64, lastOperation *gardencorev1beta1.LastOperation) time.Duration { + if objectMeta.DeletionTimestamp != nil { + return 0 + } + + if objectMeta.Generation != observedGeneration { + return 0 + } + + if lastOperation == nil || + lastOperation.State != gardencorev1beta1.LastOperationStateSucceeded || + (lastOperation.Type != gardencorev1beta1.LastOperationTypeCreate && lastOperation.Type != gardencorev1beta1.LastOperationTypeReconcile) { + return 0 + } + + // If last reconciliation happened more than 24h ago then we want to reconcile immediately, so let's only compute + // a delay if the last reconciliation was within the last 24h. + if lastReconciliation := lastOperation.LastUpdateTime.Time; Now().UTC().Before(lastReconciliation.UTC().Add(24 * time.Hour)) { + durationUntilLastReconciliationWas24hAgo := lastReconciliation.UTC().Add(24 * time.Hour).Sub(Now().UTC()) + return RandomDuration(durationUntilLastReconciliationWas24hAgo) + } + + return 0 +} diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/operations.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/operations.go new file mode 100644 index 00000000..941b0fb6 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/operations.go @@ -0,0 +1,33 @@ +// 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 controllerutils + +import ( + "context" + + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + + "k8s.io/apimachinery/pkg/util/wait" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// RemoveGardenerOperationAnnotation removes a gardener operation annotation and retries the operation with the given . +func RemoveGardenerOperationAnnotation(ctx context.Context, backoff wait.Backoff, cli client.Client, obj client.Object) error { + return kutil.TryUpdate(ctx, backoff, cli, obj, func() error { + delete(obj.GetAnnotations(), v1beta1constants.GardenerOperation) + return nil + }) +} diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/pointers.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/pointers.go new file mode 100644 index 00000000..ed643a4e --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/pointers.go @@ -0,0 +1,23 @@ +// 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 controllerutils + +// BoolPtrDerefOr dereferences the given bool if it's non-nil. Otherwise, returns the default. +func BoolPtrDerefOr(b *bool, defaultValue bool) bool { + if b == nil { + return defaultValue + } + return *b +} diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/seedfilter.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/seedfilter.go new file mode 100644 index 00000000..751611ee --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/seedfilter.go @@ -0,0 +1,154 @@ +// 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 controllerutils + +import ( + "context" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + gardencorelisters "github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1" + "github.com/gardener/gardener/pkg/gardenlet/apis/config" + confighelper "github.com/gardener/gardener/pkg/gardenlet/apis/config/helper" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// LabelsMatchFor checks whether the given label selector matches for the given set of labels. +func LabelsMatchFor(l map[string]string, labelSelector *metav1.LabelSelector) bool { + selector, err := metav1.LabelSelectorAsSelector(labelSelector) + if err != nil { + return false + } + return selector.Matches(labels.Set(l)) +} + +// SeedFilterFunc returns a filtering func for the seeds and the given label selector. +func SeedFilterFunc(seedName string, labelSelector *metav1.LabelSelector) func(obj interface{}) bool { + return func(obj interface{}) bool { + seed, ok := obj.(*gardencorev1beta1.Seed) + if !ok { + return false + } + if len(seedName) > 0 { + return seed.Name == seedName + } + return LabelsMatchFor(seed.Labels, labelSelector) + } +} + +// ShootFilterFunc returns a filtering func for the seeds and the given label selector. +func ShootFilterFunc(seedName string, seedLister gardencorelisters.SeedLister, labelSelector *metav1.LabelSelector) func(obj interface{}) bool { + return func(obj interface{}) bool { + shoot, ok := obj.(*gardencorev1beta1.Shoot) + if !ok { + return false + } + if shoot.Spec.SeedName == nil { + return false + } + if len(seedName) > 0 { + if shoot.Status.SeedName == nil || *shoot.Spec.SeedName == *shoot.Status.SeedName { + return *shoot.Spec.SeedName == seedName + } + return *shoot.Status.SeedName == seedName + } + if shoot.Status.SeedName == nil || *shoot.Spec.SeedName == *shoot.Status.SeedName { + return SeedLabelsMatch(seedLister, *shoot.Spec.SeedName, labelSelector) + } + return SeedLabelsMatch(seedLister, *shoot.Status.SeedName, labelSelector) + } +} + +// ShootIsManagedByThisGardenlet checks if the given shoot is managed by this gardenlet by comparing it with the seed name from the GardenletConfiguration +// or by checking whether the seed labels mathes the seed seoector from the GardenletConfiguration. +func ShootIsManagedByThisGardenlet(shoot *gardencorev1beta1.Shoot, gc *config.GardenletConfiguration, seedLister gardencorelisters.SeedLister) bool { + seedName := confighelper.SeedNameFromSeedConfig(gc.SeedConfig) + if len(seedName) > 0 { + return *shoot.Spec.SeedName == seedName + } + return SeedLabelsMatch(seedLister, *shoot.Spec.SeedName, gc.SeedSelector) +} + +// SeedLabelsMatch fetches the given seed via a lister by its name and then checks whether the given label selector matches +// the seed labels. +func SeedLabelsMatch(seedLister gardencorelisters.SeedLister, seedName string, labelSelector *metav1.LabelSelector) bool { + seed, err := seedLister.Get(seedName) + if err != nil { + return false + } + + return LabelsMatchFor(seed.Labels, labelSelector) +} + +// seedLabelsMatchWithClient fetches the given seed by its name from the client and then checks whether the given +// label selector matches the seed labels. +func seedLabelsMatchWithClient(ctx context.Context, c client.Client, seedName string, labelSelector *metav1.LabelSelector) bool { + seed := &gardencorev1beta1.Seed{} + if err := c.Get(ctx, client.ObjectKey{Name: seedName}, seed); err != nil { + return false + } + + return LabelsMatchFor(seed.Labels, labelSelector) +} + +// ControllerInstallationFilterFunc returns a filtering func for the seeds and the given label selector. +func ControllerInstallationFilterFunc(seedName string, seedLister gardencorelisters.SeedLister, labelSelector *metav1.LabelSelector) func(obj interface{}) bool { + return func(obj interface{}) bool { + controllerInstallation, ok := obj.(*gardencorev1beta1.ControllerInstallation) + if !ok { + return false + } + if len(seedName) > 0 { + return controllerInstallation.Spec.SeedRef.Name == seedName + } + return SeedLabelsMatch(seedLister, controllerInstallation.Spec.SeedRef.Name, labelSelector) + } +} + +// BackupBucketFilterFunc returns a filtering func for the seeds and the given label selector. +func BackupBucketFilterFunc(ctx context.Context, c client.Client, seedName string, labelSelector *metav1.LabelSelector) func(obj interface{}) bool { + return func(obj interface{}) bool { + backupBucket, ok := obj.(*gardencorev1beta1.BackupBucket) + if !ok { + return false + } + if backupBucket.Spec.SeedName == nil { + return false + } + if len(seedName) > 0 { + return *backupBucket.Spec.SeedName == seedName + } + return seedLabelsMatchWithClient(ctx, c, *backupBucket.Spec.SeedName, labelSelector) + } +} + +// BackupEntryFilterFunc returns a filtering func for the seeds and the given label selector. +func BackupEntryFilterFunc(ctx context.Context, c client.Client, seedName string, labelSelector *metav1.LabelSelector) func(obj interface{}) bool { + return func(obj interface{}) bool { + backupEntry, ok := obj.(*gardencorev1beta1.BackupEntry) + if !ok { + return false + } + if backupEntry.Spec.SeedName == nil { + return false + } + if len(seedName) > 0 { + return *backupEntry.Spec.SeedName == seedName + } + return seedLabelsMatchWithClient(ctx, c, *backupEntry.Spec.SeedName, labelSelector) + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go new file mode 100644 index 00000000..735b5e5d --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go @@ -0,0 +1,133 @@ +// 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 controllerutils + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/gardener/gardener/pkg/logger" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/tools/cache" + "k8s.io/client-go/util/workqueue" + "sigs.k8s.io/controller-runtime/pkg/reconcile" + "sigs.k8s.io/controller-runtime/pkg/runtime/inject" +) + +// DeprecatedCreateWorker creates and runs a worker thread that just processes items in the +// specified queue. The worker will run until stopCh is closed. The worker will be +// added to the wait group when started and marked done when finished. +// Deprecated: Use CreateWorker instead. +func DeprecatedCreateWorker(ctx context.Context, queue workqueue.RateLimitingInterface, resourceType string, reconciler func(key string) error, waitGroup *sync.WaitGroup, workerCh chan int) { + CreateWorker(ctx, queue, resourceType, reconcile.Func(func(_ context.Context, req reconcile.Request) (reconcile.Result, error) { + meta := kutil.ObjectMeta(req.Namespace, req.Name) + key, err := cache.MetaNamespaceKeyFunc(&meta) + if err != nil { + logger.Logger.WithError(err).Error("Could not create key from meta") + return reconcile.Result{}, nil + } + + return reconcile.Result{}, reconciler(key) + }), waitGroup, workerCh) +} + +// CreateWorker creates and runs a worker thread that just processes items in the +// specified queue. The worker will run until stopCh is closed. The worker will be +// added to the wait group when started and marked done when finished. +// The given context is injected into the `reconciler` if it implements `inject.Stoppable`. +// Optionally passed inject functions are called with the `reconciler` but potentially returned errors are disregarded. +func CreateWorker(ctx context.Context, queue workqueue.RateLimitingInterface, resourceType string, reconciler reconcile.Reconciler, waitGroup *sync.WaitGroup, workerCh chan int, injectFn ...inject.Func) { + fns := append(injectFn, func(i interface{}) error { + _, err := inject.StopChannelInto(ctx.Done(), i) + return err + }) + + for _, f := range fns { + if err := f(reconciler); err != nil { + logger.Logger.Errorf("An error occurred while reconciler injection: %v", err) + } + } + + waitGroup.Add(1) + workerCh <- 1 + go func() { + wait.UntilWithContext(ctx, func(ctx context.Context) { + worker(ctx, queue, resourceType, reconciler) + }, time.Second) + workerCh <- -1 + waitGroup.Done() + }() +} + +func requestFromKey(key interface{}) (reconcile.Request, error) { + switch v := key.(type) { + case string: + namespace, name, err := cache.SplitMetaNamespaceKey(key.(string)) + if err != nil { + return reconcile.Request{}, err + } + + return reconcile.Request{NamespacedName: types.NamespacedName{Namespace: namespace, Name: name}}, nil + case reconcile.Request: + return v, nil + default: + return reconcile.Request{}, fmt.Errorf("unknown key type %T", key) + } +} + +// worker runs a worker thread that just dequeues items, processes them, and marks them done. +// It enforces that the reconciler is never invoked concurrently with the same key. +func worker(ctx context.Context, queue workqueue.RateLimitingInterface, resourceType string, reconciler reconcile.Reconciler) { + exit := false + for !exit { + exit = func() bool { + key, quit := queue.Get() + if quit { + return true + } + defer queue.Done(key) + + req, err := requestFromKey(key) + if err != nil { + logger.Logger.WithError(err).Error("Cannot obtain request from key") + queue.Forget(key) + return false + } + + res, err := reconciler.Reconcile(ctx, req) + if err != nil { + logger.Logger.Infof("Error syncing %s %v: %v", resourceType, key, err) + queue.AddRateLimited(key) + return false + } + + if res.RequeueAfter > 0 { + queue.AddAfter(key, res.RequeueAfter) + return false + } + if res.Requeue { + queue.AddRateLimited(key) + return false + } + queue.Forget(key) + return false + }() + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/doc.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/doc.go new file mode 100644 index 00000000..3e61bbf7 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/doc.go @@ -0,0 +1,18 @@ +// 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. + +// +k8s:deepcopy-gen=package +// +groupName=gardenlet.config.gardener.cloud + +package config // import "github.com/gardener/gardener/pkg/gardenlet/apis/config" diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/helper/helpers.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/helper/helpers.go new file mode 100644 index 00000000..8505cb2a --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/helper/helpers.go @@ -0,0 +1,40 @@ +// 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 helper + +import ( + "github.com/gardener/gardener/pkg/gardenlet/apis/config" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// SeedNameFromSeedConfig returns an empty string if the given seed config is nil, or the +// name inside the seed config. +func SeedNameFromSeedConfig(seedConfig *config.SeedConfig) string { + if seedConfig == nil { + return "" + } + return seedConfig.Seed.Name +} + +// StaleExtensionHealthChecksThreshold returns nil if the given config is nil or the check +// for stale health checks is not enabled. Otherwise it returns the threshold from the given config. +func StaleExtensionHealthChecksThreshold(c *config.StaleExtensionHealthChecks) *metav1.Duration { + if c != nil && c.Enabled { + return c.Threshold + } + + return nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go new file mode 100644 index 00000000..cc2edebe --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go @@ -0,0 +1,51 @@ +// 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 config + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "gardenlet.config.gardener.cloud" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder used to register the Shoot resource. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // AddToScheme is a pointer to SchemeBuilder.AddToScheme. + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &GardenletConfiguration{}, + ) + return nil +} 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 new file mode 100644 index 00000000..37789ded --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/types.go @@ -0,0 +1,361 @@ +// 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 config + +import ( + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + componentbaseconfig "k8s.io/component-base/config" + "k8s.io/klog" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// GardenletConfiguration defines the configuration for the Gardenlet. +type GardenletConfiguration struct { + metav1.TypeMeta + // GardenClientConnection specifies the kubeconfig file and the client connection settings + // for the proxy server to use when communicating with the garden apiserver. + GardenClientConnection *GardenClientConnection + // SeedClientConnection specifies the client connection settings for the proxy server + // to use when communicating with the seed apiserver. + SeedClientConnection *SeedClientConnection + // ShootClientConnection specifies the client connection settings for the proxy server + // to use when communicating with the shoot apiserver. + ShootClientConnection *ShootClientConnection + // Controllers defines the configuration of the controllers. + Controllers *GardenletControllerConfiguration + // Resources defines the total capacity for seed resources and the amount reserved for use by Gardener. + Resources *ResourcesConfiguration + // LeaderElection defines the configuration of leader election client. + LeaderElection *LeaderElectionConfiguration + // LogLevel is the level/severity for the logs. Must be one of [info,debug,error]. + LogLevel *string + // KubernetesLogLevel is the log level used for Kubernetes' k8s.io/klog functions. + KubernetesLogLevel *klog.Level + // Server defines the configuration of the HTTP server. + Server *ServerConfiguration + // FeatureGates is a map of feature names to bools that enable or disable alpha/experimental + // features. This field modifies piecemeal the built-in default values from + // "github.com/gardener/gardener/pkg/gardenlet/features/features.go". + // Default: nil + FeatureGates map[string]bool + // SeedConfig contains configuration for the seed cluster. Must not be set if seed selector is set. + // In this case the gardenlet creates the `Seed` object itself based on the provided config. + SeedConfig *SeedConfig + // SeedSelector contains an optional list of labels on `Seed` resources that shall be managed by + // this gardenlet instance. In this case the `Seed` object is not managed by the Gardenlet and must + // be created by an operator/administrator. + SeedSelector *metav1.LabelSelector + // Logging contains an optional configurations for the logging stack deployed + // by the Gardenlet in the seed clusters. + Logging *Logging + // SNI contains an optional configuration for the APIServerSNI feature used + // by the Gardenlet in the seed clusters. + SNI *SNI +} + +// GardenClientConnection specifies the kubeconfig file and the client connection settings +// for the proxy server to use when communicating with the garden apiserver. +type GardenClientConnection struct { + componentbaseconfig.ClientConnectionConfiguration + // GardenClusterAddress is the external address that the gardenlets can use to remotely connect to the Garden + // cluster. It is needed in case the gardenlet deploys itself into shooted seeds. + GardenClusterAddress *string + // GardenClusterCACert is the external address that the gardenlets can use to remotely connect to the Garden + // cluster. It is needed in case the gardenlet deploys itself into shooted seeds. + GardenClusterCACert []byte + // BootstrapKubeconfig is a reference to a secret that contains a data key 'kubeconfig' whose value + // is a kubeconfig that can be used for bootstrapping. If `kubeconfig` is given then only this kubeconfig + // will be considered. + BootstrapKubeconfig *corev1.SecretReference + // KubeconfigSecret is the reference to a secret object that stores the gardenlet's kubeconfig that + // it uses to communicate with the garden cluster. If `kubeconfig` is given then only this kubeconfig + // will be considered. + KubeconfigSecret *corev1.SecretReference +} + +// SeedClientConnection specifies the client connection settings +// for the proxy server to use when communicating with the seed apiserver. +type SeedClientConnection struct { + componentbaseconfig.ClientConnectionConfiguration +} + +// ShootClientConnection specifies the client connection settings +// for the proxy server to use when communicating with the shoot apiserver. +type ShootClientConnection struct { + componentbaseconfig.ClientConnectionConfiguration +} + +// GardenletControllerConfiguration defines the configuration of the controllers. +type GardenletControllerConfiguration struct { + // BackupBucket defines the configuration of the BackupBucket controller. + BackupBucket *BackupBucketControllerConfiguration + // BackupEntry defines the configuration of the BackupEntry controller. + BackupEntry *BackupEntryControllerConfiguration + // ControllerInstallation defines the configuration of the ControllerInstallation controller. + ControllerInstallation *ControllerInstallationControllerConfiguration + // ControllerInstallationCare defines the configuration of the ControllerInstallationCare controller. + ControllerInstallationCare *ControllerInstallationCareControllerConfiguration + // ControllerInstallationRequired defines the configuration of the ControllerInstallationRequired controller. + ControllerInstallationRequired *ControllerInstallationRequiredControllerConfiguration + // Seed defines the configuration of the Seed controller. + Seed *SeedControllerConfiguration + // Shoot defines the configuration of the Shoot controller. + Shoot *ShootControllerConfiguration + // ShootCare defines the configuration of the ShootCare controller. + ShootCare *ShootCareControllerConfiguration + // ShootStateSync defines the configuration of the ShootState controller. + ShootStateSync *ShootStateSyncControllerConfiguration + // ShootedSeedRegistration the configuration of the shooted seed registration controller. + ShootedSeedRegistration *ShootedSeedRegistrationControllerConfiguration + // SeedAPIServerNetworkPolicy defines the configuration of the SeedAPIServerNetworkPolicy controller. + SeedAPIServerNetworkPolicy *SeedAPIServerNetworkPolicyControllerConfiguration +} + +// BackupBucketControllerConfiguration defines the configuration of the BackupBucket +// controller. +type BackupBucketControllerConfiguration struct { + // ConcurrentSyncs is the number of workers used for the controller to work on events. + ConcurrentSyncs *int +} + +// BackupEntryControllerConfiguration defines the configuration of the BackupEntry +// controller. +type BackupEntryControllerConfiguration struct { + // ConcurrentSyncs is the number of workers used for the controller to work on events. + ConcurrentSyncs *int + // DeletionGracePeriodHours holds the period in number of hours to delete the BackupEntry after deletion timestamp is set. + // If value is set to 0 then the BackupEntryController will trigger deletion immediately. + DeletionGracePeriodHours *int +} + +// ControllerInstallationControllerConfiguration defines the configuration of the +// ControllerInstallation controller. +type ControllerInstallationControllerConfiguration struct { + // ConcurrentSyncs is the number of workers used for the controller to work on + // events. + ConcurrentSyncs *int +} + +// ControllerInstallationCareControllerConfiguration defines the configuration of the ControllerInstallationCare +// controller. +type ControllerInstallationCareControllerConfiguration struct { + // ConcurrentSyncs is the number of workers used for the controller to work on + // events. + ConcurrentSyncs *int + // SyncPeriod is the duration how often the existing resources are reconciled (how + // often the health check of ControllerInstallations is performed. + SyncPeriod *metav1.Duration +} + +// ControllerInstallationRequiredControllerConfiguration defines the configuration of the ControllerInstallationRequired +// controller. +type ControllerInstallationRequiredControllerConfiguration struct { + // ConcurrentSyncs is the number of workers used for the controller to work on + // events. + ConcurrentSyncs *int +} + +// SeedControllerConfiguration defines the configuration of the Seed controller. +type SeedControllerConfiguration struct { + // ConcurrentSyncs is the number of workers used for the controller to work on + // events. + ConcurrentSyncs *int + // SyncPeriod is the duration how often the existing resources are reconciled. + SyncPeriod *metav1.Duration +} + +// ShootControllerConfiguration defines the configuration of the Shoot +// controller. +type ShootControllerConfiguration struct { + // ConcurrentSyncs is the number of workers used for the controller to work on + // events. + ConcurrentSyncs *int + // ProgressReportPeriod is the period how often the progress of a shoot operation will be reported in the + // Shoot's `.status.lastOperation` field. By default, the progress will be reported immediately after a task of the + // respective flow has been completed. If you set this to a value > 0 (e.g., 5s) then it will be only reported every + // 5 seconds. Any tasks that were completed in the meantime will not be reported. + ProgressReportPeriod *metav1.Duration + // ReconcileInMaintenanceOnly determines whether Shoot reconciliations happen only + // during its maintenance time window. + ReconcileInMaintenanceOnly *bool + // RespectSyncPeriodOverwrite determines whether a sync period overwrite of a + // Shoot (via annotation) is respected or not. Defaults to false. + RespectSyncPeriodOverwrite *bool + // RetryDuration is the maximum duration how often a reconciliation will be retried + // in case of errors. + RetryDuration *metav1.Duration + // SyncPeriod is the duration how often the existing resources are reconciled. + SyncPeriod *metav1.Duration + // DNSEntryTTLSeconds is the TTL in seconds that is being used for DNS entries when reconciling shoots. + // Default: 120s + DNSEntryTTLSeconds *int64 +} + +// ShootCareControllerConfiguration defines the configuration of the ShootCare +// controller. +type ShootCareControllerConfiguration struct { + // ConcurrentSyncs is the number of workers used for the controller to work on + // events. + ConcurrentSyncs *int + // SyncPeriod is the duration how often the existing resources are reconciled (how + // often the health check of Shoot clusters is performed (only if no operation is + // already running on them). + SyncPeriod *metav1.Duration + // StaleExtensionHealthChecks defines the configuration of the check for stale extension health checks. + StaleExtensionHealthChecks *StaleExtensionHealthChecks + // ConditionThresholds defines the condition threshold per condition type. + ConditionThresholds []ConditionThreshold +} + +// StaleExtensionHealthChecks defines the configuration of the check for stale extension health checks. +type StaleExtensionHealthChecks struct { + // Enabled specifies whether the check for stale extensions health checks is enabled. + // Defaults to true. + Enabled bool + // Threshold configures the threshold when gardenlet considers a health check report of an extension CRD as outdated. + // The threshold should have some leeway in case a Gardener extension is temporarily unavailable. + // Defaults to 5m. + Threshold *metav1.Duration +} + +// ShootedSeedRegistrationControllerConfiguration defines the configuration of the shooted seed registration controller. +type ShootedSeedRegistrationControllerConfiguration struct { + // SyncJitterPeriod is a jitter duration for the reconciler sync that can be used to distribute the syncs randomly. + // If its value is greater than 0 then the shooted seeds will not be enqueued immediately but only after a random + // duration between 0 and the configured value. It is defaulted to 5m. + SyncJitterPeriod *metav1.Duration +} + +// ConditionThreshold defines the duration how long a flappy condition stays in progressing state. +type ConditionThreshold struct { + // Type is the type of the condition to define the threshold for. + Type string + // Duration is the duration how long the condition can stay in the progressing state. + Duration metav1.Duration +} + +// ShootStateSyncControllerConfiguration defines the configuration of the ShootState Sync controller. +type ShootStateSyncControllerConfiguration struct { + // ConcurrentSyncs is the number of workers used for the controller to work on + // events. + ConcurrentSyncs *int + // SyncPeriod is the duration how often the existing extension resources are synced to the ShootState resource + SyncPeriod *metav1.Duration +} + +// SeedAPIServerNetworkPolicyControllerConfiguration defines the configuration of the SeedAPIServerNetworkPolicy +// controller. +type SeedAPIServerNetworkPolicyControllerConfiguration struct { + // ConcurrentSyncs is the number of workers used for the controller to work on events. + ConcurrentSyncs *int +} + +// ResourcesConfiguration defines the total capacity for seed resources and the amount reserved for use by Gardener. +type ResourcesConfiguration struct { + // Capacity defines the total resources of a seed. + Capacity corev1.ResourceList + // Reserved defines the resources of a seed that are reserved for use by Gardener. + // Defaults to 0. + Reserved corev1.ResourceList +} + +// LeaderElectionConfiguration defines the configuration of leader election +// clients for components that can run with leader election enabled. +type LeaderElectionConfiguration struct { + componentbaseconfig.LeaderElectionConfiguration + // LockObjectNamespace defines the namespace of the lock object. + LockObjectNamespace *string + // LockObjectName defines the lock object name. + LockObjectName *string +} + +// SeedConfig contains configuration for the seed cluster. +type SeedConfig struct { + gardencorev1beta1.Seed +} + +// FluentBit contains configuration for Fluent Bit. +type FluentBit struct { + // ServiceSection defines [SERVICE] configuration for the fluent-bit. + // If it is nil, fluent-bit uses default service configuration. + ServiceSection *string + // InputSection defines [INPUT] configuration for the fluent-bit. + // If it is nil, fluent-bit uses default input configuration. + InputSection *string + // OutputSection defines [OUTPUT] configuration for the fluent-bit. + // If it is nil, fluent-bit uses default output configuration. + OutputSection *string +} + +// Logging contains configuration for the logging stack. +type Logging struct { + // FluentBit contains configurations for the fluent-bit + FluentBit *FluentBit +} + +// ServerConfiguration contains details for the HTTP(S) servers. +type ServerConfiguration struct { + // HTTPS is the configuration for the HTTPS server. + HTTPS HTTPSServer +} + +// Server contains information for HTTP(S) server configuration. +type Server struct { + // BindAddress is the IP address on which to listen for the specified port. + BindAddress string + // Port is the port on which to serve unsecured, unauthenticated access. + Port int +} + +// HTTPSServer is the configuration for the HTTPSServer server. +type HTTPSServer struct { + // Server is the configuration for the bind address and the port. + Server + // TLSServer contains information about the TLS configuration for a HTTPS server. If empty then a proper server + // certificate will be self-generated during startup. + TLS *TLSServer +} + +// TLSServer contains information about the TLS configuration for a HTTPS server. +type TLSServer struct { + // ServerCertPath is the path to the server certificate file. + ServerCertPath string + // ServerKeyPath is the path to the private key file. + ServerKeyPath string +} + +// SNI contains an optional configuration for the APIServerSNI feature used +// by the Gardenlet in the seed clusters. +type SNI struct { + // Ingress is the ingressgateway configuration. + Ingress *SNIIngress +} + +// SNIIngress contains configuration of the ingressgateway. +type SNIIngress struct { + // ServiceName is the name of the ingressgateway Service. + // Defaults to "istio-ingressgateway". + ServiceName *string + // Namespace is the namespace in which the ingressgateway is deployed in. + // Defaults to "istio-ingress". + Namespace *string + // Labels of the ingressgateway + // Defaults to "istio: ingressgateway". + Labels map[string]string +} 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 new file mode 100644 index 00000000..4879878b --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/zz_generated.deepcopy.go @@ -0,0 +1,852 @@ +// +build !ignore_autogenerated + +/* +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. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package config + +import ( + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + klog "k8s.io/klog" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BackupBucketControllerConfiguration) DeepCopyInto(out *BackupBucketControllerConfiguration) { + *out = *in + if in.ConcurrentSyncs != nil { + in, out := &in.ConcurrentSyncs, &out.ConcurrentSyncs + *out = new(int) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BackupBucketControllerConfiguration. +func (in *BackupBucketControllerConfiguration) DeepCopy() *BackupBucketControllerConfiguration { + if in == nil { + return nil + } + out := new(BackupBucketControllerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BackupEntryControllerConfiguration) DeepCopyInto(out *BackupEntryControllerConfiguration) { + *out = *in + if in.ConcurrentSyncs != nil { + in, out := &in.ConcurrentSyncs, &out.ConcurrentSyncs + *out = new(int) + **out = **in + } + if in.DeletionGracePeriodHours != nil { + in, out := &in.DeletionGracePeriodHours, &out.DeletionGracePeriodHours + *out = new(int) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BackupEntryControllerConfiguration. +func (in *BackupEntryControllerConfiguration) DeepCopy() *BackupEntryControllerConfiguration { + if in == nil { + return nil + } + out := new(BackupEntryControllerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConditionThreshold) DeepCopyInto(out *ConditionThreshold) { + *out = *in + out.Duration = in.Duration + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConditionThreshold. +func (in *ConditionThreshold) DeepCopy() *ConditionThreshold { + if in == nil { + return nil + } + out := new(ConditionThreshold) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControllerInstallationCareControllerConfiguration) DeepCopyInto(out *ControllerInstallationCareControllerConfiguration) { + *out = *in + if in.ConcurrentSyncs != nil { + in, out := &in.ConcurrentSyncs, &out.ConcurrentSyncs + *out = new(int) + **out = **in + } + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(v1.Duration) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerInstallationCareControllerConfiguration. +func (in *ControllerInstallationCareControllerConfiguration) DeepCopy() *ControllerInstallationCareControllerConfiguration { + if in == nil { + return nil + } + out := new(ControllerInstallationCareControllerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControllerInstallationControllerConfiguration) DeepCopyInto(out *ControllerInstallationControllerConfiguration) { + *out = *in + if in.ConcurrentSyncs != nil { + in, out := &in.ConcurrentSyncs, &out.ConcurrentSyncs + *out = new(int) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerInstallationControllerConfiguration. +func (in *ControllerInstallationControllerConfiguration) DeepCopy() *ControllerInstallationControllerConfiguration { + if in == nil { + return nil + } + out := new(ControllerInstallationControllerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControllerInstallationRequiredControllerConfiguration) DeepCopyInto(out *ControllerInstallationRequiredControllerConfiguration) { + *out = *in + if in.ConcurrentSyncs != nil { + in, out := &in.ConcurrentSyncs, &out.ConcurrentSyncs + *out = new(int) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerInstallationRequiredControllerConfiguration. +func (in *ControllerInstallationRequiredControllerConfiguration) DeepCopy() *ControllerInstallationRequiredControllerConfiguration { + if in == nil { + return nil + } + out := new(ControllerInstallationRequiredControllerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FluentBit) DeepCopyInto(out *FluentBit) { + *out = *in + if in.ServiceSection != nil { + in, out := &in.ServiceSection, &out.ServiceSection + *out = new(string) + **out = **in + } + if in.InputSection != nil { + in, out := &in.InputSection, &out.InputSection + *out = new(string) + **out = **in + } + if in.OutputSection != nil { + in, out := &in.OutputSection, &out.OutputSection + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FluentBit. +func (in *FluentBit) DeepCopy() *FluentBit { + if in == nil { + return nil + } + out := new(FluentBit) + 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 + out.ClientConnectionConfiguration = in.ClientConnectionConfiguration + if in.GardenClusterAddress != nil { + in, out := &in.GardenClusterAddress, &out.GardenClusterAddress + *out = new(string) + **out = **in + } + if in.GardenClusterCACert != nil { + in, out := &in.GardenClusterCACert, &out.GardenClusterCACert + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.BootstrapKubeconfig != nil { + in, out := &in.BootstrapKubeconfig, &out.BootstrapKubeconfig + *out = new(corev1.SecretReference) + **out = **in + } + if in.KubeconfigSecret != nil { + in, out := &in.KubeconfigSecret, &out.KubeconfigSecret + *out = new(corev1.SecretReference) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GardenClientConnection. +func (in *GardenClientConnection) DeepCopy() *GardenClientConnection { + if in == nil { + return nil + } + out := new(GardenClientConnection) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GardenletConfiguration) DeepCopyInto(out *GardenletConfiguration) { + *out = *in + out.TypeMeta = in.TypeMeta + if in.GardenClientConnection != nil { + in, out := &in.GardenClientConnection, &out.GardenClientConnection + *out = new(GardenClientConnection) + (*in).DeepCopyInto(*out) + } + if in.SeedClientConnection != nil { + in, out := &in.SeedClientConnection, &out.SeedClientConnection + *out = new(SeedClientConnection) + **out = **in + } + if in.ShootClientConnection != nil { + in, out := &in.ShootClientConnection, &out.ShootClientConnection + *out = new(ShootClientConnection) + **out = **in + } + if in.Controllers != nil { + in, out := &in.Controllers, &out.Controllers + *out = new(GardenletControllerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = new(ResourcesConfiguration) + (*in).DeepCopyInto(*out) + } + if in.LeaderElection != nil { + in, out := &in.LeaderElection, &out.LeaderElection + *out = new(LeaderElectionConfiguration) + (*in).DeepCopyInto(*out) + } + if in.LogLevel != nil { + in, out := &in.LogLevel, &out.LogLevel + *out = new(string) + **out = **in + } + if in.KubernetesLogLevel != nil { + in, out := &in.KubernetesLogLevel, &out.KubernetesLogLevel + *out = new(klog.Level) + **out = **in + } + if in.Server != nil { + in, out := &in.Server, &out.Server + *out = new(ServerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.FeatureGates != nil { + in, out := &in.FeatureGates, &out.FeatureGates + *out = make(map[string]bool, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.SeedConfig != nil { + in, out := &in.SeedConfig, &out.SeedConfig + *out = new(SeedConfig) + (*in).DeepCopyInto(*out) + } + if in.SeedSelector != nil { + in, out := &in.SeedSelector, &out.SeedSelector + *out = new(v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.Logging != nil { + in, out := &in.Logging, &out.Logging + *out = new(Logging) + (*in).DeepCopyInto(*out) + } + if in.SNI != nil { + in, out := &in.SNI, &out.SNI + *out = new(SNI) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GardenletConfiguration. +func (in *GardenletConfiguration) DeepCopy() *GardenletConfiguration { + if in == nil { + return nil + } + out := new(GardenletConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GardenletConfiguration) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GardenletControllerConfiguration) DeepCopyInto(out *GardenletControllerConfiguration) { + *out = *in + if in.BackupBucket != nil { + in, out := &in.BackupBucket, &out.BackupBucket + *out = new(BackupBucketControllerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.BackupEntry != nil { + in, out := &in.BackupEntry, &out.BackupEntry + *out = new(BackupEntryControllerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.ControllerInstallation != nil { + in, out := &in.ControllerInstallation, &out.ControllerInstallation + *out = new(ControllerInstallationControllerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.ControllerInstallationCare != nil { + in, out := &in.ControllerInstallationCare, &out.ControllerInstallationCare + *out = new(ControllerInstallationCareControllerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.ControllerInstallationRequired != nil { + in, out := &in.ControllerInstallationRequired, &out.ControllerInstallationRequired + *out = new(ControllerInstallationRequiredControllerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.Seed != nil { + in, out := &in.Seed, &out.Seed + *out = new(SeedControllerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.Shoot != nil { + in, out := &in.Shoot, &out.Shoot + *out = new(ShootControllerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.ShootCare != nil { + in, out := &in.ShootCare, &out.ShootCare + *out = new(ShootCareControllerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.ShootStateSync != nil { + in, out := &in.ShootStateSync, &out.ShootStateSync + *out = new(ShootStateSyncControllerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.ShootedSeedRegistration != nil { + in, out := &in.ShootedSeedRegistration, &out.ShootedSeedRegistration + *out = new(ShootedSeedRegistrationControllerConfiguration) + (*in).DeepCopyInto(*out) + } + if in.SeedAPIServerNetworkPolicy != nil { + in, out := &in.SeedAPIServerNetworkPolicy, &out.SeedAPIServerNetworkPolicy + *out = new(SeedAPIServerNetworkPolicyControllerConfiguration) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GardenletControllerConfiguration. +func (in *GardenletControllerConfiguration) DeepCopy() *GardenletControllerConfiguration { + if in == nil { + return nil + } + out := new(GardenletControllerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HTTPSServer) DeepCopyInto(out *HTTPSServer) { + *out = *in + out.Server = in.Server + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = new(TLSServer) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPSServer. +func (in *HTTPSServer) DeepCopy() *HTTPSServer { + if in == nil { + return nil + } + out := new(HTTPSServer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LeaderElectionConfiguration) DeepCopyInto(out *LeaderElectionConfiguration) { + *out = *in + out.LeaderElectionConfiguration = in.LeaderElectionConfiguration + if in.LockObjectNamespace != nil { + in, out := &in.LockObjectNamespace, &out.LockObjectNamespace + *out = new(string) + **out = **in + } + if in.LockObjectName != nil { + in, out := &in.LockObjectName, &out.LockObjectName + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LeaderElectionConfiguration. +func (in *LeaderElectionConfiguration) DeepCopy() *LeaderElectionConfiguration { + if in == nil { + return nil + } + out := new(LeaderElectionConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Logging) DeepCopyInto(out *Logging) { + *out = *in + if in.FluentBit != nil { + in, out := &in.FluentBit, &out.FluentBit + *out = new(FluentBit) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Logging. +func (in *Logging) DeepCopy() *Logging { + if in == nil { + return nil + } + out := new(Logging) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourcesConfiguration) DeepCopyInto(out *ResourcesConfiguration) { + *out = *in + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(corev1.ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + if in.Reserved != nil { + in, out := &in.Reserved, &out.Reserved + *out = make(corev1.ResourceList, len(*in)) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourcesConfiguration. +func (in *ResourcesConfiguration) DeepCopy() *ResourcesConfiguration { + if in == nil { + return nil + } + out := new(ResourcesConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SNI) DeepCopyInto(out *SNI) { + *out = *in + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = new(SNIIngress) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SNI. +func (in *SNI) DeepCopy() *SNI { + if in == nil { + return nil + } + out := new(SNI) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SNIIngress) DeepCopyInto(out *SNIIngress) { + *out = *in + if in.ServiceName != nil { + in, out := &in.ServiceName, &out.ServiceName + *out = new(string) + **out = **in + } + if in.Namespace != nil { + in, out := &in.Namespace, &out.Namespace + *out = new(string) + **out = **in + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SNIIngress. +func (in *SNIIngress) DeepCopy() *SNIIngress { + if in == nil { + return nil + } + out := new(SNIIngress) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SeedAPIServerNetworkPolicyControllerConfiguration) DeepCopyInto(out *SeedAPIServerNetworkPolicyControllerConfiguration) { + *out = *in + if in.ConcurrentSyncs != nil { + in, out := &in.ConcurrentSyncs, &out.ConcurrentSyncs + *out = new(int) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedAPIServerNetworkPolicyControllerConfiguration. +func (in *SeedAPIServerNetworkPolicyControllerConfiguration) DeepCopy() *SeedAPIServerNetworkPolicyControllerConfiguration { + if in == nil { + return nil + } + out := new(SeedAPIServerNetworkPolicyControllerConfiguration) + 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 + out.ClientConnectionConfiguration = in.ClientConnectionConfiguration + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedClientConnection. +func (in *SeedClientConnection) DeepCopy() *SeedClientConnection { + if in == nil { + return nil + } + out := new(SeedClientConnection) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SeedConfig) DeepCopyInto(out *SeedConfig) { + *out = *in + in.Seed.DeepCopyInto(&out.Seed) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedConfig. +func (in *SeedConfig) DeepCopy() *SeedConfig { + if in == nil { + return nil + } + out := new(SeedConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SeedControllerConfiguration) DeepCopyInto(out *SeedControllerConfiguration) { + *out = *in + if in.ConcurrentSyncs != nil { + in, out := &in.ConcurrentSyncs, &out.ConcurrentSyncs + *out = new(int) + **out = **in + } + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(v1.Duration) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeedControllerConfiguration. +func (in *SeedControllerConfiguration) DeepCopy() *SeedControllerConfiguration { + if in == nil { + return nil + } + out := new(SeedControllerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Server) DeepCopyInto(out *Server) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Server. +func (in *Server) DeepCopy() *Server { + if in == nil { + return nil + } + out := new(Server) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ServerConfiguration) DeepCopyInto(out *ServerConfiguration) { + *out = *in + in.HTTPS.DeepCopyInto(&out.HTTPS) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServerConfiguration. +func (in *ServerConfiguration) DeepCopy() *ServerConfiguration { + if in == nil { + return nil + } + out := new(ServerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootCareControllerConfiguration) DeepCopyInto(out *ShootCareControllerConfiguration) { + *out = *in + if in.ConcurrentSyncs != nil { + in, out := &in.ConcurrentSyncs, &out.ConcurrentSyncs + *out = new(int) + **out = **in + } + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(v1.Duration) + **out = **in + } + if in.StaleExtensionHealthChecks != nil { + in, out := &in.StaleExtensionHealthChecks, &out.StaleExtensionHealthChecks + *out = new(StaleExtensionHealthChecks) + (*in).DeepCopyInto(*out) + } + 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 ShootCareControllerConfiguration. +func (in *ShootCareControllerConfiguration) DeepCopy() *ShootCareControllerConfiguration { + if in == nil { + return nil + } + out := new(ShootCareControllerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootClientConnection) DeepCopyInto(out *ShootClientConnection) { + *out = *in + out.ClientConnectionConfiguration = in.ClientConnectionConfiguration + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootClientConnection. +func (in *ShootClientConnection) DeepCopy() *ShootClientConnection { + if in == nil { + return nil + } + out := new(ShootClientConnection) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootControllerConfiguration) DeepCopyInto(out *ShootControllerConfiguration) { + *out = *in + if in.ConcurrentSyncs != nil { + in, out := &in.ConcurrentSyncs, &out.ConcurrentSyncs + *out = new(int) + **out = **in + } + if in.ProgressReportPeriod != nil { + in, out := &in.ProgressReportPeriod, &out.ProgressReportPeriod + *out = new(v1.Duration) + **out = **in + } + if in.ReconcileInMaintenanceOnly != nil { + in, out := &in.ReconcileInMaintenanceOnly, &out.ReconcileInMaintenanceOnly + *out = new(bool) + **out = **in + } + if in.RespectSyncPeriodOverwrite != nil { + in, out := &in.RespectSyncPeriodOverwrite, &out.RespectSyncPeriodOverwrite + *out = new(bool) + **out = **in + } + if in.RetryDuration != nil { + in, out := &in.RetryDuration, &out.RetryDuration + *out = new(v1.Duration) + **out = **in + } + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(v1.Duration) + **out = **in + } + if in.DNSEntryTTLSeconds != nil { + in, out := &in.DNSEntryTTLSeconds, &out.DNSEntryTTLSeconds + *out = new(int64) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootControllerConfiguration. +func (in *ShootControllerConfiguration) DeepCopy() *ShootControllerConfiguration { + if in == nil { + return nil + } + out := new(ShootControllerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootStateSyncControllerConfiguration) DeepCopyInto(out *ShootStateSyncControllerConfiguration) { + *out = *in + if in.ConcurrentSyncs != nil { + in, out := &in.ConcurrentSyncs, &out.ConcurrentSyncs + *out = new(int) + **out = **in + } + if in.SyncPeriod != nil { + in, out := &in.SyncPeriod, &out.SyncPeriod + *out = new(v1.Duration) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootStateSyncControllerConfiguration. +func (in *ShootStateSyncControllerConfiguration) DeepCopy() *ShootStateSyncControllerConfiguration { + if in == nil { + return nil + } + out := new(ShootStateSyncControllerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ShootedSeedRegistrationControllerConfiguration) DeepCopyInto(out *ShootedSeedRegistrationControllerConfiguration) { + *out = *in + if in.SyncJitterPeriod != nil { + in, out := &in.SyncJitterPeriod, &out.SyncJitterPeriod + *out = new(v1.Duration) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootedSeedRegistrationControllerConfiguration. +func (in *ShootedSeedRegistrationControllerConfiguration) DeepCopy() *ShootedSeedRegistrationControllerConfiguration { + if in == nil { + return nil + } + out := new(ShootedSeedRegistrationControllerConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StaleExtensionHealthChecks) DeepCopyInto(out *StaleExtensionHealthChecks) { + *out = *in + if in.Threshold != nil { + in, out := &in.Threshold, &out.Threshold + *out = new(v1.Duration) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StaleExtensionHealthChecks. +func (in *StaleExtensionHealthChecks) DeepCopy() *StaleExtensionHealthChecks { + if in == nil { + return nil + } + out := new(StaleExtensionHealthChecks) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *TLSServer) DeepCopyInto(out *TLSServer) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TLSServer. +func (in *TLSServer) DeepCopy() *TLSServer { + if in == nil { + return nil + } + out := new(TLSServer) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/gardener/gardener/pkg/logger/logger.go b/vendor/github.com/gardener/gardener/pkg/logger/logger.go index 00cdd4ec..0dd8d051 100644 --- a/vendor/github.com/gardener/gardener/pkg/logger/logger.go +++ b/vendor/github.com/gardener/gardener/pkg/logger/logger.go @@ -20,7 +20,10 @@ import ( "io/ioutil" "os" + "github.com/gardener/gardener/pkg/utils" + "github.com/sirupsen/logrus" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" ) // Logger is the standard logger for the Gardener which is used for all messages which are not Shoot @@ -79,6 +82,17 @@ func NewShootLogger(logger *logrus.Logger, shoot, project string) *logrus.Entry // NewFieldLogger extends an existing logrus logger and adds the provided additional field. // Example output: time="2017-06-08T13:00:49+02:00" level=info msg="something" =. -func NewFieldLogger(logger *logrus.Logger, fieldKey, fieldValue string) *logrus.Entry { +func NewFieldLogger(logger logrus.FieldLogger, fieldKey, fieldValue string) *logrus.Entry { return logger.WithField(fieldKey, fieldValue) } + +// IDFieldName is the name of the id field for a logger. +const IDFieldName = "process_id" + +// NewIDLogger extends an existing logrus logger with a randomly generated id field. +// Example output: time="2017-06-08T13:00:49+02:00" level=info msg="something" id=123abcde. +func NewIDLogger(logger logrus.FieldLogger) logrus.FieldLogger { + id, err := utils.GenerateRandomString(8) + utilruntime.Must(err) + return NewFieldLogger(logger, IDFieldName, id) +} diff --git a/vendor/github.com/gardener/gardener/pkg/operation/common/extensions.go b/vendor/github.com/gardener/gardener/pkg/operation/common/extensions.go new file mode 100644 index 00000000..573a427e --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/operation/common/extensions.go @@ -0,0 +1,568 @@ +// 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 common + +import ( + "context" + "errors" + "fmt" + "time" + + "github.com/gardener/gardener/pkg/api/extensions" + gardencorev1alpha1 "github.com/gardener/gardener/pkg/apis/core/v1alpha1" + gardencorev1alpha1helper "github.com/gardener/gardener/pkg/apis/core/v1alpha1/helper" + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" + "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/kubernetes/health" + "github.com/gardener/gardener/pkg/utils/retry" + + "github.com/sirupsen/logrus" + autoscalingv1 "k8s.io/api/autoscaling/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" +) + +// SyncClusterResourceToSeed creates or updates the `extensions.gardener.cloud/v1alpha1.Cluster` resource in the seed +// cluster by adding the shoot, seed, and cloudprofile specification. +func SyncClusterResourceToSeed(ctx context.Context, client client.Client, clusterName string, shoot *gardencorev1beta1.Shoot, cloudProfile *gardencorev1beta1.CloudProfile, seed *gardencorev1beta1.Seed) error { + if shoot.Spec.SeedName == nil { + return nil + } + + var ( + cluster = &extensionsv1alpha1.Cluster{ + ObjectMeta: metav1.ObjectMeta{ + Name: clusterName, + }, + } + + cloudProfileObj *gardencorev1beta1.CloudProfile + seedObj *gardencorev1beta1.Seed + shootObj *gardencorev1beta1.Shoot + ) + + if cloudProfile != nil { + cloudProfileObj = cloudProfile.DeepCopy() + cloudProfileObj.TypeMeta = metav1.TypeMeta{ + APIVersion: gardencorev1beta1.SchemeGroupVersion.String(), + Kind: "CloudProfile", + } + } + + if seed != nil { + seedObj = seed.DeepCopy() + seedObj.TypeMeta = metav1.TypeMeta{ + APIVersion: gardencorev1beta1.SchemeGroupVersion.String(), + Kind: "Seed", + } + } + + if shoot != nil { + shootObj = shoot.DeepCopy() + shootObj.TypeMeta = metav1.TypeMeta{ + APIVersion: gardencorev1beta1.SchemeGroupVersion.String(), + Kind: "Shoot", + } + } + + _, err := controllerutil.CreateOrUpdate(ctx, client, cluster, func() error { + if cloudProfileObj != nil { + cluster.Spec.CloudProfile = runtime.RawExtension{Object: cloudProfileObj} + } + if seedObj != nil { + cluster.Spec.Seed = runtime.RawExtension{Object: seedObj} + } + if shootObj != nil { + cluster.Spec.Shoot = runtime.RawExtension{Object: shootObj} + } + return nil + }) + return err +} + +// WaitUntilExtensionCRReady waits until the given extension resource has become ready. +func WaitUntilExtensionCRReady( + ctx context.Context, + c client.Client, + logger logrus.FieldLogger, + newObjFunc func() client.Object, + kind string, + namespace string, + name string, + interval time.Duration, + severeThreshold time.Duration, + timeout time.Duration, + postReadyFunc func(runtime.Object) error, +) error { + return WaitUntilObjectReadyWithHealthFunction( + ctx, + c, + logger, + health.CheckExtensionObject, + newObjFunc, + kind, + namespace, + name, + interval, + severeThreshold, + timeout, + postReadyFunc, + ) +} + +// WaitUntilObjectReadyWithHealthFunction waits until the given resource has become ready. It takes the health check +// function that should be executed. +func WaitUntilObjectReadyWithHealthFunction( + ctx context.Context, + c client.Client, + logger logrus.FieldLogger, + healthFunc health.Func, + newObjFunc func() client.Object, + kind string, + namespace string, + name string, + interval time.Duration, + severeThreshold time.Duration, + timeout time.Duration, + postReadyFunc func(runtime.Object) error, +) error { + var ( + errorWithCode *gardencorev1beta1helper.ErrorWithCodes + lastObservedError error + retryCountUntilSevere int + ) + + if err := retry.UntilTimeout(ctx, interval, timeout, func(ctx context.Context) (bool, error) { + retryCountUntilSevere++ + + obj := newObjFunc() + if err := c.Get(ctx, client.ObjectKey{Name: name, Namespace: namespace}, obj); err != nil { + if apierrors.IsNotFound(err) { + return retry.MinorError(err) + } + return retry.SevereError(err) + } + + if err := healthFunc(obj); err != nil { + lastObservedError = err + logger.WithError(err).Errorf("%s did not get ready yet", extensionKey(kind, namespace, name)) + if errors.As(err, &errorWithCode) { + return retry.MinorOrSevereError(retryCountUntilSevere, int(severeThreshold.Nanoseconds()/interval.Nanoseconds()), err) + } + return retry.MinorError(err) + } + + if postReadyFunc != nil { + if err := postReadyFunc(obj); err != nil { + return retry.SevereError(err) + } + } + + return retry.Ok() + }); err != nil { + message := fmt.Sprintf("Error while waiting for %s to become ready", extensionKey(kind, namespace, name)) + if lastObservedError != nil { + return gardencorev1beta1helper.NewErrorWithCodes(formatErrorMessage(message, lastObservedError.Error()), gardencorev1beta1helper.ExtractErrorCodes(lastObservedError)...) + } + return errors.New(formatErrorMessage(message, err.Error())) + } + + return nil +} + +// DeleteExtensionCR deletes an extension resource. +func DeleteExtensionCR( + ctx context.Context, + c client.Client, + newObjFunc func() extensionsv1alpha1.Object, + namespace string, + name string, + deleteOpts ...client.DeleteOption, +) error { + obj := newObjFunc() + obj.SetNamespace(namespace) + obj.SetName(name) + + if err := ConfirmDeletion(ctx, c, obj); err != nil { + return err + } + + return client.IgnoreNotFound(c.Delete(ctx, obj, deleteOpts...)) +} + +// DeleteExtensionCRs lists all extension resources and loops over them. It executes the given for each +// of them, and if it evaluates to true then the resource will be deleted. +func DeleteExtensionCRs( + ctx context.Context, + c client.Client, + listObj client.ObjectList, + newObjFunc func() extensionsv1alpha1.Object, + namespace string, + predicateFunc func(obj extensionsv1alpha1.Object) bool, + deleteOpts ...client.DeleteOption, +) error { + fns, err := applyFuncToExtensionResources(ctx, c, listObj, namespace, predicateFunc, func(ctx context.Context, obj extensionsv1alpha1.Object) error { + return DeleteExtensionCR( + ctx, + c, + newObjFunc, + obj.GetNamespace(), + obj.GetName(), + deleteOpts..., + ) + }) + + if err != nil { + return err + } + + return flow.Parallel(fns...)(ctx) +} + +// WaitUntilExtensionCRsDeleted lists all extension resources and loops over them. It executes the given +// for each of them, and if it evaluates to true then it waits for the resource to be deleted. +func WaitUntilExtensionCRsDeleted( + ctx context.Context, + c client.Client, + logger logrus.FieldLogger, + listObj client.ObjectList, + newObjFunc func() extensionsv1alpha1.Object, + kind string, + namespace string, + interval time.Duration, + timeout time.Duration, + predicateFunc func(obj extensionsv1alpha1.Object) bool, +) error { + fns, err := applyFuncToExtensionResources( + ctx, + c, + listObj, + namespace, + func(obj extensionsv1alpha1.Object) bool { + if obj.GetDeletionTimestamp() == nil { + return false + } + if predicateFunc != nil && !predicateFunc(obj) { + return false + } + return true + }, + func(ctx context.Context, obj extensionsv1alpha1.Object) error { + return WaitUntilExtensionCRDeleted( + ctx, + c, + logger, + newObjFunc, + kind, + obj.GetNamespace(), + obj.GetName(), + interval, + timeout, + ) + }, + ) + + if err != nil { + return err + } + + return flow.Parallel(fns...)(ctx) +} + +// WaitUntilExtensionCRDeleted waits until an extension resource is deleted from the system. +func WaitUntilExtensionCRDeleted( + ctx context.Context, + c client.Client, + logger logrus.FieldLogger, + newObjFunc func() extensionsv1alpha1.Object, + kind string, + namespace string, + name string, + interval time.Duration, + timeout time.Duration, +) error { + var lastObservedError error + + if err := retry.UntilTimeout(ctx, interval, timeout, func(ctx context.Context) (bool, error) { + obj := newObjFunc() + if err := c.Get(ctx, client.ObjectKey{Name: name, Namespace: namespace}, obj); err != nil { + if apierrors.IsNotFound(err) { + return retry.Ok() + } + return retry.SevereError(err) + } + + acc, err := extensions.Accessor(obj) + if err != nil { + return retry.SevereError(err) + } + + if lastErr := acc.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...) + } + + var message = fmt.Sprintf("%s is still present", extensionKey(kind, namespace, name)) + if lastObservedError != nil { + message += fmt.Sprintf(", last observed error: %s", lastObservedError.Error()) + } + return retry.MinorError(fmt.Errorf(message)) + }); err != nil { + message := fmt.Sprintf("Failed to delete %s", extensionKey(kind, namespace, name)) + if lastObservedError != nil { + return gardencorev1beta1helper.NewErrorWithCodes(formatErrorMessage(message, lastObservedError.Error()), gardencorev1beta1helper.ExtractErrorCodes(lastObservedError)...) + } + return errors.New(formatErrorMessage(message, err.Error())) + } + + return nil +} + +// RestoreExtensionWithDeployFunction deploys the extension resource with the passed in deployFunc and sets its operation annotation to wait-for-state. +// It then restores the state of the extension resource from the ShootState, creates any required state resources and sets the operation annotation to restore. +func RestoreExtensionWithDeployFunction( + ctx context.Context, + shootState *gardencorev1alpha1.ShootState, + c client.Client, + resourceKind string, + namespace string, + deployFunc func(ctx context.Context, operationAnnotation string) (extensionsv1alpha1.Object, error), +) error { + extensionObj, err := deployFunc(ctx, v1beta1constants.GardenerOperationWaitForState) + if err != nil { + return err + } + + if err := RestoreExtensionObjectState(ctx, c, shootState, namespace, extensionObj, resourceKind); err != nil { + return err + } + + return AnnotateExtensionObjectWithOperation(ctx, c, extensionObj, v1beta1constants.GardenerOperationRestore) +} + +// RestoreExtensionObjectState restores the status.state field of the extension resources and deploys any required resources from the provided shoot state +func RestoreExtensionObjectState( + ctx context.Context, + c client.Client, + shootState *gardencorev1alpha1.ShootState, + namespace string, + extensionObj extensionsv1alpha1.Object, + resourceKind string, +) error { + var resourceRefs []autoscalingv1.CrossVersionObjectReference + if shootState.Spec.Extensions != nil { + resourceName := extensionObj.GetName() + purpose := extensionObj.GetExtensionSpec().GetExtensionPurpose() + list := gardencorev1alpha1helper.ExtensionResourceStateList(shootState.Spec.Extensions) + if extensionResourceState := list.Get(resourceKind, &resourceName, purpose); extensionResourceState != nil { + extensionStatus := extensionObj.GetExtensionStatus() + extensionStatus.SetState(extensionResourceState.State) + extensionStatus.SetResources(extensionResourceState.Resources) + + if err := c.Status().Update(ctx, extensionObj); err != nil { + return err + } + + for _, r := range extensionResourceState.Resources { + resourceRefs = append(resourceRefs, r.ResourceRef) + } + } + } + if shootState.Spec.Resources != nil { + list := gardencorev1alpha1helper.ResourceDataList(shootState.Spec.Resources) + for _, resourceRef := range resourceRefs { + resourceData := list.Get(&resourceRef) + if resourceData != nil { + obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(&resourceData.Data) + if err != nil { + return err + } + if err := utils.CreateOrUpdateObjectByRef(ctx, c, &resourceRef, namespace, obj); err != nil { + return err + } + } + } + } + return nil +} + +// MigrateExtensionCR adds the migrate operation annotation to the extension CR. +func MigrateExtensionCR( + ctx context.Context, + c client.Client, + newObjFunc func() extensionsv1alpha1.Object, + namespace string, + name string, +) error { + obj := newObjFunc() + obj.SetNamespace(namespace) + obj.SetName(name) + + if err := c.Get(ctx, client.ObjectKey{Namespace: namespace, Name: name}, obj); err != nil { + if client.IgnoreNotFound(err) == nil { + return nil + } + return err + } + + return AnnotateExtensionObjectWithOperation(ctx, c, obj, v1beta1constants.GardenerOperationMigrate) +} + +// MigrateExtensionCRs lists all extension resources of a given kind and annotates them with the Migrate operation. +func MigrateExtensionCRs( + ctx context.Context, + c client.Client, + listObj client.ObjectList, + newObjFunc func() extensionsv1alpha1.Object, + namespace string, +) error { + fns, err := applyFuncToExtensionResources(ctx, c, listObj, namespace, nil, func(ctx context.Context, o extensionsv1alpha1.Object) error { + return MigrateExtensionCR(ctx, c, newObjFunc, o.GetNamespace(), o.GetName()) + }) + + if err != nil { + return err + } + + return flow.Parallel(fns...)(ctx) +} + +// WaitUntilExtensionCRMigrated waits until the migrate operation for the extension resource is successful. +func WaitUntilExtensionCRMigrated( + ctx context.Context, + c client.Client, + newObjFunc func() extensionsv1alpha1.Object, + namespace string, + name string, + interval time.Duration, + timeout time.Duration, +) error { + obj := newObjFunc() + obj.SetNamespace(namespace) + obj.SetName(name) + + return retry.UntilTimeout(ctx, interval, timeout, func(ctx context.Context) (done bool, err error) { + if err := c.Get(ctx, client.ObjectKey{Namespace: namespace, Name: name}, obj); err != nil { + if client.IgnoreNotFound(err) == nil { + return retry.Ok() + } + return retry.SevereError(err) + } + + if extensionObjStatus := obj.GetExtensionStatus(); extensionObjStatus != nil { + if lastOperation := extensionObjStatus.GetLastOperation(); lastOperation != nil { + if lastOperation.Type == gardencorev1beta1.LastOperationTypeMigrate && lastOperation.State == gardencorev1beta1.LastOperationStateSucceeded { + return retry.Ok() + } + } + } + + var extensionType string + if extensionSpec := obj.GetExtensionSpec(); extensionSpec != nil { + extensionType = extensionSpec.GetExtensionType() + } + return retry.MinorError(fmt.Errorf("lastOperation for extension CR %s with name %s and type %s is not Migrate=Succeeded", obj.GetObjectKind().GroupVersionKind().Kind, name, extensionType)) + }) +} + +// WaitUntilExtensionCRsMigrated lists all extension resources of a given kind and waits until they are migrated +func WaitUntilExtensionCRsMigrated( + ctx context.Context, + c client.Client, + listObj client.ObjectList, + newObjFunc func() extensionsv1alpha1.Object, + namespace string, + interval time.Duration, + timeout time.Duration, +) error { + fns, err := applyFuncToExtensionResources(ctx, c, listObj, namespace, nil, func(ctx context.Context, object extensionsv1alpha1.Object) error { + return WaitUntilExtensionCRMigrated( + ctx, + c, + newObjFunc, + object.GetNamespace(), + object.GetName(), + interval, + timeout, + ) + }) + + if err != nil { + return err + } + + return flow.Parallel(fns...)(ctx) +} + +// AnnotateExtensionObjectWithOperation annotates the extension resource with the provided operation annotation value. +func AnnotateExtensionObjectWithOperation(ctx context.Context, c client.Client, extensionObj extensionsv1alpha1.Object, operation string) error { + extensionObjCopy := extensionObj.DeepCopyObject() + kutil.SetMetaDataAnnotation(extensionObj, v1beta1constants.GardenerOperation, operation) + kutil.SetMetaDataAnnotation(extensionObj, v1beta1constants.GardenerTimestamp, TimeNow().UTC().String()) + return c.Patch(ctx, extensionObj, client.MergeFrom(extensionObjCopy)) +} + +func applyFuncToExtensionResources( + ctx context.Context, + c client.Client, + listObj client.ObjectList, + namespace string, + predicateFunc func(obj extensionsv1alpha1.Object) bool, + applyFunc func(ctx context.Context, object extensionsv1alpha1.Object) error, +) ([]flow.TaskFn, error) { + if err := c.List(ctx, listObj, client.InNamespace(namespace)); err != nil { + return nil, err + } + + fns := make([]flow.TaskFn, 0, meta.LenList(listObj)) + + if err := meta.EachListItem(listObj, func(obj runtime.Object) error { + o, ok := obj.(extensionsv1alpha1.Object) + if !ok { + return fmt.Errorf("expected extensionsv1alpha1.Object but got %T", obj) + } + + if predicateFunc != nil && !predicateFunc(o) { + return nil + } + + fns = append(fns, func(ctx context.Context) error { + return applyFunc(ctx, o) + }) + + return nil + }); err != nil { + return nil, err + } + + return fns, nil +} + +func extensionKey(kind, namespace, name string) string { + return fmt.Sprintf("%s %s/%s", kind, namespace, name) +} + +func formatErrorMessage(message, description string) string { + return fmt.Sprintf("%s: %s", message, description) +} diff --git a/vendor/github.com/gardener/gardener/pkg/operation/common/managedresources.go b/vendor/github.com/gardener/gardener/pkg/operation/common/managedresources.go new file mode 100644 index 00000000..5b1bb545 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/operation/common/managedresources.go @@ -0,0 +1,106 @@ +// 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 common + +import ( + "context" + + "github.com/gardener/gardener-resource-manager/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +const ( + // ManagedResourceLabelKeyOrigin is a key for a label on a managed resource with the value 'origin'. + ManagedResourceLabelKeyOrigin = "origin" + // ManagedResourceLabelValueGardener is a value for a label on a managed resource with the value 'gardener'. + ManagedResourceLabelValueGardener = "gardener" + + // ManagedResourceSecretPrefix is the prefix that is used for secrets referenced by managed resources. + ManagedResourceSecretPrefix = "managedresource-" +) + +// DeployManagedResourceForShoot deploys a ManagedResource CR for the shoot's gardener-resource-manager. +func DeployManagedResourceForShoot(ctx context.Context, c client.Client, name, namespace string, keepObjects bool, data map[string][]byte) error { + return deployManagedResource(ctx, c, name, namespace, data, NewManagedResourceForShoot(c, name, namespace, keepObjects)) +} + +// DeleteManagedResourceForShoot deploys a ManagedResource CR for the shoot's gardener-resource-manager. +func DeleteManagedResourceForShoot(ctx context.Context, c client.Client, name, namespace string) error { + return deleteManagedResource(ctx, c, name, namespace, manager.NewManagedResource(c).WithNamespacedName(namespace, name)) +} + +// DeployManagedResourceForSeed deploys a ManagedResource CR for the seed's gardener-resource-manager. +func DeployManagedResourceForSeed(ctx context.Context, c client.Client, name, namespace string, keepObjects bool, data map[string][]byte) error { + return deployManagedResource(ctx, c, name, namespace, data, NewManagedResourceForSeed(c, name, namespace, keepObjects)) +} + +// DeleteManagedResourceForSeed deploys a ManagedResource CR for the seed's gardener-resource-manager. +func DeleteManagedResourceForSeed(ctx context.Context, c client.Client, name, namespace string) error { + return deleteManagedResource(ctx, c, name, namespace, manager.NewManagedResource(c).WithNamespacedName(namespace, name)) +} + +func deployManagedResource(ctx context.Context, c client.Client, name, namespace string, data map[string][]byte, managedResource *manager.ManagedResource) error { + secretName, secret := NewManagedResourceSecret(c, name, namespace) + + if err := secret.WithKeyValues(data).Reconcile(ctx); err != nil { + return err + } + + return managedResource.WithSecretRef(secretName).Reconcile(ctx) +} + +func deleteManagedResource(ctx context.Context, c client.Client, name, namespace string, managedResource *manager.ManagedResource) error { + _, secret := NewManagedResourceSecret(c, name, namespace) + + if err := managedResource.Delete(ctx); err != nil { + return err + } + return secret.Delete(ctx) +} + +// NewManagedResourceSecret constructs a new Secret object containing manifests managed by the Gardener-Resource-Manager +// which can be reconciled. +func NewManagedResourceSecret(c client.Client, name, namespace string) (string, *manager.Secret) { + secretName := ManagedResourceSecretName(name) + return secretName, manager.NewSecret(c).WithNamespacedName(namespace, secretName) +} + +// NewManagedResourceForShoot constructs a new ManagedResource object for the shoot's Gardener-Resource-Manager. +func NewManagedResourceForShoot(c client.Client, name, namespace string, keepObjects bool) *manager.ManagedResource { + var ( + injectedLabels = map[string]string{ShootNoCleanup: "true"} + labels = map[string]string{ManagedResourceLabelKeyOrigin: ManagedResourceLabelValueGardener} + ) + + return manager.NewManagedResource(c). + WithNamespacedName(namespace, name). + WithLabels(labels). + WithInjectedLabels(injectedLabels). + KeepObjects(keepObjects) +} + +// NewManagedResourceForSeed constructs a new ManagedResource object for the seed's Gardener-Resource-Manager. +func NewManagedResourceForSeed(c client.Client, name, namespace string, keepObjects bool) *manager.ManagedResource { + return manager.NewManagedResource(c). + WithNamespacedName(namespace, name). + WithClass("seed"). + KeepObjects(keepObjects) +} + +// ManagedResourceSecretName returns the name of a corev1.Scret for the given name of a +// resourcesv1alpha1.ManagedResource. +func ManagedResourceSecretName(managedResourceName string) string { + return ManagedResourceSecretPrefix + managedResourceName +} diff --git a/vendor/github.com/gardener/gardener/pkg/operation/common/network_policies.go b/vendor/github.com/gardener/gardener/pkg/operation/common/network_policies.go new file mode 100644 index 00000000..e3646545 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/operation/common/network_policies.go @@ -0,0 +1,118 @@ +// 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 common + +import ( + "net" +) + +// Private8BitBlock returns a private network (RFC1918) 10.0.0.0/8 IPv4 block +func Private8BitBlock() *net.IPNet { + return &net.IPNet{IP: net.IP{10, 0, 0, 0}, Mask: net.CIDRMask(8, 32)} +} + +// Private12BitBlock returns a private network (RFC1918) 172.16.0.0/12 IPv4 block +func Private12BitBlock() *net.IPNet { + return &net.IPNet{IP: net.IP{172, 16, 0, 0}, Mask: net.CIDRMask(12, 32)} +} + +// Private16BitBlock returns a private network (RFC1918) 192.168.0.0/16 IPv4 block +func Private16BitBlock() *net.IPNet { + return &net.IPNet{IP: net.IP{192, 168, 0, 0}, Mask: net.CIDRMask(16, 32)} +} + +// CarrierGradeNATBlock returns a Carrier-grade NAT (RFC6598) 100.64.0.0/10 IPv4 block +func CarrierGradeNATBlock() *net.IPNet { + return &net.IPNet{IP: net.IP{100, 64, 0, 0}, Mask: net.CIDRMask(10, 32)} +} + +// AllPrivateNetworkBlocks returns a list of all Private network (RFC1918) and +// Carrier-grade NAT (RFC6598) IPv4 blocks. +func AllPrivateNetworkBlocks() []net.IPNet { + return []net.IPNet{ + *Private8BitBlock(), + *Private12BitBlock(), + *Private16BitBlock(), + *CarrierGradeNATBlock(), + } +} + +// ToExceptNetworks returns a list of maps with `network` key containing one of `networks` +// and `except` key containgn list of `cidr` which are part of those CIDRs. +// +// Calling +// `ToExceptNetworks(AllPrivateNetworkBlocks(),"10.10.0.0/24","172.16.1.0/24","192.168.1.0/24","100.64.1.0/24")` +// produces: +// +// [ +// {"network": "10.0.0.0/8", "except": ["10.10.0.0/24"]}, +// {"network": "172.16.0.0/12", "except": ["172.16.1.0/24"]}, +// {"network": "192.168.0.0/16", "except": ["192.168.1.0/24"]}, +// {"network": "100.64.0.0/10", "except": ["100.64.1.0/24"]}, +// ] +func ToExceptNetworks(networks []net.IPNet, except ...string) ([]interface{}, error) { + result := []interface{}{} + + for _, n := range networks { + excluded, err := excludeBlock(&n, except...) + if err != nil { + return nil, err + } + + result = append(result, map[string]interface{}{ + "network": n.String(), + "except": excluded, + }) + } + return result, nil +} + +// ExceptNetworks returns a list of maps with `network` key containing one of `networks` +// and `except` key containgn list of `cidr` which are part of those CIDRs. +// +// Calling +// `ExceptNetworks([]garden.CIDR{"10.0.0.0/8","172.16.0.0/12"},"10.10.0.0/24","172.16.1.0/24")` +// produces: +// +// [ +// {"network": "10.0.0.0/8", "except": ["10.10.0.0/24"]}, +// {"network": "172.16.0.0/12", "except": ["172.16.1.0/24"]}, +// ] +func ExceptNetworks(networks []string, except ...string) ([]interface{}, error) { + ipNets := []net.IPNet{} + for _, n := range networks { + _, net, err := net.ParseCIDR(string(n)) + if err != nil { + return nil, err + } + ipNets = append(ipNets, *net) + } + return ToExceptNetworks(ipNets, except...) +} + +func excludeBlock(parentBlock *net.IPNet, cidrs ...string) ([]string, error) { + matchedCIDRs := []string{} + + for _, cidr := range cidrs { + ip, ipNet, err := net.ParseCIDR(string(cidr)) + if err != nil { + return matchedCIDRs, err + } + if parentBlock.Contains(ip) && !ipNet.Contains(parentBlock.IP) { + matchedCIDRs = append(matchedCIDRs, cidr) + } + } + return matchedCIDRs, nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/operation/common/types.go b/vendor/github.com/gardener/gardener/pkg/operation/common/types.go new file mode 100644 index 00000000..ef58fd15 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/operation/common/types.go @@ -0,0 +1,515 @@ +// 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 common + +import ( + "time" + + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + + "k8s.io/apimachinery/pkg/util/sets" +) + +const ( + // VPNTunnel dictates that VPN is used as a tunnel between seed and shoot networks. + VPNTunnel string = "vpn-shoot" + + // KonnectivityTunnel dictates that a konnectivity proxy is used as a tunnel between seed and shoot networks. + KonnectivityTunnel string = "konnectivity-agent" + + // BasicAuthSecretName is the name of the secret containing basic authentication credentials for the kube-apiserver. + BasicAuthSecretName = "kube-apiserver-basic-auth" + + // ChartPath is the path to the Helm charts. + ChartPath = "charts" + + // CloudConfigPrefix is a constant for the prefix which is added to secret storing the original cloud config (which + // is being downloaded from the cloud-config-downloader process) + CloudConfigPrefix = "cloud-config" + + // CloudConfigFilePath is the path on the shoot worker nodes to which the operating system specific configuration + // will be downloaded. + CloudConfigFilePath = "/var/lib/cloud-config-downloader/downloads/cloud_config" + + // CloudConfigChecksumSecretAnnotation is the key of an annotation on a Secret object whose value is the checksum of + // the cloud config user data stored in the data map of this Secret. + CloudConfigChecksumSecretAnnotation = "checksum/data-script" + + // CloudConfigChecksumNodeAnnotation is the key of an annotation on a shoot Node object whose value is the checksum + // of the last applied cloud config user data. + CloudConfigChecksumNodeAnnotation = "checksum/cloud-config-data" + + // ConfirmationDeletion is an annotation on a Shoot and Project resources whose value must be set to "true" in order to + // allow deleting the resource (if the annotation is not set any DELETE request will be denied). + ConfirmationDeletion = "confirmation.gardener.cloud/deletion" + + // ControllerManagerInternalConfigMapName is the name of the internal config map in which the Gardener controller + // manager stores its configuration. + ControllerManagerInternalConfigMapName = "gardener-controller-manager-internal-config" + + // DNSProvider is the key for an annotation on a Kubernetes Secret object whose value must point to a valid + // DNS provider. + DNSProvider = "dns.gardener.cloud/provider" + + // DNSDomain is the key for an annotation on a Kubernetes Secret object whose value must point to a valid + // domain name. + DNSDomain = "dns.gardener.cloud/domain" + + // DNSIncludeZones is the key for an annotation on a Kubernetes Secret object whose value must point to a list + // of zones that shall be included. + DNSIncludeZones = "dns.gardener.cloud/include-zones" + + // DNSExcludeZones is the key for an annotation on a Kubernetes Secret object whose value must point to a list + // of zones that shall be excluded. + DNSExcludeZones = "dns.gardener.cloud/exclude-zones" + + // EtcdEncryptionSecretName is the name of the shoot-specific secret which contains + // that shoot's EncryptionConfiguration. The EncryptionConfiguration contains a key + // which the shoot's apiserver uses for encrypting selected etcd content. + // Should match charts/seed-controlplane/charts/kube-apiserver/templates/deployment.yaml + EtcdEncryptionSecretName = "etcd-encryption-secret" + + // EtcdEncryptionSecretFileName is the name of the file within the EncryptionConfiguration + // which is made available as volume mount to the shoot's apiserver. + // Should match charts/seed-controlplane/charts/kube-apiserver/templates/deployment.yaml + EtcdEncryptionSecretFileName = "encryption-configuration.yaml" + + // EtcdEncryptionChecksumAnnotationName is the name of the annotation with which to annotate + // the EncryptionConfiguration secret to denote the checksum of the EncryptionConfiguration + // that was used when last rewriting secrets. + EtcdEncryptionChecksumAnnotationName = "shoot.gardener.cloud/etcd-encryption-configuration-checksum" + + // EtcdEncryptionChecksumLabelName is the name of the label which is added to the shoot + // secrets after rewriting them to ensure that successfully rewritten secrets are not + // (unnecessarily) rewritten during each reconciliation. + EtcdEncryptionChecksumLabelName = "shoot.gardener.cloud/etcd-encryption-configuration-checksum" + + // EtcdEncryptionForcePlaintextAnnotationName is the name of the annotation with which to annotate + // the EncryptionConfiguration secret to force the decryption of shoot secrets + EtcdEncryptionForcePlaintextAnnotationName = "shoot.gardener.cloud/etcd-encryption-force-plaintext-secrets" + + // EtcdEncryptionEncryptedResourceSecrets is the name of the secret resource to be encrypted + EtcdEncryptionEncryptedResourceSecrets = "secrets" + + // EtcdEncryptionKeyPrefix is the prefix for the key name of the EncryptionConfiguration's key + EtcdEncryptionKeyPrefix = "key" + + // EtcdEncryptionKeySecretLen is the expected length in bytes of the EncryptionConfiguration's key + EtcdEncryptionKeySecretLen = 32 + + // GardenerDeletionProtected is a label on CustomResourceDefinitions indicating that the deletion is protected, i.e. + // it must be confirmed with the `confirmation.gardener.cloud/deletion=true` annotation before a `DELETE` call + // is accepted. + GardenerDeletionProtected = "gardener.cloud/deletion-protected" + + // ETCDEncryptionConfigDataName is the name of ShootState data entry holding the current key and encryption state used to encrypt shoot resources + ETCDEncryptionConfigDataName = "etcdEncryptionConfiguration" + + // GardenRoleDefaultDomain is the value of the GardenRole key indicating type 'default-domain'. + GardenRoleDefaultDomain = "default-domain" + + // GardenRoleInternalDomain is the value of the GardenRole key indicating type 'internal-domain'. + GardenRoleInternalDomain = "internal-domain" + + // GardenRoleOpenVPNDiffieHellman is the value of the GardenRole key indicating type 'openvpn-diffie-hellman'. + GardenRoleOpenVPNDiffieHellman = "openvpn-diffie-hellman" + + // GardenRoleGlobalMonitoring is the value of the GardenRole key indicating type 'global-monitoring' + GardenRoleGlobalMonitoring = "global-monitoring" + + // GardenRoleAlerting is the value of GardenRole key indicating type 'alerting'. + GardenRoleAlerting = "alerting" + + // GardenRoleHvpa is the value of GardenRole key indicating type 'hvpa'. + GardenRoleHvpa = "hvpa" + + // GardenCreatedBy is the key for an annotation of a Shoot cluster whose value indicates contains the username + // of the user that created the resource. + GardenCreatedBy = "gardener.cloud/created-by" + + // GrafanaOperatorsPrefix is a constant for a prefix used for the operators Grafana instance. + GrafanaOperatorsPrefix = "go" + + // GrafanaUsersPrefix is a constant for a prefix used for the users Grafana instance. + GrafanaUsersPrefix = "gu" + + // GrafanaOperatorsRole is a constant for the operators role. + GrafanaOperatorsRole = "operators" + + // GrafanaUsersRole is a constant for the users role. + GrafanaUsersRole = "users" + + // PrometheusPrefix is a constant for a prefix used for the Prometheus instance. + PrometheusPrefix = "p" + + // AlertManagerPrefix is a constant for a prefix used for the AlertManager instance. + AlertManagerPrefix = "au" + + // IngressPrefix is the part of a FQDN which will be used to construct the domain name for an ingress controller of + // a Shoot cluster. For example, when a Shoot specifies domain 'cluster.example.com', the ingress domain would be + // '*..cluster.example.com'. + IngressPrefix = "ingress" + + // APIServerPrefix is the part of a FQDN which will be used to construct the domain name for the kube-apiserver of + // a Shoot cluster. For example, when a Shoot specifies domain 'cluster.example.com', the apiserver domain would be + // 'api.cluster.example.com'. + APIServerPrefix = "api" + + // InternalDomainKey is a key which must be present in an internal domain constructed for a Shoot cluster. If the + // configured internal domain already contains it, it won't be added twice. If it does not contain it, it will be + // appended. + InternalDomainKey = "internal" + + // KubeControllerManagerServerName is the name of the kube-controller-manager server. + KubeControllerManagerServerName = "kube-controller-manager-server" + + // KonnectivityServerCertName is the name of the api-proxy konnectivity-server + KonnectivityServerCertName = "konnectivity-server" + + // CoreDNSDeploymentName is the name of the coredns deployment. + CoreDNSDeploymentName = "coredns" + + // VPNShootDeploymentName is the name of the vpn-shoot deployment. + VPNShootDeploymentName = "vpn-shoot" + + // KubeProxyDaemonSetName is the name of the kube-proxy daemon set. + KubeProxyDaemonSetName = "kube-proxy" + + // NodeProblemDetectorDaemonSetName is the name of the node-problem-detector daemon set. + NodeProblemDetectorDaemonSetName = "node-problem-detector" + + // BlackboxExporterDeploymentName is the name of the blackbox-exporter deployment. + BlackboxExporterDeploymentName = "blackbox-exporter" + + // NodeExporterDaemonSetName is the name of the node-exporter daemon set. + NodeExporterDaemonSetName = "node-exporter" + + // KubecfgUsername is the username for the token used for the kubeconfig the shoot. + KubecfgUsername = "system:cluster-admin" + + // KubecfgSecretName is the name of the kubecfg secret. + KubecfgSecretName = "kubecfg" + + // DependencyWatchdogExternalProbeSecretName is the name of the kubecfg secret with internal DNS for external access. + DependencyWatchdogExternalProbeSecretName = "dependency-watchdog-external-probe" + + // DependencyWatchdogInternalProbeSecretName is the name of the kubecfg secret with cluster IP access. + DependencyWatchdogInternalProbeSecretName = "dependency-watchdog-internal-probe" + + // DependencyWatchdogUserName is the user name of the dependency-watchdog. + DependencyWatchdogUserName = "gardener.cloud:system:dependency-watchdog" + + // KubeAPIServerHealthCheck is a key for the kube-apiserver-health-check user. + KubeAPIServerHealthCheck = "kube-apiserver-health-check" + + // StaticTokenSecretName is the name of the secret containing static tokens for the kube-apiserver. + StaticTokenSecretName = "static-token" + + // VPASecretName is the name of the secret used by VPA + VPASecretName = "vpa-tls-certs" + + // ProjectPrefix is the prefix of namespaces representing projects. + ProjectPrefix = "garden-" + + // ProjectName is the key of a label on namespaces whose value holds the project name. + ProjectName = "project.gardener.cloud/name" + + // ProjectSkipStaleCheck is the key of an annotation on a project namespace that marks the associated Project to be + // skipped by the stale project controller. If the project has already configured stale timestamps in its status + // then they will be reset. + ProjectSkipStaleCheck = "project.gardener.cloud/skip-stale-check" + + // NamespaceProject is the key of an annotation on namespace whose value holds the project uid. + NamespaceProject = "namespace.gardener.cloud/project" + + // NamespaceKeepAfterProjectDeletion is a constant for an annotation on a `Namespace` resource that states that it + // should not be deleted if the corresponding `Project` gets deleted. Please note that all project related labels + // from the namespace will be removed when the project is being deleted. + NamespaceKeepAfterProjectDeletion = "namespace.gardener.cloud/keep-after-project-deletion" + + // ShootAlphaScalingAPIServerClass is a constant for an annotation on the shoot stating the initial API server class. + // It influences the size of the initial resource requests/limits. + // Possible values are [small, medium, large, xlarge, 2xlarge]. + // Note that this annotation is alpha and can be removed anytime without further notice. Only use it if you know + // what you do. + ShootAlphaScalingAPIServerClass = "alpha.kube-apiserver.scaling.shoot.gardener.cloud/class" + + // ShootExpirationTimestamp is an annotation on a Shoot resource whose value represents the time when the Shoot lifetime + // is expired. The lifetime can be extended, but at most by the minimal value of the 'clusterLifetimeDays' property + // of referenced quotas. + ShootExpirationTimestamp = "shoot.gardener.cloud/expiration-timestamp" + + // ShootNoCleanup is a constant for a label on a resource indicating that the Gardener cleaner should not delete this + // resource when cleaning a shoot during the deletion flow. + ShootNoCleanup = "shoot.gardener.cloud/no-cleanup" + + // ShootStatus is a constant for a label on a Shoot resource indicating that the Shoot's health. + ShootStatus = "shoot.gardener.cloud/status" + + // ShootOperationMaintain is a constant for an annotation on a Shoot indicating that the Shoot maintenance shall be executed as soon as + // possible. + ShootOperationMaintain = "maintain" + + // FailedShootNeedsRetryOperation is a constant for an annotation on a Shoot in a failed state indicating that a retry operation should be triggered during the next maintenance time window. + FailedShootNeedsRetryOperation = "maintenance.shoot.gardener.cloud/needs-retry-operation" + + // 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" + + // ShootTasks is a constant for an annotation on a Shoot which states that certain tasks should be done. + ShootTasks = "shoot.gardener.cloud/tasks" + + // ShootTaskDeployInfrastructure is a name for a Shoot's infrastructure deployment task. It indicates that the + // Infrastructure extension resource shall be reconciled. + ShootTaskDeployInfrastructure = "deployInfrastructure" + + // ShootTaskRestartControlPlanePods is a name for a Shoot task which is dedicated to restart related control plane pods. + ShootTaskRestartControlPlanePods = "restartControlPlanePods" + + // ShootOperationRetry is a constant for an annotation on a Shoot indicating that a failed Shoot reconciliation shall be retried. + ShootOperationRetry = "retry" + + // ShootOperationReconcile is a constant for an annotation on a Shoot indicating that a Shoot reconciliation shall be triggered. + ShootOperationReconcile = "reconcile" + + // ShootSyncPeriod is a constant for an annotation on a Shoot which may be used to overwrite the global Shoot controller sync period. + // The value must be a duration. It can also be used to disable the reconciliation at all by setting it to 0m. Disabling the reconciliation + // does only mean that the period reconciliation is disabled. However, when the Gardener is restarted/redeployed or the specification is + // changed then the reconciliation flow will be executed. + ShootSyncPeriod = "shoot.gardener.cloud/sync-period" + + // ShootIgnore is a constant for an annotation on a Shoot which may be used to tell the Gardener that the Shoot with this name should be + // ignored completely. That means that the Shoot will never reach the reconciliation flow (independent of the operation (create/update/ + // delete)). + ShootIgnore = "shoot.gardener.cloud/ignore" + + // ManagedResourceShootCoreName is the name of the shoot core managed resource. + ManagedResourceShootCoreName = "shoot-core" + + // ManagedResourceAddonsName is the name of the addons managed resource. + ManagedResourceAddonsName = "addons" + + // GardenerResourceManagerImageName is the name of the GardenerResourceManager image. + GardenerResourceManagerImageName = "gardener-resource-manager" + + // GardenerSeedAdmissionControllerImageName is the name of the GardenerSeedAdmissionController image. + GardenerSeedAdmissionControllerImageName = "gardener-seed-admission-controller" + + // CoreDNSImageName is the name of the CoreDNS image. + CoreDNSImageName = "coredns" + + // NodeLocalDNSImageName is the name of the node-local-dns image. + NodeLocalDNSImageName = "node-local-dns" + + // NodeProblemDetectorImageName is the name of the node-problem-detector image. + NodeProblemDetectorImageName = "node-problem-detector" + + // KubeAPIServerImageName is the name of the kube-apiserver image. + KubeAPIServerImageName = "kube-apiserver" + + // KubeControllerManagerImageName is the name of the kube-controller-manager image. + KubeControllerManagerImageName = "kube-controller-manager" + + // KubeSchedulerImageName is the name of the kube-scheduler image. + KubeSchedulerImageName = "kube-scheduler" + + // KubeProxyImageName is the name of the kube-proxy image. + KubeProxyImageName = "kube-proxy" + + // HyperkubeImageName is the name of the hyperkube image (used for kubectl + kubelet on the worker nodes). + HyperkubeImageName = "hyperkube" + + // MetricsServerImageName is the name of the MetricsServer image. + MetricsServerImageName = "metrics-server" + + // VPNShootImageName is the name of the VPNShoot image. + VPNShootImageName = "vpn-shoot" + + // VPNSeedImageName is the name of the VPNSeed image. + VPNSeedImageName = "vpn-seed" + + // KonnectivityServerImageName is the name of the konnectivity server image. + KonnectivityServerImageName = "konnectivity-server" + + // KonnectivityServerUserName is the user name of the konnectivity server used for the token + KonnectivityServerUserName = "system:konnectivity-server" + + // KonnectivityServerKubeconfig is the name of the konnectivity-server kubeconfig + KonnectivityServerKubeconfig = "konnectivity-server-kubeconfig" + + // KonnectivityAgentImageName is the name of the konnectivity agent image. + KonnectivityAgentImageName = "konnectivity-agent" + + // NodeExporterImageName is the name of the NodeExporter image. + NodeExporterImageName = "node-exporter" + + // KubernetesDashboardImageName is the name of the kubernetes-dashboard image. + KubernetesDashboardImageName = "kubernetes-dashboard" + + // KubernetesDashboardMetricsScraperImageName is the name of the kubernetes-dashboard-metrics-scraper image. + KubernetesDashboardMetricsScraperImageName = "kubernetes-dashboard-metrics-scraper" + + // BusyboxImageName is the name of the Busybox image. + BusyboxImageName = "busybox" + + // NginxIngressControllerImageName is the name of the NginxIngressController image. + NginxIngressControllerImageName = "nginx-ingress-controller" + + // NginxIngressControllerSeedImageName is the name of the NginxIngressController image. + NginxIngressControllerSeedImageName = "nginx-ingress-controller-seed" + + // IngressDefaultBackendImageName is the name of the IngressDefaultBackend image. + IngressDefaultBackendImageName = "ingress-default-backend" + + // ClusterAutoscalerImageName is the name of the ClusterAutoscaler image. + ClusterAutoscalerImageName = "cluster-autoscaler" + + // AlertManagerImageName is the name of the AlertManager image. + AlertManagerImageName = "alertmanager" + + // ConfigMapReloaderImageName is the name of the ConfigMapReloader image. + ConfigMapReloaderImageName = "configmap-reloader" + + // GrafanaImageName is the name of the Grafana image. + GrafanaImageName = "grafana" + + // PrometheusImageName is the name of the Prometheus image. + PrometheusImageName = "prometheus" + + // BlackboxExporterImageName is the name of the BlackboxExporter image. + BlackboxExporterImageName = "blackbox-exporter" + + // KubeStateMetricsImageName is the name of the KubeStateMetrics image. + KubeStateMetricsImageName = "kube-state-metrics" + + // EtcdDruidImageName is the name of Etcd Druid image + EtcdDruidImageName = "etcd-druid" + + // PauseContainerImageName is the name of the PauseContainer image. + PauseContainerImageName = "pause-container" + + // LokiImageName is the name of the Loki image used for logging + LokiImageName = "loki" + + // FluentBitImageName is the image of Fluent-bit image + FluentBitImageName = "fluent-bit" + + // FluentBitPluginInstaller is the image of Fluent-bit plugin installer image + FluentBitPluginInstaller = "fluent-bit-plugin-installer" + + // AlpineImageName is the name of alpine image + AlpineImageName = "alpine" + + // AlpineIptablesImageName is the name of the alpine image with pre-installed iptable rules + AlpineIptablesImageName = "alpine-iptables" + + // SeedSpecHash is a constant for a label on `ControllerInstallation`s (similar to `pod-template-hash` on `Pod`s). + SeedSpecHash = "seed-spec-hash" + + // RegistrationSpecHash is a constant for a label on `ControllerInstallation`s (similar to `pod-template-hash` on `Pod`s). + RegistrationSpecHash = "registration-spec-hash" + + // VpaAdmissionControllerImageName is the name of the vpa-admission-controller image + VpaAdmissionControllerImageName = "vpa-admission-controller" + // VpaRecommenderImageName is the name of the vpa-recommender image + VpaRecommenderImageName = "vpa-recommender" + // VpaUpdaterImageName is the name of the vpa-updater image + VpaUpdaterImageName = "vpa-updater" + // VpaExporterImageName is the name of the vpa-exporter image + VpaExporterImageName = "vpa-exporter" + // VpaAdmissionControllerName is the name of the vpa-admission-controller name. + VpaAdmissionControllerName = "gardener.cloud:vpa:admission-controller" + // VpaRecommenderName is the name of the vpa-recommender name. + VpaRecommenderName = "gardener.cloud:vpa:recommender" + // VpaUpdaterName is the name of the vpa-updater name. + VpaUpdaterName = "gardener.cloud:vpa:updater" + // VpaExporterName is the name of the vpa-exporter name. + VpaExporterName = "gardener.cloud:vpa:exporter" + + // HvpaControllerImageName is the name of the hvpa-controller image + HvpaControllerImageName = "hvpa-controller" + + // DependencyWatchdogImageName is the name of the dependency-watchdog image + DependencyWatchdogImageName = "dependency-watchdog" + + // IstioProxyImageName is the image of Istio proxy image + IstioProxyImageName = "istio-proxy" + + // IstioIstiodImageName is the image of Istio istiod image + IstioIstiodImageName = "istio-istiod" + + // IstioNamespace is the istio-system namespace + IstioNamespace = "istio-system" + + // APIServerProxyImageName is the image of apiserver-proxy + APIServerProxyImageName = "apiserver-proxy" + + // APIServerProxySidecarImageName is the image of apiserver-proxy sidecar. + APIServerProxySidecarImageName = "apiserver-proxy-sidecar" + + // APIServerProxyPodMutatorWebhookImageName is the image of apiserver-proxy pod mutator webhook. + APIServerProxyPodMutatorWebhookImageName = "apiserver-proxy-pod-webhook" + + // ServiceAccountSigningKeySecretDataKey is the data key of a signing key Kubernetes secret. + ServiceAccountSigningKeySecretDataKey = "signing-key" + + // ControlPlaneWildcardCert is the value of the GardenRole key indicating type 'controlplane-cert'. + // It refers to a wildcard tls certificate which can be used for services exposed under the corresponding domain. + ControlPlaneWildcardCert = "controlplane-cert" + + // AlertManagerTLS is the name of the secret resource which holds the TLS certificate for Alert Manager. + AlertManagerTLS = "alertmanager-tls" + // GrafanaTLS is the name of the secret resource which holds the TLS certificate for Grafana. + GrafanaTLS = "grafana-tls" + // PrometheusTLS is the name of the secret resource which holds the TLS certificate for Prometheus. + PrometheusTLS = "prometheus-tls" + + // EndUserCrtValidity is the time period a user facing certificate is valid. + EndUserCrtValidity = 730 * 24 * time.Hour // ~2 years, see https://support.apple.com/en-us/HT210176 + + // ShootDNSIngressName is a constant for the DNS resources used for the shoot ingress addon. + ShootDNSIngressName = "ingress" +) + +var ( + // RequiredControlPlaneDeployments is a set of the required shoot control plane deployments + // running in the seed. + RequiredControlPlaneDeployments = sets.NewString( + v1beta1constants.DeploymentNameGardenerResourceManager, + v1beta1constants.DeploymentNameKubeAPIServer, + v1beta1constants.DeploymentNameKubeControllerManager, + v1beta1constants.DeploymentNameKubeScheduler, + ) + + // RequiredControlPlaneEtcds is a set of the required shoot control plane etcds + // running in the seed. + RequiredControlPlaneEtcds = sets.NewString( + v1beta1constants.ETCDMain, + v1beta1constants.ETCDEvents, + ) + + // RequiredMonitoringSeedDeployments is a set of the required seed monitoring deployments. + RequiredMonitoringSeedDeployments = sets.NewString( + v1beta1constants.DeploymentNameGrafanaOperators, + v1beta1constants.DeploymentNameGrafanaUsers, + v1beta1constants.DeploymentNameKubeStateMetricsShoot, + ) + + // RequiredLoggingStatefulSets is a set of the required logging stateful sets. + RequiredLoggingStatefulSets = sets.NewString( + v1beta1constants.StatefulSetNameLoki, + ) +) diff --git a/vendor/github.com/gardener/gardener/pkg/operation/common/utils.go b/vendor/github.com/gardener/gardener/pkg/operation/common/utils.go new file mode 100644 index 00000000..6aa88875 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/operation/common/utils.go @@ -0,0 +1,774 @@ +// 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 common + +import ( + "context" + "errors" + "fmt" + "math/big" + "net" + "reflect" + "regexp" + "strconv" + "strings" + "time" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + gardencorelisters "github.com/gardener/gardener/pkg/client/core/listers/core/v1beta1" + "github.com/gardener/gardener/pkg/client/kubernetes" + "github.com/gardener/gardener/pkg/utils" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + "github.com/gardener/gardener/pkg/version" + hvpav1alpha1 "github.com/gardener/hvpa-controller/api/v1alpha1" + + admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + extensionsv1beta1 "k8s.io/api/extensions/v1beta1" + networkingv1 "k8s.io/api/networking/v1" + rbacv1 "k8s.io/api/rbac/v1" + schedulingv1 "k8s.io/api/scheduling/v1" + schedulingv1beta1 "k8s.io/api/scheduling/v1beta1" + apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/types" + autoscalingv1beta2 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1beta2" + "k8s.io/client-go/util/retry" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// TimeNow returns the current time. Exposed for testing. +var TimeNow = time.Now + +// GetSecretKeysWithPrefix returns a list of keys of the given map which are prefixed with . +func GetSecretKeysWithPrefix(kind string, m map[string]*corev1.Secret) []string { + var result []string + for key := range m { + if strings.HasPrefix(key, kind) { + result = append(result, key) + } + } + return result +} + +// ComputeOffsetIP parses the provided and offsets with the value of . +// For example, = 100.64.0.0/11 and = 10 the result would be 100.64.0.10 +// IPv6 and IPv4 is supported. +func ComputeOffsetIP(subnet *net.IPNet, offset int64) (net.IP, error) { + if subnet == nil { + return nil, fmt.Errorf("subnet is nil") + } + + isIPv6 := false + + bytes := subnet.IP.To4() + if bytes == nil { + isIPv6 = true + bytes = subnet.IP.To16() + } + + ip := net.IP(big.NewInt(0).Add(big.NewInt(0).SetBytes(bytes), big.NewInt(offset)).Bytes()) + + if !subnet.Contains(ip) { + return nil, fmt.Errorf("cannot compute IP with offset %d - subnet %q too small", offset, subnet) + } + + // there is no broadcast address on IPv6 + if isIPv6 { + return ip, nil + } + + for i := range ip { + // IP address is not the same, so it's not the broadcast ip. + if ip[i] != ip[i]|^subnet.Mask[i] { + return ip.To4(), nil + } + } + + return nil, fmt.Errorf("computed IPv4 address %q is broadcast for subnet %q", ip, subnet) +} + +// GenerateAddonConfig returns the provided in case is true. Otherwise, nil is +// being returned. +func GenerateAddonConfig(values map[string]interface{}, enabled bool) map[string]interface{} { + v := map[string]interface{}{ + "enabled": enabled, + } + if enabled { + for key, value := range values { + v[key] = value + } + } + return v +} + +// GenerateBackupEntryName returns BackupEntry resource name created from provided and . +func GenerateBackupEntryName(seedNamespace string, shootUID types.UID) string { + return fmt.Sprintf("%s--%s", seedNamespace, shootUID) +} + +// ExtractShootDetailsFromBackupEntryName returns Shoot resource technicalID its UID from provided . +func ExtractShootDetailsFromBackupEntryName(backupEntryName string) (shootTechnicalID, shootUID string) { + tokens := strings.Split(backupEntryName, "--") + shootUID = tokens[len(tokens)-1] + shootTechnicalID = strings.TrimSuffix(backupEntryName, shootUID) + shootTechnicalID = strings.TrimSuffix(shootTechnicalID, "--") + return shootTechnicalID, shootUID +} + +// IsFollowingNewNamingConvention determines whether the new naming convention followed for shoot resources. +// TODO: Remove this and use only "--" as separator, once we have all shoots deployed as per new naming conventions. +func IsFollowingNewNamingConvention(seedNamespace string) bool { + return len(strings.Split(seedNamespace, "--")) > 2 +} + +// ReplaceCloudProviderConfigKey replaces a key with the new value in the given cloud provider config. +func ReplaceCloudProviderConfigKey(cloudProviderConfig, separator, key, value string) string { + keyValueRegexp := regexp.MustCompile(fmt.Sprintf(`(\Q%s\E%s)([^\n]*)`, key, separator)) + return keyValueRegexp.ReplaceAllString(cloudProviderConfig, fmt.Sprintf(`${1}%q`, strings.Replace(value, `$`, `$$`, -1))) +} + +// ProjectForNamespace returns the project object responsible for a given . +// It tries to identify the project object by looking for the namespace name in the project spec. +func ProjectForNamespace(projectLister gardencorelisters.ProjectLister, namespaceName string) (*gardencorev1beta1.Project, error) { + projectList, err := projectLister.List(labels.Everything()) + if err != nil { + return nil, err + } + + var projects []gardencorev1beta1.Project + for _, p := range projectList { + projects = append(projects, *p) + } + + return projectForNamespace(projects, namespaceName) +} + +// ProjectForNamespaceWithClient returns the project object responsible for a given . +// It tries to identify the project object by looking for the namespace name in the project spec. +func ProjectForNamespaceWithClient(ctx context.Context, c client.Client, namespaceName string) (*gardencorev1beta1.Project, error) { + projectList := &gardencorev1beta1.ProjectList{} + err := c.List(ctx, projectList) + if err != nil { + return nil, err + } + + return projectForNamespace(projectList.Items, namespaceName) +} + +func projectForNamespace(projects []gardencorev1beta1.Project, namespaceName string) (*gardencorev1beta1.Project, error) { + for _, project := range projects { + if project.Spec.Namespace != nil && *project.Spec.Namespace == namespaceName { + return &project, nil + } + } + + return nil, apierrors.NewNotFound(gardencorev1beta1.Resource("Project"), fmt.Sprintf("for namespace %s", namespaceName)) +} + +// ProjectNameForNamespace determines the project name for a given . It tries to identify it first per the namespace's ownerReferences. +// If it doesn't help then it will check whether the project name is a label on the namespace object. If it doesn't help then the name can be inferred +// from the namespace name in case it is prefixed with the project prefix. If none of those approaches the namespace name itself is returned as project +// name. +func ProjectNameForNamespace(namespace *corev1.Namespace) string { + for _, ownerReference := range namespace.OwnerReferences { + if ownerReference.Kind == "Project" { + return ownerReference.Name + } + } + + if name, ok := namespace.Labels[ProjectName]; ok { + return name + } + + if nameSplit := strings.Split(namespace.Name, ProjectPrefix); len(nameSplit) > 1 { + return nameSplit[1] + } + + return namespace.Name +} + +// GardenerDeletionGracePeriod is the default grace period for Gardener's force deletion methods. +var GardenerDeletionGracePeriod = 5 * time.Minute + +// ShouldObjectBeRemoved determines whether the given object should be gone now. +// This is calculated by first checking the deletion timestamp of an object: If the deletion timestamp +// is unset, the object should not be removed - i.e. this returns false. +// Otherwise, it is checked whether the deletionTimestamp is before the current time minus the +// grace period. +func ShouldObjectBeRemoved(obj metav1.Object, gracePeriod time.Duration) bool { + deletionTimestamp := obj.GetDeletionTimestamp() + if deletionTimestamp == nil { + return false + } + + return deletionTimestamp.Time.Before(time.Now().Add(-gracePeriod)) +} + +// DeleteHvpa delete all resources required for the HVPA in the given namespace. +func DeleteHvpa(ctx context.Context, k8sClient kubernetes.Interface, namespace string) error { + if k8sClient == nil { + return fmt.Errorf("require kubernetes client") + } + + listOptions := metav1.ListOptions{ + LabelSelector: fmt.Sprintf("%s=%s", v1beta1constants.GardenRole, GardenRoleHvpa), + } + + // Delete all CRDs with label "gardener.cloud/role=hvpa" + // Workaround: Due to https://github.com/gardener/gardener/issues/2257, we first list the HVPA CRDs and then remove + // them one by one. + crdList, err := k8sClient.APIExtension().ApiextensionsV1beta1().CustomResourceDefinitions().List(ctx, listOptions) + if err != nil { + return err + } + for _, crd := range crdList.Items { + if err := k8sClient.APIExtension().ApiextensionsV1beta1().CustomResourceDefinitions().Delete(ctx, crd.Name, metav1.DeleteOptions{}); client.IgnoreNotFound(err) != nil { + return err + } + } + + // Delete all Deployments with label "gardener.cloud/role=hvpa" + deletePropagation := metav1.DeletePropagationForeground + if err := k8sClient.Kubernetes().AppsV1().Deployments(namespace).DeleteCollection(ctx, metav1.DeleteOptions{PropagationPolicy: &deletePropagation}, listOptions); client.IgnoreNotFound(err) != nil { + return err + } + + // Delete all ClusterRoles with label "gardener.cloud/role=hvpa" + if err := k8sClient.Kubernetes().RbacV1().ClusterRoles().DeleteCollection(ctx, metav1.DeleteOptions{}, listOptions); client.IgnoreNotFound(err) != nil { + return err + } + + // Delete all ClusterRoleBindings with label "gardener.cloud/role=hvpa" + if err := k8sClient.Kubernetes().RbacV1().ClusterRoleBindings().DeleteCollection(ctx, metav1.DeleteOptions{}, listOptions); client.IgnoreNotFound(err) != nil { + return err + } + + // Delete all ServiceAccounts with label "gardener.cloud/role=hvpa" + if err := k8sClient.Kubernetes().CoreV1().ServiceAccounts(namespace).DeleteCollection(ctx, metav1.DeleteOptions{}, listOptions); client.IgnoreNotFound(err) != nil { + return err + } + + return nil +} + +// DeleteVpa delete all resources required for the VPA in the given namespace. +func DeleteVpa(ctx context.Context, c client.Client, namespace string, isShoot bool) error { + resources := []client.Object{ + &appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: v1beta1constants.DeploymentNameVPAAdmissionController, Namespace: namespace}}, + &appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: v1beta1constants.DeploymentNameVPARecommender, Namespace: namespace}}, + &appsv1.Deployment{ObjectMeta: metav1.ObjectMeta{Name: v1beta1constants.DeploymentNameVPAUpdater, Namespace: namespace}}, + &corev1.Service{ObjectMeta: metav1.ObjectMeta{Name: "vpa-webhook", Namespace: namespace}}, + &autoscalingv1beta2.VerticalPodAutoscaler{ObjectMeta: metav1.ObjectMeta{Name: v1beta1constants.DeploymentNameVPAAdmissionController, Namespace: namespace}}, + &autoscalingv1beta2.VerticalPodAutoscaler{ObjectMeta: metav1.ObjectMeta{Name: v1beta1constants.DeploymentNameVPARecommender, Namespace: namespace}}, + &autoscalingv1beta2.VerticalPodAutoscaler{ObjectMeta: metav1.ObjectMeta{Name: v1beta1constants.DeploymentNameVPAUpdater, Namespace: namespace}}, + } + + if isShoot { + resources = append(resources, + &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "vpa-admission-controller", Namespace: namespace}}, + &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "vpa-recommender", Namespace: namespace}}, + &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: VPASecretName, Namespace: namespace}}, + &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: "vpa-updater", Namespace: namespace}}, + &networkingv1.NetworkPolicy{ObjectMeta: metav1.ObjectMeta{Name: "allow-kube-apiserver-to-vpa-admission-controller", Namespace: namespace}}, + ) + } else { + resources = append(resources, + &rbacv1.ClusterRole{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:actor"}}, + &rbacv1.ClusterRole{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:admission-controller"}}, + &rbacv1.ClusterRole{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:checkpoint-actor"}}, + &rbacv1.ClusterRole{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:metrics-reader"}}, + &rbacv1.ClusterRole{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:target-reader"}}, + &rbacv1.ClusterRole{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:evictioner"}}, + &rbacv1.ClusterRoleBinding{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:actor"}}, + &rbacv1.ClusterRoleBinding{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:admission-controller"}}, + &rbacv1.ClusterRoleBinding{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:checkpoint-actor"}}, + &rbacv1.ClusterRoleBinding{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:metrics-reader"}}, + &rbacv1.ClusterRoleBinding{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:target-reader"}}, + &rbacv1.ClusterRoleBinding{ObjectMeta: metav1.ObjectMeta{Name: "gardener.cloud:vpa:seed:evictioner"}}, + &corev1.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Name: "vpa-admission-controller", Namespace: namespace}}, + &corev1.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Name: "vpa-recommender", Namespace: namespace}}, + &corev1.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Name: "vpa-updater", Namespace: namespace}}, + &admissionregistrationv1beta1.MutatingWebhookConfiguration{ObjectMeta: metav1.ObjectMeta{Name: "vpa-webhook-config-seed"}}, + ) + } + + for _, resource := range resources { + if err := c.Delete(ctx, resource); client.IgnoreNotFound(err) != nil { + return err + } + } + return nil +} + +// DeleteShootLoggingStack deletes all shoot resource of the logging stack in the given namespace. +func DeleteShootLoggingStack(ctx context.Context, k8sClient client.Client, namespace string) error { + return DeleteLoki(ctx, k8sClient, namespace) +} + +// DeleteLoki deletes all resources of the Loki in a given namespace. +func DeleteLoki(ctx context.Context, k8sClient client.Client, namespace string) error { + resources := []client.Object{ + &networkingv1.NetworkPolicy{ObjectMeta: metav1.ObjectMeta{Name: "allow-loki", Namespace: namespace}}, + &networkingv1.NetworkPolicy{ObjectMeta: metav1.ObjectMeta{Name: "allow-to-loki", Namespace: namespace}}, + &hvpav1alpha1.Hvpa{ObjectMeta: metav1.ObjectMeta{Name: "loki", Namespace: namespace}}, + &corev1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Name: "loki-config", Namespace: namespace}}, + &corev1.Service{ObjectMeta: metav1.ObjectMeta{Name: "loki", Namespace: namespace}}, + &corev1.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Name: "loki", Namespace: namespace}}, + &appsv1.StatefulSet{ObjectMeta: metav1.ObjectMeta{Name: "loki", Namespace: namespace}}, + &corev1.PersistentVolumeClaim{ObjectMeta: metav1.ObjectMeta{Name: "loki-loki-0", Namespace: namespace}}, + } + + for _, resource := range resources { + if err := k8sClient.Delete(ctx, resource); client.IgnoreNotFound(err) != nil && !meta.IsNoMatchError(err) { + return err + } + } + return nil +} + +// DeleteSeedLoggingStack deletes all seed resource of the logging stack in the garden namespace. +func DeleteSeedLoggingStack(ctx context.Context, k8sClient client.Client) error { + resources := []client.Object{ + &corev1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Name: "fluent-bit-config", Namespace: v1beta1constants.GardenNamespace}}, + &appsv1.DaemonSet{ObjectMeta: metav1.ObjectMeta{Name: "fluent-bit", Namespace: v1beta1constants.GardenNamespace}}, + &networkingv1.NetworkPolicy{ObjectMeta: metav1.ObjectMeta{Name: "allow-fluentbit", Namespace: v1beta1constants.GardenNamespace}}, + &schedulingv1.PriorityClass{ObjectMeta: metav1.ObjectMeta{Name: "fluent-bit"}}, + &rbacv1.ClusterRole{ObjectMeta: metav1.ObjectMeta{Name: "fluent-bit-read"}}, + &rbacv1.ClusterRoleBinding{ObjectMeta: metav1.ObjectMeta{Name: "fluent-bit-read"}}, + &corev1.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Name: "fluent-bit", Namespace: v1beta1constants.GardenNamespace}}, + &corev1.Service{ObjectMeta: metav1.ObjectMeta{Name: "fluent-bit", Namespace: v1beta1constants.GardenNamespace}}, + } + + for _, resource := range resources { + if err := k8sClient.Delete(ctx, resource); client.IgnoreNotFound(err) != nil && !meta.IsNoMatchError(err) { + return err + } + } + + return DeleteLoki(ctx, k8sClient, v1beta1constants.GardenNamespace) +} + +// GetContainerResourcesInStatefulSet returns the containers resources in StatefulSet +func GetContainerResourcesInStatefulSet(ctx context.Context, k8sClient client.Client, key client.ObjectKey) ([]*corev1.ResourceRequirements, error) { + statefulSet := &appsv1.StatefulSet{} + resourcesPerContainer := make([]*corev1.ResourceRequirements, 0) + if err := k8sClient.Get(ctx, key, statefulSet); client.IgnoreNotFound(err) != nil { + return nil, err + } else if !apierrors.IsNotFound(err) { + for _, container := range statefulSet.Spec.Template.Spec.Containers { + resourcesPerContainer = append(resourcesPerContainer, container.Resources.DeepCopy()) + } + return resourcesPerContainer, nil + } + + // Use the default resources defined in values file + return nil, nil +} + +// DeleteReserveExcessCapacity deletes the deployment and priority class for excess capacity +func DeleteReserveExcessCapacity(ctx context.Context, k8sClient client.Client) error { + if k8sClient == nil { + return errors.New("must provide non-nil kubernetes client to common.DeleteReserveExcessCapacity") + } + + deploy := &appsv1.Deployment{ + ObjectMeta: metav1.ObjectMeta{ + Name: "reserve-excess-capacity", + Namespace: v1beta1constants.GardenNamespace, + }, + } + if err := k8sClient.Delete(ctx, deploy); client.IgnoreNotFound(err) != nil { + return err + } + + priorityClass := &schedulingv1beta1.PriorityClass{ + ObjectMeta: metav1.ObjectMeta{ + Name: "gardener-reserve-excess-capacity", + }, + } + return client.IgnoreNotFound(k8sClient.Delete(ctx, priorityClass)) +} + +// DeleteAlertmanager deletes all resources of the Alertmanager in a given namespace. +func DeleteAlertmanager(ctx context.Context, k8sClient client.Client, namespace string) error { + objs := []client.Object{ + &appsv1.StatefulSet{ + ObjectMeta: metav1.ObjectMeta{ + Name: v1beta1constants.StatefulSetNameAlertManager, + Namespace: namespace, + }, + }, + &extensionsv1beta1.Ingress{ + ObjectMeta: metav1.ObjectMeta{ + Name: "alertmanager", + Namespace: namespace, + }, + }, + &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: "alertmanager-client", + Namespace: namespace, + }, + }, + &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + Name: "alertmanager", + Namespace: namespace, + }, + }, + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "alertmanager-basic-auth", + Namespace: namespace, + }, + }, + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: AlertManagerTLS, + Namespace: namespace, + }, + }, + &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "alertmanager-config", + Namespace: namespace, + }, + }, + &corev1.PersistentVolumeClaim{ + ObjectMeta: metav1.ObjectMeta{ + Name: "alertmanager-db-alertmanager-0", + Namespace: namespace, + }, + }, + } + + return kutil.DeleteObjects(ctx, k8sClient, objs...) +} + +// DeleteGrafanaByRole deletes the monitoring stack for the shoot owner. +func DeleteGrafanaByRole(ctx context.Context, k8sClient kubernetes.Interface, namespace, role string) error { + if k8sClient == nil { + return fmt.Errorf("require kubernetes client") + } + + listOptions := metav1.ListOptions{ + LabelSelector: fmt.Sprintf("%s=%s,%s=%s", "component", "grafana", "role", role), + } + + deletePropagation := metav1.DeletePropagationForeground + if err := k8sClient.Kubernetes().AppsV1().Deployments(namespace).DeleteCollection( + ctx, + metav1.DeleteOptions{ + PropagationPolicy: &deletePropagation, + }, listOptions); err != nil && !apierrors.IsNotFound(err) { + return err + } + + if err := k8sClient.Kubernetes().CoreV1().ConfigMaps(namespace).DeleteCollection( + ctx, metav1.DeleteOptions{}, listOptions); err != nil && !apierrors.IsNotFound(err) { + return err + } + + if err := k8sClient.Kubernetes().ExtensionsV1beta1().Ingresses(namespace).DeleteCollection( + ctx, metav1.DeleteOptions{}, listOptions); err != nil && !apierrors.IsNotFound(err) { + return err + } + + if err := k8sClient.Kubernetes().CoreV1().Secrets(namespace).DeleteCollection( + ctx, metav1.DeleteOptions{}, listOptions); err != nil && !apierrors.IsNotFound(err) { + return err + } + + if err := k8sClient.Kubernetes().CoreV1().Services(namespace).Delete( + ctx, fmt.Sprintf("grafana-%s", role), metav1.DeleteOptions{}); err != nil && !apierrors.IsNotFound(err) { + return err + } + return nil +} + +// GetDomainInfoFromAnnotations returns the provider and the domain that is specified in the give annotations. +func GetDomainInfoFromAnnotations(annotations map[string]string) (provider string, domain string, includeZones, excludeZones []string, err error) { + if annotations == nil { + return "", "", nil, nil, fmt.Errorf("domain secret has no annotations") + } + + if providerAnnotation, ok := annotations[DNSProvider]; ok { + provider = providerAnnotation + } + + if domainAnnotation, ok := annotations[DNSDomain]; ok { + domain = domainAnnotation + } + + if includeZonesAnnotation, ok := annotations[DNSIncludeZones]; ok { + includeZones = strings.Split(includeZonesAnnotation, ",") + } + if excludeZonesAnnotation, ok := annotations[DNSExcludeZones]; ok { + excludeZones = strings.Split(excludeZonesAnnotation, ",") + } + + if len(domain) == 0 { + return "", "", nil, nil, fmt.Errorf("missing dns domain annotation on domain secret") + } + if len(provider) == 0 { + return "", "", nil, nil, fmt.Errorf("missing dns provider annotation on domain secret") + } + + return +} + +// CurrentReplicaCount returns the current replicaCount for the given deployment. +func CurrentReplicaCount(ctx context.Context, client client.Client, namespace, deploymentName string) (int32, error) { + deployment := &appsv1.Deployment{} + if err := client.Get(ctx, kutil.Key(namespace, deploymentName), deployment); err != nil && !apierrors.IsNotFound(err) { + return 0, err + } + if deployment.Spec.Replicas == nil { + return 0, nil + } + return *deployment.Spec.Replicas, nil +} + +// RespectShootSyncPeriodOverwrite checks whether to respect the sync period overwrite of a Shoot or not. +func RespectShootSyncPeriodOverwrite(respectSyncPeriodOverwrite bool, shoot *gardencorev1beta1.Shoot) bool { + return respectSyncPeriodOverwrite || shoot.Namespace == v1beta1constants.GardenNamespace +} + +// ShouldIgnoreShoot determines whether a Shoot should be ignored or not. +func ShouldIgnoreShoot(respectSyncPeriodOverwrite bool, shoot *gardencorev1beta1.Shoot) bool { + if !RespectShootSyncPeriodOverwrite(respectSyncPeriodOverwrite, shoot) { + return false + } + + value, ok := shoot.Annotations[ShootIgnore] + if !ok { + return false + } + + ignore, _ := strconv.ParseBool(value) + return ignore +} + +// IsShootFailed checks if a Shoot is failed. +func IsShootFailed(shoot *gardencorev1beta1.Shoot) bool { + lastOperation := shoot.Status.LastOperation + + return lastOperation != nil && lastOperation.State == gardencorev1beta1.LastOperationStateFailed && + shoot.Generation == shoot.Status.ObservedGeneration && + shoot.Status.Gardener.Version == version.Get().GitVersion +} + +// IsNowInEffectiveShootMaintenanceTimeWindow checks if the current time is in the effective +// maintenance time window of the Shoot. +func IsNowInEffectiveShootMaintenanceTimeWindow(shoot *gardencorev1beta1.Shoot) bool { + return EffectiveShootMaintenanceTimeWindow(shoot).Contains(time.Now()) +} + +// LastReconciliationDuringThisTimeWindow returns true if is contained in the given effective maintenance time +// window of the shoot and if the did not happen longer than the longest possible duration of a +// maintenance time window. +func LastReconciliationDuringThisTimeWindow(shoot *gardencorev1beta1.Shoot) bool { + if shoot.Status.LastOperation == nil { + return false + } + + var ( + timeWindow = EffectiveShootMaintenanceTimeWindow(shoot) + now = time.Now() + lastReconciliation = shoot.Status.LastOperation.LastUpdateTime.Time + ) + + return timeWindow.Contains(lastReconciliation) && now.UTC().Sub(lastReconciliation.UTC()) <= gardencorev1beta1.MaintenanceTimeWindowDurationMaximum +} + +// IsObservedAtLatestGenerationAndSucceeded checks whether the Shoot's generation has changed or if the LastOperation status +// is Succeeded. +func IsObservedAtLatestGenerationAndSucceeded(shoot *gardencorev1beta1.Shoot) bool { + lastOperation := shoot.Status.LastOperation + return shoot.Generation == shoot.Status.ObservedGeneration && + (lastOperation != nil && lastOperation.State == gardencorev1beta1.LastOperationStateSucceeded) +} + +// SyncPeriodOfShoot determines the sync period of the given shoot. +// +// If no overwrite is allowed, the defaultMinSyncPeriod is returned. +// Otherwise, the overwrite is parsed. If an error occurs or it is smaller than the defaultMinSyncPeriod, +// the defaultMinSyncPeriod is returned. Otherwise, the overwrite is returned. +func SyncPeriodOfShoot(respectSyncPeriodOverwrite bool, defaultMinSyncPeriod time.Duration, shoot *gardencorev1beta1.Shoot) time.Duration { + if !RespectShootSyncPeriodOverwrite(respectSyncPeriodOverwrite, shoot) { + return defaultMinSyncPeriod + } + + syncPeriodOverwrite, ok := shoot.Annotations[ShootSyncPeriod] + if !ok { + return defaultMinSyncPeriod + } + + syncPeriod, err := time.ParseDuration(syncPeriodOverwrite) + if err != nil { + return defaultMinSyncPeriod + } + + if syncPeriod < defaultMinSyncPeriod { + return defaultMinSyncPeriod + } + return syncPeriod +} + +// EffectiveMaintenanceTimeWindow cuts a maintenance time window at the end with a guess of 15 minutes. It is subtracted from the end +// of a maintenance time window to use a best-effort kind of finishing the operation before the end. +// Generally, we can't make sure that the maintenance operation is done by the end of the time window anyway (considering large +// clusters with hundreds of nodes, a rolling update will take several hours). +func EffectiveMaintenanceTimeWindow(timeWindow *utils.MaintenanceTimeWindow) *utils.MaintenanceTimeWindow { + return timeWindow.WithEnd(timeWindow.End().Add(0, -15, 0)) +} + +// EffectiveShootMaintenanceTimeWindow returns the effective MaintenanceTimeWindow of the given Shoot. +func EffectiveShootMaintenanceTimeWindow(shoot *gardencorev1beta1.Shoot) *utils.MaintenanceTimeWindow { + maintenance := shoot.Spec.Maintenance + if maintenance == nil || maintenance.TimeWindow == nil { + return utils.AlwaysTimeWindow + } + + timeWindow, err := utils.ParseMaintenanceTimeWindow(maintenance.TimeWindow.Begin, maintenance.TimeWindow.End) + if err != nil { + return utils.AlwaysTimeWindow + } + + return EffectiveMaintenanceTimeWindow(timeWindow) +} + +// GardenEtcdEncryptionSecretName returns the name to the 'backup' of the etcd encryption secret in the Garden cluster. +func GardenEtcdEncryptionSecretName(shootName string) string { + return fmt.Sprintf("%s.%s", shootName, EtcdEncryptionSecretName) +} + +// ReadServiceAccountSigningKeySecret reads the signing key secret to extract the signing key. +// It errors if there is no value at ServiceAccountSigningKeySecretDataKey. +func ReadServiceAccountSigningKeySecret(secret *corev1.Secret) (string, error) { + data, ok := secret.Data[ServiceAccountSigningKeySecretDataKey] + if !ok { + return "", fmt.Errorf("no signing key secret in secret %s/%s at .Data.%s", secret.Namespace, secret.Name, ServiceAccountSigningKeySecretDataKey) + } + + return string(data), nil +} + +// GetServiceAccountSigningKeySecret gets the signing key from the secret with the given name and namespace. +func GetServiceAccountSigningKeySecret(ctx context.Context, c client.Client, shootNamespace, secretName string) (string, error) { + secret := &corev1.Secret{} + if err := c.Get(ctx, kutil.Key(shootNamespace, secretName), secret); err != nil { + return "", err + } + + return ReadServiceAccountSigningKeySecret(secret) +} + +// GetAPIServerDomain returns the fully qualified domain name of for the api-server for the Shoot cluster. The +// end result is 'api.'. +func GetAPIServerDomain(domain string) string { + return fmt.Sprintf("%s.%s", APIServerPrefix, domain) +} + +// GetSecretFromSecretRef gets the Secret object from . +func GetSecretFromSecretRef(ctx context.Context, c client.Client, secretRef *corev1.SecretReference) (*corev1.Secret, error) { + secret := &corev1.Secret{} + if err := c.Get(ctx, kutil.Key(secretRef.Namespace, secretRef.Name), secret); err != nil { + return nil, err + } + return secret, nil +} + +// CheckIfDeletionIsConfirmed returns whether the deletion of an object is confirmed or not. +func CheckIfDeletionIsConfirmed(obj metav1.Object) error { + annotations := obj.GetAnnotations() + if annotations == nil { + return annotationRequiredError() + } + + value := annotations[ConfirmationDeletion] + if confirmed, err := strconv.ParseBool(value); err != nil || !confirmed { + return annotationRequiredError() + } + return nil +} + +func annotationRequiredError() error { + return fmt.Errorf("must have a %q annotation to delete", ConfirmationDeletion) +} + +// ConfirmDeletion adds Gardener's deletion confirmation annotation to the given object and sends an UPDATE request. +func ConfirmDeletion(ctx context.Context, c client.Client, obj client.Object) error { + return retry.RetryOnConflict(retry.DefaultBackoff, func() error { + if err := c.Get(ctx, client.ObjectKeyFromObject(obj), obj); err != nil { + if !apierrors.IsNotFound(err) { + return err + } + return nil + } + + existing := obj.DeepCopyObject() + + acc, err := meta.Accessor(obj) + if err != nil { + return err + } + kutil.SetMetaDataAnnotation(acc, ConfirmationDeletion, "true") + kutil.SetMetaDataAnnotation(acc, v1beta1constants.GardenerTimestamp, TimeNow().UTC().String()) + + if reflect.DeepEqual(existing, obj) { + return nil + } + + return c.Update(ctx, obj) + }) +} + +// ExtensionID returns an identifier for the given extension kind/type. +func ExtensionID(extensionKind, extensionType string) string { + return fmt.Sprintf("%s/%s", extensionKind, extensionType) +} + +// DeleteDeploymentsHavingDeprecatedRoleLabelKey deletes the Deployments with the passed object keys if +// the corresponding Deployment .spec.selector contains the deprecated "garden.sapcloud.io/role" label key. +func DeleteDeploymentsHavingDeprecatedRoleLabelKey(ctx context.Context, c client.Client, keys []client.ObjectKey) error { + for _, key := range keys { + deployment := &appsv1.Deployment{} + if err := c.Get(ctx, key, deployment); err != nil { + if apierrors.IsNotFound(err) { + continue + } + + return err + } + + if _, ok := deployment.Spec.Selector.MatchLabels[v1beta1constants.DeprecatedGardenRole]; ok { + if err := c.Delete(ctx, deployment); client.IgnoreNotFound(err) != nil { + return err + } + + if err := kutil.WaitUntilResourceDeleted(ctx, c, deployment, 2*time.Second); err != nil { + return err + } + } + } + + return nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/chart/chart.go b/vendor/github.com/gardener/gardener/pkg/utils/chart/chart.go index a74bf328..f8f5ad8e 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/chart/chart.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/chart/chart.go @@ -24,7 +24,6 @@ import ( "github.com/pkg/errors" apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client" ) @@ -51,7 +50,7 @@ type Chart struct { // Object represents an object deployed by a Chart. type Object struct { - Type runtime.Object + Type client.Object Name string } @@ -137,7 +136,7 @@ func (c *Chart) Delete(ctx context.Context, client client.Client, namespace stri // Delete objects for _, o := range c.Objects { if err := o.Delete(ctx, client, namespace); err != nil { - return errors.Wrap(err, "could not delete chart '%s' object") + return errors.Wrap(err, "could not delete chart object") } } @@ -152,17 +151,17 @@ func (c *Chart) Delete(ctx context.Context, client client.Client, namespace stri } // Delete deletes this object from the given namespace using the given client. -func (o *Object) Delete(ctx context.Context, client client.Client, namespace string) error { - obj := o.Type.DeepCopyObject() +func (o *Object) Delete(ctx context.Context, c client.Client, namespace string) error { + obj := o.Type.DeepCopyObject().(client.Object) kind := obj.GetObjectKind().GroupVersionKind().Kind key := objectKey(namespace, o.Name) - if err := client.Get(ctx, key, obj); err != nil { + if err := c.Get(ctx, key, obj); err != nil { if apierrors.IsNotFound(err) { return nil } return errors.Wrapf(err, "could not get %s '%s'", kind, key.String()) } - if err := client.Delete(ctx, obj); err != nil { + if err := c.Delete(ctx, obj); err != nil { return errors.Wrapf(err, "could not delete %s '%s'", kind, key.String()) } return nil diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/flow.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/flow.go new file mode 100644 index 00000000..459f1209 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/flow.go @@ -0,0 +1,387 @@ +// 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 flow provides utilities to construct a directed acyclic computational graph +// that is then executed and monitored with maximum parallelism. +package flow + +import ( + "context" + "fmt" + "time" + + "github.com/gardener/gardener/pkg/logger" + utilerrors "github.com/gardener/gardener/pkg/utils/errors" + + "github.com/hashicorp/go-multierror" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" +) + +const ( + logKeyFlow = "flow" + logKeyTask = "task" +) + +// ErrorCleaner is called when a task which errored during the previous reconciliation phase completes with success +type ErrorCleaner func(context.Context, string) + +type nodes map[TaskID]*node + +func (ns nodes) rootIDs() TaskIDs { + roots := NewTaskIDs() + for taskID, node := range ns { + if node.required == 0 { + roots.Insert(taskID) + } + } + return roots +} + +func (ns nodes) getOrCreate(id TaskID) *node { + n, ok := ns[id] + if !ok { + n = &node{} + ns[id] = n + } + return n +} + +// Flow is a validated executable Graph. +type Flow struct { + name string + nodes nodes +} + +// Name retrieves the name of a flow. +func (f *Flow) Name() string { + return f.name +} + +// Len retrieves the amount of tasks in a Flow. +func (f *Flow) Len() int { + return len(f.nodes) +} + +// node is a compiled Task that contains the triggered Tasks, the +// number of triggers the node itself requires and its payload function. +type node struct { + targetIDs TaskIDs + required int + fn TaskFn +} + +func (n *node) String() string { + return fmt.Sprintf("node{targets=%s, required=%d}", n.targetIDs.List(), n.required) +} + +// addTargets adds the given TaskIDs as targets to the node. +func (n *node) addTargets(taskIDs ...TaskID) { + if n.targetIDs == nil { + n.targetIDs = NewTaskIDs(TaskIDSlice(taskIDs)) + return + } + n.targetIDs.Insert(TaskIDSlice(taskIDs)) +} + +// Opts are options for a Flow execution. If they are not set, they +// are left blank and don't affect the Flow. +type Opts struct { + Logger logrus.FieldLogger + ProgressReporter ProgressReporter + ErrorCleaner func(ctx context.Context, taskID string) + ErrorContext *utilerrors.ErrorContext + Context context.Context +} + +// Run starts an execution of a Flow. +// It blocks until the Flow has finished and returns the error, if any. +func (f *Flow) Run(opts Opts) error { + ctx := opts.Context + if ctx == nil { + ctx = context.Background() + } + return newExecution(f, opts.Logger, opts.ProgressReporter, opts.ErrorCleaner, opts.ErrorContext).run(ctx) +} + +type nodeResult struct { + TaskID TaskID + Error error +} + +// Stats are the statistics of a Flow execution. +type Stats struct { + FlowName string + All TaskIDs + Succeeded TaskIDs + Failed TaskIDs + Running TaskIDs + Pending TaskIDs +} + +// ProgressPercent retrieves the progress of a Flow execution in percent. +func (s *Stats) ProgressPercent() int32 { + progress := (100 * s.Succeeded.Len()) / s.All.Len() + return int32(progress) +} + +// Copy deeply copies a Stats object. +func (s *Stats) Copy() *Stats { + return &Stats{ + s.FlowName, + s.All.Copy(), + s.Succeeded.Copy(), + s.Failed.Copy(), + s.Running.Copy(), + s.Pending.Copy(), + } +} + +// InitialStats creates a new Stats object with the given set of initial TaskIDs. +// The initial TaskIDs are added to all TaskIDs as well as to the pending ones. +func InitialStats(flowName string, all TaskIDs) *Stats { + return &Stats{ + flowName, + all, + NewTaskIDs(), + NewTaskIDs(), + NewTaskIDs(), + all.Copy(), + } +} + +func newExecution(flow *Flow, log logrus.FieldLogger, progressReporter ProgressReporter, errorCleaner ErrorCleaner, errorContext *utilerrors.ErrorContext) *execution { + all := NewTaskIDs() + + for name := range flow.nodes { + all.Insert(name) + } + + if log == nil { + log = logger.NewNopLogger() + } + log = log.WithField(logKeyFlow, flow.name) + + return &execution{ + flow, + InitialStats(flow.name, all), + nil, + log, + progressReporter, + errorCleaner, + errorContext, + make(chan *nodeResult), + make(map[TaskID]int), + } +} + +type execution struct { + flow *Flow + + stats *Stats + taskErrors []error + + log logrus.FieldLogger + progressReporter ProgressReporter + errorCleaner ErrorCleaner + errorContext *utilerrors.ErrorContext + + done chan *nodeResult + triggerCounts map[TaskID]int +} + +func (e *execution) Log() logrus.FieldLogger { + return e.log +} + +func (e *execution) runNode(ctx context.Context, id TaskID) { + if e.errorContext != nil { + e.errorContext.AddErrorID(string(id)) + } + e.stats.Pending.Delete(id) + e.stats.Running.Insert(id) + go func() { + log := e.log.WithField(logKeyTask, id) + + start := time.Now().UTC() + log.Debugf("Started") + err := e.flow.nodes[id].fn(ctx) + end := time.Now().UTC() + log.Debugf("Finished, took %s", end.Sub(start)) + + if err != nil { + log.WithError(err).Error("Error") + } else { + log.Info("Succeeded") + } + + err = errors.Wrapf(err, "task %q failed", id) + e.done <- &nodeResult{TaskID: id, Error: err} + }() +} + +func (e *execution) updateSuccess(id TaskID) { + e.stats.Running.Delete(id) + e.stats.Succeeded.Insert(id) +} + +func (e *execution) updateFailure(id TaskID) { + e.stats.Running.Delete(id) + e.stats.Failed.Insert(id) +} + +func (e *execution) processTriggers(ctx context.Context, id TaskID) { + node := e.flow.nodes[id] + for target := range node.targetIDs { + e.triggerCounts[target]++ + if e.triggerCounts[target] == e.flow.nodes[target].required { + e.runNode(ctx, target) + } + } +} + +func (e *execution) cleanErrors(ctx context.Context, taskID TaskID) { + if e.errorCleaner != nil { + e.errorCleaner(ctx, string(taskID)) + } +} + +func (e *execution) reportProgress(ctx context.Context) { + if e.progressReporter != nil { + e.progressReporter.Report(ctx, e.stats.Copy()) + } +} + +func (e *execution) run(ctx context.Context) error { + defer close(e.done) + + if e.progressReporter != nil { + if err := e.progressReporter.Start(ctx); err != nil { + return err + } + defer e.progressReporter.Stop() + } + + e.log.Info("Starting") + e.reportProgress(ctx) + + var ( + cancelErr error + roots = e.flow.nodes.rootIDs() + ) + for name := range roots { + if cancelErr = ctx.Err(); cancelErr == nil { + e.runNode(ctx, name) + } + } + e.reportProgress(ctx) + + for e.stats.Running.Len() > 0 { + result := <-e.done + if result.Error != nil { + e.taskErrors = append(e.taskErrors, utilerrors.WithID(string(result.TaskID), result.Error)) + e.updateFailure(result.TaskID) + } else { + e.updateSuccess(result.TaskID) + if e.errorContext != nil && e.errorContext.HasLastErrorWithID(string(result.TaskID)) { + e.cleanErrors(ctx, result.TaskID) + } + if cancelErr = ctx.Err(); cancelErr == nil { + e.processTriggers(ctx, result.TaskID) + } + } + e.reportProgress(ctx) + } + + e.log.Info("Finished") + return e.result(cancelErr) +} + +func (e *execution) result(cancelErr error) error { + if cancelErr != nil { + return &flowCanceled{ + name: e.flow.name, + taskErrors: e.taskErrors, + cause: cancelErr, + } + } + + if len(e.taskErrors) > 0 { + return &flowFailed{ + name: e.flow.name, + taskErrors: e.taskErrors, + } + } + return nil +} + +type flowCanceled struct { + name string + taskErrors []error + cause error +} + +type flowFailed struct { + name string + taskErrors []error +} + +func (f *flowCanceled) Error() string { + if len(f.taskErrors) == 0 { + return fmt.Sprintf("flow %q was canceled: %v", f.name, f.cause) + } + return fmt.Sprintf("flow %q was canceled: %v. Encountered task errors: %v", + f.name, f.cause, f.taskErrors) +} + +func (f *flowCanceled) Cause() error { + return f.cause +} + +func (f *flowFailed) Error() string { + return fmt.Sprintf("flow %q encountered task errors: %v", f.name, f.taskErrors) +} + +func (f *flowFailed) Cause() error { + return &multierror.Error{Errors: f.taskErrors} +} + +// Errors reports all wrapped Task errors of the given Flow error. +func Errors(err error) *multierror.Error { + switch e := err.(type) { + case *flowCanceled: + return &multierror.Error{Errors: e.taskErrors} + case *flowFailed: + return &multierror.Error{Errors: e.taskErrors} + } + return nil +} + +// Causes reports the causes of all Task errors of the given Flow error. +func Causes(err error) *multierror.Error { + var ( + errs = Errors(err).Errors + causes = make([]error, 0, len(errs)) + ) + for _, err := range errs { + causes = append(causes, errors.Cause(err)) + } + return &multierror.Error{Errors: causes} +} + +// WasCanceled determines whether the given flow error was caused by cancellation. +func WasCanceled(err error) bool { + _, ok := err.(*flowCanceled) + return ok +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/graph.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/graph.go new file mode 100644 index 00000000..8dc29204 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/graph.go @@ -0,0 +1,101 @@ +// 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 flow + +import ( + "fmt" +) + +// Task is a unit of work. It has a name, a payload function and a set of dependencies. +// A is only started once all its dependencies have been completed successfully. +type Task struct { + Name string + Fn TaskFn + Dependencies TaskIDs +} + +// Spec returns the TaskSpec of a task. +func (t *Task) Spec() *TaskSpec { + return &TaskSpec{ + t.Fn, + t.Dependencies.Copy(), + } +} + +// TaskSpec is functional body of a Task, consisting only of the payload function and +// the dependencies of the Task. +type TaskSpec struct { + Fn TaskFn + Dependencies TaskIDs +} + +// Tasks is a mapping from TaskID to TaskSpec. +type Tasks map[TaskID]*TaskSpec + +// Graph is a builder for a Flow. +type Graph struct { + name string + tasks Tasks +} + +// Name returns the name of a graph. +func (g *Graph) Name() string { + return g.name +} + +// NewGraph returns a new Graph with the given name. +func NewGraph(name string) *Graph { + return &Graph{name: name, tasks: make(Tasks)} +} + +// Add adds the given Task to the graph. +// This panics if +// - There is already a Task present with the same name +// - One of the dependencies of the Task is not present +func (g *Graph) Add(task Task) TaskID { + id := TaskID(task.Name) + if _, ok := g.tasks[id]; ok { + panic(fmt.Sprintf("Task with id %q already exists", id)) + } + spec := task.Spec() + for dependencyID := range spec.Dependencies { + if _, ok := g.tasks[dependencyID]; !ok { + panic(fmt.Sprintf("Task %q is missing dependency %q", id, dependencyID)) + } + } + g.tasks[id] = task.Spec() + return id +} + +// Compile compiles the graph into an executable Flow. +func (g *Graph) Compile() *Flow { + nodes := make(nodes, len(g.tasks)) + + for taskName, taskSpec := range g.tasks { + for dependencyID := range taskSpec.Dependencies { + dependency := nodes.getOrCreate(dependencyID) + dependency.addTargets(taskName) + } + + node := nodes.getOrCreate(taskName) + node.fn = taskSpec.Fn + node.required = taskSpec.Dependencies.Len() + } + + return &Flow{ + g.name, + nodes, + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter.go new file mode 100644 index 00000000..4acdc8d3 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter.go @@ -0,0 +1,32 @@ +// 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 flow + +import ( + "context" +) + +// ProgressReporterFn is continuously called on progress in a flow. +type ProgressReporterFn func(context.Context, *Stats) + +// ProgressReporter is used to report the current progress of a flow. +type ProgressReporter interface { + // Start starts the progress reporter. + Start(context.Context) error + // Stop stops the progress reporter. + Stop() + // Report reports the progress using the current statistics. + Report(context.Context, *Stats) +} 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 new file mode 100644 index 00000000..c49c4111 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_delaying.go @@ -0,0 +1,117 @@ +// 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 flow + +import ( + "context" + "fmt" + "sync" + "time" +) + +type progressReporterDelaying struct { + lock sync.Mutex + ctx context.Context + ctxCancel context.CancelFunc + reporterFn ProgressReporterFn + period time.Duration + timer *time.Timer + pendingProgress *Stats + delayProgressReport bool +} + +// NewDelayingProgressReporter returns a new progress reporter with the given function and the configured period. A +// period of `0` will lead to immediate reports as soon as flow tasks are completed. +func NewDelayingProgressReporter(reporterFn ProgressReporterFn, period time.Duration) ProgressReporter { + return &progressReporterDelaying{ + reporterFn: reporterFn, + period: period, + } +} + +func (p *progressReporterDelaying) Start(ctx context.Context) error { + p.lock.Lock() + defer p.lock.Unlock() + + if p.timer != nil { + return fmt.Errorf("progress reporter has already been started") + } + + // We store the context on the progressReporterDelaying object so that we can call the reporterFn with the original + // context - otherwise, the final state cannot be reported because the cancel context will already be canceled + p.ctx = ctx + + if p.period > 0 { + p.timer = time.NewTimer(p.period) + + ctx, cancel := context.WithCancel(ctx) + p.ctxCancel = cancel + + go p.run(ctx) + } + + return nil +} + +func (p *progressReporterDelaying) Stop() { + p.lock.Lock() + + if p.ctxCancel != nil { + p.ctxCancel() + } + + p.ctxCancel = nil + p.timer = nil + p.lock.Unlock() + p.report() +} + +func (p *progressReporterDelaying) Report(_ context.Context, pendingProgress *Stats) { + p.lock.Lock() + defer p.lock.Unlock() + + if p.timer != nil && p.delayProgressReport { + p.pendingProgress = pendingProgress + return + } + + p.reporterFn(p.ctx, pendingProgress) + p.delayProgressReport = true +} + +func (p *progressReporterDelaying) run(ctx context.Context) { + timer := p.timer + for timer != nil { + select { + case <-timer.C: + timer.Reset(p.period) + p.report() + + case <-ctx.Done(): + timer.Stop() + return + } + } +} + +func (p *progressReporterDelaying) report() { + p.lock.Lock() + defer p.lock.Unlock() + + if p.pendingProgress != nil { + p.reporterFn(p.ctx, p.pendingProgress) + p.pendingProgress = nil + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_immediate.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_immediate.go new file mode 100644 index 00000000..d3f293d0 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/progress_reporter_immediate.go @@ -0,0 +1,36 @@ +// 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 flow + +import ( + "context" +) + +type progressReporterImmediate struct { + reporterFn ProgressReporterFn +} + +// NewImmediateProgressReporter returns a new progress reporter with the given function. +func NewImmediateProgressReporter(reporterFn ProgressReporterFn) ProgressReporter { + return progressReporterImmediate{ + reporterFn: reporterFn, + } +} + +func (p progressReporterImmediate) Start(context.Context) error { return nil } +func (p progressReporterImmediate) Stop() {} +func (p progressReporterImmediate) Report(ctx context.Context, stats *Stats) { + p.reporterFn(ctx, stats) +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/taskfn.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/taskfn.go new file mode 100644 index 00000000..d3742efb --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/taskfn.go @@ -0,0 +1,189 @@ +// 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 flow + +import ( + "context" + "sync" + "time" + + "github.com/gardener/gardener/pkg/utils/retry" + + "github.com/hashicorp/go-multierror" +) + +var ( + // ContextWithTimeout is context.WithTimeout. Exposed for testing. + ContextWithTimeout = context.WithTimeout +) + +// TaskFn is a payload function of a task. +type TaskFn func(ctx context.Context) error + +// RecoverFn is a function that can recover an error. +type RecoverFn func(ctx context.Context, err error) error + +// EmptyTaskFn is a TaskFn that does nothing (returns nil). +var EmptyTaskFn TaskFn = func(ctx context.Context) error { return nil } + +// SimpleTaskFn converts the given function to a TaskFn, disrespecting any context.Context it is being given. +// deprecated: Only used during transition period. Do not use for new functions. +func SimpleTaskFn(f func() error) TaskFn { + return func(ctx context.Context) error { + return f() + } +} + +// SkipIf returns a TaskFn that does nothing if the condition is true, otherwise the function +// will be executed once called. +func (t TaskFn) SkipIf(condition bool) TaskFn { + if condition { + return EmptyTaskFn + } + return t +} + +// DoIf returns a TaskFn that will be executed if the condition is true when it is called. +// Otherwise, it will do nothing when called. +func (t TaskFn) DoIf(condition bool) TaskFn { + return t.SkipIf(!condition) +} + +// Timeout returns a TaskFn that is bound to a context which times out. +func (t TaskFn) Timeout(timeout time.Duration) TaskFn { + return func(ctx context.Context) error { + var cancel func() + ctx, cancel = context.WithTimeout(ctx, timeout) + defer cancel() + + return t(ctx) + } +} + +// RetryUntilTimeout returns a TaskFn that is retried until the timeout is reached. +func (t TaskFn) RetryUntilTimeout(interval, timeout time.Duration) TaskFn { + return func(ctx context.Context) error { + ctx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() + + return retry.Until(ctx, interval, func(ctx context.Context) (done bool, err error) { + if err := t(ctx); err != nil { + return retry.MinorError(err) + } + return retry.Ok() + }) + } +} + +// ToRecoverFn converts the TaskFn to a RecoverFn that ignores the incoming error. +func (t TaskFn) ToRecoverFn() RecoverFn { + return func(ctx context.Context, _ error) error { + return t(ctx) + } +} + +// Recover creates a new TaskFn that recovers an error with the given RecoverFn. +func (t TaskFn) Recover(recoverFn RecoverFn) TaskFn { + return func(ctx context.Context) error { + if err := t(ctx); err != nil { + if ctx.Err() != nil { + return err + } + return recoverFn(ctx, err) + } + return nil + } +} + +// Sequential runs the given TaskFns sequentially. +func Sequential(fns ...TaskFn) TaskFn { + return func(ctx context.Context) error { + for _, fn := range fns { + if err := fn(ctx); err != nil { + return err + } + + if err := ctx.Err(); err != nil { + return err + } + } + return nil + } +} + +// Parallel runs the given TaskFns in parallel, collecting their errors in a multierror. +func Parallel(fns ...TaskFn) TaskFn { + return func(ctx context.Context) error { + var ( + wg sync.WaitGroup + errors = make(chan error) + result error + ) + + for _, fn := range fns { + t := fn + wg.Add(1) + go func() { + defer wg.Done() + errors <- t(ctx) + }() + } + + go func() { + defer close(errors) + wg.Wait() + }() + + for err := range errors { + if err != nil { + result = multierror.Append(result, err) + } + } + return result + } +} + +// ParallelExitOnError runs the given TaskFns in parallel and stops execution as soon as one TaskFn returns an error. +func ParallelExitOnError(fns ...TaskFn) TaskFn { + return func(ctx context.Context) error { + var ( + wg sync.WaitGroup + errors = make(chan error) + subCtx, cancel = context.WithCancel(ctx) + ) + defer cancel() + + for _, fn := range fns { + t := fn + wg.Add(1) + go func() { + defer wg.Done() + errors <- t(subCtx) + }() + } + + go func() { + defer close(errors) + wg.Wait() + }() + + for err := range errors { + if err != nil { + return err + } + } + return nil + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/flow/taskid.go b/vendor/github.com/gardener/gardener/pkg/utils/flow/taskid.go new file mode 100644 index 00000000..e786fa82 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/flow/taskid.go @@ -0,0 +1,155 @@ +// 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 flow + +import "sort" + +// TaskID is an id of a task. +type TaskID string + +// TaskIDs retrieves this TaskID as a singleton slice. +func (t TaskID) TaskIDs() []TaskID { + return []TaskID{t} +} + +// TaskIDs is a set of TaskID. +type TaskIDs map[TaskID]struct{} + +// TaskIDs retrieves all TaskIDs as an unsorted slice. +func (t TaskIDs) TaskIDs() []TaskID { + return t.UnsortedList() +} + +// TaskIDer can produce a slice of TaskIDs. +// Default implementations of this are +// TaskIDs, TaskID and TaskIDSlice +type TaskIDer interface { + // TaskIDs reports all TaskIDs of this TaskIDer. + TaskIDs() []TaskID +} + +// NewTaskIDs returns a new set of TaskIDs initialized +// to contain all TaskIDs of the given TaskIDers. +func NewTaskIDs(ids ...TaskIDer) TaskIDs { + set := make(TaskIDs) + set.Insert(ids...) + return set +} + +// Insert inserts the TaskIDs of all TaskIDers into +// this TaskIDs. +func (t TaskIDs) Insert(iders ...TaskIDer) TaskIDs { + for _, ider := range iders { + for _, id := range ider.TaskIDs() { + t[id] = struct{}{} + } + } + return t +} + +// InsertIf inserts the TaskIDs of all TaskIDers into +// this TaskIDs if the given condition evaluates to true. +func (t TaskIDs) InsertIf(condition bool, iders ...TaskIDer) TaskIDs { + if condition { + return t.Insert(iders...) + } + return t +} + +// Delete deletes the TaskIDs of all TaskIDers from +// this TaskIDs. +func (t TaskIDs) Delete(iders ...TaskIDer) TaskIDs { + for _, ider := range iders { + for _, id := range ider.TaskIDs() { + delete(t, id) + } + } + return t +} + +// Len returns the amount of TaskIDs this contains. +func (t TaskIDs) Len() int { + return len(t) +} + +// Has checks if the given TaskID is present in this set. +func (t TaskIDs) Has(id TaskID) bool { + _, ok := t[id] + return ok +} + +// Copy makes a deep copy of this TaskIDs. +func (t TaskIDs) Copy() TaskIDs { + out := make(TaskIDs, len(t)) + for k := range t { + out[k] = struct{}{} + } + return out +} + +// UnsortedList returns the elements of this in an unordered slice. +func (t TaskIDs) UnsortedList() TaskIDSlice { + out := make([]TaskID, 0, len(t)) + for k := range t { + out = append(out, k) + } + return out +} + +// List returns the elements of this in an ordered slice. +func (t TaskIDs) List() TaskIDSlice { + out := make(TaskIDSlice, 0, len(t)) + for k := range t { + out = append(out, k) + } + sort.Sort(out) + return out +} + +// UnsortedStringList returns the elements of this in an unordered string slice. +func (t TaskIDs) UnsortedStringList() []string { + out := make([]string, 0, len(t)) + for k := range t { + out = append(out, string(k)) + } + return out +} + +// StringList returns the elements of this in an ordered string slice. +func (t TaskIDs) StringList() []string { + out := t.UnsortedStringList() + sort.Strings(out) + return out +} + +// TaskIDSlice is a slice of TaskIDs. +type TaskIDSlice []TaskID + +// TaskIDs returns this as a slice of TaskIDs. +func (t TaskIDSlice) TaskIDs() []TaskID { + return t +} + +func (t TaskIDSlice) Len() int { + return len(t) +} + +func (t TaskIDSlice) Less(i1, i2 int) bool { + return t[i1] < t[i2] +} + +func (t TaskIDSlice) Swap(i1, i2 int) { + t[i1], t[i2] = t[i2], t[i1] +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/bootstrap_token.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/bootstrap_token.go index b39cb32e..6e1abb43 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/bootstrap_token.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/bootstrap_token.go @@ -16,6 +16,7 @@ package kubernetes import ( "context" + "regexp" "time" "github.com/gardener/gardener/pkg/utils" @@ -30,6 +31,10 @@ import ( // ComputeBootstrapToken computes and creates a new bootstrap token, and returns it. func ComputeBootstrapToken(ctx context.Context, c client.Client, tokenID, description string, validity time.Duration) (secret *corev1.Secret, err error) { + var ( + bootstrapTokenSecretKey string + ) + secret = &corev1.Secret{ ObjectMeta: metav1.ObjectMeta{ Name: bootstraptokenutil.BootstrapTokenSecretName(tokenID), @@ -37,13 +42,18 @@ func ComputeBootstrapToken(ctx context.Context, c client.Client, tokenID, descri }, } - if err := c.Get(ctx, Key(secret.Namespace, secret.Name), secret); client.IgnoreNotFound(err) != nil { + if err = c.Get(ctx, Key(secret.Namespace, secret.Name), secret); client.IgnoreNotFound(err) != nil { return nil, err } - bootstrapTokenSecretKey, err := utils.GenerateRandomStringFromCharset(16, "0123456789abcdefghijklmnopqrstuvwxyz") - if err != nil { - return nil, err + validBootstrapTokenSecret, _ := regexp.Compile(`[a-z0-9]{16}`) + if existingSecretToken, ok := secret.Data[bootstraptokenapi.BootstrapTokenSecretKey]; ok && validBootstrapTokenSecret.Match(existingSecretToken) { + bootstrapTokenSecretKey = string(existingSecretToken) + } else { + bootstrapTokenSecretKey, err = utils.GenerateRandomStringFromCharset(16, "0123456789abcdefghijklmnopqrstuvwxyz") + if err != nil { + return nil, err + } } data := map[string][]byte{ diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/and.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/and.go new file mode 100644 index 00000000..efe6c021 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/and.go @@ -0,0 +1,35 @@ +// 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 health + +import ( + "k8s.io/apimachinery/pkg/runtime" +) + +// Func is a type for a function that checks the health of a runtime.Object. +type Func func(runtime.Object) error + +// And combines multiple health check funcs to a single func, checking all funcs sequentially and return the first +// error that occurs or nil if no error occurs.¬ +func And(fns ...Func) Func { + return func(o runtime.Object) error { + for _, fn := range fns { + if err := fn(o); err != nil { + return err + } + } + return nil + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/health.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/health.go new file mode 100644 index 00000000..883ca4df --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/health.go @@ -0,0 +1,457 @@ +// 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 health + +import ( + "context" + "fmt" + "net/http" + "time" + + druidv1alpha1 "github.com/gardener/etcd-druid/api/v1alpha1" + resourcesv1alpha1 "github.com/gardener/gardener-resource-manager/pkg/apis/resources/v1alpha1" + "github.com/sirupsen/logrus" + appsv1 "k8s.io/api/apps/v1" + corev1 "k8s.io/api/core/v1" + apiequality "k8s.io/apimachinery/pkg/api/equality" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/client-go/rest" + "sigs.k8s.io/controller-runtime/pkg/client" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" + "github.com/gardener/gardener/pkg/client/kubernetes" + "github.com/gardener/gardener/pkg/utils" + "github.com/gardener/gardener/pkg/utils/retry" +) + +func requiredConditionMissing(conditionType string) error { + return fmt.Errorf("condition %q is missing", conditionType) +} + +func checkConditionState(conditionType string, expected, actual, reason, message string) error { + if expected != actual { + return fmt.Errorf("condition %q has invalid status %s (expected %s) due to %s: %s", + conditionType, actual, expected, reason, message) + } + return nil +} + +func getDeploymentCondition(conditions []appsv1.DeploymentCondition, conditionType appsv1.DeploymentConditionType) *appsv1.DeploymentCondition { + for _, condition := range conditions { + if condition.Type == conditionType { + return &condition + } + } + return nil +} + +func getNodeCondition(conditions []corev1.NodeCondition, conditionType corev1.NodeConditionType) *corev1.NodeCondition { + for _, condition := range conditions { + if condition.Type == conditionType { + return &condition + } + } + return nil +} + +var ( + trueDeploymentConditionTypes = []appsv1.DeploymentConditionType{ + appsv1.DeploymentAvailable, + } + + trueOptionalDeploymentConditionTypes = []appsv1.DeploymentConditionType{ + appsv1.DeploymentProgressing, + } + + falseOptionalDeploymentConditionTypes = []appsv1.DeploymentConditionType{ + appsv1.DeploymentReplicaFailure, + } +) + +// CheckDeployment checks whether the given Deployment is healthy. +// A deployment is considered healthy if the controller observed its current revision and +// if the number of updated replicas is equal to the number of replicas. +func CheckDeployment(deployment *appsv1.Deployment) error { + if deployment.Status.ObservedGeneration < deployment.Generation { + return fmt.Errorf("observed generation outdated (%d/%d)", deployment.Status.ObservedGeneration, deployment.Generation) + } + + for _, trueConditionType := range trueDeploymentConditionTypes { + conditionType := string(trueConditionType) + condition := getDeploymentCondition(deployment.Status.Conditions, trueConditionType) + if condition == nil { + return requiredConditionMissing(conditionType) + } + if err := checkConditionState(conditionType, string(corev1.ConditionTrue), string(condition.Status), condition.Reason, condition.Message); err != nil { + return err + } + } + + for _, trueOptionalConditionType := range trueOptionalDeploymentConditionTypes { + conditionType := string(trueOptionalConditionType) + condition := getDeploymentCondition(deployment.Status.Conditions, trueOptionalConditionType) + if condition == nil { + continue + } + if err := checkConditionState(conditionType, string(corev1.ConditionTrue), string(condition.Status), condition.Reason, condition.Message); err != nil { + return err + } + } + + for _, falseOptionalConditionType := range falseOptionalDeploymentConditionTypes { + conditionType := string(falseOptionalConditionType) + condition := getDeploymentCondition(deployment.Status.Conditions, falseOptionalConditionType) + if condition == nil { + continue + } + if err := checkConditionState(conditionType, string(corev1.ConditionFalse), string(condition.Status), condition.Reason, condition.Message); err != nil { + return err + } + } + + return nil +} + +// CheckStatefulSet checks whether the given StatefulSet is healthy. +// A StatefulSet is considered healthy if its controller observed its current revision, +// it is not in an update (i.e. UpdateRevision is empty) and if its current replicas are equal to +// its desired replicas. +func CheckStatefulSet(statefulSet *appsv1.StatefulSet) error { + if statefulSet.Status.ObservedGeneration < statefulSet.Generation { + return fmt.Errorf("observed generation outdated (%d/%d)", statefulSet.Status.ObservedGeneration, statefulSet.Generation) + } + + replicas := int32(1) + if statefulSet.Spec.Replicas != nil { + replicas = *statefulSet.Spec.Replicas + } + + if statefulSet.Status.ReadyReplicas < replicas { + return fmt.Errorf("not enough ready replicas (%d/%d)", statefulSet.Status.ReadyReplicas, replicas) + } + return nil +} + +// 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) { + return fmt.Errorf("etcd %s is not ready yet", etcd.Name) + } + return nil +} + +func daemonSetMaxUnavailable(daemonSet *appsv1.DaemonSet) int32 { + if daemonSet.Status.DesiredNumberScheduled == 0 || daemonSet.Spec.UpdateStrategy.Type != appsv1.RollingUpdateDaemonSetStrategyType { + return 0 + } + + rollingUpdate := daemonSet.Spec.UpdateStrategy.RollingUpdate + if rollingUpdate == nil { + return 0 + } + + maxUnavailable, err := intstr.GetValueFromIntOrPercent(rollingUpdate.MaxUnavailable, int(daemonSet.Status.DesiredNumberScheduled), false) + if err != nil { + return 0 + } + + return int32(maxUnavailable) +} + +// CheckDaemonSet checks whether the given DaemonSet is healthy. +// A DaemonSet is considered healthy if its controller observed its current revision and if +// its desired number of scheduled pods is equal to its updated number of scheduled pods. +func CheckDaemonSet(daemonSet *appsv1.DaemonSet) error { + if daemonSet.Status.ObservedGeneration < daemonSet.Generation { + return fmt.Errorf("observed generation outdated (%d/%d)", daemonSet.Status.ObservedGeneration, daemonSet.Generation) + } + + maxUnavailable := daemonSetMaxUnavailable(daemonSet) + + if requiredAvailable := daemonSet.Status.DesiredNumberScheduled - maxUnavailable; daemonSet.Status.CurrentNumberScheduled < requiredAvailable { + return fmt.Errorf("not enough available replicas (%d/%d)", daemonSet.Status.CurrentNumberScheduled, requiredAvailable) + } + return nil +} + +// NodeOutOfDisk is deprecated NodeConditionType. +// It is no longer reported by kubelet >= 1.13. See https://github.com/kubernetes/kubernetes/pull/70111. +// +deprecated +const NodeOutOfDisk = "OutOfDisk" + +var ( + trueNodeConditionTypes = []corev1.NodeConditionType{ + corev1.NodeReady, + } + + falseNodeConditionTypes = []corev1.NodeConditionType{ + corev1.NodeDiskPressure, + corev1.NodeMemoryPressure, + corev1.NodeNetworkUnavailable, + corev1.NodePIDPressure, + NodeOutOfDisk, + } +) + +// CheckNode checks whether the given Node is healthy. +// A node is considered healthy if it has a `corev1.NodeReady` condition and this condition reports +// `corev1.ConditionTrue`. +func CheckNode(node *corev1.Node) error { + for _, trueConditionType := range trueNodeConditionTypes { + conditionType := string(trueConditionType) + condition := getNodeCondition(node.Status.Conditions, trueConditionType) + if condition == nil { + return requiredConditionMissing(conditionType) + } + if err := checkConditionState(conditionType, string(corev1.ConditionTrue), string(condition.Status), condition.Reason, condition.Message); err != nil { + return err + } + } + + for _, falseConditionType := range falseNodeConditionTypes { + conditionType := string(falseConditionType) + condition := getNodeCondition(node.Status.Conditions, falseConditionType) + if condition == nil { + continue + } + if err := checkConditionState(conditionType, string(corev1.ConditionFalse), string(condition.Status), condition.Reason, condition.Message); err != nil { + return err + } + } + + return nil +} + +var ( + trueSeedConditionTypes = []gardencorev1beta1.ConditionType{ + gardencorev1beta1.SeedGardenletReady, + gardencorev1beta1.SeedBootstrapped, + } +) + +// CheckSeed checks if the Seed is up-to-date and if its extensions have been successfully bootstrapped. +func CheckSeed(seed *gardencorev1beta1.Seed, identity *gardencorev1beta1.Gardener) error { + if !apiequality.Semantic.DeepEqual(seed.Status.Gardener, identity) { + return fmt.Errorf("observing Gardener version not up to date (%v/%v)", seed.Status.Gardener, identity) + } + + return checkSeed(seed, identity) +} + +// CheckSeedForMigration checks if the Seed is up-to-date (comparing only the versions) and if its extensions have been successfully bootstrapped. +func CheckSeedForMigration(seed *gardencorev1beta1.Seed, identity *gardencorev1beta1.Gardener) error { + if seed.Status.Gardener.Version != identity.Version { + return fmt.Errorf("observing Gardener version not up to date (%s/%s)", seed.Status.Gardener.Version, identity.Version) + } + + return checkSeed(seed, identity) +} + +// 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 { + if seed.Status.ObservedGeneration < seed.Generation { + return fmt.Errorf("observed generation outdated (%d/%d)", seed.Status.ObservedGeneration, seed.Generation) + } + + for _, trueConditionType := range trueSeedConditionTypes { + conditionType := string(trueConditionType) + condition := gardencorev1beta1helper.GetCondition(seed.Status.Conditions, trueConditionType) + if condition == nil { + return requiredConditionMissing(conditionType) + } + if err := checkConditionState(conditionType, string(gardencorev1beta1.ConditionTrue), string(condition.Status), condition.Reason, condition.Message); err != nil { + return err + } + } + + return nil +} + +// CheckExtensionObject checks if an extension Object is healthy or not. +// An extension object is healthy if +// * Its observed generation is up-to-date +// * No gardener.cloud/operation is set +// * No lastError is in the status +// * A last operation is state succeeded is present +func CheckExtensionObject(o runtime.Object) error { + obj, ok := o.(extensionsv1alpha1.Object) + if !ok { + return fmt.Errorf("expected extensionsv1alpha1.Object but got %T", o) + } + + status := obj.GetExtensionStatus() + return checkExtensionObject(obj.GetGeneration(), status.GetObservedGeneration(), obj.GetAnnotations(), status.GetLastError(), status.GetLastOperation()) +} + +// ExtensionOperationHasBeenUpdatedSince returns a health check function that checks if an extension Object's last +// operation has been updated since `lastUpdateTime`. +func ExtensionOperationHasBeenUpdatedSince(lastUpdateTime metav1.Time) Func { + return func(o runtime.Object) error { + obj, ok := o.(extensionsv1alpha1.Object) + if !ok { + return fmt.Errorf("expected extensionsv1alpha1.Object but got %T", o) + } + + lastOperation := obj.GetExtensionStatus().GetLastOperation() + if lastOperation == nil || !lastOperation.LastUpdateTime.After(lastUpdateTime.Time) { + return fmt.Errorf("extension operation was not updated yet") + } + return nil + } +} + +// CheckBackupBucket checks if an backup bucket Object is healthy or not. +func CheckBackupBucket(bb runtime.Object) error { + obj, ok := bb.(*gardencorev1beta1.BackupBucket) + if !ok { + return fmt.Errorf("expected gardencorev1beta1.BackupBucket but got %T", bb) + } + return checkExtensionObject(obj.Generation, obj.Status.ObservedGeneration, obj.Annotations, obj.Status.LastError, obj.Status.LastOperation) +} + +// 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 gardencorev1beta1helper.NewErrorWithCodes(fmt.Sprintf("extension encountered error during reconciliation: %s", lastError.Description), lastError.Codes...) + } + + if observedGeneration != generation { + return fmt.Errorf("observed generation outdated (%d/%d)", observedGeneration, generation) + } + + if op, ok := annotations[v1beta1constants.GardenerOperation]; ok { + return fmt.Errorf("gardener operation %q is not yet picked up by controller", op) + } + + if lastOperation == nil { + return fmt.Errorf("extension did not record a last operation yet") + } + + if lastOperation.State != gardencorev1beta1.LastOperationStateSucceeded { + return fmt.Errorf("extension state is not succeeded but %v", lastOperation.State) + } + + return nil +} + +// Now determines the current time. +var Now = time.Now + +// ConditionerFunc to update a condition with type and message +type conditionerFunc func(conditionType string, message string) gardencorev1beta1.Condition + +// CheckAPIServerAvailability checks if the API server of a cluster is reachable and measure the response time. +func CheckAPIServerAvailability(ctx context.Context, condition gardencorev1beta1.Condition, restClient rest.Interface, conditioner conditionerFunc, log logrus.FieldLogger) gardencorev1beta1.Condition { + now := Now() + response := restClient.Get().AbsPath("/healthz").Do(ctx) + responseDurationText := fmt.Sprintf("[response_time:%dms]", Now().Sub(now).Nanoseconds()/time.Millisecond.Nanoseconds()) + if response.Error() != nil { + message := fmt.Sprintf("Request to API server /healthz endpoint failed. %s (%s)", responseDurationText, response.Error().Error()) + return conditioner("HealthzRequestFailed", message) + } + + // Determine the status code of the response. + var statusCode int + response.StatusCode(&statusCode) + + if statusCode != http.StatusOK { + var body string + bodyRaw, err := response.Raw() + if err != nil { + body = fmt.Sprintf("Could not parse response body: %s", err.Error()) + } else { + body = string(bodyRaw) + } + message := fmt.Sprintf("API server /healthz endpoint check returned a non ok status code %d. (%s)", statusCode, body) + log.Error(message) + return conditioner("HealthzRequestError", message) + } + + message := "API server /healthz endpoint responded with success status code." + return gardencorev1beta1helper.UpdatedCondition(condition, gardencorev1beta1.ConditionTrue, "HealthzRequestSucceeded", message) +} + +var ( + trueManagedResourceConditionTypes = []resourcesv1alpha1.ConditionType{ + resourcesv1alpha1.ResourcesApplied, + resourcesv1alpha1.ResourcesHealthy, + } +) + +// CheckManagedResource checks whether the given ManagedResource is healthy. +// A ManagedResource is considered healthy if its controller observed its current revision, +// and if the required conditions are healthy. +func CheckManagedResource(managedResource *resourcesv1alpha1.ManagedResource) error { + if managedResource.Status.ObservedGeneration < managedResource.Generation { + return fmt.Errorf("observed generation outdated (%d/%d)", managedResource.Status.ObservedGeneration, managedResource.Generation) + } + + for _, trueConditionType := range trueManagedResourceConditionTypes { + conditionType := string(trueConditionType) + condition := getManagedResourceCondition(managedResource.Status.Conditions, trueConditionType) + if condition == nil { + return requiredConditionMissing(conditionType) + } + if err := checkConditionState(conditionType, string(corev1.ConditionTrue), string(condition.Status), condition.Reason, condition.Message); err != nil { + return err + } + } + + return nil +} + +func getManagedResourceCondition(conditions []resourcesv1alpha1.ManagedResourceCondition, conditionType resourcesv1alpha1.ConditionType) *resourcesv1alpha1.ManagedResourceCondition { + for _, condition := range conditions { + if condition.Type == conditionType { + return &condition + } + } + return nil +} + +// CheckTunnelConnection checks if the tunnel connection between the control plane and the shoot networks +// is established. +func CheckTunnelConnection(ctx context.Context, shootClient kubernetes.Interface, logger logrus.FieldLogger, tunnelName string) (bool, error) { + podList := &corev1.PodList{} + if err := shootClient.Client().List(ctx, podList, client.InNamespace(metav1.NamespaceSystem), client.MatchingLabels{"app": tunnelName}); err != nil { + return retry.SevereError(err) + } + + var tunnelPod *corev1.Pod + for _, pod := range podList.Items { + if pod.Status.Phase == corev1.PodRunning { + tunnelPod = &pod + break + } + } + + if tunnelPod == nil { + logger.Infof("Waiting until a running %s pod exists in the Shoot cluster...", tunnelName) + return retry.MinorError(fmt.Errorf("no running %s pod found yet in the shoot cluster", tunnelName)) + } + if err := shootClient.CheckForwardPodPort(tunnelPod.Namespace, tunnelPod.Name, 0, 22); err != nil { + logger.Info("Waiting until the tunnel connection has been established...") + return retry.MinorError(fmt.Errorf("could not forward to %s pod: %v", tunnelName, err)) + } + + logger.Info("Tunnel connection has been established.") + return retry.Ok() +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/pod_health.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/pod_health.go new file mode 100644 index 00000000..dbafa0b8 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/pod_health.go @@ -0,0 +1,53 @@ +// 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. + +// Coppied from https://github.com/kubernetes/kubernetes/blob/a93f803f8e400f1d42dc812bc51932ff3b31798a/pkg/api/pod/util.go#L181-L211 + +package health + +import ( + corev1 "k8s.io/api/core/v1" +) + +// IsPodReady returns true if a pod is ready; false otherwise. +func IsPodReady(pod *corev1.Pod) bool { + return IsPodReadyConditionTrue(pod.Status) +} + +// IsPodReadyConditionTrue returns true if a pod is ready; false otherwise. +func IsPodReadyConditionTrue(status corev1.PodStatus) bool { + condition := GetPodReadyCondition(status) + return condition != nil && condition.Status == corev1.ConditionTrue +} + +// GetPodReadyCondition extracts the pod ready condition from the given status and returns that. +// Returns nil if the condition is not present. +func GetPodReadyCondition(status corev1.PodStatus) *corev1.PodCondition { + _, condition := GetPodCondition(&status, corev1.PodReady) + return condition +} + +// GetPodCondition extracts the provided condition from the given status and returns that. +// Returns nil and -1 if the condition is not present, and the index of the located condition. +func GetPodCondition(status *corev1.PodStatus, conditionType corev1.PodConditionType) (int, *corev1.PodCondition) { + if status == nil { + return -1, nil + } + for i := range status.Conditions { + if status.Conditions[i].Type == conditionType { + return i, &status.Conditions[i] + } + } + return -1, nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go index 38fb8bbd..71bf959e 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go @@ -20,17 +20,25 @@ import ( "fmt" "sort" "strconv" + "strings" "time" + "github.com/gardener/gardener/pkg/client/kubernetes" "github.com/gardener/gardener/pkg/utils/retry" + "github.com/sirupsen/logrus" + appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/duration" "k8s.io/apimachinery/pkg/util/intstr" + corev1client "k8s.io/client-go/kubernetes/typed/core/v1" "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" ) // TruncateLabelValue truncates a string at 63 characters so it's suitable for a label value. @@ -103,6 +111,7 @@ func Key(namespaceOrName string, nameOpt ...string) client.ObjectKey { } // KeyFromObject obtains the client.ObjectKey from the given metav1.Object. +// Deprecated: use client.ObjectKeyFromObject instead. func KeyFromObject(obj metav1.Object) client.ObjectKey { return Key(obj.GetNamespace(), obj.GetName()) } @@ -125,12 +134,8 @@ func ObjectMetaFromKey(key client.ObjectKey) metav1.ObjectMeta { // WaitUntilResourceDeleted deletes the given resource and then waits until it has been deleted. It respects the // given interval and timeout. -func WaitUntilResourceDeleted(ctx context.Context, c client.Client, obj runtime.Object, interval time.Duration) error { - key, err := client.ObjectKeyFromObject(obj) - if err != nil { - return err - } - +func WaitUntilResourceDeleted(ctx context.Context, c client.Client, obj client.Object, interval time.Duration) error { + key := client.ObjectKeyFromObject(obj) return retry.Until(ctx, interval, func(ctx context.Context) (done bool, err error) { if err := c.Get(ctx, key, obj); err != nil { if apierrors.IsNotFound(err) { @@ -144,17 +149,17 @@ func WaitUntilResourceDeleted(ctx context.Context, c client.Client, obj runtime. // WaitUntilResourcesDeleted waits until the given resources are gone. // It respects the given interval and timeout. -func WaitUntilResourcesDeleted(ctx context.Context, c client.Client, obj runtime.Object, interval time.Duration, opts ...client.ListOption) error { +func WaitUntilResourcesDeleted(ctx context.Context, c client.Client, list client.ObjectList, interval time.Duration, opts ...client.ListOption) error { return retry.Until(ctx, interval, func(ctx context.Context) (done bool, err error) { - if err := c.List(ctx, obj, opts...); err != nil { + if err := c.List(ctx, list, opts...); err != nil { return retry.SevereError(err) } - if meta.LenList(obj) == 0 { + if meta.LenList(list) == 0 { return retry.Ok() } var remainingItems []string acc := meta.NewAccessor() - if err := meta.EachListItem(obj, func(remainingObj runtime.Object) error { + if err := meta.EachListItem(list, func(remainingObj runtime.Object) error { name, err := acc.Name(remainingObj) if err != nil { return err @@ -170,13 +175,49 @@ func WaitUntilResourcesDeleted(ctx context.Context, c client.Client, obj runtime // WaitUntilResourceDeletedWithDefaults deletes the given resource and then waits until it has been deleted. It // uses a default interval and timeout -func WaitUntilResourceDeletedWithDefaults(ctx context.Context, c client.Client, obj runtime.Object) error { +func WaitUntilResourceDeletedWithDefaults(ctx context.Context, c client.Client, obj client.Object) error { ctx, cancel := context.WithTimeout(ctx, 10*time.Minute) defer cancel() return WaitUntilResourceDeleted(ctx, c, obj, 5*time.Second) } +// WaitUntilLoadBalancerIsReady waits until the given external load balancer has +// been created (i.e., its ingress information has been updated in the service status). +func WaitUntilLoadBalancerIsReady(ctx context.Context, kubeClient kubernetes.Interface, namespace, name string, timeout time.Duration, logger *logrus.Entry) (string, error) { + var loadBalancerIngress string + if err := retry.UntilTimeout(ctx, 5*time.Second, timeout, func(ctx context.Context) (done bool, err error) { + loadBalancerIngress, err = GetLoadBalancerIngress(ctx, kubeClient.Client(), namespace, name) + if err != nil { + logger.Infof("Waiting until the %s service deployed is ready...", name) + // TODO(AC): This is a quite optimistic check / we should differentiate here + return retry.MinorError(fmt.Errorf("%s service deployed is not ready: %v", name, err)) + } + return retry.Ok() + }); err != nil { + fieldSelector := client.MatchingFields{ + "involvedObject.kind": "Service", + "involvedObject.name": name, + "involvedObject.namespace": namespace, + "type": corev1.EventTypeWarning, + } + eventList := &corev1.EventList{} + if err2 := kubeClient.DirectClient().List(ctx, eventList, fieldSelector); err2 != nil { + return "", fmt.Errorf("error '%v' occured while fetching more details on error '%v'", err2, err) + } + + if len(eventList.Items) > 0 { + eventsErrorMessage := buildEventsErrorMessage(eventList.Items) + errorMessage := err.Error() + "\n\n" + eventsErrorMessage + return "", errors.New(errorMessage) + } + + return "", err + } + + return loadBalancerIngress, nil +} + // GetLoadBalancerIngress takes a context, a client, a namespace and a service name. It queries for a load balancer's technical name // (ip address or hostname). It returns the value of the technical name whereby it always prefers the hostname (if given) // over the IP address. It also returns the list of all load balancer ingresses. @@ -206,7 +247,7 @@ func GetLoadBalancerIngress(ctx context.Context, client client.Client, namespace // LookupObject retrieves an obj for the given object key dealing with potential stale cache that still does not contain the obj. // It first tries to retrieve the obj using the given cached client. // If the object key is not found, then it does live lookup from the API server using the given apiReader. -func LookupObject(ctx context.Context, c client.Client, apiReader client.Reader, key client.ObjectKey, obj runtime.Object) error { +func LookupObject(ctx context.Context, c client.Client, apiReader client.Reader, key client.ObjectKey, obj client.Object) error { err := c.Get(ctx, key, obj) if err == nil { return nil @@ -275,3 +316,224 @@ func ReconcileServicePorts(existingPorts []corev1.ServicePort, desiredPorts []co return out } + +func buildEventsErrorMessage(events []corev1.Event) string { + sortByLastTimestamp := func(o1, o2 controllerutil.Object) bool { + obj1, ok1 := o1.(*corev1.Event) + obj2, ok2 := o2.(*corev1.Event) + + if !ok1 || !ok2 { + return false + } + + return obj1.LastTimestamp.Time.Before(obj2.LastTimestamp.Time) + } + + list := &corev1.EventList{Items: events} + SortBy(sortByLastTimestamp).Sort(list) + events = list.Items + + const eventsLimit = 2 + if len(events) > eventsLimit { + events = events[len(events)-eventsLimit:] + } + + var builder strings.Builder + fmt.Fprintf(&builder, "-> Events:") + for _, event := range events { + var interval string + if event.Count > 1 { + interval = fmt.Sprintf("%s ago (x%d over %s)", translateTimestampSince(event.LastTimestamp), event.Count, translateTimestampSince(event.FirstTimestamp)) + } else { + interval = fmt.Sprintf("%s ago", translateTimestampSince(event.FirstTimestamp)) + if event.FirstTimestamp.IsZero() { + interval = fmt.Sprintf("%s ago", translateMicroTimestampSince(event.EventTime)) + } + } + source := event.Source.Component + if source == "" { + source = event.ReportingController + } + + fmt.Fprintf(&builder, "\n* %s reported %s: %s", source, interval, event.Message) + } + + return builder.String() +} + +// translateTimestampSince returns the elapsed time since timestamp in +// human-readable approximation. +func translateTimestampSince(timestamp metav1.Time) string { + if timestamp.IsZero() { + return "" + } + + return duration.HumanDuration(time.Since(timestamp.Time)) +} + +// translateMicroTimestampSince returns the elapsed time since timestamp in +// human-readable approximation. +func translateMicroTimestampSince(timestamp metav1.MicroTime) string { + if timestamp.IsZero() { + return "" + } + + return duration.HumanDuration(time.Since(timestamp.Time)) +} + +// MergeOwnerReferences merges the newReferences with the list of existing references. +func MergeOwnerReferences(references []metav1.OwnerReference, newReferences ...metav1.OwnerReference) []metav1.OwnerReference { + uids := make(map[types.UID]struct{}) + for _, reference := range references { + uids[reference.UID] = struct{}{} + } + + for _, newReference := range newReferences { + if _, ok := uids[newReference.UID]; !ok { + references = append(references, newReference) + } + } + + return references +} + +// OwnedBy checks if the given object's owner reference contains an entry with the provided attributes. +func OwnedBy(obj runtime.Object, apiVersion, kind, name string, uid types.UID) bool { + acc, err := meta.Accessor(obj) + if err != nil { + return false + } + + for _, ownerReference := range acc.GetOwnerReferences() { + return ownerReference.APIVersion == apiVersion && + ownerReference.Kind == kind && + ownerReference.Name == name && + ownerReference.UID == uid + } + + return false +} + +// NewestObject returns the most recently created object based on the provided list object type. If a filter function +// is provided then it will be applied for each object right after listing all objects. If no object remains then nil +// is returned. The Items field in the list object will be populated with the result returned from the server after +// applying the filter function (if provided). +func NewestObject(ctx context.Context, c client.Client, listObj client.ObjectList, filterFn func(runtime.Object) bool, listOpts ...client.ListOption) (runtime.Object, error) { + if err := c.List(ctx, listObj, listOpts...); err != nil { + return nil, err + } + + if filterFn != nil { + var items []runtime.Object + + if err := meta.EachListItem(listObj, func(obj runtime.Object) error { + if filterFn(obj) { + items = append(items, obj) + } + return nil + }); err != nil { + return nil, err + } + + if err := meta.SetList(listObj, items); err != nil { + return nil, err + } + } + + if meta.LenList(listObj) == 0 { + return nil, nil + } + + ByCreationTimestamp().Sort(listObj) + + items, err := meta.ExtractList(listObj) + if err != nil { + return nil, err + } + + return items[meta.LenList(listObj)-1], nil +} + +// NewestPodForDeployment returns the most recently created Pod object for the given deployment. +func NewestPodForDeployment(ctx context.Context, c client.Client, deployment *appsv1.Deployment) (*corev1.Pod, error) { + listOpts := []client.ListOption{client.InNamespace(deployment.Namespace)} + if deployment.Spec.Selector != nil { + listOpts = append(listOpts, client.MatchingLabels(deployment.Spec.Selector.MatchLabels)) + } + + replicaSet, err := NewestObject( + ctx, + c, + &appsv1.ReplicaSetList{}, + func(obj runtime.Object) bool { + return OwnedBy(obj, appsv1.SchemeGroupVersion.String(), "Deployment", deployment.Name, deployment.UID) + }, + listOpts..., + ) + if err != nil { + return nil, err + } + if replicaSet == nil { + return nil, nil + } + + newestReplicaSet, ok := replicaSet.(*appsv1.ReplicaSet) + if !ok { + return nil, fmt.Errorf("object is not of type *appsv1.ReplicaSet but %T", replicaSet) + } + + pod, err := NewestObject( + ctx, + c, + &corev1.PodList{}, + func(obj runtime.Object) bool { + return OwnedBy(obj, appsv1.SchemeGroupVersion.String(), "ReplicaSet", newestReplicaSet.Name, newestReplicaSet.UID) + }, + listOpts..., + ) + if err != nil { + return nil, err + } + if pod == nil { + return nil, nil + } + + newestPod, ok := pod.(*corev1.Pod) + if !ok { + return nil, fmt.Errorf("object is not of type *corev1.Pod but %T", pod) + } + + return newestPod, nil +} + +// MostRecentCompleteLogs returns the logs of the pod/container in case it is not running. If the pod/container is +// running then the logs of the previous pod/container are being returned. +func MostRecentCompleteLogs( + ctx context.Context, + podInterface corev1client.PodInterface, + pod *corev1.Pod, + containerName string, + tailLines *int64, +) ( + string, + error, +) { + previousLogs := false + for _, containerStatus := range pod.Status.ContainerStatuses { + if containerName == "" || containerStatus.Name == containerName { + previousLogs = containerStatus.State.Running != nil + break + } + } + + logs, err := kubernetes.GetPodLogs(ctx, podInterface, pod.Name, &corev1.PodLogOptions{ + Container: containerName, + TailLines: tailLines, + Previous: previousLogs, + }) + if err != nil { + return "", err + } + + return string(logs), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/leaderelection.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/leaderelection.go new file mode 100644 index 00000000..5d84c356 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/leaderelection.go @@ -0,0 +1,68 @@ +// 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 kubernetes + +import ( + "context" + "fmt" + + coordinationv1 "k8s.io/api/coordination/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/client-go/tools/leaderelection/resourcelock" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// ReadLeaderElectionRecord returns the leader election record for a given lock type and a namespace/name combination. +func ReadLeaderElectionRecord(ctx context.Context, client client.Client, lock, namespace, name string) (*resourcelock.LeaderElectionRecord, error) { + switch lock { + case resourcelock.EndpointsResourceLock: + endpoint := &corev1.Endpoints{} + if err := client.Get(ctx, Key(namespace, name), endpoint); err != nil { + return nil, err + } + return leaderElectionRecordFromAnnotations(endpoint.Annotations) + + case resourcelock.ConfigMapsResourceLock: + configmap := &corev1.ConfigMap{} + if err := client.Get(ctx, Key(namespace, name), configmap); err != nil { + return nil, err + } + return leaderElectionRecordFromAnnotations(configmap.Annotations) + + case resourcelock.LeasesResourceLock: + lease := &coordinationv1.Lease{} + if err := client.Get(ctx, Key(namespace, name), lease); err != nil { + return nil, err + } + return resourcelock.LeaseSpecToLeaderElectionRecord(&lease.Spec), nil + } + + return nil, fmt.Errorf("unknown lock type: %s", lock) +} + +func leaderElectionRecordFromAnnotations(annotations map[string]string) (*resourcelock.LeaderElectionRecord, error) { + var leaderElectionRecord resourcelock.LeaderElectionRecord + + leaderElection, ok := annotations[resourcelock.LeaderElectionRecordAnnotationKey] + if !ok { + return nil, fmt.Errorf("could not find key %q in annotations", resourcelock.LeaderElectionRecordAnnotationKey) + } + + if err := json.Unmarshal([]byte(leaderElection), &leaderElectionRecord); err != nil { + return nil, fmt.Errorf("failed to unmarshal leader election record: %+v", err) + } + + return &leaderElectionRecord, nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/node.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/node.go deleted file mode 100644 index 84af36bb..00000000 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/node.go +++ /dev/null @@ -1,59 +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 kubernetes - -import ( - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/labels" -) - -// NodeSource is a function that produces a slice of Nodes or an error. -type NodeSource func() ([]*corev1.Node, error) - -// NodeLister is a lister of Nodes. -type NodeLister interface { - // List lists all Nodes that match the given selector. - List(selector labels.Selector) ([]*corev1.Node, error) -} - -type nodeLister struct { - source NodeSource -} - -// NewNodeLister creates a new NodeLister from the given NodeSource. -func NewNodeLister(source NodeSource) NodeLister { - return &nodeLister{source: source} -} - -func filterNodes(source NodeSource, filter func(*corev1.Node) bool) ([]*corev1.Node, error) { - nodes, err := source() - if err != nil { - return nil, err - } - - var out []*corev1.Node - for _, node := range nodes { - if filter(node) { - out = append(out, node) - } - } - return out, nil -} - -func (d *nodeLister) List(selector labels.Selector) ([]*corev1.Node, error) { - return filterNodes(d.source, func(node *corev1.Node) bool { - return selector.Matches(labels.Set(node.Labels)) - }) -} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/object.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/object.go index 24cb0007..be0080d8 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/object.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/object.go @@ -18,21 +18,16 @@ import ( "context" "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/controller-runtime/pkg/client" ) // ObjectName returns the name of the given object in the format / -func ObjectName(obj runtime.Object) string { - k, err := client.ObjectKeyFromObject(obj) - if err != nil { - return "/" - } - return k.String() +func ObjectName(obj client.Object) string { + return client.ObjectKeyFromObject(obj).String() } // DeleteObjects deletes a list of Kubernetes objects. -func DeleteObjects(ctx context.Context, c client.Client, objects ...runtime.Object) error { +func DeleteObjects(ctx context.Context, c client.Client, objects ...client.Object) error { for _, obj := range objects { if err := DeleteObject(ctx, c, obj); err != nil { return err @@ -42,7 +37,7 @@ func DeleteObjects(ctx context.Context, c client.Client, objects ...runtime.Obje } // DeleteObject deletes a Kubernetes object. It ignores 'not found' and 'no match' errors. -func DeleteObject(ctx context.Context, c client.Client, object runtime.Object) error { +func DeleteObject(ctx context.Context, c client.Client, object client.Object) error { if err := c.Delete(ctx, object); client.IgnoreNotFound(err) != nil && !meta.IsNoMatchError(err) { return err } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/patch.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/patch.go index 18ee53cb..1bb9a658 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/patch.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/patch.go @@ -23,7 +23,6 @@ import ( jsoniter "github.com/json-iterator/go" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/wait" @@ -34,25 +33,20 @@ var json = jsoniter.ConfigFastest // TryPatch tries to apply the given transformation function onto the given object, and to patch it afterwards with optimistic locking. // It retries the patch with an exponential backoff. -func TryPatch(ctx context.Context, backoff wait.Backoff, c client.Client, obj runtime.Object, transform func() error) error { +func TryPatch(ctx context.Context, backoff wait.Backoff, c client.Client, obj client.Object, transform func() error) error { return tryPatch(ctx, backoff, c, obj, c.Patch, transform) } // TryPatchStatus tries to apply the given transformation function onto the given object, and to patch its // status afterwards with optimistic locking. It retries the status patch with an exponential backoff. -func TryPatchStatus(ctx context.Context, backoff wait.Backoff, c client.Client, obj runtime.Object, transform func() error) error { +func TryPatchStatus(ctx context.Context, backoff wait.Backoff, c client.Client, obj client.Object, transform func() error) error { return tryPatch(ctx, backoff, c, obj, c.Status().Patch, transform) } -func tryPatch(ctx context.Context, backoff wait.Backoff, c client.Client, obj runtime.Object, patchFunc func(context.Context, runtime.Object, client.Patch, ...client.PatchOption) error, transform func() error) error { - key, err := client.ObjectKeyFromObject(obj) - if err != nil { - return err - } - +func tryPatch(ctx context.Context, backoff wait.Backoff, c client.Client, obj client.Object, patchFunc func(context.Context, client.Object, client.Patch, ...client.PatchOption) error, transform func() error) error { resetCopy := obj.DeepCopyObject() return exponentialBackoff(ctx, backoff, func() (bool, error) { - if err := c.Get(ctx, key, obj); err != nil { + if err := c.Get(ctx, client.ObjectKeyFromObject(obj), obj); err != nil { return false, err } beforeTransform := obj.DeepCopyObject() @@ -120,6 +114,6 @@ func IsEmptyPatch(patch []byte) bool { } // SubmitEmptyPatch submits an empty patch to the given `obj` with the given `client` instance. -func SubmitEmptyPatch(ctx context.Context, c client.Client, obj runtime.Object) error { - return c.Patch(ctx, obj, client.ConstantPatch(types.StrategicMergePatchType, []byte("{}"))) +func SubmitEmptyPatch(ctx context.Context, c client.Client, obj client.Object) error { + return c.Patch(ctx, obj, client.RawPatch(types.StrategicMergePatchType, []byte("{}"))) } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/shoot.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/shoot.go index 2aa3cd85..7b4be644 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/shoot.go @@ -106,27 +106,3 @@ func TryUpdateShootStatus(ctx context.Context, g gardencore.Interface, backoff w return equality.Semantic.DeepEqual(cur.Status, updated.Status) }) } - -// TryUpdateShootLabels tries to update the status of the shoot matching the given . -// It retries with the given characteristics as long as it gets Conflict errors. -// The transformation function is applied to the current state of the Shoot object. If the transformation -// yields a semantically equal Shoot (regarding labels), no update is done and the operation returns normally. -func TryUpdateShootLabels(ctx context.Context, g gardencore.Interface, backoff wait.Backoff, meta metav1.ObjectMeta, transform func(*gardencorev1beta1.Shoot) (*gardencorev1beta1.Shoot, error)) (*gardencorev1beta1.Shoot, error) { - return tryUpdateShoot(ctx, g, backoff, meta, transform, func(g gardencore.Interface, shoot *gardencorev1beta1.Shoot) (*gardencorev1beta1.Shoot, error) { - return g.CoreV1beta1().Shoots(shoot.Namespace).Update(ctx, shoot, kubernetes.DefaultUpdateOptions()) - }, func(cur, updated *gardencorev1beta1.Shoot) bool { - return equality.Semantic.DeepEqual(cur.Labels, updated.Labels) - }) -} - -// TryUpdateShootAnnotations tries to update the annotations of the shoot matching the given . -// It retries with the given characteristics as long as it gets Conflict errors. -// The transformation function is applied to the current state of the Shoot object. If the transformation -// yields a semantically equal Shoot (regarding conditions), no update is done and the operation returns normally. -func TryUpdateShootAnnotations(ctx context.Context, g gardencore.Interface, backoff wait.Backoff, meta metav1.ObjectMeta, transform func(*gardencorev1beta1.Shoot) (*gardencorev1beta1.Shoot, error)) (*gardencorev1beta1.Shoot, error) { - return tryUpdateShoot(ctx, g, backoff, meta, transform, func(g gardencore.Interface, shoot *gardencorev1beta1.Shoot) (*gardencorev1beta1.Shoot, error) { - return g.CoreV1beta1().Shoots(shoot.Namespace).Update(ctx, shoot, kubernetes.DefaultUpdateOptions()) - }, func(cur, updated *gardencorev1beta1.Shoot) bool { - return equality.Semantic.DeepEqual(cur.Annotations, updated.Annotations) - }) -} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/sorter.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/sorter.go new file mode 100644 index 00000000..2d67a200 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/sorter.go @@ -0,0 +1,79 @@ +// 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 kubernetes + +import ( + "sort" + + "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" +) + +// ByName returns a comparison function for sorting by name. +func ByName() SortBy { + return func(o1, o2 controllerutil.Object) bool { + return o1.GetName() < o2.GetName() + } +} + +// ByCreationTimestamp returns a comparison function for sorting by creation timestamp. +func ByCreationTimestamp() SortBy { + return func(o1, o2 controllerutil.Object) bool { + return o1.GetCreationTimestamp().Time.Before(o2.GetCreationTimestamp().Time) + } +} + +// SortBy the type of a "less" function that defines the ordering of its object arguments. +type SortBy func(o1, o2 controllerutil.Object) bool + +// Sort sorts the items in the provided list objects according to the sort-by function. +func (sortBy SortBy) Sort(objList runtime.Object) { + if !meta.IsListType(objList) { + panic("provided is not a list type") + } + + items, err := meta.ExtractList(objList) + if err != nil { + panic(err) + } + + ps := &objectSorter{objects: items, compareFn: sortBy} + sort.Sort(ps) + + if err := meta.SetList(objList, ps.objects); err != nil { + panic(err) + } +} + +type objectSorter struct { + objects []runtime.Object + compareFn SortBy +} + +func (s *objectSorter) Len() int { + return len(s.objects) +} + +func (s *objectSorter) Swap(i, j int) { + s.objects[i], s.objects[j] = s.objects[j], s.objects[i] +} + +func (s *objectSorter) Less(i, j int) bool { + return s.compareFn( + s.objects[i].(controllerutil.Object), + s.objects[j].(controllerutil.Object), + ) +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/update.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/update.go index 698e138a..b209d3e9 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/update.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/update.go @@ -20,32 +20,26 @@ import ( "time" apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" ) // TryUpdate tries to apply the given transformation function onto the given object, and to update it afterwards. // It retries the update with an exponential backoff. -func TryUpdate(ctx context.Context, backoff wait.Backoff, c client.Client, obj runtime.Object, transform func() error) error { +func TryUpdate(ctx context.Context, backoff wait.Backoff, c client.Client, obj client.Object, transform func() error) error { return tryUpdate(ctx, backoff, c, obj, c.Update, transform) } // TryUpdateStatus tries to apply the given transformation function onto the given object, and to update its // status afterwards. It retries the status update with an exponential backoff. -func TryUpdateStatus(ctx context.Context, backoff wait.Backoff, c client.Client, obj runtime.Object, transform func() error) error { +func TryUpdateStatus(ctx context.Context, backoff wait.Backoff, c client.Client, obj client.Object, transform func() error) error { return tryUpdate(ctx, backoff, c, obj, c.Status().Update, transform) } -func tryUpdate(ctx context.Context, backoff wait.Backoff, c client.Client, obj runtime.Object, updateFunc func(context.Context, runtime.Object, ...client.UpdateOption) error, transform func() error) error { - key, err := client.ObjectKeyFromObject(obj) - if err != nil { - return err - } - +func tryUpdate(ctx context.Context, backoff wait.Backoff, c client.Client, obj client.Object, updateFunc func(context.Context, client.Object, ...client.UpdateOption) error, transform func() error) error { resetCopy := obj.DeepCopyObject() return exponentialBackoff(ctx, backoff, func() (bool, error) { - if err := c.Get(ctx, key, obj); err != nil { + if err := c.Get(ctx, client.ObjectKeyFromObject(obj), obj); err != nil { return false, err } 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 75d2b8ee..2e75ec25 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/managedresources/managedresources.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/managedresources/managedresources.go @@ -16,9 +16,12 @@ package managedresources import ( "context" + "fmt" "time" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + "github.com/gardener/gardener/pkg/utils/kubernetes/health" + "github.com/gardener/gardener/pkg/utils/retry" resourcesv1alpha1 "github.com/gardener/gardener-resource-manager/pkg/apis/resources/v1alpha1" "github.com/gardener/gardener-resource-manager/pkg/manager" @@ -90,6 +93,31 @@ func DeleteManagedResource(ctx context.Context, client client.Client, namespace return nil } +// IntervalWait is the interval when waiting for managed resources. +var IntervalWait = 2 * time.Second + +// WaitUntilManagedResourceHealthy waits until the given managed resource is healthy. +func WaitUntilManagedResourceHealthy(ctx context.Context, client client.Client, namespace, name string) error { + obj := &resourcesv1alpha1.ManagedResource{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + } + + return retry.Until(ctx, IntervalWait, func(ctx context.Context) (done bool, err error) { + if err := client.Get(ctx, kutil.Key(namespace, name), obj); err != nil { + return retry.SevereError(err) + } + + if err := health.CheckManagedResource(obj); err != nil { + return retry.MinorError(fmt.Errorf("managed resource %s/%s is not healthy", namespace, name)) + } + + return retry.Ok() + }) +} + // WaitUntilManagedResourceDeleted waits until the given managed resource is deleted. func WaitUntilManagedResourceDeleted(ctx context.Context, client client.Client, namespace, name string) error { mr := &resourcesv1alpha1.ManagedResource{ @@ -98,7 +126,7 @@ func WaitUntilManagedResourceDeleted(ctx context.Context, client client.Client, Namespace: namespace, }, } - return kutil.WaitUntilResourceDeleted(ctx, client, mr, 2*time.Second) + return kutil.WaitUntilResourceDeleted(ctx, client, mr, IntervalWait) } // KeepManagedResourceObjects updates the keepObjects field of the managed resource with the given name in the given namespace. @@ -109,6 +137,7 @@ func KeepManagedResourceObjects(ctx context.Context, c client.Client, namespace, Namespace: namespace, }, } + if err := kutil.TryUpdate(ctx, k8sretry.DefaultBackoff, c, resource, func() error { resource.Spec.KeepObjects = &keepObjects return nil diff --git a/vendor/github.com/gardener/gardener/pkg/utils/managedresources/registry.go b/vendor/github.com/gardener/gardener/pkg/utils/managedresources/registry.go new file mode 100644 index 00000000..b069e9d2 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/managedresources/registry.go @@ -0,0 +1,142 @@ +// 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 managedresources + +import ( + "fmt" + "reflect" + "strings" + + "k8s.io/apimachinery/pkg/api/meta" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/runtime/serializer/json" + "sigs.k8s.io/controller-runtime/pkg/client/apiutil" +) + +// Registry stores objects and their serialized form. It allows to compute a map of all registered objects that can be +// used as part of a Secret's data which is referenced by a ManagedResource. +type Registry struct { + scheme *runtime.Scheme + codec runtime.Codec + nameToObject map[string]*object +} + +type object struct { + obj runtime.Object + serialization []byte +} + +// NewRegistry returns a new registry for resources. The given scheme, codec, and serializer must know all the resource +// types that will later be added to the registry. +func NewRegistry(scheme *runtime.Scheme, codec serializer.CodecFactory, serializer *json.Serializer) *Registry { + var groupVersions []schema.GroupVersion + for k := range scheme.AllKnownTypes() { + groupVersions = append(groupVersions, k.GroupVersion()) + } + + return &Registry{ + scheme: scheme, + codec: codec.CodecForVersions(serializer, serializer, schema.GroupVersions(groupVersions), schema.GroupVersions(groupVersions)), + nameToObject: make(map[string]*object), + } +} + +// Add adds the given object the registry. It computes a filename based on its type, namespace, and name. It serializes +// the object to YAML and stores both representations (object and serialization) in the registry. +func (r *Registry) Add(obj runtime.Object) error { + if obj == nil || reflect.ValueOf(obj) == reflect.Zero(reflect.TypeOf(obj)) { + return nil + } + + objectName, err := r.objectName(obj) + if err != nil { + return err + } + filename := objectName + ".yaml" + + if _, ok := r.nameToObject[filename]; ok { + return fmt.Errorf("duplicate filename in registry: %q", filename) + } + + serializationYAML, err := runtime.Encode(r.codec, obj) + if err != nil { + return err + } + + r.nameToObject[filename] = &object{ + obj: obj, + serialization: serializationYAML, + } + + return nil +} + +// SerializedObjects returns a map whose keys are filenames and whose values are serialized objects. +func (r *Registry) SerializedObjects() map[string][]byte { + out := make(map[string][]byte, len(r.nameToObject)) + for name, object := range r.nameToObject { + out[name] = object.serialization + } + return out +} + +// AddAllAndSerialize calls Add() for all the given objects before calling SerializedObjects(). +func (r *Registry) AddAllAndSerialize(objects ...runtime.Object) (map[string][]byte, error) { + for _, resource := range objects { + if err := r.Add(resource); err != nil { + return nil, err + } + } + return r.SerializedObjects(), nil +} + +// RegisteredObjects returns a map whose keys are filenames and whose values are objects. +func (r *Registry) RegisteredObjects() map[string]runtime.Object { + out := make(map[string]runtime.Object, len(r.nameToObject)) + for name, object := range r.nameToObject { + out[name] = object.obj + } + return out +} + +// String returns the string representation of the registry. +func (r *Registry) String() string { + out := make([]string, 0, len(r.nameToObject)) + for name, object := range r.nameToObject { + out = append(out, fmt.Sprintf("* %s:\n%s", name, object.serialization)) + } + return strings.Join(out, "\n\n") +} + +func (r *Registry) objectName(obj runtime.Object) (string, error) { + gvk, err := apiutil.GVKForObject(obj, r.scheme) + if err != nil { + return "", err + } + + acc, err := meta.Accessor(obj) + if err != nil { + return "", err + } + + return fmt.Sprintf( + "%s__%s__%s", + strings.ToLower(gvk.Kind), + acc.GetNamespace(), + strings.Replace(acc.GetName(), ":", "_", -1), + ), nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go b/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go index 34eb4b90..32a855ff 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/miscellaneous.go @@ -17,6 +17,7 @@ package utils import ( "net" "regexp" + "strings" "time" "k8s.io/apimachinery/pkg/api/resource" @@ -137,3 +138,8 @@ func IDForKeyWithOptionalValue(key string, value *string) string { func QuantityPtr(q resource.Quantity) *resource.Quantity { return &q } + +// Indent indents the given string with the given number of spaces. +func Indent(str string, spaces int) string { + return strings.ReplaceAll(str, "\n", "\n"+strings.Repeat(" ", spaces)) +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/retry/retry.go b/vendor/github.com/gardener/gardener/pkg/utils/retry/retry.go index b0ef8fe6..75502758 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/retry/retry.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/retry/retry.go @@ -107,36 +107,37 @@ func MinorOrSevereError(retryCountUntilSevere, threshold int, err error) (bool, return MinorError(err) } -type retryError struct { +// Error is an error that occurred during a retry operation. +type Error struct { ctxError error err error } // Cause implements Causer. -func (r *retryError) Cause() error { - if r.err != nil { - return r.err +func (e *Error) Cause() error { + if e.err != nil { + return e.err } - return r.ctxError + return e.ctxError } // Unwrap implements the Unwrap function // https://golang.org/pkg/errors/#Unwrap -func (r *retryError) Unwrap() error { - return r.err +func (e *Error) Unwrap() error { + return e.err } // Error implements error. -func (r *retryError) Error() string { - if r.err != nil { - return fmt.Sprintf("retry failed with %v, last error: %v", r.ctxError, r.err) +func (e *Error) Error() string { + if e.err != nil { + return fmt.Sprintf("retry failed with %v, last error: %v", e.ctxError, e.err) } - return fmt.Sprintf("retry failed with %v", r.ctxError) + return fmt.Sprintf("retry failed with %v", e.ctxError) } -// NewRetryError returns a new error with the given context error and error. The non-context error is optional. -func NewRetryError(ctxError, err error) error { - return &retryError{ctxError, err} +// NewError returns a new error with the given context error and error. The non-context error is optional. +func NewError(ctxError, err error) error { + return &Error{ctxError, err} } // UntilFor keeps retrying the given Func until it either errors severely or the context expires. @@ -166,12 +167,12 @@ func UntilFor(ctx context.Context, waitFunc WaitFunc, agg ErrorAggregator, f Fun case <-waitDone: select { case <-ctxDone: - return NewRetryError(ctx.Err(), agg.Error()) + return NewError(ctx.Err(), agg.Error()) default: return nil } case <-ctxDone: - return NewRetryError(ctx.Err(), agg.Error()) + return NewError(ctx.Err(), agg.Error()) } }(); err != nil { return err diff --git a/vendor/github.com/gardener/gardener/pkg/utils/timewindow.go b/vendor/github.com/gardener/gardener/pkg/utils/timewindow.go index 1b2af06f..99cadc40 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/timewindow.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/timewindow.go @@ -191,14 +191,18 @@ func (m *MaintenanceTimeWindow) Contains(tTime time.Time) bool { return t.Compare(m.begin) >= 0 && t.Compare(m.end) <= 0 } -var ( - // RandomFunc is a function that computes a random number. - RandomFunc = rand.Int63nRange -) +// RandomFunc is a function that computes a random number. +var RandomFunc = rand.Int63nRange // RandomDurationUntilNext computes the duration until a random time within the time window for the next maintenance // execution. -func (m *MaintenanceTimeWindow) RandomDurationUntilNext(from time.Time) time.Duration { +// The parameter is the time from which the calculation for the next maintenance time window shall be performed +// (typically: time.Now()). +// The parameter controls whether the beginning of the maintenance time window should be +// changed to if is already inside the maintenance time window (otherwise, it has no effect). As a +// consequence, this will return a random duration from until the end of the maintenance time window which is +// shorter than 24h. +func (m *MaintenanceTimeWindow) RandomDurationUntilNext(from time.Time, shiftBeginToFromIfContained bool) time.Duration { from = from.UTC() var ( @@ -206,6 +210,15 @@ func (m *MaintenanceTimeWindow) RandomDurationUntilNext(from time.Time) time.Dur end = m.adjustedEnd(from) ) + if shiftBeginToFromIfContained && m.Contains(from) { + dayOffset := 0 + if from.Hour()-begin.Hour() < 0 { + dayOffset = 1 + } + begin = from.AddDate(0, 0, dayOffset) + from = from.AddDate(0, 0, dayOffset) + } + if begin.Sub(from) < 0 && (m.Contains(from) || from.After(end)) { begin = begin.AddDate(0, 0, 1) end = end.AddDate(0, 0, 1) 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 ebbd7ca0..77a60586 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/version/version.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/version/version.go @@ -50,7 +50,7 @@ func CheckVersionMeetsConstraint(version, constraint string) (bool, error) { return false, err } - v, err := semver.NewVersion(version) + v, err := semver.NewVersion(normalizeVersion(version)) if err != nil { return false, err } diff --git a/vendor/github.com/gardener/gardener/pkg/version/version.go b/vendor/github.com/gardener/gardener/pkg/version/version.go new file mode 100644 index 00000000..bb83a36c --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/version/version.go @@ -0,0 +1,65 @@ +// 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 version + +import ( + "fmt" + "runtime" + "strings" + + apimachineryversion "k8s.io/apimachinery/pkg/version" +) + +var ( + gitVersion = "v0.0.0-dev" + gitCommit string + gitTreeState string + buildDate = "1970-01-01T00:00:00Z" + + version *apimachineryversion.Info +) + +// Get returns the overall codebase version. It's for detecting +// what code a binary was built from. +// These variables typically come from -ldflags settings and in +// their absence fallback to the settings in pkg/version/version.go +func Get() apimachineryversion.Info { + return *version +} + +func init() { + var ( + versionParts = strings.Split(gitVersion, ".") + gitMajor string + gitMinor string + ) + + if len(versionParts) >= 2 { + gitMajor = strings.TrimPrefix(versionParts[0], "v") + gitMinor = versionParts[1] + } + + version = &apimachineryversion.Info{ + Major: gitMajor, + Minor: gitMinor, + GitVersion: gitVersion, + GitCommit: gitCommit, + GitTreeState: gitTreeState, + BuildDate: buildDate, + GoVersion: runtime.Version(), + Compiler: runtime.Compiler, + Platform: fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH), + } +} diff --git a/vendor/github.com/go-logr/logr/README.md b/vendor/github.com/go-logr/logr/README.md index 26296d02..e9b5520a 100644 --- a/vendor/github.com/go-logr/logr/README.md +++ b/vendor/github.com/go-logr/logr/README.md @@ -1,9 +1,9 @@ # A more minimal logging API for Go -Before you consider this package, please read [this blog post by the inimitable -Dave Cheney](http://dave.cheney.net/2015/11/05/lets-talk-about-logging). I -really appreciate what he has to say, and it largely aligns with my own -experiences. Too many choices of levels means inconsistent logs. +Before you consider this package, please read [this blog post by the +inimitable Dave Cheney][warning-makes-no-sense]. I really appreciate what +he has to say, and it largely aligns with my own experiences. Too many +choices of levels means inconsistent logs. This package offers a purely abstract interface, based on these ideas but with a few twists. Code can depend on just this interface and have the actual @@ -31,6 +31,153 @@ may feel very similar, but the primary difference is the lack of semantics. Because verbosity is a numerical value, it's safe to assume that an app running with higher verbosity means more (and less important) logs will be generated. -This is a BETA grade API. I have implemented it for -[glog](https://godoc.org/github.com/golang/glog). Until there is a significant -2nd implementation, I don't really know how it will change. +This is a BETA grade API. + +There are implementations for the following logging libraries: + +- **github.com/google/glog**: [glogr](https://github.com/go-logr/glogr) +- **k8s.io/klog**: [klogr](https://git.k8s.io/klog/klogr) +- **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) + +# FAQ + +## Conceptual + +## Why structured logging? + +- **Structured logs are more easily queriable**: Since you've got + key-value pairs, it's much easier to query your structured logs for + particular values by filtering on the contents of a particular key -- + think searching request logs for error codes, Kubernetes reconcilers for + the name and namespace of the reconciled object, etc + +- **Structured logging makes it easier to have cross-referencable logs**: + Similarly to searchability, if you maintain conventions around your + keys, it becomes easy to gather all log lines related to a particular + concept. + +- **Structured logs allow better dimensions of filtering**: if you have + structure to your logs, you've got more precise control over how much + information is logged -- you might choose in a particular configuration + to log certain keys but not others, only log lines where a certain key + matches a certain value, etc, instead of just having v-levels and names + to key off of. + +- **Structured logs better represent structured data**: sometimes, the + data that you want to log is inherently structured (think tuple-link + objects). Structured logs allow you to preserve that structure when + outputting. + +## Why V-levels? + +**V-levels give operators an easy way to control the chattiness of log +operations**. V-levels provide a way for a given package to distinguish +the relative importance or verbosity of a given log message. Then, if +a particular logger or package is logging too many messages, the user +of the package can simply change the v-levels for that library. + +## Why not more named levels, like Warning? + +Read [Dave Cheney's post][warning-makes-no-sense]. Then read [Differences +from Dave's ideas](#differences-from-daves-ideas). + +## Why not allow format strings, too? + +**Format strings negate many of the benefits of structured logs**: + +- They're not easily searchable without resorting to fuzzy searching, + regular expressions, etc + +- They don't store structured data well, since contents are flattened into + a string + +- They're not cross-referencable + +- They don't compress easily, since the message is not constant + +(unless you turn positional parameters into key-value pairs with numerical +keys, at which point you've gotten key-value logging with meaningless +keys) + +## Practical + +## Why key-value pairs, and not a map? + +Key-value pairs are *much* easier to optimize, especially around +allocations. Zap (a structured logger that inspired logr's interface) has +[performance measurements](https://github.com/uber-go/zap#performance) +that show this quite nicely. + +While the interface ends up being a little less obvious, you get +potentially better performance, plus avoid making users type +`map[string]string{}` every time they want to log. + +## What if my V-levels differ between libraries? + +That's fine. Control your V-levels on a per-logger basis, and use the +`WithName` function to pass different loggers to different libraries. + +Generally, you should take care to ensure that you have relatively +consistent V-levels within a given logger, however, as this makes deciding +on what verbosity of logs to request easier. + +## But I *really* want to use a format string! + +That's not actually a question. Assuming your question is "how do +I convert my mental model of logging with format strings to logging with +constant messages": + +1. figure out what the error actually is, as you'd write in a TL;DR style, + and use that as a message + +2. For every place you'd write a format specifier, look to the word before + it, and add that as a key value pair + +For instance, consider the following examples (all taken from spots in the +Kubernetes codebase): + +- `klog.V(4).Infof("Client is returning errors: code %v, error %v", + responseCode, err)` becomes `logger.Error(err, "client returned an + error", "code", responseCode)` + +- `klog.V(4).Infof("Got a Retry-After %ds response for attempt %d to %v", + seconds, retries, url)` becomes `logger.V(4).Info("got a retry-after + response when requesting url", "attempt", retries, "after + seconds", seconds, "url", url)` + +If you *really* must use a format string, place it as a key value, and +call `fmt.Sprintf` yourself -- for instance, `log.Printf("unable to +reflect over type %T")` becomes `logger.Info("unable to reflect over +type", "type", fmt.Sprintf("%T"))`. In general though, the cases where +this is necessary should be few and far between. + +## How do I choose my V-levels? + +This is basically the only hard constraint: increase V-levels to denote +more verbose or more debug-y logs. + +Otherwise, you can start out with `0` as "you always want to see this", +`1` as "common logging that you might *possibly* want to turn off", and +`10` as "I would like to performance-test your log collection stack". + +Then gradually choose levels in between as you need them, working your way +down from 10 (for debug and trace style logs) and up from 1 (for chattier +info-type logs). + +## How do I choose my keys + +- make your keys human-readable +- constant keys are generally a good idea +- be consistent across your codebase +- keys should naturally match parts of the message string + +While key names are mostly unrestricted (and spaces are acceptable), +it's generally a good idea to stick to printable ascii characters, or at +least match the general character set of your log lines. + +[warning-makes-no-sense]: http://dave.cheney.net/2015/11/05/lets-talk-about-logging diff --git a/vendor/github.com/go-logr/logr/discard.go b/vendor/github.com/go-logr/logr/discard.go new file mode 100644 index 00000000..267c796c --- /dev/null +++ b/vendor/github.com/go-logr/logr/discard.go @@ -0,0 +1,35 @@ +package logr + +// Discard returns a valid Logger that discards all messages logged to it. +// It can be used whenever the caller is not interested in the logs. +func Discard() Logger { + return discardLogger{} +} + +// discardLogger is a Logger that discards all messages. +type discardLogger struct{} + +func (l discardLogger) Enabled() bool { + return false +} + +func (l discardLogger) Info(msg string, keysAndValues ...interface{}) { +} + +func (l discardLogger) Error(err error, msg string, keysAndValues ...interface{}) { +} + +func (l discardLogger) V(level int) Logger { + return l +} + +func (l discardLogger) WithValues(keysAndValues ...interface{}) Logger { + return l +} + +func (l discardLogger) WithName(name string) Logger { + return l +} + +// Verify that it actually implements the interface +var _ Logger = discardLogger{} diff --git a/vendor/github.com/go-logr/logr/go.mod b/vendor/github.com/go-logr/logr/go.mod new file mode 100644 index 00000000..591884e9 --- /dev/null +++ b/vendor/github.com/go-logr/logr/go.mod @@ -0,0 +1,3 @@ +module github.com/go-logr/logr + +go 1.14 diff --git a/vendor/github.com/go-logr/logr/logr.go b/vendor/github.com/go-logr/logr/logr.go index ad72e788..e86896c6 100644 --- a/vendor/github.com/go-logr/logr/logr.go +++ b/vendor/github.com/go-logr/logr/logr.go @@ -1,3 +1,19 @@ +/* +Copyright 2019 The logr 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 logr defines abstract interfaces for logging. Packages can depend on // these interfaces and callers can implement logging in whatever way is // appropriate. @@ -13,95 +29,131 @@ // // Usage // -// Logging is done using a Logger. Loggers can have name prefixes and named values -// attached, so that all log messages logged with that Logger have some base context -// associated. +// Logging is done using a Logger. Loggers can have name prefixes and named +// values attached, so that all log messages logged with that Logger have some +// base context associated. // -// The term "key" is used to refer to the name associated with a particular value, to -// disambiguate it from the general Logger name. +// The term "key" is used to refer to the name associated with a particular +// value, to disambiguate it from the general Logger name. // -// For instance, suppose we're trying to reconcile the state of an object, and we want -// to log that we've made some decision. +// For instance, suppose we're trying to reconcile the state of an object, and +// we want to log that we've made some decision. // -// With the traditional log package, we might write -// log.Printf( -// "decided to set field foo to value %q for object %s/%s", +// With the traditional log package, we might write: +// log.Printf("decided to set field foo to value %q for object %s/%s", // targetValue, object.Namespace, object.Name) // -// With logr's structured logging, we'd write -// // elsewhere in the file, set up the logger to log with the prefix of "reconcilers", -// // and the named value target-type=Foo, for extra context. -// log := mainLogger.WithName("reconcilers").WithValues("target-type", "Foo") +// With logr's structured logging, we'd write: +// // elsewhere in the file, set up the logger to log with the prefix of +// // "reconcilers", and the named value target-type=Foo, for extra context. +// log := mainLogger.WithName("reconcilers").WithValues("target-type", "Foo") // -// // later on... -// log.Info("setting field foo on object", "value", targetValue, "object", object) +// // later on... +// log.Info("setting foo on object", "value", targetValue, "object", object) // -// Depending on our logging implementation, we could then make logging decisions based on field values -// (like only logging such events for objects in a certain namespace), or copy the structured -// information into a structured log store. +// Depending on our logging implementation, we could then make logging decisions +// based on field values (like only logging such events for objects in a certain +// namespace), or copy the structured information into a structured log store. // -// For logging errors, Logger has a method called Error. Suppose we wanted to log an -// error while reconciling. With the traditional log package, we might write +// For logging errors, Logger has a method called Error. Suppose we wanted to +// log an error while reconciling. With the traditional log package, we might +// write: // log.Errorf("unable to reconcile object %s/%s: %v", object.Namespace, object.Name, err) // -// With logr, we'd instead write +// With logr, we'd instead write: // // assuming the above setup for log // log.Error(err, "unable to reconcile object", "object", object) // // This functions similarly to: // log.Info("unable to reconcile object", "error", err, "object", object) // -// However, it ensures that a standard key for the error value ("error") is used across all -// error logging. Furthermore, certain implementations may choose to attach additional -// information (such as stack traces) on calls to Error, so it's preferred to use Error -// to log errors. +// However, it ensures that a standard key for the error value ("error") is used +// across all error logging. Furthermore, certain implementations may choose to +// attach additional information (such as stack traces) on calls to Error, so +// it's preferred to use Error to log errors. // // Parts of a log line // // Each log message from a Logger has four types of context: // logger name, log verbosity, log message, and the named values. // -// The Logger name constists of a series of name "segments" added by successive calls to WithName. -// These name segments will be joined in some way by the underlying implementation. It is strongly -// reccomended that name segements contain simple identifiers (letters, digits, and hyphen), and do -// not contain characters that could muddle the log output or confuse the joining operation (e.g. -// whitespace, commas, periods, slashes, brackets, quotes, etc). +// The Logger name consists of a series of name "segments" added by successive +// calls to WithName. These name segments will be joined in some way by the +// underlying implementation. It is strongly recommended that name segments +// contain simple identifiers (letters, digits, and hyphen), and do not contain +// characters that could muddle the log output or confuse the joining operation +// (e.g. whitespace, commas, periods, slashes, brackets, quotes, etc). // -// Log verbosity represents how little a log matters. Level zero, the default, matters most. -// Increasing levels matter less and less. Try to avoid lots of different verbosity levels, -// and instead provide useful keys, logger names, and log messages for users to filter on. -// It's illegal to pass a log level below zero. +// Log verbosity represents how little a log matters. Level zero, the default, +// matters most. Increasing levels matter less and less. Try to avoid lots of +// different verbosity levels, and instead provide useful keys, logger names, +// and log messages for users to filter on. It's illegal to pass a log level +// below zero. // -// The log message consists of a constant message attached to the the log line. This -// should generally be a simple description of what's occuring, and should never be a format string. +// The log message consists of a constant message attached to the log line. +// This should generally be a simple description of what's occurring, and should +// never be a format string. // -// Variable information can then be attached using named values (key/value pairs). Keys are arbitrary -// strings, while values may be any Go value. +// Variable information can then be attached using named values (key/value +// pairs). Keys are arbitrary strings, while values may be any Go value. // // Key Naming Conventions // -// While users are generally free to use key names of their choice, it's generally best to avoid -// using the following keys, as they're frequently used by implementations: +// Keys are not strictly required to conform to any specification or regex, but +// it is recommended that they: +// * be human-readable and meaningful (not auto-generated or simple ordinals) +// * be constant (not dependent on input data) +// * contain only printable characters +// * not contain whitespace or punctuation +// +// These guidelines help ensure that log data is processed properly regardless +// of the log implementation. For example, log implementations will try to +// output JSON data or will store data for later database (e.g. SQL) queries. +// +// While users are generally free to use key names of their choice, it's +// generally best to avoid using the following keys, as they're frequently used +// by implementations: // -// - `"error"`: the underlying error value in the `Error` method. -// - `"stacktrace"`: the stack trace associated with a particular log line or error -// (often from the `Error` message). // - `"caller"`: the calling information (file/line) of a particular log line. -// - `"msg"`: the log message. +// - `"error"`: the underlying error value in the `Error` method. // - `"level"`: the log level. +// - `"logger"`: the name of the associated logger. +// - `"msg"`: the log message. +// - `"stacktrace"`: the stack trace associated with a particular log line or +// error (often from the `Error` message). // - `"ts"`: the timestamp for a log line. // -// Implementations are encouraged to make use of these keys to represent the above -// concepts, when neccessary (for example, in a pure-JSON output form, it would be -// necessary to represent at least message and timestamp as ordinary named values). +// Implementations are encouraged to make use of these keys to represent the +// above concepts, when necessary (for example, in a pure-JSON output form, it +// would be necessary to represent at least message and timestamp as ordinary +// named values). +// +// Implementations may choose to give callers access to the underlying +// logging implementation. The recommended pattern for this is: +// // Underlier exposes access to the underlying logging implementation. +// // Since callers only have a logr.Logger, they have to know which +// // implementation is in use, so this interface is less of an abstraction +// // and more of way to test type conversion. +// type Underlier interface { +// GetUnderlying() +// } package logr +import ( + "context" +) + // TODO: consider adding back in format strings if they're really needed // TODO: consider other bits of zap/zapcore functionality like ObjectMarshaller (for arbitrary objects) // TODO: consider other bits of glog functionality like Flush, InfoDepth, OutputStats -// InfoLogger represents the ability to log non-error messages, at a particular verbosity. -type InfoLogger interface { +// Logger represents the ability to log messages, both errors and not. +type Logger interface { + // Enabled tests whether this Logger is enabled. For example, commandline + // flags might be used to set the logging verbosity and disable some info + // logs. + Enabled() bool + // Info logs a non-error message with the given key/value pairs as context. // // The msg argument should be used to add some constant description to @@ -110,19 +162,6 @@ type InfoLogger interface { // keys and arbitrary values. Info(msg string, keysAndValues ...interface{}) - // Enabled tests whether this InfoLogger is enabled. For example, - // commandline flags might be used to set the logging verbosity and disable - // some info logs. - Enabled() bool -} - -// Logger represents the ability to log messages, both errors and not. -type Logger interface { - // All Loggers implement InfoLogger. Calling InfoLogger methods directly on - // a Logger value is equivalent to calling them on a V(0) InfoLogger. For - // example, logger.Info() produces the same result as logger.V(0).Info. - InfoLogger - // Error logs an error, with the given message and key/value pairs as context. // It functions similarly to calling Info with the "error" named value, but may // have unique behavior, and should be preferred for logging errors (see the @@ -133,10 +172,11 @@ type Logger interface { // triggered this log line, if present. Error(err error, msg string, keysAndValues ...interface{}) - // V returns an InfoLogger value for a specific verbosity level. A higher - // verbosity level means a log message is less important. It's illegal to - // pass a log level less than zero. - V(level int) InfoLogger + // V returns an Logger value for a specific verbosity level, relative to + // this Logger. In other words, V values are additive. V higher verbosity + // level means a log message is less important. It's illegal to pass a log + // level less than zero. + V(level int) Logger // WithValues adds some key-value pairs of context to a logger. // See Info for documentation on how key/value pairs work. @@ -144,8 +184,39 @@ type Logger interface { // WithName adds a new element to the logger's name. // Successive calls with WithName continue to append - // suffixes to the logger's name. It's strongly reccomended + // suffixes to the logger's name. It's strongly recommended // that name segments contain only letters, digits, and hyphens // (see the package documentation for more information). WithName(name string) Logger } + +// InfoLogger provides compatibility with code that relies on the v0.1.0 interface +// Deprecated: use Logger instead. This will be removed in a future release. +type InfoLogger = Logger + +type contextKey struct{} + +// FromContext returns a Logger constructed from ctx or nil if no +// logger details are found. +func FromContext(ctx context.Context) Logger { + if v, ok := ctx.Value(contextKey{}).(Logger); ok { + return v + } + + return nil +} + +// FromContextOrDiscard returns a Logger constructed from ctx or a Logger +// that discards all messages if no logger details are found. +func FromContextOrDiscard(ctx context.Context) Logger { + if v, ok := ctx.Value(contextKey{}).(Logger); ok { + return v + } + + return discardLogger{} +} + +// NewContext returns a new context derived from ctx that embeds the Logger. +func NewContext(ctx context.Context, l Logger) context.Context { + return context.WithValue(ctx, contextKey{}, l) +} diff --git a/vendor/github.com/go-logr/zapr/README.md b/vendor/github.com/go-logr/zapr/README.md index 8472875f..548470ee 100644 --- a/vendor/github.com/go-logr/zapr/README.md +++ b/vendor/github.com/go-logr/zapr/README.md @@ -2,7 +2,7 @@ Zapr :zap: ========== A [logr](https://github.com/go-logr/logr) implementation using -[Zap](go.uber.org/zap). +[Zap](https://github.com/uber-go/zap). Usage ----- @@ -13,7 +13,7 @@ import ( "go.uber.org/zap" "github.com/go-logr/logr" - "github.com/directxman12/zapr" + "github.com/go-logr/zapr" ) func main() { diff --git a/vendor/github.com/go-logr/zapr/go.mod b/vendor/github.com/go-logr/zapr/go.mod new file mode 100644 index 00000000..f7d7e256 --- /dev/null +++ b/vendor/github.com/go-logr/zapr/go.mod @@ -0,0 +1,10 @@ +module github.com/go-logr/zapr + +go 1.12 + +require ( + github.com/go-logr/logr v0.2.0 + go.uber.org/atomic v1.3.2 + go.uber.org/multierr v1.1.0 + go.uber.org/zap v1.8.0 +) diff --git a/vendor/github.com/go-logr/zapr/zapr.go b/vendor/github.com/go-logr/zapr/zapr.go index a9a10ae2..09a074d0 100644 --- a/vendor/github.com/go-logr/zapr/zapr.go +++ b/vendor/github.com/go-logr/zapr/zapr.go @@ -1,3 +1,19 @@ +/* +Copyright 2019 The logr 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. +*/ + // Copyright 2018 Solly Ross // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,7 +43,7 @@ // For the most part, concepts in Zap correspond directly with those in // logr. // -// Unlike Zap, all fields *must* be in the form of suggared fields -- +// Unlike Zap, all fields *must* be in the form of sugared fields -- // it's illegal to pass a strongly-typed Zap field in a key position // to any of the log methods. // @@ -43,40 +59,18 @@ import ( "go.uber.org/zap/zapcore" ) -// noopInfoLogger is a logr.InfoLogger that's always disabled, and does nothing. -type noopInfoLogger struct{} - -func (l *noopInfoLogger) Enabled() bool { return false } -func (l *noopInfoLogger) Info(_ string, _ ...interface{}) {} - -var disabledInfoLogger = &noopInfoLogger{} - // NB: right now, we always use the equivalent of sugared logging. // This is necessary, since logr doesn't define non-suggared types, // and using zap-specific non-suggared types would make uses tied // directly to Zap. -// infoLogger is a logr.InfoLogger that uses Zap to log at a particular -// level. The level has already been converted to a Zap level, which -// is to say that `logrLevel = -1*zapLevel`. -type infoLogger struct { - lvl zapcore.Level - l *zap.Logger -} - -func (l *infoLogger) Enabled() bool { return true } -func (l *infoLogger) Info(msg string, keysAndVals ...interface{}) { - if checkedEntry := l.l.Check(l.lvl, msg); checkedEntry != nil { - checkedEntry.Write(handleFields(l.l, keysAndVals)...) - } -} - -// zapLogger is a logr.Logger that uses Zap to log. +// zapLogger is a logr.Logger that uses Zap to log. The level has already been +// converted to a Zap level, which is to say that `logrLevel = -1*zapLevel`. type zapLogger struct { // NB: this looks very similar to zap.SugaredLogger, but // deals with our desire to have multiple verbosity levels. - l *zap.Logger - infoLogger + l *zap.Logger + lvl zapcore.Level } // handleFields converts a bunch of arbitrary key-value pairs into Zap fields. It takes @@ -124,40 +118,50 @@ func handleFields(l *zap.Logger, args []interface{}, additional ...zap.Field) [] return append(fields, additional...) } -func (l *zapLogger) Error(err error, msg string, keysAndVals ...interface{}) { - if checkedEntry := l.l.Check(zap.ErrorLevel, msg); checkedEntry != nil { - checkedEntry.Write(handleFields(l.l, keysAndVals, zap.Error(err))...) +func (zl *zapLogger) Enabled() bool { + return zl.l.Core().Enabled(zl.lvl) +} + +func (zl *zapLogger) Info(msg string, keysAndVals ...interface{}) { + if checkedEntry := zl.l.Check(zl.lvl, msg); checkedEntry != nil { + checkedEntry.Write(handleFields(zl.l, keysAndVals)...) } } -func (l *zapLogger) V(level int) logr.InfoLogger { - lvl := zapcore.Level(-1 * level) - if l.l.Core().Enabled(lvl) { - return &infoLogger{ - lvl: lvl, - l: l.l, - } +func (zl *zapLogger) Error(err error, msg string, keysAndVals ...interface{}) { + if checkedEntry := zl.l.Check(zap.ErrorLevel, msg); checkedEntry != nil { + checkedEntry.Write(handleFields(zl.l, keysAndVals, zap.Error(err))...) } - return disabledInfoLogger } -func (l *zapLogger) WithValues(keysAndValues ...interface{}) logr.Logger { - newLogger := l.l.With(handleFields(l.l, keysAndValues)...) - return NewLogger(newLogger) +func (zl *zapLogger) V(level int) logr.Logger { + return &zapLogger{ + lvl: zl.lvl - zapcore.Level(level), + l: zl.l, + } } -func (l *zapLogger) WithName(name string) logr.Logger { - newLogger := l.l.Named(name) - return NewLogger(newLogger) +func (zl *zapLogger) WithValues(keysAndValues ...interface{}) logr.Logger { + newLogger := zl.l.With(handleFields(zl.l, keysAndValues)...) + return newLoggerWithExtraSkip(newLogger, 0) } -// NewLogger creates a new logr.Logger using the given Zap Logger to log. -func NewLogger(l *zap.Logger) logr.Logger { +func (zl *zapLogger) WithName(name string) logr.Logger { + newLogger := zl.l.Named(name) + return newLoggerWithExtraSkip(newLogger, 0) +} + +// newLoggerWithExtraSkip allows creation of loggers with variable levels of callstack skipping +func newLoggerWithExtraSkip(l *zap.Logger, callerSkip int) logr.Logger { + log := l.WithOptions(zap.AddCallerSkip(callerSkip)) return &zapLogger{ - l: l, - infoLogger: infoLogger{ - l: l, - lvl: zap.InfoLevel, - }, + l: log, + lvl: zap.InfoLevel, } } + +// NewLogger creates a new logr.Logger using the given Zap Logger to log. +func NewLogger(l *zap.Logger) logr.Logger { + // creates a new logger skipping one level of callstack + return newLoggerWithExtraSkip(l, 1) +} diff --git a/vendor/github.com/gobuffalo/flect/.gitignore b/vendor/github.com/gobuffalo/flect/.gitignore new file mode 100644 index 00000000..36897185 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/.gitignore @@ -0,0 +1,29 @@ +*.log +.DS_Store +doc +tmp +pkg +*.gem +*.pid +coverage +coverage.data +build/* +*.pbxuser +*.mode1v3 +.svn +profile +.console_history +.sass-cache/* +.rake_tasks~ +*.log.lck +solr/ +.jhw-cache/ +jhw.* +*.sublime* +node_modules/ +dist/ +generated/ +.vendor/ +bin/* +gin-bin +.idea/ diff --git a/vendor/github.com/gobuffalo/flect/.gometalinter.json b/vendor/github.com/gobuffalo/flect/.gometalinter.json new file mode 100644 index 00000000..e4f65a36 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/.gometalinter.json @@ -0,0 +1,3 @@ +{ + "Enable": ["vet", "golint", "goimports", "deadcode", "gotype", "ineffassign", "misspell", "nakedret", "unconvert", "megacheck", "varcheck"] +} diff --git a/vendor/go.uber.org/tools/LICENSE b/vendor/github.com/gobuffalo/flect/LICENSE similarity index 87% rename from vendor/go.uber.org/tools/LICENSE rename to vendor/github.com/gobuffalo/flect/LICENSE index 858e0247..649efd43 100644 --- a/vendor/go.uber.org/tools/LICENSE +++ b/vendor/github.com/gobuffalo/flect/LICENSE @@ -1,4 +1,6 @@ -Copyright (c) 2017 Uber Technologies, Inc. +The MIT License (MIT) + +Copyright (c) 2019 Mark Bates Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -7,13 +9,13 @@ 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 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. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/gobuffalo/flect/Makefile b/vendor/github.com/gobuffalo/flect/Makefile new file mode 100644 index 00000000..0ac539f1 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/Makefile @@ -0,0 +1,61 @@ +TAGS ?= "" +GO_BIN ?= "go" + +install: + $(GO_BIN) install -tags ${TAGS} -v . + make tidy + +tidy: +ifeq ($(GO111MODULE),on) + $(GO_BIN) mod tidy +else + echo skipping go mod tidy +endif + +deps: + $(GO_BIN) get -tags ${TAGS} -t ./... + make tidy + +build: + $(GO_BIN) build -v . + make tidy + +test: + $(GO_BIN) test -cover -tags ${TAGS} ./... + make tidy + +ci-deps: + $(GO_BIN) get -tags ${TAGS} -t ./... + +ci-test: + $(GO_BIN) test -tags ${TAGS} -race ./... + +lint: + go get github.com/golangci/golangci-lint/cmd/golangci-lint + golangci-lint run --enable-all + make tidy + +update: +ifeq ($(GO111MODULE),on) + rm go.* + $(GO_BIN) mod init + $(GO_BIN) mod tidy +else + $(GO_BIN) get -u -tags ${TAGS} +endif + make test + make install + make tidy + +release-test: + $(GO_BIN) test -tags ${TAGS} -race ./... + make tidy + +release: + $(GO_BIN) get github.com/gobuffalo/release + make tidy + release -y -f version.go --skip-packr + make tidy + + + diff --git a/vendor/github.com/gobuffalo/flect/README.md b/vendor/github.com/gobuffalo/flect/README.md new file mode 100644 index 00000000..2d9a1bd3 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/README.md @@ -0,0 +1,36 @@ +# Flect + +

+GoDoc +CI +Go Report Card +

+ +This is a new inflection engine to replace [https://github.com/markbates/inflect](https://github.com/markbates/inflect) designed to be more modular, more readable, and easier to fix issues on than the original. + +## Installation + +```bash +$ go get -u -v github.com/gobuffalo/flect +``` + +## `github.com/gobuffalo/flect` +GoDoc + +The `github.com/gobuffalo/flect` package contains "basic" inflection tools, like pluralization, singularization, etc... + +### The `Ident` Type + +In addition to helpful methods that take in a `string` and return a `string`, there is an `Ident` type that can be used to create new, custom, inflection rules. + +The `Ident` type contains two fields. + +* `Original` - This is the original `string` that was used to create the `Ident` +* `Parts` - This is a `[]string` that represents all of the "parts" of the string, that have been split apart, making the segments easier to work with + +Examples of creating new inflection rules using `Ident` can be found in the `github.com/gobuffalo/flect/name` package. + +## `github.com/gobuffalo/flect/name` +GoDoc + +The `github.com/gobuffalo/flect/name` package contains more "business" inflection rules like creating proper names, table names, etc... diff --git a/vendor/github.com/gobuffalo/flect/SHOULDERS.md b/vendor/github.com/gobuffalo/flect/SHOULDERS.md new file mode 100644 index 00000000..8c359f15 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/SHOULDERS.md @@ -0,0 +1,10 @@ +# github.com/gobuffalo/flect Stands on the Shoulders of Giants + +github.com/gobuffalo/flect does not try to reinvent the wheel! Instead, it uses the already great wheels developed by the Go community and puts them all together in the best way possible. Without these giants, this project would not be possible. Please make sure to check them out and thank them for all of their hard work. + +Thank you to the following **GIANTS**: + + +* [github.com/davecgh/go-spew](https://godoc.org/github.com/davecgh/go-spew) + +* [github.com/stretchr/testify](https://godoc.org/github.com/stretchr/testify) diff --git a/vendor/github.com/gobuffalo/flect/acronyms.go b/vendor/github.com/gobuffalo/flect/acronyms.go new file mode 100644 index 00000000..b169724a --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/acronyms.go @@ -0,0 +1,152 @@ +package flect + +import "sync" + +var acronymsMoot = &sync.RWMutex{} + +var baseAcronyms = map[string]bool{ + "OK": true, + "UTF8": true, + "HTML": true, + "JSON": true, + "JWT": true, + "ID": true, + "UUID": true, + "SQL": true, + "ACK": true, + "ACL": true, + "ADSL": true, + "AES": true, + "ANSI": true, + "API": true, + "ARP": true, + "ATM": true, + "BGP": true, + "BSS": true, + "CCITT": true, + "CHAP": true, + "CIDR": true, + "CIR": true, + "CLI": true, + "CPE": true, + "CPU": true, + "CRC": true, + "CRT": true, + "CSMA": true, + "CMOS": true, + "DCE": true, + "DEC": true, + "DES": true, + "DHCP": true, + "DNS": true, + "DRAM": true, + "DSL": true, + "DSLAM": true, + "DTE": true, + "DMI": true, + "EHA": true, + "EIA": true, + "EIGRP": true, + "EOF": true, + "ESS": true, + "FCC": true, + "FCS": true, + "FDDI": true, + "FTP": true, + "GBIC": true, + "gbps": true, + "GEPOF": true, + "HDLC": true, + "HTTP": true, + "HTTPS": true, + "IANA": true, + "ICMP": true, + "IDF": true, + "IDS": true, + "IEEE": true, + "IETF": true, + "IMAP": true, + "IP": true, + "IPS": true, + "ISDN": true, + "ISP": true, + "kbps": true, + "LACP": true, + "LAN": true, + "LAPB": true, + "LAPF": true, + "LLC": true, + "MAC": true, + "Mbps": true, + "MC": true, + "MDF": true, + "MIB": true, + "MoCA": true, + "MPLS": true, + "MTU": true, + "NAC": true, + "NAT": true, + "NBMA": true, + "NIC": true, + "NRZ": true, + "NRZI": true, + "NVRAM": true, + "OSI": true, + "OSPF": true, + "OUI": true, + "PAP": true, + "PAT": true, + "PC": true, + "PIM": true, + "PCM": true, + "PDU": true, + "POP3": true, + "POTS": true, + "PPP": true, + "PPTP": true, + "PTT": true, + "PVST": true, + "RAM": true, + "RARP": true, + "RFC": true, + "RIP": true, + "RLL": true, + "ROM": true, + "RSTP": true, + "RTP": true, + "RCP": true, + "SDLC": true, + "SFD": true, + "SFP": true, + "SLARP": true, + "SLIP": true, + "SMTP": true, + "SNA": true, + "SNAP": true, + "SNMP": true, + "SOF": true, + "SRAM": true, + "SSH": true, + "SSID": true, + "STP": true, + "SYN": true, + "TDM": true, + "TFTP": true, + "TIA": true, + "TOFU": true, + "UDP": true, + "URL": true, + "URI": true, + "USB": true, + "UTP": true, + "VC": true, + "VLAN": true, + "VLSM": true, + "VPN": true, + "W3C": true, + "WAN": true, + "WEP": true, + "WiFi": true, + "WPA": true, + "WWW": true, +} diff --git a/vendor/github.com/gobuffalo/flect/azure-pipelines.yml b/vendor/github.com/gobuffalo/flect/azure-pipelines.yml new file mode 100644 index 00000000..417e2c57 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/azure-pipelines.yml @@ -0,0 +1,71 @@ +variables: + GOBIN: "$(GOPATH)/bin" # Go binaries path + GOPATH: "$(system.defaultWorkingDirectory)/gopath" # Go workspace path + modulePath: "$(GOPATH)/src/github.com/$(build.repository.name)" # Path to the module"s code + +jobs: +- job: Windows + pool: + vmImage: "vs2017-win2016" + strategy: + matrix: + go 1.10: + go_version: "1.10" + go 1.11 (on): + go_version: "1.11.5" + GO111MODULE: "on" + go 1.11 (off): + go_version: "1.11.5" + GO111MODULE: "off" + go 1.12 (on): + go_version: "1.12" + GO111MODULE: "on" + go 1.12 (off): + go_version: "1.12" + GO111MODULE: "off" + steps: + - template: azure-tests.yml + +- job: macOS + pool: + vmImage: "macOS-10.13" + strategy: + matrix: + go 1.10: + go_version: "1.10" + go 1.11 (on): + go_version: "1.11.5" + GO111MODULE: "on" + go 1.11 (off): + go_version: "1.11.5" + GO111MODULE: "off" + go 1.12 (on): + go_version: "1.12" + GO111MODULE: "on" + go 1.12 (off): + go_version: "1.12" + GO111MODULE: "off" + steps: + - template: azure-tests.yml + +- job: Linux + pool: + vmImage: "ubuntu-16.04" + strategy: + matrix: + go 1.10: + go_version: "1.10" + go 1.11 (on): + go_version: "1.11.5" + GO111MODULE: "on" + go 1.11 (off): + go_version: "1.11.5" + GO111MODULE: "off" + go 1.12 (on): + go_version: "1.12" + GO111MODULE: "on" + go 1.12 (off): + go_version: "1.12" + GO111MODULE: "off" + steps: + - template: azure-tests.yml diff --git a/vendor/github.com/gobuffalo/flect/azure-tests.yml b/vendor/github.com/gobuffalo/flect/azure-tests.yml new file mode 100644 index 00000000..eea5822f --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/azure-tests.yml @@ -0,0 +1,19 @@ +steps: + - task: GoTool@0 + inputs: + version: $(go_version) + - task: Bash@3 + inputs: + targetType: inline + script: | + mkdir -p "$(GOBIN)" + mkdir -p "$(GOPATH)/pkg" + mkdir -p "$(modulePath)" + shopt -s extglob + mv !(gopath) "$(modulePath)" + displayName: "Setup Go Workspace" + - script: | + go get -t -v ./... + go test -race ./... + workingDirectory: "$(modulePath)" + displayName: "Tests" diff --git a/vendor/github.com/gobuffalo/flect/camelize.go b/vendor/github.com/gobuffalo/flect/camelize.go new file mode 100644 index 00000000..8a9928e8 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/camelize.go @@ -0,0 +1,48 @@ +package flect + +import ( + "strings" + "unicode" +) + +// Camelize returns a camelize version of a string +// bob dylan = bobDylan +// widget_id = widgetID +// WidgetID = widgetID +func Camelize(s string) string { + return New(s).Camelize().String() +} + +// Camelize returns a camelize version of a string +// bob dylan = bobDylan +// widget_id = widgetID +// WidgetID = widgetID +func (i Ident) Camelize() Ident { + var out []string + for i, part := range i.Parts { + var x string + var capped bool + if strings.ToLower(part) == "id" { + out = append(out, "ID") + continue + } + for _, c := range part { + if unicode.IsLetter(c) || unicode.IsDigit(c) { + if i == 0 { + x += string(unicode.ToLower(c)) + continue + } + if !capped { + capped = true + x += string(unicode.ToUpper(c)) + continue + } + x += string(c) + } + } + if x != "" { + out = append(out, x) + } + } + return New(strings.Join(out, "")) +} diff --git a/vendor/github.com/gobuffalo/flect/capitalize.go b/vendor/github.com/gobuffalo/flect/capitalize.go new file mode 100644 index 00000000..42ecc166 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/capitalize.go @@ -0,0 +1,27 @@ +package flect + +import "unicode" + +// Capitalize will cap the first letter of string +// user = User +// bob dylan = Bob dylan +// widget_id = Widget_id +func Capitalize(s string) string { + return New(s).Capitalize().String() +} + +// Capitalize will cap the first letter of string +// user = User +// bob dylan = Bob dylan +// widget_id = Widget_id +func (i Ident) Capitalize() Ident { + var x string + if len(i.Parts) == 0 { + return New("") + } + x = string(unicode.ToTitle(rune(i.Original[0]))) + if len(i.Original) > 1 { + x += i.Original[1:] + } + return New(x) +} diff --git a/vendor/github.com/gobuffalo/flect/custom_data.go b/vendor/github.com/gobuffalo/flect/custom_data.go new file mode 100644 index 00000000..9a2dfc74 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/custom_data.go @@ -0,0 +1,83 @@ +package flect + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" +) + +func init() { + loadCustomData("inflections.json", "INFLECT_PATH", "could not read inflection file", LoadInflections) + loadCustomData("acronyms.json", "ACRONYMS_PATH", "could not read acronyms file", LoadAcronyms) +} + +//CustomDataParser are functions that parse data like acronyms or +//plurals in the shape of a io.Reader it receives. +type CustomDataParser func(io.Reader) error + +func loadCustomData(defaultFile, env, readErrorMessage string, parser CustomDataParser) { + pwd, _ := os.Getwd() + path, found := os.LookupEnv(env) + if !found { + path = filepath.Join(pwd, defaultFile) + } + + if _, err := os.Stat(path); err != nil { + return + } + + b, err := ioutil.ReadFile(path) + if err != nil { + fmt.Printf("%s %s (%s)\n", readErrorMessage, path, err) + return + } + + if err = parser(bytes.NewReader(b)); err != nil { + fmt.Println(err) + } +} + +//LoadAcronyms loads rules from io.Reader param +func LoadAcronyms(r io.Reader) error { + m := []string{} + err := json.NewDecoder(r).Decode(&m) + + if err != nil { + return fmt.Errorf("could not decode acronyms JSON from reader: %s", err) + } + + acronymsMoot.Lock() + defer acronymsMoot.Unlock() + + for _, acronym := range m { + baseAcronyms[acronym] = true + } + + return nil +} + +//LoadInflections loads rules from io.Reader param +func LoadInflections(r io.Reader) error { + m := map[string]string{} + + err := json.NewDecoder(r).Decode(&m) + if err != nil { + return fmt.Errorf("could not decode inflection JSON from reader: %s", err) + } + + pluralMoot.Lock() + defer pluralMoot.Unlock() + singularMoot.Lock() + defer singularMoot.Unlock() + + for s, p := range m { + singleToPlural[s] = p + pluralToSingle[p] = s + } + + return nil +} diff --git a/vendor/github.com/gobuffalo/flect/dasherize.go b/vendor/github.com/gobuffalo/flect/dasherize.go new file mode 100644 index 00000000..c7a8a33e --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/dasherize.go @@ -0,0 +1,34 @@ +package flect + +import ( + "strings" + "unicode" +) + +// Dasherize returns an alphanumeric, lowercased, dashed string +// Donald E. Knuth = donald-e-knuth +// Test with + sign = test-with-sign +// admin/WidgetID = admin-widget-id +func Dasherize(s string) string { + return New(s).Dasherize().String() +} + +// Dasherize returns an alphanumeric, lowercased, dashed string +// Donald E. Knuth = donald-e-knuth +// Test with + sign = test-with-sign +// admin/WidgetID = admin-widget-id +func (i Ident) Dasherize() Ident { + var parts []string + + for _, part := range i.Parts { + var x string + for _, c := range part { + if unicode.IsLetter(c) || unicode.IsDigit(c) { + x += string(c) + } + } + parts = xappend(parts, x) + } + + return New(strings.ToLower(strings.Join(parts, "-"))) +} diff --git a/vendor/github.com/gobuffalo/flect/flect.go b/vendor/github.com/gobuffalo/flect/flect.go new file mode 100644 index 00000000..ee81b6f2 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/flect.go @@ -0,0 +1,43 @@ +/* +Package flect is a new inflection engine to replace [https://github.com/markbates/inflect](https://github.com/markbates/inflect) designed to be more modular, more readable, and easier to fix issues on than the original. +*/ +package flect + +import ( + "strings" + "unicode" +) + +var spaces = []rune{'_', ' ', ':', '-', '/'} + +func isSpace(c rune) bool { + for _, r := range spaces { + if r == c { + return true + } + } + return unicode.IsSpace(c) +} + +func xappend(a []string, ss ...string) []string { + for _, s := range ss { + s = strings.TrimSpace(s) + for _, x := range spaces { + s = strings.Trim(s, string(x)) + } + if _, ok := baseAcronyms[strings.ToUpper(s)]; ok { + s = strings.ToUpper(s) + } + if s != "" { + a = append(a, s) + } + } + return a +} + +func abs(x int) int { + if x < 0 { + return -x + } + return x +} diff --git a/vendor/github.com/gobuffalo/flect/go.mod b/vendor/github.com/gobuffalo/flect/go.mod new file mode 100644 index 00000000..cd02d074 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/go.mod @@ -0,0 +1,8 @@ +module github.com/gobuffalo/flect + +go 1.12 + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/stretchr/testify v1.3.0 +) diff --git a/vendor/github.com/gobuffalo/flect/go.sum b/vendor/github.com/gobuffalo/flect/go.sum new file mode 100644 index 00000000..4f76e62c --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/go.sum @@ -0,0 +1,9 @@ +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/github.com/gobuffalo/flect/humanize.go b/vendor/github.com/gobuffalo/flect/humanize.go new file mode 100644 index 00000000..ded09397 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/humanize.go @@ -0,0 +1,35 @@ +package flect + +import ( + "strings" +) + +// Humanize returns first letter of sentence capitalized. +// Common acronyms are capitalized as well. +// Other capital letters in string are left as provided. +// employee_salary = Employee salary +// employee_id = employee ID +// employee_mobile_number = Employee mobile number +// first_Name = First Name +// firstName = First Name +func Humanize(s string) string { + return New(s).Humanize().String() +} + +// Humanize First letter of sentence capitalized +func (i Ident) Humanize() Ident { + if len(i.Original) == 0 { + return New("") + } + + var parts []string + for index, part := range i.Parts { + if index == 0 { + part = strings.Title(i.Parts[0]) + } + + parts = xappend(parts, part) + } + + return New(strings.Join(parts, " ")) +} diff --git a/vendor/github.com/gobuffalo/flect/ident.go b/vendor/github.com/gobuffalo/flect/ident.go new file mode 100644 index 00000000..78b51d45 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/ident.go @@ -0,0 +1,106 @@ +package flect + +import ( + "encoding" + "strings" + "unicode" + "unicode/utf8" +) + +// Ident represents the string and it's parts +type Ident struct { + Original string + Parts []string +} + +// String implements fmt.Stringer and returns the original string +func (i Ident) String() string { + return i.Original +} + +// New creates a new Ident from the string +func New(s string) Ident { + i := Ident{ + Original: s, + Parts: toParts(s), + } + + return i +} + +func toParts(s string) []string { + parts := []string{} + s = strings.TrimSpace(s) + if len(s) == 0 { + return parts + } + if _, ok := baseAcronyms[strings.ToUpper(s)]; ok { + return []string{strings.ToUpper(s)} + } + var prev rune + var x string + for _, c := range s { + cs := string(c) + // fmt.Println("### cs ->", cs) + // fmt.Println("### unicode.IsControl(c) ->", unicode.IsControl(c)) + // fmt.Println("### unicode.IsDigit(c) ->", unicode.IsDigit(c)) + // fmt.Println("### unicode.IsGraphic(c) ->", unicode.IsGraphic(c)) + // fmt.Println("### unicode.IsLetter(c) ->", unicode.IsLetter(c)) + // fmt.Println("### unicode.IsLower(c) ->", unicode.IsLower(c)) + // fmt.Println("### unicode.IsMark(c) ->", unicode.IsMark(c)) + // fmt.Println("### unicode.IsPrint(c) ->", unicode.IsPrint(c)) + // fmt.Println("### unicode.IsPunct(c) ->", unicode.IsPunct(c)) + // fmt.Println("### unicode.IsSpace(c) ->", unicode.IsSpace(c)) + // fmt.Println("### unicode.IsTitle(c) ->", unicode.IsTitle(c)) + // fmt.Println("### unicode.IsUpper(c) ->", unicode.IsUpper(c)) + if !utf8.ValidRune(c) { + continue + } + + if isSpace(c) { + parts = xappend(parts, x) + x = cs + prev = c + continue + } + + if unicode.IsUpper(c) && !unicode.IsUpper(prev) { + parts = xappend(parts, x) + x = cs + prev = c + continue + } + if unicode.IsUpper(c) && baseAcronyms[strings.ToUpper(x)] { + parts = xappend(parts, x) + x = cs + prev = c + continue + } + if unicode.IsLetter(c) || unicode.IsDigit(c) || unicode.IsPunct(c) || c == '`' { + prev = c + x += cs + continue + } + + parts = xappend(parts, x) + x = "" + prev = c + } + parts = xappend(parts, x) + + return parts +} + +var _ encoding.TextUnmarshaler = &Ident{} +var _ encoding.TextMarshaler = &Ident{} + +//UnmarshalText unmarshalls byte array into the Ident +func (i *Ident) UnmarshalText(data []byte) error { + (*i) = New(string(data)) + return nil +} + +//MarshalText marshals Ident into byte array +func (i Ident) MarshalText() ([]byte, error) { + return []byte(i.Original), nil +} diff --git a/vendor/github.com/gobuffalo/flect/lower_upper.go b/vendor/github.com/gobuffalo/flect/lower_upper.go new file mode 100644 index 00000000..930da58d --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/lower_upper.go @@ -0,0 +1,13 @@ +package flect + +import "strings" + +// ToUpper is a convience wrapper for strings.ToUpper +func (i Ident) ToUpper() Ident { + return New(strings.ToUpper(i.Original)) +} + +// ToLower is a convience wrapper for strings.ToLower +func (i Ident) ToLower() Ident { + return New(strings.ToLower(i.Original)) +} diff --git a/vendor/github.com/gobuffalo/flect/ordinalize.go b/vendor/github.com/gobuffalo/flect/ordinalize.go new file mode 100644 index 00000000..1ce27b3a --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/ordinalize.go @@ -0,0 +1,43 @@ +package flect + +import ( + "fmt" + "strconv" +) + +// Ordinalize converts a number to an ordinal version +// 42 = 42nd +// 45 = 45th +// 1 = 1st +func Ordinalize(s string) string { + return New(s).Ordinalize().String() +} + +// Ordinalize converts a number to an ordinal version +// 42 = 42nd +// 45 = 45th +// 1 = 1st +func (i Ident) Ordinalize() Ident { + number, err := strconv.Atoi(i.Original) + if err != nil { + return i + } + var s string + switch abs(number) % 100 { + case 11, 12, 13: + s = fmt.Sprintf("%dth", number) + default: + switch abs(number) % 10 { + case 1: + s = fmt.Sprintf("%dst", number) + case 2: + s = fmt.Sprintf("%dnd", number) + case 3: + s = fmt.Sprintf("%drd", number) + } + } + if s != "" { + return New(s) + } + return New(fmt.Sprintf("%dth", number)) +} diff --git a/vendor/github.com/gobuffalo/flect/pascalize.go b/vendor/github.com/gobuffalo/flect/pascalize.go new file mode 100644 index 00000000..76f0c6a7 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/pascalize.go @@ -0,0 +1,25 @@ +package flect + +import ( + "unicode" +) + +// Pascalize returns a string with each segment capitalized +// user = User +// bob dylan = BobDylan +// widget_id = WidgetID +func Pascalize(s string) string { + return New(s).Pascalize().String() +} + +// Pascalize returns a string with each segment capitalized +// user = User +// bob dylan = BobDylan +// widget_id = WidgetID +func (i Ident) Pascalize() Ident { + c := i.Camelize() + if len(c.String()) == 0 { + return c + } + return New(string(unicode.ToUpper(rune(c.Original[0]))) + c.Original[1:]) +} diff --git a/vendor/github.com/gobuffalo/flect/plural_rules.go b/vendor/github.com/gobuffalo/flect/plural_rules.go new file mode 100644 index 00000000..86fca8c5 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/plural_rules.go @@ -0,0 +1,284 @@ +package flect + +var pluralRules = []rule{} + +// AddPlural adds a rule that will replace the given suffix with the replacement suffix. +func AddPlural(suffix string, repl string) { + pluralMoot.Lock() + defer pluralMoot.Unlock() + pluralRules = append(pluralRules, rule{ + suffix: suffix, + fn: func(s string) string { + s = s[:len(s)-len(suffix)] + return s + repl + }, + }) + + pluralRules = append(pluralRules, rule{ + suffix: repl, + fn: noop, + }) +} + +var singleToPlural = map[string]string{ + "aircraft": "aircraft", + "alias": "aliases", + "alumna": "alumnae", + "alumnus": "alumni", + "analysis": "analyses", + "antenna": "antennas", + "antithesis": "antitheses", + "apex": "apexes", + "appendix": "appendices", + "axis": "axes", + "bacillus": "bacilli", + "bacterium": "bacteria", + "basis": "bases", + "beau": "beaus", + "bison": "bison", + "bureau": "bureaus", + "bus": "buses", + "campus": "campuses", + "caucus": "caucuses", + "château": "châteaux", + "circus": "circuses", + "codex": "codices", + "concerto": "concertos", + "corpus": "corpora", + "crisis": "crises", + "curriculum": "curriculums", + "datum": "data", + "dear": "dear", + "deer": "deer", + "diagnosis": "diagnoses", + "die": "dice", + "dwarf": "dwarves", + "ellipsis": "ellipses", + "equipment": "equipment", + "erratum": "errata", + "faux pas": "faux pas", + "fez": "fezzes", + "fish": "fish", + "focus": "foci", + "foo": "foos", + "foot": "feet", + "formula": "formulas", + "fungus": "fungi", + "genus": "genera", + "goose": "geese", + "graffito": "graffiti", + "grouse": "grouse", + "half": "halves", + "halo": "halos", + "hoof": "hooves", + "human": "humans", + "hypothesis": "hypotheses", + "index": "indices", + "information": "information", + "jeans": "jeans", + "larva": "larvae", + "libretto": "librettos", + "loaf": "loaves", + "locus": "loci", + "louse": "lice", + "matrix": "matrices", + "minutia": "minutiae", + "money": "money", + "moose": "moose", + "mouse": "mice", + "nebula": "nebulae", + "news": "news", + "nucleus": "nuclei", + "oasis": "oases", + "octopus": "octopi", + "offspring": "offspring", + "opus": "opera", + "ovum": "ova", + "ox": "oxen", + "parenthesis": "parentheses", + "phenomenon": "phenomena", + "photo": "photos", + "phylum": "phyla", + "piano": "pianos", + "plus": "pluses", + "police": "police", + "prognosis": "prognoses", + "prometheus": "prometheuses", + "quiz": "quizzes", + "radius": "radiuses", + "referendum": "referendums", + "ress": "resses", + "rice": "rice", + "salmon": "salmon", + "series": "series", + "sheep": "sheep", + "shoe": "shoes", + "shrimp": "shrimp", + "species": "species", + "stimulus": "stimuli", + "stratum": "strata", + "swine": "swine", + "syllabus": "syllabi", + "symposium": "symposiums", + "synopsis": "synopses", + "tableau": "tableaus", + "testis": "testes", + "thesis": "theses", + "thief": "thieves", + "tooth": "teeth", + "trout": "trout", + "tuna": "tuna", + "vertebra": "vertebrae", + "vertix": "vertices", + "vita": "vitae", + "vortex": "vortices", + "wharf": "wharves", + "wife": "wives", + "wolf": "wolves", + "you": "you", +} + +var pluralToSingle = map[string]string{} + +func init() { + for k, v := range singleToPlural { + pluralToSingle[v] = k + } +} + +type singularToPluralSuffix struct { + singular string + plural string +} + +var singularToPluralSuffixList = []singularToPluralSuffix{ + {"iterion", "iteria"}, + {"campus", "campuses"}, + {"genera", "genus"}, + {"person", "people"}, + {"phylum", "phyla"}, + {"randum", "randa"}, + {"actus", "acti"}, + {"adium", "adia"}, + {"alias", "aliases"}, + {"basis", "basis"}, + {"child", "children"}, + {"chive", "chives"}, + {"focus", "foci"}, + {"hello", "hellos"}, + {"jeans", "jeans"}, + {"louse", "lice"}, + {"mouse", "mice"}, + {"movie", "movies"}, + {"oasis", "oasis"}, + {"atum", "ata"}, + {"atus", "atuses"}, + {"base", "bases"}, + {"cess", "cesses"}, + {"dium", "diums"}, + {"eses", "esis"}, + {"half", "halves"}, + {"hive", "hives"}, + {"iano", "ianos"}, + {"irus", "iri"}, + {"isis", "ises"}, + {"leus", "li"}, + {"mnus", "mni"}, + {"move", "moves"}, + {"news", "news"}, + {"odex", "odice"}, + {"oose", "eese"}, + {"ouse", "ouses"}, + {"ovum", "ova"}, + {"rion", "ria"}, + {"shoe", "shoes"}, + {"stis", "stes"}, + {"tive", "tives"}, + {"wife", "wives"}, + {"afe", "aves"}, + {"bfe", "bves"}, + {"box", "boxes"}, + {"cfe", "cves"}, + {"dfe", "dves"}, + {"dge", "dges"}, + {"efe", "eves"}, + {"gfe", "gves"}, + {"hfe", "hves"}, + {"ife", "ives"}, + {"itz", "itzes"}, + {"ium", "ia"}, + {"ize", "izes"}, + {"jfe", "jves"}, + {"kfe", "kves"}, + {"man", "men"}, + {"mfe", "mves"}, + {"nfe", "nves"}, + {"nna", "nnas"}, + {"oaf", "oaves"}, + {"oci", "ocus"}, + {"ode", "odes"}, + {"ofe", "oves"}, + {"oot", "eet"}, + {"pfe", "pves"}, + {"pse", "psis"}, + {"qfe", "qves"}, + {"quy", "quies"}, + {"rfe", "rves"}, + {"sfe", "sves"}, + {"tfe", "tves"}, + {"tum", "ta"}, + {"tus", "tuses"}, + {"ufe", "uves"}, + {"ula", "ulae"}, + {"ula", "ulas"}, + {"uli", "ulus"}, + {"use", "uses"}, + {"uss", "usses"}, + {"vfe", "vves"}, + {"wfe", "wves"}, + {"xfe", "xves"}, + {"yfe", "yves"}, + {"you", "you"}, + {"zfe", "zves"}, + {"by", "bies"}, + {"ch", "ches"}, + {"cy", "cies"}, + {"dy", "dies"}, + {"ex", "ices"}, + {"fy", "fies"}, + {"gy", "gies"}, + {"hy", "hies"}, + {"io", "ios"}, + {"jy", "jies"}, + {"ky", "kies"}, + {"ld", "ldren"}, + {"lf", "lves"}, + {"ly", "lies"}, + {"my", "mies"}, + {"ny", "nies"}, + {"ox", "oxen"}, + {"py", "pies"}, + {"qy", "qies"}, + {"rf", "rves"}, + {"ry", "ries"}, + {"sh", "shes"}, + {"ss", "sses"}, + {"sy", "sies"}, + {"ty", "ties"}, + {"tz", "tzes"}, + {"va", "vae"}, + {"vy", "vies"}, + {"wy", "wies"}, + {"xy", "xies"}, + {"zy", "zies"}, + {"zz", "zzes"}, + {"o", "oes"}, + {"x", "xes"}, +} + +func init() { + for _, suffix := range singularToPluralSuffixList { + AddPlural(suffix.singular, suffix.plural) + AddSingular(suffix.plural, suffix.singular) + } +} diff --git a/vendor/github.com/gobuffalo/flect/pluralize.go b/vendor/github.com/gobuffalo/flect/pluralize.go new file mode 100644 index 00000000..1b9d43e4 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/pluralize.go @@ -0,0 +1,49 @@ +package flect + +import ( + "strings" + "sync" +) + +var pluralMoot = &sync.RWMutex{} + +// Pluralize returns a plural version of the string +// user = users +// person = people +// datum = data +func Pluralize(s string) string { + return New(s).Pluralize().String() +} + +// Pluralize returns a plural version of the string +// user = users +// person = people +// datum = data +func (i Ident) Pluralize() Ident { + s := i.Original + if len(s) == 0 { + return New("") + } + + pluralMoot.RLock() + defer pluralMoot.RUnlock() + + ls := strings.ToLower(s) + if _, ok := pluralToSingle[ls]; ok { + return i + } + if p, ok := singleToPlural[ls]; ok { + return New(p) + } + for _, r := range pluralRules { + if strings.HasSuffix(ls, r.suffix) { + return New(r.fn(s)) + } + } + + if strings.HasSuffix(ls, "s") { + return i + } + + return New(i.String() + "s") +} diff --git a/vendor/github.com/gobuffalo/flect/rule.go b/vendor/github.com/gobuffalo/flect/rule.go new file mode 100644 index 00000000..dc616b33 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/rule.go @@ -0,0 +1,10 @@ +package flect + +type ruleFn func(string) string + +type rule struct { + suffix string + fn ruleFn +} + +func noop(s string) string { return s } diff --git a/vendor/github.com/gobuffalo/flect/singular_rules.go b/vendor/github.com/gobuffalo/flect/singular_rules.go new file mode 100644 index 00000000..b20371b3 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/singular_rules.go @@ -0,0 +1,23 @@ +package flect + +var singularRules = []rule{} + +// AddSingular adds a rule that will replace the given suffix with the replacement suffix. +func AddSingular(ext string, repl string) { + singularMoot.Lock() + defer singularMoot.Unlock() + singularRules = append(singularRules, rule{ + suffix: ext, + fn: func(s string) string { + s = s[:len(s)-len(ext)] + return s + repl + }, + }) + + singularRules = append(singularRules, rule{ + suffix: repl, + fn: func(s string) string { + return s + }, + }) +} diff --git a/vendor/github.com/gobuffalo/flect/singularize.go b/vendor/github.com/gobuffalo/flect/singularize.go new file mode 100644 index 00000000..a0f8545e --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/singularize.go @@ -0,0 +1,47 @@ +package flect + +import ( + "strings" + "sync" +) + +var singularMoot = &sync.RWMutex{} + +// Singularize returns a singular version of the string +// users = user +// data = datum +// people = person +func Singularize(s string) string { + return New(s).Singularize().String() +} + +// Singularize returns a singular version of the string +// users = user +// data = datum +// people = person +func (i Ident) Singularize() Ident { + s := i.Original + if len(s) == 0 { + return i + } + + singularMoot.RLock() + defer singularMoot.RUnlock() + ls := strings.ToLower(s) + if p, ok := pluralToSingle[ls]; ok { + return New(p) + } + if _, ok := singleToPlural[ls]; ok { + return i + } + for _, r := range singularRules { + if strings.HasSuffix(ls, r.suffix) { + return New(r.fn(s)) + } + } + + if strings.HasSuffix(s, "s") { + return New(s[:len(s)-1]) + } + return i +} diff --git a/vendor/github.com/gobuffalo/flect/titleize.go b/vendor/github.com/gobuffalo/flect/titleize.go new file mode 100644 index 00000000..cbbf08a5 --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/titleize.go @@ -0,0 +1,30 @@ +package flect + +import ( + "strings" + "unicode" +) + +// Titleize will capitalize the start of each part +// "Nice to see you!" = "Nice To See You!" +// "i've read a book! have you?" = "I've Read A Book! Have You?" +// "This is `code` ok" = "This Is `code` OK" +func Titleize(s string) string { + return New(s).Titleize().String() +} + +// Titleize will capitalize the start of each part +// "Nice to see you!" = "Nice To See You!" +// "i've read a book! have you?" = "I've Read A Book! Have You?" +// "This is `code` ok" = "This Is `code` OK" +func (i Ident) Titleize() Ident { + var parts []string + for _, part := range i.Parts { + x := string(unicode.ToTitle(rune(part[0]))) + if len(part) > 1 { + x += part[1:] + } + parts = append(parts, x) + } + return New(strings.Join(parts, " ")) +} diff --git a/vendor/github.com/gobuffalo/flect/underscore.go b/vendor/github.com/gobuffalo/flect/underscore.go new file mode 100644 index 00000000..b92488aa --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/underscore.go @@ -0,0 +1,34 @@ +package flect + +import ( + "strings" + "unicode" +) + +// Underscore a string +// bob dylan = bob_dylan +// Nice to see you! = nice_to_see_you +// widgetID = widget_id +func Underscore(s string) string { + return New(s).Underscore().String() +} + +// Underscore a string +// bob dylan = bob_dylan +// Nice to see you! = nice_to_see_you +// widgetID = widget_id +func (i Ident) Underscore() Ident { + var out []string + for _, part := range i.Parts { + var x string + for _, c := range part { + if unicode.IsLetter(c) || unicode.IsDigit(c) { + x += string(c) + } + } + if x != "" { + out = append(out, x) + } + } + return New(strings.ToLower(strings.Join(out, "_"))) +} diff --git a/vendor/github.com/gobuffalo/flect/version.go b/vendor/github.com/gobuffalo/flect/version.go new file mode 100644 index 00000000..9624d5df --- /dev/null +++ b/vendor/github.com/gobuffalo/flect/version.go @@ -0,0 +1,4 @@ +package flect + +//Version holds Flect version number +const Version = "v0.1.6" diff --git a/vendor/github.com/google/go-cmp/cmp/compare.go b/vendor/github.com/google/go-cmp/cmp/compare.go index c9a63ced..66561868 100644 --- a/vendor/github.com/google/go-cmp/cmp/compare.go +++ b/vendor/github.com/google/go-cmp/cmp/compare.go @@ -6,6 +6,10 @@ // // This package is intended to be a more powerful and safer alternative to // reflect.DeepEqual for comparing whether two values are semantically equal. +// It is intended to only be used in tests, as performance is not a goal and +// it may panic if it cannot compare the values. Its propensity towards +// panicking means that its unsuitable for production environments where a +// spurious panic may be fatal. // // The primary features of cmp are: // @@ -86,6 +90,52 @@ import ( // If there is a cycle, then the pointed at values are considered equal // only if both addresses were previously visited in the same path step. func Equal(x, y interface{}, opts ...Option) bool { + s := newState(opts) + s.compareAny(rootStep(x, y)) + return s.result.Equal() +} + +// Diff returns a human-readable report of the differences between two values: +// y - x. It returns an empty string if and only if Equal returns true for the +// same input values and options. +// +// The output is displayed as a literal in pseudo-Go syntax. +// At the start of each line, a "-" prefix indicates an element removed from y, +// a "+" prefix to indicates an element added to y, and the lack of a prefix +// indicates an element common to both x and y. If possible, the output +// uses fmt.Stringer.String or error.Error methods to produce more humanly +// readable outputs. In such cases, the string is prefixed with either an +// 's' or 'e' character, respectively, to indicate that the method was called. +// +// Do not depend on this output being stable. If you need the ability to +// programmatically interpret the difference, consider using a custom Reporter. +func Diff(x, y interface{}, opts ...Option) string { + s := newState(opts) + + // Optimization: If there are no other reporters, we can optimize for the + // common case where the result is equal (and thus no reported difference). + // This avoids the expensive construction of a difference tree. + if len(s.reporters) == 0 { + s.compareAny(rootStep(x, y)) + if s.result.Equal() { + return "" + } + s.result = diff.Result{} // Reset results + } + + r := new(defaultReporter) + s.reporters = append(s.reporters, reporter{r}) + s.compareAny(rootStep(x, y)) + d := r.String() + if (d == "") != s.result.Equal() { + panic("inconsistent difference and equality results") + } + return d +} + +// rootStep constructs the first path step. If x and y have differing types, +// then they are stored within an empty interface type. +func rootStep(x, y interface{}) PathStep { vx := reflect.ValueOf(x) vy := reflect.ValueOf(y) @@ -108,33 +158,7 @@ func Equal(x, y interface{}, opts ...Option) bool { t = vx.Type() } - s := newState(opts) - s.compareAny(&pathStep{t, vx, vy}) - return s.result.Equal() -} - -// Diff returns a human-readable report of the differences between two values. -// It returns an empty string if and only if Equal returns true for the same -// input values and options. -// -// The output is displayed as a literal in pseudo-Go syntax. -// At the start of each line, a "-" prefix indicates an element removed from x, -// a "+" prefix to indicates an element added to y, and the lack of a prefix -// indicates an element common to both x and y. If possible, the output -// uses fmt.Stringer.String or error.Error methods to produce more humanly -// readable outputs. In such cases, the string is prefixed with either an -// 's' or 'e' character, respectively, to indicate that the method was called. -// -// Do not depend on this output being stable. If you need the ability to -// programmatically interpret the difference, consider using a custom Reporter. -func Diff(x, y interface{}, opts ...Option) string { - r := new(defaultReporter) - eq := Equal(x, y, Options(opts), Reporter(r)) - d := r.String() - if (d == "") != eq { - panic("inconsistent difference and equality results") - } - return d + return &pathStep{t, vx, vy} } type state struct { @@ -352,7 +376,7 @@ func detectRaces(c chan<- reflect.Value, f reflect.Value, vs ...reflect.Value) { // 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(dsnet): Workaround for reflect bug (https://golang.org/issue/22143). + // 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() @@ -362,6 +386,7 @@ func sanitizeValue(v reflect.Value, t reflect.Type) reflect.Value { } 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 var mayForce, mayForceInit bool @@ -383,6 +408,7 @@ func (s *state) compareStruct(t reflect.Type, vx, vy reflect.Value) { // For retrieveUnexportedField to work, the parent struct must // be addressable. Create a new copy of the values if // necessary to make them addressable. + addr = vx.CanAddr() || vy.CanAddr() vax = makeAddressable(vx) vay = makeAddressable(vy) } @@ -393,6 +419,7 @@ func (s *state) compareStruct(t reflect.Type, vx, vy reflect.Value) { mayForceInit = true } step.mayForce = mayForce + step.paddr = addr step.pvx = vax step.pvy = vay step.field = t.Field(i) 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 dd032354..dfa5d213 100644 --- a/vendor/github.com/google/go-cmp/cmp/export_panic.go +++ b/vendor/github.com/google/go-cmp/cmp/export_panic.go @@ -10,6 +10,6 @@ import "reflect" const supportExporters = false -func retrieveUnexportedField(reflect.Value, reflect.StructField) reflect.Value { +func retrieveUnexportedField(reflect.Value, reflect.StructField, bool) reflect.Value { panic("no support for forcibly accessing unexported fields") } 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 57020e26..351f1a34 100644 --- a/vendor/github.com/google/go-cmp/cmp/export_unsafe.go +++ b/vendor/github.com/google/go-cmp/cmp/export_unsafe.go @@ -17,9 +17,19 @@ const supportExporters = true // a struct such that the value has read-write permissions. // // The parent struct, v, must be addressable, while f must be a StructField -// describing the field to retrieve. -func retrieveUnexportedField(v reflect.Value, f reflect.StructField) reflect.Value { - // See https://github.com/google/go-cmp/issues/167 for discussion of the - // following expression. - return reflect.NewAt(f.Type, unsafe.Pointer(uintptr(unsafe.Pointer(v.UnsafeAddr()))+f.Offset)).Elem() +// describing the field to retrieve. If addr is false, +// then the returned value will be shallowed copied to be non-addressable. +func retrieveUnexportedField(v reflect.Value, f reflect.StructField, addr bool) reflect.Value { + ve := reflect.NewAt(f.Type, unsafe.Pointer(uintptr(unsafe.Pointer(v.UnsafeAddr()))+f.Offset)).Elem() + if !addr { + // A field is addressable if and only if the struct is addressable. + // If the original parent value was not addressable, shallow copy the + // value to make it non-addressable to avoid leaking an implementation + // detail of how forcibly exporting a field works. + if ve.Kind() == reflect.Interface && ve.IsNil() { + return reflect.Zero(f.Type) + } + return reflect.ValueOf(ve.Interface()).Convert(f.Type) + } + return ve } diff --git a/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go b/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go index 3d2e4266..730e223e 100644 --- a/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go +++ b/vendor/github.com/google/go-cmp/cmp/internal/diff/diff.go @@ -12,6 +12,13 @@ // is more important than obtaining a minimal Levenshtein distance. package diff +import ( + "math/rand" + "time" + + "github.com/google/go-cmp/cmp/internal/flags" +) + // EditType represents a single operation within an edit-script. type EditType uint8 @@ -112,6 +119,8 @@ func (r Result) Similar() bool { return r.NumSame+1 >= r.NumDiff } +var randInt = rand.New(rand.NewSource(time.Now().Unix())).Intn(2) + // Difference reports whether two lists of lengths nx and ny are equal // given the definition of equality provided as f. // @@ -159,6 +168,17 @@ func Difference(nx, ny int, f EqualFunc) (es EditScript) { // A vertical edge is equivalent to inserting a symbol from list Y. // A diagonal edge is equivalent to a matching symbol between both X and Y. + // To ensure flexibility in changing the algorithm in the future, + // introduce some degree of deliberate instability. + // This is achieved by fiddling the zigzag iterator to start searching + // the graph starting from the bottom-right versus than the top-left. + // The result may differ depending on the starting search location, + // but still produces a valid edit script. + zigzagInit := randInt // either 0 or 1 + if flags.Deterministic { + zigzagInit = 0 + } + // Invariants: // • 0 ≤ fwdPath.X ≤ (fwdFrontier.X, revFrontier.X) ≤ revPath.X ≤ nx // • 0 ≤ fwdPath.Y ≤ (fwdFrontier.Y, revFrontier.Y) ≤ revPath.Y ≤ ny @@ -209,7 +229,7 @@ func Difference(nx, ny int, f EqualFunc) (es EditScript) { if fwdFrontier.X >= revFrontier.X || fwdFrontier.Y >= revFrontier.Y || searchBudget == 0 { break } - for stop1, stop2, i := false, false, 0; !(stop1 && stop2) && searchBudget > 0; i++ { + for stop1, stop2, i := false, false, zigzagInit; !(stop1 && stop2) && searchBudget > 0; i++ { // Search in a diagonal pattern for a match. z := zigzag(i) p := point{fwdFrontier.X + z, fwdFrontier.Y - z} 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 new file mode 100644 index 00000000..8228e7d5 --- /dev/null +++ b/vendor/github.com/google/go-cmp/cmp/internal/value/name.go @@ -0,0 +1,157 @@ +// Copyright 2020, 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.md file. + +package value + +import ( + "reflect" + "strconv" +) + +// 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 { + return string(appendTypeName(nil, t, qualified, false)) +} + +func appendTypeName(b []byte, t reflect.Type, qualified, elideFunc bool) []byte { + // BUG: Go reflection provides no way to disambiguate two named types + // of the same name and within the same package, + // but declared within the namespace of different functions. + + // Named type. + if t.Name() != "" { + if qualified && t.PkgPath() != "" { + b = append(b, '"') + b = append(b, t.PkgPath()...) + b = append(b, '"') + b = append(b, '.') + b = append(b, t.Name()...) + } else { + b = append(b, t.String()...) + } + return b + } + + // Unnamed type. + switch k := t.Kind(); k { + case reflect.Bool, reflect.String, reflect.UnsafePointer, + reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, + reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, + reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128: + b = append(b, k.String()...) + case reflect.Chan: + if t.ChanDir() == reflect.RecvDir { + b = append(b, "<-"...) + } + b = append(b, "chan"...) + if t.ChanDir() == reflect.SendDir { + b = append(b, "<-"...) + } + b = append(b, ' ') + b = appendTypeName(b, t.Elem(), qualified, false) + case reflect.Func: + if !elideFunc { + b = append(b, "func"...) + } + b = append(b, '(') + for i := 0; i < t.NumIn(); i++ { + if i > 0 { + b = append(b, ", "...) + } + if i == t.NumIn()-1 && t.IsVariadic() { + b = append(b, "..."...) + b = appendTypeName(b, t.In(i).Elem(), qualified, false) + } else { + b = appendTypeName(b, t.In(i), qualified, false) + } + } + b = append(b, ')') + switch t.NumOut() { + case 0: + // Do nothing + case 1: + b = append(b, ' ') + b = appendTypeName(b, t.Out(0), qualified, false) + default: + b = append(b, " ("...) + for i := 0; i < t.NumOut(); i++ { + if i > 0 { + b = append(b, ", "...) + } + b = appendTypeName(b, t.Out(i), qualified, false) + } + b = append(b, ')') + } + case reflect.Struct: + b = append(b, "struct{ "...) + for i := 0; i < t.NumField(); i++ { + if i > 0 { + b = append(b, "; "...) + } + sf := t.Field(i) + if !sf.Anonymous { + if qualified && sf.PkgPath != "" { + b = append(b, '"') + b = append(b, sf.PkgPath...) + b = append(b, '"') + b = append(b, '.') + } + b = append(b, sf.Name...) + b = append(b, ' ') + } + b = appendTypeName(b, sf.Type, qualified, false) + if sf.Tag != "" { + b = append(b, ' ') + b = strconv.AppendQuote(b, string(sf.Tag)) + } + } + if b[len(b)-1] == ' ' { + b = b[:len(b)-1] + } else { + b = append(b, ' ') + } + b = append(b, '}') + case reflect.Slice, reflect.Array: + b = append(b, '[') + if k == reflect.Array { + b = strconv.AppendUint(b, uint64(t.Len()), 10) + } + b = append(b, ']') + b = appendTypeName(b, t.Elem(), qualified, false) + case reflect.Map: + b = append(b, "map["...) + b = appendTypeName(b, t.Key(), qualified, false) + b = append(b, ']') + b = appendTypeName(b, t.Elem(), qualified, false) + case reflect.Ptr: + b = append(b, '*') + b = appendTypeName(b, t.Elem(), qualified, false) + case reflect.Interface: + b = append(b, "interface{ "...) + for i := 0; i < t.NumMethod(); i++ { + if i > 0 { + b = append(b, "; "...) + } + m := t.Method(i) + if qualified && m.PkgPath != "" { + b = append(b, '"') + b = append(b, m.PkgPath...) + b = append(b, '"') + b = append(b, '.') + } + b = append(b, m.Name...) + b = appendTypeName(b, m.Type, qualified, true) + } + if b[len(b)-1] == ' ' { + b = b[:len(b)-1] + } else { + b = append(b, ' ') + } + b = append(b, '}') + default: + panic("invalid kind: " + k.String()) + } + return b +} 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 0a01c479..e9e384a1 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 @@ -21,3 +21,13 @@ func PointerOf(v reflect.Value) Pointer { // assumes that the GC implementation does not use a moving collector. return Pointer{v.Pointer(), v.Type()} } + +// IsNil reports whether the pointer is nil. +func (p Pointer) IsNil() bool { + return p.p == 0 +} + +// Uintptr returns the pointer as a uintptr. +func (p Pointer) Uintptr() uintptr { + return p.p +} 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 da134ae2..b50c17ec 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 @@ -24,3 +24,13 @@ func PointerOf(v reflect.Value) Pointer { // which is necessary if the GC ever uses a moving collector. return Pointer{unsafe.Pointer(v.Pointer()), v.Type()} } + +// IsNil reports whether the pointer is nil. +func (p Pointer) IsNil() bool { + return p.p == nil +} + +// Uintptr returns the pointer as a uintptr. +func (p Pointer) Uintptr() uintptr { + return uintptr(p.p) +} diff --git a/vendor/github.com/google/go-cmp/cmp/options.go b/vendor/github.com/google/go-cmp/cmp/options.go index abbd2a63..4b0407a7 100644 --- a/vendor/github.com/google/go-cmp/cmp/options.go +++ b/vendor/github.com/google/go-cmp/cmp/options.go @@ -225,11 +225,14 @@ func (validator) apply(s *state, vx, vy reflect.Value) { // Unable to Interface implies unexported field without visibility access. if !vx.CanInterface() || !vy.CanInterface() { - const help = "consider using a custom Comparer; if you control the implementation of type, you can also consider using an Exporter, AllowUnexported, or cmpopts.IgnoreUnexported" + help := "consider using a custom Comparer; if you control the implementation of type, you can also consider using an Exporter, AllowUnexported, or cmpopts.IgnoreUnexported" var name string if t := s.curPath.Index(-2).Type(); t.Name() != "" { // Named type with unexported fields. name = fmt.Sprintf("%q.%v", t.PkgPath(), t.Name()) // e.g., "path/to/package".MyType + if _, ok := reflect.New(t).Interface().(error); ok { + help = "consider using cmpopts.EquateErrors to compare error values" + } } else { // Unnamed type with unexported fields. Derive PkgPath from field. var pkgPath string diff --git a/vendor/github.com/google/go-cmp/cmp/path.go b/vendor/github.com/google/go-cmp/cmp/path.go index 509d6b85..603dbb00 100644 --- a/vendor/github.com/google/go-cmp/cmp/path.go +++ b/vendor/github.com/google/go-cmp/cmp/path.go @@ -177,7 +177,8 @@ type structField struct { // pvx, pvy, and field are only valid if unexported is true. unexported bool mayForce bool // Forcibly allow visibility - pvx, pvy reflect.Value // Parent values + paddr bool // Was parent addressable? + pvx, pvy reflect.Value // Parent values (always addressible) field reflect.StructField // Field information } @@ -189,8 +190,8 @@ func (sf StructField) Values() (vx, vy reflect.Value) { // Forcibly obtain read-write access to an unexported struct field. if sf.mayForce { - vx = retrieveUnexportedField(sf.pvx, sf.field) - vy = retrieveUnexportedField(sf.pvy, sf.field) + vx = retrieveUnexportedField(sf.pvx, sf.field, sf.paddr) + vy = retrieveUnexportedField(sf.pvy, sf.field, sf.paddr) return vx, vy // CanInterface reports true } return sf.vx, sf.vy // CanInterface reports false diff --git a/vendor/github.com/google/go-cmp/cmp/report.go b/vendor/github.com/google/go-cmp/cmp/report.go index 6ddf2999..aafcb363 100644 --- a/vendor/github.com/google/go-cmp/cmp/report.go +++ b/vendor/github.com/google/go-cmp/cmp/report.go @@ -41,7 +41,10 @@ func (r *defaultReporter) String() string { if r.root.NumDiff == 0 { return "" } - return formatOptions{}.FormatDiff(r.root).String() + ptrs := new(pointerReferences) + text := formatOptions{}.FormatDiff(r.root, ptrs) + resolveReferences(text) + return text.String() } func assert(ok bool) { diff --git a/vendor/github.com/google/go-cmp/cmp/report_compare.go b/vendor/github.com/google/go-cmp/cmp/report_compare.go index 17a05eed..9e218096 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_compare.go +++ b/vendor/github.com/google/go-cmp/cmp/report_compare.go @@ -11,14 +11,6 @@ import ( "github.com/google/go-cmp/cmp/internal/value" ) -// TODO: Enforce limits? -// * Enforce maximum number of records to print per node? -// * Enforce maximum size in bytes allowed? -// * As a heuristic, use less verbosity for equal nodes than unequal nodes. -// TODO: Enforce unique outputs? -// * Avoid Stringer methods if it results in same output? -// * Print pointer address if outputs still equal? - // numContextRecords is the number of surrounding equal records to print. const numContextRecords = 2 @@ -71,24 +63,66 @@ func (opts formatOptions) WithTypeMode(t typeMode) formatOptions { opts.TypeMode = t return opts } +func (opts formatOptions) WithVerbosity(level int) formatOptions { + opts.VerbosityLevel = level + opts.LimitVerbosity = true + return opts +} +func (opts formatOptions) verbosity() uint { + switch { + case opts.VerbosityLevel < 0: + return 0 + case opts.VerbosityLevel > 16: + return 16 // some reasonable maximum to avoid shift overflow + default: + return uint(opts.VerbosityLevel) + } +} + +const maxVerbosityPreset = 3 + +// verbosityPreset modifies the verbosity settings given an index +// between 0 and maxVerbosityPreset, inclusive. +func verbosityPreset(opts formatOptions, i int) formatOptions { + opts.VerbosityLevel = int(opts.verbosity()) + 2*i + if i > 0 { + opts.AvoidStringer = true + } + if i >= maxVerbosityPreset { + opts.PrintAddresses = true + opts.QualifiedNames = true + } + return opts +} // FormatDiff converts a valueNode tree into a textNode tree, where the later // is a textual representation of the differences detected in the former. -func (opts formatOptions) FormatDiff(v *valueNode) textNode { +func (opts formatOptions) FormatDiff(v *valueNode, ptrs *pointerReferences) (out textNode) { + if opts.DiffMode == diffIdentical { + opts = opts.WithVerbosity(1) + } else { + opts = opts.WithVerbosity(3) + } + // Check whether we have specialized formatting for this node. // This is not necessary, but helpful for producing more readable outputs. if opts.CanFormatDiffSlice(v) { return opts.FormatDiffSlice(v) } + var parentKind reflect.Kind + if v.parent != nil && v.parent.TransformerName == "" { + parentKind = v.parent.Type.Kind() + } + // For leaf nodes, format the value based on the reflect.Values alone. if v.MaxDepth == 0 { switch opts.DiffMode { case diffUnknown, diffIdentical: // Format Equal. if v.NumDiff == 0 { - outx := opts.FormatValue(v.ValueX, visitedPointers{}) - outy := opts.FormatValue(v.ValueY, visitedPointers{}) + outx := opts.FormatValue(v.ValueX, parentKind, ptrs) + outy := opts.FormatValue(v.ValueY, parentKind, ptrs) if v.NumIgnored > 0 && v.NumSame == 0 { return textEllipsis } else if outx.Len() < outy.Len() { @@ -101,8 +135,13 @@ func (opts formatOptions) FormatDiff(v *valueNode) textNode { // Format unequal. assert(opts.DiffMode == diffUnknown) var list textList - outx := opts.WithTypeMode(elideType).FormatValue(v.ValueX, visitedPointers{}) - outy := opts.WithTypeMode(elideType).FormatValue(v.ValueY, visitedPointers{}) + outx := opts.WithTypeMode(elideType).FormatValue(v.ValueX, parentKind, ptrs) + outy := opts.WithTypeMode(elideType).FormatValue(v.ValueY, parentKind, ptrs) + for i := 0; i <= maxVerbosityPreset && outx != nil && outy != nil && outx.Equal(outy); i++ { + opts2 := verbosityPreset(opts, i).WithTypeMode(elideType) + outx = opts2.FormatValue(v.ValueX, parentKind, ptrs) + outy = opts2.FormatValue(v.ValueY, parentKind, ptrs) + } if outx != nil { list = append(list, textRecord{Diff: '-', Value: outx}) } @@ -111,34 +150,57 @@ func (opts formatOptions) FormatDiff(v *valueNode) textNode { } return opts.WithTypeMode(emitType).FormatType(v.Type, list) case diffRemoved: - return opts.FormatValue(v.ValueX, visitedPointers{}) + return opts.FormatValue(v.ValueX, parentKind, ptrs) case diffInserted: - return opts.FormatValue(v.ValueY, visitedPointers{}) + return opts.FormatValue(v.ValueY, parentKind, ptrs) default: panic("invalid diff mode") } } + // Register slice element to support cycle detection. + if parentKind == reflect.Slice { + ptrRefs := ptrs.PushPair(v.ValueX, v.ValueY, opts.DiffMode, true) + defer ptrs.Pop() + defer func() { out = wrapTrunkReferences(ptrRefs, out) }() + } + // Descend into the child value node. if v.TransformerName != "" { - out := opts.WithTypeMode(emitType).FormatDiff(v.Value) - out = textWrap{"Inverse(" + v.TransformerName + ", ", out, ")"} + out := opts.WithTypeMode(emitType).FormatDiff(v.Value, ptrs) + out = &textWrap{Prefix: "Inverse(" + v.TransformerName + ", ", Value: out, Suffix: ")"} return opts.FormatType(v.Type, out) } else { switch k := v.Type.Kind(); k { - case reflect.Struct, reflect.Array, reflect.Slice, reflect.Map: - return opts.FormatType(v.Type, opts.formatDiffList(v.Records, k)) + case reflect.Struct, reflect.Array, reflect.Slice: + out = opts.formatDiffList(v.Records, k, ptrs) + out = opts.FormatType(v.Type, out) + case reflect.Map: + // Register map to support cycle detection. + ptrRefs := ptrs.PushPair(v.ValueX, v.ValueY, opts.DiffMode, false) + defer ptrs.Pop() + + out = opts.formatDiffList(v.Records, k, ptrs) + out = wrapTrunkReferences(ptrRefs, out) + out = opts.FormatType(v.Type, out) case reflect.Ptr: - return textWrap{"&", opts.FormatDiff(v.Value), ""} + // Register pointer to support cycle detection. + ptrRefs := ptrs.PushPair(v.ValueX, v.ValueY, opts.DiffMode, false) + defer ptrs.Pop() + + out = opts.FormatDiff(v.Value, ptrs) + out = wrapTrunkReferences(ptrRefs, out) + out = &textWrap{Prefix: "&", Value: out} case reflect.Interface: - return opts.WithTypeMode(emitType).FormatDiff(v.Value) + out = opts.WithTypeMode(emitType).FormatDiff(v.Value, ptrs) default: panic(fmt.Sprintf("%v cannot have children", k)) } + return out } } -func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) textNode { +func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind, ptrs *pointerReferences) textNode { // Derive record name based on the data structure kind. var name string var formatKey func(reflect.Value) string @@ -154,7 +216,17 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) te case reflect.Map: name = "entry" opts = opts.WithTypeMode(elideType) - formatKey = formatMapKey + formatKey = func(v reflect.Value) string { return formatMapKey(v, false, ptrs) } + } + + maxLen := -1 + if opts.LimitVerbosity { + if opts.DiffMode == diffIdentical { + maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc... + } else { + maxLen = (1 << opts.verbosity()) << 1 // 2, 4, 8, 16, 32, 64, etc... + } + opts.VerbosityLevel-- } // Handle unification. @@ -163,6 +235,11 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) te var list textList var deferredEllipsis bool // Add final "..." to indicate records were dropped for _, r := range recs { + if len(list) == maxLen { + deferredEllipsis = true + break + } + // Elide struct fields that are zero value. if k == reflect.Struct { var isZero bool @@ -186,23 +263,31 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) te } continue } - if out := opts.FormatDiff(r.Value); out != nil { + if out := opts.FormatDiff(r.Value, ptrs); out != nil { list = append(list, textRecord{Key: formatKey(r.Key), Value: out}) } } if deferredEllipsis { list.AppendEllipsis(diffStats{}) } - return textWrap{"{", list, "}"} + return &textWrap{Prefix: "{", Value: list, Suffix: "}"} case diffUnknown: default: panic("invalid diff mode") } // Handle differencing. + var numDiffs int var list textList + var keys []reflect.Value // invariant: len(list) == len(keys) groups := coalesceAdjacentRecords(name, recs) + maxGroup := diffStats{Name: name} for i, ds := range groups { + if maxLen >= 0 && numDiffs >= maxLen { + maxGroup = maxGroup.Append(ds) + continue + } + // Handle equal records. if ds.NumDiff() == 0 { // Compute the number of leading and trailing records to print. @@ -226,16 +311,21 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) te // Format the equal values. for _, r := range recs[:numLo] { - out := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value) + out := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value, ptrs) list = append(list, textRecord{Key: formatKey(r.Key), Value: out}) + keys = append(keys, r.Key) } if numEqual > numLo+numHi { ds.NumIdentical -= numLo + numHi list.AppendEllipsis(ds) + for len(keys) < len(list) { + keys = append(keys, reflect.Value{}) + } } for _, r := range recs[numEqual-numHi : numEqual] { - out := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value) + out := opts.WithDiffMode(diffIdentical).FormatDiff(r.Value, ptrs) list = append(list, textRecord{Key: formatKey(r.Key), Value: out}) + keys = append(keys, r.Key) } recs = recs[numEqual:] continue @@ -247,24 +337,70 @@ func (opts formatOptions) formatDiffList(recs []reportRecord, k reflect.Kind) te case opts.CanFormatDiffSlice(r.Value): out := opts.FormatDiffSlice(r.Value) list = append(list, textRecord{Key: formatKey(r.Key), Value: out}) + keys = append(keys, r.Key) case r.Value.NumChildren == r.Value.MaxDepth: - outx := opts.WithDiffMode(diffRemoved).FormatDiff(r.Value) - outy := opts.WithDiffMode(diffInserted).FormatDiff(r.Value) + outx := opts.WithDiffMode(diffRemoved).FormatDiff(r.Value, ptrs) + outy := opts.WithDiffMode(diffInserted).FormatDiff(r.Value, ptrs) + for i := 0; i <= maxVerbosityPreset && outx != nil && outy != nil && outx.Equal(outy); i++ { + opts2 := verbosityPreset(opts, i) + outx = opts2.WithDiffMode(diffRemoved).FormatDiff(r.Value, ptrs) + outy = opts2.WithDiffMode(diffInserted).FormatDiff(r.Value, ptrs) + } if outx != nil { list = append(list, textRecord{Diff: diffRemoved, Key: formatKey(r.Key), Value: outx}) + keys = append(keys, r.Key) } if outy != nil { list = append(list, textRecord{Diff: diffInserted, Key: formatKey(r.Key), Value: outy}) + keys = append(keys, r.Key) } default: - out := opts.FormatDiff(r.Value) + out := opts.FormatDiff(r.Value, ptrs) list = append(list, textRecord{Key: formatKey(r.Key), Value: out}) + keys = append(keys, r.Key) } } recs = recs[ds.NumDiff():] + numDiffs += ds.NumDiff() + } + if maxGroup.IsZero() { + assert(len(recs) == 0) + } else { + list.AppendEllipsis(maxGroup) + for len(keys) < len(list) { + keys = append(keys, reflect.Value{}) + } } - assert(len(recs) == 0) - return textWrap{"{", list, "}"} + assert(len(list) == len(keys)) + + // For maps, the default formatting logic uses fmt.Stringer which may + // produce ambiguous output. Avoid calling String to disambiguate. + if k == reflect.Map { + var ambiguous bool + seenKeys := map[string]reflect.Value{} + for i, currKey := range keys { + if currKey.IsValid() { + strKey := list[i].Key + prevKey, seen := seenKeys[strKey] + if seen && prevKey.CanInterface() && currKey.CanInterface() { + ambiguous = prevKey.Interface() != currKey.Interface() + if ambiguous { + break + } + } + seenKeys[strKey] = currKey + } + } + if ambiguous { + for i, k := range keys { + if k.IsValid() { + list[i].Key = formatMapKey(k, true, ptrs) + } + } + } + } + + return &textWrap{Prefix: "{", Value: list, Suffix: "}"} } // coalesceAdjacentRecords coalesces the list of records into groups of diff --git a/vendor/github.com/google/go-cmp/cmp/report_references.go b/vendor/github.com/google/go-cmp/cmp/report_references.go new file mode 100644 index 00000000..d620c2c2 --- /dev/null +++ b/vendor/github.com/google/go-cmp/cmp/report_references.go @@ -0,0 +1,264 @@ +// Copyright 2020, 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.md file. + +package cmp + +import ( + "fmt" + "reflect" + "strings" + + "github.com/google/go-cmp/cmp/internal/flags" + "github.com/google/go-cmp/cmp/internal/value" +) + +const ( + pointerDelimPrefix = "⟪" + pointerDelimSuffix = "⟫" +) + +// formatPointer prints the address of the pointer. +func formatPointer(p value.Pointer, withDelims bool) string { + v := p.Uintptr() + if flags.Deterministic { + v = 0xdeadf00f // Only used for stable testing purposes + } + if withDelims { + return pointerDelimPrefix + formatHex(uint64(v)) + pointerDelimSuffix + } + return formatHex(uint64(v)) +} + +// pointerReferences is a stack of pointers visited so far. +type pointerReferences [][2]value.Pointer + +func (ps *pointerReferences) PushPair(vx, vy reflect.Value, d diffMode, deref bool) (pp [2]value.Pointer) { + if deref && vx.IsValid() { + vx = vx.Addr() + } + if deref && vy.IsValid() { + vy = vy.Addr() + } + switch d { + case diffUnknown, diffIdentical: + pp = [2]value.Pointer{value.PointerOf(vx), value.PointerOf(vy)} + case diffRemoved: + pp = [2]value.Pointer{value.PointerOf(vx), value.Pointer{}} + case diffInserted: + pp = [2]value.Pointer{value.Pointer{}, value.PointerOf(vy)} + } + *ps = append(*ps, pp) + return pp +} + +func (ps *pointerReferences) Push(v reflect.Value) (p value.Pointer, seen bool) { + p = value.PointerOf(v) + for _, pp := range *ps { + if p == pp[0] || p == pp[1] { + return p, true + } + } + *ps = append(*ps, [2]value.Pointer{p, p}) + return p, false +} + +func (ps *pointerReferences) Pop() { + *ps = (*ps)[:len(*ps)-1] +} + +// trunkReferences is metadata for a textNode indicating that the sub-tree +// represents the value for either pointer in a pair of references. +type trunkReferences struct{ pp [2]value.Pointer } + +// trunkReference is metadata for a textNode indicating that the sub-tree +// represents the value for the given pointer reference. +type trunkReference struct{ p value.Pointer } + +// leafReference is metadata for a textNode indicating that the value is +// truncated as it refers to another part of the tree (i.e., a trunk). +type leafReference struct{ p value.Pointer } + +func wrapTrunkReferences(pp [2]value.Pointer, s textNode) textNode { + switch { + case pp[0].IsNil(): + return &textWrap{Value: s, Metadata: trunkReference{pp[1]}} + case pp[1].IsNil(): + return &textWrap{Value: s, Metadata: trunkReference{pp[0]}} + case pp[0] == pp[1]: + return &textWrap{Value: s, Metadata: trunkReference{pp[0]}} + default: + return &textWrap{Value: s, Metadata: trunkReferences{pp}} + } +} +func wrapTrunkReference(p value.Pointer, printAddress bool, s textNode) textNode { + var prefix string + if printAddress { + prefix = formatPointer(p, true) + } + return &textWrap{Prefix: prefix, Value: s, Metadata: trunkReference{p}} +} +func makeLeafReference(p value.Pointer, printAddress bool) textNode { + out := &textWrap{Prefix: "(", Value: textEllipsis, Suffix: ")"} + var prefix string + if printAddress { + prefix = formatPointer(p, true) + } + return &textWrap{Prefix: prefix, Value: out, Metadata: leafReference{p}} +} + +// resolveReferences walks the textNode tree searching for any leaf reference +// metadata and resolves each against the corresponding trunk references. +// Since pointer addresses in memory are not particularly readable to the user, +// it replaces each pointer value with an arbitrary and unique reference ID. +func resolveReferences(s textNode) { + var walkNodes func(textNode, func(textNode)) + walkNodes = func(s textNode, f func(textNode)) { + f(s) + switch s := s.(type) { + case *textWrap: + walkNodes(s.Value, f) + case textList: + for _, r := range s { + walkNodes(r.Value, f) + } + } + } + + // Collect all trunks and leaves with reference metadata. + var trunks, leaves []*textWrap + walkNodes(s, func(s textNode) { + if s, ok := s.(*textWrap); ok { + switch s.Metadata.(type) { + case leafReference: + leaves = append(leaves, s) + case trunkReference, trunkReferences: + trunks = append(trunks, s) + } + } + }) + + // No leaf references to resolve. + if len(leaves) == 0 { + return + } + + // Collect the set of all leaf references to resolve. + leafPtrs := make(map[value.Pointer]bool) + for _, leaf := range leaves { + leafPtrs[leaf.Metadata.(leafReference).p] = true + } + + // Collect the set of trunk pointers that are always paired together. + // This allows us to assign a single ID to both pointers for brevity. + // If a pointer in a pair ever occurs by itself or as a different pair, + // then the pair is broken. + pairedTrunkPtrs := make(map[value.Pointer]value.Pointer) + unpair := func(p value.Pointer) { + if !pairedTrunkPtrs[p].IsNil() { + pairedTrunkPtrs[pairedTrunkPtrs[p]] = value.Pointer{} // invalidate other half + } + pairedTrunkPtrs[p] = value.Pointer{} // invalidate this half + } + for _, trunk := range trunks { + switch p := trunk.Metadata.(type) { + case trunkReference: + unpair(p.p) // standalone pointer cannot be part of a pair + case trunkReferences: + p0, ok0 := pairedTrunkPtrs[p.pp[0]] + p1, ok1 := pairedTrunkPtrs[p.pp[1]] + switch { + case !ok0 && !ok1: + // Register the newly seen pair. + pairedTrunkPtrs[p.pp[0]] = p.pp[1] + pairedTrunkPtrs[p.pp[1]] = p.pp[0] + case ok0 && ok1 && p0 == p.pp[1] && p1 == p.pp[0]: + // Exact pair already seen; do nothing. + default: + // Pair conflicts with some other pair; break all pairs. + unpair(p.pp[0]) + unpair(p.pp[1]) + } + } + } + + // Correlate each pointer referenced by leaves to a unique identifier, + // and print the IDs for each trunk that matches those pointers. + var nextID uint + ptrIDs := make(map[value.Pointer]uint) + newID := func() uint { + id := nextID + nextID++ + return id + } + for _, trunk := range trunks { + switch p := trunk.Metadata.(type) { + case trunkReference: + if print := leafPtrs[p.p]; print { + id, ok := ptrIDs[p.p] + if !ok { + id = newID() + ptrIDs[p.p] = id + } + trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id)) + } + case trunkReferences: + print0 := leafPtrs[p.pp[0]] + print1 := leafPtrs[p.pp[1]] + if print0 || print1 { + id0, ok0 := ptrIDs[p.pp[0]] + id1, ok1 := ptrIDs[p.pp[1]] + isPair := pairedTrunkPtrs[p.pp[0]] == p.pp[1] && pairedTrunkPtrs[p.pp[1]] == p.pp[0] + if isPair { + var id uint + assert(ok0 == ok1) // must be seen together or not at all + if ok0 { + assert(id0 == id1) // must have the same ID + id = id0 + } else { + id = newID() + ptrIDs[p.pp[0]] = id + ptrIDs[p.pp[1]] = id + } + trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id)) + } else { + if print0 && !ok0 { + id0 = newID() + ptrIDs[p.pp[0]] = id0 + } + if print1 && !ok1 { + id1 = newID() + ptrIDs[p.pp[1]] = id1 + } + switch { + case print0 && print1: + trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id0)+","+formatReference(id1)) + case print0: + trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id0)) + case print1: + trunk.Prefix = updateReferencePrefix(trunk.Prefix, formatReference(id1)) + } + } + } + } + } + + // Update all leaf references with the unique identifier. + for _, leaf := range leaves { + if id, ok := ptrIDs[leaf.Metadata.(leafReference).p]; ok { + leaf.Prefix = updateReferencePrefix(leaf.Prefix, formatReference(id)) + } + } +} + +func formatReference(id uint) string { + return fmt.Sprintf("ref#%d", id) +} + +func updateReferencePrefix(prefix, ref string) string { + if prefix == "" { + return pointerDelimPrefix + ref + pointerDelimSuffix + } + suffix := strings.TrimPrefix(prefix, pointerDelimPrefix) + return pointerDelimPrefix + ref + ": " + suffix +} 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 2761b628..786f6712 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_reflect.go +++ b/vendor/github.com/google/go-cmp/cmp/report_reflect.go @@ -5,13 +5,14 @@ package cmp import ( + "bytes" "fmt" "reflect" "strconv" "strings" "unicode" + "unicode/utf8" - "github.com/google/go-cmp/cmp/internal/flags" "github.com/google/go-cmp/cmp/internal/value" ) @@ -20,14 +21,22 @@ type formatValueOptions struct { // methods like error.Error or fmt.Stringer.String. AvoidStringer bool - // ShallowPointers controls whether to avoid descending into pointers. - // Useful when printing map keys, where pointer comparison is performed - // on the pointer address rather than the pointed-at value. - ShallowPointers bool - // PrintAddresses controls whether to print the address of all pointers, // slice elements, and maps. PrintAddresses bool + + // QualifiedNames controls whether FormatType uses the fully qualified name + // (including the full package path as opposed to just the package name). + QualifiedNames bool + + // VerbosityLevel controls the amount of output to produce. + // A higher value produces more output. A value of zero or lower produces + // no output (represented using an ellipsis). + // If LimitVerbosity is false, then the level is treated as infinite. + VerbosityLevel int + + // LimitVerbosity specifies that formatting should respect VerbosityLevel. + LimitVerbosity bool } // FormatType prints the type as if it were wrapping s. @@ -44,12 +53,15 @@ func (opts formatOptions) FormatType(t reflect.Type, s textNode) textNode { default: return s } + if opts.DiffMode == diffIdentical { + return s // elide type for identical nodes + } case elideType: return s } // Determine the type label, applying special handling for unnamed types. - typeName := t.String() + typeName := value.TypeString(t, opts.QualifiedNames) if t.Name() == "" { // According to Go grammar, certain type literals contain symbols that // do not strongly bind to the next lexicographical token (e.g., *T). @@ -57,39 +69,77 @@ func (opts formatOptions) FormatType(t reflect.Type, s textNode) textNode { case reflect.Chan, reflect.Func, reflect.Ptr: typeName = "(" + typeName + ")" } - typeName = strings.Replace(typeName, "struct {", "struct{", -1) - typeName = strings.Replace(typeName, "interface {", "interface{", -1) } + return &textWrap{Prefix: typeName, Value: wrapParens(s)} +} + +// wrapParens wraps s with a set of parenthesis, but avoids it if the +// wrapped node itself is already surrounded by a pair of parenthesis or braces. +// It handles unwrapping one level of pointer-reference nodes. +func wrapParens(s textNode) textNode { + var refNode *textWrap + if s2, ok := s.(*textWrap); ok { + // Unwrap a single pointer reference node. + switch s2.Metadata.(type) { + case leafReference, trunkReference, trunkReferences: + refNode = s2 + if s3, ok := refNode.Value.(*textWrap); ok { + s2 = s3 + } + } - // Avoid wrap the value in parenthesis if unnecessary. - if s, ok := s.(textWrap); ok { - hasParens := strings.HasPrefix(s.Prefix, "(") && strings.HasSuffix(s.Suffix, ")") - hasBraces := strings.HasPrefix(s.Prefix, "{") && strings.HasSuffix(s.Suffix, "}") + // Already has delimiters that make parenthesis unnecessary. + hasParens := strings.HasPrefix(s2.Prefix, "(") && strings.HasSuffix(s2.Suffix, ")") + hasBraces := strings.HasPrefix(s2.Prefix, "{") && strings.HasSuffix(s2.Suffix, "}") if hasParens || hasBraces { - return textWrap{typeName, s, ""} + return s } } - return textWrap{typeName + "(", s, ")"} + if refNode != nil { + refNode.Value = &textWrap{Prefix: "(", Value: refNode.Value, Suffix: ")"} + return s + } + return &textWrap{Prefix: "(", Value: s, Suffix: ")"} } // FormatValue prints the reflect.Value, taking extra care to avoid descending -// into pointers already in m. As pointers are visited, m is also updated. -func (opts formatOptions) FormatValue(v reflect.Value, m visitedPointers) (out textNode) { +// into pointers already in ptrs. As pointers are visited, ptrs is also updated. +func (opts formatOptions) FormatValue(v reflect.Value, parentKind reflect.Kind, ptrs *pointerReferences) (out textNode) { if !v.IsValid() { return nil } t := v.Type() + // Check slice element for cycles. + if parentKind == reflect.Slice { + ptrRef, visited := ptrs.Push(v.Addr()) + if visited { + return makeLeafReference(ptrRef, false) + } + defer ptrs.Pop() + defer func() { out = wrapTrunkReference(ptrRef, false, out) }() + } + // Check whether there is an Error or String method to call. if !opts.AvoidStringer && v.CanInterface() { // Avoid calling Error or String methods on nil receivers since many // implementations crash when doing so. if (t.Kind() != reflect.Ptr && t.Kind() != reflect.Interface) || !v.IsNil() { - switch v := v.Interface().(type) { - case error: - return textLine("e" + formatString(v.Error())) - case fmt.Stringer: - return textLine("s" + formatString(v.String())) + var prefix, strVal string + func() { + // Swallow and ignore any panics from String or Error. + defer func() { recover() }() + switch v := v.Interface().(type) { + case error: + strVal = v.Error() + prefix = "e" + case fmt.Stringer: + strVal = v.String() + prefix = "s" + } + }() + if prefix != "" { + return opts.formatString(prefix, strVal) } } } @@ -102,94 +152,140 @@ func (opts formatOptions) FormatValue(v reflect.Value, m visitedPointers) (out t } }() - var ptr string switch t.Kind() { case reflect.Bool: return textLine(fmt.Sprint(v.Bool())) case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: return textLine(fmt.Sprint(v.Int())) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - // Unnamed uints are usually bytes or words, so use hexadecimal. - if t.PkgPath() == "" || t.Kind() == reflect.Uintptr { + case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64: + return textLine(fmt.Sprint(v.Uint())) + case reflect.Uint8: + if parentKind == reflect.Slice || parentKind == reflect.Array { return textLine(formatHex(v.Uint())) } return textLine(fmt.Sprint(v.Uint())) + case reflect.Uintptr: + return textLine(formatHex(v.Uint())) case reflect.Float32, reflect.Float64: return textLine(fmt.Sprint(v.Float())) case reflect.Complex64, reflect.Complex128: return textLine(fmt.Sprint(v.Complex())) case reflect.String: - return textLine(formatString(v.String())) + return opts.formatString("", v.String()) case reflect.UnsafePointer, reflect.Chan, reflect.Func: - return textLine(formatPointer(v)) + return textLine(formatPointer(value.PointerOf(v), true)) case reflect.Struct: var list textList + v := makeAddressable(v) // needed for retrieveUnexportedField + maxLen := v.NumField() + if opts.LimitVerbosity { + maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc... + opts.VerbosityLevel-- + } for i := 0; i < v.NumField(); i++ { vv := v.Field(i) if value.IsZero(vv) { continue // Elide fields with zero values } - s := opts.WithTypeMode(autoType).FormatValue(vv, m) - list = append(list, textRecord{Key: t.Field(i).Name, Value: s}) + if len(list) == maxLen { + list.AppendEllipsis(diffStats{}) + break + } + sf := t.Field(i) + if supportExporters && !isExported(sf.Name) { + vv = retrieveUnexportedField(v, sf, true) + } + s := opts.WithTypeMode(autoType).FormatValue(vv, t.Kind(), ptrs) + list = append(list, textRecord{Key: sf.Name, Value: s}) } - return textWrap{"{", list, "}"} + return &textWrap{Prefix: "{", Value: list, Suffix: "}"} case reflect.Slice: if v.IsNil() { return textNil } - if opts.PrintAddresses { - ptr = formatPointer(v) + + // 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) } + if len(b) > 0 && utf8.Valid(b) && len(bytes.TrimFunc(b, isPrintSpace)) == 0 { + out = opts.formatString("", string(b)) + return opts.WithTypeMode(emitType).FormatType(t, out) + } } + fallthrough case reflect.Array: + maxLen := v.Len() + if opts.LimitVerbosity { + maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc... + opts.VerbosityLevel-- + } var list textList for i := 0; i < v.Len(); i++ { - vi := v.Index(i) - if vi.CanAddr() { // Check for cyclic elements - p := vi.Addr() - if m.Visit(p) { - var out textNode - out = textLine(formatPointer(p)) - out = opts.WithTypeMode(emitType).FormatType(p.Type(), out) - out = textWrap{"*", out, ""} - list = append(list, textRecord{Value: out}) - continue - } + if len(list) == maxLen { + list.AppendEllipsis(diffStats{}) + break } - s := opts.WithTypeMode(elideType).FormatValue(vi, m) + s := opts.WithTypeMode(elideType).FormatValue(v.Index(i), t.Kind(), ptrs) list = append(list, textRecord{Value: s}) } - return textWrap{ptr + "{", list, "}"} + + out = &textWrap{Prefix: "{", Value: list, Suffix: "}"} + if t.Kind() == reflect.Slice && opts.PrintAddresses { + header := fmt.Sprintf("ptr:%v, len:%d, cap:%d", formatPointer(value.PointerOf(v), false), v.Len(), v.Cap()) + out = &textWrap{Prefix: pointerDelimPrefix + header + pointerDelimSuffix, Value: out} + } + return out case reflect.Map: if v.IsNil() { return textNil } - if m.Visit(v) { - return textLine(formatPointer(v)) + + // Check pointer for cycles. + ptrRef, visited := ptrs.Push(v) + if visited { + return makeLeafReference(ptrRef, opts.PrintAddresses) } + defer ptrs.Pop() + maxLen := v.Len() + if opts.LimitVerbosity { + maxLen = ((1 << opts.verbosity()) >> 1) << 2 // 0, 4, 8, 16, 32, etc... + opts.VerbosityLevel-- + } var list textList for _, k := range value.SortKeys(v.MapKeys()) { - sk := formatMapKey(k) - sv := opts.WithTypeMode(elideType).FormatValue(v.MapIndex(k), m) + if len(list) == maxLen { + list.AppendEllipsis(diffStats{}) + break + } + sk := formatMapKey(k, false, ptrs) + sv := opts.WithTypeMode(elideType).FormatValue(v.MapIndex(k), t.Kind(), ptrs) list = append(list, textRecord{Key: sk, Value: sv}) } - if opts.PrintAddresses { - ptr = formatPointer(v) - } - return textWrap{ptr + "{", list, "}"} + + out = &textWrap{Prefix: "{", Value: list, Suffix: "}"} + out = wrapTrunkReference(ptrRef, opts.PrintAddresses, out) + return out case reflect.Ptr: if v.IsNil() { return textNil } - if m.Visit(v) || opts.ShallowPointers { - return textLine(formatPointer(v)) - } - if opts.PrintAddresses { - ptr = formatPointer(v) + + // Check pointer for cycles. + ptrRef, visited := ptrs.Push(v) + if visited { + out = makeLeafReference(ptrRef, opts.PrintAddresses) + return &textWrap{Prefix: "&", Value: out} } + defer ptrs.Pop() + skipType = true // Let the underlying value print the type instead - return textWrap{"&" + ptr, opts.FormatValue(v.Elem(), m), ""} + out = opts.FormatValue(v.Elem(), t.Kind(), ptrs) + out = wrapTrunkReference(ptrRef, opts.PrintAddresses, out) + out = &textWrap{Prefix: "&", Value: out} + return out case reflect.Interface: if v.IsNil() { return textNil @@ -197,19 +293,65 @@ func (opts formatOptions) FormatValue(v reflect.Value, m visitedPointers) (out t // Interfaces accept different concrete types, // so configure the underlying value to explicitly print the type. skipType = true // Print the concrete type instead - return opts.WithTypeMode(emitType).FormatValue(v.Elem(), m) + return opts.WithTypeMode(emitType).FormatValue(v.Elem(), t.Kind(), ptrs) default: panic(fmt.Sprintf("%v kind not handled", v.Kind())) } } +func (opts formatOptions) formatString(prefix, s string) textNode { + maxLen := len(s) + maxLines := strings.Count(s, "\n") + 1 + if opts.LimitVerbosity { + maxLen = (1 << opts.verbosity()) << 5 // 32, 64, 128, 256, etc... + maxLines = (1 << opts.verbosity()) << 2 // 4, 8, 16, 32, 64, etc... + } + + // For multiline strings, use the triple-quote syntax, + // but only use it when printing removed or inserted nodes since + // we only want the extra verbosity for those cases. + lines := strings.Split(strings.TrimSuffix(s, "\n"), "\n") + isTripleQuoted := len(lines) >= 4 && (opts.DiffMode == '-' || opts.DiffMode == '+') + for i := 0; i < len(lines) && isTripleQuoted; i++ { + lines[i] = strings.TrimPrefix(strings.TrimSuffix(lines[i], "\r"), "\r") // trim leading/trailing carriage returns for legacy Windows endline support + isPrintable := func(r rune) bool { + return unicode.IsPrint(r) || r == '\t' // specially treat tab as printable + } + line := lines[i] + isTripleQuoted = !strings.HasPrefix(strings.TrimPrefix(line, prefix), `"""`) && !strings.HasPrefix(line, "...") && strings.TrimFunc(line, isPrintable) == "" && len(line) <= maxLen + } + if isTripleQuoted { + var list textList + list = append(list, textRecord{Diff: opts.DiffMode, Value: textLine(prefix + `"""`), ElideComma: true}) + for i, line := range lines { + if numElided := len(lines) - i; i == maxLines-1 && numElided > 1 { + comment := commentString(fmt.Sprintf("%d elided lines", numElided)) + list = append(list, textRecord{Diff: opts.DiffMode, Value: textEllipsis, ElideComma: true, Comment: comment}) + break + } + list = append(list, textRecord{Diff: opts.DiffMode, Value: textLine(line), ElideComma: true}) + } + list = append(list, textRecord{Diff: opts.DiffMode, Value: textLine(prefix + `"""`), ElideComma: true}) + return &textWrap{Prefix: "(", Value: list, Suffix: ")"} + } + + // Format the string as a single-line quoted string. + if len(s) > maxLen+len(textEllipsis) { + return textLine(prefix + formatString(s[:maxLen]) + string(textEllipsis)) + } + return textLine(prefix + formatString(s)) +} + // formatMapKey formats v as if it were a map key. // The result is guaranteed to be a single line. -func formatMapKey(v reflect.Value) string { +func formatMapKey(v reflect.Value, disambiguate bool, ptrs *pointerReferences) string { var opts formatOptions + opts.DiffMode = diffIdentical opts.TypeMode = elideType - opts.ShallowPointers = true - s := opts.FormatValue(v, visitedPointers{}).String() + opts.PrintAddresses = disambiguate + opts.AvoidStringer = disambiguate + opts.QualifiedNames = disambiguate + s := opts.FormatValue(v, reflect.Map, ptrs).String() return strings.TrimSpace(s) } @@ -227,7 +369,7 @@ func formatString(s string) string { rawInvalid := func(r rune) bool { return r == '`' || r == '\n' || !(unicode.IsPrint(r) || r == '\t') } - if strings.IndexFunc(s, rawInvalid) < 0 { + if utf8.ValidString(s) && strings.IndexFunc(s, rawInvalid) < 0 { return "`" + s + "`" } return qs @@ -256,23 +398,3 @@ func formatHex(u uint64) string { } return fmt.Sprintf(f, u) } - -// formatPointer prints the address of the pointer. -func formatPointer(v reflect.Value) string { - p := v.Pointer() - if flags.Deterministic { - p = 0xdeadf00f // Only used for stable testing purposes - } - return fmt.Sprintf("⟪0x%x⟫", p) -} - -type visitedPointers map[value.Pointer]struct{} - -// Visit inserts pointer v into the visited map and reports whether it had -// already been visited before. -func (m visitedPointers) Visit(v reflect.Value) bool { - p := value.PointerOf(v) - _, visited := m[p] - m[p] = struct{}{} - return visited -} 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 eafcf2e4..35315dad 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_slices.go +++ b/vendor/github.com/google/go-cmp/cmp/report_slices.go @@ -8,6 +8,7 @@ import ( "bytes" "fmt" "reflect" + "strconv" "strings" "unicode" "unicode/utf8" @@ -23,11 +24,25 @@ func (opts formatOptions) CanFormatDiffSlice(v *valueNode) bool { return false // Must be formatting in diff mode case v.NumDiff == 0: return false // No differences detected - case v.NumIgnored+v.NumCompared+v.NumTransformed > 0: - // TODO: Handle the case where someone uses bytes.Equal on a large slice. - return false // Some custom option was used to determined equality case !v.ValueX.IsValid() || !v.ValueY.IsValid(): return false // Both values must be valid + case v.Type.Kind() == reflect.Slice && (v.ValueX.Len() == 0 || v.ValueY.Len() == 0): + return false // Both slice values have to be non-empty + case v.NumIgnored > 0: + return false // Some ignore option was used + case v.NumTransformed > 0: + return false // Some transform option was used + case v.NumCompared > 1: + return false // More than one comparison was used + case v.NumCompared == 1 && v.Type.Name() != "": + // The need for cmp to check applicability of options on every element + // in a slice is a significant performance detriment for large []byte. + // The workaround is to specify Comparer(bytes.Equal), + // which enables cmp to compare []byte more efficiently. + // If they differ, we still want to provide batched diffing. + // The logic disallows named types since they tend to have their own + // String method, with nicer formatting than what this provides. + return false } switch t := v.Type; t.Kind() { @@ -82,7 +97,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { } if isText || isBinary { var numLines, lastLineIdx, maxLineLen int - isBinary = false + isBinary = !utf8.ValidString(sx) || !utf8.ValidString(sy) for i, r := range sx + sy { if !(unicode.IsPrint(r) || unicode.IsSpace(r)) || r == utf8.RuneError { isBinary = true @@ -97,7 +112,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { } } isText = !isBinary - isLinedText = isText && numLines >= 4 && maxLineLen <= 256 + isLinedText = isText && numLines >= 4 && maxLineLen <= 1024 } // Format the string into printable records. @@ -117,6 +132,83 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { }, ) delim = "\n" + + // If possible, use a custom triple-quote (""") syntax for printing + // differences in a string literal. This format is more readable, + // but has edge-cases where differences are visually indistinguishable. + // This format is avoided under the following conditions: + // • A line starts with `"""` + // • A line starts with "..." + // • A line contains non-printable characters + // • Adjacent different lines differ only by whitespace + // + // For example: + // """ + // ... // 3 identical lines + // foo + // bar + // - baz + // + BAZ + // """ + isTripleQuoted := true + prevRemoveLines := map[string]bool{} + prevInsertLines := map[string]bool{} + var list2 textList + list2 = append(list2, textRecord{Value: textLine(`"""`), ElideComma: true}) + for _, r := range list { + if !r.Value.Equal(textEllipsis) { + line, _ := strconv.Unquote(string(r.Value.(textLine))) + line = strings.TrimPrefix(strings.TrimSuffix(line, "\r"), "\r") // trim leading/trailing carriage returns for legacy Windows endline support + normLine := strings.Map(func(r rune) rune { + if unicode.IsSpace(r) { + return -1 // drop whitespace to avoid visually indistinguishable output + } + return r + }, line) + isPrintable := func(r rune) bool { + return unicode.IsPrint(r) || r == '\t' // specially treat tab as printable + } + isTripleQuoted = !strings.HasPrefix(line, `"""`) && !strings.HasPrefix(line, "...") && strings.TrimFunc(line, isPrintable) == "" + switch r.Diff { + case diffRemoved: + isTripleQuoted = isTripleQuoted && !prevInsertLines[normLine] + prevRemoveLines[normLine] = true + case diffInserted: + isTripleQuoted = isTripleQuoted && !prevRemoveLines[normLine] + prevInsertLines[normLine] = true + } + if !isTripleQuoted { + break + } + r.Value = textLine(line) + r.ElideComma = true + } + if !(r.Diff == diffRemoved || r.Diff == diffInserted) { // start a new non-adjacent difference group + prevRemoveLines = map[string]bool{} + prevInsertLines = map[string]bool{} + } + list2 = append(list2, r) + } + if r := list2[len(list2)-1]; r.Diff == diffIdentical && len(r.Value.(textLine)) == 0 { + list2 = list2[:len(list2)-1] // elide single empty line at the end + } + list2 = append(list2, textRecord{Value: textLine(`"""`), ElideComma: true}) + if isTripleQuoted { + var out textNode = &textWrap{Prefix: "(", Value: list2, Suffix: ")"} + switch t.Kind() { + case reflect.String: + if t != reflect.TypeOf(string("")) { + out = opts.FormatType(t, out) + } + case reflect.Slice: + // Always emit type for slices since the triple-quote syntax + // looks like a string (not a slice). + opts = opts.WithTypeMode(emitType) + out = opts.FormatType(t, out) + } + return out + } + // If the text appears to be single-lined text, // then perform differencing in approximately fixed-sized chunks. // The output is printed as quoted strings. @@ -129,6 +221,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { }, ) delim = "" + // If the text appears to be binary data, // then perform differencing in approximately fixed-sized chunks. // The output is inspired by hexdump. @@ -145,6 +238,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { return textRecord{Diff: d, Value: textLine(s), Comment: comment} }, ) + // For all other slices of primitive types, // then perform differencing in approximately fixed-sized chunks. // The size of each chunk depends on the width of the element kind. @@ -172,7 +266,9 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { switch t.Elem().Kind() { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: ss = append(ss, fmt.Sprint(v.Index(i).Int())) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64: + ss = append(ss, fmt.Sprint(v.Index(i).Uint())) + case reflect.Uint8, reflect.Uintptr: ss = append(ss, formatHex(v.Index(i).Uint())) case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128: ss = append(ss, fmt.Sprint(v.Index(i).Interface())) @@ -185,7 +281,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { } // Wrap the output with appropriate type information. - var out textNode = textWrap{"{", list, "}"} + var out textNode = &textWrap{Prefix: "{", Value: list, Suffix: "}"} if !isText { // The "{...}" byte-sequence literal is not valid Go syntax for strings. // Emit the type for extra clarity (e.g. "string{...}"). @@ -196,12 +292,12 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode { } switch t.Kind() { case reflect.String: - out = textWrap{"strings.Join(", out, fmt.Sprintf(", %q)", delim)} + out = &textWrap{Prefix: "strings.Join(", Value: out, Suffix: fmt.Sprintf(", %q)", delim)} if t != reflect.TypeOf(string("")) { out = opts.FormatType(t, out) } case reflect.Slice: - out = textWrap{"bytes.Join(", out, fmt.Sprintf(", %q)", delim)} + out = &textWrap{Prefix: "bytes.Join(", Value: out, Suffix: fmt.Sprintf(", %q)", delim)} if t != reflect.TypeOf([]byte(nil)) { out = opts.FormatType(t, out) } @@ -242,9 +338,22 @@ func (opts formatOptions) formatDiffSlice( return n0 - v.Len() } + var numDiffs int + maxLen := -1 + if opts.LimitVerbosity { + maxLen = (1 << opts.verbosity()) << 2 // 4, 8, 16, 32, 64, etc... + opts.VerbosityLevel-- + } + groups := coalesceAdjacentEdits(name, es) groups = coalesceInterveningIdentical(groups, chunkSize/4) + maxGroup := diffStats{Name: name} for i, ds := range groups { + if maxLen >= 0 && numDiffs >= maxLen { + maxGroup = maxGroup.Append(ds) + continue + } + // Print equal. if ds.NumDiff() == 0 { // Compute the number of leading and trailing equal bytes to print. @@ -273,12 +382,18 @@ func (opts formatOptions) formatDiffSlice( } // Print unequal. + len0 := len(list) nx := appendChunks(vx.Slice(0, ds.NumIdentical+ds.NumRemoved+ds.NumModified), diffRemoved) vx = vx.Slice(nx, vx.Len()) ny := appendChunks(vy.Slice(0, ds.NumIdentical+ds.NumInserted+ds.NumModified), diffInserted) vy = vy.Slice(ny, vy.Len()) + numDiffs += len(list) - len0 + } + if maxGroup.IsZero() { + assert(vx.Len() == 0 && vy.Len() == 0) + } else { + list.AppendEllipsis(maxGroup) } - assert(vx.Len() == 0 && vy.Len() == 0) return list } diff --git a/vendor/github.com/google/go-cmp/cmp/report_text.go b/vendor/github.com/google/go-cmp/cmp/report_text.go index 8b8fcab7..8b12c05c 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_text.go +++ b/vendor/github.com/google/go-cmp/cmp/report_text.go @@ -10,12 +10,15 @@ import ( "math/rand" "strings" "time" + "unicode/utf8" "github.com/google/go-cmp/cmp/internal/flags" ) var randBool = rand.New(rand.NewSource(time.Now().Unix())).Intn(2) == 0 +const maxColumnLength = 80 + type indentMode int func (n indentMode) appendIndent(b []byte, d diffMode) []byte { @@ -91,21 +94,22 @@ type textNode interface { // textWrap is a wrapper that concatenates a prefix and/or a suffix // to the underlying node. type textWrap struct { - Prefix string // e.g., "bytes.Buffer{" - Value textNode // textWrap | textList | textLine - Suffix string // e.g., "}" + Prefix string // e.g., "bytes.Buffer{" + Value textNode // textWrap | textList | textLine + Suffix string // e.g., "}" + Metadata interface{} // arbitrary metadata; has no effect on formatting } -func (s textWrap) Len() int { +func (s *textWrap) Len() int { return len(s.Prefix) + s.Value.Len() + len(s.Suffix) } -func (s1 textWrap) Equal(s2 textNode) bool { - if s2, ok := s2.(textWrap); ok { +func (s1 *textWrap) Equal(s2 textNode) bool { + if s2, ok := s2.(*textWrap); ok { return s1.Prefix == s2.Prefix && s1.Value.Equal(s2.Value) && s1.Suffix == s2.Suffix } return false } -func (s textWrap) String() string { +func (s *textWrap) String() string { var d diffMode var n indentMode _, s2 := s.formatCompactTo(nil, d) @@ -114,7 +118,7 @@ func (s textWrap) String() string { b = append(b, '\n') // Trailing newline return string(b) } -func (s textWrap) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) { +func (s *textWrap) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) { n0 := len(b) // Original buffer length b = append(b, s.Prefix...) b, s.Value = s.Value.formatCompactTo(b, d) @@ -124,7 +128,7 @@ func (s textWrap) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) { } return b, s } -func (s textWrap) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte { +func (s *textWrap) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte { b = append(b, s.Prefix...) b = s.Value.formatExpandedTo(b, d, n) b = append(b, s.Suffix...) @@ -136,22 +140,23 @@ func (s textWrap) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte { // of the textList.formatCompactTo method. type textList []textRecord type textRecord struct { - Diff diffMode // e.g., 0 or '-' or '+' - Key string // e.g., "MyField" - Value textNode // textWrap | textLine - Comment fmt.Stringer // e.g., "6 identical fields" + Diff diffMode // e.g., 0 or '-' or '+' + Key string // e.g., "MyField" + Value textNode // textWrap | textLine + ElideComma bool // avoid trailing comma + Comment fmt.Stringer // e.g., "6 identical fields" } // AppendEllipsis appends a new ellipsis node to the list if none already // exists at the end. If cs is non-zero it coalesces the statistics with the // previous diffStats. func (s *textList) AppendEllipsis(ds diffStats) { - hasStats := ds != diffStats{} + hasStats := !ds.IsZero() if len(*s) == 0 || !(*s)[len(*s)-1].Value.Equal(textEllipsis) { if hasStats { - *s = append(*s, textRecord{Value: textEllipsis, Comment: ds}) + *s = append(*s, textRecord{Value: textEllipsis, ElideComma: true, Comment: ds}) } else { - *s = append(*s, textRecord{Value: textEllipsis}) + *s = append(*s, textRecord{Value: textEllipsis, ElideComma: true}) } return } @@ -191,7 +196,7 @@ func (s1 textList) Equal(s2 textNode) bool { } func (s textList) String() string { - return textWrap{"{", s, "}"}.String() + return (&textWrap{Prefix: "{", Value: s, Suffix: "}"}).String() } func (s textList) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) { @@ -221,7 +226,7 @@ func (s textList) formatCompactTo(b []byte, d diffMode) ([]byte, textNode) { } // Force multi-lined output when printing a removed/inserted node that // is sufficiently long. - if (d == diffInserted || d == diffRemoved) && len(b[n0:]) > 80 { + if (d == diffInserted || d == diffRemoved) && len(b[n0:]) > maxColumnLength { multiLine = true } if !multiLine { @@ -236,16 +241,50 @@ func (s textList) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte { _, isLine := r.Value.(textLine) return r.Key == "" || !isLine }, - func(r textRecord) int { return len(r.Key) }, + func(r textRecord) int { return utf8.RuneCountInString(r.Key) }, ) alignValueLens := s.alignLens( func(r textRecord) bool { _, isLine := r.Value.(textLine) return !isLine || r.Value.Equal(textEllipsis) || r.Comment == nil }, - func(r textRecord) int { return len(r.Value.(textLine)) }, + func(r textRecord) int { return utf8.RuneCount(r.Value.(textLine)) }, ) + // Format lists of simple lists in a batched form. + // If the list is sequence of only textLine values, + // then batch multiple values on a single line. + var isSimple bool + for _, r := range s { + _, isLine := r.Value.(textLine) + isSimple = r.Diff == 0 && r.Key == "" && isLine && r.Comment == nil + if !isSimple { + break + } + } + if isSimple { + n++ + var batch []byte + emitBatch := func() { + if len(batch) > 0 { + b = n.appendIndent(append(b, '\n'), d) + b = append(b, bytes.TrimRight(batch, " ")...) + batch = batch[:0] + } + } + for _, r := range s { + line := r.Value.(textLine) + if len(batch)+len(line)+len(", ") > maxColumnLength { + emitBatch() + } + batch = append(batch, line...) + batch = append(batch, ", "...) + } + emitBatch() + n-- + return n.appendIndent(append(b, '\n'), d) + } + // Format the list as a multi-lined output. n++ for i, r := range s { @@ -256,7 +295,7 @@ func (s textList) formatExpandedTo(b []byte, d diffMode, n indentMode) []byte { b = alignKeyLens[i].appendChar(b, ' ') b = r.Value.formatExpandedTo(b, d|r.Diff, n) - if !r.Value.Equal(textEllipsis) { + if !r.ElideComma { b = append(b, ',') } b = alignValueLens[i].appendChar(b, ' ') @@ -332,6 +371,11 @@ type diffStats struct { NumModified int } +func (s diffStats) IsZero() bool { + s.Name = "" + return s == diffStats{} +} + func (s diffStats) NumDiff() int { return s.NumRemoved + s.NumInserted + s.NumModified } diff --git a/vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.pb.go b/vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.pb.go deleted file mode 100644 index 6199e7cb..00000000 --- a/vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.pb.go +++ /dev/null @@ -1,5226 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: OpenAPIv2/OpenAPIv2.proto - -package openapi_v2 - -import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - any "github.com/golang/protobuf/ptypes/any" - math "math" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package - -type AdditionalPropertiesItem struct { - // Types that are valid to be assigned to Oneof: - // *AdditionalPropertiesItem_Schema - // *AdditionalPropertiesItem_Boolean - Oneof isAdditionalPropertiesItem_Oneof `protobuf_oneof:"oneof"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *AdditionalPropertiesItem) Reset() { *m = AdditionalPropertiesItem{} } -func (m *AdditionalPropertiesItem) String() string { return proto.CompactTextString(m) } -func (*AdditionalPropertiesItem) ProtoMessage() {} -func (*AdditionalPropertiesItem) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{0} -} - -func (m *AdditionalPropertiesItem) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_AdditionalPropertiesItem.Unmarshal(m, b) -} -func (m *AdditionalPropertiesItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_AdditionalPropertiesItem.Marshal(b, m, deterministic) -} -func (m *AdditionalPropertiesItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_AdditionalPropertiesItem.Merge(m, src) -} -func (m *AdditionalPropertiesItem) XXX_Size() int { - return xxx_messageInfo_AdditionalPropertiesItem.Size(m) -} -func (m *AdditionalPropertiesItem) XXX_DiscardUnknown() { - xxx_messageInfo_AdditionalPropertiesItem.DiscardUnknown(m) -} - -var xxx_messageInfo_AdditionalPropertiesItem proto.InternalMessageInfo - -type isAdditionalPropertiesItem_Oneof interface { - isAdditionalPropertiesItem_Oneof() -} - -type AdditionalPropertiesItem_Schema struct { - Schema *Schema `protobuf:"bytes,1,opt,name=schema,proto3,oneof"` -} - -type AdditionalPropertiesItem_Boolean struct { - Boolean bool `protobuf:"varint,2,opt,name=boolean,proto3,oneof"` -} - -func (*AdditionalPropertiesItem_Schema) isAdditionalPropertiesItem_Oneof() {} - -func (*AdditionalPropertiesItem_Boolean) isAdditionalPropertiesItem_Oneof() {} - -func (m *AdditionalPropertiesItem) GetOneof() isAdditionalPropertiesItem_Oneof { - if m != nil { - return m.Oneof - } - return nil -} - -func (m *AdditionalPropertiesItem) GetSchema() *Schema { - if x, ok := m.GetOneof().(*AdditionalPropertiesItem_Schema); ok { - return x.Schema - } - return nil -} - -func (m *AdditionalPropertiesItem) GetBoolean() bool { - if x, ok := m.GetOneof().(*AdditionalPropertiesItem_Boolean); ok { - return x.Boolean - } - return false -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*AdditionalPropertiesItem) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*AdditionalPropertiesItem_Schema)(nil), - (*AdditionalPropertiesItem_Boolean)(nil), - } -} - -type Any struct { - Value *any.Any `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` - Yaml string `protobuf:"bytes,2,opt,name=yaml,proto3" json:"yaml,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Any) Reset() { *m = Any{} } -func (m *Any) String() string { return proto.CompactTextString(m) } -func (*Any) ProtoMessage() {} -func (*Any) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{1} -} - -func (m *Any) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Any.Unmarshal(m, b) -} -func (m *Any) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Any.Marshal(b, m, deterministic) -} -func (m *Any) XXX_Merge(src proto.Message) { - xxx_messageInfo_Any.Merge(m, src) -} -func (m *Any) XXX_Size() int { - return xxx_messageInfo_Any.Size(m) -} -func (m *Any) XXX_DiscardUnknown() { - xxx_messageInfo_Any.DiscardUnknown(m) -} - -var xxx_messageInfo_Any proto.InternalMessageInfo - -func (m *Any) GetValue() *any.Any { - if m != nil { - return m.Value - } - return nil -} - -func (m *Any) GetYaml() string { - if m != nil { - return m.Yaml - } - return "" -} - -type ApiKeySecurity struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - In string `protobuf:"bytes,3,opt,name=in,proto3" json:"in,omitempty"` - Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,5,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ApiKeySecurity) Reset() { *m = ApiKeySecurity{} } -func (m *ApiKeySecurity) String() string { return proto.CompactTextString(m) } -func (*ApiKeySecurity) ProtoMessage() {} -func (*ApiKeySecurity) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{2} -} - -func (m *ApiKeySecurity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ApiKeySecurity.Unmarshal(m, b) -} -func (m *ApiKeySecurity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ApiKeySecurity.Marshal(b, m, deterministic) -} -func (m *ApiKeySecurity) XXX_Merge(src proto.Message) { - xxx_messageInfo_ApiKeySecurity.Merge(m, src) -} -func (m *ApiKeySecurity) XXX_Size() int { - return xxx_messageInfo_ApiKeySecurity.Size(m) -} -func (m *ApiKeySecurity) XXX_DiscardUnknown() { - xxx_messageInfo_ApiKeySecurity.DiscardUnknown(m) -} - -var xxx_messageInfo_ApiKeySecurity proto.InternalMessageInfo - -func (m *ApiKeySecurity) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *ApiKeySecurity) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *ApiKeySecurity) GetIn() string { - if m != nil { - return m.In - } - return "" -} - -func (m *ApiKeySecurity) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *ApiKeySecurity) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type BasicAuthenticationSecurity struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,3,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BasicAuthenticationSecurity) Reset() { *m = BasicAuthenticationSecurity{} } -func (m *BasicAuthenticationSecurity) String() string { return proto.CompactTextString(m) } -func (*BasicAuthenticationSecurity) ProtoMessage() {} -func (*BasicAuthenticationSecurity) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{3} -} - -func (m *BasicAuthenticationSecurity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BasicAuthenticationSecurity.Unmarshal(m, b) -} -func (m *BasicAuthenticationSecurity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BasicAuthenticationSecurity.Marshal(b, m, deterministic) -} -func (m *BasicAuthenticationSecurity) XXX_Merge(src proto.Message) { - xxx_messageInfo_BasicAuthenticationSecurity.Merge(m, src) -} -func (m *BasicAuthenticationSecurity) XXX_Size() int { - return xxx_messageInfo_BasicAuthenticationSecurity.Size(m) -} -func (m *BasicAuthenticationSecurity) XXX_DiscardUnknown() { - xxx_messageInfo_BasicAuthenticationSecurity.DiscardUnknown(m) -} - -var xxx_messageInfo_BasicAuthenticationSecurity proto.InternalMessageInfo - -func (m *BasicAuthenticationSecurity) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *BasicAuthenticationSecurity) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *BasicAuthenticationSecurity) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type BodyParameter struct { - // A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed. - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - // The name of the parameter. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - // Determines the location of the parameter. - In string `protobuf:"bytes,3,opt,name=in,proto3" json:"in,omitempty"` - // Determines whether or not this parameter is required or optional. - Required bool `protobuf:"varint,4,opt,name=required,proto3" json:"required,omitempty"` - Schema *Schema `protobuf:"bytes,5,opt,name=schema,proto3" json:"schema,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,6,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *BodyParameter) Reset() { *m = BodyParameter{} } -func (m *BodyParameter) String() string { return proto.CompactTextString(m) } -func (*BodyParameter) ProtoMessage() {} -func (*BodyParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{4} -} - -func (m *BodyParameter) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BodyParameter.Unmarshal(m, b) -} -func (m *BodyParameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BodyParameter.Marshal(b, m, deterministic) -} -func (m *BodyParameter) XXX_Merge(src proto.Message) { - xxx_messageInfo_BodyParameter.Merge(m, src) -} -func (m *BodyParameter) XXX_Size() int { - return xxx_messageInfo_BodyParameter.Size(m) -} -func (m *BodyParameter) XXX_DiscardUnknown() { - xxx_messageInfo_BodyParameter.DiscardUnknown(m) -} - -var xxx_messageInfo_BodyParameter proto.InternalMessageInfo - -func (m *BodyParameter) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *BodyParameter) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *BodyParameter) GetIn() string { - if m != nil { - return m.In - } - return "" -} - -func (m *BodyParameter) GetRequired() bool { - if m != nil { - return m.Required - } - return false -} - -func (m *BodyParameter) GetSchema() *Schema { - if m != nil { - return m.Schema - } - return nil -} - -func (m *BodyParameter) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -// Contact information for the owners of the API. -type Contact struct { - // The identifying name of the contact person/organization. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The URL pointing to the contact information. - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` - // The email address of the contact person/organization. - Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,4,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Contact) Reset() { *m = Contact{} } -func (m *Contact) String() string { return proto.CompactTextString(m) } -func (*Contact) ProtoMessage() {} -func (*Contact) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{5} -} - -func (m *Contact) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Contact.Unmarshal(m, b) -} -func (m *Contact) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Contact.Marshal(b, m, deterministic) -} -func (m *Contact) XXX_Merge(src proto.Message) { - xxx_messageInfo_Contact.Merge(m, src) -} -func (m *Contact) XXX_Size() int { - return xxx_messageInfo_Contact.Size(m) -} -func (m *Contact) XXX_DiscardUnknown() { - xxx_messageInfo_Contact.DiscardUnknown(m) -} - -var xxx_messageInfo_Contact proto.InternalMessageInfo - -func (m *Contact) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Contact) GetUrl() string { - if m != nil { - return m.Url - } - return "" -} - -func (m *Contact) GetEmail() string { - if m != nil { - return m.Email - } - return "" -} - -func (m *Contact) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type Default struct { - AdditionalProperties []*NamedAny `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Default) Reset() { *m = Default{} } -func (m *Default) String() string { return proto.CompactTextString(m) } -func (*Default) ProtoMessage() {} -func (*Default) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{6} -} - -func (m *Default) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Default.Unmarshal(m, b) -} -func (m *Default) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Default.Marshal(b, m, deterministic) -} -func (m *Default) XXX_Merge(src proto.Message) { - xxx_messageInfo_Default.Merge(m, src) -} -func (m *Default) XXX_Size() int { - return xxx_messageInfo_Default.Size(m) -} -func (m *Default) XXX_DiscardUnknown() { - xxx_messageInfo_Default.DiscardUnknown(m) -} - -var xxx_messageInfo_Default proto.InternalMessageInfo - -func (m *Default) GetAdditionalProperties() []*NamedAny { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -// One or more JSON objects describing the schemas being consumed and produced by the API. -type Definitions struct { - AdditionalProperties []*NamedSchema `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Definitions) Reset() { *m = Definitions{} } -func (m *Definitions) String() string { return proto.CompactTextString(m) } -func (*Definitions) ProtoMessage() {} -func (*Definitions) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{7} -} - -func (m *Definitions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Definitions.Unmarshal(m, b) -} -func (m *Definitions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Definitions.Marshal(b, m, deterministic) -} -func (m *Definitions) XXX_Merge(src proto.Message) { - xxx_messageInfo_Definitions.Merge(m, src) -} -func (m *Definitions) XXX_Size() int { - return xxx_messageInfo_Definitions.Size(m) -} -func (m *Definitions) XXX_DiscardUnknown() { - xxx_messageInfo_Definitions.DiscardUnknown(m) -} - -var xxx_messageInfo_Definitions proto.InternalMessageInfo - -func (m *Definitions) GetAdditionalProperties() []*NamedSchema { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -type Document struct { - // The Swagger version of this document. - Swagger string `protobuf:"bytes,1,opt,name=swagger,proto3" json:"swagger,omitempty"` - Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` - // The host (name or ip) of the API. Example: 'swagger.io' - Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` - // The base path to the API. Example: '/api'. - BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` - // The transfer protocol of the API. - Schemes []string `protobuf:"bytes,5,rep,name=schemes,proto3" json:"schemes,omitempty"` - // A list of MIME types accepted by the API. - Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` - // A list of MIME types the API can produce. - Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` - Paths *Paths `protobuf:"bytes,8,opt,name=paths,proto3" json:"paths,omitempty"` - Definitions *Definitions `protobuf:"bytes,9,opt,name=definitions,proto3" json:"definitions,omitempty"` - Parameters *ParameterDefinitions `protobuf:"bytes,10,opt,name=parameters,proto3" json:"parameters,omitempty"` - Responses *ResponseDefinitions `protobuf:"bytes,11,opt,name=responses,proto3" json:"responses,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,13,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` - Tags []*Tag `protobuf:"bytes,14,rep,name=tags,proto3" json:"tags,omitempty"` - ExternalDocs *ExternalDocs `protobuf:"bytes,15,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,16,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Document) Reset() { *m = Document{} } -func (m *Document) String() string { return proto.CompactTextString(m) } -func (*Document) ProtoMessage() {} -func (*Document) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{8} -} - -func (m *Document) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Document.Unmarshal(m, b) -} -func (m *Document) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Document.Marshal(b, m, deterministic) -} -func (m *Document) XXX_Merge(src proto.Message) { - xxx_messageInfo_Document.Merge(m, src) -} -func (m *Document) XXX_Size() int { - return xxx_messageInfo_Document.Size(m) -} -func (m *Document) XXX_DiscardUnknown() { - xxx_messageInfo_Document.DiscardUnknown(m) -} - -var xxx_messageInfo_Document proto.InternalMessageInfo - -func (m *Document) GetSwagger() string { - if m != nil { - return m.Swagger - } - return "" -} - -func (m *Document) GetInfo() *Info { - if m != nil { - return m.Info - } - return nil -} - -func (m *Document) GetHost() string { - if m != nil { - return m.Host - } - return "" -} - -func (m *Document) GetBasePath() string { - if m != nil { - return m.BasePath - } - return "" -} - -func (m *Document) GetSchemes() []string { - if m != nil { - return m.Schemes - } - return nil -} - -func (m *Document) GetConsumes() []string { - if m != nil { - return m.Consumes - } - return nil -} - -func (m *Document) GetProduces() []string { - if m != nil { - return m.Produces - } - return nil -} - -func (m *Document) GetPaths() *Paths { - if m != nil { - return m.Paths - } - return nil -} - -func (m *Document) GetDefinitions() *Definitions { - if m != nil { - return m.Definitions - } - return nil -} - -func (m *Document) GetParameters() *ParameterDefinitions { - if m != nil { - return m.Parameters - } - return nil -} - -func (m *Document) GetResponses() *ResponseDefinitions { - if m != nil { - return m.Responses - } - return nil -} - -func (m *Document) GetSecurity() []*SecurityRequirement { - if m != nil { - return m.Security - } - return nil -} - -func (m *Document) GetSecurityDefinitions() *SecurityDefinitions { - if m != nil { - return m.SecurityDefinitions - } - return nil -} - -func (m *Document) GetTags() []*Tag { - if m != nil { - return m.Tags - } - return nil -} - -func (m *Document) GetExternalDocs() *ExternalDocs { - if m != nil { - return m.ExternalDocs - } - return nil -} - -func (m *Document) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type Examples struct { - AdditionalProperties []*NamedAny `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Examples) Reset() { *m = Examples{} } -func (m *Examples) String() string { return proto.CompactTextString(m) } -func (*Examples) ProtoMessage() {} -func (*Examples) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{9} -} - -func (m *Examples) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Examples.Unmarshal(m, b) -} -func (m *Examples) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Examples.Marshal(b, m, deterministic) -} -func (m *Examples) XXX_Merge(src proto.Message) { - xxx_messageInfo_Examples.Merge(m, src) -} -func (m *Examples) XXX_Size() int { - return xxx_messageInfo_Examples.Size(m) -} -func (m *Examples) XXX_DiscardUnknown() { - xxx_messageInfo_Examples.DiscardUnknown(m) -} - -var xxx_messageInfo_Examples proto.InternalMessageInfo - -func (m *Examples) GetAdditionalProperties() []*NamedAny { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -// information about external documentation -type ExternalDocs struct { - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,3,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ExternalDocs) Reset() { *m = ExternalDocs{} } -func (m *ExternalDocs) String() string { return proto.CompactTextString(m) } -func (*ExternalDocs) ProtoMessage() {} -func (*ExternalDocs) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{10} -} - -func (m *ExternalDocs) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ExternalDocs.Unmarshal(m, b) -} -func (m *ExternalDocs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ExternalDocs.Marshal(b, m, deterministic) -} -func (m *ExternalDocs) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExternalDocs.Merge(m, src) -} -func (m *ExternalDocs) XXX_Size() int { - return xxx_messageInfo_ExternalDocs.Size(m) -} -func (m *ExternalDocs) XXX_DiscardUnknown() { - xxx_messageInfo_ExternalDocs.DiscardUnknown(m) -} - -var xxx_messageInfo_ExternalDocs proto.InternalMessageInfo - -func (m *ExternalDocs) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *ExternalDocs) GetUrl() string { - if m != nil { - return m.Url - } - return "" -} - -func (m *ExternalDocs) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -// A deterministic version of a JSON Schema object. -type FileSchema struct { - Format string `protobuf:"bytes,1,opt,name=format,proto3" json:"format,omitempty"` - Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - Default *Any `protobuf:"bytes,4,opt,name=default,proto3" json:"default,omitempty"` - Required []string `protobuf:"bytes,5,rep,name=required,proto3" json:"required,omitempty"` - Type string `protobuf:"bytes,6,opt,name=type,proto3" json:"type,omitempty"` - ReadOnly bool `protobuf:"varint,7,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` - ExternalDocs *ExternalDocs `protobuf:"bytes,8,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - Example *Any `protobuf:"bytes,9,opt,name=example,proto3" json:"example,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,10,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FileSchema) Reset() { *m = FileSchema{} } -func (m *FileSchema) String() string { return proto.CompactTextString(m) } -func (*FileSchema) ProtoMessage() {} -func (*FileSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{11} -} - -func (m *FileSchema) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FileSchema.Unmarshal(m, b) -} -func (m *FileSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FileSchema.Marshal(b, m, deterministic) -} -func (m *FileSchema) XXX_Merge(src proto.Message) { - xxx_messageInfo_FileSchema.Merge(m, src) -} -func (m *FileSchema) XXX_Size() int { - return xxx_messageInfo_FileSchema.Size(m) -} -func (m *FileSchema) XXX_DiscardUnknown() { - xxx_messageInfo_FileSchema.DiscardUnknown(m) -} - -var xxx_messageInfo_FileSchema proto.InternalMessageInfo - -func (m *FileSchema) GetFormat() string { - if m != nil { - return m.Format - } - return "" -} - -func (m *FileSchema) GetTitle() string { - if m != nil { - return m.Title - } - return "" -} - -func (m *FileSchema) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *FileSchema) GetDefault() *Any { - if m != nil { - return m.Default - } - return nil -} - -func (m *FileSchema) GetRequired() []string { - if m != nil { - return m.Required - } - return nil -} - -func (m *FileSchema) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *FileSchema) GetReadOnly() bool { - if m != nil { - return m.ReadOnly - } - return false -} - -func (m *FileSchema) GetExternalDocs() *ExternalDocs { - if m != nil { - return m.ExternalDocs - } - return nil -} - -func (m *FileSchema) GetExample() *Any { - if m != nil { - return m.Example - } - return nil -} - -func (m *FileSchema) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type FormDataParameterSubSchema struct { - // Determines whether or not this parameter is required or optional. - Required bool `protobuf:"varint,1,opt,name=required,proto3" json:"required,omitempty"` - // Determines the location of the parameter. - In string `protobuf:"bytes,2,opt,name=in,proto3" json:"in,omitempty"` - // A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // The name of the parameter. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // allows sending a parameter by name only or with an empty value. - AllowEmptyValue bool `protobuf:"varint,5,opt,name=allow_empty_value,json=allowEmptyValue,proto3" json:"allow_empty_value,omitempty"` - Type string `protobuf:"bytes,6,opt,name=type,proto3" json:"type,omitempty"` - Format string `protobuf:"bytes,7,opt,name=format,proto3" json:"format,omitempty"` - Items *PrimitivesItems `protobuf:"bytes,8,opt,name=items,proto3" json:"items,omitempty"` - CollectionFormat string `protobuf:"bytes,9,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` - Default *Any `protobuf:"bytes,10,opt,name=default,proto3" json:"default,omitempty"` - Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` - Minimum float64 `protobuf:"fixed64,13,opt,name=minimum,proto3" json:"minimum,omitempty"` - ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` - MaxLength int64 `protobuf:"varint,15,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` - MinLength int64 `protobuf:"varint,16,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - Pattern string `protobuf:"bytes,17,opt,name=pattern,proto3" json:"pattern,omitempty"` - MaxItems int64 `protobuf:"varint,18,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` - MinItems int64 `protobuf:"varint,19,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` - UniqueItems bool `protobuf:"varint,20,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` - Enum []*Any `protobuf:"bytes,21,rep,name=enum,proto3" json:"enum,omitempty"` - MultipleOf float64 `protobuf:"fixed64,22,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,23,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *FormDataParameterSubSchema) Reset() { *m = FormDataParameterSubSchema{} } -func (m *FormDataParameterSubSchema) String() string { return proto.CompactTextString(m) } -func (*FormDataParameterSubSchema) ProtoMessage() {} -func (*FormDataParameterSubSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{12} -} - -func (m *FormDataParameterSubSchema) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FormDataParameterSubSchema.Unmarshal(m, b) -} -func (m *FormDataParameterSubSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FormDataParameterSubSchema.Marshal(b, m, deterministic) -} -func (m *FormDataParameterSubSchema) XXX_Merge(src proto.Message) { - xxx_messageInfo_FormDataParameterSubSchema.Merge(m, src) -} -func (m *FormDataParameterSubSchema) XXX_Size() int { - return xxx_messageInfo_FormDataParameterSubSchema.Size(m) -} -func (m *FormDataParameterSubSchema) XXX_DiscardUnknown() { - xxx_messageInfo_FormDataParameterSubSchema.DiscardUnknown(m) -} - -var xxx_messageInfo_FormDataParameterSubSchema proto.InternalMessageInfo - -func (m *FormDataParameterSubSchema) GetRequired() bool { - if m != nil { - return m.Required - } - return false -} - -func (m *FormDataParameterSubSchema) GetIn() string { - if m != nil { - return m.In - } - return "" -} - -func (m *FormDataParameterSubSchema) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *FormDataParameterSubSchema) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *FormDataParameterSubSchema) GetAllowEmptyValue() bool { - if m != nil { - return m.AllowEmptyValue - } - return false -} - -func (m *FormDataParameterSubSchema) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *FormDataParameterSubSchema) GetFormat() string { - if m != nil { - return m.Format - } - return "" -} - -func (m *FormDataParameterSubSchema) GetItems() *PrimitivesItems { - if m != nil { - return m.Items - } - return nil -} - -func (m *FormDataParameterSubSchema) GetCollectionFormat() string { - if m != nil { - return m.CollectionFormat - } - return "" -} - -func (m *FormDataParameterSubSchema) GetDefault() *Any { - if m != nil { - return m.Default - } - return nil -} - -func (m *FormDataParameterSubSchema) GetMaximum() float64 { - if m != nil { - return m.Maximum - } - return 0 -} - -func (m *FormDataParameterSubSchema) GetExclusiveMaximum() bool { - if m != nil { - return m.ExclusiveMaximum - } - return false -} - -func (m *FormDataParameterSubSchema) GetMinimum() float64 { - if m != nil { - return m.Minimum - } - return 0 -} - -func (m *FormDataParameterSubSchema) GetExclusiveMinimum() bool { - if m != nil { - return m.ExclusiveMinimum - } - return false -} - -func (m *FormDataParameterSubSchema) GetMaxLength() int64 { - if m != nil { - return m.MaxLength - } - return 0 -} - -func (m *FormDataParameterSubSchema) GetMinLength() int64 { - if m != nil { - return m.MinLength - } - return 0 -} - -func (m *FormDataParameterSubSchema) GetPattern() string { - if m != nil { - return m.Pattern - } - return "" -} - -func (m *FormDataParameterSubSchema) GetMaxItems() int64 { - if m != nil { - return m.MaxItems - } - return 0 -} - -func (m *FormDataParameterSubSchema) GetMinItems() int64 { - if m != nil { - return m.MinItems - } - return 0 -} - -func (m *FormDataParameterSubSchema) GetUniqueItems() bool { - if m != nil { - return m.UniqueItems - } - return false -} - -func (m *FormDataParameterSubSchema) GetEnum() []*Any { - if m != nil { - return m.Enum - } - return nil -} - -func (m *FormDataParameterSubSchema) GetMultipleOf() float64 { - if m != nil { - return m.MultipleOf - } - return 0 -} - -func (m *FormDataParameterSubSchema) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type Header struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Format string `protobuf:"bytes,2,opt,name=format,proto3" json:"format,omitempty"` - Items *PrimitivesItems `protobuf:"bytes,3,opt,name=items,proto3" json:"items,omitempty"` - CollectionFormat string `protobuf:"bytes,4,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` - Default *Any `protobuf:"bytes,5,opt,name=default,proto3" json:"default,omitempty"` - Maximum float64 `protobuf:"fixed64,6,opt,name=maximum,proto3" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,7,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` - Minimum float64 `protobuf:"fixed64,8,opt,name=minimum,proto3" json:"minimum,omitempty"` - ExclusiveMinimum bool `protobuf:"varint,9,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` - MaxLength int64 `protobuf:"varint,10,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` - MinLength int64 `protobuf:"varint,11,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - Pattern string `protobuf:"bytes,12,opt,name=pattern,proto3" json:"pattern,omitempty"` - MaxItems int64 `protobuf:"varint,13,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` - MinItems int64 `protobuf:"varint,14,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` - UniqueItems bool `protobuf:"varint,15,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` - Enum []*Any `protobuf:"bytes,16,rep,name=enum,proto3" json:"enum,omitempty"` - MultipleOf float64 `protobuf:"fixed64,17,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` - Description string `protobuf:"bytes,18,opt,name=description,proto3" json:"description,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,19,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Header) Reset() { *m = Header{} } -func (m *Header) String() string { return proto.CompactTextString(m) } -func (*Header) ProtoMessage() {} -func (*Header) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{13} -} - -func (m *Header) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Header.Unmarshal(m, b) -} -func (m *Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Header.Marshal(b, m, deterministic) -} -func (m *Header) XXX_Merge(src proto.Message) { - xxx_messageInfo_Header.Merge(m, src) -} -func (m *Header) XXX_Size() int { - return xxx_messageInfo_Header.Size(m) -} -func (m *Header) XXX_DiscardUnknown() { - xxx_messageInfo_Header.DiscardUnknown(m) -} - -var xxx_messageInfo_Header proto.InternalMessageInfo - -func (m *Header) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *Header) GetFormat() string { - if m != nil { - return m.Format - } - return "" -} - -func (m *Header) GetItems() *PrimitivesItems { - if m != nil { - return m.Items - } - return nil -} - -func (m *Header) GetCollectionFormat() string { - if m != nil { - return m.CollectionFormat - } - return "" -} - -func (m *Header) GetDefault() *Any { - if m != nil { - return m.Default - } - return nil -} - -func (m *Header) GetMaximum() float64 { - if m != nil { - return m.Maximum - } - return 0 -} - -func (m *Header) GetExclusiveMaximum() bool { - if m != nil { - return m.ExclusiveMaximum - } - return false -} - -func (m *Header) GetMinimum() float64 { - if m != nil { - return m.Minimum - } - return 0 -} - -func (m *Header) GetExclusiveMinimum() bool { - if m != nil { - return m.ExclusiveMinimum - } - return false -} - -func (m *Header) GetMaxLength() int64 { - if m != nil { - return m.MaxLength - } - return 0 -} - -func (m *Header) GetMinLength() int64 { - if m != nil { - return m.MinLength - } - return 0 -} - -func (m *Header) GetPattern() string { - if m != nil { - return m.Pattern - } - return "" -} - -func (m *Header) GetMaxItems() int64 { - if m != nil { - return m.MaxItems - } - return 0 -} - -func (m *Header) GetMinItems() int64 { - if m != nil { - return m.MinItems - } - return 0 -} - -func (m *Header) GetUniqueItems() bool { - if m != nil { - return m.UniqueItems - } - return false -} - -func (m *Header) GetEnum() []*Any { - if m != nil { - return m.Enum - } - return nil -} - -func (m *Header) GetMultipleOf() float64 { - if m != nil { - return m.MultipleOf - } - return 0 -} - -func (m *Header) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Header) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type HeaderParameterSubSchema struct { - // Determines whether or not this parameter is required or optional. - Required bool `protobuf:"varint,1,opt,name=required,proto3" json:"required,omitempty"` - // Determines the location of the parameter. - In string `protobuf:"bytes,2,opt,name=in,proto3" json:"in,omitempty"` - // A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // The name of the parameter. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - Type string `protobuf:"bytes,5,opt,name=type,proto3" json:"type,omitempty"` - Format string `protobuf:"bytes,6,opt,name=format,proto3" json:"format,omitempty"` - Items *PrimitivesItems `protobuf:"bytes,7,opt,name=items,proto3" json:"items,omitempty"` - CollectionFormat string `protobuf:"bytes,8,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` - Default *Any `protobuf:"bytes,9,opt,name=default,proto3" json:"default,omitempty"` - Maximum float64 `protobuf:"fixed64,10,opt,name=maximum,proto3" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,11,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` - Minimum float64 `protobuf:"fixed64,12,opt,name=minimum,proto3" json:"minimum,omitempty"` - ExclusiveMinimum bool `protobuf:"varint,13,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` - MaxLength int64 `protobuf:"varint,14,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` - MinLength int64 `protobuf:"varint,15,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - Pattern string `protobuf:"bytes,16,opt,name=pattern,proto3" json:"pattern,omitempty"` - MaxItems int64 `protobuf:"varint,17,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` - MinItems int64 `protobuf:"varint,18,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` - UniqueItems bool `protobuf:"varint,19,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` - Enum []*Any `protobuf:"bytes,20,rep,name=enum,proto3" json:"enum,omitempty"` - MultipleOf float64 `protobuf:"fixed64,21,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,22,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *HeaderParameterSubSchema) Reset() { *m = HeaderParameterSubSchema{} } -func (m *HeaderParameterSubSchema) String() string { return proto.CompactTextString(m) } -func (*HeaderParameterSubSchema) ProtoMessage() {} -func (*HeaderParameterSubSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{14} -} - -func (m *HeaderParameterSubSchema) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_HeaderParameterSubSchema.Unmarshal(m, b) -} -func (m *HeaderParameterSubSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_HeaderParameterSubSchema.Marshal(b, m, deterministic) -} -func (m *HeaderParameterSubSchema) XXX_Merge(src proto.Message) { - xxx_messageInfo_HeaderParameterSubSchema.Merge(m, src) -} -func (m *HeaderParameterSubSchema) XXX_Size() int { - return xxx_messageInfo_HeaderParameterSubSchema.Size(m) -} -func (m *HeaderParameterSubSchema) XXX_DiscardUnknown() { - xxx_messageInfo_HeaderParameterSubSchema.DiscardUnknown(m) -} - -var xxx_messageInfo_HeaderParameterSubSchema proto.InternalMessageInfo - -func (m *HeaderParameterSubSchema) GetRequired() bool { - if m != nil { - return m.Required - } - return false -} - -func (m *HeaderParameterSubSchema) GetIn() string { - if m != nil { - return m.In - } - return "" -} - -func (m *HeaderParameterSubSchema) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *HeaderParameterSubSchema) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *HeaderParameterSubSchema) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *HeaderParameterSubSchema) GetFormat() string { - if m != nil { - return m.Format - } - return "" -} - -func (m *HeaderParameterSubSchema) GetItems() *PrimitivesItems { - if m != nil { - return m.Items - } - return nil -} - -func (m *HeaderParameterSubSchema) GetCollectionFormat() string { - if m != nil { - return m.CollectionFormat - } - return "" -} - -func (m *HeaderParameterSubSchema) GetDefault() *Any { - if m != nil { - return m.Default - } - return nil -} - -func (m *HeaderParameterSubSchema) GetMaximum() float64 { - if m != nil { - return m.Maximum - } - return 0 -} - -func (m *HeaderParameterSubSchema) GetExclusiveMaximum() bool { - if m != nil { - return m.ExclusiveMaximum - } - return false -} - -func (m *HeaderParameterSubSchema) GetMinimum() float64 { - if m != nil { - return m.Minimum - } - return 0 -} - -func (m *HeaderParameterSubSchema) GetExclusiveMinimum() bool { - if m != nil { - return m.ExclusiveMinimum - } - return false -} - -func (m *HeaderParameterSubSchema) GetMaxLength() int64 { - if m != nil { - return m.MaxLength - } - return 0 -} - -func (m *HeaderParameterSubSchema) GetMinLength() int64 { - if m != nil { - return m.MinLength - } - return 0 -} - -func (m *HeaderParameterSubSchema) GetPattern() string { - if m != nil { - return m.Pattern - } - return "" -} - -func (m *HeaderParameterSubSchema) GetMaxItems() int64 { - if m != nil { - return m.MaxItems - } - return 0 -} - -func (m *HeaderParameterSubSchema) GetMinItems() int64 { - if m != nil { - return m.MinItems - } - return 0 -} - -func (m *HeaderParameterSubSchema) GetUniqueItems() bool { - if m != nil { - return m.UniqueItems - } - return false -} - -func (m *HeaderParameterSubSchema) GetEnum() []*Any { - if m != nil { - return m.Enum - } - return nil -} - -func (m *HeaderParameterSubSchema) GetMultipleOf() float64 { - if m != nil { - return m.MultipleOf - } - return 0 -} - -func (m *HeaderParameterSubSchema) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type Headers struct { - AdditionalProperties []*NamedHeader `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Headers) Reset() { *m = Headers{} } -func (m *Headers) String() string { return proto.CompactTextString(m) } -func (*Headers) ProtoMessage() {} -func (*Headers) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{15} -} - -func (m *Headers) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Headers.Unmarshal(m, b) -} -func (m *Headers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Headers.Marshal(b, m, deterministic) -} -func (m *Headers) XXX_Merge(src proto.Message) { - xxx_messageInfo_Headers.Merge(m, src) -} -func (m *Headers) XXX_Size() int { - return xxx_messageInfo_Headers.Size(m) -} -func (m *Headers) XXX_DiscardUnknown() { - xxx_messageInfo_Headers.DiscardUnknown(m) -} - -var xxx_messageInfo_Headers proto.InternalMessageInfo - -func (m *Headers) GetAdditionalProperties() []*NamedHeader { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -// General information about the API. -type Info struct { - // A unique and precise title of the API. - Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` - // A semantic version number of the API. - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` - // A longer description of the API. Should be different from the title. GitHub Flavored Markdown is allowed. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // The terms of service for the API. - TermsOfService string `protobuf:"bytes,4,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` - Contact *Contact `protobuf:"bytes,5,opt,name=contact,proto3" json:"contact,omitempty"` - License *License `protobuf:"bytes,6,opt,name=license,proto3" json:"license,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,7,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Info) Reset() { *m = Info{} } -func (m *Info) String() string { return proto.CompactTextString(m) } -func (*Info) ProtoMessage() {} -func (*Info) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{16} -} - -func (m *Info) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Info.Unmarshal(m, b) -} -func (m *Info) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Info.Marshal(b, m, deterministic) -} -func (m *Info) XXX_Merge(src proto.Message) { - xxx_messageInfo_Info.Merge(m, src) -} -func (m *Info) XXX_Size() int { - return xxx_messageInfo_Info.Size(m) -} -func (m *Info) XXX_DiscardUnknown() { - xxx_messageInfo_Info.DiscardUnknown(m) -} - -var xxx_messageInfo_Info proto.InternalMessageInfo - -func (m *Info) GetTitle() string { - if m != nil { - return m.Title - } - return "" -} - -func (m *Info) GetVersion() string { - if m != nil { - return m.Version - } - return "" -} - -func (m *Info) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Info) GetTermsOfService() string { - if m != nil { - return m.TermsOfService - } - return "" -} - -func (m *Info) GetContact() *Contact { - if m != nil { - return m.Contact - } - return nil -} - -func (m *Info) GetLicense() *License { - if m != nil { - return m.License - } - return nil -} - -func (m *Info) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type ItemsItem struct { - Schema []*Schema `protobuf:"bytes,1,rep,name=schema,proto3" json:"schema,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ItemsItem) Reset() { *m = ItemsItem{} } -func (m *ItemsItem) String() string { return proto.CompactTextString(m) } -func (*ItemsItem) ProtoMessage() {} -func (*ItemsItem) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{17} -} - -func (m *ItemsItem) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ItemsItem.Unmarshal(m, b) -} -func (m *ItemsItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ItemsItem.Marshal(b, m, deterministic) -} -func (m *ItemsItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_ItemsItem.Merge(m, src) -} -func (m *ItemsItem) XXX_Size() int { - return xxx_messageInfo_ItemsItem.Size(m) -} -func (m *ItemsItem) XXX_DiscardUnknown() { - xxx_messageInfo_ItemsItem.DiscardUnknown(m) -} - -var xxx_messageInfo_ItemsItem proto.InternalMessageInfo - -func (m *ItemsItem) GetSchema() []*Schema { - if m != nil { - return m.Schema - } - return nil -} - -type JsonReference struct { - XRef string `protobuf:"bytes,1,opt,name=_ref,json=Ref,proto3" json:"_ref,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *JsonReference) Reset() { *m = JsonReference{} } -func (m *JsonReference) String() string { return proto.CompactTextString(m) } -func (*JsonReference) ProtoMessage() {} -func (*JsonReference) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{18} -} - -func (m *JsonReference) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_JsonReference.Unmarshal(m, b) -} -func (m *JsonReference) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_JsonReference.Marshal(b, m, deterministic) -} -func (m *JsonReference) XXX_Merge(src proto.Message) { - xxx_messageInfo_JsonReference.Merge(m, src) -} -func (m *JsonReference) XXX_Size() int { - return xxx_messageInfo_JsonReference.Size(m) -} -func (m *JsonReference) XXX_DiscardUnknown() { - xxx_messageInfo_JsonReference.DiscardUnknown(m) -} - -var xxx_messageInfo_JsonReference proto.InternalMessageInfo - -func (m *JsonReference) GetXRef() string { - if m != nil { - return m.XRef - } - return "" -} - -func (m *JsonReference) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -type License struct { - // The name of the license type. It's encouraged to use an OSI compatible license. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The URL pointing to the license. - Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,3,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *License) Reset() { *m = License{} } -func (m *License) String() string { return proto.CompactTextString(m) } -func (*License) ProtoMessage() {} -func (*License) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{19} -} - -func (m *License) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_License.Unmarshal(m, b) -} -func (m *License) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_License.Marshal(b, m, deterministic) -} -func (m *License) XXX_Merge(src proto.Message) { - xxx_messageInfo_License.Merge(m, src) -} -func (m *License) XXX_Size() int { - return xxx_messageInfo_License.Size(m) -} -func (m *License) XXX_DiscardUnknown() { - xxx_messageInfo_License.DiscardUnknown(m) -} - -var xxx_messageInfo_License proto.InternalMessageInfo - -func (m *License) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *License) GetUrl() string { - if m != nil { - return m.Url - } - return "" -} - -func (m *License) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -// Automatically-generated message used to represent maps of Any as ordered (name,value) pairs. -type NamedAny struct { - // Map key - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Mapped value - Value *Any `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NamedAny) Reset() { *m = NamedAny{} } -func (m *NamedAny) String() string { return proto.CompactTextString(m) } -func (*NamedAny) ProtoMessage() {} -func (*NamedAny) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{20} -} - -func (m *NamedAny) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NamedAny.Unmarshal(m, b) -} -func (m *NamedAny) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NamedAny.Marshal(b, m, deterministic) -} -func (m *NamedAny) XXX_Merge(src proto.Message) { - xxx_messageInfo_NamedAny.Merge(m, src) -} -func (m *NamedAny) XXX_Size() int { - return xxx_messageInfo_NamedAny.Size(m) -} -func (m *NamedAny) XXX_DiscardUnknown() { - xxx_messageInfo_NamedAny.DiscardUnknown(m) -} - -var xxx_messageInfo_NamedAny proto.InternalMessageInfo - -func (m *NamedAny) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NamedAny) GetValue() *Any { - if m != nil { - return m.Value - } - return nil -} - -// Automatically-generated message used to represent maps of Header as ordered (name,value) pairs. -type NamedHeader struct { - // Map key - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Mapped value - Value *Header `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NamedHeader) Reset() { *m = NamedHeader{} } -func (m *NamedHeader) String() string { return proto.CompactTextString(m) } -func (*NamedHeader) ProtoMessage() {} -func (*NamedHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{21} -} - -func (m *NamedHeader) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NamedHeader.Unmarshal(m, b) -} -func (m *NamedHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NamedHeader.Marshal(b, m, deterministic) -} -func (m *NamedHeader) XXX_Merge(src proto.Message) { - xxx_messageInfo_NamedHeader.Merge(m, src) -} -func (m *NamedHeader) XXX_Size() int { - return xxx_messageInfo_NamedHeader.Size(m) -} -func (m *NamedHeader) XXX_DiscardUnknown() { - xxx_messageInfo_NamedHeader.DiscardUnknown(m) -} - -var xxx_messageInfo_NamedHeader proto.InternalMessageInfo - -func (m *NamedHeader) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NamedHeader) GetValue() *Header { - if m != nil { - return m.Value - } - return nil -} - -// Automatically-generated message used to represent maps of Parameter as ordered (name,value) pairs. -type NamedParameter struct { - // Map key - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Mapped value - Value *Parameter `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NamedParameter) Reset() { *m = NamedParameter{} } -func (m *NamedParameter) String() string { return proto.CompactTextString(m) } -func (*NamedParameter) ProtoMessage() {} -func (*NamedParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{22} -} - -func (m *NamedParameter) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NamedParameter.Unmarshal(m, b) -} -func (m *NamedParameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NamedParameter.Marshal(b, m, deterministic) -} -func (m *NamedParameter) XXX_Merge(src proto.Message) { - xxx_messageInfo_NamedParameter.Merge(m, src) -} -func (m *NamedParameter) XXX_Size() int { - return xxx_messageInfo_NamedParameter.Size(m) -} -func (m *NamedParameter) XXX_DiscardUnknown() { - xxx_messageInfo_NamedParameter.DiscardUnknown(m) -} - -var xxx_messageInfo_NamedParameter proto.InternalMessageInfo - -func (m *NamedParameter) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NamedParameter) GetValue() *Parameter { - if m != nil { - return m.Value - } - return nil -} - -// Automatically-generated message used to represent maps of PathItem as ordered (name,value) pairs. -type NamedPathItem struct { - // Map key - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Mapped value - Value *PathItem `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NamedPathItem) Reset() { *m = NamedPathItem{} } -func (m *NamedPathItem) String() string { return proto.CompactTextString(m) } -func (*NamedPathItem) ProtoMessage() {} -func (*NamedPathItem) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{23} -} - -func (m *NamedPathItem) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NamedPathItem.Unmarshal(m, b) -} -func (m *NamedPathItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NamedPathItem.Marshal(b, m, deterministic) -} -func (m *NamedPathItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_NamedPathItem.Merge(m, src) -} -func (m *NamedPathItem) XXX_Size() int { - return xxx_messageInfo_NamedPathItem.Size(m) -} -func (m *NamedPathItem) XXX_DiscardUnknown() { - xxx_messageInfo_NamedPathItem.DiscardUnknown(m) -} - -var xxx_messageInfo_NamedPathItem proto.InternalMessageInfo - -func (m *NamedPathItem) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NamedPathItem) GetValue() *PathItem { - if m != nil { - return m.Value - } - return nil -} - -// Automatically-generated message used to represent maps of Response as ordered (name,value) pairs. -type NamedResponse struct { - // Map key - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Mapped value - Value *Response `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NamedResponse) Reset() { *m = NamedResponse{} } -func (m *NamedResponse) String() string { return proto.CompactTextString(m) } -func (*NamedResponse) ProtoMessage() {} -func (*NamedResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{24} -} - -func (m *NamedResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NamedResponse.Unmarshal(m, b) -} -func (m *NamedResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NamedResponse.Marshal(b, m, deterministic) -} -func (m *NamedResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_NamedResponse.Merge(m, src) -} -func (m *NamedResponse) XXX_Size() int { - return xxx_messageInfo_NamedResponse.Size(m) -} -func (m *NamedResponse) XXX_DiscardUnknown() { - xxx_messageInfo_NamedResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_NamedResponse proto.InternalMessageInfo - -func (m *NamedResponse) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NamedResponse) GetValue() *Response { - if m != nil { - return m.Value - } - return nil -} - -// Automatically-generated message used to represent maps of ResponseValue as ordered (name,value) pairs. -type NamedResponseValue struct { - // Map key - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Mapped value - Value *ResponseValue `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NamedResponseValue) Reset() { *m = NamedResponseValue{} } -func (m *NamedResponseValue) String() string { return proto.CompactTextString(m) } -func (*NamedResponseValue) ProtoMessage() {} -func (*NamedResponseValue) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{25} -} - -func (m *NamedResponseValue) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NamedResponseValue.Unmarshal(m, b) -} -func (m *NamedResponseValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NamedResponseValue.Marshal(b, m, deterministic) -} -func (m *NamedResponseValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_NamedResponseValue.Merge(m, src) -} -func (m *NamedResponseValue) XXX_Size() int { - return xxx_messageInfo_NamedResponseValue.Size(m) -} -func (m *NamedResponseValue) XXX_DiscardUnknown() { - xxx_messageInfo_NamedResponseValue.DiscardUnknown(m) -} - -var xxx_messageInfo_NamedResponseValue proto.InternalMessageInfo - -func (m *NamedResponseValue) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NamedResponseValue) GetValue() *ResponseValue { - if m != nil { - return m.Value - } - return nil -} - -// Automatically-generated message used to represent maps of Schema as ordered (name,value) pairs. -type NamedSchema struct { - // Map key - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Mapped value - Value *Schema `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NamedSchema) Reset() { *m = NamedSchema{} } -func (m *NamedSchema) String() string { return proto.CompactTextString(m) } -func (*NamedSchema) ProtoMessage() {} -func (*NamedSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{26} -} - -func (m *NamedSchema) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NamedSchema.Unmarshal(m, b) -} -func (m *NamedSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NamedSchema.Marshal(b, m, deterministic) -} -func (m *NamedSchema) XXX_Merge(src proto.Message) { - xxx_messageInfo_NamedSchema.Merge(m, src) -} -func (m *NamedSchema) XXX_Size() int { - return xxx_messageInfo_NamedSchema.Size(m) -} -func (m *NamedSchema) XXX_DiscardUnknown() { - xxx_messageInfo_NamedSchema.DiscardUnknown(m) -} - -var xxx_messageInfo_NamedSchema proto.InternalMessageInfo - -func (m *NamedSchema) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NamedSchema) GetValue() *Schema { - if m != nil { - return m.Value - } - return nil -} - -// Automatically-generated message used to represent maps of SecurityDefinitionsItem as ordered (name,value) pairs. -type NamedSecurityDefinitionsItem struct { - // Map key - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Mapped value - Value *SecurityDefinitionsItem `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NamedSecurityDefinitionsItem) Reset() { *m = NamedSecurityDefinitionsItem{} } -func (m *NamedSecurityDefinitionsItem) String() string { return proto.CompactTextString(m) } -func (*NamedSecurityDefinitionsItem) ProtoMessage() {} -func (*NamedSecurityDefinitionsItem) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{27} -} - -func (m *NamedSecurityDefinitionsItem) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NamedSecurityDefinitionsItem.Unmarshal(m, b) -} -func (m *NamedSecurityDefinitionsItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NamedSecurityDefinitionsItem.Marshal(b, m, deterministic) -} -func (m *NamedSecurityDefinitionsItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_NamedSecurityDefinitionsItem.Merge(m, src) -} -func (m *NamedSecurityDefinitionsItem) XXX_Size() int { - return xxx_messageInfo_NamedSecurityDefinitionsItem.Size(m) -} -func (m *NamedSecurityDefinitionsItem) XXX_DiscardUnknown() { - xxx_messageInfo_NamedSecurityDefinitionsItem.DiscardUnknown(m) -} - -var xxx_messageInfo_NamedSecurityDefinitionsItem proto.InternalMessageInfo - -func (m *NamedSecurityDefinitionsItem) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NamedSecurityDefinitionsItem) GetValue() *SecurityDefinitionsItem { - if m != nil { - return m.Value - } - return nil -} - -// Automatically-generated message used to represent maps of string as ordered (name,value) pairs. -type NamedString struct { - // Map key - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Mapped value - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NamedString) Reset() { *m = NamedString{} } -func (m *NamedString) String() string { return proto.CompactTextString(m) } -func (*NamedString) ProtoMessage() {} -func (*NamedString) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{28} -} - -func (m *NamedString) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NamedString.Unmarshal(m, b) -} -func (m *NamedString) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NamedString.Marshal(b, m, deterministic) -} -func (m *NamedString) XXX_Merge(src proto.Message) { - xxx_messageInfo_NamedString.Merge(m, src) -} -func (m *NamedString) XXX_Size() int { - return xxx_messageInfo_NamedString.Size(m) -} -func (m *NamedString) XXX_DiscardUnknown() { - xxx_messageInfo_NamedString.DiscardUnknown(m) -} - -var xxx_messageInfo_NamedString proto.InternalMessageInfo - -func (m *NamedString) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NamedString) GetValue() string { - if m != nil { - return m.Value - } - return "" -} - -// Automatically-generated message used to represent maps of StringArray as ordered (name,value) pairs. -type NamedStringArray struct { - // Map key - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Mapped value - Value *StringArray `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NamedStringArray) Reset() { *m = NamedStringArray{} } -func (m *NamedStringArray) String() string { return proto.CompactTextString(m) } -func (*NamedStringArray) ProtoMessage() {} -func (*NamedStringArray) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{29} -} - -func (m *NamedStringArray) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NamedStringArray.Unmarshal(m, b) -} -func (m *NamedStringArray) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NamedStringArray.Marshal(b, m, deterministic) -} -func (m *NamedStringArray) XXX_Merge(src proto.Message) { - xxx_messageInfo_NamedStringArray.Merge(m, src) -} -func (m *NamedStringArray) XXX_Size() int { - return xxx_messageInfo_NamedStringArray.Size(m) -} -func (m *NamedStringArray) XXX_DiscardUnknown() { - xxx_messageInfo_NamedStringArray.DiscardUnknown(m) -} - -var xxx_messageInfo_NamedStringArray proto.InternalMessageInfo - -func (m *NamedStringArray) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *NamedStringArray) GetValue() *StringArray { - if m != nil { - return m.Value - } - return nil -} - -type NonBodyParameter struct { - // Types that are valid to be assigned to Oneof: - // *NonBodyParameter_HeaderParameterSubSchema - // *NonBodyParameter_FormDataParameterSubSchema - // *NonBodyParameter_QueryParameterSubSchema - // *NonBodyParameter_PathParameterSubSchema - Oneof isNonBodyParameter_Oneof `protobuf_oneof:"oneof"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *NonBodyParameter) Reset() { *m = NonBodyParameter{} } -func (m *NonBodyParameter) String() string { return proto.CompactTextString(m) } -func (*NonBodyParameter) ProtoMessage() {} -func (*NonBodyParameter) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{30} -} - -func (m *NonBodyParameter) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_NonBodyParameter.Unmarshal(m, b) -} -func (m *NonBodyParameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_NonBodyParameter.Marshal(b, m, deterministic) -} -func (m *NonBodyParameter) XXX_Merge(src proto.Message) { - xxx_messageInfo_NonBodyParameter.Merge(m, src) -} -func (m *NonBodyParameter) XXX_Size() int { - return xxx_messageInfo_NonBodyParameter.Size(m) -} -func (m *NonBodyParameter) XXX_DiscardUnknown() { - xxx_messageInfo_NonBodyParameter.DiscardUnknown(m) -} - -var xxx_messageInfo_NonBodyParameter proto.InternalMessageInfo - -type isNonBodyParameter_Oneof interface { - isNonBodyParameter_Oneof() -} - -type NonBodyParameter_HeaderParameterSubSchema struct { - HeaderParameterSubSchema *HeaderParameterSubSchema `protobuf:"bytes,1,opt,name=header_parameter_sub_schema,json=headerParameterSubSchema,proto3,oneof"` -} - -type NonBodyParameter_FormDataParameterSubSchema struct { - FormDataParameterSubSchema *FormDataParameterSubSchema `protobuf:"bytes,2,opt,name=form_data_parameter_sub_schema,json=formDataParameterSubSchema,proto3,oneof"` -} - -type NonBodyParameter_QueryParameterSubSchema struct { - QueryParameterSubSchema *QueryParameterSubSchema `protobuf:"bytes,3,opt,name=query_parameter_sub_schema,json=queryParameterSubSchema,proto3,oneof"` -} - -type NonBodyParameter_PathParameterSubSchema struct { - PathParameterSubSchema *PathParameterSubSchema `protobuf:"bytes,4,opt,name=path_parameter_sub_schema,json=pathParameterSubSchema,proto3,oneof"` -} - -func (*NonBodyParameter_HeaderParameterSubSchema) isNonBodyParameter_Oneof() {} - -func (*NonBodyParameter_FormDataParameterSubSchema) isNonBodyParameter_Oneof() {} - -func (*NonBodyParameter_QueryParameterSubSchema) isNonBodyParameter_Oneof() {} - -func (*NonBodyParameter_PathParameterSubSchema) isNonBodyParameter_Oneof() {} - -func (m *NonBodyParameter) GetOneof() isNonBodyParameter_Oneof { - if m != nil { - return m.Oneof - } - return nil -} - -func (m *NonBodyParameter) GetHeaderParameterSubSchema() *HeaderParameterSubSchema { - if x, ok := m.GetOneof().(*NonBodyParameter_HeaderParameterSubSchema); ok { - return x.HeaderParameterSubSchema - } - return nil -} - -func (m *NonBodyParameter) GetFormDataParameterSubSchema() *FormDataParameterSubSchema { - if x, ok := m.GetOneof().(*NonBodyParameter_FormDataParameterSubSchema); ok { - return x.FormDataParameterSubSchema - } - return nil -} - -func (m *NonBodyParameter) GetQueryParameterSubSchema() *QueryParameterSubSchema { - if x, ok := m.GetOneof().(*NonBodyParameter_QueryParameterSubSchema); ok { - return x.QueryParameterSubSchema - } - return nil -} - -func (m *NonBodyParameter) GetPathParameterSubSchema() *PathParameterSubSchema { - if x, ok := m.GetOneof().(*NonBodyParameter_PathParameterSubSchema); ok { - return x.PathParameterSubSchema - } - return nil -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*NonBodyParameter) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*NonBodyParameter_HeaderParameterSubSchema)(nil), - (*NonBodyParameter_FormDataParameterSubSchema)(nil), - (*NonBodyParameter_QueryParameterSubSchema)(nil), - (*NonBodyParameter_PathParameterSubSchema)(nil), - } -} - -type Oauth2AccessCodeSecurity struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Flow string `protobuf:"bytes,2,opt,name=flow,proto3" json:"flow,omitempty"` - Scopes *Oauth2Scopes `protobuf:"bytes,3,opt,name=scopes,proto3" json:"scopes,omitempty"` - AuthorizationUrl string `protobuf:"bytes,4,opt,name=authorization_url,json=authorizationUrl,proto3" json:"authorization_url,omitempty"` - TokenUrl string `protobuf:"bytes,5,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` - Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,7,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Oauth2AccessCodeSecurity) Reset() { *m = Oauth2AccessCodeSecurity{} } -func (m *Oauth2AccessCodeSecurity) String() string { return proto.CompactTextString(m) } -func (*Oauth2AccessCodeSecurity) ProtoMessage() {} -func (*Oauth2AccessCodeSecurity) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{31} -} - -func (m *Oauth2AccessCodeSecurity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Oauth2AccessCodeSecurity.Unmarshal(m, b) -} -func (m *Oauth2AccessCodeSecurity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Oauth2AccessCodeSecurity.Marshal(b, m, deterministic) -} -func (m *Oauth2AccessCodeSecurity) XXX_Merge(src proto.Message) { - xxx_messageInfo_Oauth2AccessCodeSecurity.Merge(m, src) -} -func (m *Oauth2AccessCodeSecurity) XXX_Size() int { - return xxx_messageInfo_Oauth2AccessCodeSecurity.Size(m) -} -func (m *Oauth2AccessCodeSecurity) XXX_DiscardUnknown() { - xxx_messageInfo_Oauth2AccessCodeSecurity.DiscardUnknown(m) -} - -var xxx_messageInfo_Oauth2AccessCodeSecurity proto.InternalMessageInfo - -func (m *Oauth2AccessCodeSecurity) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *Oauth2AccessCodeSecurity) GetFlow() string { - if m != nil { - return m.Flow - } - return "" -} - -func (m *Oauth2AccessCodeSecurity) GetScopes() *Oauth2Scopes { - if m != nil { - return m.Scopes - } - return nil -} - -func (m *Oauth2AccessCodeSecurity) GetAuthorizationUrl() string { - if m != nil { - return m.AuthorizationUrl - } - return "" -} - -func (m *Oauth2AccessCodeSecurity) GetTokenUrl() string { - if m != nil { - return m.TokenUrl - } - return "" -} - -func (m *Oauth2AccessCodeSecurity) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Oauth2AccessCodeSecurity) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type Oauth2ApplicationSecurity struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Flow string `protobuf:"bytes,2,opt,name=flow,proto3" json:"flow,omitempty"` - Scopes *Oauth2Scopes `protobuf:"bytes,3,opt,name=scopes,proto3" json:"scopes,omitempty"` - TokenUrl string `protobuf:"bytes,4,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,6,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Oauth2ApplicationSecurity) Reset() { *m = Oauth2ApplicationSecurity{} } -func (m *Oauth2ApplicationSecurity) String() string { return proto.CompactTextString(m) } -func (*Oauth2ApplicationSecurity) ProtoMessage() {} -func (*Oauth2ApplicationSecurity) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{32} -} - -func (m *Oauth2ApplicationSecurity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Oauth2ApplicationSecurity.Unmarshal(m, b) -} -func (m *Oauth2ApplicationSecurity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Oauth2ApplicationSecurity.Marshal(b, m, deterministic) -} -func (m *Oauth2ApplicationSecurity) XXX_Merge(src proto.Message) { - xxx_messageInfo_Oauth2ApplicationSecurity.Merge(m, src) -} -func (m *Oauth2ApplicationSecurity) XXX_Size() int { - return xxx_messageInfo_Oauth2ApplicationSecurity.Size(m) -} -func (m *Oauth2ApplicationSecurity) XXX_DiscardUnknown() { - xxx_messageInfo_Oauth2ApplicationSecurity.DiscardUnknown(m) -} - -var xxx_messageInfo_Oauth2ApplicationSecurity proto.InternalMessageInfo - -func (m *Oauth2ApplicationSecurity) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *Oauth2ApplicationSecurity) GetFlow() string { - if m != nil { - return m.Flow - } - return "" -} - -func (m *Oauth2ApplicationSecurity) GetScopes() *Oauth2Scopes { - if m != nil { - return m.Scopes - } - return nil -} - -func (m *Oauth2ApplicationSecurity) GetTokenUrl() string { - if m != nil { - return m.TokenUrl - } - return "" -} - -func (m *Oauth2ApplicationSecurity) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Oauth2ApplicationSecurity) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type Oauth2ImplicitSecurity struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Flow string `protobuf:"bytes,2,opt,name=flow,proto3" json:"flow,omitempty"` - Scopes *Oauth2Scopes `protobuf:"bytes,3,opt,name=scopes,proto3" json:"scopes,omitempty"` - AuthorizationUrl string `protobuf:"bytes,4,opt,name=authorization_url,json=authorizationUrl,proto3" json:"authorization_url,omitempty"` - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,6,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Oauth2ImplicitSecurity) Reset() { *m = Oauth2ImplicitSecurity{} } -func (m *Oauth2ImplicitSecurity) String() string { return proto.CompactTextString(m) } -func (*Oauth2ImplicitSecurity) ProtoMessage() {} -func (*Oauth2ImplicitSecurity) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{33} -} - -func (m *Oauth2ImplicitSecurity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Oauth2ImplicitSecurity.Unmarshal(m, b) -} -func (m *Oauth2ImplicitSecurity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Oauth2ImplicitSecurity.Marshal(b, m, deterministic) -} -func (m *Oauth2ImplicitSecurity) XXX_Merge(src proto.Message) { - xxx_messageInfo_Oauth2ImplicitSecurity.Merge(m, src) -} -func (m *Oauth2ImplicitSecurity) XXX_Size() int { - return xxx_messageInfo_Oauth2ImplicitSecurity.Size(m) -} -func (m *Oauth2ImplicitSecurity) XXX_DiscardUnknown() { - xxx_messageInfo_Oauth2ImplicitSecurity.DiscardUnknown(m) -} - -var xxx_messageInfo_Oauth2ImplicitSecurity proto.InternalMessageInfo - -func (m *Oauth2ImplicitSecurity) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *Oauth2ImplicitSecurity) GetFlow() string { - if m != nil { - return m.Flow - } - return "" -} - -func (m *Oauth2ImplicitSecurity) GetScopes() *Oauth2Scopes { - if m != nil { - return m.Scopes - } - return nil -} - -func (m *Oauth2ImplicitSecurity) GetAuthorizationUrl() string { - if m != nil { - return m.AuthorizationUrl - } - return "" -} - -func (m *Oauth2ImplicitSecurity) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Oauth2ImplicitSecurity) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type Oauth2PasswordSecurity struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Flow string `protobuf:"bytes,2,opt,name=flow,proto3" json:"flow,omitempty"` - Scopes *Oauth2Scopes `protobuf:"bytes,3,opt,name=scopes,proto3" json:"scopes,omitempty"` - TokenUrl string `protobuf:"bytes,4,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,6,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Oauth2PasswordSecurity) Reset() { *m = Oauth2PasswordSecurity{} } -func (m *Oauth2PasswordSecurity) String() string { return proto.CompactTextString(m) } -func (*Oauth2PasswordSecurity) ProtoMessage() {} -func (*Oauth2PasswordSecurity) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{34} -} - -func (m *Oauth2PasswordSecurity) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Oauth2PasswordSecurity.Unmarshal(m, b) -} -func (m *Oauth2PasswordSecurity) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Oauth2PasswordSecurity.Marshal(b, m, deterministic) -} -func (m *Oauth2PasswordSecurity) XXX_Merge(src proto.Message) { - xxx_messageInfo_Oauth2PasswordSecurity.Merge(m, src) -} -func (m *Oauth2PasswordSecurity) XXX_Size() int { - return xxx_messageInfo_Oauth2PasswordSecurity.Size(m) -} -func (m *Oauth2PasswordSecurity) XXX_DiscardUnknown() { - xxx_messageInfo_Oauth2PasswordSecurity.DiscardUnknown(m) -} - -var xxx_messageInfo_Oauth2PasswordSecurity proto.InternalMessageInfo - -func (m *Oauth2PasswordSecurity) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *Oauth2PasswordSecurity) GetFlow() string { - if m != nil { - return m.Flow - } - return "" -} - -func (m *Oauth2PasswordSecurity) GetScopes() *Oauth2Scopes { - if m != nil { - return m.Scopes - } - return nil -} - -func (m *Oauth2PasswordSecurity) GetTokenUrl() string { - if m != nil { - return m.TokenUrl - } - return "" -} - -func (m *Oauth2PasswordSecurity) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Oauth2PasswordSecurity) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type Oauth2Scopes struct { - AdditionalProperties []*NamedString `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Oauth2Scopes) Reset() { *m = Oauth2Scopes{} } -func (m *Oauth2Scopes) String() string { return proto.CompactTextString(m) } -func (*Oauth2Scopes) ProtoMessage() {} -func (*Oauth2Scopes) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{35} -} - -func (m *Oauth2Scopes) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Oauth2Scopes.Unmarshal(m, b) -} -func (m *Oauth2Scopes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Oauth2Scopes.Marshal(b, m, deterministic) -} -func (m *Oauth2Scopes) XXX_Merge(src proto.Message) { - xxx_messageInfo_Oauth2Scopes.Merge(m, src) -} -func (m *Oauth2Scopes) XXX_Size() int { - return xxx_messageInfo_Oauth2Scopes.Size(m) -} -func (m *Oauth2Scopes) XXX_DiscardUnknown() { - xxx_messageInfo_Oauth2Scopes.DiscardUnknown(m) -} - -var xxx_messageInfo_Oauth2Scopes proto.InternalMessageInfo - -func (m *Oauth2Scopes) GetAdditionalProperties() []*NamedString { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -type Operation struct { - Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` - // A brief summary of the operation. - Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` - // A longer description of the operation, GitHub Flavored Markdown is allowed. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - ExternalDocs *ExternalDocs `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - // A unique identifier of the operation. - OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` - // A list of MIME types the API can produce. - Produces []string `protobuf:"bytes,6,rep,name=produces,proto3" json:"produces,omitempty"` - // A list of MIME types the API can consume. - Consumes []string `protobuf:"bytes,7,rep,name=consumes,proto3" json:"consumes,omitempty"` - // The parameters needed to send a valid API call. - Parameters []*ParametersItem `protobuf:"bytes,8,rep,name=parameters,proto3" json:"parameters,omitempty"` - Responses *Responses `protobuf:"bytes,9,opt,name=responses,proto3" json:"responses,omitempty"` - // The transfer protocol of the API. - Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` - Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` - Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,13,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Operation) Reset() { *m = Operation{} } -func (m *Operation) String() string { return proto.CompactTextString(m) } -func (*Operation) ProtoMessage() {} -func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{36} -} - -func (m *Operation) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Operation.Unmarshal(m, b) -} -func (m *Operation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Operation.Marshal(b, m, deterministic) -} -func (m *Operation) XXX_Merge(src proto.Message) { - xxx_messageInfo_Operation.Merge(m, src) -} -func (m *Operation) XXX_Size() int { - return xxx_messageInfo_Operation.Size(m) -} -func (m *Operation) XXX_DiscardUnknown() { - xxx_messageInfo_Operation.DiscardUnknown(m) -} - -var xxx_messageInfo_Operation proto.InternalMessageInfo - -func (m *Operation) GetTags() []string { - if m != nil { - return m.Tags - } - return nil -} - -func (m *Operation) GetSummary() string { - if m != nil { - return m.Summary - } - return "" -} - -func (m *Operation) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Operation) GetExternalDocs() *ExternalDocs { - if m != nil { - return m.ExternalDocs - } - return nil -} - -func (m *Operation) GetOperationId() string { - if m != nil { - return m.OperationId - } - return "" -} - -func (m *Operation) GetProduces() []string { - if m != nil { - return m.Produces - } - return nil -} - -func (m *Operation) GetConsumes() []string { - if m != nil { - return m.Consumes - } - return nil -} - -func (m *Operation) GetParameters() []*ParametersItem { - if m != nil { - return m.Parameters - } - return nil -} - -func (m *Operation) GetResponses() *Responses { - if m != nil { - return m.Responses - } - return nil -} - -func (m *Operation) GetSchemes() []string { - if m != nil { - return m.Schemes - } - return nil -} - -func (m *Operation) GetDeprecated() bool { - if m != nil { - return m.Deprecated - } - return false -} - -func (m *Operation) GetSecurity() []*SecurityRequirement { - if m != nil { - return m.Security - } - return nil -} - -func (m *Operation) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type Parameter struct { - // Types that are valid to be assigned to Oneof: - // *Parameter_BodyParameter - // *Parameter_NonBodyParameter - Oneof isParameter_Oneof `protobuf_oneof:"oneof"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Parameter) Reset() { *m = Parameter{} } -func (m *Parameter) String() string { return proto.CompactTextString(m) } -func (*Parameter) ProtoMessage() {} -func (*Parameter) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{37} -} - -func (m *Parameter) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Parameter.Unmarshal(m, b) -} -func (m *Parameter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Parameter.Marshal(b, m, deterministic) -} -func (m *Parameter) XXX_Merge(src proto.Message) { - xxx_messageInfo_Parameter.Merge(m, src) -} -func (m *Parameter) XXX_Size() int { - return xxx_messageInfo_Parameter.Size(m) -} -func (m *Parameter) XXX_DiscardUnknown() { - xxx_messageInfo_Parameter.DiscardUnknown(m) -} - -var xxx_messageInfo_Parameter proto.InternalMessageInfo - -type isParameter_Oneof interface { - isParameter_Oneof() -} - -type Parameter_BodyParameter struct { - BodyParameter *BodyParameter `protobuf:"bytes,1,opt,name=body_parameter,json=bodyParameter,proto3,oneof"` -} - -type Parameter_NonBodyParameter struct { - NonBodyParameter *NonBodyParameter `protobuf:"bytes,2,opt,name=non_body_parameter,json=nonBodyParameter,proto3,oneof"` -} - -func (*Parameter_BodyParameter) isParameter_Oneof() {} - -func (*Parameter_NonBodyParameter) isParameter_Oneof() {} - -func (m *Parameter) GetOneof() isParameter_Oneof { - if m != nil { - return m.Oneof - } - return nil -} - -func (m *Parameter) GetBodyParameter() *BodyParameter { - if x, ok := m.GetOneof().(*Parameter_BodyParameter); ok { - return x.BodyParameter - } - return nil -} - -func (m *Parameter) GetNonBodyParameter() *NonBodyParameter { - if x, ok := m.GetOneof().(*Parameter_NonBodyParameter); ok { - return x.NonBodyParameter - } - return nil -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*Parameter) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*Parameter_BodyParameter)(nil), - (*Parameter_NonBodyParameter)(nil), - } -} - -// One or more JSON representations for parameters -type ParameterDefinitions struct { - AdditionalProperties []*NamedParameter `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ParameterDefinitions) Reset() { *m = ParameterDefinitions{} } -func (m *ParameterDefinitions) String() string { return proto.CompactTextString(m) } -func (*ParameterDefinitions) ProtoMessage() {} -func (*ParameterDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{38} -} - -func (m *ParameterDefinitions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ParameterDefinitions.Unmarshal(m, b) -} -func (m *ParameterDefinitions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ParameterDefinitions.Marshal(b, m, deterministic) -} -func (m *ParameterDefinitions) XXX_Merge(src proto.Message) { - xxx_messageInfo_ParameterDefinitions.Merge(m, src) -} -func (m *ParameterDefinitions) XXX_Size() int { - return xxx_messageInfo_ParameterDefinitions.Size(m) -} -func (m *ParameterDefinitions) XXX_DiscardUnknown() { - xxx_messageInfo_ParameterDefinitions.DiscardUnknown(m) -} - -var xxx_messageInfo_ParameterDefinitions proto.InternalMessageInfo - -func (m *ParameterDefinitions) GetAdditionalProperties() []*NamedParameter { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -type ParametersItem struct { - // Types that are valid to be assigned to Oneof: - // *ParametersItem_Parameter - // *ParametersItem_JsonReference - Oneof isParametersItem_Oneof `protobuf_oneof:"oneof"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ParametersItem) Reset() { *m = ParametersItem{} } -func (m *ParametersItem) String() string { return proto.CompactTextString(m) } -func (*ParametersItem) ProtoMessage() {} -func (*ParametersItem) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{39} -} - -func (m *ParametersItem) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ParametersItem.Unmarshal(m, b) -} -func (m *ParametersItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ParametersItem.Marshal(b, m, deterministic) -} -func (m *ParametersItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_ParametersItem.Merge(m, src) -} -func (m *ParametersItem) XXX_Size() int { - return xxx_messageInfo_ParametersItem.Size(m) -} -func (m *ParametersItem) XXX_DiscardUnknown() { - xxx_messageInfo_ParametersItem.DiscardUnknown(m) -} - -var xxx_messageInfo_ParametersItem proto.InternalMessageInfo - -type isParametersItem_Oneof interface { - isParametersItem_Oneof() -} - -type ParametersItem_Parameter struct { - Parameter *Parameter `protobuf:"bytes,1,opt,name=parameter,proto3,oneof"` -} - -type ParametersItem_JsonReference struct { - JsonReference *JsonReference `protobuf:"bytes,2,opt,name=json_reference,json=jsonReference,proto3,oneof"` -} - -func (*ParametersItem_Parameter) isParametersItem_Oneof() {} - -func (*ParametersItem_JsonReference) isParametersItem_Oneof() {} - -func (m *ParametersItem) GetOneof() isParametersItem_Oneof { - if m != nil { - return m.Oneof - } - return nil -} - -func (m *ParametersItem) GetParameter() *Parameter { - if x, ok := m.GetOneof().(*ParametersItem_Parameter); ok { - return x.Parameter - } - return nil -} - -func (m *ParametersItem) GetJsonReference() *JsonReference { - if x, ok := m.GetOneof().(*ParametersItem_JsonReference); ok { - return x.JsonReference - } - return nil -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*ParametersItem) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*ParametersItem_Parameter)(nil), - (*ParametersItem_JsonReference)(nil), - } -} - -type PathItem struct { - XRef string `protobuf:"bytes,1,opt,name=_ref,json=Ref,proto3" json:"_ref,omitempty"` - Get *Operation `protobuf:"bytes,2,opt,name=get,proto3" json:"get,omitempty"` - Put *Operation `protobuf:"bytes,3,opt,name=put,proto3" json:"put,omitempty"` - Post *Operation `protobuf:"bytes,4,opt,name=post,proto3" json:"post,omitempty"` - Delete *Operation `protobuf:"bytes,5,opt,name=delete,proto3" json:"delete,omitempty"` - Options *Operation `protobuf:"bytes,6,opt,name=options,proto3" json:"options,omitempty"` - Head *Operation `protobuf:"bytes,7,opt,name=head,proto3" json:"head,omitempty"` - Patch *Operation `protobuf:"bytes,8,opt,name=patch,proto3" json:"patch,omitempty"` - // The parameters needed to send a valid API call. - Parameters []*ParametersItem `protobuf:"bytes,9,rep,name=parameters,proto3" json:"parameters,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,10,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PathItem) Reset() { *m = PathItem{} } -func (m *PathItem) String() string { return proto.CompactTextString(m) } -func (*PathItem) ProtoMessage() {} -func (*PathItem) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{40} -} - -func (m *PathItem) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PathItem.Unmarshal(m, b) -} -func (m *PathItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PathItem.Marshal(b, m, deterministic) -} -func (m *PathItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_PathItem.Merge(m, src) -} -func (m *PathItem) XXX_Size() int { - return xxx_messageInfo_PathItem.Size(m) -} -func (m *PathItem) XXX_DiscardUnknown() { - xxx_messageInfo_PathItem.DiscardUnknown(m) -} - -var xxx_messageInfo_PathItem proto.InternalMessageInfo - -func (m *PathItem) GetXRef() string { - if m != nil { - return m.XRef - } - return "" -} - -func (m *PathItem) GetGet() *Operation { - if m != nil { - return m.Get - } - return nil -} - -func (m *PathItem) GetPut() *Operation { - if m != nil { - return m.Put - } - return nil -} - -func (m *PathItem) GetPost() *Operation { - if m != nil { - return m.Post - } - return nil -} - -func (m *PathItem) GetDelete() *Operation { - if m != nil { - return m.Delete - } - return nil -} - -func (m *PathItem) GetOptions() *Operation { - if m != nil { - return m.Options - } - return nil -} - -func (m *PathItem) GetHead() *Operation { - if m != nil { - return m.Head - } - return nil -} - -func (m *PathItem) GetPatch() *Operation { - if m != nil { - return m.Patch - } - return nil -} - -func (m *PathItem) GetParameters() []*ParametersItem { - if m != nil { - return m.Parameters - } - return nil -} - -func (m *PathItem) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type PathParameterSubSchema struct { - // Determines whether or not this parameter is required or optional. - Required bool `protobuf:"varint,1,opt,name=required,proto3" json:"required,omitempty"` - // Determines the location of the parameter. - In string `protobuf:"bytes,2,opt,name=in,proto3" json:"in,omitempty"` - // A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // The name of the parameter. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - Type string `protobuf:"bytes,5,opt,name=type,proto3" json:"type,omitempty"` - Format string `protobuf:"bytes,6,opt,name=format,proto3" json:"format,omitempty"` - Items *PrimitivesItems `protobuf:"bytes,7,opt,name=items,proto3" json:"items,omitempty"` - CollectionFormat string `protobuf:"bytes,8,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` - Default *Any `protobuf:"bytes,9,opt,name=default,proto3" json:"default,omitempty"` - Maximum float64 `protobuf:"fixed64,10,opt,name=maximum,proto3" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,11,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` - Minimum float64 `protobuf:"fixed64,12,opt,name=minimum,proto3" json:"minimum,omitempty"` - ExclusiveMinimum bool `protobuf:"varint,13,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` - MaxLength int64 `protobuf:"varint,14,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` - MinLength int64 `protobuf:"varint,15,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - Pattern string `protobuf:"bytes,16,opt,name=pattern,proto3" json:"pattern,omitempty"` - MaxItems int64 `protobuf:"varint,17,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` - MinItems int64 `protobuf:"varint,18,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` - UniqueItems bool `protobuf:"varint,19,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` - Enum []*Any `protobuf:"bytes,20,rep,name=enum,proto3" json:"enum,omitempty"` - MultipleOf float64 `protobuf:"fixed64,21,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,22,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PathParameterSubSchema) Reset() { *m = PathParameterSubSchema{} } -func (m *PathParameterSubSchema) String() string { return proto.CompactTextString(m) } -func (*PathParameterSubSchema) ProtoMessage() {} -func (*PathParameterSubSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{41} -} - -func (m *PathParameterSubSchema) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PathParameterSubSchema.Unmarshal(m, b) -} -func (m *PathParameterSubSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PathParameterSubSchema.Marshal(b, m, deterministic) -} -func (m *PathParameterSubSchema) XXX_Merge(src proto.Message) { - xxx_messageInfo_PathParameterSubSchema.Merge(m, src) -} -func (m *PathParameterSubSchema) XXX_Size() int { - return xxx_messageInfo_PathParameterSubSchema.Size(m) -} -func (m *PathParameterSubSchema) XXX_DiscardUnknown() { - xxx_messageInfo_PathParameterSubSchema.DiscardUnknown(m) -} - -var xxx_messageInfo_PathParameterSubSchema proto.InternalMessageInfo - -func (m *PathParameterSubSchema) GetRequired() bool { - if m != nil { - return m.Required - } - return false -} - -func (m *PathParameterSubSchema) GetIn() string { - if m != nil { - return m.In - } - return "" -} - -func (m *PathParameterSubSchema) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *PathParameterSubSchema) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *PathParameterSubSchema) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *PathParameterSubSchema) GetFormat() string { - if m != nil { - return m.Format - } - return "" -} - -func (m *PathParameterSubSchema) GetItems() *PrimitivesItems { - if m != nil { - return m.Items - } - return nil -} - -func (m *PathParameterSubSchema) GetCollectionFormat() string { - if m != nil { - return m.CollectionFormat - } - return "" -} - -func (m *PathParameterSubSchema) GetDefault() *Any { - if m != nil { - return m.Default - } - return nil -} - -func (m *PathParameterSubSchema) GetMaximum() float64 { - if m != nil { - return m.Maximum - } - return 0 -} - -func (m *PathParameterSubSchema) GetExclusiveMaximum() bool { - if m != nil { - return m.ExclusiveMaximum - } - return false -} - -func (m *PathParameterSubSchema) GetMinimum() float64 { - if m != nil { - return m.Minimum - } - return 0 -} - -func (m *PathParameterSubSchema) GetExclusiveMinimum() bool { - if m != nil { - return m.ExclusiveMinimum - } - return false -} - -func (m *PathParameterSubSchema) GetMaxLength() int64 { - if m != nil { - return m.MaxLength - } - return 0 -} - -func (m *PathParameterSubSchema) GetMinLength() int64 { - if m != nil { - return m.MinLength - } - return 0 -} - -func (m *PathParameterSubSchema) GetPattern() string { - if m != nil { - return m.Pattern - } - return "" -} - -func (m *PathParameterSubSchema) GetMaxItems() int64 { - if m != nil { - return m.MaxItems - } - return 0 -} - -func (m *PathParameterSubSchema) GetMinItems() int64 { - if m != nil { - return m.MinItems - } - return 0 -} - -func (m *PathParameterSubSchema) GetUniqueItems() bool { - if m != nil { - return m.UniqueItems - } - return false -} - -func (m *PathParameterSubSchema) GetEnum() []*Any { - if m != nil { - return m.Enum - } - return nil -} - -func (m *PathParameterSubSchema) GetMultipleOf() float64 { - if m != nil { - return m.MultipleOf - } - return 0 -} - -func (m *PathParameterSubSchema) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -// Relative paths to the individual endpoints. They must be relative to the 'basePath'. -type Paths struct { - VendorExtension []*NamedAny `protobuf:"bytes,1,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - Path []*NamedPathItem `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Paths) Reset() { *m = Paths{} } -func (m *Paths) String() string { return proto.CompactTextString(m) } -func (*Paths) ProtoMessage() {} -func (*Paths) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{42} -} - -func (m *Paths) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Paths.Unmarshal(m, b) -} -func (m *Paths) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Paths.Marshal(b, m, deterministic) -} -func (m *Paths) XXX_Merge(src proto.Message) { - xxx_messageInfo_Paths.Merge(m, src) -} -func (m *Paths) XXX_Size() int { - return xxx_messageInfo_Paths.Size(m) -} -func (m *Paths) XXX_DiscardUnknown() { - xxx_messageInfo_Paths.DiscardUnknown(m) -} - -var xxx_messageInfo_Paths proto.InternalMessageInfo - -func (m *Paths) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -func (m *Paths) GetPath() []*NamedPathItem { - if m != nil { - return m.Path - } - return nil -} - -type PrimitivesItems struct { - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - Format string `protobuf:"bytes,2,opt,name=format,proto3" json:"format,omitempty"` - Items *PrimitivesItems `protobuf:"bytes,3,opt,name=items,proto3" json:"items,omitempty"` - CollectionFormat string `protobuf:"bytes,4,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` - Default *Any `protobuf:"bytes,5,opt,name=default,proto3" json:"default,omitempty"` - Maximum float64 `protobuf:"fixed64,6,opt,name=maximum,proto3" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,7,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` - Minimum float64 `protobuf:"fixed64,8,opt,name=minimum,proto3" json:"minimum,omitempty"` - ExclusiveMinimum bool `protobuf:"varint,9,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` - MaxLength int64 `protobuf:"varint,10,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` - MinLength int64 `protobuf:"varint,11,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - Pattern string `protobuf:"bytes,12,opt,name=pattern,proto3" json:"pattern,omitempty"` - MaxItems int64 `protobuf:"varint,13,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` - MinItems int64 `protobuf:"varint,14,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` - UniqueItems bool `protobuf:"varint,15,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` - Enum []*Any `protobuf:"bytes,16,rep,name=enum,proto3" json:"enum,omitempty"` - MultipleOf float64 `protobuf:"fixed64,17,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,18,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PrimitivesItems) Reset() { *m = PrimitivesItems{} } -func (m *PrimitivesItems) String() string { return proto.CompactTextString(m) } -func (*PrimitivesItems) ProtoMessage() {} -func (*PrimitivesItems) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{43} -} - -func (m *PrimitivesItems) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PrimitivesItems.Unmarshal(m, b) -} -func (m *PrimitivesItems) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PrimitivesItems.Marshal(b, m, deterministic) -} -func (m *PrimitivesItems) XXX_Merge(src proto.Message) { - xxx_messageInfo_PrimitivesItems.Merge(m, src) -} -func (m *PrimitivesItems) XXX_Size() int { - return xxx_messageInfo_PrimitivesItems.Size(m) -} -func (m *PrimitivesItems) XXX_DiscardUnknown() { - xxx_messageInfo_PrimitivesItems.DiscardUnknown(m) -} - -var xxx_messageInfo_PrimitivesItems proto.InternalMessageInfo - -func (m *PrimitivesItems) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *PrimitivesItems) GetFormat() string { - if m != nil { - return m.Format - } - return "" -} - -func (m *PrimitivesItems) GetItems() *PrimitivesItems { - if m != nil { - return m.Items - } - return nil -} - -func (m *PrimitivesItems) GetCollectionFormat() string { - if m != nil { - return m.CollectionFormat - } - return "" -} - -func (m *PrimitivesItems) GetDefault() *Any { - if m != nil { - return m.Default - } - return nil -} - -func (m *PrimitivesItems) GetMaximum() float64 { - if m != nil { - return m.Maximum - } - return 0 -} - -func (m *PrimitivesItems) GetExclusiveMaximum() bool { - if m != nil { - return m.ExclusiveMaximum - } - return false -} - -func (m *PrimitivesItems) GetMinimum() float64 { - if m != nil { - return m.Minimum - } - return 0 -} - -func (m *PrimitivesItems) GetExclusiveMinimum() bool { - if m != nil { - return m.ExclusiveMinimum - } - return false -} - -func (m *PrimitivesItems) GetMaxLength() int64 { - if m != nil { - return m.MaxLength - } - return 0 -} - -func (m *PrimitivesItems) GetMinLength() int64 { - if m != nil { - return m.MinLength - } - return 0 -} - -func (m *PrimitivesItems) GetPattern() string { - if m != nil { - return m.Pattern - } - return "" -} - -func (m *PrimitivesItems) GetMaxItems() int64 { - if m != nil { - return m.MaxItems - } - return 0 -} - -func (m *PrimitivesItems) GetMinItems() int64 { - if m != nil { - return m.MinItems - } - return 0 -} - -func (m *PrimitivesItems) GetUniqueItems() bool { - if m != nil { - return m.UniqueItems - } - return false -} - -func (m *PrimitivesItems) GetEnum() []*Any { - if m != nil { - return m.Enum - } - return nil -} - -func (m *PrimitivesItems) GetMultipleOf() float64 { - if m != nil { - return m.MultipleOf - } - return 0 -} - -func (m *PrimitivesItems) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type Properties struct { - AdditionalProperties []*NamedSchema `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Properties) Reset() { *m = Properties{} } -func (m *Properties) String() string { return proto.CompactTextString(m) } -func (*Properties) ProtoMessage() {} -func (*Properties) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{44} -} - -func (m *Properties) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Properties.Unmarshal(m, b) -} -func (m *Properties) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Properties.Marshal(b, m, deterministic) -} -func (m *Properties) XXX_Merge(src proto.Message) { - xxx_messageInfo_Properties.Merge(m, src) -} -func (m *Properties) XXX_Size() int { - return xxx_messageInfo_Properties.Size(m) -} -func (m *Properties) XXX_DiscardUnknown() { - xxx_messageInfo_Properties.DiscardUnknown(m) -} - -var xxx_messageInfo_Properties proto.InternalMessageInfo - -func (m *Properties) GetAdditionalProperties() []*NamedSchema { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -type QueryParameterSubSchema struct { - // Determines whether or not this parameter is required or optional. - Required bool `protobuf:"varint,1,opt,name=required,proto3" json:"required,omitempty"` - // Determines the location of the parameter. - In string `protobuf:"bytes,2,opt,name=in,proto3" json:"in,omitempty"` - // A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // The name of the parameter. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // allows sending a parameter by name only or with an empty value. - AllowEmptyValue bool `protobuf:"varint,5,opt,name=allow_empty_value,json=allowEmptyValue,proto3" json:"allow_empty_value,omitempty"` - Type string `protobuf:"bytes,6,opt,name=type,proto3" json:"type,omitempty"` - Format string `protobuf:"bytes,7,opt,name=format,proto3" json:"format,omitempty"` - Items *PrimitivesItems `protobuf:"bytes,8,opt,name=items,proto3" json:"items,omitempty"` - CollectionFormat string `protobuf:"bytes,9,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` - Default *Any `protobuf:"bytes,10,opt,name=default,proto3" json:"default,omitempty"` - Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` - Minimum float64 `protobuf:"fixed64,13,opt,name=minimum,proto3" json:"minimum,omitempty"` - ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` - MaxLength int64 `protobuf:"varint,15,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` - MinLength int64 `protobuf:"varint,16,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - Pattern string `protobuf:"bytes,17,opt,name=pattern,proto3" json:"pattern,omitempty"` - MaxItems int64 `protobuf:"varint,18,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` - MinItems int64 `protobuf:"varint,19,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` - UniqueItems bool `protobuf:"varint,20,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` - Enum []*Any `protobuf:"bytes,21,rep,name=enum,proto3" json:"enum,omitempty"` - MultipleOf float64 `protobuf:"fixed64,22,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,23,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *QueryParameterSubSchema) Reset() { *m = QueryParameterSubSchema{} } -func (m *QueryParameterSubSchema) String() string { return proto.CompactTextString(m) } -func (*QueryParameterSubSchema) ProtoMessage() {} -func (*QueryParameterSubSchema) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{45} -} - -func (m *QueryParameterSubSchema) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_QueryParameterSubSchema.Unmarshal(m, b) -} -func (m *QueryParameterSubSchema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_QueryParameterSubSchema.Marshal(b, m, deterministic) -} -func (m *QueryParameterSubSchema) XXX_Merge(src proto.Message) { - xxx_messageInfo_QueryParameterSubSchema.Merge(m, src) -} -func (m *QueryParameterSubSchema) XXX_Size() int { - return xxx_messageInfo_QueryParameterSubSchema.Size(m) -} -func (m *QueryParameterSubSchema) XXX_DiscardUnknown() { - xxx_messageInfo_QueryParameterSubSchema.DiscardUnknown(m) -} - -var xxx_messageInfo_QueryParameterSubSchema proto.InternalMessageInfo - -func (m *QueryParameterSubSchema) GetRequired() bool { - if m != nil { - return m.Required - } - return false -} - -func (m *QueryParameterSubSchema) GetIn() string { - if m != nil { - return m.In - } - return "" -} - -func (m *QueryParameterSubSchema) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *QueryParameterSubSchema) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *QueryParameterSubSchema) GetAllowEmptyValue() bool { - if m != nil { - return m.AllowEmptyValue - } - return false -} - -func (m *QueryParameterSubSchema) GetType() string { - if m != nil { - return m.Type - } - return "" -} - -func (m *QueryParameterSubSchema) GetFormat() string { - if m != nil { - return m.Format - } - return "" -} - -func (m *QueryParameterSubSchema) GetItems() *PrimitivesItems { - if m != nil { - return m.Items - } - return nil -} - -func (m *QueryParameterSubSchema) GetCollectionFormat() string { - if m != nil { - return m.CollectionFormat - } - return "" -} - -func (m *QueryParameterSubSchema) GetDefault() *Any { - if m != nil { - return m.Default - } - return nil -} - -func (m *QueryParameterSubSchema) GetMaximum() float64 { - if m != nil { - return m.Maximum - } - return 0 -} - -func (m *QueryParameterSubSchema) GetExclusiveMaximum() bool { - if m != nil { - return m.ExclusiveMaximum - } - return false -} - -func (m *QueryParameterSubSchema) GetMinimum() float64 { - if m != nil { - return m.Minimum - } - return 0 -} - -func (m *QueryParameterSubSchema) GetExclusiveMinimum() bool { - if m != nil { - return m.ExclusiveMinimum - } - return false -} - -func (m *QueryParameterSubSchema) GetMaxLength() int64 { - if m != nil { - return m.MaxLength - } - return 0 -} - -func (m *QueryParameterSubSchema) GetMinLength() int64 { - if m != nil { - return m.MinLength - } - return 0 -} - -func (m *QueryParameterSubSchema) GetPattern() string { - if m != nil { - return m.Pattern - } - return "" -} - -func (m *QueryParameterSubSchema) GetMaxItems() int64 { - if m != nil { - return m.MaxItems - } - return 0 -} - -func (m *QueryParameterSubSchema) GetMinItems() int64 { - if m != nil { - return m.MinItems - } - return 0 -} - -func (m *QueryParameterSubSchema) GetUniqueItems() bool { - if m != nil { - return m.UniqueItems - } - return false -} - -func (m *QueryParameterSubSchema) GetEnum() []*Any { - if m != nil { - return m.Enum - } - return nil -} - -func (m *QueryParameterSubSchema) GetMultipleOf() float64 { - if m != nil { - return m.MultipleOf - } - return 0 -} - -func (m *QueryParameterSubSchema) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type Response struct { - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - Schema *SchemaItem `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` - Headers *Headers `protobuf:"bytes,3,opt,name=headers,proto3" json:"headers,omitempty"` - Examples *Examples `protobuf:"bytes,4,opt,name=examples,proto3" json:"examples,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,5,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Response) Reset() { *m = Response{} } -func (m *Response) String() string { return proto.CompactTextString(m) } -func (*Response) ProtoMessage() {} -func (*Response) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{46} -} - -func (m *Response) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Response.Unmarshal(m, b) -} -func (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Response.Marshal(b, m, deterministic) -} -func (m *Response) XXX_Merge(src proto.Message) { - xxx_messageInfo_Response.Merge(m, src) -} -func (m *Response) XXX_Size() int { - return xxx_messageInfo_Response.Size(m) -} -func (m *Response) XXX_DiscardUnknown() { - xxx_messageInfo_Response.DiscardUnknown(m) -} - -var xxx_messageInfo_Response proto.InternalMessageInfo - -func (m *Response) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Response) GetSchema() *SchemaItem { - if m != nil { - return m.Schema - } - return nil -} - -func (m *Response) GetHeaders() *Headers { - if m != nil { - return m.Headers - } - return nil -} - -func (m *Response) GetExamples() *Examples { - if m != nil { - return m.Examples - } - return nil -} - -func (m *Response) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -// One or more JSON representations for parameters -type ResponseDefinitions struct { - AdditionalProperties []*NamedResponse `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ResponseDefinitions) Reset() { *m = ResponseDefinitions{} } -func (m *ResponseDefinitions) String() string { return proto.CompactTextString(m) } -func (*ResponseDefinitions) ProtoMessage() {} -func (*ResponseDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{47} -} - -func (m *ResponseDefinitions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResponseDefinitions.Unmarshal(m, b) -} -func (m *ResponseDefinitions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResponseDefinitions.Marshal(b, m, deterministic) -} -func (m *ResponseDefinitions) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponseDefinitions.Merge(m, src) -} -func (m *ResponseDefinitions) XXX_Size() int { - return xxx_messageInfo_ResponseDefinitions.Size(m) -} -func (m *ResponseDefinitions) XXX_DiscardUnknown() { - xxx_messageInfo_ResponseDefinitions.DiscardUnknown(m) -} - -var xxx_messageInfo_ResponseDefinitions proto.InternalMessageInfo - -func (m *ResponseDefinitions) GetAdditionalProperties() []*NamedResponse { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -type ResponseValue struct { - // Types that are valid to be assigned to Oneof: - // *ResponseValue_Response - // *ResponseValue_JsonReference - Oneof isResponseValue_Oneof `protobuf_oneof:"oneof"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ResponseValue) Reset() { *m = ResponseValue{} } -func (m *ResponseValue) String() string { return proto.CompactTextString(m) } -func (*ResponseValue) ProtoMessage() {} -func (*ResponseValue) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{48} -} - -func (m *ResponseValue) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ResponseValue.Unmarshal(m, b) -} -func (m *ResponseValue) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ResponseValue.Marshal(b, m, deterministic) -} -func (m *ResponseValue) XXX_Merge(src proto.Message) { - xxx_messageInfo_ResponseValue.Merge(m, src) -} -func (m *ResponseValue) XXX_Size() int { - return xxx_messageInfo_ResponseValue.Size(m) -} -func (m *ResponseValue) XXX_DiscardUnknown() { - xxx_messageInfo_ResponseValue.DiscardUnknown(m) -} - -var xxx_messageInfo_ResponseValue proto.InternalMessageInfo - -type isResponseValue_Oneof interface { - isResponseValue_Oneof() -} - -type ResponseValue_Response struct { - Response *Response `protobuf:"bytes,1,opt,name=response,proto3,oneof"` -} - -type ResponseValue_JsonReference struct { - JsonReference *JsonReference `protobuf:"bytes,2,opt,name=json_reference,json=jsonReference,proto3,oneof"` -} - -func (*ResponseValue_Response) isResponseValue_Oneof() {} - -func (*ResponseValue_JsonReference) isResponseValue_Oneof() {} - -func (m *ResponseValue) GetOneof() isResponseValue_Oneof { - if m != nil { - return m.Oneof - } - return nil -} - -func (m *ResponseValue) GetResponse() *Response { - if x, ok := m.GetOneof().(*ResponseValue_Response); ok { - return x.Response - } - return nil -} - -func (m *ResponseValue) GetJsonReference() *JsonReference { - if x, ok := m.GetOneof().(*ResponseValue_JsonReference); ok { - return x.JsonReference - } - return nil -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*ResponseValue) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*ResponseValue_Response)(nil), - (*ResponseValue_JsonReference)(nil), - } -} - -// Response objects names can either be any valid HTTP status code or 'default'. -type Responses struct { - ResponseCode []*NamedResponseValue `protobuf:"bytes,1,rep,name=response_code,json=responseCode,proto3" json:"response_code,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,2,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Responses) Reset() { *m = Responses{} } -func (m *Responses) String() string { return proto.CompactTextString(m) } -func (*Responses) ProtoMessage() {} -func (*Responses) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{49} -} - -func (m *Responses) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Responses.Unmarshal(m, b) -} -func (m *Responses) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Responses.Marshal(b, m, deterministic) -} -func (m *Responses) XXX_Merge(src proto.Message) { - xxx_messageInfo_Responses.Merge(m, src) -} -func (m *Responses) XXX_Size() int { - return xxx_messageInfo_Responses.Size(m) -} -func (m *Responses) XXX_DiscardUnknown() { - xxx_messageInfo_Responses.DiscardUnknown(m) -} - -var xxx_messageInfo_Responses proto.InternalMessageInfo - -func (m *Responses) GetResponseCode() []*NamedResponseValue { - if m != nil { - return m.ResponseCode - } - return nil -} - -func (m *Responses) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -// A deterministic version of a JSON Schema object. -type Schema struct { - XRef string `protobuf:"bytes,1,opt,name=_ref,json=Ref,proto3" json:"_ref,omitempty"` - Format string `protobuf:"bytes,2,opt,name=format,proto3" json:"format,omitempty"` - Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` - Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` - Default *Any `protobuf:"bytes,5,opt,name=default,proto3" json:"default,omitempty"` - MultipleOf float64 `protobuf:"fixed64,6,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` - Maximum float64 `protobuf:"fixed64,7,opt,name=maximum,proto3" json:"maximum,omitempty"` - ExclusiveMaximum bool `protobuf:"varint,8,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` - Minimum float64 `protobuf:"fixed64,9,opt,name=minimum,proto3" json:"minimum,omitempty"` - ExclusiveMinimum bool `protobuf:"varint,10,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` - MaxLength int64 `protobuf:"varint,11,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` - MinLength int64 `protobuf:"varint,12,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` - Pattern string `protobuf:"bytes,13,opt,name=pattern,proto3" json:"pattern,omitempty"` - MaxItems int64 `protobuf:"varint,14,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` - MinItems int64 `protobuf:"varint,15,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` - UniqueItems bool `protobuf:"varint,16,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` - MaxProperties int64 `protobuf:"varint,17,opt,name=max_properties,json=maxProperties,proto3" json:"max_properties,omitempty"` - MinProperties int64 `protobuf:"varint,18,opt,name=min_properties,json=minProperties,proto3" json:"min_properties,omitempty"` - Required []string `protobuf:"bytes,19,rep,name=required,proto3" json:"required,omitempty"` - Enum []*Any `protobuf:"bytes,20,rep,name=enum,proto3" json:"enum,omitempty"` - AdditionalProperties *AdditionalPropertiesItem `protobuf:"bytes,21,opt,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - Type *TypeItem `protobuf:"bytes,22,opt,name=type,proto3" json:"type,omitempty"` - Items *ItemsItem `protobuf:"bytes,23,opt,name=items,proto3" json:"items,omitempty"` - AllOf []*Schema `protobuf:"bytes,24,rep,name=all_of,json=allOf,proto3" json:"all_of,omitempty"` - Properties *Properties `protobuf:"bytes,25,opt,name=properties,proto3" json:"properties,omitempty"` - Discriminator string `protobuf:"bytes,26,opt,name=discriminator,proto3" json:"discriminator,omitempty"` - ReadOnly bool `protobuf:"varint,27,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` - Xml *Xml `protobuf:"bytes,28,opt,name=xml,proto3" json:"xml,omitempty"` - ExternalDocs *ExternalDocs `protobuf:"bytes,29,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - Example *Any `protobuf:"bytes,30,opt,name=example,proto3" json:"example,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,31,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Schema) Reset() { *m = Schema{} } -func (m *Schema) String() string { return proto.CompactTextString(m) } -func (*Schema) ProtoMessage() {} -func (*Schema) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{50} -} - -func (m *Schema) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Schema.Unmarshal(m, b) -} -func (m *Schema) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Schema.Marshal(b, m, deterministic) -} -func (m *Schema) XXX_Merge(src proto.Message) { - xxx_messageInfo_Schema.Merge(m, src) -} -func (m *Schema) XXX_Size() int { - return xxx_messageInfo_Schema.Size(m) -} -func (m *Schema) XXX_DiscardUnknown() { - xxx_messageInfo_Schema.DiscardUnknown(m) -} - -var xxx_messageInfo_Schema proto.InternalMessageInfo - -func (m *Schema) GetXRef() string { - if m != nil { - return m.XRef - } - return "" -} - -func (m *Schema) GetFormat() string { - if m != nil { - return m.Format - } - return "" -} - -func (m *Schema) GetTitle() string { - if m != nil { - return m.Title - } - return "" -} - -func (m *Schema) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Schema) GetDefault() *Any { - if m != nil { - return m.Default - } - return nil -} - -func (m *Schema) GetMultipleOf() float64 { - if m != nil { - return m.MultipleOf - } - return 0 -} - -func (m *Schema) GetMaximum() float64 { - if m != nil { - return m.Maximum - } - return 0 -} - -func (m *Schema) GetExclusiveMaximum() bool { - if m != nil { - return m.ExclusiveMaximum - } - return false -} - -func (m *Schema) GetMinimum() float64 { - if m != nil { - return m.Minimum - } - return 0 -} - -func (m *Schema) GetExclusiveMinimum() bool { - if m != nil { - return m.ExclusiveMinimum - } - return false -} - -func (m *Schema) GetMaxLength() int64 { - if m != nil { - return m.MaxLength - } - return 0 -} - -func (m *Schema) GetMinLength() int64 { - if m != nil { - return m.MinLength - } - return 0 -} - -func (m *Schema) GetPattern() string { - if m != nil { - return m.Pattern - } - return "" -} - -func (m *Schema) GetMaxItems() int64 { - if m != nil { - return m.MaxItems - } - return 0 -} - -func (m *Schema) GetMinItems() int64 { - if m != nil { - return m.MinItems - } - return 0 -} - -func (m *Schema) GetUniqueItems() bool { - if m != nil { - return m.UniqueItems - } - return false -} - -func (m *Schema) GetMaxProperties() int64 { - if m != nil { - return m.MaxProperties - } - return 0 -} - -func (m *Schema) GetMinProperties() int64 { - if m != nil { - return m.MinProperties - } - return 0 -} - -func (m *Schema) GetRequired() []string { - if m != nil { - return m.Required - } - return nil -} - -func (m *Schema) GetEnum() []*Any { - if m != nil { - return m.Enum - } - return nil -} - -func (m *Schema) GetAdditionalProperties() *AdditionalPropertiesItem { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -func (m *Schema) GetType() *TypeItem { - if m != nil { - return m.Type - } - return nil -} - -func (m *Schema) GetItems() *ItemsItem { - if m != nil { - return m.Items - } - return nil -} - -func (m *Schema) GetAllOf() []*Schema { - if m != nil { - return m.AllOf - } - return nil -} - -func (m *Schema) GetProperties() *Properties { - if m != nil { - return m.Properties - } - return nil -} - -func (m *Schema) GetDiscriminator() string { - if m != nil { - return m.Discriminator - } - return "" -} - -func (m *Schema) GetReadOnly() bool { - if m != nil { - return m.ReadOnly - } - return false -} - -func (m *Schema) GetXml() *Xml { - if m != nil { - return m.Xml - } - return nil -} - -func (m *Schema) GetExternalDocs() *ExternalDocs { - if m != nil { - return m.ExternalDocs - } - return nil -} - -func (m *Schema) GetExample() *Any { - if m != nil { - return m.Example - } - return nil -} - -func (m *Schema) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type SchemaItem struct { - // Types that are valid to be assigned to Oneof: - // *SchemaItem_Schema - // *SchemaItem_FileSchema - Oneof isSchemaItem_Oneof `protobuf_oneof:"oneof"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SchemaItem) Reset() { *m = SchemaItem{} } -func (m *SchemaItem) String() string { return proto.CompactTextString(m) } -func (*SchemaItem) ProtoMessage() {} -func (*SchemaItem) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{51} -} - -func (m *SchemaItem) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SchemaItem.Unmarshal(m, b) -} -func (m *SchemaItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SchemaItem.Marshal(b, m, deterministic) -} -func (m *SchemaItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_SchemaItem.Merge(m, src) -} -func (m *SchemaItem) XXX_Size() int { - return xxx_messageInfo_SchemaItem.Size(m) -} -func (m *SchemaItem) XXX_DiscardUnknown() { - xxx_messageInfo_SchemaItem.DiscardUnknown(m) -} - -var xxx_messageInfo_SchemaItem proto.InternalMessageInfo - -type isSchemaItem_Oneof interface { - isSchemaItem_Oneof() -} - -type SchemaItem_Schema struct { - Schema *Schema `protobuf:"bytes,1,opt,name=schema,proto3,oneof"` -} - -type SchemaItem_FileSchema struct { - FileSchema *FileSchema `protobuf:"bytes,2,opt,name=file_schema,json=fileSchema,proto3,oneof"` -} - -func (*SchemaItem_Schema) isSchemaItem_Oneof() {} - -func (*SchemaItem_FileSchema) isSchemaItem_Oneof() {} - -func (m *SchemaItem) GetOneof() isSchemaItem_Oneof { - if m != nil { - return m.Oneof - } - return nil -} - -func (m *SchemaItem) GetSchema() *Schema { - if x, ok := m.GetOneof().(*SchemaItem_Schema); ok { - return x.Schema - } - return nil -} - -func (m *SchemaItem) GetFileSchema() *FileSchema { - if x, ok := m.GetOneof().(*SchemaItem_FileSchema); ok { - return x.FileSchema - } - return nil -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*SchemaItem) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*SchemaItem_Schema)(nil), - (*SchemaItem_FileSchema)(nil), - } -} - -type SecurityDefinitions struct { - AdditionalProperties []*NamedSecurityDefinitionsItem `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SecurityDefinitions) Reset() { *m = SecurityDefinitions{} } -func (m *SecurityDefinitions) String() string { return proto.CompactTextString(m) } -func (*SecurityDefinitions) ProtoMessage() {} -func (*SecurityDefinitions) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{52} -} - -func (m *SecurityDefinitions) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SecurityDefinitions.Unmarshal(m, b) -} -func (m *SecurityDefinitions) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SecurityDefinitions.Marshal(b, m, deterministic) -} -func (m *SecurityDefinitions) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecurityDefinitions.Merge(m, src) -} -func (m *SecurityDefinitions) XXX_Size() int { - return xxx_messageInfo_SecurityDefinitions.Size(m) -} -func (m *SecurityDefinitions) XXX_DiscardUnknown() { - xxx_messageInfo_SecurityDefinitions.DiscardUnknown(m) -} - -var xxx_messageInfo_SecurityDefinitions proto.InternalMessageInfo - -func (m *SecurityDefinitions) GetAdditionalProperties() []*NamedSecurityDefinitionsItem { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -type SecurityDefinitionsItem struct { - // Types that are valid to be assigned to Oneof: - // *SecurityDefinitionsItem_BasicAuthenticationSecurity - // *SecurityDefinitionsItem_ApiKeySecurity - // *SecurityDefinitionsItem_Oauth2ImplicitSecurity - // *SecurityDefinitionsItem_Oauth2PasswordSecurity - // *SecurityDefinitionsItem_Oauth2ApplicationSecurity - // *SecurityDefinitionsItem_Oauth2AccessCodeSecurity - Oneof isSecurityDefinitionsItem_Oneof `protobuf_oneof:"oneof"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SecurityDefinitionsItem) Reset() { *m = SecurityDefinitionsItem{} } -func (m *SecurityDefinitionsItem) String() string { return proto.CompactTextString(m) } -func (*SecurityDefinitionsItem) ProtoMessage() {} -func (*SecurityDefinitionsItem) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{53} -} - -func (m *SecurityDefinitionsItem) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SecurityDefinitionsItem.Unmarshal(m, b) -} -func (m *SecurityDefinitionsItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SecurityDefinitionsItem.Marshal(b, m, deterministic) -} -func (m *SecurityDefinitionsItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecurityDefinitionsItem.Merge(m, src) -} -func (m *SecurityDefinitionsItem) XXX_Size() int { - return xxx_messageInfo_SecurityDefinitionsItem.Size(m) -} -func (m *SecurityDefinitionsItem) XXX_DiscardUnknown() { - xxx_messageInfo_SecurityDefinitionsItem.DiscardUnknown(m) -} - -var xxx_messageInfo_SecurityDefinitionsItem proto.InternalMessageInfo - -type isSecurityDefinitionsItem_Oneof interface { - isSecurityDefinitionsItem_Oneof() -} - -type SecurityDefinitionsItem_BasicAuthenticationSecurity struct { - BasicAuthenticationSecurity *BasicAuthenticationSecurity `protobuf:"bytes,1,opt,name=basic_authentication_security,json=basicAuthenticationSecurity,proto3,oneof"` -} - -type SecurityDefinitionsItem_ApiKeySecurity struct { - ApiKeySecurity *ApiKeySecurity `protobuf:"bytes,2,opt,name=api_key_security,json=apiKeySecurity,proto3,oneof"` -} - -type SecurityDefinitionsItem_Oauth2ImplicitSecurity struct { - Oauth2ImplicitSecurity *Oauth2ImplicitSecurity `protobuf:"bytes,3,opt,name=oauth2_implicit_security,json=oauth2ImplicitSecurity,proto3,oneof"` -} - -type SecurityDefinitionsItem_Oauth2PasswordSecurity struct { - Oauth2PasswordSecurity *Oauth2PasswordSecurity `protobuf:"bytes,4,opt,name=oauth2_password_security,json=oauth2PasswordSecurity,proto3,oneof"` -} - -type SecurityDefinitionsItem_Oauth2ApplicationSecurity struct { - Oauth2ApplicationSecurity *Oauth2ApplicationSecurity `protobuf:"bytes,5,opt,name=oauth2_application_security,json=oauth2ApplicationSecurity,proto3,oneof"` -} - -type SecurityDefinitionsItem_Oauth2AccessCodeSecurity struct { - Oauth2AccessCodeSecurity *Oauth2AccessCodeSecurity `protobuf:"bytes,6,opt,name=oauth2_access_code_security,json=oauth2AccessCodeSecurity,proto3,oneof"` -} - -func (*SecurityDefinitionsItem_BasicAuthenticationSecurity) isSecurityDefinitionsItem_Oneof() {} - -func (*SecurityDefinitionsItem_ApiKeySecurity) isSecurityDefinitionsItem_Oneof() {} - -func (*SecurityDefinitionsItem_Oauth2ImplicitSecurity) isSecurityDefinitionsItem_Oneof() {} - -func (*SecurityDefinitionsItem_Oauth2PasswordSecurity) isSecurityDefinitionsItem_Oneof() {} - -func (*SecurityDefinitionsItem_Oauth2ApplicationSecurity) isSecurityDefinitionsItem_Oneof() {} - -func (*SecurityDefinitionsItem_Oauth2AccessCodeSecurity) isSecurityDefinitionsItem_Oneof() {} - -func (m *SecurityDefinitionsItem) GetOneof() isSecurityDefinitionsItem_Oneof { - if m != nil { - return m.Oneof - } - return nil -} - -func (m *SecurityDefinitionsItem) GetBasicAuthenticationSecurity() *BasicAuthenticationSecurity { - if x, ok := m.GetOneof().(*SecurityDefinitionsItem_BasicAuthenticationSecurity); ok { - return x.BasicAuthenticationSecurity - } - return nil -} - -func (m *SecurityDefinitionsItem) GetApiKeySecurity() *ApiKeySecurity { - if x, ok := m.GetOneof().(*SecurityDefinitionsItem_ApiKeySecurity); ok { - return x.ApiKeySecurity - } - return nil -} - -func (m *SecurityDefinitionsItem) GetOauth2ImplicitSecurity() *Oauth2ImplicitSecurity { - if x, ok := m.GetOneof().(*SecurityDefinitionsItem_Oauth2ImplicitSecurity); ok { - return x.Oauth2ImplicitSecurity - } - return nil -} - -func (m *SecurityDefinitionsItem) GetOauth2PasswordSecurity() *Oauth2PasswordSecurity { - if x, ok := m.GetOneof().(*SecurityDefinitionsItem_Oauth2PasswordSecurity); ok { - return x.Oauth2PasswordSecurity - } - return nil -} - -func (m *SecurityDefinitionsItem) GetOauth2ApplicationSecurity() *Oauth2ApplicationSecurity { - if x, ok := m.GetOneof().(*SecurityDefinitionsItem_Oauth2ApplicationSecurity); ok { - return x.Oauth2ApplicationSecurity - } - return nil -} - -func (m *SecurityDefinitionsItem) GetOauth2AccessCodeSecurity() *Oauth2AccessCodeSecurity { - if x, ok := m.GetOneof().(*SecurityDefinitionsItem_Oauth2AccessCodeSecurity); ok { - return x.Oauth2AccessCodeSecurity - } - return nil -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*SecurityDefinitionsItem) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*SecurityDefinitionsItem_BasicAuthenticationSecurity)(nil), - (*SecurityDefinitionsItem_ApiKeySecurity)(nil), - (*SecurityDefinitionsItem_Oauth2ImplicitSecurity)(nil), - (*SecurityDefinitionsItem_Oauth2PasswordSecurity)(nil), - (*SecurityDefinitionsItem_Oauth2ApplicationSecurity)(nil), - (*SecurityDefinitionsItem_Oauth2AccessCodeSecurity)(nil), - } -} - -type SecurityRequirement struct { - AdditionalProperties []*NamedStringArray `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *SecurityRequirement) Reset() { *m = SecurityRequirement{} } -func (m *SecurityRequirement) String() string { return proto.CompactTextString(m) } -func (*SecurityRequirement) ProtoMessage() {} -func (*SecurityRequirement) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{54} -} - -func (m *SecurityRequirement) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SecurityRequirement.Unmarshal(m, b) -} -func (m *SecurityRequirement) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SecurityRequirement.Marshal(b, m, deterministic) -} -func (m *SecurityRequirement) XXX_Merge(src proto.Message) { - xxx_messageInfo_SecurityRequirement.Merge(m, src) -} -func (m *SecurityRequirement) XXX_Size() int { - return xxx_messageInfo_SecurityRequirement.Size(m) -} -func (m *SecurityRequirement) XXX_DiscardUnknown() { - xxx_messageInfo_SecurityRequirement.DiscardUnknown(m) -} - -var xxx_messageInfo_SecurityRequirement proto.InternalMessageInfo - -func (m *SecurityRequirement) GetAdditionalProperties() []*NamedStringArray { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -type StringArray struct { - Value []string `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *StringArray) Reset() { *m = StringArray{} } -func (m *StringArray) String() string { return proto.CompactTextString(m) } -func (*StringArray) ProtoMessage() {} -func (*StringArray) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{55} -} - -func (m *StringArray) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_StringArray.Unmarshal(m, b) -} -func (m *StringArray) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_StringArray.Marshal(b, m, deterministic) -} -func (m *StringArray) XXX_Merge(src proto.Message) { - xxx_messageInfo_StringArray.Merge(m, src) -} -func (m *StringArray) XXX_Size() int { - return xxx_messageInfo_StringArray.Size(m) -} -func (m *StringArray) XXX_DiscardUnknown() { - xxx_messageInfo_StringArray.DiscardUnknown(m) -} - -var xxx_messageInfo_StringArray proto.InternalMessageInfo - -func (m *StringArray) GetValue() []string { - if m != nil { - return m.Value - } - return nil -} - -type Tag struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - ExternalDocs *ExternalDocs `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,4,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Tag) Reset() { *m = Tag{} } -func (m *Tag) String() string { return proto.CompactTextString(m) } -func (*Tag) ProtoMessage() {} -func (*Tag) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{56} -} - -func (m *Tag) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Tag.Unmarshal(m, b) -} -func (m *Tag) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Tag.Marshal(b, m, deterministic) -} -func (m *Tag) XXX_Merge(src proto.Message) { - xxx_messageInfo_Tag.Merge(m, src) -} -func (m *Tag) XXX_Size() int { - return xxx_messageInfo_Tag.Size(m) -} -func (m *Tag) XXX_DiscardUnknown() { - xxx_messageInfo_Tag.DiscardUnknown(m) -} - -var xxx_messageInfo_Tag proto.InternalMessageInfo - -func (m *Tag) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Tag) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Tag) GetExternalDocs() *ExternalDocs { - if m != nil { - return m.ExternalDocs - } - return nil -} - -func (m *Tag) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -type TypeItem struct { - Value []string `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *TypeItem) Reset() { *m = TypeItem{} } -func (m *TypeItem) String() string { return proto.CompactTextString(m) } -func (*TypeItem) ProtoMessage() {} -func (*TypeItem) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{57} -} - -func (m *TypeItem) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_TypeItem.Unmarshal(m, b) -} -func (m *TypeItem) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_TypeItem.Marshal(b, m, deterministic) -} -func (m *TypeItem) XXX_Merge(src proto.Message) { - xxx_messageInfo_TypeItem.Merge(m, src) -} -func (m *TypeItem) XXX_Size() int { - return xxx_messageInfo_TypeItem.Size(m) -} -func (m *TypeItem) XXX_DiscardUnknown() { - xxx_messageInfo_TypeItem.DiscardUnknown(m) -} - -var xxx_messageInfo_TypeItem proto.InternalMessageInfo - -func (m *TypeItem) GetValue() []string { - if m != nil { - return m.Value - } - return nil -} - -// Any property starting with x- is valid. -type VendorExtension struct { - AdditionalProperties []*NamedAny `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *VendorExtension) Reset() { *m = VendorExtension{} } -func (m *VendorExtension) String() string { return proto.CompactTextString(m) } -func (*VendorExtension) ProtoMessage() {} -func (*VendorExtension) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{58} -} - -func (m *VendorExtension) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_VendorExtension.Unmarshal(m, b) -} -func (m *VendorExtension) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_VendorExtension.Marshal(b, m, deterministic) -} -func (m *VendorExtension) XXX_Merge(src proto.Message) { - xxx_messageInfo_VendorExtension.Merge(m, src) -} -func (m *VendorExtension) XXX_Size() int { - return xxx_messageInfo_VendorExtension.Size(m) -} -func (m *VendorExtension) XXX_DiscardUnknown() { - xxx_messageInfo_VendorExtension.DiscardUnknown(m) -} - -var xxx_messageInfo_VendorExtension proto.InternalMessageInfo - -func (m *VendorExtension) GetAdditionalProperties() []*NamedAny { - if m != nil { - return m.AdditionalProperties - } - return nil -} - -type Xml struct { - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` - Prefix string `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"` - Attribute bool `protobuf:"varint,4,opt,name=attribute,proto3" json:"attribute,omitempty"` - Wrapped bool `protobuf:"varint,5,opt,name=wrapped,proto3" json:"wrapped,omitempty"` - VendorExtension []*NamedAny `protobuf:"bytes,6,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Xml) Reset() { *m = Xml{} } -func (m *Xml) String() string { return proto.CompactTextString(m) } -func (*Xml) ProtoMessage() {} -func (*Xml) Descriptor() ([]byte, []int) { - return fileDescriptor_336adc04ae589d92, []int{59} -} - -func (m *Xml) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Xml.Unmarshal(m, b) -} -func (m *Xml) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Xml.Marshal(b, m, deterministic) -} -func (m *Xml) XXX_Merge(src proto.Message) { - xxx_messageInfo_Xml.Merge(m, src) -} -func (m *Xml) XXX_Size() int { - return xxx_messageInfo_Xml.Size(m) -} -func (m *Xml) XXX_DiscardUnknown() { - xxx_messageInfo_Xml.DiscardUnknown(m) -} - -var xxx_messageInfo_Xml proto.InternalMessageInfo - -func (m *Xml) GetName() string { - if m != nil { - return m.Name - } - return "" -} - -func (m *Xml) GetNamespace() string { - if m != nil { - return m.Namespace - } - return "" -} - -func (m *Xml) GetPrefix() string { - if m != nil { - return m.Prefix - } - return "" -} - -func (m *Xml) GetAttribute() bool { - if m != nil { - return m.Attribute - } - return false -} - -func (m *Xml) GetWrapped() bool { - if m != nil { - return m.Wrapped - } - return false -} - -func (m *Xml) GetVendorExtension() []*NamedAny { - if m != nil { - return m.VendorExtension - } - return nil -} - -func init() { - proto.RegisterType((*AdditionalPropertiesItem)(nil), "openapi.v2.AdditionalPropertiesItem") - proto.RegisterType((*Any)(nil), "openapi.v2.Any") - proto.RegisterType((*ApiKeySecurity)(nil), "openapi.v2.ApiKeySecurity") - proto.RegisterType((*BasicAuthenticationSecurity)(nil), "openapi.v2.BasicAuthenticationSecurity") - proto.RegisterType((*BodyParameter)(nil), "openapi.v2.BodyParameter") - proto.RegisterType((*Contact)(nil), "openapi.v2.Contact") - proto.RegisterType((*Default)(nil), "openapi.v2.Default") - proto.RegisterType((*Definitions)(nil), "openapi.v2.Definitions") - proto.RegisterType((*Document)(nil), "openapi.v2.Document") - proto.RegisterType((*Examples)(nil), "openapi.v2.Examples") - proto.RegisterType((*ExternalDocs)(nil), "openapi.v2.ExternalDocs") - proto.RegisterType((*FileSchema)(nil), "openapi.v2.FileSchema") - proto.RegisterType((*FormDataParameterSubSchema)(nil), "openapi.v2.FormDataParameterSubSchema") - proto.RegisterType((*Header)(nil), "openapi.v2.Header") - proto.RegisterType((*HeaderParameterSubSchema)(nil), "openapi.v2.HeaderParameterSubSchema") - proto.RegisterType((*Headers)(nil), "openapi.v2.Headers") - proto.RegisterType((*Info)(nil), "openapi.v2.Info") - proto.RegisterType((*ItemsItem)(nil), "openapi.v2.ItemsItem") - proto.RegisterType((*JsonReference)(nil), "openapi.v2.JsonReference") - proto.RegisterType((*License)(nil), "openapi.v2.License") - proto.RegisterType((*NamedAny)(nil), "openapi.v2.NamedAny") - proto.RegisterType((*NamedHeader)(nil), "openapi.v2.NamedHeader") - proto.RegisterType((*NamedParameter)(nil), "openapi.v2.NamedParameter") - proto.RegisterType((*NamedPathItem)(nil), "openapi.v2.NamedPathItem") - proto.RegisterType((*NamedResponse)(nil), "openapi.v2.NamedResponse") - proto.RegisterType((*NamedResponseValue)(nil), "openapi.v2.NamedResponseValue") - proto.RegisterType((*NamedSchema)(nil), "openapi.v2.NamedSchema") - proto.RegisterType((*NamedSecurityDefinitionsItem)(nil), "openapi.v2.NamedSecurityDefinitionsItem") - proto.RegisterType((*NamedString)(nil), "openapi.v2.NamedString") - proto.RegisterType((*NamedStringArray)(nil), "openapi.v2.NamedStringArray") - proto.RegisterType((*NonBodyParameter)(nil), "openapi.v2.NonBodyParameter") - proto.RegisterType((*Oauth2AccessCodeSecurity)(nil), "openapi.v2.Oauth2AccessCodeSecurity") - proto.RegisterType((*Oauth2ApplicationSecurity)(nil), "openapi.v2.Oauth2ApplicationSecurity") - proto.RegisterType((*Oauth2ImplicitSecurity)(nil), "openapi.v2.Oauth2ImplicitSecurity") - proto.RegisterType((*Oauth2PasswordSecurity)(nil), "openapi.v2.Oauth2PasswordSecurity") - proto.RegisterType((*Oauth2Scopes)(nil), "openapi.v2.Oauth2Scopes") - proto.RegisterType((*Operation)(nil), "openapi.v2.Operation") - proto.RegisterType((*Parameter)(nil), "openapi.v2.Parameter") - proto.RegisterType((*ParameterDefinitions)(nil), "openapi.v2.ParameterDefinitions") - proto.RegisterType((*ParametersItem)(nil), "openapi.v2.ParametersItem") - proto.RegisterType((*PathItem)(nil), "openapi.v2.PathItem") - proto.RegisterType((*PathParameterSubSchema)(nil), "openapi.v2.PathParameterSubSchema") - proto.RegisterType((*Paths)(nil), "openapi.v2.Paths") - proto.RegisterType((*PrimitivesItems)(nil), "openapi.v2.PrimitivesItems") - proto.RegisterType((*Properties)(nil), "openapi.v2.Properties") - proto.RegisterType((*QueryParameterSubSchema)(nil), "openapi.v2.QueryParameterSubSchema") - proto.RegisterType((*Response)(nil), "openapi.v2.Response") - proto.RegisterType((*ResponseDefinitions)(nil), "openapi.v2.ResponseDefinitions") - proto.RegisterType((*ResponseValue)(nil), "openapi.v2.ResponseValue") - proto.RegisterType((*Responses)(nil), "openapi.v2.Responses") - proto.RegisterType((*Schema)(nil), "openapi.v2.Schema") - proto.RegisterType((*SchemaItem)(nil), "openapi.v2.SchemaItem") - proto.RegisterType((*SecurityDefinitions)(nil), "openapi.v2.SecurityDefinitions") - proto.RegisterType((*SecurityDefinitionsItem)(nil), "openapi.v2.SecurityDefinitionsItem") - proto.RegisterType((*SecurityRequirement)(nil), "openapi.v2.SecurityRequirement") - proto.RegisterType((*StringArray)(nil), "openapi.v2.StringArray") - proto.RegisterType((*Tag)(nil), "openapi.v2.Tag") - proto.RegisterType((*TypeItem)(nil), "openapi.v2.TypeItem") - proto.RegisterType((*VendorExtension)(nil), "openapi.v2.VendorExtension") - proto.RegisterType((*Xml)(nil), "openapi.v2.Xml") -} - -func init() { proto.RegisterFile("OpenAPIv2/OpenAPIv2.proto", fileDescriptor_336adc04ae589d92) } - -var fileDescriptor_336adc04ae589d92 = []byte{ - // 3129 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x4b, 0x73, 0x1c, 0x57, - 0xd5, 0xf3, 0x7e, 0x1c, 0x69, 0x46, 0xa3, 0x96, 0x2c, 0xb7, 0x24, 0xc7, 0x71, 0xe4, 0x3c, 0x6c, - 0xe7, 0xb3, 0x9c, 0x4f, 0x29, 0x48, 0x05, 0x2a, 0x05, 0xf2, 0xab, 0xc6, 0xc4, 0x44, 0x4a, 0xcb, - 0x0e, 0x09, 0x04, 0xba, 0xae, 0x66, 0xee, 0x48, 0x9d, 0x74, 0xf7, 0x6d, 0x77, 0xf7, 0xc8, 0x1a, - 0x16, 0x2c, 0xa0, 0x8a, 0x35, 0x50, 0x59, 0x53, 0x15, 0x16, 0x14, 0x55, 0x59, 0xb0, 0x62, 0xc5, - 0x1f, 0x60, 0xc7, 0x3f, 0x60, 0x0d, 0x5b, 0xaa, 0x58, 0x51, 0x3c, 0xea, 0xbe, 0xfa, 0x31, 0x7d, - 0x7b, 0x1e, 0x96, 0x0b, 0x28, 0xd0, 0x6a, 0xe6, 0xde, 0x73, 0xee, 0xb9, 0xa7, 0x4f, 0x9f, 0xd7, - 0x3d, 0xe7, 0x36, 0xac, 0xef, 0x79, 0xd8, 0xdd, 0xdd, 0x7f, 0x70, 0xb2, 0x73, 0x2b, 0xfa, 0xb7, - 0xed, 0xf9, 0x24, 0x24, 0x1a, 0x10, 0x0f, 0xbb, 0xc8, 0xb3, 0xb6, 0x4f, 0x76, 0x36, 0xd6, 0x8f, - 0x08, 0x39, 0xb2, 0xf1, 0x2d, 0x06, 0x39, 0x1c, 0x0e, 0x6e, 0x21, 0x77, 0xc4, 0xd1, 0xb6, 0x1c, - 0xd0, 0x77, 0xfb, 0x7d, 0x2b, 0xb4, 0x88, 0x8b, 0xec, 0x7d, 0x9f, 0x78, 0xd8, 0x0f, 0x2d, 0x1c, - 0x3c, 0x08, 0xb1, 0xa3, 0xfd, 0x1f, 0xd4, 0x82, 0xde, 0x31, 0x76, 0x90, 0x5e, 0xbc, 0x52, 0xbc, - 0xb6, 0xb0, 0xa3, 0x6d, 0xc7, 0x34, 0xb7, 0x0f, 0x18, 0xa4, 0x5b, 0x30, 0x04, 0x8e, 0xb6, 0x01, - 0xf5, 0x43, 0x42, 0x6c, 0x8c, 0x5c, 0xbd, 0x74, 0xa5, 0x78, 0xad, 0xd1, 0x2d, 0x18, 0x72, 0xe2, - 0x76, 0x1d, 0xaa, 0xc4, 0xc5, 0x64, 0xb0, 0x75, 0x0f, 0xca, 0xbb, 0xee, 0x48, 0xbb, 0x01, 0xd5, - 0x13, 0x64, 0x0f, 0xb1, 0x20, 0xbc, 0xba, 0xcd, 0x19, 0xdc, 0x96, 0x0c, 0x6e, 0xef, 0xba, 0x23, - 0x83, 0xa3, 0x68, 0x1a, 0x54, 0x46, 0xc8, 0xb1, 0x19, 0xd1, 0xa6, 0xc1, 0xfe, 0x6f, 0x7d, 0x51, - 0x84, 0xf6, 0xae, 0x67, 0xbd, 0x8b, 0x47, 0x07, 0xb8, 0x37, 0xf4, 0xad, 0x70, 0x44, 0xd1, 0xc2, - 0x91, 0xc7, 0x29, 0x36, 0x0d, 0xf6, 0x9f, 0xce, 0xb9, 0xc8, 0xc1, 0x72, 0x29, 0xfd, 0xaf, 0xb5, - 0xa1, 0x64, 0xb9, 0x7a, 0x99, 0xcd, 0x94, 0x2c, 0x57, 0xbb, 0x02, 0x0b, 0x7d, 0x1c, 0xf4, 0x7c, - 0xcb, 0xa3, 0x32, 0xd0, 0x2b, 0x0c, 0x90, 0x9c, 0xd2, 0xbe, 0x06, 0x9d, 0x13, 0xec, 0xf6, 0x89, - 0x6f, 0xe2, 0xd3, 0x10, 0xbb, 0x01, 0x45, 0xab, 0x5e, 0x29, 0x33, 0xbe, 0x13, 0x02, 0x79, 0x0f, - 0x39, 0xb8, 0x4f, 0xf9, 0x5e, 0xe2, 0xd8, 0xf7, 0x24, 0xf2, 0xd6, 0x67, 0x45, 0xd8, 0xbc, 0x8d, - 0x02, 0xab, 0xb7, 0x3b, 0x0c, 0x8f, 0xb1, 0x1b, 0x5a, 0x3d, 0x44, 0x09, 0x4f, 0x64, 0x7d, 0x8c, - 0xad, 0xd2, 0x6c, 0x6c, 0x95, 0xe7, 0x61, 0xeb, 0x0f, 0x45, 0x68, 0xdd, 0x26, 0xfd, 0xd1, 0x3e, - 0xf2, 0x91, 0x83, 0x43, 0xec, 0x8f, 0x6f, 0x5a, 0xcc, 0x6e, 0x3a, 0x8b, 0x44, 0x37, 0xa0, 0xe1, - 0xe3, 0x27, 0x43, 0xcb, 0xc7, 0x7d, 0x26, 0xce, 0x86, 0x11, 0x8d, 0xb5, 0x1b, 0x91, 0x4a, 0x55, - 0xf3, 0x54, 0x2a, 0x52, 0x28, 0xd5, 0x03, 0xd6, 0xe6, 0x79, 0xc0, 0x1f, 0x17, 0xa1, 0x7e, 0x87, - 0xb8, 0x21, 0xea, 0x85, 0x11, 0xe3, 0xc5, 0x04, 0xe3, 0x1d, 0x28, 0x0f, 0x7d, 0xa9, 0x58, 0xf4, - 0xaf, 0xb6, 0x0a, 0x55, 0xec, 0x20, 0xcb, 0x16, 0x4f, 0xc3, 0x07, 0x4a, 0x46, 0x2a, 0xf3, 0x30, - 0xf2, 0x08, 0xea, 0x77, 0xf1, 0x00, 0x0d, 0xed, 0x50, 0x7b, 0x00, 0x17, 0x50, 0x64, 0x6f, 0xa6, - 0x17, 0x19, 0x9c, 0x5e, 0x9c, 0x40, 0x70, 0x15, 0x29, 0x4c, 0x74, 0xeb, 0x3b, 0xb0, 0x70, 0x17, - 0x0f, 0x2c, 0x97, 0x41, 0x02, 0xed, 0xe1, 0x64, 0xca, 0x17, 0x33, 0x94, 0x85, 0xb8, 0xd5, 0xc4, - 0xff, 0x58, 0x85, 0xc6, 0x5d, 0xd2, 0x1b, 0x3a, 0xd8, 0x0d, 0x35, 0x1d, 0xea, 0xc1, 0x53, 0x74, - 0x74, 0x84, 0x7d, 0x21, 0x3f, 0x39, 0xd4, 0x5e, 0x86, 0x8a, 0xe5, 0x0e, 0x08, 0x93, 0xe1, 0xc2, - 0x4e, 0x27, 0xb9, 0xc7, 0x03, 0x77, 0x40, 0x0c, 0x06, 0xa5, 0xc2, 0x3f, 0x26, 0x41, 0x28, 0xa4, - 0xca, 0xfe, 0x6b, 0x9b, 0xd0, 0x3c, 0x44, 0x01, 0x36, 0x3d, 0x14, 0x1e, 0x0b, 0xab, 0x6b, 0xd0, - 0x89, 0x7d, 0x14, 0x1e, 0xb3, 0x0d, 0x29, 0x77, 0x38, 0x60, 0x96, 0x46, 0x37, 0xe4, 0x43, 0xaa, - 0x5c, 0x3d, 0xe2, 0x06, 0x43, 0x0a, 0xaa, 0x31, 0x50, 0x34, 0xa6, 0x30, 0xcf, 0x27, 0xfd, 0x61, - 0x0f, 0x07, 0x7a, 0x9d, 0xc3, 0xe4, 0x58, 0x7b, 0x0d, 0xaa, 0x74, 0xa7, 0x40, 0x6f, 0x30, 0x4e, - 0x97, 0x93, 0x9c, 0xd2, 0x2d, 0x03, 0x83, 0xc3, 0xb5, 0xb7, 0xa9, 0x0d, 0x44, 0x52, 0xd5, 0x9b, - 0x0c, 0x3d, 0x25, 0xbc, 0x84, 0xd0, 0x8d, 0x24, 0xae, 0xf6, 0x75, 0x00, 0x4f, 0xda, 0x52, 0xa0, - 0x03, 0x5b, 0x79, 0x25, 0xbd, 0x91, 0x80, 0x26, 0x49, 0x24, 0xd6, 0x68, 0xef, 0x40, 0xd3, 0xc7, - 0x81, 0x47, 0xdc, 0x00, 0x07, 0xfa, 0x02, 0x23, 0xf0, 0x62, 0x92, 0x80, 0x21, 0x80, 0xc9, 0xf5, - 0xf1, 0x0a, 0xed, 0xab, 0xd0, 0x08, 0x84, 0x53, 0xd1, 0x17, 0xd9, 0x5b, 0x4f, 0xad, 0x96, 0x0e, - 0xc7, 0xe0, 0xd6, 0x48, 0x5f, 0xad, 0x11, 0x2d, 0xd0, 0x0c, 0x58, 0x95, 0xff, 0xcd, 0xa4, 0x04, - 0x5a, 0x59, 0x36, 0x24, 0xa1, 0x24, 0x1b, 0x2b, 0x41, 0x76, 0x52, 0xbb, 0x0a, 0x95, 0x10, 0x1d, - 0x05, 0x7a, 0x9b, 0x31, 0xb3, 0x94, 0xa4, 0xf1, 0x08, 0x1d, 0x19, 0x0c, 0xa8, 0xbd, 0x03, 0x2d, - 0x6a, 0x57, 0x3e, 0x55, 0xdb, 0x3e, 0xe9, 0x05, 0xfa, 0x12, 0xdb, 0x51, 0x4f, 0x62, 0xdf, 0x13, - 0x08, 0x77, 0x49, 0x2f, 0x30, 0x16, 0x71, 0x62, 0xa4, 0xb4, 0xce, 0xce, 0x3c, 0xd6, 0xf9, 0x18, - 0x1a, 0xf7, 0x4e, 0x91, 0xe3, 0xd9, 0x38, 0x78, 0x9e, 0xe6, 0xf9, 0xa3, 0x22, 0x2c, 0x26, 0xd9, - 0x9e, 0xc1, 0xbb, 0x66, 0x1d, 0xd2, 0x99, 0x9d, 0xfc, 0x3f, 0x4a, 0x00, 0xf7, 0x2d, 0x1b, 0x73, - 0x63, 0xd7, 0xd6, 0xa0, 0x36, 0x20, 0xbe, 0x83, 0x42, 0xb1, 0xbd, 0x18, 0x51, 0xc7, 0x17, 0x5a, - 0xa1, 0x2d, 0x1d, 0x3b, 0x1f, 0x8c, 0x73, 0x5c, 0xce, 0x72, 0x7c, 0x1d, 0xea, 0x7d, 0xee, 0xd9, - 0x98, 0x0d, 0x8f, 0xbd, 0x63, 0xca, 0x91, 0x84, 0xa7, 0xc2, 0x02, 0x37, 0xea, 0x38, 0x2c, 0xc8, - 0x08, 0x58, 0x4b, 0x44, 0xc0, 0x4d, 0x6a, 0x0b, 0xa8, 0x6f, 0x12, 0xd7, 0x1e, 0xe9, 0x75, 0x19, - 0x47, 0x50, 0x7f, 0xcf, 0xb5, 0x47, 0x59, 0x9d, 0x69, 0xcc, 0xa5, 0x33, 0xd7, 0xa1, 0x8e, 0xf9, - 0x2b, 0x17, 0x06, 0x9e, 0x65, 0x5b, 0xc0, 0x95, 0x6f, 0x00, 0xe6, 0x79, 0x03, 0x5f, 0xd4, 0x60, - 0xe3, 0x3e, 0xf1, 0x9d, 0xbb, 0x28, 0x44, 0x91, 0x03, 0x38, 0x18, 0x1e, 0x1e, 0xc8, 0xb4, 0x29, - 0x16, 0x4b, 0x71, 0x2c, 0x5a, 0xf2, 0xc8, 0x5a, 0xca, 0xcb, 0x55, 0xca, 0xf9, 0xf1, 0xb9, 0x92, - 0x08, 0x73, 0x37, 0x60, 0x19, 0xd9, 0x36, 0x79, 0x6a, 0x62, 0xc7, 0x0b, 0x47, 0x26, 0x4f, 0xbc, - 0xaa, 0x6c, 0xab, 0x25, 0x06, 0xb8, 0x47, 0xe7, 0x3f, 0x90, 0xc9, 0x56, 0xe6, 0x45, 0xc4, 0x3a, - 0x53, 0x4f, 0xe9, 0xcc, 0xff, 0x43, 0xd5, 0x0a, 0xb1, 0x23, 0x65, 0xbf, 0x99, 0xf2, 0x74, 0xbe, - 0xe5, 0x58, 0xa1, 0x75, 0xc2, 0x33, 0xc9, 0xc0, 0xe0, 0x98, 0xda, 0xeb, 0xb0, 0xdc, 0x23, 0xb6, - 0x8d, 0x7b, 0x94, 0x59, 0x53, 0x50, 0x6d, 0x32, 0xaa, 0x9d, 0x18, 0x70, 0x9f, 0xd3, 0x4f, 0xe8, - 0x16, 0x4c, 0xd1, 0x2d, 0x1d, 0xea, 0x0e, 0x3a, 0xb5, 0x9c, 0xa1, 0xc3, 0xbc, 0x66, 0xd1, 0x90, - 0x43, 0xba, 0x23, 0x3e, 0xed, 0xd9, 0xc3, 0xc0, 0x3a, 0xc1, 0xa6, 0xc4, 0x59, 0x64, 0x0f, 0xdf, - 0x89, 0x00, 0xdf, 0x14, 0xc8, 0x94, 0x8c, 0xe5, 0x32, 0x94, 0x96, 0x20, 0xc3, 0x87, 0x63, 0x64, - 0x04, 0x4e, 0x7b, 0x9c, 0x8c, 0x40, 0x7e, 0x01, 0xc0, 0x41, 0xa7, 0xa6, 0x8d, 0xdd, 0xa3, 0xf0, - 0x98, 0x79, 0xb3, 0xb2, 0xd1, 0x74, 0xd0, 0xe9, 0x43, 0x36, 0xc1, 0xc0, 0x96, 0x2b, 0xc1, 0x1d, - 0x01, 0xb6, 0x5c, 0x01, 0xd6, 0xa1, 0xee, 0xa1, 0x90, 0x2a, 0xab, 0xbe, 0xcc, 0x83, 0xad, 0x18, - 0x52, 0x8b, 0xa0, 0x74, 0xb9, 0xd0, 0x35, 0xb6, 0xae, 0xe1, 0xa0, 0x53, 0x26, 0x61, 0x06, 0xb4, - 0x5c, 0x01, 0x5c, 0x11, 0x40, 0xcb, 0xe5, 0xc0, 0x97, 0x60, 0x71, 0xe8, 0x5a, 0x4f, 0x86, 0x58, - 0xc0, 0x57, 0x19, 0xe7, 0x0b, 0x7c, 0x8e, 0xa3, 0x5c, 0x85, 0x0a, 0x76, 0x87, 0x8e, 0x7e, 0x21, - 0xeb, 0xaa, 0xa9, 0xa8, 0x19, 0x50, 0x7b, 0x11, 0x16, 0x9c, 0xa1, 0x1d, 0x5a, 0x9e, 0x8d, 0x4d, - 0x32, 0xd0, 0xd7, 0x98, 0x90, 0x40, 0x4e, 0xed, 0x0d, 0x94, 0xd6, 0x72, 0x71, 0x2e, 0x6b, 0xa9, - 0x42, 0xad, 0x8b, 0x51, 0x1f, 0xfb, 0xca, 0xb4, 0x38, 0xd6, 0xc5, 0x92, 0x5a, 0x17, 0xcb, 0x67, - 0xd3, 0xc5, 0xca, 0x74, 0x5d, 0xac, 0xce, 0xae, 0x8b, 0xb5, 0x19, 0x74, 0xb1, 0x3e, 0x5d, 0x17, - 0x1b, 0x33, 0xe8, 0x62, 0x73, 0x26, 0x5d, 0x84, 0xc9, 0xba, 0xb8, 0x30, 0x41, 0x17, 0x17, 0x27, - 0xe8, 0x62, 0x6b, 0x92, 0x2e, 0xb6, 0xa7, 0xe8, 0xe2, 0x52, 0xbe, 0x2e, 0x76, 0xe6, 0xd0, 0xc5, - 0xe5, 0x8c, 0x2e, 0x8e, 0x79, 0x4b, 0x6d, 0xb6, 0x23, 0xd4, 0xca, 0x3c, 0xda, 0xfa, 0xb7, 0x2a, - 0xe8, 0x5c, 0x5b, 0xff, 0x2d, 0x9e, 0x5d, 0x5a, 0x48, 0x55, 0x69, 0x21, 0x35, 0xb5, 0x85, 0xd4, - 0xcf, 0x66, 0x21, 0x8d, 0xe9, 0x16, 0xd2, 0x9c, 0xdd, 0x42, 0x60, 0x06, 0x0b, 0x59, 0x98, 0x6e, - 0x21, 0x8b, 0x33, 0x58, 0x48, 0x6b, 0x26, 0x0b, 0x69, 0x4f, 0xb6, 0x90, 0xa5, 0x09, 0x16, 0xd2, - 0x99, 0x60, 0x21, 0xcb, 0x93, 0x2c, 0x44, 0x9b, 0x62, 0x21, 0x2b, 0xf9, 0x16, 0xb2, 0x3a, 0x87, - 0x85, 0x5c, 0x98, 0xc9, 0x5b, 0xaf, 0xcd, 0xa3, 0xff, 0xdf, 0x82, 0x3a, 0x57, 0xff, 0x67, 0x38, - 0x7e, 0xf2, 0x85, 0x39, 0xc9, 0xf3, 0xe7, 0x25, 0xa8, 0xd0, 0x03, 0x64, 0x9c, 0x98, 0x16, 0x93, - 0x89, 0xa9, 0x0e, 0xf5, 0x13, 0xec, 0x07, 0x71, 0x65, 0x44, 0x0e, 0x67, 0x30, 0xa4, 0x6b, 0xd0, - 0x09, 0xb1, 0xef, 0x04, 0x26, 0x19, 0x98, 0x01, 0xf6, 0x4f, 0xac, 0x9e, 0x34, 0xaa, 0x36, 0x9b, - 0xdf, 0x1b, 0x1c, 0xf0, 0x59, 0xed, 0x26, 0xd4, 0x7b, 0xbc, 0x7c, 0x20, 0x9c, 0xfe, 0x4a, 0xf2, - 0x21, 0x44, 0x65, 0xc1, 0x90, 0x38, 0x14, 0xdd, 0xb6, 0x7a, 0xd8, 0x0d, 0x78, 0xfa, 0x34, 0x86, - 0xfe, 0x90, 0x83, 0x0c, 0x89, 0xa3, 0x14, 0x7e, 0x7d, 0x1e, 0xe1, 0xbf, 0x05, 0x4d, 0xa6, 0x0c, - 0xac, 0x56, 0x77, 0x23, 0x51, 0xab, 0x2b, 0x4f, 0x2e, 0xac, 0x6c, 0xdd, 0x85, 0xd6, 0x37, 0x02, - 0xe2, 0x1a, 0x78, 0x80, 0x7d, 0xec, 0xf6, 0xb0, 0xb6, 0x0c, 0x15, 0xd3, 0xc7, 0x03, 0x21, 0xe3, - 0xb2, 0x81, 0x07, 0xd3, 0xeb, 0x4f, 0x5b, 0x1e, 0xd4, 0xc5, 0x33, 0xcd, 0x58, 0x5c, 0x39, 0xf3, - 0x59, 0xe6, 0x1e, 0x34, 0x24, 0x50, 0xb9, 0xe5, 0x2b, 0xb2, 0xaa, 0x58, 0x52, 0x3b, 0x20, 0x0e, - 0xdd, 0x7a, 0x17, 0x16, 0x12, 0x0a, 0xa8, 0xa4, 0x74, 0x2d, 0x4d, 0x29, 0x25, 0x4c, 0xa1, 0xb7, - 0x82, 0xd8, 0xfb, 0xd0, 0x66, 0xc4, 0xe2, 0x22, 0x9a, 0x8a, 0xde, 0xeb, 0x69, 0x7a, 0x17, 0x94, - 0x45, 0x01, 0x49, 0x72, 0x0f, 0x5a, 0x82, 0x64, 0x78, 0xcc, 0xde, 0xad, 0x8a, 0xe2, 0x8d, 0x34, - 0xc5, 0xd5, 0xf1, 0x7a, 0x06, 0x5d, 0x38, 0x4e, 0x50, 0x56, 0x0f, 0xe6, 0x26, 0x28, 0x17, 0x4a, - 0x82, 0x1f, 0x81, 0x96, 0x22, 0x18, 0x9d, 0x1d, 0x32, 0x54, 0x6f, 0xa5, 0xa9, 0xae, 0xab, 0xa8, - 0xb2, 0xd5, 0xe3, 0x2f, 0x47, 0xc4, 0xd0, 0x79, 0x5f, 0x8e, 0xd0, 0x74, 0x41, 0xcc, 0x81, 0x4b, - 0x9c, 0x58, 0xb6, 0x34, 0x91, 0x2b, 0xd8, 0xb7, 0xd3, 0xd4, 0xaf, 0x4e, 0xa9, 0x7b, 0x24, 0xe5, - 0xfc, 0x96, 0xe4, 0x3d, 0xf4, 0x2d, 0xf7, 0x48, 0x49, 0x7d, 0x35, 0x49, 0xbd, 0x29, 0x17, 0x3e, - 0x86, 0x4e, 0x62, 0xe1, 0xae, 0xef, 0x23, 0xb5, 0x82, 0xdf, 0x4c, 0xf3, 0x96, 0xf2, 0xa9, 0x89, - 0xb5, 0x92, 0xec, 0x6f, 0xca, 0xd0, 0x79, 0x8f, 0xb8, 0xe9, 0x1a, 0x2f, 0x86, 0xcd, 0x63, 0xa6, - 0xc1, 0x66, 0x54, 0x77, 0x32, 0x83, 0xe1, 0xa1, 0x99, 0xaa, 0xf4, 0xbf, 0x9c, 0x55, 0xf8, 0x6c, - 0x82, 0xd3, 0x2d, 0x18, 0xfa, 0x71, 0x5e, 0xf2, 0x63, 0xc3, 0x65, 0x9a, 0x30, 0x98, 0x7d, 0x14, - 0x22, 0xf5, 0x4e, 0xfc, 0x19, 0x5e, 0x4d, 0xee, 0x94, 0x7f, 0x4c, 0xee, 0x16, 0x8c, 0x8d, 0x41, - 0xfe, 0x21, 0xfa, 0x10, 0x36, 0x9e, 0x0c, 0xb1, 0x3f, 0x52, 0xef, 0x54, 0xce, 0xbe, 0xc9, 0xf7, - 0x29, 0xb6, 0x72, 0x9b, 0x8b, 0x4f, 0xd4, 0x20, 0xcd, 0x84, 0x75, 0x0f, 0x85, 0xc7, 0xea, 0x2d, - 0x78, 0xf1, 0x63, 0x6b, 0xdc, 0x0a, 0x95, 0x3b, 0xac, 0x79, 0x4a, 0x48, 0xdc, 0x24, 0xf9, 0xbc, - 0x04, 0xfa, 0x1e, 0x1a, 0x86, 0xc7, 0x3b, 0xbb, 0xbd, 0x1e, 0x0e, 0x82, 0x3b, 0xa4, 0x8f, 0xa7, - 0xf5, 0x39, 0x06, 0x36, 0x79, 0x2a, 0xab, 0xf2, 0xf4, 0xbf, 0xf6, 0x06, 0x0d, 0x08, 0xc4, 0xc3, - 0xf2, 0x48, 0x94, 0x2a, 0x8d, 0x70, 0xea, 0x07, 0x0c, 0x6e, 0x08, 0x3c, 0x9a, 0x35, 0xd1, 0x69, - 0xe2, 0x5b, 0xdf, 0x67, 0xfd, 0x09, 0x93, 0xfa, 0x6f, 0x71, 0x20, 0x4a, 0x01, 0x1e, 0xfb, 0x36, - 0x4d, 0x60, 0x42, 0xf2, 0x29, 0xe6, 0x48, 0x3c, 0xff, 0x6c, 0xb0, 0x09, 0x0a, 0x1c, 0x0b, 0x1e, - 0xb5, 0xd9, 0x32, 0xef, 0xb9, 0x82, 0xdf, 0x5f, 0x8a, 0xb0, 0x2e, 0x64, 0xe4, 0x79, 0xf6, 0x2c, - 0x1d, 0x95, 0xe7, 0x23, 0xa4, 0xd4, 0x73, 0x57, 0x26, 0x3f, 0x77, 0x75, 0xb6, 0xe7, 0x9e, 0xab, - 0xa7, 0xf1, 0xc3, 0x12, 0xac, 0x71, 0xc6, 0x1e, 0x38, 0xf4, 0xb9, 0xad, 0xf0, 0x3f, 0x4d, 0x33, - 0xfe, 0x05, 0x42, 0xf8, 0x73, 0x51, 0x0a, 0x61, 0x1f, 0x05, 0xc1, 0x53, 0xe2, 0xf7, 0xff, 0x07, - 0xde, 0xfc, 0xc7, 0xb0, 0x98, 0xe4, 0xeb, 0x19, 0xfa, 0x3d, 0x2c, 0x42, 0xe4, 0x24, 0xdc, 0x3f, - 0xaf, 0x40, 0x73, 0xcf, 0xc3, 0x3e, 0x92, 0x87, 0x4d, 0x56, 0xb7, 0x2f, 0xb2, 0x3a, 0x2d, 0x2f, - 0xd3, 0xeb, 0x50, 0x0f, 0x86, 0x8e, 0x83, 0xfc, 0x91, 0xcc, 0xb9, 0xc5, 0x70, 0x86, 0x9c, 0x3b, - 0x53, 0xae, 0xad, 0xcc, 0x55, 0xae, 0x7d, 0x09, 0x16, 0x89, 0xe4, 0xcd, 0xb4, 0xfa, 0x52, 0xbc, - 0xd1, 0xdc, 0x83, 0x7e, 0xaa, 0xf7, 0x53, 0x1b, 0xeb, 0xfd, 0x24, 0x7b, 0x46, 0xf5, 0xb1, 0x9e, - 0xd1, 0x57, 0x52, 0x3d, 0x9b, 0x06, 0x13, 0xdd, 0x86, 0x32, 0x3d, 0xe3, 0xa1, 0x3e, 0xd9, 0xad, - 0x79, 0x33, 0xd9, 0xad, 0x69, 0x66, 0x33, 0x3b, 0x99, 0xe0, 0xa4, 0x7a, 0x34, 0x89, 0xd6, 0x16, - 0xa4, 0x5b, 0x5b, 0x97, 0x01, 0xfa, 0xd8, 0xf3, 0x71, 0x0f, 0x85, 0xb8, 0x2f, 0x4e, 0xbd, 0x89, - 0x99, 0xb3, 0x75, 0x77, 0x54, 0xea, 0xd7, 0x9a, 0x47, 0xfd, 0x7e, 0x59, 0x84, 0x66, 0x9c, 0x45, - 0xdc, 0x86, 0xf6, 0x21, 0xe9, 0x27, 0xe2, 0xad, 0x48, 0x1c, 0x52, 0x09, 0x5e, 0x2a, 0xf1, 0xe8, - 0x16, 0x8c, 0xd6, 0x61, 0x2a, 0x13, 0x79, 0x08, 0x9a, 0x4b, 0x5c, 0x73, 0x8c, 0x0e, 0x4f, 0x0b, - 0x2e, 0xa5, 0x98, 0x1a, 0xcb, 0x61, 0xba, 0x05, 0xa3, 0xe3, 0x8e, 0xcd, 0xc5, 0xd1, 0xf3, 0x08, - 0x56, 0x55, 0x7d, 0x36, 0x6d, 0x6f, 0xb2, 0xbd, 0x6c, 0x64, 0xc4, 0x10, 0x27, 0xe6, 0x6a, 0x93, - 0xf9, 0xac, 0x08, 0xed, 0xb4, 0x76, 0x68, 0x5f, 0x82, 0xe6, 0xb8, 0x44, 0xd4, 0xb9, 0x7e, 0xb7, - 0x60, 0xc4, 0x98, 0x54, 0x9a, 0x9f, 0x04, 0xc4, 0xa5, 0x67, 0x30, 0x7e, 0x22, 0x53, 0xa5, 0xcb, - 0xa9, 0x23, 0x1b, 0x95, 0xe6, 0x27, 0xc9, 0x89, 0xf8, 0xf9, 0x7f, 0x5f, 0x86, 0x46, 0x74, 0x74, - 0x50, 0x9c, 0xec, 0x5e, 0x83, 0xf2, 0x11, 0x0e, 0x55, 0x27, 0x91, 0xc8, 0xfe, 0x0d, 0x8a, 0x41, - 0x11, 0xbd, 0x61, 0x28, 0xfc, 0x63, 0x1e, 0xa2, 0x37, 0x0c, 0xb5, 0xeb, 0x50, 0xf1, 0x48, 0x20, - 0x3b, 0x40, 0x39, 0x98, 0x0c, 0x45, 0xbb, 0x09, 0xb5, 0x3e, 0xb6, 0x71, 0x88, 0xc5, 0x89, 0x3a, - 0x07, 0x59, 0x20, 0x69, 0xb7, 0xa0, 0x4e, 0x3c, 0xde, 0x86, 0xac, 0x4d, 0xc2, 0x97, 0x58, 0x94, - 0x15, 0x9a, 0x92, 0x8a, 0x22, 0x57, 0x1e, 0x2b, 0x14, 0x85, 0x9e, 0xc9, 0x3c, 0x14, 0xf6, 0x8e, - 0x45, 0xfb, 0x22, 0x07, 0x97, 0xe3, 0x8c, 0xb9, 0x89, 0xe6, 0x5c, 0x6e, 0xe2, 0xcc, 0x1d, 0xa4, - 0xbf, 0x56, 0x61, 0x4d, 0x9d, 0x4d, 0x9e, 0xd7, 0x18, 0xcf, 0x6b, 0x8c, 0xff, 0xed, 0x35, 0xc6, - 0xa7, 0x50, 0x65, 0x17, 0x34, 0x94, 0x94, 0x8a, 0x73, 0x50, 0xd2, 0x6e, 0x42, 0x85, 0xdd, 0x36, - 0x29, 0xb1, 0x45, 0xeb, 0x0a, 0x87, 0x2f, 0xea, 0x26, 0x0c, 0x6d, 0xeb, 0x67, 0x55, 0x58, 0x1a, - 0xd3, 0xda, 0xf3, 0x9e, 0xd4, 0x79, 0x4f, 0xea, 0x4c, 0x3d, 0x29, 0x95, 0x0e, 0x6b, 0xf3, 0x58, - 0xc3, 0xb7, 0x01, 0xe2, 0x14, 0xe4, 0x39, 0xdf, 0xf9, 0xfa, 0x55, 0x0d, 0x2e, 0xe6, 0x14, 0x46, - 0xce, 0xaf, 0x29, 0x9c, 0x5f, 0x53, 0x38, 0xbf, 0xa6, 0x10, 0x9b, 0xe1, 0xdf, 0x8b, 0xd0, 0x88, - 0xca, 0xe9, 0xd3, 0x2f, 0x76, 0x6d, 0x47, 0xdd, 0x19, 0x9e, 0x76, 0xaf, 0x65, 0x6b, 0xd6, 0x2c, - 0xf0, 0xc8, 0xab, 0xaf, 0x37, 0xa1, 0xce, 0x2b, 0xab, 0x32, 0x78, 0xac, 0x64, 0x0b, 0xb2, 0x81, - 0x21, 0x71, 0xb4, 0x37, 0xa0, 0x21, 0xae, 0x2b, 0xc9, 0x93, 0xf5, 0x6a, 0xfa, 0x64, 0xcd, 0x61, - 0x46, 0x84, 0x75, 0xf6, 0x3b, 0xcd, 0x18, 0x56, 0x14, 0x97, 0x11, 0xb5, 0xf7, 0x26, 0x3b, 0xa4, - 0x6c, 0xcc, 0x8d, 0x5a, 0x0b, 0x6a, 0x97, 0xf4, 0x93, 0x22, 0xb4, 0xd2, 0x5d, 0x86, 0x1d, 0xea, - 0x88, 0xf8, 0x44, 0x74, 0x7b, 0x5c, 0x71, 0xe6, 0xee, 0x16, 0x8c, 0x08, 0xef, 0xf9, 0x9e, 0xaf, - 0x7e, 0x5a, 0x84, 0x66, 0x74, 0xb2, 0xd7, 0xee, 0x40, 0x4b, 0x6e, 0x63, 0xf6, 0x48, 0x1f, 0x8b, - 0x07, 0xbd, 0x9c, 0xfb, 0xa0, 0xbc, 0xdb, 0xb1, 0x28, 0x17, 0xdd, 0x21, 0x7d, 0x75, 0x2b, 0xb0, - 0x34, 0xcf, 0xdb, 0xf8, 0x75, 0x13, 0x6a, 0xc2, 0x51, 0x2b, 0x4e, 0x7c, 0x79, 0x09, 0x4a, 0xd4, - 0x5b, 0x2d, 0x4f, 0xb8, 0xf4, 0x57, 0x99, 0x78, 0xe9, 0x6f, 0x5a, 0xe2, 0x31, 0x66, 0x89, 0xb5, - 0x8c, 0x25, 0x26, 0x5c, 0x62, 0x7d, 0x06, 0x97, 0xd8, 0x98, 0xee, 0x12, 0x9b, 0x33, 0xb8, 0x44, - 0x98, 0xc9, 0x25, 0x2e, 0x4c, 0x76, 0x89, 0x8b, 0x13, 0x5c, 0x62, 0x6b, 0x82, 0x4b, 0x6c, 0x4f, - 0x72, 0x89, 0x4b, 0x53, 0x5c, 0x62, 0x27, 0xeb, 0x12, 0x5f, 0x81, 0x36, 0x25, 0x9e, 0x30, 0x36, - 0x7e, 0x12, 0x68, 0x39, 0xe8, 0x34, 0x91, 0x2b, 0x50, 0x34, 0xcb, 0x4d, 0xa2, 0x69, 0x02, 0xcd, - 0x72, 0x13, 0x68, 0xc9, 0x40, 0xbf, 0x32, 0x76, 0x4d, 0x73, 0xa6, 0x13, 0xc1, 0x47, 0x79, 0x2e, - 0xe0, 0x42, 0xb6, 0xb5, 0x94, 0xf7, 0xe9, 0x89, 0xda, 0x1b, 0x68, 0xd7, 0x44, 0xd8, 0x5f, 0xcb, - 0xda, 0xfd, 0xa3, 0x91, 0x87, 0x79, 0xee, 0xce, 0x92, 0x81, 0xd7, 0x65, 0xd0, 0xbf, 0x98, 0x3d, - 0xdc, 0x47, 0x4d, 0x73, 0x19, 0xee, 0xaf, 0x43, 0x0d, 0xd9, 0x36, 0xd5, 0x4f, 0x3d, 0xb7, 0x77, - 0x5e, 0x45, 0xb6, 0xbd, 0x37, 0xd0, 0xbe, 0x0c, 0x90, 0x78, 0xa2, 0xf5, 0xac, 0x33, 0x8f, 0xb9, - 0x35, 0x12, 0x98, 0xda, 0xcb, 0xd0, 0xea, 0x5b, 0xd4, 0x82, 0x1c, 0xcb, 0x45, 0x21, 0xf1, 0xf5, - 0x0d, 0xa6, 0x20, 0xe9, 0xc9, 0xf4, 0x95, 0xd7, 0xcd, 0xb1, 0x2b, 0xaf, 0x2f, 0x41, 0xf9, 0xd4, - 0xb1, 0xf5, 0x4b, 0x59, 0x8b, 0xfb, 0xd0, 0xb1, 0x0d, 0x0a, 0xcb, 0x96, 0x59, 0x5f, 0x78, 0xd6, - 0x5b, 0xb1, 0x97, 0x9f, 0xe1, 0x56, 0xec, 0x8b, 0xf3, 0x78, 0xac, 0x1f, 0x00, 0xc4, 0x71, 0x6f, - 0xce, 0x2f, 0x8d, 0xde, 0x86, 0x85, 0x81, 0x65, 0x63, 0x33, 0x3f, 0xa4, 0xc6, 0x37, 0x9e, 0xbb, - 0x05, 0x03, 0x06, 0xd1, 0x28, 0xf6, 0xe2, 0x21, 0xac, 0x28, 0xba, 0xb9, 0xda, 0x77, 0x27, 0xc7, - 0xaf, 0x6b, 0xd9, 0x84, 0x3a, 0xa7, 0x25, 0xac, 0x0e, 0x67, 0x7f, 0xaa, 0xc0, 0xc5, 0xbc, 0x66, - 0xb4, 0x03, 0x2f, 0x1c, 0xa2, 0xc0, 0xea, 0x99, 0x28, 0xf5, 0x95, 0x90, 0x19, 0xd5, 0x7c, 0xb9, - 0x68, 0x5e, 0x4b, 0x55, 0x58, 0xf3, 0xbf, 0x2a, 0xea, 0x16, 0x8c, 0xcd, 0xc3, 0x09, 0x1f, 0x1d, - 0xdd, 0x87, 0x0e, 0xf2, 0x2c, 0xf3, 0x53, 0x3c, 0x8a, 0x77, 0xe0, 0x92, 0x4c, 0xd5, 0xb5, 0xd2, - 0x5f, 0x59, 0x75, 0x0b, 0x46, 0x1b, 0xa5, 0xbf, 0xbb, 0xfa, 0x1e, 0xe8, 0x84, 0xb5, 0x25, 0x4c, - 0x4b, 0x34, 0xa4, 0x62, 0x7a, 0xe5, 0x6c, 0x57, 0x54, 0xdd, 0xbb, 0xea, 0x16, 0x8c, 0x35, 0xa2, - 0xee, 0x6a, 0xc5, 0xf4, 0x3d, 0xd1, 0xeb, 0x89, 0xe9, 0x57, 0xf2, 0xe8, 0x8f, 0xb7, 0x85, 0x62, - 0xfa, 0x99, 0x86, 0xd1, 0x11, 0x6c, 0x0a, 0xfa, 0x28, 0x6e, 0x24, 0xc6, 0x5b, 0xf0, 0x00, 0xf7, - 0x4a, 0x76, 0x0b, 0x45, 0xdb, 0xb1, 0x5b, 0x30, 0xd6, 0x49, 0x6e, 0x4f, 0x12, 0xc7, 0x1b, 0xb1, - 0xae, 0x2e, 0x4b, 0x17, 0xe2, 0x8d, 0x6a, 0x59, 0xef, 0x98, 0xd7, 0x03, 0xee, 0x16, 0x0c, 0x21, - 0x93, 0x2c, 0x2c, 0xd6, 0xf0, 0xe3, 0x58, 0xc3, 0x13, 0x2d, 0x01, 0xed, 0xfd, 0xc9, 0x1a, 0x7e, - 0x29, 0xa7, 0x6d, 0xc4, 0x2f, 0x16, 0xa8, 0xb5, 0xfa, 0x2a, 0x2c, 0x24, 0x6f, 0x2e, 0xac, 0xc6, - 0x1f, 0xf7, 0x95, 0xe3, 0x3b, 0x0e, 0xbf, 0x2d, 0x42, 0xf9, 0x11, 0x52, 0xdf, 0x8a, 0x98, 0xfe, - 0xb1, 0x5b, 0xc6, 0xb3, 0x95, 0xcf, 0xfc, 0x8d, 0xc8, 0x5c, 0x5f, 0x70, 0x5d, 0x81, 0x86, 0x8c, - 0x30, 0x39, 0xcf, 0xf7, 0x31, 0x2c, 0x7d, 0x30, 0x56, 0x6f, 0x7a, 0x8e, 0x1f, 0x93, 0xfc, 0xae, - 0x08, 0xe5, 0x0f, 0x1d, 0x5b, 0x29, 0xbd, 0x4b, 0xd0, 0xa4, 0xbf, 0x81, 0x87, 0x7a, 0xf2, 0x5e, - 0x49, 0x3c, 0x41, 0x93, 0x3f, 0xcf, 0xc7, 0x03, 0xeb, 0x54, 0x64, 0x79, 0x62, 0x44, 0x57, 0xa1, - 0x30, 0xf4, 0xad, 0xc3, 0x61, 0x88, 0xc5, 0x67, 0x7a, 0xf1, 0x04, 0x4d, 0x65, 0x9e, 0xfa, 0xc8, - 0xf3, 0x70, 0x5f, 0x1c, 0xc1, 0xe5, 0xf0, 0xcc, 0x7d, 0xcc, 0xdb, 0xaf, 0x42, 0x9b, 0xf8, 0x47, - 0x12, 0xd7, 0x3c, 0xd9, 0xb9, 0xbd, 0x28, 0xbe, 0x5d, 0xdd, 0xf7, 0x49, 0x48, 0xf6, 0x8b, 0xbf, - 0x28, 0x95, 0xf7, 0x76, 0x0f, 0x0e, 0x6b, 0xec, 0x63, 0xd0, 0x37, 0xff, 0x19, 0x00, 0x00, 0xff, - 0xff, 0xd4, 0x0a, 0xef, 0xca, 0xe4, 0x3a, 0x00, 0x00, -} diff --git a/vendor/github.com/googleapis/gnostic/OpenAPIv2/README.md b/vendor/github.com/googleapis/gnostic/OpenAPIv2/README.md deleted file mode 100644 index 836fb32a..00000000 --- a/vendor/github.com/googleapis/gnostic/OpenAPIv2/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenAPI v2 Protocol Buffer Models - -This directory contains a Protocol Buffer-language model -and related code for supporting OpenAPI v2. - -Gnostic applications and plugins can use OpenAPIv2.proto -to generate Protocol Buffer support code for their preferred languages. - -OpenAPIv2.go is used by Gnostic to read JSON and YAML OpenAPI -descriptions into the Protocol Buffer-based datastructures -generated from OpenAPIv2.proto. - -OpenAPIv2.proto and OpenAPIv2.go are generated by the Gnostic -compiler generator, and OpenAPIv2.pb.go is generated by -protoc, the Protocol Buffer compiler, and protoc-gen-go, the -Protocol Buffer Go code generation plugin. diff --git a/vendor/github.com/googleapis/gnostic/compiler/README.md b/vendor/github.com/googleapis/gnostic/compiler/README.md index 848b16c6..ee9783d2 100644 --- a/vendor/github.com/googleapis/gnostic/compiler/README.md +++ b/vendor/github.com/googleapis/gnostic/compiler/README.md @@ -1,3 +1,4 @@ # Compiler support code -This directory contains compiler support code used by Gnostic and Gnostic extensions. \ No newline at end of file +This directory contains compiler support code used by Gnostic and Gnostic +extensions. diff --git a/vendor/github.com/googleapis/gnostic/compiler/context.go b/vendor/github.com/googleapis/gnostic/compiler/context.go index a64c1b75..1250a6c5 100644 --- a/vendor/github.com/googleapis/gnostic/compiler/context.go +++ b/vendor/github.com/googleapis/gnostic/compiler/context.go @@ -1,4 +1,4 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2017 Google LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/vendor/github.com/googleapis/gnostic/compiler/error.go b/vendor/github.com/googleapis/gnostic/compiler/error.go index d8672c10..7db23997 100644 --- a/vendor/github.com/googleapis/gnostic/compiler/error.go +++ b/vendor/github.com/googleapis/gnostic/compiler/error.go @@ -1,4 +1,4 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2017 Google LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/vendor/github.com/googleapis/gnostic/compiler/extension-handler.go b/vendor/github.com/googleapis/gnostic/compiler/extension-handler.go deleted file mode 100644 index 1f85b650..00000000 --- a/vendor/github.com/googleapis/gnostic/compiler/extension-handler.go +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright 2017 Google Inc. All Rights Reserved. -// -// 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 compiler - -import ( - "bytes" - "fmt" - "os/exec" - - "strings" - - "errors" - - "github.com/golang/protobuf/proto" - "github.com/golang/protobuf/ptypes/any" - ext_plugin "github.com/googleapis/gnostic/extensions" - yaml "gopkg.in/yaml.v2" -) - -// ExtensionHandler describes a binary that is called by the compiler to handle specification extensions. -type ExtensionHandler struct { - Name string -} - -// HandleExtension calls a binary extension handler. -func HandleExtension(context *Context, in interface{}, extensionName string) (bool, *any.Any, error) { - handled := false - var errFromPlugin error - var outFromPlugin *any.Any - - if context != nil && context.ExtensionHandlers != nil && len(*(context.ExtensionHandlers)) != 0 { - for _, customAnyProtoGenerator := range *(context.ExtensionHandlers) { - outFromPlugin, errFromPlugin = customAnyProtoGenerator.handle(in, extensionName) - if outFromPlugin == nil { - continue - } else { - handled = true - break - } - } - } - return handled, outFromPlugin, errFromPlugin -} - -func (extensionHandlers *ExtensionHandler) handle(in interface{}, extensionName string) (*any.Any, error) { - if extensionHandlers.Name != "" { - binary, _ := yaml.Marshal(in) - - request := &ext_plugin.ExtensionHandlerRequest{} - - version := &ext_plugin.Version{} - version.Major = 0 - version.Minor = 1 - version.Patch = 0 - request.CompilerVersion = version - - request.Wrapper = &ext_plugin.Wrapper{} - - request.Wrapper.Version = "v2" - request.Wrapper.Yaml = string(binary) - request.Wrapper.ExtensionName = extensionName - - requestBytes, _ := proto.Marshal(request) - cmd := exec.Command(extensionHandlers.Name) - cmd.Stdin = bytes.NewReader(requestBytes) - output, err := cmd.Output() - - if err != nil { - fmt.Printf("Error: %+v\n", err) - return nil, err - } - response := &ext_plugin.ExtensionHandlerResponse{} - err = proto.Unmarshal(output, response) - if err != nil { - fmt.Printf("Error: %+v\n", err) - fmt.Printf("%s\n", string(output)) - return nil, err - } - if !response.Handled { - return nil, nil - } - if len(response.Error) != 0 { - message := fmt.Sprintf("Errors when parsing: %+v for field %s by vendor extension handler %s. Details %+v", in, extensionName, extensionHandlers.Name, strings.Join(response.Error, ",")) - return nil, errors.New(message) - } - return response.Value, nil - } - return nil, nil -} diff --git a/vendor/github.com/googleapis/gnostic/compiler/extensions.go b/vendor/github.com/googleapis/gnostic/compiler/extensions.go new file mode 100644 index 00000000..20848a0a --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/compiler/extensions.go @@ -0,0 +1,85 @@ +// Copyright 2017 Google LLC. All Rights Reserved. +// +// 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 compiler + +import ( + "bytes" + "fmt" + "os/exec" + "strings" + + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes/any" + extensions "github.com/googleapis/gnostic/extensions" + yaml "gopkg.in/yaml.v3" +) + +// ExtensionHandler describes a binary that is called by the compiler to handle specification extensions. +type ExtensionHandler struct { + Name string +} + +// CallExtension calls a binary extension handler. +func CallExtension(context *Context, in *yaml.Node, extensionName string) (handled bool, response *any.Any, err error) { + if context == nil || context.ExtensionHandlers == nil { + return false, nil, nil + } + handled = false + for _, handler := range *(context.ExtensionHandlers) { + response, err = handler.handle(in, extensionName) + if response == nil { + continue + } else { + handled = true + break + } + } + return handled, response, err +} + +func (extensionHandlers *ExtensionHandler) handle(in *yaml.Node, extensionName string) (*any.Any, error) { + if extensionHandlers.Name != "" { + yamlData, _ := yaml.Marshal(in) + request := &extensions.ExtensionHandlerRequest{ + CompilerVersion: &extensions.Version{ + Major: 0, + Minor: 1, + Patch: 0, + }, + Wrapper: &extensions.Wrapper{ + Version: "unknown", // TODO: set this to the type/version of spec being parsed. + Yaml: string(yamlData), + ExtensionName: extensionName, + }, + } + requestBytes, _ := proto.Marshal(request) + cmd := exec.Command(extensionHandlers.Name) + cmd.Stdin = bytes.NewReader(requestBytes) + output, err := cmd.Output() + if err != nil { + return nil, err + } + response := &extensions.ExtensionHandlerResponse{} + err = proto.Unmarshal(output, response) + if err != nil || !response.Handled { + return nil, err + } + if len(response.Errors) != 0 { + return nil, fmt.Errorf("Errors when parsing: %+v for field %s by vendor extension handler %s. Details %+v", in, extensionName, extensionHandlers.Name, strings.Join(response.Errors, ",")) + } + return response.Value, nil + } + return nil, nil +} diff --git a/vendor/github.com/googleapis/gnostic/compiler/helpers.go b/vendor/github.com/googleapis/gnostic/compiler/helpers.go index 76df635f..a580f40a 100644 --- a/vendor/github.com/googleapis/gnostic/compiler/helpers.go +++ b/vendor/github.com/googleapis/gnostic/compiler/helpers.go @@ -1,4 +1,4 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2017 Google LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,56 +16,63 @@ package compiler import ( "fmt" - "gopkg.in/yaml.v2" "regexp" "sort" "strconv" + + "github.com/googleapis/gnostic/jsonschema" + "gopkg.in/yaml.v3" ) // compiler helper functions, usually called from generated code -// UnpackMap gets a yaml.MapSlice if possible. -func UnpackMap(in interface{}) (yaml.MapSlice, bool) { - m, ok := in.(yaml.MapSlice) - if ok { - return m, true - } - // do we have an empty array? - a, ok := in.([]interface{}) - if ok && len(a) == 0 { - // if so, return an empty map - return yaml.MapSlice{}, true +// UnpackMap gets a *yaml.Node if possible. +func UnpackMap(in *yaml.Node) (*yaml.Node, bool) { + if in == nil { + return nil, false } - return nil, false + return in, true } -// SortedKeysForMap returns the sorted keys of a yaml.MapSlice. -func SortedKeysForMap(m yaml.MapSlice) []string { +// SortedKeysForMap returns the sorted keys of a yamlv2.MapSlice. +func SortedKeysForMap(m *yaml.Node) []string { keys := make([]string, 0) - for _, item := range m { - keys = append(keys, item.Key.(string)) + if m.Kind == yaml.MappingNode { + for i := 0; i < len(m.Content); i += 2 { + keys = append(keys, m.Content[i].Value) + } } sort.Strings(keys) return keys } -// MapHasKey returns true if a yaml.MapSlice contains a specified key. -func MapHasKey(m yaml.MapSlice, key string) bool { - for _, item := range m { - itemKey, ok := item.Key.(string) - if ok && key == itemKey { - return true +// MapHasKey returns true if a yamlv2.MapSlice contains a specified key. +func MapHasKey(m *yaml.Node, key string) bool { + if m == nil { + return false + } + if m.Kind == yaml.MappingNode { + for i := 0; i < len(m.Content); i += 2 { + itemKey := m.Content[i].Value + if key == itemKey { + return true + } } } return false } // MapValueForKey gets the value of a map value for a specified key. -func MapValueForKey(m yaml.MapSlice, key string) interface{} { - for _, item := range m { - itemKey, ok := item.Key.(string) - if ok && key == itemKey { - return item.Value +func MapValueForKey(m *yaml.Node, key string) *yaml.Node { + if m == nil { + return nil + } + if m.Kind == yaml.MappingNode { + for i := 0; i < len(m.Content); i += 2 { + itemKey := m.Content[i].Value + if key == itemKey { + return m.Content[i+1] + } } } return nil @@ -83,8 +90,116 @@ func ConvertInterfaceArrayToStringArray(interfaceArray []interface{}) []string { return stringArray } +// SequenceNodeForNode returns a node if it is a SequenceNode. +func SequenceNodeForNode(node *yaml.Node) (*yaml.Node, bool) { + if node.Kind != yaml.SequenceNode { + return nil, false + } + return node, true +} + +// BoolForScalarNode returns the bool value of a node. +func BoolForScalarNode(node *yaml.Node) (bool, bool) { + if node == nil { + return false, false + } + if node.Kind == yaml.DocumentNode { + return BoolForScalarNode(node.Content[0]) + } + if node.Kind != yaml.ScalarNode { + return false, false + } + if node.Tag != "!!bool" { + return false, false + } + v, err := strconv.ParseBool(node.Value) + if err != nil { + return false, false + } + return v, true +} + +// IntForScalarNode returns the integer value of a node. +func IntForScalarNode(node *yaml.Node) (int64, bool) { + if node == nil { + return 0, false + } + if node.Kind == yaml.DocumentNode { + return IntForScalarNode(node.Content[0]) + } + if node.Kind != yaml.ScalarNode { + return 0, false + } + if node.Tag != "!!int" { + return 0, false + } + v, err := strconv.ParseInt(node.Value, 10, 64) + if err != nil { + return 0, false + } + return v, true +} + +// FloatForScalarNode returns the float value of a node. +func FloatForScalarNode(node *yaml.Node) (float64, bool) { + if node == nil { + return 0.0, false + } + if node.Kind == yaml.DocumentNode { + return FloatForScalarNode(node.Content[0]) + } + if node.Kind != yaml.ScalarNode { + return 0.0, false + } + if (node.Tag != "!!int") && (node.Tag != "!!float") { + return 0.0, false + } + v, err := strconv.ParseFloat(node.Value, 64) + if err != nil { + return 0.0, false + } + return v, true +} + +// StringForScalarNode returns the string value of a node. +func StringForScalarNode(node *yaml.Node) (string, bool) { + if node == nil { + return "", false + } + if node.Kind == yaml.DocumentNode { + return StringForScalarNode(node.Content[0]) + } + switch node.Kind { + case yaml.ScalarNode: + switch node.Tag { + case "!!int": + return node.Value, true + case "!!str": + return node.Value, true + case "!!null": + return "", true + default: + return "", false + } + default: + return "", false + } +} + +// StringArrayForSequenceNode converts a sequence node to an array of strings, if possible. +func StringArrayForSequenceNode(node *yaml.Node) []string { + stringArray := make([]string, 0) + for _, item := range node.Content { + v, ok := StringForScalarNode(item) + if ok { + stringArray = append(stringArray, v) + } + } + return stringArray +} + // MissingKeysInMap identifies which keys from a list of required keys are not in a map. -func MissingKeysInMap(m yaml.MapSlice, requiredKeys []string) []string { +func MissingKeysInMap(m *yaml.Node, requiredKeys []string) []string { missingKeys := make([]string, 0) for _, k := range requiredKeys { if !MapHasKey(m, k) { @@ -95,64 +210,100 @@ func MissingKeysInMap(m yaml.MapSlice, requiredKeys []string) []string { } // InvalidKeysInMap returns keys in a map that don't match a list of allowed keys and patterns. -func InvalidKeysInMap(m yaml.MapSlice, allowedKeys []string, allowedPatterns []*regexp.Regexp) []string { +func InvalidKeysInMap(m *yaml.Node, allowedKeys []string, allowedPatterns []*regexp.Regexp) []string { invalidKeys := make([]string, 0) - for _, item := range m { - itemKey, ok := item.Key.(string) - if ok { - key := itemKey - found := false - // does the key match an allowed key? - for _, allowedKey := range allowedKeys { - if key == allowedKey { + if m == nil || m.Kind != yaml.MappingNode { + return invalidKeys + } + for i := 0; i < len(m.Content); i += 2 { + key := m.Content[i].Value + found := false + // does the key match an allowed key? + for _, allowedKey := range allowedKeys { + if key == allowedKey { + found = true + break + } + } + if !found { + // does the key match an allowed pattern? + for _, allowedPattern := range allowedPatterns { + if allowedPattern.MatchString(key) { found = true break } } if !found { - // does the key match an allowed pattern? - for _, allowedPattern := range allowedPatterns { - if allowedPattern.MatchString(key) { - found = true - break - } - } - if !found { - invalidKeys = append(invalidKeys, key) - } + invalidKeys = append(invalidKeys, key) } } } return invalidKeys } -// DescribeMap describes a map (for debugging purposes). -func DescribeMap(in interface{}, indent string) string { - description := "" - m, ok := in.(map[string]interface{}) - if ok { - keys := make([]string, 0) - for k := range m { - keys = append(keys, k) - } - sort.Strings(keys) - for _, k := range keys { - v := m[k] - description += fmt.Sprintf("%s%s:\n", indent, k) - description += DescribeMap(v, indent+" ") - } - return description +// NewMappingNode creates a new Mapping node. +func NewMappingNode() *yaml.Node { + return &yaml.Node{ + Kind: yaml.MappingNode, + Content: make([]*yaml.Node, 0), } - a, ok := in.([]interface{}) - if ok { - for i, v := range a { - description += fmt.Sprintf("%s%d:\n", indent, i) - description += DescribeMap(v, indent+" ") - } - return description +} + +// NewSequenceNode creates a new Sequence node. +func NewSequenceNode() *yaml.Node { + node := &yaml.Node{ + Kind: yaml.SequenceNode, + Content: make([]*yaml.Node, 0), + } + return node +} + +// NewScalarNodeForString creates a new node to hold a string. +func NewScalarNodeForString(s string) *yaml.Node { + return &yaml.Node{ + Kind: yaml.ScalarNode, + Tag: "!!str", + Value: s, + } +} + +// NewSequenceNodeForStringArray creates a new node to hold an array of strings. +func NewSequenceNodeForStringArray(strings []string) *yaml.Node { + node := &yaml.Node{ + Kind: yaml.SequenceNode, + Content: make([]*yaml.Node, 0), + } + for _, s := range strings { + node.Content = append(node.Content, NewScalarNodeForString(s)) + } + return node +} + +// NewScalarNodeForBool creates a new node to hold a bool. +func NewScalarNodeForBool(b bool) *yaml.Node { + return &yaml.Node{ + Kind: yaml.ScalarNode, + Tag: "!!bool", + Value: fmt.Sprintf("%t", b), + } +} + +// NewScalarNodeForFloat creates a new node to hold a float. +func NewScalarNodeForFloat(f float64) *yaml.Node { + return &yaml.Node{ + Kind: yaml.ScalarNode, + Tag: "!!float", + Value: fmt.Sprintf("%g", f), + } +} + +// NewScalarNodeForInt creates a new node to hold an integer. +func NewScalarNodeForInt(i int64) *yaml.Node { + return &yaml.Node{ + Kind: yaml.ScalarNode, + Tag: "!!int", + Value: fmt.Sprintf("%d", i), } - description += fmt.Sprintf("%s%+v\n", indent, in) - return description } // PluralProperties returns the string "properties" pluralized. @@ -195,3 +346,40 @@ func StringValue(item interface{}) (value string, ok bool) { } return "", false } + +// Description returns a human-readable represention of an item. +func Description(item interface{}) string { + value, ok := item.(*yaml.Node) + if ok { + return jsonschema.Render(value) + } + return fmt.Sprintf("%+v", item) +} + +// Display returns a description of a node for use in error messages. +func Display(node *yaml.Node) string { + switch node.Kind { + case yaml.ScalarNode: + switch node.Tag { + case "!!str": + return fmt.Sprintf("%s (string)", node.Value) + } + } + return fmt.Sprintf("%+v (%T)", node, node) +} + +// Marshal creates a yaml version of a structure in our preferred style +func Marshal(in *yaml.Node) []byte { + clearStyle(in) + //bytes, _ := yaml.Marshal(&yaml.Node{Kind: yaml.DocumentNode, Content: []*yaml.Node{in}}) + bytes, _ := yaml.Marshal(in) + + return bytes +} + +func clearStyle(node *yaml.Node) { + node.Style = 0 + for _, c := range node.Content { + clearStyle(c) + } +} diff --git a/vendor/github.com/googleapis/gnostic/compiler/main.go b/vendor/github.com/googleapis/gnostic/compiler/main.go index 9713a21c..ce9fcc45 100644 --- a/vendor/github.com/googleapis/gnostic/compiler/main.go +++ b/vendor/github.com/googleapis/gnostic/compiler/main.go @@ -1,4 +1,4 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2017 Google LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/vendor/github.com/googleapis/gnostic/compiler/reader.go b/vendor/github.com/googleapis/gnostic/compiler/reader.go index 25affd06..be0e8b40 100644 --- a/vendor/github.com/googleapis/gnostic/compiler/reader.go +++ b/vendor/github.com/googleapis/gnostic/compiler/reader.go @@ -1,4 +1,4 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2017 Google LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,6 @@ package compiler import ( - "errors" "fmt" "io/ioutil" "log" @@ -23,18 +22,30 @@ import ( "net/url" "path/filepath" "strings" + "sync" - yaml "gopkg.in/yaml.v2" + yaml "gopkg.in/yaml.v3" ) +var verboseReader = false + var fileCache map[string][]byte -var infoCache map[string]interface{} -var count int64 +var infoCache map[string]*yaml.Node -var verboseReader = false var fileCacheEnable = true var infoCacheEnable = true +// These locks are used to synchronize accesses to the fileCache and infoCache +// maps (above). They are global state and can throw thread-related errors +// when modified from separate goroutines. The general strategy is to protect +// all public functions in this file with mutex Lock() calls. As a result, to +// avoid deadlock, these public functions should not call other public +// functions, so some public functions have private equivalents. +// In the future, we might consider replacing the maps with sync.Map and +// eliminating these mutexes. +var fileCacheMutex sync.Mutex +var infoCacheMutex sync.Mutex + func initializeFileCache() { if fileCache == nil { fileCache = make(map[string][]byte, 0) @@ -43,19 +54,42 @@ func initializeFileCache() { func initializeInfoCache() { if infoCache == nil { - infoCache = make(map[string]interface{}, 0) + infoCache = make(map[string]*yaml.Node, 0) } } +// EnableFileCache turns on file caching. +func EnableFileCache() { + fileCacheMutex.Lock() + defer fileCacheMutex.Unlock() + fileCacheEnable = true +} + +// EnableInfoCache turns on parsed info caching. +func EnableInfoCache() { + infoCacheMutex.Lock() + defer infoCacheMutex.Unlock() + infoCacheEnable = true +} + +// DisableFileCache turns off file caching. func DisableFileCache() { + fileCacheMutex.Lock() + defer fileCacheMutex.Unlock() fileCacheEnable = false } +// DisableInfoCache turns off parsed info caching. func DisableInfoCache() { + infoCacheMutex.Lock() + defer infoCacheMutex.Unlock() infoCacheEnable = false } +// RemoveFromFileCache removes an entry from the file cache. func RemoveFromFileCache(fileurl string) { + fileCacheMutex.Lock() + defer fileCacheMutex.Unlock() if !fileCacheEnable { return } @@ -63,7 +97,10 @@ func RemoveFromFileCache(fileurl string) { delete(fileCache, fileurl) } +// RemoveFromInfoCache removes an entry from the info cache. func RemoveFromInfoCache(filename string) { + infoCacheMutex.Lock() + defer infoCacheMutex.Unlock() if !infoCacheEnable { return } @@ -71,19 +108,44 @@ func RemoveFromInfoCache(filename string) { delete(infoCache, filename) } -func GetInfoCache() map[string]interface{} { +// GetInfoCache returns the info cache map. +func GetInfoCache() map[string]*yaml.Node { + infoCacheMutex.Lock() + defer infoCacheMutex.Unlock() if infoCache == nil { initializeInfoCache() } return infoCache } +// ClearFileCache clears the file cache. +func ClearFileCache() { + fileCacheMutex.Lock() + defer fileCacheMutex.Unlock() + fileCache = make(map[string][]byte, 0) +} + +// ClearInfoCache clears the info cache. func ClearInfoCache() { - infoCache = make(map[string]interface{}) + infoCacheMutex.Lock() + defer infoCacheMutex.Unlock() + infoCache = make(map[string]*yaml.Node) +} + +// ClearCaches clears all caches. +func ClearCaches() { + ClearFileCache() + ClearInfoCache() } // FetchFile gets a specified file from the local filesystem or a remote location. func FetchFile(fileurl string) ([]byte, error) { + fileCacheMutex.Lock() + defer fileCacheMutex.Unlock() + return fetchFile(fileurl) +} + +func fetchFile(fileurl string) ([]byte, error) { var bytes []byte initializeFileCache() if fileCacheEnable { @@ -104,7 +166,7 @@ func FetchFile(fileurl string) ([]byte, error) { } defer response.Body.Close() if response.StatusCode != 200 { - return nil, errors.New(fmt.Sprintf("Error downloading %s: %s", fileurl, response.Status)) + return nil, fmt.Errorf("Error downloading %s: %s", fileurl, response.Status) } bytes, err = ioutil.ReadAll(response.Body) if fileCacheEnable && err == nil { @@ -115,11 +177,17 @@ func FetchFile(fileurl string) ([]byte, error) { // ReadBytesForFile reads the bytes of a file. func ReadBytesForFile(filename string) ([]byte, error) { + fileCacheMutex.Lock() + defer fileCacheMutex.Unlock() + return readBytesForFile(filename) +} + +func readBytesForFile(filename string) ([]byte, error) { // is the filename a url? fileurl, _ := url.Parse(filename) if fileurl.Scheme != "" { // yes, fetch it - bytes, err := FetchFile(filename) + bytes, err := fetchFile(filename) if err != nil { return nil, err } @@ -133,8 +201,14 @@ func ReadBytesForFile(filename string) ([]byte, error) { return bytes, nil } -// ReadInfoFromBytes unmarshals a file as a yaml.MapSlice. -func ReadInfoFromBytes(filename string, bytes []byte) (interface{}, error) { +// ReadInfoFromBytes unmarshals a file as a *yaml.Node. +func ReadInfoFromBytes(filename string, bytes []byte) (*yaml.Node, error) { + infoCacheMutex.Lock() + defer infoCacheMutex.Unlock() + return readInfoFromBytes(filename, bytes) +} + +func readInfoFromBytes(filename string, bytes []byte) (*yaml.Node, error) { initializeInfoCache() if infoCacheEnable { cachedInfo, ok := infoCache[filename] @@ -148,19 +222,23 @@ func ReadInfoFromBytes(filename string, bytes []byte) (interface{}, error) { log.Printf("Reading info for file %s", filename) } } - var info yaml.MapSlice + var info yaml.Node err := yaml.Unmarshal(bytes, &info) if err != nil { return nil, err } if infoCacheEnable && len(filename) > 0 { - infoCache[filename] = info + infoCache[filename] = &info } - return info, nil + return &info, nil } // ReadInfoForRef reads a file and return the fragment needed to resolve a $ref. -func ReadInfoForRef(basefile string, ref string) (interface{}, error) { +func ReadInfoForRef(basefile string, ref string) (*yaml.Node, error) { + fileCacheMutex.Lock() + defer fileCacheMutex.Unlock() + infoCacheMutex.Lock() + defer infoCacheMutex.Unlock() initializeInfoCache() if infoCacheEnable { info, ok := infoCache[ref] @@ -174,7 +252,6 @@ func ReadInfoForRef(basefile string, ref string) (interface{}, error) { log.Printf("Reading info for ref %s#%s", basefile, ref) } } - count = count + 1 basedir, _ := filepath.Split(basefile) parts := strings.Split(ref, "#") var filename string @@ -187,24 +264,30 @@ func ReadInfoForRef(basefile string, ref string) (interface{}, error) { } else { filename = basefile } - bytes, err := ReadBytesForFile(filename) + bytes, err := readBytesForFile(filename) if err != nil { return nil, err } - info, err := ReadInfoFromBytes(filename, bytes) + info, err := readInfoFromBytes(filename, bytes) + if info != nil && info.Kind == yaml.DocumentNode { + info = info.Content[0] + } if err != nil { log.Printf("File error: %v\n", err) } else { + if info == nil { + return nil, NewError(nil, fmt.Sprintf("could not resolve %s", ref)) + } if len(parts) > 1 { path := strings.Split(parts[1], "/") for i, key := range path { if i > 0 { - m, ok := info.(yaml.MapSlice) - if ok { + m := info + if true { found := false - for _, section := range m { - if section.Key == key { - info = section.Value + for i := 0; i < len(m.Content); i += 2 { + if m.Content[i].Value == key { + info = m.Content[i+1] found = true } } diff --git a/vendor/github.com/googleapis/gnostic/extensions/README.md b/vendor/github.com/googleapis/gnostic/extensions/README.md index ff1c2eb1..4b5d63e5 100644 --- a/vendor/github.com/googleapis/gnostic/extensions/README.md +++ b/vendor/github.com/googleapis/gnostic/extensions/README.md @@ -1,5 +1,13 @@ # Extensions -This directory contains support code for building Gnostic extensions and associated examples. +**Extension Support is experimental.** -Extensions are used to compile vendor or specification extensions into protocol buffer structures. +This directory contains support code for building Gnostic extensio handlers and +associated examples. + +Extension handlers can be used to compile vendor or specification extensions +into protocol buffer structures. + +Like plugins, extension handlers are built as separate executables. Extension +bodies are written to extension handlers as serialized +ExtensionHandlerRequests. diff --git a/vendor/github.com/googleapis/gnostic/extensions/extension.pb.go b/vendor/github.com/googleapis/gnostic/extensions/extension.pb.go index 432dc06e..4198fa17 100644 --- a/vendor/github.com/googleapis/gnostic/extensions/extension.pb.go +++ b/vendor/github.com/googleapis/gnostic/extensions/extension.pb.go @@ -1,148 +1,186 @@ +// Copyright 2017 Google LLC. All Rights Reserved. +// +// 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. + // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.23.0 +// protoc v3.12.3 // source: extensions/extension.proto -package openapiextension_v1 +package gnostic_extension_v1 import ( - fmt "fmt" proto "github.com/golang/protobuf/proto" any "github.com/golang/protobuf/ptypes/any" - math "math" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 -// The version number of OpenAPI compiler. +// The version number of Gnostic. type Version struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + Major int32 `protobuf:"varint,1,opt,name=major,proto3" json:"major,omitempty"` Minor int32 `protobuf:"varint,2,opt,name=minor,proto3" json:"minor,omitempty"` Patch int32 `protobuf:"varint,3,opt,name=patch,proto3" json:"patch,omitempty"` // A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should // be empty for mainline stable releases. - Suffix string `protobuf:"bytes,4,opt,name=suffix,proto3" json:"suffix,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Suffix string `protobuf:"bytes,4,opt,name=suffix,proto3" json:"suffix,omitempty"` } -func (m *Version) Reset() { *m = Version{} } -func (m *Version) String() string { return proto.CompactTextString(m) } -func (*Version) ProtoMessage() {} -func (*Version) Descriptor() ([]byte, []int) { - return fileDescriptor_661e47e790f76671, []int{0} +func (x *Version) Reset() { + *x = Version{} + if protoimpl.UnsafeEnabled { + mi := &file_extensions_extension_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Version) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Version.Unmarshal(m, b) -} -func (m *Version) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Version.Marshal(b, m, deterministic) -} -func (m *Version) XXX_Merge(src proto.Message) { - xxx_messageInfo_Version.Merge(m, src) +func (x *Version) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Version) XXX_Size() int { - return xxx_messageInfo_Version.Size(m) -} -func (m *Version) XXX_DiscardUnknown() { - xxx_messageInfo_Version.DiscardUnknown(m) + +func (*Version) ProtoMessage() {} + +func (x *Version) ProtoReflect() protoreflect.Message { + mi := &file_extensions_extension_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Version proto.InternalMessageInfo +// Deprecated: Use Version.ProtoReflect.Descriptor instead. +func (*Version) Descriptor() ([]byte, []int) { + return file_extensions_extension_proto_rawDescGZIP(), []int{0} +} -func (m *Version) GetMajor() int32 { - if m != nil { - return m.Major +func (x *Version) GetMajor() int32 { + if x != nil { + return x.Major } return 0 } -func (m *Version) GetMinor() int32 { - if m != nil { - return m.Minor +func (x *Version) GetMinor() int32 { + if x != nil { + return x.Minor } return 0 } -func (m *Version) GetPatch() int32 { - if m != nil { - return m.Patch +func (x *Version) GetPatch() int32 { + if x != nil { + return x.Patch } return 0 } -func (m *Version) GetSuffix() string { - if m != nil { - return m.Suffix +func (x *Version) GetSuffix() string { + if x != nil { + return x.Suffix } return "" } // An encoded Request is written to the ExtensionHandler's stdin. type ExtensionHandlerRequest struct { - // The OpenAPI descriptions that were explicitly listed on the command line. - // The specifications will appear in the order they are specified to gnostic. + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The extension to process. Wrapper *Wrapper `protobuf:"bytes,1,opt,name=wrapper,proto3" json:"wrapper,omitempty"` - // The version number of openapi compiler. - CompilerVersion *Version `protobuf:"bytes,3,opt,name=compiler_version,json=compilerVersion,proto3" json:"compiler_version,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // The version number of Gnostic. + CompilerVersion *Version `protobuf:"bytes,2,opt,name=compiler_version,json=compilerVersion,proto3" json:"compiler_version,omitempty"` } -func (m *ExtensionHandlerRequest) Reset() { *m = ExtensionHandlerRequest{} } -func (m *ExtensionHandlerRequest) String() string { return proto.CompactTextString(m) } -func (*ExtensionHandlerRequest) ProtoMessage() {} -func (*ExtensionHandlerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_661e47e790f76671, []int{1} +func (x *ExtensionHandlerRequest) Reset() { + *x = ExtensionHandlerRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_extensions_extension_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ExtensionHandlerRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ExtensionHandlerRequest.Unmarshal(m, b) -} -func (m *ExtensionHandlerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ExtensionHandlerRequest.Marshal(b, m, deterministic) -} -func (m *ExtensionHandlerRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExtensionHandlerRequest.Merge(m, src) -} -func (m *ExtensionHandlerRequest) XXX_Size() int { - return xxx_messageInfo_ExtensionHandlerRequest.Size(m) +func (x *ExtensionHandlerRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ExtensionHandlerRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ExtensionHandlerRequest.DiscardUnknown(m) + +func (*ExtensionHandlerRequest) ProtoMessage() {} + +func (x *ExtensionHandlerRequest) ProtoReflect() protoreflect.Message { + mi := &file_extensions_extension_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ExtensionHandlerRequest proto.InternalMessageInfo +// Deprecated: Use ExtensionHandlerRequest.ProtoReflect.Descriptor instead. +func (*ExtensionHandlerRequest) Descriptor() ([]byte, []int) { + return file_extensions_extension_proto_rawDescGZIP(), []int{1} +} -func (m *ExtensionHandlerRequest) GetWrapper() *Wrapper { - if m != nil { - return m.Wrapper +func (x *ExtensionHandlerRequest) GetWrapper() *Wrapper { + if x != nil { + return x.Wrapper } return nil } -func (m *ExtensionHandlerRequest) GetCompilerVersion() *Version { - if m != nil { - return m.CompilerVersion +func (x *ExtensionHandlerRequest) GetCompilerVersion() *Version { + if x != nil { + return x.CompilerVersion } return nil } // The extensions writes an encoded ExtensionHandlerResponse to stdout. type ExtensionHandlerResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // true if the extension is handled by the extension handler; false otherwise Handled bool `protobuf:"varint,1,opt,name=handled,proto3" json:"handled,omitempty"` - // Error message. If non-empty, the extension handling failed. + // Error message(s). If non-empty, the extension handling failed. // The extension handler process should exit with status code zero // even if it reports an error in this way. // @@ -151,150 +189,277 @@ type ExtensionHandlerResponse struct { // itself -- such as the input Document being unparseable -- should be // reported by writing a message to stderr and exiting with a non-zero // status code. - Error []string `protobuf:"bytes,2,rep,name=error,proto3" json:"error,omitempty"` + Errors []string `protobuf:"bytes,2,rep,name=errors,proto3" json:"errors,omitempty"` // text output - Value *any.Any `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Value *any.Any `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` } -func (m *ExtensionHandlerResponse) Reset() { *m = ExtensionHandlerResponse{} } -func (m *ExtensionHandlerResponse) String() string { return proto.CompactTextString(m) } -func (*ExtensionHandlerResponse) ProtoMessage() {} -func (*ExtensionHandlerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_661e47e790f76671, []int{2} +func (x *ExtensionHandlerResponse) Reset() { + *x = ExtensionHandlerResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_extensions_extension_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *ExtensionHandlerResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ExtensionHandlerResponse.Unmarshal(m, b) -} -func (m *ExtensionHandlerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ExtensionHandlerResponse.Marshal(b, m, deterministic) -} -func (m *ExtensionHandlerResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ExtensionHandlerResponse.Merge(m, src) +func (x *ExtensionHandlerResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *ExtensionHandlerResponse) XXX_Size() int { - return xxx_messageInfo_ExtensionHandlerResponse.Size(m) -} -func (m *ExtensionHandlerResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ExtensionHandlerResponse.DiscardUnknown(m) + +func (*ExtensionHandlerResponse) ProtoMessage() {} + +func (x *ExtensionHandlerResponse) ProtoReflect() protoreflect.Message { + mi := &file_extensions_extension_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_ExtensionHandlerResponse proto.InternalMessageInfo +// Deprecated: Use ExtensionHandlerResponse.ProtoReflect.Descriptor instead. +func (*ExtensionHandlerResponse) Descriptor() ([]byte, []int) { + return file_extensions_extension_proto_rawDescGZIP(), []int{2} +} -func (m *ExtensionHandlerResponse) GetHandled() bool { - if m != nil { - return m.Handled +func (x *ExtensionHandlerResponse) GetHandled() bool { + if x != nil { + return x.Handled } return false } -func (m *ExtensionHandlerResponse) GetError() []string { - if m != nil { - return m.Error +func (x *ExtensionHandlerResponse) GetErrors() []string { + if x != nil { + return x.Errors } return nil } -func (m *ExtensionHandlerResponse) GetValue() *any.Any { - if m != nil { - return m.Value +func (x *ExtensionHandlerResponse) GetValue() *any.Any { + if x != nil { + return x.Value } return nil } type Wrapper struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // version of the OpenAPI specification in which this extension was written. Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` - // Name of the extension + // Name of the extension. ExtensionName string `protobuf:"bytes,2,opt,name=extension_name,json=extensionName,proto3" json:"extension_name,omitempty"` - // Must be a valid yaml for the proto - Yaml string `protobuf:"bytes,3,opt,name=yaml,proto3" json:"yaml,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + // YAML-formatted extension value. + Yaml string `protobuf:"bytes,3,opt,name=yaml,proto3" json:"yaml,omitempty"` } -func (m *Wrapper) Reset() { *m = Wrapper{} } -func (m *Wrapper) String() string { return proto.CompactTextString(m) } -func (*Wrapper) ProtoMessage() {} -func (*Wrapper) Descriptor() ([]byte, []int) { - return fileDescriptor_661e47e790f76671, []int{3} +func (x *Wrapper) Reset() { + *x = Wrapper{} + if protoimpl.UnsafeEnabled { + mi := &file_extensions_extension_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func (m *Wrapper) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Wrapper.Unmarshal(m, b) +func (x *Wrapper) String() string { + return protoimpl.X.MessageStringOf(x) } -func (m *Wrapper) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Wrapper.Marshal(b, m, deterministic) -} -func (m *Wrapper) XXX_Merge(src proto.Message) { - xxx_messageInfo_Wrapper.Merge(m, src) -} -func (m *Wrapper) XXX_Size() int { - return xxx_messageInfo_Wrapper.Size(m) -} -func (m *Wrapper) XXX_DiscardUnknown() { - xxx_messageInfo_Wrapper.DiscardUnknown(m) + +func (*Wrapper) ProtoMessage() {} + +func (x *Wrapper) ProtoReflect() protoreflect.Message { + mi := &file_extensions_extension_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -var xxx_messageInfo_Wrapper proto.InternalMessageInfo +// Deprecated: Use Wrapper.ProtoReflect.Descriptor instead. +func (*Wrapper) Descriptor() ([]byte, []int) { + return file_extensions_extension_proto_rawDescGZIP(), []int{3} +} -func (m *Wrapper) GetVersion() string { - if m != nil { - return m.Version +func (x *Wrapper) GetVersion() string { + if x != nil { + return x.Version } return "" } -func (m *Wrapper) GetExtensionName() string { - if m != nil { - return m.ExtensionName +func (x *Wrapper) GetExtensionName() string { + if x != nil { + return x.ExtensionName } return "" } -func (m *Wrapper) GetYaml() string { - if m != nil { - return m.Yaml +func (x *Wrapper) GetYaml() string { + if x != nil { + return x.Yaml } return "" } -func init() { - proto.RegisterType((*Version)(nil), "openapiextension.v1.Version") - proto.RegisterType((*ExtensionHandlerRequest)(nil), "openapiextension.v1.ExtensionHandlerRequest") - proto.RegisterType((*ExtensionHandlerResponse)(nil), "openapiextension.v1.ExtensionHandlerResponse") - proto.RegisterType((*Wrapper)(nil), "openapiextension.v1.Wrapper") -} - -func init() { proto.RegisterFile("extensions/extension.proto", fileDescriptor_661e47e790f76671) } - -var fileDescriptor_661e47e790f76671 = []byte{ - // 362 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x91, 0x4d, 0x4b, 0xeb, 0x40, - 0x18, 0x85, 0x49, 0xbf, 0x72, 0x33, 0x97, 0xdb, 0x2b, 0x63, 0xd1, 0x58, 0x5c, 0x94, 0x80, 0x50, - 0x44, 0xa6, 0x54, 0xc1, 0x7d, 0x0b, 0x45, 0xdd, 0xd8, 0x32, 0x8b, 0xba, 0xb3, 0x4c, 0xd3, 0xb7, - 0x69, 0x24, 0x99, 0x19, 0x27, 0x1f, 0xb6, 0x7f, 0xc5, 0xa5, 0xbf, 0x54, 0x32, 0x93, 0xc4, 0x85, - 0xba, 0x9b, 0xf3, 0x70, 0xda, 0xf7, 0x9c, 0x13, 0xd4, 0x87, 0x7d, 0x0a, 0x3c, 0x09, 0x05, 0x4f, - 0x46, 0xf5, 0x93, 0x48, 0x25, 0x52, 0x81, 0x8f, 0x85, 0x04, 0xce, 0x64, 0xf8, 0xc5, 0xf3, 0x71, - 0xff, 0x2c, 0x10, 0x22, 0x88, 0x60, 0xa4, 0x2d, 0xeb, 0x6c, 0x3b, 0x62, 0xfc, 0x60, 0xfc, 0x9e, - 0x8f, 0xec, 0x25, 0xa8, 0xc2, 0x88, 0x7b, 0xa8, 0x1d, 0xb3, 0x17, 0xa1, 0x5c, 0x6b, 0x60, 0x0d, - 0xdb, 0xd4, 0x08, 0x4d, 0x43, 0x2e, 0x94, 0xdb, 0x28, 0x69, 0x21, 0x0a, 0x2a, 0x59, 0xea, 0xef, - 0xdc, 0xa6, 0xa1, 0x5a, 0xe0, 0x13, 0xd4, 0x49, 0xb2, 0xed, 0x36, 0xdc, 0xbb, 0xad, 0x81, 0x35, - 0x74, 0x68, 0xa9, 0xbc, 0x77, 0x0b, 0x9d, 0xce, 0xaa, 0x40, 0xf7, 0x8c, 0x6f, 0x22, 0x50, 0x14, - 0x5e, 0x33, 0x48, 0x52, 0x7c, 0x8b, 0xec, 0x37, 0xc5, 0xa4, 0x04, 0x73, 0xf7, 0xef, 0xf5, 0x39, - 0xf9, 0xa1, 0x02, 0x79, 0x32, 0x1e, 0x5a, 0x99, 0xf1, 0x1d, 0x3a, 0xf2, 0x45, 0x2c, 0xc3, 0x08, - 0xd4, 0x2a, 0x37, 0x0d, 0x74, 0x98, 0xdf, 0xfe, 0xa0, 0x6c, 0x49, 0xff, 0x57, 0xbf, 0x2a, 0x81, - 0x97, 0x23, 0xf7, 0x7b, 0xb6, 0x44, 0x0a, 0x9e, 0x00, 0x76, 0x91, 0xbd, 0xd3, 0x68, 0xa3, 0xc3, - 0xfd, 0xa1, 0x95, 0x2c, 0x06, 0x00, 0xa5, 0xf4, 0x2c, 0xcd, 0xa1, 0x43, 0x8d, 0xc0, 0x97, 0xa8, - 0x9d, 0xb3, 0x28, 0x83, 0x32, 0x49, 0x8f, 0x98, 0xe1, 0x49, 0x35, 0x3c, 0x99, 0xf0, 0x03, 0x35, - 0x16, 0xef, 0x19, 0xd9, 0x65, 0xa9, 0xe2, 0x4c, 0x55, 0xc1, 0xd2, 0xc3, 0x55, 0x12, 0x5f, 0xa0, - 0x6e, 0xdd, 0x62, 0xc5, 0x59, 0x0c, 0xfa, 0x33, 0x38, 0xf4, 0x5f, 0x4d, 0x1f, 0x59, 0x0c, 0x18, - 0xa3, 0xd6, 0x81, 0xc5, 0x91, 0x3e, 0xeb, 0x50, 0xfd, 0x9e, 0x5e, 0xa1, 0xae, 0x50, 0x01, 0x09, - 0xb8, 0x48, 0xd2, 0xd0, 0x27, 0xf9, 0x78, 0x8a, 0xe7, 0x12, 0xf8, 0x64, 0xf1, 0x50, 0xd7, 0x5d, - 0x8e, 0x17, 0xd6, 0x47, 0xa3, 0x39, 0x9f, 0xcc, 0xd6, 0x1d, 0x1d, 0xf1, 0xe6, 0x33, 0x00, 0x00, - 0xff, 0xff, 0xeb, 0xf3, 0xfa, 0x65, 0x5c, 0x02, 0x00, 0x00, +var File_extensions_extension_proto protoreflect.FileDescriptor + +var file_extensions_extension_proto_rawDesc = []byte{ + 0x0a, 0x1a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x67, 0x6e, + 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x63, 0x0a, + 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, + 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6d, + 0x69, 0x6e, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, + 0x66, 0x66, 0x69, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x75, 0x66, 0x66, + 0x69, 0x78, 0x22, 0x9c, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, + 0x0a, 0x07, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x52, 0x07, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x48, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x70, 0x69, + 0x6c, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x78, 0x0a, 0x18, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x61, + 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, + 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5e, 0x0a, 0x07, 0x57, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x42, 0x4b, 0x0a, 0x0e, 0x6f, + 0x72, 0x67, 0x2e, 0x67, 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x2e, 0x76, 0x31, 0x42, 0x10, 0x47, + 0x6e, 0x6f, 0x73, 0x74, 0x69, 0x63, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x50, + 0x01, 0x5a, 0x1f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x67, 0x6e, + 0x6f, 0x73, 0x74, 0x69, 0x63, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x76, 0x31, 0xa2, 0x02, 0x03, 0x47, 0x4e, 0x58, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_extensions_extension_proto_rawDescOnce sync.Once + file_extensions_extension_proto_rawDescData = file_extensions_extension_proto_rawDesc +) + +func file_extensions_extension_proto_rawDescGZIP() []byte { + file_extensions_extension_proto_rawDescOnce.Do(func() { + file_extensions_extension_proto_rawDescData = protoimpl.X.CompressGZIP(file_extensions_extension_proto_rawDescData) + }) + return file_extensions_extension_proto_rawDescData +} + +var file_extensions_extension_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_extensions_extension_proto_goTypes = []interface{}{ + (*Version)(nil), // 0: gnostic.extension.v1.Version + (*ExtensionHandlerRequest)(nil), // 1: gnostic.extension.v1.ExtensionHandlerRequest + (*ExtensionHandlerResponse)(nil), // 2: gnostic.extension.v1.ExtensionHandlerResponse + (*Wrapper)(nil), // 3: gnostic.extension.v1.Wrapper + (*any.Any)(nil), // 4: google.protobuf.Any +} +var file_extensions_extension_proto_depIdxs = []int32{ + 3, // 0: gnostic.extension.v1.ExtensionHandlerRequest.wrapper:type_name -> gnostic.extension.v1.Wrapper + 0, // 1: gnostic.extension.v1.ExtensionHandlerRequest.compiler_version:type_name -> gnostic.extension.v1.Version + 4, // 2: gnostic.extension.v1.ExtensionHandlerResponse.value:type_name -> google.protobuf.Any + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_extensions_extension_proto_init() } +func file_extensions_extension_proto_init() { + if File_extensions_extension_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_extensions_extension_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Version); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extensions_extension_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExtensionHandlerRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extensions_extension_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExtensionHandlerResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_extensions_extension_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Wrapper); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_extensions_extension_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_extensions_extension_proto_goTypes, + DependencyIndexes: file_extensions_extension_proto_depIdxs, + MessageInfos: file_extensions_extension_proto_msgTypes, + }.Build() + File_extensions_extension_proto = out.File + file_extensions_extension_proto_rawDesc = nil + file_extensions_extension_proto_goTypes = nil + file_extensions_extension_proto_depIdxs = nil } diff --git a/vendor/github.com/googleapis/gnostic/extensions/extension.proto b/vendor/github.com/googleapis/gnostic/extensions/extension.proto index 04856f91..8ac1faff 100644 --- a/vendor/github.com/googleapis/gnostic/extensions/extension.proto +++ b/vendor/github.com/googleapis/gnostic/extensions/extension.proto @@ -1,4 +1,4 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2017 Google LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,8 +14,9 @@ syntax = "proto3"; +package gnostic.extension.v1; + import "google/protobuf/any.proto"; -package openapiextension.v1; // This option lets the proto compiler generate Java code inside the package // name (see below) instead of inside an outer class. It creates a simpler @@ -26,7 +27,7 @@ option java_multiple_files = true; // The Java outer classname should be the filename in UpperCamelCase. This // class is only used to hold proto descriptor, so developers don't need to // work with it directly. -option java_outer_classname = "OpenAPIExtensionV1"; +option java_outer_classname = "GnosticExtension"; // The Java package name must be proto package name with proper prefix. option java_package = "org.gnostic.v1"; @@ -37,9 +38,12 @@ option java_package = "org.gnostic.v1"; // hopefully unique enough to not conflict with things that may come along in // the future. 'GPB' is reserved for the protocol buffer implementation itself. // -option objc_class_prefix = "OAE"; // "OpenAPI Extension" +option objc_class_prefix = "GNX"; // "Gnostic Extension" + +// The Go package name. +option go_package = "extensions;gnostic_extension_v1"; -// The version number of OpenAPI compiler. +// The version number of Gnostic. message Version { int32 major = 1; int32 minor = 2; @@ -52,12 +56,11 @@ message Version { // An encoded Request is written to the ExtensionHandler's stdin. message ExtensionHandlerRequest { - // The OpenAPI descriptions that were explicitly listed on the command line. - // The specifications will appear in the order they are specified to gnostic. + // The extension to process. Wrapper wrapper = 1; - // The version number of openapi compiler. - Version compiler_version = 3; + // The version number of Gnostic. + Version compiler_version = 2; } // The extensions writes an encoded ExtensionHandlerResponse to stdout. @@ -66,7 +69,7 @@ message ExtensionHandlerResponse { // true if the extension is handled by the extension handler; false otherwise bool handled = 1; - // Error message. If non-empty, the extension handling failed. + // Error message(s). If non-empty, the extension handling failed. // The extension handler process should exit with status code zero // even if it reports an error in this way. // @@ -75,7 +78,7 @@ message ExtensionHandlerResponse { // itself -- such as the input Document being unparseable -- should be // reported by writing a message to stderr and exiting with a non-zero // status code. - repeated string error = 2; + repeated string errors = 2; // text output google.protobuf.Any value = 3; @@ -85,9 +88,9 @@ message Wrapper { // version of the OpenAPI specification in which this extension was written. string version = 1; - // Name of the extension + // Name of the extension. string extension_name = 2; - // Must be a valid yaml for the proto + // YAML-formatted extension value. string yaml = 3; } diff --git a/vendor/github.com/googleapis/gnostic/extensions/extensions.go b/vendor/github.com/googleapis/gnostic/extensions/extensions.go index 94a8e62a..ec8afd00 100644 --- a/vendor/github.com/googleapis/gnostic/extensions/extensions.go +++ b/vendor/github.com/googleapis/gnostic/extensions/extensions.go @@ -1,4 +1,4 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2017 Google LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,71 +12,53 @@ // See the License for the specific language governing permissions and // limitations under the License. -package openapiextension_v1 +package gnostic_extension_v1 import ( - "fmt" "io/ioutil" + "log" "os" "github.com/golang/protobuf/proto" "github.com/golang/protobuf/ptypes" ) -type documentHandler func(version string, extensionName string, document string) type extensionHandler func(name string, yamlInput string) (bool, proto.Message, error) -func forInputYamlFromOpenapic(handler documentHandler) { +// Main implements the main program of an extension handler. +func Main(handler extensionHandler) { + // unpack the request data, err := ioutil.ReadAll(os.Stdin) if err != nil { - fmt.Println("File error:", err.Error()) + log.Println("File error:", err.Error()) os.Exit(1) } if len(data) == 0 { - fmt.Println("No input data.") + log.Println("No input data.") os.Exit(1) } request := &ExtensionHandlerRequest{} err = proto.Unmarshal(data, request) if err != nil { - fmt.Println("Input error:", err.Error()) + log.Println("Input error:", err.Error()) os.Exit(1) } - handler(request.Wrapper.Version, request.Wrapper.ExtensionName, request.Wrapper.Yaml) -} - -// ProcessExtension calles the handler for a specified extension. -func ProcessExtension(handleExtension extensionHandler) { - response := &ExtensionHandlerResponse{} - forInputYamlFromOpenapic( - func(version string, extensionName string, yamlInput string) { - var newObject proto.Message - var err error - - handled, newObject, err := handleExtension(extensionName, yamlInput) - if !handled { - responseBytes, _ := proto.Marshal(response) - os.Stdout.Write(responseBytes) - os.Exit(0) - } - - // If we reach here, then the extension is handled - response.Handled = true - if err != nil { - response.Error = append(response.Error, err.Error()) - responseBytes, _ := proto.Marshal(response) - os.Stdout.Write(responseBytes) - os.Exit(0) - } - response.Value, err = ptypes.MarshalAny(newObject) - if err != nil { - response.Error = append(response.Error, err.Error()) - responseBytes, _ := proto.Marshal(response) - os.Stdout.Write(responseBytes) - os.Exit(0) - } - }) - + // call the handler + handled, output, err := handler(request.Wrapper.ExtensionName, request.Wrapper.Yaml) + // respond with the output of the handler + response := &ExtensionHandlerResponse{ + Handled: false, // default assumption + Errors: make([]string, 0), + } + if err != nil { + response.Errors = append(response.Errors, err.Error()) + } else if handled { + response.Handled = true + response.Value, err = ptypes.MarshalAny(output) + if err != nil { + response.Errors = append(response.Errors, err.Error()) + } + } responseBytes, _ := proto.Marshal(response) os.Stdout.Write(responseBytes) } diff --git a/vendor/github.com/googleapis/gnostic/jsonschema/README.md b/vendor/github.com/googleapis/gnostic/jsonschema/README.md new file mode 100644 index 00000000..6793c517 --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/jsonschema/README.md @@ -0,0 +1,4 @@ +# jsonschema + +This directory contains code for reading, writing, and manipulating JSON +schemas. diff --git a/vendor/github.com/googleapis/gnostic/jsonschema/base.go b/vendor/github.com/googleapis/gnostic/jsonschema/base.go new file mode 100644 index 00000000..0af8b148 --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/jsonschema/base.go @@ -0,0 +1,84 @@ + +// THIS FILE IS AUTOMATICALLY GENERATED. + +package jsonschema + +import ( + "encoding/base64" +) + +func baseSchemaBytes() ([]byte, error){ + return base64.StdEncoding.DecodeString( +`ewogICAgImlkIjogImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hIyIsCiAgICAi +JHNjaGVtYSI6ICJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiLAogICAgImRl +c2NyaXB0aW9uIjogIkNvcmUgc2NoZW1hIG1ldGEtc2NoZW1hIiwKICAgICJkZWZpbml0aW9ucyI6IHsK +ICAgICAgICAic2NoZW1hQXJyYXkiOiB7CiAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAg +ICAgICAgIm1pbkl0ZW1zIjogMSwKICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICIjIiB9CiAg +ICAgICAgfSwKICAgICAgICAicG9zaXRpdmVJbnRlZ2VyIjogewogICAgICAgICAgICAidHlwZSI6ICJp +bnRlZ2VyIiwKICAgICAgICAgICAgIm1pbmltdW0iOiAwCiAgICAgICAgfSwKICAgICAgICAicG9zaXRp +dmVJbnRlZ2VyRGVmYXVsdDAiOiB7CiAgICAgICAgICAgICJhbGxPZiI6IFsgeyAiJHJlZiI6ICIjL2Rl +ZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciIgfSwgeyAiZGVmYXVsdCI6IDAgfSBdCiAgICAgICAgfSwK +ICAgICAgICAic2ltcGxlVHlwZXMiOiB7CiAgICAgICAgICAgICJlbnVtIjogWyAiYXJyYXkiLCAiYm9v +bGVhbiIsICJpbnRlZ2VyIiwgIm51bGwiLCAibnVtYmVyIiwgIm9iamVjdCIsICJzdHJpbmciIF0KICAg +ICAgICB9LAogICAgICAgICJzdHJpbmdBcnJheSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiYXJyYXki +LAogICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwKICAgICAgICAgICAgIm1p +bkl0ZW1zIjogMSwKICAgICAgICAgICAgInVuaXF1ZUl0ZW1zIjogdHJ1ZQogICAgICAgIH0KICAgIH0s +CiAgICAidHlwZSI6ICJvYmplY3QiLAogICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgImlkIjogewog +ICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAiZm9ybWF0IjogInVyaSIKICAg +ICAgICB9LAogICAgICAgICIkc2NoZW1hIjogewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAog +ICAgICAgICAgICAiZm9ybWF0IjogInVyaSIKICAgICAgICB9LAogICAgICAgICJ0aXRsZSI6IHsKICAg +ICAgICAgICAgInR5cGUiOiAic3RyaW5nIgogICAgICAgIH0sCiAgICAgICAgImRlc2NyaXB0aW9uIjog +ewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciCiAgICAgICAgfSwKICAgICAgICAiZGVmYXVsdCI6 +IHt9LAogICAgICAgICJtdWx0aXBsZU9mIjogewogICAgICAgICAgICAidHlwZSI6ICJudW1iZXIiLAog +ICAgICAgICAgICAibWluaW11bSI6IDAsCiAgICAgICAgICAgICJleGNsdXNpdmVNaW5pbXVtIjogdHJ1 +ZQogICAgICAgIH0sCiAgICAgICAgIm1heGltdW0iOiB7CiAgICAgICAgICAgICJ0eXBlIjogIm51bWJl +ciIKICAgICAgICB9LAogICAgICAgICJleGNsdXNpdmVNYXhpbXVtIjogewogICAgICAgICAgICAidHlw +ZSI6ICJib29sZWFuIiwKICAgICAgICAgICAgImRlZmF1bHQiOiBmYWxzZQogICAgICAgIH0sCiAgICAg +ICAgIm1pbmltdW0iOiB7CiAgICAgICAgICAgICJ0eXBlIjogIm51bWJlciIKICAgICAgICB9LAogICAg +ICAgICJleGNsdXNpdmVNaW5pbXVtIjogewogICAgICAgICAgICAidHlwZSI6ICJib29sZWFuIiwKICAg +ICAgICAgICAgImRlZmF1bHQiOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgIm1heExlbmd0aCI6IHsg +IiRyZWYiOiAiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIiIH0sCiAgICAgICAgIm1pbkxlbmd0 +aCI6IHsgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCIgfSwKICAg +ICAgICAicGF0dGVybiI6IHsKICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAg +ImZvcm1hdCI6ICJyZWdleCIKICAgICAgICB9LAogICAgICAgICJhZGRpdGlvbmFsSXRlbXMiOiB7CiAg +ICAgICAgICAgICJhbnlPZiI6IFsKICAgICAgICAgICAgICAgIHsgInR5cGUiOiAiYm9vbGVhbiIgfSwK +ICAgICAgICAgICAgICAgIHsgIiRyZWYiOiAiIyIgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAi +ZGVmYXVsdCI6IHt9CiAgICAgICAgfSwKICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICJhbnlP +ZiI6IFsKICAgICAgICAgICAgICAgIHsgIiRyZWYiOiAiIyIgfSwKICAgICAgICAgICAgICAgIHsgIiRy +ZWYiOiAiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSIgfQogICAgICAgICAgICBdLAogICAgICAgICAg +ICAiZGVmYXVsdCI6IHt9CiAgICAgICAgfSwKICAgICAgICAibWF4SXRlbXMiOiB7ICIkcmVmIjogIiMv +ZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyIiB9LAogICAgICAgICJtaW5JdGVtcyI6IHsgIiRyZWYi +OiAiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCIgfSwKICAgICAgICAidW5pcXVl +SXRlbXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogImJvb2xlYW4iLAogICAgICAgICAgICAiZGVmYXVs +dCI6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICAibWF4UHJvcGVydGllcyI6IHsgIiRyZWYiOiAiIy9k +ZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIiIH0sCiAgICAgICAgIm1pblByb3BlcnRpZXMiOiB7ICIk +cmVmIjogIiMvZGVmaW5pdGlvbnMvcG9zaXRpdmVJbnRlZ2VyRGVmYXVsdDAiIH0sCiAgICAgICAgInJl +cXVpcmVkIjogeyAiJHJlZiI6ICIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5IiB9LAogICAgICAgICJh +ZGRpdGlvbmFsUHJvcGVydGllcyI6IHsKICAgICAgICAgICAgImFueU9mIjogWwogICAgICAgICAgICAg +ICAgeyAidHlwZSI6ICJib29sZWFuIiB9LAogICAgICAgICAgICAgICAgeyAiJHJlZiI6ICIjIiB9CiAg +ICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZWZhdWx0Ijoge30KICAgICAgICB9LAogICAgICAgICJk +ZWZpbml0aW9ucyI6IHsKICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgImFk +ZGl0aW9uYWxQcm9wZXJ0aWVzIjogeyAiJHJlZiI6ICIjIiB9LAogICAgICAgICAgICAiZGVmYXVsdCI6 +IHt9CiAgICAgICAgfSwKICAgICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAgICAgInR5cGUiOiAi +b2JqZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjogeyAiJHJlZiI6ICIjIiB9 +LAogICAgICAgICAgICAiZGVmYXVsdCI6IHt9CiAgICAgICAgfSwKICAgICAgICAicGF0dGVyblByb3Bl +cnRpZXMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICJhZGRpdGlv +bmFsUHJvcGVydGllcyI6IHsgIiRyZWYiOiAiIyIgfSwKICAgICAgICAgICAgImRlZmF1bHQiOiB7fQog +ICAgICAgIH0sCiAgICAgICAgImRlcGVuZGVuY2llcyI6IHsKICAgICAgICAgICAgInR5cGUiOiAib2Jq +ZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjogewogICAgICAgICAgICAgICAg +ImFueU9mIjogWwogICAgICAgICAgICAgICAgICAgIHsgIiRyZWYiOiAiIyIgfSwKICAgICAgICAgICAg +ICAgICAgICB7ICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvc3RyaW5nQXJyYXkiIH0KICAgICAgICAgICAg +ICAgIF0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImVudW0iOiB7CiAgICAgICAgICAg +ICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgIm1pbkl0ZW1zIjogMSwKICAgICAgICAgICAgInVu +aXF1ZUl0ZW1zIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgInR5cGUiOiB7CiAgICAgICAgICAgICJh +bnlPZiI6IFsKICAgICAgICAgICAgICAgIHsgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9zaW1wbGVUeXBl +cyIgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIs +CiAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICIjL2RlZmluaXRpb25zL3NpbXBs +ZVR5cGVzIiB9LAogICAgICAgICAgICAgICAgICAgICJtaW5JdGVtcyI6IDEsCiAgICAgICAgICAgICAg +ICAgICAgInVuaXF1ZUl0ZW1zIjogdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdCiAg +ICAgICAgfSwKICAgICAgICAiYWxsT2YiOiB7ICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJy +YXkiIH0sCiAgICAgICAgImFueU9mIjogeyAiJHJlZiI6ICIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5 +IiB9LAogICAgICAgICJvbmVPZiI6IHsgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSIg +fSwKICAgICAgICAibm90IjogeyAiJHJlZiI6ICIjIiB9CiAgICB9LAogICAgImRlcGVuZGVuY2llcyI6 +IHsKICAgICAgICAiZXhjbHVzaXZlTWF4aW11bSI6IFsgIm1heGltdW0iIF0sCiAgICAgICAgImV4Y2x1 +c2l2ZU1pbmltdW0iOiBbICJtaW5pbXVtIiBdCiAgICB9LAogICAgImRlZmF1bHQiOiB7fQp9Cg==`)} \ No newline at end of file diff --git a/vendor/github.com/googleapis/gnostic/jsonschema/display.go b/vendor/github.com/googleapis/gnostic/jsonschema/display.go new file mode 100644 index 00000000..028a760a --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/jsonschema/display.go @@ -0,0 +1,229 @@ +// Copyright 2017 Google LLC. All Rights Reserved. +// +// 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 jsonschema + +import ( + "fmt" + "strings" +) + +// +// DISPLAY +// The following methods display Schemas. +// + +// Description returns a string representation of a string or string array. +func (s *StringOrStringArray) Description() string { + if s.String != nil { + return *s.String + } + if s.StringArray != nil { + return strings.Join(*s.StringArray, ", ") + } + return "" +} + +// Returns a string representation of a Schema. +func (schema *Schema) String() string { + return schema.describeSchema("") +} + +// Helper: Returns a string representation of a Schema indented by a specified string. +func (schema *Schema) describeSchema(indent string) string { + result := "" + if schema.Schema != nil { + result += indent + "$schema: " + *(schema.Schema) + "\n" + } + if schema.ID != nil { + result += indent + "id: " + *(schema.ID) + "\n" + } + if schema.MultipleOf != nil { + result += indent + fmt.Sprintf("multipleOf: %+v\n", *(schema.MultipleOf)) + } + if schema.Maximum != nil { + result += indent + fmt.Sprintf("maximum: %+v\n", *(schema.Maximum)) + } + if schema.ExclusiveMaximum != nil { + result += indent + fmt.Sprintf("exclusiveMaximum: %+v\n", *(schema.ExclusiveMaximum)) + } + if schema.Minimum != nil { + result += indent + fmt.Sprintf("minimum: %+v\n", *(schema.Minimum)) + } + if schema.ExclusiveMinimum != nil { + result += indent + fmt.Sprintf("exclusiveMinimum: %+v\n", *(schema.ExclusiveMinimum)) + } + if schema.MaxLength != nil { + result += indent + fmt.Sprintf("maxLength: %+v\n", *(schema.MaxLength)) + } + if schema.MinLength != nil { + result += indent + fmt.Sprintf("minLength: %+v\n", *(schema.MinLength)) + } + if schema.Pattern != nil { + result += indent + fmt.Sprintf("pattern: %+v\n", *(schema.Pattern)) + } + if schema.AdditionalItems != nil { + s := schema.AdditionalItems.Schema + if s != nil { + result += indent + "additionalItems:\n" + result += s.describeSchema(indent + " ") + } else { + b := *(schema.AdditionalItems.Boolean) + result += indent + fmt.Sprintf("additionalItems: %+v\n", b) + } + } + if schema.Items != nil { + result += indent + "items:\n" + items := schema.Items + if items.SchemaArray != nil { + for i, s := range *(items.SchemaArray) { + result += indent + " " + fmt.Sprintf("%d", i) + ":\n" + result += s.describeSchema(indent + " " + " ") + } + } else if items.Schema != nil { + result += items.Schema.describeSchema(indent + " " + " ") + } + } + if schema.MaxItems != nil { + result += indent + fmt.Sprintf("maxItems: %+v\n", *(schema.MaxItems)) + } + if schema.MinItems != nil { + result += indent + fmt.Sprintf("minItems: %+v\n", *(schema.MinItems)) + } + if schema.UniqueItems != nil { + result += indent + fmt.Sprintf("uniqueItems: %+v\n", *(schema.UniqueItems)) + } + if schema.MaxProperties != nil { + result += indent + fmt.Sprintf("maxProperties: %+v\n", *(schema.MaxProperties)) + } + if schema.MinProperties != nil { + result += indent + fmt.Sprintf("minProperties: %+v\n", *(schema.MinProperties)) + } + if schema.Required != nil { + result += indent + fmt.Sprintf("required: %+v\n", *(schema.Required)) + } + if schema.AdditionalProperties != nil { + s := schema.AdditionalProperties.Schema + if s != nil { + result += indent + "additionalProperties:\n" + result += s.describeSchema(indent + " ") + } else { + b := *(schema.AdditionalProperties.Boolean) + result += indent + fmt.Sprintf("additionalProperties: %+v\n", b) + } + } + if schema.Properties != nil { + result += indent + "properties:\n" + for _, pair := range *(schema.Properties) { + name := pair.Name + s := pair.Value + result += indent + " " + name + ":\n" + result += s.describeSchema(indent + " " + " ") + } + } + if schema.PatternProperties != nil { + result += indent + "patternProperties:\n" + for _, pair := range *(schema.PatternProperties) { + name := pair.Name + s := pair.Value + result += indent + " " + name + ":\n" + result += s.describeSchema(indent + " " + " ") + } + } + if schema.Dependencies != nil { + result += indent + "dependencies:\n" + for _, pair := range *(schema.Dependencies) { + name := pair.Name + schemaOrStringArray := pair.Value + s := schemaOrStringArray.Schema + if s != nil { + result += indent + " " + name + ":\n" + result += s.describeSchema(indent + " " + " ") + } else { + a := schemaOrStringArray.StringArray + if a != nil { + result += indent + " " + name + ":\n" + for _, s2 := range *a { + result += indent + " " + " " + s2 + "\n" + } + } + } + + } + } + if schema.Enumeration != nil { + result += indent + "enumeration:\n" + for _, value := range *(schema.Enumeration) { + if value.String != nil { + result += indent + " " + fmt.Sprintf("%+v\n", *value.String) + } else { + result += indent + " " + fmt.Sprintf("%+v\n", *value.Bool) + } + } + } + if schema.Type != nil { + result += indent + fmt.Sprintf("type: %+v\n", schema.Type.Description()) + } + if schema.AllOf != nil { + result += indent + "allOf:\n" + for _, s := range *(schema.AllOf) { + result += s.describeSchema(indent + " ") + result += indent + "-\n" + } + } + if schema.AnyOf != nil { + result += indent + "anyOf:\n" + for _, s := range *(schema.AnyOf) { + result += s.describeSchema(indent + " ") + result += indent + "-\n" + } + } + if schema.OneOf != nil { + result += indent + "oneOf:\n" + for _, s := range *(schema.OneOf) { + result += s.describeSchema(indent + " ") + result += indent + "-\n" + } + } + if schema.Not != nil { + result += indent + "not:\n" + result += schema.Not.describeSchema(indent + " ") + } + if schema.Definitions != nil { + result += indent + "definitions:\n" + for _, pair := range *(schema.Definitions) { + name := pair.Name + s := pair.Value + result += indent + " " + name + ":\n" + result += s.describeSchema(indent + " " + " ") + } + } + if schema.Title != nil { + result += indent + "title: " + *(schema.Title) + "\n" + } + if schema.Description != nil { + result += indent + "description: " + *(schema.Description) + "\n" + } + if schema.Default != nil { + result += indent + "default:\n" + result += indent + fmt.Sprintf(" %+v\n", *(schema.Default)) + } + if schema.Format != nil { + result += indent + "format: " + *(schema.Format) + "\n" + } + if schema.Ref != nil { + result += indent + "$ref: " + *(schema.Ref) + "\n" + } + return result +} diff --git a/vendor/github.com/googleapis/gnostic/jsonschema/models.go b/vendor/github.com/googleapis/gnostic/jsonschema/models.go new file mode 100644 index 00000000..4781bdc5 --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/jsonschema/models.go @@ -0,0 +1,228 @@ +// Copyright 2017 Google LLC. All Rights Reserved. +// +// 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 jsonschema supports the reading, writing, and manipulation +// of JSON Schemas. +package jsonschema + +import "gopkg.in/yaml.v3" + +// The Schema struct models a JSON Schema and, because schemas are +// defined hierarchically, contains many references to itself. +// All fields are pointers and are nil if the associated values +// are not specified. +type Schema struct { + Schema *string // $schema + ID *string // id keyword used for $ref resolution scope + Ref *string // $ref, i.e. JSON Pointers + + // http://json-schema.org/latest/json-schema-validation.html + // 5.1. Validation keywords for numeric instances (number and integer) + MultipleOf *SchemaNumber + Maximum *SchemaNumber + ExclusiveMaximum *bool + Minimum *SchemaNumber + ExclusiveMinimum *bool + + // 5.2. Validation keywords for strings + MaxLength *int64 + MinLength *int64 + Pattern *string + + // 5.3. Validation keywords for arrays + AdditionalItems *SchemaOrBoolean + Items *SchemaOrSchemaArray + MaxItems *int64 + MinItems *int64 + UniqueItems *bool + + // 5.4. Validation keywords for objects + MaxProperties *int64 + MinProperties *int64 + Required *[]string + AdditionalProperties *SchemaOrBoolean + Properties *[]*NamedSchema + PatternProperties *[]*NamedSchema + Dependencies *[]*NamedSchemaOrStringArray + + // 5.5. Validation keywords for any instance type + Enumeration *[]SchemaEnumValue + Type *StringOrStringArray + AllOf *[]*Schema + AnyOf *[]*Schema + OneOf *[]*Schema + Not *Schema + Definitions *[]*NamedSchema + + // 6. Metadata keywords + Title *string + Description *string + Default *yaml.Node + + // 7. Semantic validation with "format" + Format *string +} + +// These helper structs represent "combination" types that generally can +// have values of one type or another. All are used to represent parts +// of Schemas. + +// SchemaNumber represents a value that can be either an Integer or a Float. +type SchemaNumber struct { + Integer *int64 + Float *float64 +} + +// NewSchemaNumberWithInteger creates and returns a new object +func NewSchemaNumberWithInteger(i int64) *SchemaNumber { + result := &SchemaNumber{} + result.Integer = &i + return result +} + +// NewSchemaNumberWithFloat creates and returns a new object +func NewSchemaNumberWithFloat(f float64) *SchemaNumber { + result := &SchemaNumber{} + result.Float = &f + return result +} + +// SchemaOrBoolean represents a value that can be either a Schema or a Boolean. +type SchemaOrBoolean struct { + Schema *Schema + Boolean *bool +} + +// NewSchemaOrBooleanWithSchema creates and returns a new object +func NewSchemaOrBooleanWithSchema(s *Schema) *SchemaOrBoolean { + result := &SchemaOrBoolean{} + result.Schema = s + return result +} + +// NewSchemaOrBooleanWithBoolean creates and returns a new object +func NewSchemaOrBooleanWithBoolean(b bool) *SchemaOrBoolean { + result := &SchemaOrBoolean{} + result.Boolean = &b + return result +} + +// StringOrStringArray represents a value that can be either +// a String or an Array of Strings. +type StringOrStringArray struct { + String *string + StringArray *[]string +} + +// NewStringOrStringArrayWithString creates and returns a new object +func NewStringOrStringArrayWithString(s string) *StringOrStringArray { + result := &StringOrStringArray{} + result.String = &s + return result +} + +// NewStringOrStringArrayWithStringArray creates and returns a new object +func NewStringOrStringArrayWithStringArray(a []string) *StringOrStringArray { + result := &StringOrStringArray{} + result.StringArray = &a + return result +} + +// SchemaOrStringArray represents a value that can be either +// a Schema or an Array of Strings. +type SchemaOrStringArray struct { + Schema *Schema + StringArray *[]string +} + +// SchemaOrSchemaArray represents a value that can be either +// a Schema or an Array of Schemas. +type SchemaOrSchemaArray struct { + Schema *Schema + SchemaArray *[]*Schema +} + +// NewSchemaOrSchemaArrayWithSchema creates and returns a new object +func NewSchemaOrSchemaArrayWithSchema(s *Schema) *SchemaOrSchemaArray { + result := &SchemaOrSchemaArray{} + result.Schema = s + return result +} + +// NewSchemaOrSchemaArrayWithSchemaArray creates and returns a new object +func NewSchemaOrSchemaArrayWithSchemaArray(a []*Schema) *SchemaOrSchemaArray { + result := &SchemaOrSchemaArray{} + result.SchemaArray = &a + return result +} + +// SchemaEnumValue represents a value that can be part of an +// enumeration in a Schema. +type SchemaEnumValue struct { + String *string + Bool *bool +} + +// NamedSchema is a name-value pair that is used to emulate maps +// with ordered keys. +type NamedSchema struct { + Name string + Value *Schema +} + +// NewNamedSchema creates and returns a new object +func NewNamedSchema(name string, value *Schema) *NamedSchema { + return &NamedSchema{Name: name, Value: value} +} + +// NamedSchemaOrStringArray is a name-value pair that is used +// to emulate maps with ordered keys. +type NamedSchemaOrStringArray struct { + Name string + Value *SchemaOrStringArray +} + +// Access named subschemas by name + +func namedSchemaArrayElementWithName(array *[]*NamedSchema, name string) *Schema { + if array == nil { + return nil + } + for _, pair := range *array { + if pair.Name == name { + return pair.Value + } + } + return nil +} + +// PropertyWithName returns the selected element. +func (s *Schema) PropertyWithName(name string) *Schema { + return namedSchemaArrayElementWithName(s.Properties, name) +} + +// PatternPropertyWithName returns the selected element. +func (s *Schema) PatternPropertyWithName(name string) *Schema { + return namedSchemaArrayElementWithName(s.PatternProperties, name) +} + +// DefinitionWithName returns the selected element. +func (s *Schema) DefinitionWithName(name string) *Schema { + return namedSchemaArrayElementWithName(s.Definitions, name) +} + +// AddProperty adds a named property. +func (s *Schema) AddProperty(name string, property *Schema) { + *s.Properties = append(*s.Properties, NewNamedSchema(name, property)) +} diff --git a/vendor/github.com/googleapis/gnostic/jsonschema/operations.go b/vendor/github.com/googleapis/gnostic/jsonschema/operations.go new file mode 100644 index 00000000..ba8dd4a9 --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/jsonschema/operations.go @@ -0,0 +1,394 @@ +// Copyright 2017 Google LLC. All Rights Reserved. +// +// 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 jsonschema + +import ( + "fmt" + "log" + "strings" +) + +// +// OPERATIONS +// The following methods perform operations on Schemas. +// + +// IsEmpty returns true if no members of the Schema are specified. +func (schema *Schema) IsEmpty() bool { + return (schema.Schema == nil) && + (schema.ID == nil) && + (schema.MultipleOf == nil) && + (schema.Maximum == nil) && + (schema.ExclusiveMaximum == nil) && + (schema.Minimum == nil) && + (schema.ExclusiveMinimum == nil) && + (schema.MaxLength == nil) && + (schema.MinLength == nil) && + (schema.Pattern == nil) && + (schema.AdditionalItems == nil) && + (schema.Items == nil) && + (schema.MaxItems == nil) && + (schema.MinItems == nil) && + (schema.UniqueItems == nil) && + (schema.MaxProperties == nil) && + (schema.MinProperties == nil) && + (schema.Required == nil) && + (schema.AdditionalProperties == nil) && + (schema.Properties == nil) && + (schema.PatternProperties == nil) && + (schema.Dependencies == nil) && + (schema.Enumeration == nil) && + (schema.Type == nil) && + (schema.AllOf == nil) && + (schema.AnyOf == nil) && + (schema.OneOf == nil) && + (schema.Not == nil) && + (schema.Definitions == nil) && + (schema.Title == nil) && + (schema.Description == nil) && + (schema.Default == nil) && + (schema.Format == nil) && + (schema.Ref == nil) +} + +// IsEqual returns true if two schemas are equal. +func (schema *Schema) IsEqual(schema2 *Schema) bool { + return schema.String() == schema2.String() +} + +// SchemaOperation represents a function that can be applied to a Schema. +type SchemaOperation func(schema *Schema, context string) + +// Applies a specified function to a Schema and all of the Schemas that it contains. +func (schema *Schema) applyToSchemas(operation SchemaOperation, context string) { + + if schema.AdditionalItems != nil { + s := schema.AdditionalItems.Schema + if s != nil { + s.applyToSchemas(operation, "AdditionalItems") + } + } + + if schema.Items != nil { + if schema.Items.SchemaArray != nil { + for _, s := range *(schema.Items.SchemaArray) { + s.applyToSchemas(operation, "Items.SchemaArray") + } + } else if schema.Items.Schema != nil { + schema.Items.Schema.applyToSchemas(operation, "Items.Schema") + } + } + + if schema.AdditionalProperties != nil { + s := schema.AdditionalProperties.Schema + if s != nil { + s.applyToSchemas(operation, "AdditionalProperties") + } + } + + if schema.Properties != nil { + for _, pair := range *(schema.Properties) { + s := pair.Value + s.applyToSchemas(operation, "Properties") + } + } + if schema.PatternProperties != nil { + for _, pair := range *(schema.PatternProperties) { + s := pair.Value + s.applyToSchemas(operation, "PatternProperties") + } + } + + if schema.Dependencies != nil { + for _, pair := range *(schema.Dependencies) { + schemaOrStringArray := pair.Value + s := schemaOrStringArray.Schema + if s != nil { + s.applyToSchemas(operation, "Dependencies") + } + } + } + + if schema.AllOf != nil { + for _, s := range *(schema.AllOf) { + s.applyToSchemas(operation, "AllOf") + } + } + if schema.AnyOf != nil { + for _, s := range *(schema.AnyOf) { + s.applyToSchemas(operation, "AnyOf") + } + } + if schema.OneOf != nil { + for _, s := range *(schema.OneOf) { + s.applyToSchemas(operation, "OneOf") + } + } + if schema.Not != nil { + schema.Not.applyToSchemas(operation, "Not") + } + + if schema.Definitions != nil { + for _, pair := range *(schema.Definitions) { + s := pair.Value + s.applyToSchemas(operation, "Definitions") + } + } + + operation(schema, context) +} + +// CopyProperties copies all non-nil properties from the source Schema to the schema Schema. +func (schema *Schema) CopyProperties(source *Schema) { + if source.Schema != nil { + schema.Schema = source.Schema + } + if source.ID != nil { + schema.ID = source.ID + } + if source.MultipleOf != nil { + schema.MultipleOf = source.MultipleOf + } + if source.Maximum != nil { + schema.Maximum = source.Maximum + } + if source.ExclusiveMaximum != nil { + schema.ExclusiveMaximum = source.ExclusiveMaximum + } + if source.Minimum != nil { + schema.Minimum = source.Minimum + } + if source.ExclusiveMinimum != nil { + schema.ExclusiveMinimum = source.ExclusiveMinimum + } + if source.MaxLength != nil { + schema.MaxLength = source.MaxLength + } + if source.MinLength != nil { + schema.MinLength = source.MinLength + } + if source.Pattern != nil { + schema.Pattern = source.Pattern + } + if source.AdditionalItems != nil { + schema.AdditionalItems = source.AdditionalItems + } + if source.Items != nil { + schema.Items = source.Items + } + if source.MaxItems != nil { + schema.MaxItems = source.MaxItems + } + if source.MinItems != nil { + schema.MinItems = source.MinItems + } + if source.UniqueItems != nil { + schema.UniqueItems = source.UniqueItems + } + if source.MaxProperties != nil { + schema.MaxProperties = source.MaxProperties + } + if source.MinProperties != nil { + schema.MinProperties = source.MinProperties + } + if source.Required != nil { + schema.Required = source.Required + } + if source.AdditionalProperties != nil { + schema.AdditionalProperties = source.AdditionalProperties + } + if source.Properties != nil { + schema.Properties = source.Properties + } + if source.PatternProperties != nil { + schema.PatternProperties = source.PatternProperties + } + if source.Dependencies != nil { + schema.Dependencies = source.Dependencies + } + if source.Enumeration != nil { + schema.Enumeration = source.Enumeration + } + if source.Type != nil { + schema.Type = source.Type + } + if source.AllOf != nil { + schema.AllOf = source.AllOf + } + if source.AnyOf != nil { + schema.AnyOf = source.AnyOf + } + if source.OneOf != nil { + schema.OneOf = source.OneOf + } + if source.Not != nil { + schema.Not = source.Not + } + if source.Definitions != nil { + schema.Definitions = source.Definitions + } + if source.Title != nil { + schema.Title = source.Title + } + if source.Description != nil { + schema.Description = source.Description + } + if source.Default != nil { + schema.Default = source.Default + } + if source.Format != nil { + schema.Format = source.Format + } + if source.Ref != nil { + schema.Ref = source.Ref + } +} + +// TypeIs returns true if the Type of a Schema includes the specified type +func (schema *Schema) TypeIs(typeName string) bool { + if schema.Type != nil { + // the schema Type is either a string or an array of strings + if schema.Type.String != nil { + return (*(schema.Type.String) == typeName) + } else if schema.Type.StringArray != nil { + for _, n := range *(schema.Type.StringArray) { + if n == typeName { + return true + } + } + } + } + return false +} + +// ResolveRefs resolves "$ref" elements in a Schema and its children. +// But if a reference refers to an object type, is inside a oneOf, or contains a oneOf, +// the reference is kept and we expect downstream tools to separately model these +// referenced schemas. +func (schema *Schema) ResolveRefs() { + rootSchema := schema + count := 1 + for count > 0 { + count = 0 + schema.applyToSchemas( + func(schema *Schema, context string) { + if schema.Ref != nil { + resolvedRef, err := rootSchema.resolveJSONPointer(*(schema.Ref)) + if err != nil { + log.Printf("%+v", err) + } else if resolvedRef.TypeIs("object") { + // don't substitute for objects, we'll model the referenced schema with a class + } else if context == "OneOf" { + // don't substitute for references inside oneOf declarations + } else if resolvedRef.OneOf != nil { + // don't substitute for references that contain oneOf declarations + } else if resolvedRef.AdditionalProperties != nil { + // don't substitute for references that look like objects + } else { + schema.Ref = nil + schema.CopyProperties(resolvedRef) + count++ + } + } + }, "") + } +} + +// resolveJSONPointer resolves JSON pointers. +// This current implementation is very crude and custom for OpenAPI 2.0 schemas. +// It panics for any pointer that it is unable to resolve. +func (schema *Schema) resolveJSONPointer(ref string) (result *Schema, err error) { + parts := strings.Split(ref, "#") + if len(parts) == 2 { + documentName := parts[0] + "#" + if documentName == "#" && schema.ID != nil { + documentName = *(schema.ID) + } + path := parts[1] + document := schemas[documentName] + pathParts := strings.Split(path, "/") + + // we currently do a very limited (hard-coded) resolution of certain paths and log errors for missed cases + if len(pathParts) == 1 { + return document, nil + } else if len(pathParts) == 3 { + switch pathParts[1] { + case "definitions": + dictionary := document.Definitions + for _, pair := range *dictionary { + if pair.Name == pathParts[2] { + result = pair.Value + } + } + case "properties": + dictionary := document.Properties + for _, pair := range *dictionary { + if pair.Name == pathParts[2] { + result = pair.Value + } + } + default: + break + } + } + } + if result == nil { + return nil, fmt.Errorf("unresolved pointer: %+v", ref) + } + return result, nil +} + +// ResolveAllOfs replaces "allOf" elements by merging their properties into the parent Schema. +func (schema *Schema) ResolveAllOfs() { + schema.applyToSchemas( + func(schema *Schema, context string) { + if schema.AllOf != nil { + for _, allOf := range *(schema.AllOf) { + schema.CopyProperties(allOf) + } + schema.AllOf = nil + } + }, "resolveAllOfs") +} + +// ResolveAnyOfs replaces all "anyOf" elements with "oneOf". +func (schema *Schema) ResolveAnyOfs() { + schema.applyToSchemas( + func(schema *Schema, context string) { + if schema.AnyOf != nil { + schema.OneOf = schema.AnyOf + schema.AnyOf = nil + } + }, "resolveAnyOfs") +} + +// return a pointer to a copy of a passed-in string +func stringptr(input string) (output *string) { + return &input +} + +// CopyOfficialSchemaProperty copies a named property from the official JSON Schema definition +func (schema *Schema) CopyOfficialSchemaProperty(name string) { + *schema.Properties = append(*schema.Properties, + NewNamedSchema(name, + &Schema{Ref: stringptr("http://json-schema.org/draft-04/schema#/properties/" + name)})) +} + +// CopyOfficialSchemaProperties copies named properties from the official JSON Schema definition +func (schema *Schema) CopyOfficialSchemaProperties(names []string) { + for _, name := range names { + schema.CopyOfficialSchemaProperty(name) + } +} diff --git a/vendor/github.com/googleapis/gnostic/jsonschema/reader.go b/vendor/github.com/googleapis/gnostic/jsonschema/reader.go new file mode 100644 index 00000000..b8583d46 --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/jsonschema/reader.go @@ -0,0 +1,442 @@ +// Copyright 2017 Google LLC. All Rights Reserved. +// +// 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. + +//go:generate go run generate-base.go + +package jsonschema + +import ( + "fmt" + "io/ioutil" + "strconv" + + "gopkg.in/yaml.v3" +) + +// This is a global map of all known Schemas. +// It is initialized when the first Schema is created and inserted. +var schemas map[string]*Schema + +// NewBaseSchema builds a schema object from an embedded json representation. +func NewBaseSchema() (schema *Schema, err error) { + b, err := baseSchemaBytes() + if err != nil { + return nil, err + } + var node yaml.Node + err = yaml.Unmarshal(b, &node) + if err != nil { + return nil, err + } + return NewSchemaFromObject(&node), nil +} + +// NewSchemaFromFile reads a schema from a file. +// Currently this assumes that schemas are stored in the source distribution of this project. +func NewSchemaFromFile(filename string) (schema *Schema, err error) { + file, err := ioutil.ReadFile(filename) + if err != nil { + return nil, err + } + var node yaml.Node + err = yaml.Unmarshal(file, &node) + if err != nil { + return nil, err + } + return NewSchemaFromObject(&node), nil +} + +// NewSchemaFromObject constructs a schema from a parsed JSON object. +// Due to the complexity of the schema representation, this is a +// custom reader and not the standard Go JSON reader (encoding/json). +func NewSchemaFromObject(jsonData *yaml.Node) *Schema { + switch jsonData.Kind { + case yaml.DocumentNode: + return NewSchemaFromObject(jsonData.Content[0]) + case yaml.MappingNode: + schema := &Schema{} + + for i := 0; i < len(jsonData.Content); i += 2 { + k := jsonData.Content[i].Value + v := jsonData.Content[i+1] + + switch k { + case "$schema": + schema.Schema = schema.stringValue(v) + case "id": + schema.ID = schema.stringValue(v) + + case "multipleOf": + schema.MultipleOf = schema.numberValue(v) + case "maximum": + schema.Maximum = schema.numberValue(v) + case "exclusiveMaximum": + schema.ExclusiveMaximum = schema.boolValue(v) + case "minimum": + schema.Minimum = schema.numberValue(v) + case "exclusiveMinimum": + schema.ExclusiveMinimum = schema.boolValue(v) + + case "maxLength": + schema.MaxLength = schema.intValue(v) + case "minLength": + schema.MinLength = schema.intValue(v) + case "pattern": + schema.Pattern = schema.stringValue(v) + + case "additionalItems": + schema.AdditionalItems = schema.schemaOrBooleanValue(v) + case "items": + schema.Items = schema.schemaOrSchemaArrayValue(v) + case "maxItems": + schema.MaxItems = schema.intValue(v) + case "minItems": + schema.MinItems = schema.intValue(v) + case "uniqueItems": + schema.UniqueItems = schema.boolValue(v) + + case "maxProperties": + schema.MaxProperties = schema.intValue(v) + case "minProperties": + schema.MinProperties = schema.intValue(v) + case "required": + schema.Required = schema.arrayOfStringsValue(v) + case "additionalProperties": + schema.AdditionalProperties = schema.schemaOrBooleanValue(v) + case "properties": + schema.Properties = schema.mapOfSchemasValue(v) + case "patternProperties": + schema.PatternProperties = schema.mapOfSchemasValue(v) + case "dependencies": + schema.Dependencies = schema.mapOfSchemasOrStringArraysValue(v) + + case "enum": + schema.Enumeration = schema.arrayOfEnumValuesValue(v) + + case "type": + schema.Type = schema.stringOrStringArrayValue(v) + case "allOf": + schema.AllOf = schema.arrayOfSchemasValue(v) + case "anyOf": + schema.AnyOf = schema.arrayOfSchemasValue(v) + case "oneOf": + schema.OneOf = schema.arrayOfSchemasValue(v) + case "not": + schema.Not = NewSchemaFromObject(v) + case "definitions": + schema.Definitions = schema.mapOfSchemasValue(v) + + case "title": + schema.Title = schema.stringValue(v) + case "description": + schema.Description = schema.stringValue(v) + + case "default": + schema.Default = v + + case "format": + schema.Format = schema.stringValue(v) + case "$ref": + schema.Ref = schema.stringValue(v) + default: + fmt.Printf("UNSUPPORTED (%s)\n", k) + } + } + + // insert schema in global map + if schema.ID != nil { + if schemas == nil { + schemas = make(map[string]*Schema, 0) + } + schemas[*(schema.ID)] = schema + } + return schema + + default: + fmt.Printf("schemaValue: unexpected node %+v\n", jsonData) + return nil + } + + return nil +} + +// +// BUILDERS +// The following methods build elements of Schemas from interface{} values. +// Each returns nil if it is unable to build the desired element. +// + +// Gets the string value of an interface{} value if possible. +func (schema *Schema) stringValue(v *yaml.Node) *string { + switch v.Kind { + case yaml.ScalarNode: + return &v.Value + default: + fmt.Printf("stringValue: unexpected node %+v\n", v) + } + return nil +} + +// Gets the numeric value of an interface{} value if possible. +func (schema *Schema) numberValue(v *yaml.Node) *SchemaNumber { + number := &SchemaNumber{} + switch v.Kind { + case yaml.ScalarNode: + switch v.Tag { + case "!!float": + v2, _ := strconv.ParseFloat(v.Value, 64) + number.Float = &v2 + return number + case "!!int": + v2, _ := strconv.ParseInt(v.Value, 10, 64) + number.Integer = &v2 + return number + default: + fmt.Printf("stringValue: unexpected node %+v\n", v) + } + default: + fmt.Printf("stringValue: unexpected node %+v\n", v) + } + return nil +} + +// Gets the integer value of an interface{} value if possible. +func (schema *Schema) intValue(v *yaml.Node) *int64 { + switch v.Kind { + case yaml.ScalarNode: + switch v.Tag { + case "!!float": + v2, _ := strconv.ParseFloat(v.Value, 64) + v3 := int64(v2) + return &v3 + case "!!int": + v2, _ := strconv.ParseInt(v.Value, 10, 64) + return &v2 + default: + fmt.Printf("intValue: unexpected node %+v\n", v) + } + default: + fmt.Printf("intValue: unexpected node %+v\n", v) + } + return nil +} + +// Gets the bool value of an interface{} value if possible. +func (schema *Schema) boolValue(v *yaml.Node) *bool { + switch v.Kind { + case yaml.ScalarNode: + switch v.Tag { + case "!!bool": + v2, _ := strconv.ParseBool(v.Value) + return &v2 + default: + fmt.Printf("boolValue: unexpected node %+v\n", v) + } + default: + fmt.Printf("boolValue: unexpected node %+v\n", v) + } + return nil +} + +// Gets a map of Schemas from an interface{} value if possible. +func (schema *Schema) mapOfSchemasValue(v *yaml.Node) *[]*NamedSchema { + switch v.Kind { + case yaml.MappingNode: + m := make([]*NamedSchema, 0) + for i := 0; i < len(v.Content); i += 2 { + k2 := v.Content[i].Value + v2 := v.Content[i+1] + pair := &NamedSchema{Name: k2, Value: NewSchemaFromObject(v2)} + m = append(m, pair) + } + return &m + default: + fmt.Printf("mapOfSchemasValue: unexpected node %+v\n", v) + } + return nil +} + +// Gets an array of Schemas from an interface{} value if possible. +func (schema *Schema) arrayOfSchemasValue(v *yaml.Node) *[]*Schema { + switch v.Kind { + case yaml.SequenceNode: + m := make([]*Schema, 0) + for _, v2 := range v.Content { + switch v2.Kind { + case yaml.MappingNode: + s := NewSchemaFromObject(v2) + m = append(m, s) + default: + fmt.Printf("arrayOfSchemasValue: unexpected node %+v\n", v2) + } + } + return &m + case yaml.MappingNode: + m := make([]*Schema, 0) + s := NewSchemaFromObject(v) + m = append(m, s) + return &m + default: + fmt.Printf("arrayOfSchemasValue: unexpected node %+v\n", v) + } + return nil +} + +// Gets a Schema or an array of Schemas from an interface{} value if possible. +func (schema *Schema) schemaOrSchemaArrayValue(v *yaml.Node) *SchemaOrSchemaArray { + switch v.Kind { + case yaml.SequenceNode: + m := make([]*Schema, 0) + for _, v2 := range v.Content { + switch v2.Kind { + case yaml.MappingNode: + s := NewSchemaFromObject(v2) + m = append(m, s) + default: + fmt.Printf("schemaOrSchemaArrayValue: unexpected node %+v\n", v2) + } + } + return &SchemaOrSchemaArray{SchemaArray: &m} + case yaml.MappingNode: + s := NewSchemaFromObject(v) + return &SchemaOrSchemaArray{Schema: s} + default: + fmt.Printf("schemaOrSchemaArrayValue: unexpected node %+v\n", v) + } + return nil +} + +// Gets an array of strings from an interface{} value if possible. +func (schema *Schema) arrayOfStringsValue(v *yaml.Node) *[]string { + switch v.Kind { + case yaml.ScalarNode: + a := []string{v.Value} + return &a + case yaml.SequenceNode: + a := make([]string, 0) + for _, v2 := range v.Content { + switch v2.Kind { + case yaml.ScalarNode: + a = append(a, v2.Value) + default: + fmt.Printf("arrayOfStringsValue: unexpected node %+v\n", v2) + } + } + return &a + default: + fmt.Printf("arrayOfStringsValue: unexpected node %+v\n", v) + } + return nil +} + +// Gets a string or an array of strings from an interface{} value if possible. +func (schema *Schema) stringOrStringArrayValue(v *yaml.Node) *StringOrStringArray { + switch v.Kind { + case yaml.ScalarNode: + s := &StringOrStringArray{} + s.String = &v.Value + return s + case yaml.SequenceNode: + a := make([]string, 0) + for _, v2 := range v.Content { + switch v2.Kind { + case yaml.ScalarNode: + a = append(a, v2.Value) + default: + fmt.Printf("arrayOfStringsValue: unexpected node %+v\n", v2) + } + } + s := &StringOrStringArray{} + s.StringArray = &a + return s + default: + fmt.Printf("arrayOfStringsValue: unexpected node %+v\n", v) + } + return nil +} + +// Gets an array of enum values from an interface{} value if possible. +func (schema *Schema) arrayOfEnumValuesValue(v *yaml.Node) *[]SchemaEnumValue { + a := make([]SchemaEnumValue, 0) + switch v.Kind { + case yaml.SequenceNode: + for _, v2 := range v.Content { + switch v2.Kind { + case yaml.ScalarNode: + switch v2.Tag { + case "!!str": + a = append(a, SchemaEnumValue{String: &v2.Value}) + case "!!bool": + v3, _ := strconv.ParseBool(v2.Value) + a = append(a, SchemaEnumValue{Bool: &v3}) + default: + fmt.Printf("arrayOfEnumValuesValue: unexpected type %s\n", v2.Tag) + } + default: + fmt.Printf("arrayOfEnumValuesValue: unexpected node %+v\n", v2) + } + } + default: + fmt.Printf("arrayOfEnumValuesValue: unexpected node %+v\n", v) + } + return &a +} + +// Gets a map of schemas or string arrays from an interface{} value if possible. +func (schema *Schema) mapOfSchemasOrStringArraysValue(v *yaml.Node) *[]*NamedSchemaOrStringArray { + m := make([]*NamedSchemaOrStringArray, 0) + switch v.Kind { + case yaml.MappingNode: + for i := 0; i < len(v.Content); i += 2 { + k2 := v.Content[i].Value + v2 := v.Content[i+1] + switch v2.Kind { + case yaml.SequenceNode: + a := make([]string, 0) + for _, v3 := range v2.Content { + switch v3.Kind { + case yaml.ScalarNode: + a = append(a, v3.Value) + default: + fmt.Printf("mapOfSchemasOrStringArraysValue: unexpected node %+v\n", v3) + } + } + s := &SchemaOrStringArray{} + s.StringArray = &a + pair := &NamedSchemaOrStringArray{Name: k2, Value: s} + m = append(m, pair) + default: + fmt.Printf("mapOfSchemasOrStringArraysValue: unexpected node %+v\n", v2) + } + } + default: + fmt.Printf("mapOfSchemasOrStringArraysValue: unexpected node %+v\n", v) + } + return &m +} + +// Gets a schema or a boolean value from an interface{} value if possible. +func (schema *Schema) schemaOrBooleanValue(v *yaml.Node) *SchemaOrBoolean { + schemaOrBoolean := &SchemaOrBoolean{} + switch v.Kind { + case yaml.ScalarNode: + v2, _ := strconv.ParseBool(v.Value) + schemaOrBoolean.Boolean = &v2 + case yaml.MappingNode: + schemaOrBoolean.Schema = NewSchemaFromObject(v) + default: + fmt.Printf("schemaOrBooleanValue: unexpected node %+v\n", v) + } + return schemaOrBoolean +} diff --git a/vendor/github.com/googleapis/gnostic/jsonschema/schema.json b/vendor/github.com/googleapis/gnostic/jsonschema/schema.json new file mode 100644 index 00000000..85eb502a --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/jsonschema/schema.json @@ -0,0 +1,150 @@ +{ + "id": "http://json-schema.org/draft-04/schema#", + "$schema": "http://json-schema.org/draft-04/schema#", + "description": "Core schema meta-schema", + "definitions": { + "schemaArray": { + "type": "array", + "minItems": 1, + "items": { "$ref": "#" } + }, + "positiveInteger": { + "type": "integer", + "minimum": 0 + }, + "positiveIntegerDefault0": { + "allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ] + }, + "simpleTypes": { + "enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ] + }, + "stringArray": { + "type": "array", + "items": { "type": "string" }, + "minItems": 1, + "uniqueItems": true + } + }, + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uri" + }, + "$schema": { + "type": "string", + "format": "uri" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + }, + "default": {}, + "multipleOf": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "maximum": { + "type": "number" + }, + "exclusiveMaximum": { + "type": "boolean", + "default": false + }, + "minimum": { + "type": "number" + }, + "exclusiveMinimum": { + "type": "boolean", + "default": false + }, + "maxLength": { "$ref": "#/definitions/positiveInteger" }, + "minLength": { "$ref": "#/definitions/positiveIntegerDefault0" }, + "pattern": { + "type": "string", + "format": "regex" + }, + "additionalItems": { + "anyOf": [ + { "type": "boolean" }, + { "$ref": "#" } + ], + "default": {} + }, + "items": { + "anyOf": [ + { "$ref": "#" }, + { "$ref": "#/definitions/schemaArray" } + ], + "default": {} + }, + "maxItems": { "$ref": "#/definitions/positiveInteger" }, + "minItems": { "$ref": "#/definitions/positiveIntegerDefault0" }, + "uniqueItems": { + "type": "boolean", + "default": false + }, + "maxProperties": { "$ref": "#/definitions/positiveInteger" }, + "minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" }, + "required": { "$ref": "#/definitions/stringArray" }, + "additionalProperties": { + "anyOf": [ + { "type": "boolean" }, + { "$ref": "#" } + ], + "default": {} + }, + "definitions": { + "type": "object", + "additionalProperties": { "$ref": "#" }, + "default": {} + }, + "properties": { + "type": "object", + "additionalProperties": { "$ref": "#" }, + "default": {} + }, + "patternProperties": { + "type": "object", + "additionalProperties": { "$ref": "#" }, + "default": {} + }, + "dependencies": { + "type": "object", + "additionalProperties": { + "anyOf": [ + { "$ref": "#" }, + { "$ref": "#/definitions/stringArray" } + ] + } + }, + "enum": { + "type": "array", + "minItems": 1, + "uniqueItems": true + }, + "type": { + "anyOf": [ + { "$ref": "#/definitions/simpleTypes" }, + { + "type": "array", + "items": { "$ref": "#/definitions/simpleTypes" }, + "minItems": 1, + "uniqueItems": true + } + ] + }, + "allOf": { "$ref": "#/definitions/schemaArray" }, + "anyOf": { "$ref": "#/definitions/schemaArray" }, + "oneOf": { "$ref": "#/definitions/schemaArray" }, + "not": { "$ref": "#" } + }, + "dependencies": { + "exclusiveMaximum": [ "maximum" ], + "exclusiveMinimum": [ "minimum" ] + }, + "default": {} +} diff --git a/vendor/github.com/googleapis/gnostic/jsonschema/writer.go b/vendor/github.com/googleapis/gnostic/jsonschema/writer.go new file mode 100644 index 00000000..340dc5f9 --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/jsonschema/writer.go @@ -0,0 +1,369 @@ +// Copyright 2017 Google LLC. All Rights Reserved. +// +// 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 jsonschema + +import ( + "fmt" + + "gopkg.in/yaml.v3" +) + +const indentation = " " + +func renderMappingNode(node *yaml.Node, indent string) (result string) { + result = "{\n" + innerIndent := indent + indentation + for i := 0; i < len(node.Content); i += 2 { + // first print the key + key := node.Content[i].Value + result += fmt.Sprintf("%s\"%+v\": ", innerIndent, key) + // then the value + value := node.Content[i+1] + switch value.Kind { + case yaml.ScalarNode: + result += "\"" + value.Value + "\"" + case yaml.MappingNode: + result += renderMappingNode(value, innerIndent) + case yaml.SequenceNode: + result += renderSequenceNode(value, innerIndent) + default: + result += fmt.Sprintf("???MapItem(Key:%+v, Value:%T)", value, value) + } + if i < len(node.Content)-2 { + result += "," + } + result += "\n" + } + + result += indent + "}" + return result +} + +func renderSequenceNode(node *yaml.Node, indent string) (result string) { + result = "[\n" + innerIndent := indent + indentation + for i := 0; i < len(node.Content); i++ { + item := node.Content[i] + switch item.Kind { + case yaml.ScalarNode: + result += innerIndent + "\"" + item.Value + "\"" + case yaml.MappingNode: + result += innerIndent + renderMappingNode(item, innerIndent) + "" + default: + result += innerIndent + fmt.Sprintf("???ArrayItem(%+v)", item) + } + if i < len(node.Content)-1 { + result += "," + } + result += "\n" + } + result += indent + "]" + return result +} + +func renderStringArray(array []string, indent string) (result string) { + result = "[\n" + innerIndent := indent + indentation + for i, item := range array { + result += innerIndent + "\"" + item + "\"" + if i < len(array)-1 { + result += "," + } + result += "\n" + } + result += indent + "]" + return result +} + +// Render renders a yaml.Node as JSON +func Render(node *yaml.Node) string { + if node.Kind == yaml.DocumentNode { + if len(node.Content) == 1 { + return Render(node.Content[0]) + } + } else if node.Kind == yaml.MappingNode { + return renderMappingNode(node, "") + "\n" + } else if node.Kind == yaml.SequenceNode { + return renderSequenceNode(node, "") + "\n" + } + return "" +} + +func (object *SchemaNumber) nodeValue() *yaml.Node { + if object.Integer != nil { + return nodeForInt64(*object.Integer) + } else if object.Float != nil { + return nodeForFloat64(*object.Float) + } else { + return nil + } +} + +func (object *SchemaOrBoolean) nodeValue() *yaml.Node { + if object.Schema != nil { + return object.Schema.nodeValue() + } else if object.Boolean != nil { + return nodeForBoolean(*object.Boolean) + } else { + return nil + } +} + +func nodeForStringArray(array []string) *yaml.Node { + content := make([]*yaml.Node, 0) + for _, item := range array { + content = append(content, nodeForString(item)) + } + return nodeForSequence(content) +} + +func nodeForSchemaArray(array []*Schema) *yaml.Node { + content := make([]*yaml.Node, 0) + for _, item := range array { + content = append(content, item.nodeValue()) + } + return nodeForSequence(content) +} + +func (object *StringOrStringArray) nodeValue() *yaml.Node { + if object.String != nil { + return nodeForString(*object.String) + } else if object.StringArray != nil { + return nodeForStringArray(*(object.StringArray)) + } else { + return nil + } +} + +func (object *SchemaOrStringArray) nodeValue() *yaml.Node { + if object.Schema != nil { + return object.Schema.nodeValue() + } else if object.StringArray != nil { + return nodeForStringArray(*(object.StringArray)) + } else { + return nil + } +} + +func (object *SchemaOrSchemaArray) nodeValue() *yaml.Node { + if object.Schema != nil { + return object.Schema.nodeValue() + } else if object.SchemaArray != nil { + return nodeForSchemaArray(*(object.SchemaArray)) + } else { + return nil + } +} + +func (object *SchemaEnumValue) nodeValue() *yaml.Node { + if object.String != nil { + return nodeForString(*object.String) + } else if object.Bool != nil { + return nodeForBoolean(*object.Bool) + } else { + return nil + } +} + +func nodeForNamedSchemaArray(array *[]*NamedSchema) *yaml.Node { + content := make([]*yaml.Node, 0) + for _, pair := range *(array) { + content = appendPair(content, pair.Name, pair.Value.nodeValue()) + } + return nodeForMapping(content) +} + +func nodeForNamedSchemaOrStringArray(array *[]*NamedSchemaOrStringArray) *yaml.Node { + content := make([]*yaml.Node, 0) + for _, pair := range *(array) { + content = appendPair(content, pair.Name, pair.Value.nodeValue()) + } + return nodeForMapping(content) +} + +func nodeForSchemaEnumArray(array *[]SchemaEnumValue) *yaml.Node { + content := make([]*yaml.Node, 0) + for _, item := range *array { + content = append(content, item.nodeValue()) + } + return nodeForSequence(content) +} + +func nodeForMapping(content []*yaml.Node) *yaml.Node { + return &yaml.Node{ + Kind: yaml.MappingNode, + Content: content, + } +} + +func nodeForSequence(content []*yaml.Node) *yaml.Node { + return &yaml.Node{ + Kind: yaml.SequenceNode, + Content: content, + } +} + +func nodeForString(value string) *yaml.Node { + return &yaml.Node{ + Kind: yaml.ScalarNode, + Tag: "!!str", + Value: value, + } +} + +func nodeForBoolean(value bool) *yaml.Node { + return &yaml.Node{ + Kind: yaml.ScalarNode, + Tag: "!!bool", + Value: fmt.Sprintf("%t", value), + } +} + +func nodeForInt64(value int64) *yaml.Node { + return &yaml.Node{ + Kind: yaml.ScalarNode, + Tag: "!!int", + Value: fmt.Sprintf("%d", value), + } +} + +func nodeForFloat64(value float64) *yaml.Node { + return &yaml.Node{ + Kind: yaml.ScalarNode, + Tag: "!!float", + Value: fmt.Sprintf("%f", value), + } +} + +func appendPair(nodes []*yaml.Node, name string, value *yaml.Node) []*yaml.Node { + nodes = append(nodes, nodeForString(name)) + nodes = append(nodes, value) + return nodes +} + +func (schema *Schema) nodeValue() *yaml.Node { + n := &yaml.Node{Kind: yaml.MappingNode} + content := make([]*yaml.Node, 0) + if schema.Title != nil { + content = appendPair(content, "title", nodeForString(*schema.Title)) + } + if schema.ID != nil { + content = appendPair(content, "id", nodeForString(*schema.ID)) + } + if schema.Schema != nil { + content = appendPair(content, "$schema", nodeForString(*schema.Schema)) + } + if schema.Type != nil { + content = appendPair(content, "type", schema.Type.nodeValue()) + } + if schema.Items != nil { + content = appendPair(content, "items", schema.Items.nodeValue()) + } + if schema.Description != nil { + content = appendPair(content, "description", nodeForString(*schema.Description)) + } + if schema.Required != nil { + content = appendPair(content, "required", nodeForStringArray(*schema.Required)) + } + if schema.AdditionalProperties != nil { + content = appendPair(content, "additionalProperties", schema.AdditionalProperties.nodeValue()) + } + if schema.PatternProperties != nil { + content = appendPair(content, "patternProperties", nodeForNamedSchemaArray(schema.PatternProperties)) + } + if schema.Properties != nil { + content = appendPair(content, "properties", nodeForNamedSchemaArray(schema.Properties)) + } + if schema.Dependencies != nil { + content = appendPair(content, "dependencies", nodeForNamedSchemaOrStringArray(schema.Dependencies)) + } + if schema.Ref != nil { + content = appendPair(content, "$ref", nodeForString(*schema.Ref)) + } + if schema.MultipleOf != nil { + content = appendPair(content, "multipleOf", schema.MultipleOf.nodeValue()) + } + if schema.Maximum != nil { + content = appendPair(content, "maximum", schema.Maximum.nodeValue()) + } + if schema.ExclusiveMaximum != nil { + content = appendPair(content, "exclusiveMaximum", nodeForBoolean(*schema.ExclusiveMaximum)) + } + if schema.Minimum != nil { + content = appendPair(content, "minimum", schema.Minimum.nodeValue()) + } + if schema.ExclusiveMinimum != nil { + content = appendPair(content, "exclusiveMinimum", nodeForBoolean(*schema.ExclusiveMinimum)) + } + if schema.MaxLength != nil { + content = appendPair(content, "maxLength", nodeForInt64(*schema.MaxLength)) + } + if schema.MinLength != nil { + content = appendPair(content, "minLength", nodeForInt64(*schema.MinLength)) + } + if schema.Pattern != nil { + content = appendPair(content, "pattern", nodeForString(*schema.Pattern)) + } + if schema.AdditionalItems != nil { + content = appendPair(content, "additionalItems", schema.AdditionalItems.nodeValue()) + } + if schema.MaxItems != nil { + content = appendPair(content, "maxItems", nodeForInt64(*schema.MaxItems)) + } + if schema.MinItems != nil { + content = appendPair(content, "minItems", nodeForInt64(*schema.MinItems)) + } + if schema.UniqueItems != nil { + content = appendPair(content, "uniqueItems", nodeForBoolean(*schema.UniqueItems)) + } + if schema.MaxProperties != nil { + content = appendPair(content, "maxProperties", nodeForInt64(*schema.MaxProperties)) + } + if schema.MinProperties != nil { + content = appendPair(content, "minProperties", nodeForInt64(*schema.MinProperties)) + } + if schema.Enumeration != nil { + content = appendPair(content, "enum", nodeForSchemaEnumArray(schema.Enumeration)) + } + if schema.AllOf != nil { + content = appendPair(content, "allOf", nodeForSchemaArray(*schema.AllOf)) + } + if schema.AnyOf != nil { + content = appendPair(content, "anyOf", nodeForSchemaArray(*schema.AnyOf)) + } + if schema.OneOf != nil { + content = appendPair(content, "oneOf", nodeForSchemaArray(*schema.OneOf)) + } + if schema.Not != nil { + content = appendPair(content, "not", schema.Not.nodeValue()) + } + if schema.Definitions != nil { + content = appendPair(content, "definitions", nodeForNamedSchemaArray(schema.Definitions)) + } + if schema.Default != nil { + // m = append(m, yaml.MapItem{Key: "default", Value: *schema.Default}) + } + if schema.Format != nil { + content = appendPair(content, "format", nodeForString(*schema.Format)) + } + n.Content = content + return n +} + +// JSONString returns a json representation of a schema. +func (schema *Schema) JSONString() string { + node := schema.nodeValue() + return Render(node) +} diff --git a/vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.go b/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.go similarity index 67% rename from vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.go rename to vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.go index 4fd44c45..af6c0eee 100644 --- a/vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.go +++ b/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.go @@ -1,4 +1,4 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2020 Google LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ package openapi_v2 import ( "fmt" "github.com/googleapis/gnostic/compiler" - "gopkg.in/yaml.v2" + "gopkg.in/yaml.v3" "regexp" "strings" ) @@ -30,7 +30,7 @@ func Version() string { } // NewAdditionalPropertiesItem creates an object of type AdditionalPropertiesItem if possible, returning an error if not. -func NewAdditionalPropertiesItem(in interface{}, context *compiler.Context) (*AdditionalPropertiesItem, error) { +func NewAdditionalPropertiesItem(in *yaml.Node, context *compiler.Context) (*AdditionalPropertiesItem, error) { errors := make([]error, 0) x := &AdditionalPropertiesItem{} matched := false @@ -49,9 +49,10 @@ func NewAdditionalPropertiesItem(in interface{}, context *compiler.Context) (*Ad } } // bool boolean = 2; - boolValue, ok := in.(bool) + boolValue, ok := compiler.BoolForScalarNode(in) if ok { x.Oneof = &AdditionalPropertiesItem_Boolean{Boolean: boolValue} + matched = true } if matched { // since the oneof matched one of its possibilities, discard any matching errors @@ -61,16 +62,16 @@ func NewAdditionalPropertiesItem(in interface{}, context *compiler.Context) (*Ad } // NewAny creates an object of type Any if possible, returning an error if not. -func NewAny(in interface{}, context *compiler.Context) (*Any, error) { +func NewAny(in *yaml.Node, context *compiler.Context) (*Any, error) { errors := make([]error, 0) x := &Any{} - bytes, _ := yaml.Marshal(in) + bytes := compiler.Marshal(in) x.Yaml = string(bytes) return x, compiler.NewErrorGroupOrNil(errors) } // NewApiKeySecurity creates an object of type ApiKeySecurity if possible, returning an error if not. -func NewApiKeySecurity(in interface{}, context *compiler.Context) (*ApiKeySecurity, error) { +func NewApiKeySecurity(in *yaml.Node, context *compiler.Context) (*ApiKeySecurity, error) { errors := make([]error, 0) x := &ApiKeySecurity{} m, ok := compiler.UnpackMap(in) @@ -94,68 +95,68 @@ func NewApiKeySecurity(in interface{}, context *compiler.Context) (*ApiKeySecuri // string type = 1; v1 := compiler.MapValueForKey(m, "type") if v1 != nil { - x.Type, ok = v1.(string) + x.Type, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [apiKey] if ok && !compiler.StringArrayContainsValue([]string{"apiKey"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string name = 2; v2 := compiler.MapValueForKey(m, "name") if v2 != nil { - x.Name, ok = v2.(string) + x.Name, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string in = 3; v3 := compiler.MapValueForKey(m, "in") if v3 != nil { - x.In, ok = v3.(string) + x.In, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [header query] if ok && !compiler.StringArrayContainsValue([]string{"header", "query"}, x.In) { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 4; v4 := compiler.MapValueForKey(m, "description") if v4 != nil { - x.Description, ok = v4.(string) + x.Description, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 5; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -175,7 +176,7 @@ func NewApiKeySecurity(in interface{}, context *compiler.Context) (*ApiKeySecuri } // NewBasicAuthenticationSecurity creates an object of type BasicAuthenticationSecurity if possible, returning an error if not. -func NewBasicAuthenticationSecurity(in interface{}, context *compiler.Context) (*BasicAuthenticationSecurity, error) { +func NewBasicAuthenticationSecurity(in *yaml.Node, context *compiler.Context) (*BasicAuthenticationSecurity, error) { errors := make([]error, 0) x := &BasicAuthenticationSecurity{} m, ok := compiler.UnpackMap(in) @@ -199,44 +200,44 @@ func NewBasicAuthenticationSecurity(in interface{}, context *compiler.Context) ( // string type = 1; v1 := compiler.MapValueForKey(m, "type") if v1 != nil { - x.Type, ok = v1.(string) + x.Type, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [basic] if ok && !compiler.StringArrayContainsValue([]string{"basic"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 2; v2 := compiler.MapValueForKey(m, "description") if v2 != nil { - x.Description, ok = v2.(string) + x.Description, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 3; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -256,7 +257,7 @@ func NewBasicAuthenticationSecurity(in interface{}, context *compiler.Context) ( } // NewBodyParameter creates an object of type BodyParameter if possible, returning an error if not. -func NewBodyParameter(in interface{}, context *compiler.Context) (*BodyParameter, error) { +func NewBodyParameter(in *yaml.Node, context *compiler.Context) (*BodyParameter, error) { errors := make([]error, 0) x := &BodyParameter{} m, ok := compiler.UnpackMap(in) @@ -280,42 +281,42 @@ func NewBodyParameter(in interface{}, context *compiler.Context) (*BodyParameter // string description = 1; v1 := compiler.MapValueForKey(m, "description") if v1 != nil { - x.Description, ok = v1.(string) + x.Description, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string name = 2; v2 := compiler.MapValueForKey(m, "name") if v2 != nil { - x.Name, ok = v2.(string) + x.Name, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string in = 3; v3 := compiler.MapValueForKey(m, "in") if v3 != nil { - x.In, ok = v3.(string) + x.In, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [body] if ok && !compiler.StringArrayContainsValue([]string{"body"}, x.In) { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } // bool required = 4; v4 := compiler.MapValueForKey(m, "required") if v4 != nil { - x.Required, ok = v4.(bool) + x.Required, ok = compiler.BoolForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for required: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } @@ -331,20 +332,20 @@ func NewBodyParameter(in interface{}, context *compiler.Context) (*BodyParameter // repeated NamedAny vendor_extension = 6; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -364,7 +365,7 @@ func NewBodyParameter(in interface{}, context *compiler.Context) (*BodyParameter } // NewContact creates an object of type Contact if possible, returning an error if not. -func NewContact(in interface{}, context *compiler.Context) (*Contact, error) { +func NewContact(in *yaml.Node, context *compiler.Context) (*Contact, error) { errors := make([]error, 0) x := &Contact{} m, ok := compiler.UnpackMap(in) @@ -382,47 +383,47 @@ func NewContact(in interface{}, context *compiler.Context) (*Contact, error) { // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string url = 2; v2 := compiler.MapValueForKey(m, "url") if v2 != nil { - x.Url, ok = v2.(string) + x.Url, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for url: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for url: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string email = 3; v3 := compiler.MapValueForKey(m, "email") if v3 != nil { - x.Email, ok = v3.(string) + x.Email, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for email: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for email: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 4; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -442,7 +443,7 @@ func NewContact(in interface{}, context *compiler.Context) (*Contact, error) { } // NewDefault creates an object of type Default if possible, returning an error if not. -func NewDefault(in interface{}, context *compiler.Context) (*Default, error) { +func NewDefault(in *yaml.Node, context *compiler.Context) (*Default, error) { errors := make([]error, 0) x := &Default{} m, ok := compiler.UnpackMap(in) @@ -453,19 +454,19 @@ func NewDefault(in interface{}, context *compiler.Context) (*Default, error) { // repeated NamedAny additional_properties = 1; // MAP: Any x.AdditionalProperties = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -484,7 +485,7 @@ func NewDefault(in interface{}, context *compiler.Context) (*Default, error) { } // NewDefinitions creates an object of type Definitions if possible, returning an error if not. -func NewDefinitions(in interface{}, context *compiler.Context) (*Definitions, error) { +func NewDefinitions(in *yaml.Node, context *compiler.Context) (*Definitions, error) { errors := make([]error, 0) x := &Definitions{} m, ok := compiler.UnpackMap(in) @@ -495,10 +496,10 @@ func NewDefinitions(in interface{}, context *compiler.Context) (*Definitions, er // repeated NamedSchema additional_properties = 1; // MAP: Schema x.AdditionalProperties = make([]*NamedSchema, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] pair := &NamedSchema{} pair.Name = k var err error @@ -514,7 +515,7 @@ func NewDefinitions(in interface{}, context *compiler.Context) (*Definitions, er } // NewDocument creates an object of type Document if possible, returning an error if not. -func NewDocument(in interface{}, context *compiler.Context) (*Document, error) { +func NewDocument(in *yaml.Node, context *compiler.Context) (*Document, error) { errors := make([]error, 0) x := &Document{} m, ok := compiler.UnpackMap(in) @@ -538,15 +539,15 @@ func NewDocument(in interface{}, context *compiler.Context) (*Document, error) { // string swagger = 1; v1 := compiler.MapValueForKey(m, "swagger") if v1 != nil { - x.Swagger, ok = v1.(string) + x.Swagger, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for swagger: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for swagger: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [2.0] if ok && !compiler.StringArrayContainsValue([]string{"2.0"}, x.Swagger) { - message := fmt.Sprintf("has unexpected value for swagger: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for swagger: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -562,57 +563,57 @@ func NewDocument(in interface{}, context *compiler.Context) (*Document, error) { // string host = 3; v3 := compiler.MapValueForKey(m, "host") if v3 != nil { - x.Host, ok = v3.(string) + x.Host, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for host: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for host: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } // string base_path = 4; v4 := compiler.MapValueForKey(m, "basePath") if v4 != nil { - x.BasePath, ok = v4.(string) + x.BasePath, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for basePath: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for basePath: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } // repeated string schemes = 5; v5 := compiler.MapValueForKey(m, "schemes") if v5 != nil { - v, ok := v5.([]interface{}) + v, ok := compiler.SequenceNodeForNode(v5) if ok { - x.Schemes = compiler.ConvertInterfaceArrayToStringArray(v) + x.Schemes = compiler.StringArrayForSequenceNode(v) } else { - message := fmt.Sprintf("has unexpected value for schemes: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for schemes: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [http https ws wss] if ok && !compiler.StringArrayContainsValues([]string{"http", "https", "ws", "wss"}, x.Schemes) { - message := fmt.Sprintf("has unexpected value for schemes: %+v", v5) + message := fmt.Sprintf("has unexpected value for schemes: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // repeated string consumes = 6; v6 := compiler.MapValueForKey(m, "consumes") if v6 != nil { - v, ok := v6.([]interface{}) + v, ok := compiler.SequenceNodeForNode(v6) if ok { - x.Consumes = compiler.ConvertInterfaceArrayToStringArray(v) + x.Consumes = compiler.StringArrayForSequenceNode(v) } else { - message := fmt.Sprintf("has unexpected value for consumes: %+v (%T)", v6, v6) + message := fmt.Sprintf("has unexpected value for consumes: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } } // repeated string produces = 7; v7 := compiler.MapValueForKey(m, "produces") if v7 != nil { - v, ok := v7.([]interface{}) + v, ok := compiler.SequenceNodeForNode(v7) if ok { - x.Produces = compiler.ConvertInterfaceArrayToStringArray(v) + x.Produces = compiler.StringArrayForSequenceNode(v) } else { - message := fmt.Sprintf("has unexpected value for produces: %+v (%T)", v7, v7) + message := fmt.Sprintf("has unexpected value for produces: %s", compiler.Display(v7)) errors = append(errors, compiler.NewError(context, message)) } } @@ -657,9 +658,9 @@ func NewDocument(in interface{}, context *compiler.Context) (*Document, error) { if v12 != nil { // repeated SecurityRequirement x.Security = make([]*SecurityRequirement, 0) - a, ok := v12.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v12) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewSecurityRequirement(item, compiler.NewContext("security", context)) if err != nil { errors = append(errors, err) @@ -682,9 +683,9 @@ func NewDocument(in interface{}, context *compiler.Context) (*Document, error) { if v14 != nil { // repeated Tag x.Tags = make([]*Tag, 0) - a, ok := v14.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v14) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewTag(item, compiler.NewContext("tags", context)) if err != nil { errors = append(errors, err) @@ -705,20 +706,20 @@ func NewDocument(in interface{}, context *compiler.Context) (*Document, error) { // repeated NamedAny vendor_extension = 16; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -738,7 +739,7 @@ func NewDocument(in interface{}, context *compiler.Context) (*Document, error) { } // NewExamples creates an object of type Examples if possible, returning an error if not. -func NewExamples(in interface{}, context *compiler.Context) (*Examples, error) { +func NewExamples(in *yaml.Node, context *compiler.Context) (*Examples, error) { errors := make([]error, 0) x := &Examples{} m, ok := compiler.UnpackMap(in) @@ -749,19 +750,19 @@ func NewExamples(in interface{}, context *compiler.Context) (*Examples, error) { // repeated NamedAny additional_properties = 1; // MAP: Any x.AdditionalProperties = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -780,7 +781,7 @@ func NewExamples(in interface{}, context *compiler.Context) (*Examples, error) { } // NewExternalDocs creates an object of type ExternalDocs if possible, returning an error if not. -func NewExternalDocs(in interface{}, context *compiler.Context) (*ExternalDocs, error) { +func NewExternalDocs(in *yaml.Node, context *compiler.Context) (*ExternalDocs, error) { errors := make([]error, 0) x := &ExternalDocs{} m, ok := compiler.UnpackMap(in) @@ -804,38 +805,38 @@ func NewExternalDocs(in interface{}, context *compiler.Context) (*ExternalDocs, // string description = 1; v1 := compiler.MapValueForKey(m, "description") if v1 != nil { - x.Description, ok = v1.(string) + x.Description, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string url = 2; v2 := compiler.MapValueForKey(m, "url") if v2 != nil { - x.Url, ok = v2.(string) + x.Url, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for url: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for url: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 3; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -855,7 +856,7 @@ func NewExternalDocs(in interface{}, context *compiler.Context) (*ExternalDocs, } // NewFileSchema creates an object of type FileSchema if possible, returning an error if not. -func NewFileSchema(in interface{}, context *compiler.Context) (*FileSchema, error) { +func NewFileSchema(in *yaml.Node, context *compiler.Context) (*FileSchema, error) { errors := make([]error, 0) x := &FileSchema{} m, ok := compiler.UnpackMap(in) @@ -879,27 +880,27 @@ func NewFileSchema(in interface{}, context *compiler.Context) (*FileSchema, erro // string format = 1; v1 := compiler.MapValueForKey(m, "format") if v1 != nil { - x.Format, ok = v1.(string) + x.Format, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for format: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string title = 2; v2 := compiler.MapValueForKey(m, "title") if v2 != nil { - x.Title, ok = v2.(string) + x.Title, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for title: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for title: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 3; v3 := compiler.MapValueForKey(m, "description") if v3 != nil { - x.Description, ok = v3.(string) + x.Description, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } @@ -915,35 +916,35 @@ func NewFileSchema(in interface{}, context *compiler.Context) (*FileSchema, erro // repeated string required = 5; v5 := compiler.MapValueForKey(m, "required") if v5 != nil { - v, ok := v5.([]interface{}) + v, ok := compiler.SequenceNodeForNode(v5) if ok { - x.Required = compiler.ConvertInterfaceArrayToStringArray(v) + x.Required = compiler.StringArrayForSequenceNode(v) } else { - message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for required: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // string type = 6; v6 := compiler.MapValueForKey(m, "type") if v6 != nil { - x.Type, ok = v6.(string) + x.Type, ok = compiler.StringForScalarNode(v6) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [file] if ok && !compiler.StringArrayContainsValue([]string{"file"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } } // bool read_only = 7; v7 := compiler.MapValueForKey(m, "readOnly") if v7 != nil { - x.ReadOnly, ok = v7.(bool) + x.ReadOnly, ok = compiler.BoolForScalarNode(v7) if !ok { - message := fmt.Sprintf("has unexpected value for readOnly: %+v (%T)", v7, v7) + message := fmt.Sprintf("has unexpected value for readOnly: %s", compiler.Display(v7)) errors = append(errors, compiler.NewError(context, message)) } } @@ -968,20 +969,20 @@ func NewFileSchema(in interface{}, context *compiler.Context) (*FileSchema, erro // repeated NamedAny vendor_extension = 10; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -1001,7 +1002,7 @@ func NewFileSchema(in interface{}, context *compiler.Context) (*FileSchema, erro } // NewFormDataParameterSubSchema creates an object of type FormDataParameterSubSchema if possible, returning an error if not. -func NewFormDataParameterSubSchema(in interface{}, context *compiler.Context) (*FormDataParameterSubSchema, error) { +func NewFormDataParameterSubSchema(in *yaml.Node, context *compiler.Context) (*FormDataParameterSubSchema, error) { errors := make([]error, 0) x := &FormDataParameterSubSchema{} m, ok := compiler.UnpackMap(in) @@ -1019,75 +1020,75 @@ func NewFormDataParameterSubSchema(in interface{}, context *compiler.Context) (* // bool required = 1; v1 := compiler.MapValueForKey(m, "required") if v1 != nil { - x.Required, ok = v1.(bool) + x.Required, ok = compiler.BoolForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for required: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string in = 2; v2 := compiler.MapValueForKey(m, "in") if v2 != nil { - x.In, ok = v2.(string) + x.In, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [formData] if ok && !compiler.StringArrayContainsValue([]string{"formData"}, x.In) { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 3; v3 := compiler.MapValueForKey(m, "description") if v3 != nil { - x.Description, ok = v3.(string) + x.Description, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } // string name = 4; v4 := compiler.MapValueForKey(m, "name") if v4 != nil { - x.Name, ok = v4.(string) + x.Name, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } // bool allow_empty_value = 5; v5 := compiler.MapValueForKey(m, "allowEmptyValue") if v5 != nil { - x.AllowEmptyValue, ok = v5.(bool) + x.AllowEmptyValue, ok = compiler.BoolForScalarNode(v5) if !ok { - message := fmt.Sprintf("has unexpected value for allowEmptyValue: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for allowEmptyValue: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // string type = 6; v6 := compiler.MapValueForKey(m, "type") if v6 != nil { - x.Type, ok = v6.(string) + x.Type, ok = compiler.StringForScalarNode(v6) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [string number boolean integer array file] if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "boolean", "integer", "array", "file"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } } // string format = 7; v7 := compiler.MapValueForKey(m, "format") if v7 != nil { - x.Format, ok = v7.(string) + x.Format, ok = compiler.StringForScalarNode(v7) if !ok { - message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v7, v7) + message := fmt.Sprintf("has unexpected value for format: %s", compiler.Display(v7)) errors = append(errors, compiler.NewError(context, message)) } } @@ -1103,15 +1104,15 @@ func NewFormDataParameterSubSchema(in interface{}, context *compiler.Context) (* // string collection_format = 9; v9 := compiler.MapValueForKey(m, "collectionFormat") if v9 != nil { - x.CollectionFormat, ok = v9.(string) + x.CollectionFormat, ok = compiler.StringForScalarNode(v9) if !ok { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v9, v9) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v9)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [csv ssv tsv pipes multi] if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes", "multi"}, x.CollectionFormat) { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v9, v9) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v9)) errors = append(errors, compiler.NewError(context, message)) } } @@ -1127,126 +1128,102 @@ func NewFormDataParameterSubSchema(in interface{}, context *compiler.Context) (* // float maximum = 11; v11 := compiler.MapValueForKey(m, "maximum") if v11 != nil { - switch v11 := v11.(type) { - case float64: - x.Maximum = v11 - case float32: - x.Maximum = float64(v11) - case uint64: - x.Maximum = float64(v11) - case uint32: - x.Maximum = float64(v11) - case int64: - x.Maximum = float64(v11) - case int32: - x.Maximum = float64(v11) - case int: - x.Maximum = float64(v11) - default: - message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v11, v11) + v, ok := compiler.FloatForScalarNode(v11) + if ok { + x.Maximum = v + } else { + message := fmt.Sprintf("has unexpected value for maximum: %s", compiler.Display(v11)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_maximum = 12; v12 := compiler.MapValueForKey(m, "exclusiveMaximum") if v12 != nil { - x.ExclusiveMaximum, ok = v12.(bool) + x.ExclusiveMaximum, ok = compiler.BoolForScalarNode(v12) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v12, v12) + message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %s", compiler.Display(v12)) errors = append(errors, compiler.NewError(context, message)) } } // float minimum = 13; v13 := compiler.MapValueForKey(m, "minimum") if v13 != nil { - switch v13 := v13.(type) { - case float64: - x.Minimum = v13 - case float32: - x.Minimum = float64(v13) - case uint64: - x.Minimum = float64(v13) - case uint32: - x.Minimum = float64(v13) - case int64: - x.Minimum = float64(v13) - case int32: - x.Minimum = float64(v13) - case int: - x.Minimum = float64(v13) - default: - message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v13, v13) + v, ok := compiler.FloatForScalarNode(v13) + if ok { + x.Minimum = v + } else { + message := fmt.Sprintf("has unexpected value for minimum: %s", compiler.Display(v13)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_minimum = 14; v14 := compiler.MapValueForKey(m, "exclusiveMinimum") if v14 != nil { - x.ExclusiveMinimum, ok = v14.(bool) + x.ExclusiveMinimum, ok = compiler.BoolForScalarNode(v14) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v14, v14) + message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %s", compiler.Display(v14)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_length = 15; v15 := compiler.MapValueForKey(m, "maxLength") if v15 != nil { - t, ok := v15.(int) + t, ok := compiler.IntForScalarNode(v15) if ok { x.MaxLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v15, v15) + message := fmt.Sprintf("has unexpected value for maxLength: %s", compiler.Display(v15)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_length = 16; v16 := compiler.MapValueForKey(m, "minLength") if v16 != nil { - t, ok := v16.(int) + t, ok := compiler.IntForScalarNode(v16) if ok { x.MinLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v16, v16) + message := fmt.Sprintf("has unexpected value for minLength: %s", compiler.Display(v16)) errors = append(errors, compiler.NewError(context, message)) } } // string pattern = 17; v17 := compiler.MapValueForKey(m, "pattern") if v17 != nil { - x.Pattern, ok = v17.(string) + x.Pattern, ok = compiler.StringForScalarNode(v17) if !ok { - message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v17, v17) + message := fmt.Sprintf("has unexpected value for pattern: %s", compiler.Display(v17)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_items = 18; v18 := compiler.MapValueForKey(m, "maxItems") if v18 != nil { - t, ok := v18.(int) + t, ok := compiler.IntForScalarNode(v18) if ok { x.MaxItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v18, v18) + message := fmt.Sprintf("has unexpected value for maxItems: %s", compiler.Display(v18)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_items = 19; v19 := compiler.MapValueForKey(m, "minItems") if v19 != nil { - t, ok := v19.(int) + t, ok := compiler.IntForScalarNode(v19) if ok { x.MinItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v19, v19) + message := fmt.Sprintf("has unexpected value for minItems: %s", compiler.Display(v19)) errors = append(errors, compiler.NewError(context, message)) } } // bool unique_items = 20; v20 := compiler.MapValueForKey(m, "uniqueItems") if v20 != nil { - x.UniqueItems, ok = v20.(bool) + x.UniqueItems, ok = compiler.BoolForScalarNode(v20) if !ok { - message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v20, v20) + message := fmt.Sprintf("has unexpected value for uniqueItems: %s", compiler.Display(v20)) errors = append(errors, compiler.NewError(context, message)) } } @@ -1255,9 +1232,9 @@ func NewFormDataParameterSubSchema(in interface{}, context *compiler.Context) (* if v21 != nil { // repeated Any x.Enum = make([]*Any, 0) - a, ok := v21.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v21) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewAny(item, compiler.NewContext("enum", context)) if err != nil { errors = append(errors, err) @@ -1269,43 +1246,31 @@ func NewFormDataParameterSubSchema(in interface{}, context *compiler.Context) (* // float multiple_of = 22; v22 := compiler.MapValueForKey(m, "multipleOf") if v22 != nil { - switch v22 := v22.(type) { - case float64: - x.MultipleOf = v22 - case float32: - x.MultipleOf = float64(v22) - case uint64: - x.MultipleOf = float64(v22) - case uint32: - x.MultipleOf = float64(v22) - case int64: - x.MultipleOf = float64(v22) - case int32: - x.MultipleOf = float64(v22) - case int: - x.MultipleOf = float64(v22) - default: - message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v22, v22) + v, ok := compiler.FloatForScalarNode(v22) + if ok { + x.MultipleOf = v + } else { + message := fmt.Sprintf("has unexpected value for multipleOf: %s", compiler.Display(v22)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 23; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -1325,7 +1290,7 @@ func NewFormDataParameterSubSchema(in interface{}, context *compiler.Context) (* } // NewHeader creates an object of type Header if possible, returning an error if not. -func NewHeader(in interface{}, context *compiler.Context) (*Header, error) { +func NewHeader(in *yaml.Node, context *compiler.Context) (*Header, error) { errors := make([]error, 0) x := &Header{} m, ok := compiler.UnpackMap(in) @@ -1349,24 +1314,24 @@ func NewHeader(in interface{}, context *compiler.Context) (*Header, error) { // string type = 1; v1 := compiler.MapValueForKey(m, "type") if v1 != nil { - x.Type, ok = v1.(string) + x.Type, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [string number integer boolean array] if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "integer", "boolean", "array"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string format = 2; v2 := compiler.MapValueForKey(m, "format") if v2 != nil { - x.Format, ok = v2.(string) + x.Format, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for format: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } @@ -1382,15 +1347,15 @@ func NewHeader(in interface{}, context *compiler.Context) (*Header, error) { // string collection_format = 4; v4 := compiler.MapValueForKey(m, "collectionFormat") if v4 != nil { - x.CollectionFormat, ok = v4.(string) + x.CollectionFormat, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [csv ssv tsv pipes] if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes"}, x.CollectionFormat) { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } @@ -1406,126 +1371,102 @@ func NewHeader(in interface{}, context *compiler.Context) (*Header, error) { // float maximum = 6; v6 := compiler.MapValueForKey(m, "maximum") if v6 != nil { - switch v6 := v6.(type) { - case float64: - x.Maximum = v6 - case float32: - x.Maximum = float64(v6) - case uint64: - x.Maximum = float64(v6) - case uint32: - x.Maximum = float64(v6) - case int64: - x.Maximum = float64(v6) - case int32: - x.Maximum = float64(v6) - case int: - x.Maximum = float64(v6) - default: - message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v6, v6) + v, ok := compiler.FloatForScalarNode(v6) + if ok { + x.Maximum = v + } else { + message := fmt.Sprintf("has unexpected value for maximum: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_maximum = 7; v7 := compiler.MapValueForKey(m, "exclusiveMaximum") if v7 != nil { - x.ExclusiveMaximum, ok = v7.(bool) + x.ExclusiveMaximum, ok = compiler.BoolForScalarNode(v7) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v7, v7) + message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %s", compiler.Display(v7)) errors = append(errors, compiler.NewError(context, message)) } } // float minimum = 8; v8 := compiler.MapValueForKey(m, "minimum") if v8 != nil { - switch v8 := v8.(type) { - case float64: - x.Minimum = v8 - case float32: - x.Minimum = float64(v8) - case uint64: - x.Minimum = float64(v8) - case uint32: - x.Minimum = float64(v8) - case int64: - x.Minimum = float64(v8) - case int32: - x.Minimum = float64(v8) - case int: - x.Minimum = float64(v8) - default: - message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v8, v8) + v, ok := compiler.FloatForScalarNode(v8) + if ok { + x.Minimum = v + } else { + message := fmt.Sprintf("has unexpected value for minimum: %s", compiler.Display(v8)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_minimum = 9; v9 := compiler.MapValueForKey(m, "exclusiveMinimum") if v9 != nil { - x.ExclusiveMinimum, ok = v9.(bool) + x.ExclusiveMinimum, ok = compiler.BoolForScalarNode(v9) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v9, v9) + message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %s", compiler.Display(v9)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_length = 10; v10 := compiler.MapValueForKey(m, "maxLength") if v10 != nil { - t, ok := v10.(int) + t, ok := compiler.IntForScalarNode(v10) if ok { x.MaxLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v10, v10) + message := fmt.Sprintf("has unexpected value for maxLength: %s", compiler.Display(v10)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_length = 11; v11 := compiler.MapValueForKey(m, "minLength") if v11 != nil { - t, ok := v11.(int) + t, ok := compiler.IntForScalarNode(v11) if ok { x.MinLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v11, v11) + message := fmt.Sprintf("has unexpected value for minLength: %s", compiler.Display(v11)) errors = append(errors, compiler.NewError(context, message)) } } // string pattern = 12; v12 := compiler.MapValueForKey(m, "pattern") if v12 != nil { - x.Pattern, ok = v12.(string) + x.Pattern, ok = compiler.StringForScalarNode(v12) if !ok { - message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v12, v12) + message := fmt.Sprintf("has unexpected value for pattern: %s", compiler.Display(v12)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_items = 13; v13 := compiler.MapValueForKey(m, "maxItems") if v13 != nil { - t, ok := v13.(int) + t, ok := compiler.IntForScalarNode(v13) if ok { x.MaxItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v13, v13) + message := fmt.Sprintf("has unexpected value for maxItems: %s", compiler.Display(v13)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_items = 14; v14 := compiler.MapValueForKey(m, "minItems") if v14 != nil { - t, ok := v14.(int) + t, ok := compiler.IntForScalarNode(v14) if ok { x.MinItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v14, v14) + message := fmt.Sprintf("has unexpected value for minItems: %s", compiler.Display(v14)) errors = append(errors, compiler.NewError(context, message)) } } // bool unique_items = 15; v15 := compiler.MapValueForKey(m, "uniqueItems") if v15 != nil { - x.UniqueItems, ok = v15.(bool) + x.UniqueItems, ok = compiler.BoolForScalarNode(v15) if !ok { - message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v15, v15) + message := fmt.Sprintf("has unexpected value for uniqueItems: %s", compiler.Display(v15)) errors = append(errors, compiler.NewError(context, message)) } } @@ -1534,9 +1475,9 @@ func NewHeader(in interface{}, context *compiler.Context) (*Header, error) { if v16 != nil { // repeated Any x.Enum = make([]*Any, 0) - a, ok := v16.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v16) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewAny(item, compiler.NewContext("enum", context)) if err != nil { errors = append(errors, err) @@ -1548,52 +1489,40 @@ func NewHeader(in interface{}, context *compiler.Context) (*Header, error) { // float multiple_of = 17; v17 := compiler.MapValueForKey(m, "multipleOf") if v17 != nil { - switch v17 := v17.(type) { - case float64: - x.MultipleOf = v17 - case float32: - x.MultipleOf = float64(v17) - case uint64: - x.MultipleOf = float64(v17) - case uint32: - x.MultipleOf = float64(v17) - case int64: - x.MultipleOf = float64(v17) - case int32: - x.MultipleOf = float64(v17) - case int: - x.MultipleOf = float64(v17) - default: - message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v17, v17) + v, ok := compiler.FloatForScalarNode(v17) + if ok { + x.MultipleOf = v + } else { + message := fmt.Sprintf("has unexpected value for multipleOf: %s", compiler.Display(v17)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 18; v18 := compiler.MapValueForKey(m, "description") if v18 != nil { - x.Description, ok = v18.(string) + x.Description, ok = compiler.StringForScalarNode(v18) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v18, v18) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v18)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 19; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -1613,7 +1542,7 @@ func NewHeader(in interface{}, context *compiler.Context) (*Header, error) { } // NewHeaderParameterSubSchema creates an object of type HeaderParameterSubSchema if possible, returning an error if not. -func NewHeaderParameterSubSchema(in interface{}, context *compiler.Context) (*HeaderParameterSubSchema, error) { +func NewHeaderParameterSubSchema(in *yaml.Node, context *compiler.Context) (*HeaderParameterSubSchema, error) { errors := make([]error, 0) x := &HeaderParameterSubSchema{} m, ok := compiler.UnpackMap(in) @@ -1631,66 +1560,66 @@ func NewHeaderParameterSubSchema(in interface{}, context *compiler.Context) (*He // bool required = 1; v1 := compiler.MapValueForKey(m, "required") if v1 != nil { - x.Required, ok = v1.(bool) + x.Required, ok = compiler.BoolForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for required: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string in = 2; v2 := compiler.MapValueForKey(m, "in") if v2 != nil { - x.In, ok = v2.(string) + x.In, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [header] if ok && !compiler.StringArrayContainsValue([]string{"header"}, x.In) { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 3; v3 := compiler.MapValueForKey(m, "description") if v3 != nil { - x.Description, ok = v3.(string) + x.Description, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } // string name = 4; v4 := compiler.MapValueForKey(m, "name") if v4 != nil { - x.Name, ok = v4.(string) + x.Name, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } // string type = 5; v5 := compiler.MapValueForKey(m, "type") if v5 != nil { - x.Type, ok = v5.(string) + x.Type, ok = compiler.StringForScalarNode(v5) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [string number boolean integer array] if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "boolean", "integer", "array"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // string format = 6; v6 := compiler.MapValueForKey(m, "format") if v6 != nil { - x.Format, ok = v6.(string) + x.Format, ok = compiler.StringForScalarNode(v6) if !ok { - message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v6, v6) + message := fmt.Sprintf("has unexpected value for format: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } } @@ -1706,15 +1635,15 @@ func NewHeaderParameterSubSchema(in interface{}, context *compiler.Context) (*He // string collection_format = 8; v8 := compiler.MapValueForKey(m, "collectionFormat") if v8 != nil { - x.CollectionFormat, ok = v8.(string) + x.CollectionFormat, ok = compiler.StringForScalarNode(v8) if !ok { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v8, v8) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v8)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [csv ssv tsv pipes] if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes"}, x.CollectionFormat) { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v8, v8) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v8)) errors = append(errors, compiler.NewError(context, message)) } } @@ -1730,126 +1659,102 @@ func NewHeaderParameterSubSchema(in interface{}, context *compiler.Context) (*He // float maximum = 10; v10 := compiler.MapValueForKey(m, "maximum") if v10 != nil { - switch v10 := v10.(type) { - case float64: - x.Maximum = v10 - case float32: - x.Maximum = float64(v10) - case uint64: - x.Maximum = float64(v10) - case uint32: - x.Maximum = float64(v10) - case int64: - x.Maximum = float64(v10) - case int32: - x.Maximum = float64(v10) - case int: - x.Maximum = float64(v10) - default: - message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v10, v10) + v, ok := compiler.FloatForScalarNode(v10) + if ok { + x.Maximum = v + } else { + message := fmt.Sprintf("has unexpected value for maximum: %s", compiler.Display(v10)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_maximum = 11; v11 := compiler.MapValueForKey(m, "exclusiveMaximum") if v11 != nil { - x.ExclusiveMaximum, ok = v11.(bool) + x.ExclusiveMaximum, ok = compiler.BoolForScalarNode(v11) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v11, v11) + message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %s", compiler.Display(v11)) errors = append(errors, compiler.NewError(context, message)) } } // float minimum = 12; v12 := compiler.MapValueForKey(m, "minimum") if v12 != nil { - switch v12 := v12.(type) { - case float64: - x.Minimum = v12 - case float32: - x.Minimum = float64(v12) - case uint64: - x.Minimum = float64(v12) - case uint32: - x.Minimum = float64(v12) - case int64: - x.Minimum = float64(v12) - case int32: - x.Minimum = float64(v12) - case int: - x.Minimum = float64(v12) - default: - message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v12, v12) + v, ok := compiler.FloatForScalarNode(v12) + if ok { + x.Minimum = v + } else { + message := fmt.Sprintf("has unexpected value for minimum: %s", compiler.Display(v12)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_minimum = 13; v13 := compiler.MapValueForKey(m, "exclusiveMinimum") if v13 != nil { - x.ExclusiveMinimum, ok = v13.(bool) + x.ExclusiveMinimum, ok = compiler.BoolForScalarNode(v13) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v13, v13) + message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %s", compiler.Display(v13)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_length = 14; v14 := compiler.MapValueForKey(m, "maxLength") if v14 != nil { - t, ok := v14.(int) + t, ok := compiler.IntForScalarNode(v14) if ok { x.MaxLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v14, v14) + message := fmt.Sprintf("has unexpected value for maxLength: %s", compiler.Display(v14)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_length = 15; v15 := compiler.MapValueForKey(m, "minLength") if v15 != nil { - t, ok := v15.(int) + t, ok := compiler.IntForScalarNode(v15) if ok { x.MinLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v15, v15) + message := fmt.Sprintf("has unexpected value for minLength: %s", compiler.Display(v15)) errors = append(errors, compiler.NewError(context, message)) } } // string pattern = 16; v16 := compiler.MapValueForKey(m, "pattern") if v16 != nil { - x.Pattern, ok = v16.(string) + x.Pattern, ok = compiler.StringForScalarNode(v16) if !ok { - message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v16, v16) + message := fmt.Sprintf("has unexpected value for pattern: %s", compiler.Display(v16)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_items = 17; v17 := compiler.MapValueForKey(m, "maxItems") if v17 != nil { - t, ok := v17.(int) + t, ok := compiler.IntForScalarNode(v17) if ok { x.MaxItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v17, v17) + message := fmt.Sprintf("has unexpected value for maxItems: %s", compiler.Display(v17)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_items = 18; v18 := compiler.MapValueForKey(m, "minItems") if v18 != nil { - t, ok := v18.(int) + t, ok := compiler.IntForScalarNode(v18) if ok { x.MinItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v18, v18) + message := fmt.Sprintf("has unexpected value for minItems: %s", compiler.Display(v18)) errors = append(errors, compiler.NewError(context, message)) } } // bool unique_items = 19; v19 := compiler.MapValueForKey(m, "uniqueItems") if v19 != nil { - x.UniqueItems, ok = v19.(bool) + x.UniqueItems, ok = compiler.BoolForScalarNode(v19) if !ok { - message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v19, v19) + message := fmt.Sprintf("has unexpected value for uniqueItems: %s", compiler.Display(v19)) errors = append(errors, compiler.NewError(context, message)) } } @@ -1858,9 +1763,9 @@ func NewHeaderParameterSubSchema(in interface{}, context *compiler.Context) (*He if v20 != nil { // repeated Any x.Enum = make([]*Any, 0) - a, ok := v20.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v20) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewAny(item, compiler.NewContext("enum", context)) if err != nil { errors = append(errors, err) @@ -1872,43 +1777,31 @@ func NewHeaderParameterSubSchema(in interface{}, context *compiler.Context) (*He // float multiple_of = 21; v21 := compiler.MapValueForKey(m, "multipleOf") if v21 != nil { - switch v21 := v21.(type) { - case float64: - x.MultipleOf = v21 - case float32: - x.MultipleOf = float64(v21) - case uint64: - x.MultipleOf = float64(v21) - case uint32: - x.MultipleOf = float64(v21) - case int64: - x.MultipleOf = float64(v21) - case int32: - x.MultipleOf = float64(v21) - case int: - x.MultipleOf = float64(v21) - default: - message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v21, v21) + v, ok := compiler.FloatForScalarNode(v21) + if ok { + x.MultipleOf = v + } else { + message := fmt.Sprintf("has unexpected value for multipleOf: %s", compiler.Display(v21)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 22; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -1928,7 +1821,7 @@ func NewHeaderParameterSubSchema(in interface{}, context *compiler.Context) (*He } // NewHeaders creates an object of type Headers if possible, returning an error if not. -func NewHeaders(in interface{}, context *compiler.Context) (*Headers, error) { +func NewHeaders(in *yaml.Node, context *compiler.Context) (*Headers, error) { errors := make([]error, 0) x := &Headers{} m, ok := compiler.UnpackMap(in) @@ -1939,10 +1832,10 @@ func NewHeaders(in interface{}, context *compiler.Context) (*Headers, error) { // repeated NamedHeader additional_properties = 1; // MAP: Header x.AdditionalProperties = make([]*NamedHeader, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] pair := &NamedHeader{} pair.Name = k var err error @@ -1958,7 +1851,7 @@ func NewHeaders(in interface{}, context *compiler.Context) (*Headers, error) { } // NewInfo creates an object of type Info if possible, returning an error if not. -func NewInfo(in interface{}, context *compiler.Context) (*Info, error) { +func NewInfo(in *yaml.Node, context *compiler.Context) (*Info, error) { errors := make([]error, 0) x := &Info{} m, ok := compiler.UnpackMap(in) @@ -1982,36 +1875,36 @@ func NewInfo(in interface{}, context *compiler.Context) (*Info, error) { // string title = 1; v1 := compiler.MapValueForKey(m, "title") if v1 != nil { - x.Title, ok = v1.(string) + x.Title, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for title: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for title: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string version = 2; v2 := compiler.MapValueForKey(m, "version") if v2 != nil { - x.Version, ok = v2.(string) + x.Version, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for version: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for version: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 3; v3 := compiler.MapValueForKey(m, "description") if v3 != nil { - x.Description, ok = v3.(string) + x.Description, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } // string terms_of_service = 4; v4 := compiler.MapValueForKey(m, "termsOfService") if v4 != nil { - x.TermsOfService, ok = v4.(string) + x.TermsOfService, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for termsOfService: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for termsOfService: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2036,20 +1929,20 @@ func NewInfo(in interface{}, context *compiler.Context) (*Info, error) { // repeated NamedAny vendor_extension = 7; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -2069,7 +1962,7 @@ func NewInfo(in interface{}, context *compiler.Context) (*Info, error) { } // NewItemsItem creates an object of type ItemsItem if possible, returning an error if not. -func NewItemsItem(in interface{}, context *compiler.Context) (*ItemsItem, error) { +func NewItemsItem(in *yaml.Node, context *compiler.Context) (*ItemsItem, error) { errors := make([]error, 0) x := &ItemsItem{} m, ok := compiler.UnpackMap(in) @@ -2088,7 +1981,7 @@ func NewItemsItem(in interface{}, context *compiler.Context) (*ItemsItem, error) } // NewJsonReference creates an object of type JsonReference if possible, returning an error if not. -func NewJsonReference(in interface{}, context *compiler.Context) (*JsonReference, error) { +func NewJsonReference(in *yaml.Node, context *compiler.Context) (*JsonReference, error) { errors := make([]error, 0) x := &JsonReference{} m, ok := compiler.UnpackMap(in) @@ -2102,28 +1995,21 @@ func NewJsonReference(in interface{}, context *compiler.Context) (*JsonReference message := fmt.Sprintf("is missing required %s: %+v", compiler.PluralProperties(len(missingKeys)), strings.Join(missingKeys, ", ")) errors = append(errors, compiler.NewError(context, message)) } - allowedKeys := []string{"$ref", "description"} - var allowedPatterns []*regexp.Regexp - invalidKeys := compiler.InvalidKeysInMap(m, allowedKeys, allowedPatterns) - if len(invalidKeys) > 0 { - message := fmt.Sprintf("has invalid %s: %+v", compiler.PluralProperties(len(invalidKeys)), strings.Join(invalidKeys, ", ")) - errors = append(errors, compiler.NewError(context, message)) - } // string _ref = 1; v1 := compiler.MapValueForKey(m, "$ref") if v1 != nil { - x.XRef, ok = v1.(string) + x.XRef, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for $ref: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for $ref: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 2; v2 := compiler.MapValueForKey(m, "description") if v2 != nil { - x.Description, ok = v2.(string) + x.Description, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2132,7 +2018,7 @@ func NewJsonReference(in interface{}, context *compiler.Context) (*JsonReference } // NewLicense creates an object of type License if possible, returning an error if not. -func NewLicense(in interface{}, context *compiler.Context) (*License, error) { +func NewLicense(in *yaml.Node, context *compiler.Context) (*License, error) { errors := make([]error, 0) x := &License{} m, ok := compiler.UnpackMap(in) @@ -2156,38 +2042,38 @@ func NewLicense(in interface{}, context *compiler.Context) (*License, error) { // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string url = 2; v2 := compiler.MapValueForKey(m, "url") if v2 != nil { - x.Url, ok = v2.(string) + x.Url, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for url: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for url: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 3; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -2207,7 +2093,7 @@ func NewLicense(in interface{}, context *compiler.Context) (*License, error) { } // NewNamedAny creates an object of type NamedAny if possible, returning an error if not. -func NewNamedAny(in interface{}, context *compiler.Context) (*NamedAny, error) { +func NewNamedAny(in *yaml.Node, context *compiler.Context) (*NamedAny, error) { errors := make([]error, 0) x := &NamedAny{} m, ok := compiler.UnpackMap(in) @@ -2225,9 +2111,9 @@ func NewNamedAny(in interface{}, context *compiler.Context) (*NamedAny, error) { // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2245,7 +2131,7 @@ func NewNamedAny(in interface{}, context *compiler.Context) (*NamedAny, error) { } // NewNamedHeader creates an object of type NamedHeader if possible, returning an error if not. -func NewNamedHeader(in interface{}, context *compiler.Context) (*NamedHeader, error) { +func NewNamedHeader(in *yaml.Node, context *compiler.Context) (*NamedHeader, error) { errors := make([]error, 0) x := &NamedHeader{} m, ok := compiler.UnpackMap(in) @@ -2263,9 +2149,9 @@ func NewNamedHeader(in interface{}, context *compiler.Context) (*NamedHeader, er // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2283,7 +2169,7 @@ func NewNamedHeader(in interface{}, context *compiler.Context) (*NamedHeader, er } // NewNamedParameter creates an object of type NamedParameter if possible, returning an error if not. -func NewNamedParameter(in interface{}, context *compiler.Context) (*NamedParameter, error) { +func NewNamedParameter(in *yaml.Node, context *compiler.Context) (*NamedParameter, error) { errors := make([]error, 0) x := &NamedParameter{} m, ok := compiler.UnpackMap(in) @@ -2301,9 +2187,9 @@ func NewNamedParameter(in interface{}, context *compiler.Context) (*NamedParamet // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2321,7 +2207,7 @@ func NewNamedParameter(in interface{}, context *compiler.Context) (*NamedParamet } // NewNamedPathItem creates an object of type NamedPathItem if possible, returning an error if not. -func NewNamedPathItem(in interface{}, context *compiler.Context) (*NamedPathItem, error) { +func NewNamedPathItem(in *yaml.Node, context *compiler.Context) (*NamedPathItem, error) { errors := make([]error, 0) x := &NamedPathItem{} m, ok := compiler.UnpackMap(in) @@ -2339,9 +2225,9 @@ func NewNamedPathItem(in interface{}, context *compiler.Context) (*NamedPathItem // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2359,7 +2245,7 @@ func NewNamedPathItem(in interface{}, context *compiler.Context) (*NamedPathItem } // NewNamedResponse creates an object of type NamedResponse if possible, returning an error if not. -func NewNamedResponse(in interface{}, context *compiler.Context) (*NamedResponse, error) { +func NewNamedResponse(in *yaml.Node, context *compiler.Context) (*NamedResponse, error) { errors := make([]error, 0) x := &NamedResponse{} m, ok := compiler.UnpackMap(in) @@ -2377,9 +2263,9 @@ func NewNamedResponse(in interface{}, context *compiler.Context) (*NamedResponse // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2397,7 +2283,7 @@ func NewNamedResponse(in interface{}, context *compiler.Context) (*NamedResponse } // NewNamedResponseValue creates an object of type NamedResponseValue if possible, returning an error if not. -func NewNamedResponseValue(in interface{}, context *compiler.Context) (*NamedResponseValue, error) { +func NewNamedResponseValue(in *yaml.Node, context *compiler.Context) (*NamedResponseValue, error) { errors := make([]error, 0) x := &NamedResponseValue{} m, ok := compiler.UnpackMap(in) @@ -2415,9 +2301,9 @@ func NewNamedResponseValue(in interface{}, context *compiler.Context) (*NamedRes // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2435,7 +2321,7 @@ func NewNamedResponseValue(in interface{}, context *compiler.Context) (*NamedRes } // NewNamedSchema creates an object of type NamedSchema if possible, returning an error if not. -func NewNamedSchema(in interface{}, context *compiler.Context) (*NamedSchema, error) { +func NewNamedSchema(in *yaml.Node, context *compiler.Context) (*NamedSchema, error) { errors := make([]error, 0) x := &NamedSchema{} m, ok := compiler.UnpackMap(in) @@ -2453,9 +2339,9 @@ func NewNamedSchema(in interface{}, context *compiler.Context) (*NamedSchema, er // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2473,7 +2359,7 @@ func NewNamedSchema(in interface{}, context *compiler.Context) (*NamedSchema, er } // NewNamedSecurityDefinitionsItem creates an object of type NamedSecurityDefinitionsItem if possible, returning an error if not. -func NewNamedSecurityDefinitionsItem(in interface{}, context *compiler.Context) (*NamedSecurityDefinitionsItem, error) { +func NewNamedSecurityDefinitionsItem(in *yaml.Node, context *compiler.Context) (*NamedSecurityDefinitionsItem, error) { errors := make([]error, 0) x := &NamedSecurityDefinitionsItem{} m, ok := compiler.UnpackMap(in) @@ -2491,9 +2377,9 @@ func NewNamedSecurityDefinitionsItem(in interface{}, context *compiler.Context) // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2511,7 +2397,7 @@ func NewNamedSecurityDefinitionsItem(in interface{}, context *compiler.Context) } // NewNamedString creates an object of type NamedString if possible, returning an error if not. -func NewNamedString(in interface{}, context *compiler.Context) (*NamedString, error) { +func NewNamedString(in *yaml.Node, context *compiler.Context) (*NamedString, error) { errors := make([]error, 0) x := &NamedString{} m, ok := compiler.UnpackMap(in) @@ -2529,18 +2415,18 @@ func NewNamedString(in interface{}, context *compiler.Context) (*NamedString, er // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string value = 2; v2 := compiler.MapValueForKey(m, "value") if v2 != nil { - x.Value, ok = v2.(string) + x.Value, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for value: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for value: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2549,7 +2435,7 @@ func NewNamedString(in interface{}, context *compiler.Context) (*NamedString, er } // NewNamedStringArray creates an object of type NamedStringArray if possible, returning an error if not. -func NewNamedStringArray(in interface{}, context *compiler.Context) (*NamedStringArray, error) { +func NewNamedStringArray(in *yaml.Node, context *compiler.Context) (*NamedStringArray, error) { errors := make([]error, 0) x := &NamedStringArray{} m, ok := compiler.UnpackMap(in) @@ -2567,9 +2453,9 @@ func NewNamedStringArray(in interface{}, context *compiler.Context) (*NamedStrin // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2587,7 +2473,7 @@ func NewNamedStringArray(in interface{}, context *compiler.Context) (*NamedStrin } // NewNonBodyParameter creates an object of type NonBodyParameter if possible, returning an error if not. -func NewNonBodyParameter(in interface{}, context *compiler.Context) (*NonBodyParameter, error) { +func NewNonBodyParameter(in *yaml.Node, context *compiler.Context) (*NonBodyParameter, error) { errors := make([]error, 0) x := &NonBodyParameter{} matched := false @@ -2655,7 +2541,7 @@ func NewNonBodyParameter(in interface{}, context *compiler.Context) (*NonBodyPar } // NewOauth2AccessCodeSecurity creates an object of type Oauth2AccessCodeSecurity if possible, returning an error if not. -func NewOauth2AccessCodeSecurity(in interface{}, context *compiler.Context) (*Oauth2AccessCodeSecurity, error) { +func NewOauth2AccessCodeSecurity(in *yaml.Node, context *compiler.Context) (*Oauth2AccessCodeSecurity, error) { errors := make([]error, 0) x := &Oauth2AccessCodeSecurity{} m, ok := compiler.UnpackMap(in) @@ -2679,30 +2565,30 @@ func NewOauth2AccessCodeSecurity(in interface{}, context *compiler.Context) (*Oa // string type = 1; v1 := compiler.MapValueForKey(m, "type") if v1 != nil { - x.Type, ok = v1.(string) + x.Type, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [oauth2] if ok && !compiler.StringArrayContainsValue([]string{"oauth2"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string flow = 2; v2 := compiler.MapValueForKey(m, "flow") if v2 != nil { - x.Flow, ok = v2.(string) + x.Flow, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for flow: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [accessCode] if ok && !compiler.StringArrayContainsValue([]string{"accessCode"}, x.Flow) { - message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for flow: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2718,47 +2604,47 @@ func NewOauth2AccessCodeSecurity(in interface{}, context *compiler.Context) (*Oa // string authorization_url = 4; v4 := compiler.MapValueForKey(m, "authorizationUrl") if v4 != nil { - x.AuthorizationUrl, ok = v4.(string) + x.AuthorizationUrl, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for authorizationUrl: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for authorizationUrl: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } // string token_url = 5; v5 := compiler.MapValueForKey(m, "tokenUrl") if v5 != nil { - x.TokenUrl, ok = v5.(string) + x.TokenUrl, ok = compiler.StringForScalarNode(v5) if !ok { - message := fmt.Sprintf("has unexpected value for tokenUrl: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for tokenUrl: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 6; v6 := compiler.MapValueForKey(m, "description") if v6 != nil { - x.Description, ok = v6.(string) + x.Description, ok = compiler.StringForScalarNode(v6) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v6, v6) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 7; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -2778,7 +2664,7 @@ func NewOauth2AccessCodeSecurity(in interface{}, context *compiler.Context) (*Oa } // NewOauth2ApplicationSecurity creates an object of type Oauth2ApplicationSecurity if possible, returning an error if not. -func NewOauth2ApplicationSecurity(in interface{}, context *compiler.Context) (*Oauth2ApplicationSecurity, error) { +func NewOauth2ApplicationSecurity(in *yaml.Node, context *compiler.Context) (*Oauth2ApplicationSecurity, error) { errors := make([]error, 0) x := &Oauth2ApplicationSecurity{} m, ok := compiler.UnpackMap(in) @@ -2802,30 +2688,30 @@ func NewOauth2ApplicationSecurity(in interface{}, context *compiler.Context) (*O // string type = 1; v1 := compiler.MapValueForKey(m, "type") if v1 != nil { - x.Type, ok = v1.(string) + x.Type, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [oauth2] if ok && !compiler.StringArrayContainsValue([]string{"oauth2"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string flow = 2; v2 := compiler.MapValueForKey(m, "flow") if v2 != nil { - x.Flow, ok = v2.(string) + x.Flow, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for flow: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [application] if ok && !compiler.StringArrayContainsValue([]string{"application"}, x.Flow) { - message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for flow: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2841,38 +2727,38 @@ func NewOauth2ApplicationSecurity(in interface{}, context *compiler.Context) (*O // string token_url = 4; v4 := compiler.MapValueForKey(m, "tokenUrl") if v4 != nil { - x.TokenUrl, ok = v4.(string) + x.TokenUrl, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for tokenUrl: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for tokenUrl: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 5; v5 := compiler.MapValueForKey(m, "description") if v5 != nil { - x.Description, ok = v5.(string) + x.Description, ok = compiler.StringForScalarNode(v5) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 6; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -2892,7 +2778,7 @@ func NewOauth2ApplicationSecurity(in interface{}, context *compiler.Context) (*O } // NewOauth2ImplicitSecurity creates an object of type Oauth2ImplicitSecurity if possible, returning an error if not. -func NewOauth2ImplicitSecurity(in interface{}, context *compiler.Context) (*Oauth2ImplicitSecurity, error) { +func NewOauth2ImplicitSecurity(in *yaml.Node, context *compiler.Context) (*Oauth2ImplicitSecurity, error) { errors := make([]error, 0) x := &Oauth2ImplicitSecurity{} m, ok := compiler.UnpackMap(in) @@ -2916,30 +2802,30 @@ func NewOauth2ImplicitSecurity(in interface{}, context *compiler.Context) (*Oaut // string type = 1; v1 := compiler.MapValueForKey(m, "type") if v1 != nil { - x.Type, ok = v1.(string) + x.Type, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [oauth2] if ok && !compiler.StringArrayContainsValue([]string{"oauth2"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string flow = 2; v2 := compiler.MapValueForKey(m, "flow") if v2 != nil { - x.Flow, ok = v2.(string) + x.Flow, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for flow: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [implicit] if ok && !compiler.StringArrayContainsValue([]string{"implicit"}, x.Flow) { - message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for flow: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } @@ -2955,38 +2841,38 @@ func NewOauth2ImplicitSecurity(in interface{}, context *compiler.Context) (*Oaut // string authorization_url = 4; v4 := compiler.MapValueForKey(m, "authorizationUrl") if v4 != nil { - x.AuthorizationUrl, ok = v4.(string) + x.AuthorizationUrl, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for authorizationUrl: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for authorizationUrl: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 5; v5 := compiler.MapValueForKey(m, "description") if v5 != nil { - x.Description, ok = v5.(string) + x.Description, ok = compiler.StringForScalarNode(v5) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 6; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -3006,7 +2892,7 @@ func NewOauth2ImplicitSecurity(in interface{}, context *compiler.Context) (*Oaut } // NewOauth2PasswordSecurity creates an object of type Oauth2PasswordSecurity if possible, returning an error if not. -func NewOauth2PasswordSecurity(in interface{}, context *compiler.Context) (*Oauth2PasswordSecurity, error) { +func NewOauth2PasswordSecurity(in *yaml.Node, context *compiler.Context) (*Oauth2PasswordSecurity, error) { errors := make([]error, 0) x := &Oauth2PasswordSecurity{} m, ok := compiler.UnpackMap(in) @@ -3030,30 +2916,30 @@ func NewOauth2PasswordSecurity(in interface{}, context *compiler.Context) (*Oaut // string type = 1; v1 := compiler.MapValueForKey(m, "type") if v1 != nil { - x.Type, ok = v1.(string) + x.Type, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [oauth2] if ok && !compiler.StringArrayContainsValue([]string{"oauth2"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string flow = 2; v2 := compiler.MapValueForKey(m, "flow") if v2 != nil { - x.Flow, ok = v2.(string) + x.Flow, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for flow: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [password] if ok && !compiler.StringArrayContainsValue([]string{"password"}, x.Flow) { - message := fmt.Sprintf("has unexpected value for flow: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for flow: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } @@ -3069,38 +2955,38 @@ func NewOauth2PasswordSecurity(in interface{}, context *compiler.Context) (*Oaut // string token_url = 4; v4 := compiler.MapValueForKey(m, "tokenUrl") if v4 != nil { - x.TokenUrl, ok = v4.(string) + x.TokenUrl, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for tokenUrl: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for tokenUrl: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 5; v5 := compiler.MapValueForKey(m, "description") if v5 != nil { - x.Description, ok = v5.(string) + x.Description, ok = compiler.StringForScalarNode(v5) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 6; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -3120,7 +3006,7 @@ func NewOauth2PasswordSecurity(in interface{}, context *compiler.Context) (*Oaut } // NewOauth2Scopes creates an object of type Oauth2Scopes if possible, returning an error if not. -func NewOauth2Scopes(in interface{}, context *compiler.Context) (*Oauth2Scopes, error) { +func NewOauth2Scopes(in *yaml.Node, context *compiler.Context) (*Oauth2Scopes, error) { errors := make([]error, 0) x := &Oauth2Scopes{} m, ok := compiler.UnpackMap(in) @@ -3131,13 +3017,13 @@ func NewOauth2Scopes(in interface{}, context *compiler.Context) (*Oauth2Scopes, // repeated NamedString additional_properties = 1; // MAP: string x.AdditionalProperties = make([]*NamedString, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] pair := &NamedString{} pair.Name = k - pair.Value = v.(string) + pair.Value, _ = compiler.StringForScalarNode(v) x.AdditionalProperties = append(x.AdditionalProperties, pair) } } @@ -3146,7 +3032,7 @@ func NewOauth2Scopes(in interface{}, context *compiler.Context) (*Oauth2Scopes, } // NewOperation creates an object of type Operation if possible, returning an error if not. -func NewOperation(in interface{}, context *compiler.Context) (*Operation, error) { +func NewOperation(in *yaml.Node, context *compiler.Context) (*Operation, error) { errors := make([]error, 0) x := &Operation{} m, ok := compiler.UnpackMap(in) @@ -3170,29 +3056,29 @@ func NewOperation(in interface{}, context *compiler.Context) (*Operation, error) // repeated string tags = 1; v1 := compiler.MapValueForKey(m, "tags") if v1 != nil { - v, ok := v1.([]interface{}) + v, ok := compiler.SequenceNodeForNode(v1) if ok { - x.Tags = compiler.ConvertInterfaceArrayToStringArray(v) + x.Tags = compiler.StringArrayForSequenceNode(v) } else { - message := fmt.Sprintf("has unexpected value for tags: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for tags: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string summary = 2; v2 := compiler.MapValueForKey(m, "summary") if v2 != nil { - x.Summary, ok = v2.(string) + x.Summary, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for summary: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for summary: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 3; v3 := compiler.MapValueForKey(m, "description") if v3 != nil { - x.Description, ok = v3.(string) + x.Description, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } @@ -3208,31 +3094,31 @@ func NewOperation(in interface{}, context *compiler.Context) (*Operation, error) // string operation_id = 5; v5 := compiler.MapValueForKey(m, "operationId") if v5 != nil { - x.OperationId, ok = v5.(string) + x.OperationId, ok = compiler.StringForScalarNode(v5) if !ok { - message := fmt.Sprintf("has unexpected value for operationId: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for operationId: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // repeated string produces = 6; v6 := compiler.MapValueForKey(m, "produces") if v6 != nil { - v, ok := v6.([]interface{}) + v, ok := compiler.SequenceNodeForNode(v6) if ok { - x.Produces = compiler.ConvertInterfaceArrayToStringArray(v) + x.Produces = compiler.StringArrayForSequenceNode(v) } else { - message := fmt.Sprintf("has unexpected value for produces: %+v (%T)", v6, v6) + message := fmt.Sprintf("has unexpected value for produces: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } } // repeated string consumes = 7; v7 := compiler.MapValueForKey(m, "consumes") if v7 != nil { - v, ok := v7.([]interface{}) + v, ok := compiler.SequenceNodeForNode(v7) if ok { - x.Consumes = compiler.ConvertInterfaceArrayToStringArray(v) + x.Consumes = compiler.StringArrayForSequenceNode(v) } else { - message := fmt.Sprintf("has unexpected value for consumes: %+v (%T)", v7, v7) + message := fmt.Sprintf("has unexpected value for consumes: %s", compiler.Display(v7)) errors = append(errors, compiler.NewError(context, message)) } } @@ -3241,9 +3127,9 @@ func NewOperation(in interface{}, context *compiler.Context) (*Operation, error) if v8 != nil { // repeated ParametersItem x.Parameters = make([]*ParametersItem, 0) - a, ok := v8.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v8) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewParametersItem(item, compiler.NewContext("parameters", context)) if err != nil { errors = append(errors, err) @@ -3264,26 +3150,26 @@ func NewOperation(in interface{}, context *compiler.Context) (*Operation, error) // repeated string schemes = 10; v10 := compiler.MapValueForKey(m, "schemes") if v10 != nil { - v, ok := v10.([]interface{}) + v, ok := compiler.SequenceNodeForNode(v10) if ok { - x.Schemes = compiler.ConvertInterfaceArrayToStringArray(v) + x.Schemes = compiler.StringArrayForSequenceNode(v) } else { - message := fmt.Sprintf("has unexpected value for schemes: %+v (%T)", v10, v10) + message := fmt.Sprintf("has unexpected value for schemes: %s", compiler.Display(v10)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [http https ws wss] if ok && !compiler.StringArrayContainsValues([]string{"http", "https", "ws", "wss"}, x.Schemes) { - message := fmt.Sprintf("has unexpected value for schemes: %+v", v10) + message := fmt.Sprintf("has unexpected value for schemes: %s", compiler.Display(v10)) errors = append(errors, compiler.NewError(context, message)) } } // bool deprecated = 11; v11 := compiler.MapValueForKey(m, "deprecated") if v11 != nil { - x.Deprecated, ok = v11.(bool) + x.Deprecated, ok = compiler.BoolForScalarNode(v11) if !ok { - message := fmt.Sprintf("has unexpected value for deprecated: %+v (%T)", v11, v11) + message := fmt.Sprintf("has unexpected value for deprecated: %s", compiler.Display(v11)) errors = append(errors, compiler.NewError(context, message)) } } @@ -3292,9 +3178,9 @@ func NewOperation(in interface{}, context *compiler.Context) (*Operation, error) if v12 != nil { // repeated SecurityRequirement x.Security = make([]*SecurityRequirement, 0) - a, ok := v12.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v12) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewSecurityRequirement(item, compiler.NewContext("security", context)) if err != nil { errors = append(errors, err) @@ -3306,20 +3192,20 @@ func NewOperation(in interface{}, context *compiler.Context) (*Operation, error) // repeated NamedAny vendor_extension = 13; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -3339,7 +3225,7 @@ func NewOperation(in interface{}, context *compiler.Context) (*Operation, error) } // NewParameter creates an object of type Parameter if possible, returning an error if not. -func NewParameter(in interface{}, context *compiler.Context) (*Parameter, error) { +func NewParameter(in *yaml.Node, context *compiler.Context) (*Parameter, error) { errors := make([]error, 0) x := &Parameter{} matched := false @@ -3379,7 +3265,7 @@ func NewParameter(in interface{}, context *compiler.Context) (*Parameter, error) } // NewParameterDefinitions creates an object of type ParameterDefinitions if possible, returning an error if not. -func NewParameterDefinitions(in interface{}, context *compiler.Context) (*ParameterDefinitions, error) { +func NewParameterDefinitions(in *yaml.Node, context *compiler.Context) (*ParameterDefinitions, error) { errors := make([]error, 0) x := &ParameterDefinitions{} m, ok := compiler.UnpackMap(in) @@ -3390,10 +3276,10 @@ func NewParameterDefinitions(in interface{}, context *compiler.Context) (*Parame // repeated NamedParameter additional_properties = 1; // MAP: Parameter x.AdditionalProperties = make([]*NamedParameter, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] pair := &NamedParameter{} pair.Name = k var err error @@ -3409,7 +3295,7 @@ func NewParameterDefinitions(in interface{}, context *compiler.Context) (*Parame } // NewParametersItem creates an object of type ParametersItem if possible, returning an error if not. -func NewParametersItem(in interface{}, context *compiler.Context) (*ParametersItem, error) { +func NewParametersItem(in *yaml.Node, context *compiler.Context) (*ParametersItem, error) { errors := make([]error, 0) x := &ParametersItem{} matched := false @@ -3449,7 +3335,7 @@ func NewParametersItem(in interface{}, context *compiler.Context) (*ParametersIt } // NewPathItem creates an object of type PathItem if possible, returning an error if not. -func NewPathItem(in interface{}, context *compiler.Context) (*PathItem, error) { +func NewPathItem(in *yaml.Node, context *compiler.Context) (*PathItem, error) { errors := make([]error, 0) x := &PathItem{} m, ok := compiler.UnpackMap(in) @@ -3467,9 +3353,9 @@ func NewPathItem(in interface{}, context *compiler.Context) (*PathItem, error) { // string _ref = 1; v1 := compiler.MapValueForKey(m, "$ref") if v1 != nil { - x.XRef, ok = v1.(string) + x.XRef, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for $ref: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for $ref: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -3541,9 +3427,9 @@ func NewPathItem(in interface{}, context *compiler.Context) (*PathItem, error) { if v9 != nil { // repeated ParametersItem x.Parameters = make([]*ParametersItem, 0) - a, ok := v9.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v9) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewParametersItem(item, compiler.NewContext("parameters", context)) if err != nil { errors = append(errors, err) @@ -3555,20 +3441,20 @@ func NewPathItem(in interface{}, context *compiler.Context) (*PathItem, error) { // repeated NamedAny vendor_extension = 10; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -3588,7 +3474,7 @@ func NewPathItem(in interface{}, context *compiler.Context) (*PathItem, error) { } // NewPathParameterSubSchema creates an object of type PathParameterSubSchema if possible, returning an error if not. -func NewPathParameterSubSchema(in interface{}, context *compiler.Context) (*PathParameterSubSchema, error) { +func NewPathParameterSubSchema(in *yaml.Node, context *compiler.Context) (*PathParameterSubSchema, error) { errors := make([]error, 0) x := &PathParameterSubSchema{} m, ok := compiler.UnpackMap(in) @@ -3612,66 +3498,66 @@ func NewPathParameterSubSchema(in interface{}, context *compiler.Context) (*Path // bool required = 1; v1 := compiler.MapValueForKey(m, "required") if v1 != nil { - x.Required, ok = v1.(bool) + x.Required, ok = compiler.BoolForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for required: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string in = 2; v2 := compiler.MapValueForKey(m, "in") if v2 != nil { - x.In, ok = v2.(string) + x.In, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [path] if ok && !compiler.StringArrayContainsValue([]string{"path"}, x.In) { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 3; v3 := compiler.MapValueForKey(m, "description") if v3 != nil { - x.Description, ok = v3.(string) + x.Description, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } // string name = 4; v4 := compiler.MapValueForKey(m, "name") if v4 != nil { - x.Name, ok = v4.(string) + x.Name, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } // string type = 5; v5 := compiler.MapValueForKey(m, "type") if v5 != nil { - x.Type, ok = v5.(string) + x.Type, ok = compiler.StringForScalarNode(v5) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [string number boolean integer array] if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "boolean", "integer", "array"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // string format = 6; v6 := compiler.MapValueForKey(m, "format") if v6 != nil { - x.Format, ok = v6.(string) + x.Format, ok = compiler.StringForScalarNode(v6) if !ok { - message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v6, v6) + message := fmt.Sprintf("has unexpected value for format: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } } @@ -3687,15 +3573,15 @@ func NewPathParameterSubSchema(in interface{}, context *compiler.Context) (*Path // string collection_format = 8; v8 := compiler.MapValueForKey(m, "collectionFormat") if v8 != nil { - x.CollectionFormat, ok = v8.(string) + x.CollectionFormat, ok = compiler.StringForScalarNode(v8) if !ok { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v8, v8) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v8)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [csv ssv tsv pipes] if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes"}, x.CollectionFormat) { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v8, v8) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v8)) errors = append(errors, compiler.NewError(context, message)) } } @@ -3711,126 +3597,102 @@ func NewPathParameterSubSchema(in interface{}, context *compiler.Context) (*Path // float maximum = 10; v10 := compiler.MapValueForKey(m, "maximum") if v10 != nil { - switch v10 := v10.(type) { - case float64: - x.Maximum = v10 - case float32: - x.Maximum = float64(v10) - case uint64: - x.Maximum = float64(v10) - case uint32: - x.Maximum = float64(v10) - case int64: - x.Maximum = float64(v10) - case int32: - x.Maximum = float64(v10) - case int: - x.Maximum = float64(v10) - default: - message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v10, v10) + v, ok := compiler.FloatForScalarNode(v10) + if ok { + x.Maximum = v + } else { + message := fmt.Sprintf("has unexpected value for maximum: %s", compiler.Display(v10)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_maximum = 11; v11 := compiler.MapValueForKey(m, "exclusiveMaximum") if v11 != nil { - x.ExclusiveMaximum, ok = v11.(bool) + x.ExclusiveMaximum, ok = compiler.BoolForScalarNode(v11) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v11, v11) + message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %s", compiler.Display(v11)) errors = append(errors, compiler.NewError(context, message)) } } // float minimum = 12; v12 := compiler.MapValueForKey(m, "minimum") if v12 != nil { - switch v12 := v12.(type) { - case float64: - x.Minimum = v12 - case float32: - x.Minimum = float64(v12) - case uint64: - x.Minimum = float64(v12) - case uint32: - x.Minimum = float64(v12) - case int64: - x.Minimum = float64(v12) - case int32: - x.Minimum = float64(v12) - case int: - x.Minimum = float64(v12) - default: - message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v12, v12) + v, ok := compiler.FloatForScalarNode(v12) + if ok { + x.Minimum = v + } else { + message := fmt.Sprintf("has unexpected value for minimum: %s", compiler.Display(v12)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_minimum = 13; v13 := compiler.MapValueForKey(m, "exclusiveMinimum") if v13 != nil { - x.ExclusiveMinimum, ok = v13.(bool) + x.ExclusiveMinimum, ok = compiler.BoolForScalarNode(v13) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v13, v13) + message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %s", compiler.Display(v13)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_length = 14; v14 := compiler.MapValueForKey(m, "maxLength") if v14 != nil { - t, ok := v14.(int) + t, ok := compiler.IntForScalarNode(v14) if ok { x.MaxLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v14, v14) + message := fmt.Sprintf("has unexpected value for maxLength: %s", compiler.Display(v14)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_length = 15; v15 := compiler.MapValueForKey(m, "minLength") if v15 != nil { - t, ok := v15.(int) + t, ok := compiler.IntForScalarNode(v15) if ok { x.MinLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v15, v15) + message := fmt.Sprintf("has unexpected value for minLength: %s", compiler.Display(v15)) errors = append(errors, compiler.NewError(context, message)) } } // string pattern = 16; v16 := compiler.MapValueForKey(m, "pattern") if v16 != nil { - x.Pattern, ok = v16.(string) + x.Pattern, ok = compiler.StringForScalarNode(v16) if !ok { - message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v16, v16) + message := fmt.Sprintf("has unexpected value for pattern: %s", compiler.Display(v16)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_items = 17; v17 := compiler.MapValueForKey(m, "maxItems") if v17 != nil { - t, ok := v17.(int) + t, ok := compiler.IntForScalarNode(v17) if ok { x.MaxItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v17, v17) + message := fmt.Sprintf("has unexpected value for maxItems: %s", compiler.Display(v17)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_items = 18; v18 := compiler.MapValueForKey(m, "minItems") if v18 != nil { - t, ok := v18.(int) + t, ok := compiler.IntForScalarNode(v18) if ok { x.MinItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v18, v18) + message := fmt.Sprintf("has unexpected value for minItems: %s", compiler.Display(v18)) errors = append(errors, compiler.NewError(context, message)) } } // bool unique_items = 19; v19 := compiler.MapValueForKey(m, "uniqueItems") if v19 != nil { - x.UniqueItems, ok = v19.(bool) + x.UniqueItems, ok = compiler.BoolForScalarNode(v19) if !ok { - message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v19, v19) + message := fmt.Sprintf("has unexpected value for uniqueItems: %s", compiler.Display(v19)) errors = append(errors, compiler.NewError(context, message)) } } @@ -3839,9 +3701,9 @@ func NewPathParameterSubSchema(in interface{}, context *compiler.Context) (*Path if v20 != nil { // repeated Any x.Enum = make([]*Any, 0) - a, ok := v20.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v20) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewAny(item, compiler.NewContext("enum", context)) if err != nil { errors = append(errors, err) @@ -3853,43 +3715,31 @@ func NewPathParameterSubSchema(in interface{}, context *compiler.Context) (*Path // float multiple_of = 21; v21 := compiler.MapValueForKey(m, "multipleOf") if v21 != nil { - switch v21 := v21.(type) { - case float64: - x.MultipleOf = v21 - case float32: - x.MultipleOf = float64(v21) - case uint64: - x.MultipleOf = float64(v21) - case uint32: - x.MultipleOf = float64(v21) - case int64: - x.MultipleOf = float64(v21) - case int32: - x.MultipleOf = float64(v21) - case int: - x.MultipleOf = float64(v21) - default: - message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v21, v21) + v, ok := compiler.FloatForScalarNode(v21) + if ok { + x.MultipleOf = v + } else { + message := fmt.Sprintf("has unexpected value for multipleOf: %s", compiler.Display(v21)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 22; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -3909,7 +3759,7 @@ func NewPathParameterSubSchema(in interface{}, context *compiler.Context) (*Path } // NewPaths creates an object of type Paths if possible, returning an error if not. -func NewPaths(in interface{}, context *compiler.Context) (*Paths, error) { +func NewPaths(in *yaml.Node, context *compiler.Context) (*Paths, error) { errors := make([]error, 0) x := &Paths{} m, ok := compiler.UnpackMap(in) @@ -3927,20 +3777,20 @@ func NewPaths(in interface{}, context *compiler.Context) (*Paths, error) { // repeated NamedAny vendor_extension = 1; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -3958,10 +3808,10 @@ func NewPaths(in interface{}, context *compiler.Context) (*Paths, error) { // repeated NamedPathItem path = 2; // MAP: PathItem ^/ x.Path = make([]*NamedPathItem, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "/") { pair := &NamedPathItem{} pair.Name = k @@ -3979,7 +3829,7 @@ func NewPaths(in interface{}, context *compiler.Context) (*Paths, error) { } // NewPrimitivesItems creates an object of type PrimitivesItems if possible, returning an error if not. -func NewPrimitivesItems(in interface{}, context *compiler.Context) (*PrimitivesItems, error) { +func NewPrimitivesItems(in *yaml.Node, context *compiler.Context) (*PrimitivesItems, error) { errors := make([]error, 0) x := &PrimitivesItems{} m, ok := compiler.UnpackMap(in) @@ -3997,24 +3847,24 @@ func NewPrimitivesItems(in interface{}, context *compiler.Context) (*PrimitivesI // string type = 1; v1 := compiler.MapValueForKey(m, "type") if v1 != nil { - x.Type, ok = v1.(string) + x.Type, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [string number integer boolean array] if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "integer", "boolean", "array"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string format = 2; v2 := compiler.MapValueForKey(m, "format") if v2 != nil { - x.Format, ok = v2.(string) + x.Format, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for format: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } @@ -4030,15 +3880,15 @@ func NewPrimitivesItems(in interface{}, context *compiler.Context) (*PrimitivesI // string collection_format = 4; v4 := compiler.MapValueForKey(m, "collectionFormat") if v4 != nil { - x.CollectionFormat, ok = v4.(string) + x.CollectionFormat, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [csv ssv tsv pipes] if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes"}, x.CollectionFormat) { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } @@ -4054,126 +3904,102 @@ func NewPrimitivesItems(in interface{}, context *compiler.Context) (*PrimitivesI // float maximum = 6; v6 := compiler.MapValueForKey(m, "maximum") if v6 != nil { - switch v6 := v6.(type) { - case float64: - x.Maximum = v6 - case float32: - x.Maximum = float64(v6) - case uint64: - x.Maximum = float64(v6) - case uint32: - x.Maximum = float64(v6) - case int64: - x.Maximum = float64(v6) - case int32: - x.Maximum = float64(v6) - case int: - x.Maximum = float64(v6) - default: - message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v6, v6) + v, ok := compiler.FloatForScalarNode(v6) + if ok { + x.Maximum = v + } else { + message := fmt.Sprintf("has unexpected value for maximum: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_maximum = 7; v7 := compiler.MapValueForKey(m, "exclusiveMaximum") if v7 != nil { - x.ExclusiveMaximum, ok = v7.(bool) + x.ExclusiveMaximum, ok = compiler.BoolForScalarNode(v7) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v7, v7) + message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %s", compiler.Display(v7)) errors = append(errors, compiler.NewError(context, message)) } } // float minimum = 8; v8 := compiler.MapValueForKey(m, "minimum") if v8 != nil { - switch v8 := v8.(type) { - case float64: - x.Minimum = v8 - case float32: - x.Minimum = float64(v8) - case uint64: - x.Minimum = float64(v8) - case uint32: - x.Minimum = float64(v8) - case int64: - x.Minimum = float64(v8) - case int32: - x.Minimum = float64(v8) - case int: - x.Minimum = float64(v8) - default: - message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v8, v8) + v, ok := compiler.FloatForScalarNode(v8) + if ok { + x.Minimum = v + } else { + message := fmt.Sprintf("has unexpected value for minimum: %s", compiler.Display(v8)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_minimum = 9; v9 := compiler.MapValueForKey(m, "exclusiveMinimum") if v9 != nil { - x.ExclusiveMinimum, ok = v9.(bool) + x.ExclusiveMinimum, ok = compiler.BoolForScalarNode(v9) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v9, v9) + message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %s", compiler.Display(v9)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_length = 10; v10 := compiler.MapValueForKey(m, "maxLength") if v10 != nil { - t, ok := v10.(int) + t, ok := compiler.IntForScalarNode(v10) if ok { x.MaxLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v10, v10) + message := fmt.Sprintf("has unexpected value for maxLength: %s", compiler.Display(v10)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_length = 11; v11 := compiler.MapValueForKey(m, "minLength") if v11 != nil { - t, ok := v11.(int) + t, ok := compiler.IntForScalarNode(v11) if ok { x.MinLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v11, v11) + message := fmt.Sprintf("has unexpected value for minLength: %s", compiler.Display(v11)) errors = append(errors, compiler.NewError(context, message)) } } // string pattern = 12; v12 := compiler.MapValueForKey(m, "pattern") if v12 != nil { - x.Pattern, ok = v12.(string) + x.Pattern, ok = compiler.StringForScalarNode(v12) if !ok { - message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v12, v12) + message := fmt.Sprintf("has unexpected value for pattern: %s", compiler.Display(v12)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_items = 13; v13 := compiler.MapValueForKey(m, "maxItems") if v13 != nil { - t, ok := v13.(int) + t, ok := compiler.IntForScalarNode(v13) if ok { x.MaxItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v13, v13) + message := fmt.Sprintf("has unexpected value for maxItems: %s", compiler.Display(v13)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_items = 14; v14 := compiler.MapValueForKey(m, "minItems") if v14 != nil { - t, ok := v14.(int) + t, ok := compiler.IntForScalarNode(v14) if ok { x.MinItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v14, v14) + message := fmt.Sprintf("has unexpected value for minItems: %s", compiler.Display(v14)) errors = append(errors, compiler.NewError(context, message)) } } // bool unique_items = 15; v15 := compiler.MapValueForKey(m, "uniqueItems") if v15 != nil { - x.UniqueItems, ok = v15.(bool) + x.UniqueItems, ok = compiler.BoolForScalarNode(v15) if !ok { - message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v15, v15) + message := fmt.Sprintf("has unexpected value for uniqueItems: %s", compiler.Display(v15)) errors = append(errors, compiler.NewError(context, message)) } } @@ -4182,9 +4008,9 @@ func NewPrimitivesItems(in interface{}, context *compiler.Context) (*PrimitivesI if v16 != nil { // repeated Any x.Enum = make([]*Any, 0) - a, ok := v16.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v16) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewAny(item, compiler.NewContext("enum", context)) if err != nil { errors = append(errors, err) @@ -4196,43 +4022,31 @@ func NewPrimitivesItems(in interface{}, context *compiler.Context) (*PrimitivesI // float multiple_of = 17; v17 := compiler.MapValueForKey(m, "multipleOf") if v17 != nil { - switch v17 := v17.(type) { - case float64: - x.MultipleOf = v17 - case float32: - x.MultipleOf = float64(v17) - case uint64: - x.MultipleOf = float64(v17) - case uint32: - x.MultipleOf = float64(v17) - case int64: - x.MultipleOf = float64(v17) - case int32: - x.MultipleOf = float64(v17) - case int: - x.MultipleOf = float64(v17) - default: - message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v17, v17) + v, ok := compiler.FloatForScalarNode(v17) + if ok { + x.MultipleOf = v + } else { + message := fmt.Sprintf("has unexpected value for multipleOf: %s", compiler.Display(v17)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 18; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -4252,7 +4066,7 @@ func NewPrimitivesItems(in interface{}, context *compiler.Context) (*PrimitivesI } // NewProperties creates an object of type Properties if possible, returning an error if not. -func NewProperties(in interface{}, context *compiler.Context) (*Properties, error) { +func NewProperties(in *yaml.Node, context *compiler.Context) (*Properties, error) { errors := make([]error, 0) x := &Properties{} m, ok := compiler.UnpackMap(in) @@ -4263,10 +4077,10 @@ func NewProperties(in interface{}, context *compiler.Context) (*Properties, erro // repeated NamedSchema additional_properties = 1; // MAP: Schema x.AdditionalProperties = make([]*NamedSchema, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] pair := &NamedSchema{} pair.Name = k var err error @@ -4282,7 +4096,7 @@ func NewProperties(in interface{}, context *compiler.Context) (*Properties, erro } // NewQueryParameterSubSchema creates an object of type QueryParameterSubSchema if possible, returning an error if not. -func NewQueryParameterSubSchema(in interface{}, context *compiler.Context) (*QueryParameterSubSchema, error) { +func NewQueryParameterSubSchema(in *yaml.Node, context *compiler.Context) (*QueryParameterSubSchema, error) { errors := make([]error, 0) x := &QueryParameterSubSchema{} m, ok := compiler.UnpackMap(in) @@ -4300,75 +4114,75 @@ func NewQueryParameterSubSchema(in interface{}, context *compiler.Context) (*Que // bool required = 1; v1 := compiler.MapValueForKey(m, "required") if v1 != nil { - x.Required, ok = v1.(bool) + x.Required, ok = compiler.BoolForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for required: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string in = 2; v2 := compiler.MapValueForKey(m, "in") if v2 != nil { - x.In, ok = v2.(string) + x.In, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [query] if ok && !compiler.StringArrayContainsValue([]string{"query"}, x.In) { - message := fmt.Sprintf("has unexpected value for in: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for in: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 3; v3 := compiler.MapValueForKey(m, "description") if v3 != nil { - x.Description, ok = v3.(string) + x.Description, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } // string name = 4; v4 := compiler.MapValueForKey(m, "name") if v4 != nil { - x.Name, ok = v4.(string) + x.Name, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } // bool allow_empty_value = 5; v5 := compiler.MapValueForKey(m, "allowEmptyValue") if v5 != nil { - x.AllowEmptyValue, ok = v5.(bool) + x.AllowEmptyValue, ok = compiler.BoolForScalarNode(v5) if !ok { - message := fmt.Sprintf("has unexpected value for allowEmptyValue: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for allowEmptyValue: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // string type = 6; v6 := compiler.MapValueForKey(m, "type") if v6 != nil { - x.Type, ok = v6.(string) + x.Type, ok = compiler.StringForScalarNode(v6) if !ok { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [string number boolean integer array] if ok && !compiler.StringArrayContainsValue([]string{"string", "number", "boolean", "integer", "array"}, x.Type) { - message := fmt.Sprintf("has unexpected value for type: %+v (%T)", v6, v6) + message := fmt.Sprintf("has unexpected value for type: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } } // string format = 7; v7 := compiler.MapValueForKey(m, "format") if v7 != nil { - x.Format, ok = v7.(string) + x.Format, ok = compiler.StringForScalarNode(v7) if !ok { - message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v7, v7) + message := fmt.Sprintf("has unexpected value for format: %s", compiler.Display(v7)) errors = append(errors, compiler.NewError(context, message)) } } @@ -4384,15 +4198,15 @@ func NewQueryParameterSubSchema(in interface{}, context *compiler.Context) (*Que // string collection_format = 9; v9 := compiler.MapValueForKey(m, "collectionFormat") if v9 != nil { - x.CollectionFormat, ok = v9.(string) + x.CollectionFormat, ok = compiler.StringForScalarNode(v9) if !ok { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v9, v9) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v9)) errors = append(errors, compiler.NewError(context, message)) } // check for valid enum values // [csv ssv tsv pipes multi] if ok && !compiler.StringArrayContainsValue([]string{"csv", "ssv", "tsv", "pipes", "multi"}, x.CollectionFormat) { - message := fmt.Sprintf("has unexpected value for collectionFormat: %+v (%T)", v9, v9) + message := fmt.Sprintf("has unexpected value for collectionFormat: %s", compiler.Display(v9)) errors = append(errors, compiler.NewError(context, message)) } } @@ -4408,126 +4222,102 @@ func NewQueryParameterSubSchema(in interface{}, context *compiler.Context) (*Que // float maximum = 11; v11 := compiler.MapValueForKey(m, "maximum") if v11 != nil { - switch v11 := v11.(type) { - case float64: - x.Maximum = v11 - case float32: - x.Maximum = float64(v11) - case uint64: - x.Maximum = float64(v11) - case uint32: - x.Maximum = float64(v11) - case int64: - x.Maximum = float64(v11) - case int32: - x.Maximum = float64(v11) - case int: - x.Maximum = float64(v11) - default: - message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v11, v11) + v, ok := compiler.FloatForScalarNode(v11) + if ok { + x.Maximum = v + } else { + message := fmt.Sprintf("has unexpected value for maximum: %s", compiler.Display(v11)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_maximum = 12; v12 := compiler.MapValueForKey(m, "exclusiveMaximum") if v12 != nil { - x.ExclusiveMaximum, ok = v12.(bool) + x.ExclusiveMaximum, ok = compiler.BoolForScalarNode(v12) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v12, v12) + message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %s", compiler.Display(v12)) errors = append(errors, compiler.NewError(context, message)) } } // float minimum = 13; v13 := compiler.MapValueForKey(m, "minimum") if v13 != nil { - switch v13 := v13.(type) { - case float64: - x.Minimum = v13 - case float32: - x.Minimum = float64(v13) - case uint64: - x.Minimum = float64(v13) - case uint32: - x.Minimum = float64(v13) - case int64: - x.Minimum = float64(v13) - case int32: - x.Minimum = float64(v13) - case int: - x.Minimum = float64(v13) - default: - message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v13, v13) + v, ok := compiler.FloatForScalarNode(v13) + if ok { + x.Minimum = v + } else { + message := fmt.Sprintf("has unexpected value for minimum: %s", compiler.Display(v13)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_minimum = 14; v14 := compiler.MapValueForKey(m, "exclusiveMinimum") if v14 != nil { - x.ExclusiveMinimum, ok = v14.(bool) + x.ExclusiveMinimum, ok = compiler.BoolForScalarNode(v14) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v14, v14) + message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %s", compiler.Display(v14)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_length = 15; v15 := compiler.MapValueForKey(m, "maxLength") if v15 != nil { - t, ok := v15.(int) + t, ok := compiler.IntForScalarNode(v15) if ok { x.MaxLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v15, v15) + message := fmt.Sprintf("has unexpected value for maxLength: %s", compiler.Display(v15)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_length = 16; v16 := compiler.MapValueForKey(m, "minLength") if v16 != nil { - t, ok := v16.(int) + t, ok := compiler.IntForScalarNode(v16) if ok { x.MinLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v16, v16) + message := fmt.Sprintf("has unexpected value for minLength: %s", compiler.Display(v16)) errors = append(errors, compiler.NewError(context, message)) } } // string pattern = 17; v17 := compiler.MapValueForKey(m, "pattern") if v17 != nil { - x.Pattern, ok = v17.(string) + x.Pattern, ok = compiler.StringForScalarNode(v17) if !ok { - message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v17, v17) + message := fmt.Sprintf("has unexpected value for pattern: %s", compiler.Display(v17)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_items = 18; v18 := compiler.MapValueForKey(m, "maxItems") if v18 != nil { - t, ok := v18.(int) + t, ok := compiler.IntForScalarNode(v18) if ok { x.MaxItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v18, v18) + message := fmt.Sprintf("has unexpected value for maxItems: %s", compiler.Display(v18)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_items = 19; v19 := compiler.MapValueForKey(m, "minItems") if v19 != nil { - t, ok := v19.(int) + t, ok := compiler.IntForScalarNode(v19) if ok { x.MinItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v19, v19) + message := fmt.Sprintf("has unexpected value for minItems: %s", compiler.Display(v19)) errors = append(errors, compiler.NewError(context, message)) } } // bool unique_items = 20; v20 := compiler.MapValueForKey(m, "uniqueItems") if v20 != nil { - x.UniqueItems, ok = v20.(bool) + x.UniqueItems, ok = compiler.BoolForScalarNode(v20) if !ok { - message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v20, v20) + message := fmt.Sprintf("has unexpected value for uniqueItems: %s", compiler.Display(v20)) errors = append(errors, compiler.NewError(context, message)) } } @@ -4536,9 +4326,9 @@ func NewQueryParameterSubSchema(in interface{}, context *compiler.Context) (*Que if v21 != nil { // repeated Any x.Enum = make([]*Any, 0) - a, ok := v21.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v21) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewAny(item, compiler.NewContext("enum", context)) if err != nil { errors = append(errors, err) @@ -4550,43 +4340,31 @@ func NewQueryParameterSubSchema(in interface{}, context *compiler.Context) (*Que // float multiple_of = 22; v22 := compiler.MapValueForKey(m, "multipleOf") if v22 != nil { - switch v22 := v22.(type) { - case float64: - x.MultipleOf = v22 - case float32: - x.MultipleOf = float64(v22) - case uint64: - x.MultipleOf = float64(v22) - case uint32: - x.MultipleOf = float64(v22) - case int64: - x.MultipleOf = float64(v22) - case int32: - x.MultipleOf = float64(v22) - case int: - x.MultipleOf = float64(v22) - default: - message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v22, v22) + v, ok := compiler.FloatForScalarNode(v22) + if ok { + x.MultipleOf = v + } else { + message := fmt.Sprintf("has unexpected value for multipleOf: %s", compiler.Display(v22)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 23; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -4606,7 +4384,7 @@ func NewQueryParameterSubSchema(in interface{}, context *compiler.Context) (*Que } // NewResponse creates an object of type Response if possible, returning an error if not. -func NewResponse(in interface{}, context *compiler.Context) (*Response, error) { +func NewResponse(in *yaml.Node, context *compiler.Context) (*Response, error) { errors := make([]error, 0) x := &Response{} m, ok := compiler.UnpackMap(in) @@ -4630,9 +4408,9 @@ func NewResponse(in interface{}, context *compiler.Context) (*Response, error) { // string description = 1; v1 := compiler.MapValueForKey(m, "description") if v1 != nil { - x.Description, ok = v1.(string) + x.Description, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } @@ -4666,20 +4444,20 @@ func NewResponse(in interface{}, context *compiler.Context) (*Response, error) { // repeated NamedAny vendor_extension = 5; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -4699,7 +4477,7 @@ func NewResponse(in interface{}, context *compiler.Context) (*Response, error) { } // NewResponseDefinitions creates an object of type ResponseDefinitions if possible, returning an error if not. -func NewResponseDefinitions(in interface{}, context *compiler.Context) (*ResponseDefinitions, error) { +func NewResponseDefinitions(in *yaml.Node, context *compiler.Context) (*ResponseDefinitions, error) { errors := make([]error, 0) x := &ResponseDefinitions{} m, ok := compiler.UnpackMap(in) @@ -4710,10 +4488,10 @@ func NewResponseDefinitions(in interface{}, context *compiler.Context) (*Respons // repeated NamedResponse additional_properties = 1; // MAP: Response x.AdditionalProperties = make([]*NamedResponse, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] pair := &NamedResponse{} pair.Name = k var err error @@ -4729,7 +4507,7 @@ func NewResponseDefinitions(in interface{}, context *compiler.Context) (*Respons } // NewResponseValue creates an object of type ResponseValue if possible, returning an error if not. -func NewResponseValue(in interface{}, context *compiler.Context) (*ResponseValue, error) { +func NewResponseValue(in *yaml.Node, context *compiler.Context) (*ResponseValue, error) { errors := make([]error, 0) x := &ResponseValue{} matched := false @@ -4769,7 +4547,7 @@ func NewResponseValue(in interface{}, context *compiler.Context) (*ResponseValue } // NewResponses creates an object of type Responses if possible, returning an error if not. -func NewResponses(in interface{}, context *compiler.Context) (*Responses, error) { +func NewResponses(in *yaml.Node, context *compiler.Context) (*Responses, error) { errors := make([]error, 0) x := &Responses{} m, ok := compiler.UnpackMap(in) @@ -4787,10 +4565,10 @@ func NewResponses(in interface{}, context *compiler.Context) (*Responses, error) // repeated NamedResponseValue response_code = 1; // MAP: ResponseValue ^([0-9]{3})$|^(default)$ x.ResponseCode = make([]*NamedResponseValue, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if pattern2.MatchString(k) { pair := &NamedResponseValue{} pair.Name = k @@ -4806,20 +4584,20 @@ func NewResponses(in interface{}, context *compiler.Context) (*Responses, error) // repeated NamedAny vendor_extension = 2; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -4839,7 +4617,7 @@ func NewResponses(in interface{}, context *compiler.Context) (*Responses, error) } // NewSchema creates an object of type Schema if possible, returning an error if not. -func NewSchema(in interface{}, context *compiler.Context) (*Schema, error) { +func NewSchema(in *yaml.Node, context *compiler.Context) (*Schema, error) { errors := make([]error, 0) x := &Schema{} m, ok := compiler.UnpackMap(in) @@ -4857,36 +4635,36 @@ func NewSchema(in interface{}, context *compiler.Context) (*Schema, error) { // string _ref = 1; v1 := compiler.MapValueForKey(m, "$ref") if v1 != nil { - x.XRef, ok = v1.(string) + x.XRef, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for $ref: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for $ref: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string format = 2; v2 := compiler.MapValueForKey(m, "format") if v2 != nil { - x.Format, ok = v2.(string) + x.Format, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for format: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for format: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string title = 3; v3 := compiler.MapValueForKey(m, "title") if v3 != nil { - x.Title, ok = v3.(string) + x.Title, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for title: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for title: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 4; v4 := compiler.MapValueForKey(m, "description") if v4 != nil { - x.Description, ok = v4.(string) + x.Description, ok = compiler.StringForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } @@ -4902,182 +4680,146 @@ func NewSchema(in interface{}, context *compiler.Context) (*Schema, error) { // float multiple_of = 6; v6 := compiler.MapValueForKey(m, "multipleOf") if v6 != nil { - switch v6 := v6.(type) { - case float64: - x.MultipleOf = v6 - case float32: - x.MultipleOf = float64(v6) - case uint64: - x.MultipleOf = float64(v6) - case uint32: - x.MultipleOf = float64(v6) - case int64: - x.MultipleOf = float64(v6) - case int32: - x.MultipleOf = float64(v6) - case int: - x.MultipleOf = float64(v6) - default: - message := fmt.Sprintf("has unexpected value for multipleOf: %+v (%T)", v6, v6) + v, ok := compiler.FloatForScalarNode(v6) + if ok { + x.MultipleOf = v + } else { + message := fmt.Sprintf("has unexpected value for multipleOf: %s", compiler.Display(v6)) errors = append(errors, compiler.NewError(context, message)) } } // float maximum = 7; v7 := compiler.MapValueForKey(m, "maximum") if v7 != nil { - switch v7 := v7.(type) { - case float64: - x.Maximum = v7 - case float32: - x.Maximum = float64(v7) - case uint64: - x.Maximum = float64(v7) - case uint32: - x.Maximum = float64(v7) - case int64: - x.Maximum = float64(v7) - case int32: - x.Maximum = float64(v7) - case int: - x.Maximum = float64(v7) - default: - message := fmt.Sprintf("has unexpected value for maximum: %+v (%T)", v7, v7) + v, ok := compiler.FloatForScalarNode(v7) + if ok { + x.Maximum = v + } else { + message := fmt.Sprintf("has unexpected value for maximum: %s", compiler.Display(v7)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_maximum = 8; v8 := compiler.MapValueForKey(m, "exclusiveMaximum") if v8 != nil { - x.ExclusiveMaximum, ok = v8.(bool) + x.ExclusiveMaximum, ok = compiler.BoolForScalarNode(v8) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %+v (%T)", v8, v8) + message := fmt.Sprintf("has unexpected value for exclusiveMaximum: %s", compiler.Display(v8)) errors = append(errors, compiler.NewError(context, message)) } } // float minimum = 9; v9 := compiler.MapValueForKey(m, "minimum") if v9 != nil { - switch v9 := v9.(type) { - case float64: - x.Minimum = v9 - case float32: - x.Minimum = float64(v9) - case uint64: - x.Minimum = float64(v9) - case uint32: - x.Minimum = float64(v9) - case int64: - x.Minimum = float64(v9) - case int32: - x.Minimum = float64(v9) - case int: - x.Minimum = float64(v9) - default: - message := fmt.Sprintf("has unexpected value for minimum: %+v (%T)", v9, v9) + v, ok := compiler.FloatForScalarNode(v9) + if ok { + x.Minimum = v + } else { + message := fmt.Sprintf("has unexpected value for minimum: %s", compiler.Display(v9)) errors = append(errors, compiler.NewError(context, message)) } } // bool exclusive_minimum = 10; v10 := compiler.MapValueForKey(m, "exclusiveMinimum") if v10 != nil { - x.ExclusiveMinimum, ok = v10.(bool) + x.ExclusiveMinimum, ok = compiler.BoolForScalarNode(v10) if !ok { - message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %+v (%T)", v10, v10) + message := fmt.Sprintf("has unexpected value for exclusiveMinimum: %s", compiler.Display(v10)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_length = 11; v11 := compiler.MapValueForKey(m, "maxLength") if v11 != nil { - t, ok := v11.(int) + t, ok := compiler.IntForScalarNode(v11) if ok { x.MaxLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxLength: %+v (%T)", v11, v11) + message := fmt.Sprintf("has unexpected value for maxLength: %s", compiler.Display(v11)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_length = 12; v12 := compiler.MapValueForKey(m, "minLength") if v12 != nil { - t, ok := v12.(int) + t, ok := compiler.IntForScalarNode(v12) if ok { x.MinLength = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minLength: %+v (%T)", v12, v12) + message := fmt.Sprintf("has unexpected value for minLength: %s", compiler.Display(v12)) errors = append(errors, compiler.NewError(context, message)) } } // string pattern = 13; v13 := compiler.MapValueForKey(m, "pattern") if v13 != nil { - x.Pattern, ok = v13.(string) + x.Pattern, ok = compiler.StringForScalarNode(v13) if !ok { - message := fmt.Sprintf("has unexpected value for pattern: %+v (%T)", v13, v13) + message := fmt.Sprintf("has unexpected value for pattern: %s", compiler.Display(v13)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_items = 14; v14 := compiler.MapValueForKey(m, "maxItems") if v14 != nil { - t, ok := v14.(int) + t, ok := compiler.IntForScalarNode(v14) if ok { x.MaxItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxItems: %+v (%T)", v14, v14) + message := fmt.Sprintf("has unexpected value for maxItems: %s", compiler.Display(v14)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_items = 15; v15 := compiler.MapValueForKey(m, "minItems") if v15 != nil { - t, ok := v15.(int) + t, ok := compiler.IntForScalarNode(v15) if ok { x.MinItems = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minItems: %+v (%T)", v15, v15) + message := fmt.Sprintf("has unexpected value for minItems: %s", compiler.Display(v15)) errors = append(errors, compiler.NewError(context, message)) } } // bool unique_items = 16; v16 := compiler.MapValueForKey(m, "uniqueItems") if v16 != nil { - x.UniqueItems, ok = v16.(bool) + x.UniqueItems, ok = compiler.BoolForScalarNode(v16) if !ok { - message := fmt.Sprintf("has unexpected value for uniqueItems: %+v (%T)", v16, v16) + message := fmt.Sprintf("has unexpected value for uniqueItems: %s", compiler.Display(v16)) errors = append(errors, compiler.NewError(context, message)) } } // int64 max_properties = 17; v17 := compiler.MapValueForKey(m, "maxProperties") if v17 != nil { - t, ok := v17.(int) + t, ok := compiler.IntForScalarNode(v17) if ok { x.MaxProperties = int64(t) } else { - message := fmt.Sprintf("has unexpected value for maxProperties: %+v (%T)", v17, v17) + message := fmt.Sprintf("has unexpected value for maxProperties: %s", compiler.Display(v17)) errors = append(errors, compiler.NewError(context, message)) } } // int64 min_properties = 18; v18 := compiler.MapValueForKey(m, "minProperties") if v18 != nil { - t, ok := v18.(int) + t, ok := compiler.IntForScalarNode(v18) if ok { x.MinProperties = int64(t) } else { - message := fmt.Sprintf("has unexpected value for minProperties: %+v (%T)", v18, v18) + message := fmt.Sprintf("has unexpected value for minProperties: %s", compiler.Display(v18)) errors = append(errors, compiler.NewError(context, message)) } } // repeated string required = 19; v19 := compiler.MapValueForKey(m, "required") if v19 != nil { - v, ok := v19.([]interface{}) + v, ok := compiler.SequenceNodeForNode(v19) if ok { - x.Required = compiler.ConvertInterfaceArrayToStringArray(v) + x.Required = compiler.StringArrayForSequenceNode(v) } else { - message := fmt.Sprintf("has unexpected value for required: %+v (%T)", v19, v19) + message := fmt.Sprintf("has unexpected value for required: %s", compiler.Display(v19)) errors = append(errors, compiler.NewError(context, message)) } } @@ -5086,9 +4828,9 @@ func NewSchema(in interface{}, context *compiler.Context) (*Schema, error) { if v20 != nil { // repeated Any x.Enum = make([]*Any, 0) - a, ok := v20.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v20) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewAny(item, compiler.NewContext("enum", context)) if err != nil { errors = append(errors, err) @@ -5129,9 +4871,9 @@ func NewSchema(in interface{}, context *compiler.Context) (*Schema, error) { if v24 != nil { // repeated Schema x.AllOf = make([]*Schema, 0) - a, ok := v24.([]interface{}) + a, ok := compiler.SequenceNodeForNode(v24) if ok { - for _, item := range a { + for _, item := range a.Content { y, err := NewSchema(item, compiler.NewContext("allOf", context)) if err != nil { errors = append(errors, err) @@ -5152,18 +4894,18 @@ func NewSchema(in interface{}, context *compiler.Context) (*Schema, error) { // string discriminator = 26; v26 := compiler.MapValueForKey(m, "discriminator") if v26 != nil { - x.Discriminator, ok = v26.(string) + x.Discriminator, ok = compiler.StringForScalarNode(v26) if !ok { - message := fmt.Sprintf("has unexpected value for discriminator: %+v (%T)", v26, v26) + message := fmt.Sprintf("has unexpected value for discriminator: %s", compiler.Display(v26)) errors = append(errors, compiler.NewError(context, message)) } } // bool read_only = 27; v27 := compiler.MapValueForKey(m, "readOnly") if v27 != nil { - x.ReadOnly, ok = v27.(bool) + x.ReadOnly, ok = compiler.BoolForScalarNode(v27) if !ok { - message := fmt.Sprintf("has unexpected value for readOnly: %+v (%T)", v27, v27) + message := fmt.Sprintf("has unexpected value for readOnly: %s", compiler.Display(v27)) errors = append(errors, compiler.NewError(context, message)) } } @@ -5197,20 +4939,20 @@ func NewSchema(in interface{}, context *compiler.Context) (*Schema, error) { // repeated NamedAny vendor_extension = 31; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -5230,7 +4972,7 @@ func NewSchema(in interface{}, context *compiler.Context) (*Schema, error) { } // NewSchemaItem creates an object of type SchemaItem if possible, returning an error if not. -func NewSchemaItem(in interface{}, context *compiler.Context) (*SchemaItem, error) { +func NewSchemaItem(in *yaml.Node, context *compiler.Context) (*SchemaItem, error) { errors := make([]error, 0) x := &SchemaItem{} matched := false @@ -5270,7 +5012,7 @@ func NewSchemaItem(in interface{}, context *compiler.Context) (*SchemaItem, erro } // NewSecurityDefinitions creates an object of type SecurityDefinitions if possible, returning an error if not. -func NewSecurityDefinitions(in interface{}, context *compiler.Context) (*SecurityDefinitions, error) { +func NewSecurityDefinitions(in *yaml.Node, context *compiler.Context) (*SecurityDefinitions, error) { errors := make([]error, 0) x := &SecurityDefinitions{} m, ok := compiler.UnpackMap(in) @@ -5281,10 +5023,10 @@ func NewSecurityDefinitions(in interface{}, context *compiler.Context) (*Securit // repeated NamedSecurityDefinitionsItem additional_properties = 1; // MAP: SecurityDefinitionsItem x.AdditionalProperties = make([]*NamedSecurityDefinitionsItem, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] pair := &NamedSecurityDefinitionsItem{} pair.Name = k var err error @@ -5300,7 +5042,7 @@ func NewSecurityDefinitions(in interface{}, context *compiler.Context) (*Securit } // NewSecurityDefinitionsItem creates an object of type SecurityDefinitionsItem if possible, returning an error if not. -func NewSecurityDefinitionsItem(in interface{}, context *compiler.Context) (*SecurityDefinitionsItem, error) { +func NewSecurityDefinitionsItem(in *yaml.Node, context *compiler.Context) (*SecurityDefinitionsItem, error) { errors := make([]error, 0) x := &SecurityDefinitionsItem{} matched := false @@ -5396,7 +5138,7 @@ func NewSecurityDefinitionsItem(in interface{}, context *compiler.Context) (*Sec } // NewSecurityRequirement creates an object of type SecurityRequirement if possible, returning an error if not. -func NewSecurityRequirement(in interface{}, context *compiler.Context) (*SecurityRequirement, error) { +func NewSecurityRequirement(in *yaml.Node, context *compiler.Context) (*SecurityRequirement, error) { errors := make([]error, 0) x := &SecurityRequirement{} m, ok := compiler.UnpackMap(in) @@ -5407,10 +5149,10 @@ func NewSecurityRequirement(in interface{}, context *compiler.Context) (*Securit // repeated NamedStringArray additional_properties = 1; // MAP: StringArray x.AdditionalProperties = make([]*NamedStringArray, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] pair := &NamedStringArray{} pair.Name = k var err error @@ -5426,24 +5168,19 @@ func NewSecurityRequirement(in interface{}, context *compiler.Context) (*Securit } // NewStringArray creates an object of type StringArray if possible, returning an error if not. -func NewStringArray(in interface{}, context *compiler.Context) (*StringArray, error) { +func NewStringArray(in *yaml.Node, context *compiler.Context) (*StringArray, error) { errors := make([]error, 0) x := &StringArray{} - a, ok := in.([]interface{}) - if !ok { - message := fmt.Sprintf("has unexpected value for StringArray: %+v (%T)", in, in) - errors = append(errors, compiler.NewError(context, message)) - } else { - x.Value = make([]string, 0) - for _, s := range a { - x.Value = append(x.Value, s.(string)) - } + x.Value = make([]string, 0) + for _, node := range in.Content { + s, _ := compiler.StringForScalarNode(node) + x.Value = append(x.Value, s) } return x, compiler.NewErrorGroupOrNil(errors) } // NewTag creates an object of type Tag if possible, returning an error if not. -func NewTag(in interface{}, context *compiler.Context) (*Tag, error) { +func NewTag(in *yaml.Node, context *compiler.Context) (*Tag, error) { errors := make([]error, 0) x := &Tag{} m, ok := compiler.UnpackMap(in) @@ -5467,18 +5204,18 @@ func NewTag(in interface{}, context *compiler.Context) (*Tag, error) { // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string description = 2; v2 := compiler.MapValueForKey(m, "description") if v2 != nil { - x.Description, ok = v2.(string) + x.Description, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for description: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for description: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } @@ -5494,20 +5231,20 @@ func NewTag(in interface{}, context *compiler.Context) (*Tag, error) { // repeated NamedAny vendor_extension = 4; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -5527,17 +5264,19 @@ func NewTag(in interface{}, context *compiler.Context) (*Tag, error) { } // NewTypeItem creates an object of type TypeItem if possible, returning an error if not. -func NewTypeItem(in interface{}, context *compiler.Context) (*TypeItem, error) { +func NewTypeItem(in *yaml.Node, context *compiler.Context) (*TypeItem, error) { errors := make([]error, 0) x := &TypeItem{} - switch in := in.(type) { - case string: + v1 := in + switch v1.Kind { + case yaml.ScalarNode: x.Value = make([]string, 0) - x.Value = append(x.Value, in) - case []interface{}: + x.Value = append(x.Value, v1.Value) + case yaml.SequenceNode: x.Value = make([]string, 0) - for _, v := range in { - value, ok := v.(string) + for _, v := range v1.Content { + value := v.Value + ok := v.Kind == yaml.ScalarNode if ok { x.Value = append(x.Value, value) } else { @@ -5553,7 +5292,7 @@ func NewTypeItem(in interface{}, context *compiler.Context) (*TypeItem, error) { } // NewVendorExtension creates an object of type VendorExtension if possible, returning an error if not. -func NewVendorExtension(in interface{}, context *compiler.Context) (*VendorExtension, error) { +func NewVendorExtension(in *yaml.Node, context *compiler.Context) (*VendorExtension, error) { errors := make([]error, 0) x := &VendorExtension{} m, ok := compiler.UnpackMap(in) @@ -5564,19 +5303,19 @@ func NewVendorExtension(in interface{}, context *compiler.Context) (*VendorExten // repeated NamedAny additional_properties = 1; // MAP: Any x.AdditionalProperties = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -5595,7 +5334,7 @@ func NewVendorExtension(in interface{}, context *compiler.Context) (*VendorExten } // NewXml creates an object of type Xml if possible, returning an error if not. -func NewXml(in interface{}, context *compiler.Context) (*Xml, error) { +func NewXml(in *yaml.Node, context *compiler.Context) (*Xml, error) { errors := make([]error, 0) x := &Xml{} m, ok := compiler.UnpackMap(in) @@ -5613,65 +5352,65 @@ func NewXml(in interface{}, context *compiler.Context) (*Xml, error) { // string name = 1; v1 := compiler.MapValueForKey(m, "name") if v1 != nil { - x.Name, ok = v1.(string) + x.Name, ok = compiler.StringForScalarNode(v1) if !ok { - message := fmt.Sprintf("has unexpected value for name: %+v (%T)", v1, v1) + message := fmt.Sprintf("has unexpected value for name: %s", compiler.Display(v1)) errors = append(errors, compiler.NewError(context, message)) } } // string namespace = 2; v2 := compiler.MapValueForKey(m, "namespace") if v2 != nil { - x.Namespace, ok = v2.(string) + x.Namespace, ok = compiler.StringForScalarNode(v2) if !ok { - message := fmt.Sprintf("has unexpected value for namespace: %+v (%T)", v2, v2) + message := fmt.Sprintf("has unexpected value for namespace: %s", compiler.Display(v2)) errors = append(errors, compiler.NewError(context, message)) } } // string prefix = 3; v3 := compiler.MapValueForKey(m, "prefix") if v3 != nil { - x.Prefix, ok = v3.(string) + x.Prefix, ok = compiler.StringForScalarNode(v3) if !ok { - message := fmt.Sprintf("has unexpected value for prefix: %+v (%T)", v3, v3) + message := fmt.Sprintf("has unexpected value for prefix: %s", compiler.Display(v3)) errors = append(errors, compiler.NewError(context, message)) } } // bool attribute = 4; v4 := compiler.MapValueForKey(m, "attribute") if v4 != nil { - x.Attribute, ok = v4.(bool) + x.Attribute, ok = compiler.BoolForScalarNode(v4) if !ok { - message := fmt.Sprintf("has unexpected value for attribute: %+v (%T)", v4, v4) + message := fmt.Sprintf("has unexpected value for attribute: %s", compiler.Display(v4)) errors = append(errors, compiler.NewError(context, message)) } } // bool wrapped = 5; v5 := compiler.MapValueForKey(m, "wrapped") if v5 != nil { - x.Wrapped, ok = v5.(bool) + x.Wrapped, ok = compiler.BoolForScalarNode(v5) if !ok { - message := fmt.Sprintf("has unexpected value for wrapped: %+v (%T)", v5, v5) + message := fmt.Sprintf("has unexpected value for wrapped: %s", compiler.Display(v5)) errors = append(errors, compiler.NewError(context, message)) } } // repeated NamedAny vendor_extension = 6; // MAP: Any ^x- x.VendorExtension = make([]*NamedAny, 0) - for _, item := range m { - k, ok := compiler.StringValue(item.Key) + for i := 0; i < len(m.Content); i += 2 { + k, ok := compiler.StringForScalarNode(m.Content[i]) if ok { - v := item.Value + v := m.Content[i+1] if strings.HasPrefix(k, "x-") { pair := &NamedAny{} pair.Name = k result := &Any{} - handled, resultFromExt, err := compiler.HandleExtension(context, v, k) + handled, resultFromExt, err := compiler.CallExtension(context, v, k) if handled { if err != nil { errors = append(errors, err) } else { - bytes, _ := yaml.Marshal(v) + bytes := compiler.Marshal(v) result.Yaml = string(bytes) result.Value = resultFromExt pair.Value = result @@ -5691,7 +5430,7 @@ func NewXml(in interface{}, context *compiler.Context) (*Xml, error) { } // ResolveReferences resolves references found inside AdditionalPropertiesItem objects. -func (m *AdditionalPropertiesItem) ResolveReferences(root string) (interface{}, error) { +func (m *AdditionalPropertiesItem) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) { p, ok := m.Oneof.(*AdditionalPropertiesItem_Schema) @@ -5706,13 +5445,13 @@ func (m *AdditionalPropertiesItem) ResolveReferences(root string) (interface{}, } // ResolveReferences resolves references found inside Any objects. -func (m *Any) ResolveReferences(root string) (interface{}, error) { +func (m *Any) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) return nil, compiler.NewErrorGroupOrNil(errors) } // ResolveReferences resolves references found inside ApiKeySecurity objects. -func (m *ApiKeySecurity) ResolveReferences(root string) (interface{}, error) { +func (m *ApiKeySecurity) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.VendorExtension { if item != nil { @@ -5726,7 +5465,7 @@ func (m *ApiKeySecurity) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside BasicAuthenticationSecurity objects. -func (m *BasicAuthenticationSecurity) ResolveReferences(root string) (interface{}, error) { +func (m *BasicAuthenticationSecurity) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.VendorExtension { if item != nil { @@ -5740,7 +5479,7 @@ func (m *BasicAuthenticationSecurity) ResolveReferences(root string) (interface{ } // ResolveReferences resolves references found inside BodyParameter objects. -func (m *BodyParameter) ResolveReferences(root string) (interface{}, error) { +func (m *BodyParameter) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Schema != nil { _, err := m.Schema.ResolveReferences(root) @@ -5760,7 +5499,7 @@ func (m *BodyParameter) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Contact objects. -func (m *Contact) ResolveReferences(root string) (interface{}, error) { +func (m *Contact) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.VendorExtension { if item != nil { @@ -5774,7 +5513,7 @@ func (m *Contact) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Default objects. -func (m *Default) ResolveReferences(root string) (interface{}, error) { +func (m *Default) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.AdditionalProperties { if item != nil { @@ -5788,7 +5527,7 @@ func (m *Default) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Definitions objects. -func (m *Definitions) ResolveReferences(root string) (interface{}, error) { +func (m *Definitions) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.AdditionalProperties { if item != nil { @@ -5802,7 +5541,7 @@ func (m *Definitions) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Document objects. -func (m *Document) ResolveReferences(root string) (interface{}, error) { +func (m *Document) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Info != nil { _, err := m.Info.ResolveReferences(root) @@ -5874,7 +5613,7 @@ func (m *Document) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Examples objects. -func (m *Examples) ResolveReferences(root string) (interface{}, error) { +func (m *Examples) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.AdditionalProperties { if item != nil { @@ -5888,7 +5627,7 @@ func (m *Examples) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside ExternalDocs objects. -func (m *ExternalDocs) ResolveReferences(root string) (interface{}, error) { +func (m *ExternalDocs) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.VendorExtension { if item != nil { @@ -5902,7 +5641,7 @@ func (m *ExternalDocs) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside FileSchema objects. -func (m *FileSchema) ResolveReferences(root string) (interface{}, error) { +func (m *FileSchema) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Default != nil { _, err := m.Default.ResolveReferences(root) @@ -5934,7 +5673,7 @@ func (m *FileSchema) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside FormDataParameterSubSchema objects. -func (m *FormDataParameterSubSchema) ResolveReferences(root string) (interface{}, error) { +func (m *FormDataParameterSubSchema) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Items != nil { _, err := m.Items.ResolveReferences(root) @@ -5968,7 +5707,7 @@ func (m *FormDataParameterSubSchema) ResolveReferences(root string) (interface{} } // ResolveReferences resolves references found inside Header objects. -func (m *Header) ResolveReferences(root string) (interface{}, error) { +func (m *Header) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Items != nil { _, err := m.Items.ResolveReferences(root) @@ -6002,7 +5741,7 @@ func (m *Header) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside HeaderParameterSubSchema objects. -func (m *HeaderParameterSubSchema) ResolveReferences(root string) (interface{}, error) { +func (m *HeaderParameterSubSchema) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Items != nil { _, err := m.Items.ResolveReferences(root) @@ -6036,7 +5775,7 @@ func (m *HeaderParameterSubSchema) ResolveReferences(root string) (interface{}, } // ResolveReferences resolves references found inside Headers objects. -func (m *Headers) ResolveReferences(root string) (interface{}, error) { +func (m *Headers) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.AdditionalProperties { if item != nil { @@ -6050,7 +5789,7 @@ func (m *Headers) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Info objects. -func (m *Info) ResolveReferences(root string) (interface{}, error) { +func (m *Info) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Contact != nil { _, err := m.Contact.ResolveReferences(root) @@ -6076,7 +5815,7 @@ func (m *Info) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside ItemsItem objects. -func (m *ItemsItem) ResolveReferences(root string) (interface{}, error) { +func (m *ItemsItem) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.Schema { if item != nil { @@ -6090,7 +5829,7 @@ func (m *ItemsItem) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside JsonReference objects. -func (m *JsonReference) ResolveReferences(root string) (interface{}, error) { +func (m *JsonReference) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.XRef != "" { info, err := compiler.ReadInfoForRef(root, m.XRef) @@ -6110,7 +5849,7 @@ func (m *JsonReference) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside License objects. -func (m *License) ResolveReferences(root string) (interface{}, error) { +func (m *License) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.VendorExtension { if item != nil { @@ -6124,7 +5863,7 @@ func (m *License) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside NamedAny objects. -func (m *NamedAny) ResolveReferences(root string) (interface{}, error) { +func (m *NamedAny) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Value != nil { _, err := m.Value.ResolveReferences(root) @@ -6136,7 +5875,7 @@ func (m *NamedAny) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside NamedHeader objects. -func (m *NamedHeader) ResolveReferences(root string) (interface{}, error) { +func (m *NamedHeader) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Value != nil { _, err := m.Value.ResolveReferences(root) @@ -6148,7 +5887,7 @@ func (m *NamedHeader) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside NamedParameter objects. -func (m *NamedParameter) ResolveReferences(root string) (interface{}, error) { +func (m *NamedParameter) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Value != nil { _, err := m.Value.ResolveReferences(root) @@ -6160,7 +5899,7 @@ func (m *NamedParameter) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside NamedPathItem objects. -func (m *NamedPathItem) ResolveReferences(root string) (interface{}, error) { +func (m *NamedPathItem) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Value != nil { _, err := m.Value.ResolveReferences(root) @@ -6172,7 +5911,7 @@ func (m *NamedPathItem) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside NamedResponse objects. -func (m *NamedResponse) ResolveReferences(root string) (interface{}, error) { +func (m *NamedResponse) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Value != nil { _, err := m.Value.ResolveReferences(root) @@ -6184,7 +5923,7 @@ func (m *NamedResponse) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside NamedResponseValue objects. -func (m *NamedResponseValue) ResolveReferences(root string) (interface{}, error) { +func (m *NamedResponseValue) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Value != nil { _, err := m.Value.ResolveReferences(root) @@ -6196,7 +5935,7 @@ func (m *NamedResponseValue) ResolveReferences(root string) (interface{}, error) } // ResolveReferences resolves references found inside NamedSchema objects. -func (m *NamedSchema) ResolveReferences(root string) (interface{}, error) { +func (m *NamedSchema) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Value != nil { _, err := m.Value.ResolveReferences(root) @@ -6208,7 +5947,7 @@ func (m *NamedSchema) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside NamedSecurityDefinitionsItem objects. -func (m *NamedSecurityDefinitionsItem) ResolveReferences(root string) (interface{}, error) { +func (m *NamedSecurityDefinitionsItem) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Value != nil { _, err := m.Value.ResolveReferences(root) @@ -6220,13 +5959,13 @@ func (m *NamedSecurityDefinitionsItem) ResolveReferences(root string) (interface } // ResolveReferences resolves references found inside NamedString objects. -func (m *NamedString) ResolveReferences(root string) (interface{}, error) { +func (m *NamedString) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) return nil, compiler.NewErrorGroupOrNil(errors) } // ResolveReferences resolves references found inside NamedStringArray objects. -func (m *NamedStringArray) ResolveReferences(root string) (interface{}, error) { +func (m *NamedStringArray) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Value != nil { _, err := m.Value.ResolveReferences(root) @@ -6238,7 +5977,7 @@ func (m *NamedStringArray) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside NonBodyParameter objects. -func (m *NonBodyParameter) ResolveReferences(root string) (interface{}, error) { +func (m *NonBodyParameter) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) { p, ok := m.Oneof.(*NonBodyParameter_HeaderParameterSubSchema) @@ -6280,7 +6019,7 @@ func (m *NonBodyParameter) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Oauth2AccessCodeSecurity objects. -func (m *Oauth2AccessCodeSecurity) ResolveReferences(root string) (interface{}, error) { +func (m *Oauth2AccessCodeSecurity) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Scopes != nil { _, err := m.Scopes.ResolveReferences(root) @@ -6300,7 +6039,7 @@ func (m *Oauth2AccessCodeSecurity) ResolveReferences(root string) (interface{}, } // ResolveReferences resolves references found inside Oauth2ApplicationSecurity objects. -func (m *Oauth2ApplicationSecurity) ResolveReferences(root string) (interface{}, error) { +func (m *Oauth2ApplicationSecurity) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Scopes != nil { _, err := m.Scopes.ResolveReferences(root) @@ -6320,7 +6059,7 @@ func (m *Oauth2ApplicationSecurity) ResolveReferences(root string) (interface{}, } // ResolveReferences resolves references found inside Oauth2ImplicitSecurity objects. -func (m *Oauth2ImplicitSecurity) ResolveReferences(root string) (interface{}, error) { +func (m *Oauth2ImplicitSecurity) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Scopes != nil { _, err := m.Scopes.ResolveReferences(root) @@ -6340,7 +6079,7 @@ func (m *Oauth2ImplicitSecurity) ResolveReferences(root string) (interface{}, er } // ResolveReferences resolves references found inside Oauth2PasswordSecurity objects. -func (m *Oauth2PasswordSecurity) ResolveReferences(root string) (interface{}, error) { +func (m *Oauth2PasswordSecurity) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Scopes != nil { _, err := m.Scopes.ResolveReferences(root) @@ -6360,7 +6099,7 @@ func (m *Oauth2PasswordSecurity) ResolveReferences(root string) (interface{}, er } // ResolveReferences resolves references found inside Oauth2Scopes objects. -func (m *Oauth2Scopes) ResolveReferences(root string) (interface{}, error) { +func (m *Oauth2Scopes) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.AdditionalProperties { if item != nil { @@ -6374,7 +6113,7 @@ func (m *Oauth2Scopes) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Operation objects. -func (m *Operation) ResolveReferences(root string) (interface{}, error) { +func (m *Operation) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.ExternalDocs != nil { _, err := m.ExternalDocs.ResolveReferences(root) @@ -6416,7 +6155,7 @@ func (m *Operation) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Parameter objects. -func (m *Parameter) ResolveReferences(root string) (interface{}, error) { +func (m *Parameter) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) { p, ok := m.Oneof.(*Parameter_BodyParameter) @@ -6440,7 +6179,7 @@ func (m *Parameter) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside ParameterDefinitions objects. -func (m *ParameterDefinitions) ResolveReferences(root string) (interface{}, error) { +func (m *ParameterDefinitions) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.AdditionalProperties { if item != nil { @@ -6454,7 +6193,7 @@ func (m *ParameterDefinitions) ResolveReferences(root string) (interface{}, erro } // ResolveReferences resolves references found inside ParametersItem objects. -func (m *ParametersItem) ResolveReferences(root string) (interface{}, error) { +func (m *ParametersItem) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) { p, ok := m.Oneof.(*ParametersItem_Parameter) @@ -6486,7 +6225,7 @@ func (m *ParametersItem) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside PathItem objects. -func (m *PathItem) ResolveReferences(root string) (interface{}, error) { +func (m *PathItem) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.XRef != "" { info, err := compiler.ReadInfoForRef(root, m.XRef) @@ -6564,7 +6303,7 @@ func (m *PathItem) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside PathParameterSubSchema objects. -func (m *PathParameterSubSchema) ResolveReferences(root string) (interface{}, error) { +func (m *PathParameterSubSchema) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Items != nil { _, err := m.Items.ResolveReferences(root) @@ -6598,7 +6337,7 @@ func (m *PathParameterSubSchema) ResolveReferences(root string) (interface{}, er } // ResolveReferences resolves references found inside Paths objects. -func (m *Paths) ResolveReferences(root string) (interface{}, error) { +func (m *Paths) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.VendorExtension { if item != nil { @@ -6620,7 +6359,7 @@ func (m *Paths) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside PrimitivesItems objects. -func (m *PrimitivesItems) ResolveReferences(root string) (interface{}, error) { +func (m *PrimitivesItems) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Items != nil { _, err := m.Items.ResolveReferences(root) @@ -6654,7 +6393,7 @@ func (m *PrimitivesItems) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Properties objects. -func (m *Properties) ResolveReferences(root string) (interface{}, error) { +func (m *Properties) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.AdditionalProperties { if item != nil { @@ -6668,7 +6407,7 @@ func (m *Properties) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside QueryParameterSubSchema objects. -func (m *QueryParameterSubSchema) ResolveReferences(root string) (interface{}, error) { +func (m *QueryParameterSubSchema) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Items != nil { _, err := m.Items.ResolveReferences(root) @@ -6702,7 +6441,7 @@ func (m *QueryParameterSubSchema) ResolveReferences(root string) (interface{}, e } // ResolveReferences resolves references found inside Response objects. -func (m *Response) ResolveReferences(root string) (interface{}, error) { +func (m *Response) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.Schema != nil { _, err := m.Schema.ResolveReferences(root) @@ -6734,7 +6473,7 @@ func (m *Response) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside ResponseDefinitions objects. -func (m *ResponseDefinitions) ResolveReferences(root string) (interface{}, error) { +func (m *ResponseDefinitions) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.AdditionalProperties { if item != nil { @@ -6748,7 +6487,7 @@ func (m *ResponseDefinitions) ResolveReferences(root string) (interface{}, error } // ResolveReferences resolves references found inside ResponseValue objects. -func (m *ResponseValue) ResolveReferences(root string) (interface{}, error) { +func (m *ResponseValue) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) { p, ok := m.Oneof.(*ResponseValue_Response) @@ -6780,7 +6519,7 @@ func (m *ResponseValue) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Responses objects. -func (m *Responses) ResolveReferences(root string) (interface{}, error) { +func (m *Responses) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.ResponseCode { if item != nil { @@ -6802,7 +6541,7 @@ func (m *Responses) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Schema objects. -func (m *Schema) ResolveReferences(root string) (interface{}, error) { +func (m *Schema) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.XRef != "" { info, err := compiler.ReadInfoForRef(root, m.XRef) @@ -6894,7 +6633,7 @@ func (m *Schema) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside SchemaItem objects. -func (m *SchemaItem) ResolveReferences(root string) (interface{}, error) { +func (m *SchemaItem) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) { p, ok := m.Oneof.(*SchemaItem_Schema) @@ -6918,7 +6657,7 @@ func (m *SchemaItem) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside SecurityDefinitions objects. -func (m *SecurityDefinitions) ResolveReferences(root string) (interface{}, error) { +func (m *SecurityDefinitions) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.AdditionalProperties { if item != nil { @@ -6932,7 +6671,7 @@ func (m *SecurityDefinitions) ResolveReferences(root string) (interface{}, error } // ResolveReferences resolves references found inside SecurityDefinitionsItem objects. -func (m *SecurityDefinitionsItem) ResolveReferences(root string) (interface{}, error) { +func (m *SecurityDefinitionsItem) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) { p, ok := m.Oneof.(*SecurityDefinitionsItem_BasicAuthenticationSecurity) @@ -6992,7 +6731,7 @@ func (m *SecurityDefinitionsItem) ResolveReferences(root string) (interface{}, e } // ResolveReferences resolves references found inside SecurityRequirement objects. -func (m *SecurityRequirement) ResolveReferences(root string) (interface{}, error) { +func (m *SecurityRequirement) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.AdditionalProperties { if item != nil { @@ -7006,13 +6745,13 @@ func (m *SecurityRequirement) ResolveReferences(root string) (interface{}, error } // ResolveReferences resolves references found inside StringArray objects. -func (m *StringArray) ResolveReferences(root string) (interface{}, error) { +func (m *StringArray) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) return nil, compiler.NewErrorGroupOrNil(errors) } // ResolveReferences resolves references found inside Tag objects. -func (m *Tag) ResolveReferences(root string) (interface{}, error) { +func (m *Tag) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) if m.ExternalDocs != nil { _, err := m.ExternalDocs.ResolveReferences(root) @@ -7032,13 +6771,13 @@ func (m *Tag) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside TypeItem objects. -func (m *TypeItem) ResolveReferences(root string) (interface{}, error) { +func (m *TypeItem) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) return nil, compiler.NewErrorGroupOrNil(errors) } // ResolveReferences resolves references found inside VendorExtension objects. -func (m *VendorExtension) ResolveReferences(root string) (interface{}, error) { +func (m *VendorExtension) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.AdditionalProperties { if item != nil { @@ -7052,7 +6791,7 @@ func (m *VendorExtension) ResolveReferences(root string) (interface{}, error) { } // ResolveReferences resolves references found inside Xml objects. -func (m *Xml) ResolveReferences(root string) (interface{}, error) { +func (m *Xml) ResolveReferences(root string) (*yaml.Node, error) { errors := make([]error, 0) for _, item := range m.VendorExtension { if item != nil { @@ -7066,7 +6805,7 @@ func (m *Xml) ResolveReferences(root string) (interface{}, error) { } // ToRawInfo returns a description of AdditionalPropertiesItem suitable for JSON or YAML export. -func (m *AdditionalPropertiesItem) ToRawInfo() interface{} { +func (m *AdditionalPropertiesItem) ToRawInfo() *yaml.Node { // ONE OF WRAPPER // AdditionalPropertiesItem // {Name:schema Type:Schema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} @@ -7076,792 +6815,885 @@ func (m *AdditionalPropertiesItem) ToRawInfo() interface{} { } // {Name:boolean Type:bool StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if v1, ok := m.GetOneof().(*AdditionalPropertiesItem_Boolean); ok { - return v1.Boolean + return compiler.NewScalarNodeForBool(v1.Boolean) } return nil } // ToRawInfo returns a description of Any suitable for JSON or YAML export. -func (m *Any) ToRawInfo() interface{} { +func (m *Any) ToRawInfo() *yaml.Node { var err error - var info1 []yaml.MapSlice - err = yaml.Unmarshal([]byte(m.Yaml), &info1) + var node yaml.Node + err = yaml.Unmarshal([]byte(m.Yaml), &node) if err == nil { - return info1 - } - var info2 yaml.MapSlice - err = yaml.Unmarshal([]byte(m.Yaml), &info2) - if err == nil { - return info2 - } - var info3 interface{} - err = yaml.Unmarshal([]byte(m.Yaml), &info3) - if err == nil { - return info3 + if node.Kind == yaml.DocumentNode { + return node.Content[0] + } + return &node + } else { + return nil } return nil } // ToRawInfo returns a description of ApiKeySecurity suitable for JSON or YAML export. -func (m *ApiKeySecurity) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *ApiKeySecurity) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) // always include this required field. - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) // always include this required field. - info = append(info, yaml.MapItem{Key: "in", Value: m.In}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("in")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.In)) if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of BasicAuthenticationSecurity suitable for JSON or YAML export. -func (m *BasicAuthenticationSecurity) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *BasicAuthenticationSecurity) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of BodyParameter suitable for JSON or YAML export. -func (m *BodyParameter) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *BodyParameter) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } // always include this required field. - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) // always include this required field. - info = append(info, yaml.MapItem{Key: "in", Value: m.In}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("in")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.In)) if m.Required != false { - info = append(info, yaml.MapItem{Key: "required", Value: m.Required}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("required")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Required)) } // always include this required field. - info = append(info, yaml.MapItem{Key: "schema", Value: m.Schema.ToRawInfo()}) - // &{Name:schema Type:Schema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} + info.Content = append(info.Content, compiler.NewScalarNodeForString("schema")) + info.Content = append(info.Content, m.Schema.ToRawInfo()) if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Contact suitable for JSON or YAML export. -func (m *Contact) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Contact) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } if m.Url != "" { - info = append(info, yaml.MapItem{Key: "url", Value: m.Url}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("url")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Url)) } if m.Email != "" { - info = append(info, yaml.MapItem{Key: "email", Value: m.Email}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("email")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Email)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Default suitable for JSON or YAML export. -func (m *Default) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Default) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.AdditionalProperties != nil { for _, item := range m.AdditionalProperties { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:additionalProperties Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern: Implicit:false Description:} return info } // ToRawInfo returns a description of Definitions suitable for JSON or YAML export. -func (m *Definitions) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Definitions) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.AdditionalProperties != nil { for _, item := range m.AdditionalProperties { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:additionalProperties Type:NamedSchema StringEnumValues:[] MapType:Schema Repeated:true Pattern: Implicit:true Description:} return info } // ToRawInfo returns a description of Document suitable for JSON or YAML export. -func (m *Document) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Document) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "swagger", Value: m.Swagger}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("swagger")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Swagger)) // always include this required field. - info = append(info, yaml.MapItem{Key: "info", Value: m.Info.ToRawInfo()}) - // &{Name:info Type:Info StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} + info.Content = append(info.Content, compiler.NewScalarNodeForString("info")) + info.Content = append(info.Content, m.Info.ToRawInfo()) if m.Host != "" { - info = append(info, yaml.MapItem{Key: "host", Value: m.Host}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("host")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Host)) } if m.BasePath != "" { - info = append(info, yaml.MapItem{Key: "basePath", Value: m.BasePath}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("basePath")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.BasePath)) } if len(m.Schemes) != 0 { - info = append(info, yaml.MapItem{Key: "schemes", Value: m.Schemes}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("schemes")) + info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Schemes)) } if len(m.Consumes) != 0 { - info = append(info, yaml.MapItem{Key: "consumes", Value: m.Consumes}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("consumes")) + info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Consumes)) } if len(m.Produces) != 0 { - info = append(info, yaml.MapItem{Key: "produces", Value: m.Produces}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("produces")) + info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Produces)) } // always include this required field. - info = append(info, yaml.MapItem{Key: "paths", Value: m.Paths.ToRawInfo()}) - // &{Name:paths Type:Paths StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} + info.Content = append(info.Content, compiler.NewScalarNodeForString("paths")) + info.Content = append(info.Content, m.Paths.ToRawInfo()) if m.Definitions != nil { - info = append(info, yaml.MapItem{Key: "definitions", Value: m.Definitions.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("definitions")) + info.Content = append(info.Content, m.Definitions.ToRawInfo()) } - // &{Name:definitions Type:Definitions StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Parameters != nil { - info = append(info, yaml.MapItem{Key: "parameters", Value: m.Parameters.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("parameters")) + info.Content = append(info.Content, m.Parameters.ToRawInfo()) } - // &{Name:parameters Type:ParameterDefinitions StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Responses != nil { - info = append(info, yaml.MapItem{Key: "responses", Value: m.Responses.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("responses")) + info.Content = append(info.Content, m.Responses.ToRawInfo()) } - // &{Name:responses Type:ResponseDefinitions StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if len(m.Security) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Security { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "security", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("security")) + info.Content = append(info.Content, items) } - // &{Name:security Type:SecurityRequirement StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} if m.SecurityDefinitions != nil { - info = append(info, yaml.MapItem{Key: "securityDefinitions", Value: m.SecurityDefinitions.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("securityDefinitions")) + info.Content = append(info.Content, m.SecurityDefinitions.ToRawInfo()) } - // &{Name:securityDefinitions Type:SecurityDefinitions StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if len(m.Tags) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Tags { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "tags", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("tags")) + info.Content = append(info.Content, items) } - // &{Name:tags Type:Tag StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} if m.ExternalDocs != nil { - info = append(info, yaml.MapItem{Key: "externalDocs", Value: m.ExternalDocs.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("externalDocs")) + info.Content = append(info.Content, m.ExternalDocs.ToRawInfo()) } - // &{Name:externalDocs Type:ExternalDocs StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Examples suitable for JSON or YAML export. -func (m *Examples) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Examples) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.AdditionalProperties != nil { for _, item := range m.AdditionalProperties { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:additionalProperties Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern: Implicit:true Description:} return info } // ToRawInfo returns a description of ExternalDocs suitable for JSON or YAML export. -func (m *ExternalDocs) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *ExternalDocs) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } // always include this required field. - info = append(info, yaml.MapItem{Key: "url", Value: m.Url}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("url")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Url)) if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of FileSchema suitable for JSON or YAML export. -func (m *FileSchema) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *FileSchema) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Format != "" { - info = append(info, yaml.MapItem{Key: "format", Value: m.Format}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("format")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Format)) } if m.Title != "" { - info = append(info, yaml.MapItem{Key: "title", Value: m.Title}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("title")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Title)) } if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.Default != nil { - info = append(info, yaml.MapItem{Key: "default", Value: m.Default.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("default")) + info.Content = append(info.Content, m.Default.ToRawInfo()) } - // &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if len(m.Required) != 0 { - info = append(info, yaml.MapItem{Key: "required", Value: m.Required}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("required")) + info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Required)) } // always include this required field. - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) if m.ReadOnly != false { - info = append(info, yaml.MapItem{Key: "readOnly", Value: m.ReadOnly}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("readOnly")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ReadOnly)) } if m.ExternalDocs != nil { - info = append(info, yaml.MapItem{Key: "externalDocs", Value: m.ExternalDocs.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("externalDocs")) + info.Content = append(info.Content, m.ExternalDocs.ToRawInfo()) } - // &{Name:externalDocs Type:ExternalDocs StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Example != nil { - info = append(info, yaml.MapItem{Key: "example", Value: m.Example.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("example")) + info.Content = append(info.Content, m.Example.ToRawInfo()) } - // &{Name:example Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of FormDataParameterSubSchema suitable for JSON or YAML export. -func (m *FormDataParameterSubSchema) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *FormDataParameterSubSchema) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Required != false { - info = append(info, yaml.MapItem{Key: "required", Value: m.Required}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("required")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Required)) } if m.In != "" { - info = append(info, yaml.MapItem{Key: "in", Value: m.In}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("in")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.In)) } if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } if m.AllowEmptyValue != false { - info = append(info, yaml.MapItem{Key: "allowEmptyValue", Value: m.AllowEmptyValue}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("allowEmptyValue")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.AllowEmptyValue)) } if m.Type != "" { - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) } if m.Format != "" { - info = append(info, yaml.MapItem{Key: "format", Value: m.Format}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("format")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Format)) } if m.Items != nil { - info = append(info, yaml.MapItem{Key: "items", Value: m.Items.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("items")) + info.Content = append(info.Content, m.Items.ToRawInfo()) } - // &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.CollectionFormat != "" { - info = append(info, yaml.MapItem{Key: "collectionFormat", Value: m.CollectionFormat}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("collectionFormat")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.CollectionFormat)) } if m.Default != nil { - info = append(info, yaml.MapItem{Key: "default", Value: m.Default.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("default")) + info.Content = append(info.Content, m.Default.ToRawInfo()) } - // &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Maximum != 0.0 { - info = append(info, yaml.MapItem{Key: "maximum", Value: m.Maximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } if m.ExclusiveMaximum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMaximum", Value: m.ExclusiveMaximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } if m.Minimum != 0.0 { - info = append(info, yaml.MapItem{Key: "minimum", Value: m.Minimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } if m.ExclusiveMinimum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMinimum", Value: m.ExclusiveMinimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } if m.MaxLength != 0 { - info = append(info, yaml.MapItem{Key: "maxLength", Value: m.MaxLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxLength)) } if m.MinLength != 0 { - info = append(info, yaml.MapItem{Key: "minLength", Value: m.MinLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinLength)) } if m.Pattern != "" { - info = append(info, yaml.MapItem{Key: "pattern", Value: m.Pattern}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("pattern")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Pattern)) } if m.MaxItems != 0 { - info = append(info, yaml.MapItem{Key: "maxItems", Value: m.MaxItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxItems)) } if m.MinItems != 0 { - info = append(info, yaml.MapItem{Key: "minItems", Value: m.MinItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } if m.UniqueItems != false { - info = append(info, yaml.MapItem{Key: "uniqueItems", Value: m.UniqueItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } if len(m.Enum) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Enum { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "enum", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("enum")) + info.Content = append(info.Content, items) } - // &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} if m.MultipleOf != 0.0 { - info = append(info, yaml.MapItem{Key: "multipleOf", Value: m.MultipleOf}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("multipleOf")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.MultipleOf)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Header suitable for JSON or YAML export. -func (m *Header) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Header) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) if m.Format != "" { - info = append(info, yaml.MapItem{Key: "format", Value: m.Format}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("format")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Format)) } if m.Items != nil { - info = append(info, yaml.MapItem{Key: "items", Value: m.Items.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("items")) + info.Content = append(info.Content, m.Items.ToRawInfo()) } - // &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.CollectionFormat != "" { - info = append(info, yaml.MapItem{Key: "collectionFormat", Value: m.CollectionFormat}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("collectionFormat")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.CollectionFormat)) } if m.Default != nil { - info = append(info, yaml.MapItem{Key: "default", Value: m.Default.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("default")) + info.Content = append(info.Content, m.Default.ToRawInfo()) } - // &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Maximum != 0.0 { - info = append(info, yaml.MapItem{Key: "maximum", Value: m.Maximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } if m.ExclusiveMaximum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMaximum", Value: m.ExclusiveMaximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } if m.Minimum != 0.0 { - info = append(info, yaml.MapItem{Key: "minimum", Value: m.Minimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } if m.ExclusiveMinimum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMinimum", Value: m.ExclusiveMinimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } if m.MaxLength != 0 { - info = append(info, yaml.MapItem{Key: "maxLength", Value: m.MaxLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxLength)) } if m.MinLength != 0 { - info = append(info, yaml.MapItem{Key: "minLength", Value: m.MinLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinLength)) } if m.Pattern != "" { - info = append(info, yaml.MapItem{Key: "pattern", Value: m.Pattern}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("pattern")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Pattern)) } if m.MaxItems != 0 { - info = append(info, yaml.MapItem{Key: "maxItems", Value: m.MaxItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxItems)) } if m.MinItems != 0 { - info = append(info, yaml.MapItem{Key: "minItems", Value: m.MinItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } if m.UniqueItems != false { - info = append(info, yaml.MapItem{Key: "uniqueItems", Value: m.UniqueItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } if len(m.Enum) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Enum { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "enum", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("enum")) + info.Content = append(info.Content, items) } - // &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} if m.MultipleOf != 0.0 { - info = append(info, yaml.MapItem{Key: "multipleOf", Value: m.MultipleOf}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("multipleOf")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.MultipleOf)) } if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of HeaderParameterSubSchema suitable for JSON or YAML export. -func (m *HeaderParameterSubSchema) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *HeaderParameterSubSchema) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Required != false { - info = append(info, yaml.MapItem{Key: "required", Value: m.Required}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("required")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Required)) } if m.In != "" { - info = append(info, yaml.MapItem{Key: "in", Value: m.In}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("in")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.In)) } if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } if m.Type != "" { - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) } if m.Format != "" { - info = append(info, yaml.MapItem{Key: "format", Value: m.Format}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("format")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Format)) } if m.Items != nil { - info = append(info, yaml.MapItem{Key: "items", Value: m.Items.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("items")) + info.Content = append(info.Content, m.Items.ToRawInfo()) } - // &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.CollectionFormat != "" { - info = append(info, yaml.MapItem{Key: "collectionFormat", Value: m.CollectionFormat}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("collectionFormat")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.CollectionFormat)) } if m.Default != nil { - info = append(info, yaml.MapItem{Key: "default", Value: m.Default.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("default")) + info.Content = append(info.Content, m.Default.ToRawInfo()) } - // &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Maximum != 0.0 { - info = append(info, yaml.MapItem{Key: "maximum", Value: m.Maximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } if m.ExclusiveMaximum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMaximum", Value: m.ExclusiveMaximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } if m.Minimum != 0.0 { - info = append(info, yaml.MapItem{Key: "minimum", Value: m.Minimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } if m.ExclusiveMinimum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMinimum", Value: m.ExclusiveMinimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } if m.MaxLength != 0 { - info = append(info, yaml.MapItem{Key: "maxLength", Value: m.MaxLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxLength)) } if m.MinLength != 0 { - info = append(info, yaml.MapItem{Key: "minLength", Value: m.MinLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinLength)) } if m.Pattern != "" { - info = append(info, yaml.MapItem{Key: "pattern", Value: m.Pattern}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("pattern")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Pattern)) } if m.MaxItems != 0 { - info = append(info, yaml.MapItem{Key: "maxItems", Value: m.MaxItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxItems)) } if m.MinItems != 0 { - info = append(info, yaml.MapItem{Key: "minItems", Value: m.MinItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } if m.UniqueItems != false { - info = append(info, yaml.MapItem{Key: "uniqueItems", Value: m.UniqueItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } if len(m.Enum) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Enum { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "enum", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("enum")) + info.Content = append(info.Content, items) } - // &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} if m.MultipleOf != 0.0 { - info = append(info, yaml.MapItem{Key: "multipleOf", Value: m.MultipleOf}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("multipleOf")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.MultipleOf)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Headers suitable for JSON or YAML export. -func (m *Headers) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Headers) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.AdditionalProperties != nil { for _, item := range m.AdditionalProperties { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:additionalProperties Type:NamedHeader StringEnumValues:[] MapType:Header Repeated:true Pattern: Implicit:true Description:} return info } // ToRawInfo returns a description of Info suitable for JSON or YAML export. -func (m *Info) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Info) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "title", Value: m.Title}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("title")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Title)) // always include this required field. - info = append(info, yaml.MapItem{Key: "version", Value: m.Version}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("version")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Version)) if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.TermsOfService != "" { - info = append(info, yaml.MapItem{Key: "termsOfService", Value: m.TermsOfService}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("termsOfService")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.TermsOfService)) } if m.Contact != nil { - info = append(info, yaml.MapItem{Key: "contact", Value: m.Contact.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("contact")) + info.Content = append(info.Content, m.Contact.ToRawInfo()) } - // &{Name:contact Type:Contact StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.License != nil { - info = append(info, yaml.MapItem{Key: "license", Value: m.License.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("license")) + info.Content = append(info.Content, m.License.ToRawInfo()) } - // &{Name:license Type:License StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of ItemsItem suitable for JSON or YAML export. -func (m *ItemsItem) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *ItemsItem) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if len(m.Schema) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Schema { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "schema", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("schema")) + info.Content = append(info.Content, items) } - // &{Name:schema Type:Schema StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} return info } // ToRawInfo returns a description of JsonReference suitable for JSON or YAML export. -func (m *JsonReference) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *JsonReference) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "$ref", Value: m.XRef}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("$ref")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.XRef)) if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } return info } // ToRawInfo returns a description of License suitable for JSON or YAML export. -func (m *License) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *License) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) if m.Url != "" { - info = append(info, yaml.MapItem{Key: "url", Value: m.Url}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("url")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Url)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of NamedAny suitable for JSON or YAML export. -func (m *NamedAny) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *NamedAny) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } // &{Name:value Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value} return info } // ToRawInfo returns a description of NamedHeader suitable for JSON or YAML export. -func (m *NamedHeader) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *NamedHeader) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } // &{Name:value Type:Header StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value} return info } // ToRawInfo returns a description of NamedParameter suitable for JSON or YAML export. -func (m *NamedParameter) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *NamedParameter) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } // &{Name:value Type:Parameter StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value} return info } // ToRawInfo returns a description of NamedPathItem suitable for JSON or YAML export. -func (m *NamedPathItem) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *NamedPathItem) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } // &{Name:value Type:PathItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value} return info } // ToRawInfo returns a description of NamedResponse suitable for JSON or YAML export. -func (m *NamedResponse) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *NamedResponse) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } // &{Name:value Type:Response StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value} return info } // ToRawInfo returns a description of NamedResponseValue suitable for JSON or YAML export. -func (m *NamedResponseValue) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *NamedResponseValue) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } // &{Name:value Type:ResponseValue StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value} return info } // ToRawInfo returns a description of NamedSchema suitable for JSON or YAML export. -func (m *NamedSchema) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *NamedSchema) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } // &{Name:value Type:Schema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value} return info } // ToRawInfo returns a description of NamedSecurityDefinitionsItem suitable for JSON or YAML export. -func (m *NamedSecurityDefinitionsItem) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *NamedSecurityDefinitionsItem) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } // &{Name:value Type:SecurityDefinitionsItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value} return info } // ToRawInfo returns a description of NamedString suitable for JSON or YAML export. -func (m *NamedString) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *NamedString) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } if m.Value != "" { - info = append(info, yaml.MapItem{Key: "value", Value: m.Value}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("value")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Value)) } return info } // ToRawInfo returns a description of NamedStringArray suitable for JSON or YAML export. -func (m *NamedStringArray) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *NamedStringArray) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } // &{Name:value Type:StringArray StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:Mapped value} return info } // ToRawInfo returns a description of NonBodyParameter suitable for JSON or YAML export. -func (m *NonBodyParameter) ToRawInfo() interface{} { +func (m *NonBodyParameter) ToRawInfo() *yaml.Node { // ONE OF WRAPPER // NonBodyParameter // {Name:headerParameterSubSchema Type:HeaderParameterSubSchema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} @@ -7888,122 +7720,139 @@ func (m *NonBodyParameter) ToRawInfo() interface{} { } // ToRawInfo returns a description of Oauth2AccessCodeSecurity suitable for JSON or YAML export. -func (m *Oauth2AccessCodeSecurity) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Oauth2AccessCodeSecurity) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) // always include this required field. - info = append(info, yaml.MapItem{Key: "flow", Value: m.Flow}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("flow")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Flow)) if m.Scopes != nil { - info = append(info, yaml.MapItem{Key: "scopes", Value: m.Scopes.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("scopes")) + info.Content = append(info.Content, m.Scopes.ToRawInfo()) } - // &{Name:scopes Type:Oauth2Scopes StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} // always include this required field. - info = append(info, yaml.MapItem{Key: "authorizationUrl", Value: m.AuthorizationUrl}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("authorizationUrl")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.AuthorizationUrl)) // always include this required field. - info = append(info, yaml.MapItem{Key: "tokenUrl", Value: m.TokenUrl}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("tokenUrl")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.TokenUrl)) if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Oauth2ApplicationSecurity suitable for JSON or YAML export. -func (m *Oauth2ApplicationSecurity) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Oauth2ApplicationSecurity) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) // always include this required field. - info = append(info, yaml.MapItem{Key: "flow", Value: m.Flow}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("flow")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Flow)) if m.Scopes != nil { - info = append(info, yaml.MapItem{Key: "scopes", Value: m.Scopes.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("scopes")) + info.Content = append(info.Content, m.Scopes.ToRawInfo()) } - // &{Name:scopes Type:Oauth2Scopes StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} // always include this required field. - info = append(info, yaml.MapItem{Key: "tokenUrl", Value: m.TokenUrl}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("tokenUrl")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.TokenUrl)) if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Oauth2ImplicitSecurity suitable for JSON or YAML export. -func (m *Oauth2ImplicitSecurity) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Oauth2ImplicitSecurity) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) // always include this required field. - info = append(info, yaml.MapItem{Key: "flow", Value: m.Flow}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("flow")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Flow)) if m.Scopes != nil { - info = append(info, yaml.MapItem{Key: "scopes", Value: m.Scopes.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("scopes")) + info.Content = append(info.Content, m.Scopes.ToRawInfo()) } - // &{Name:scopes Type:Oauth2Scopes StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} // always include this required field. - info = append(info, yaml.MapItem{Key: "authorizationUrl", Value: m.AuthorizationUrl}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("authorizationUrl")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.AuthorizationUrl)) if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Oauth2PasswordSecurity suitable for JSON or YAML export. -func (m *Oauth2PasswordSecurity) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Oauth2PasswordSecurity) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) // always include this required field. - info = append(info, yaml.MapItem{Key: "flow", Value: m.Flow}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("flow")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Flow)) if m.Scopes != nil { - info = append(info, yaml.MapItem{Key: "scopes", Value: m.Scopes.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("scopes")) + info.Content = append(info.Content, m.Scopes.ToRawInfo()) } - // &{Name:scopes Type:Oauth2Scopes StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} // always include this required field. - info = append(info, yaml.MapItem{Key: "tokenUrl", Value: m.TokenUrl}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("tokenUrl")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.TokenUrl)) if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Oauth2Scopes suitable for JSON or YAML export. -func (m *Oauth2Scopes) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Oauth2Scopes) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } @@ -8012,69 +7861,77 @@ func (m *Oauth2Scopes) ToRawInfo() interface{} { } // ToRawInfo returns a description of Operation suitable for JSON or YAML export. -func (m *Operation) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Operation) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if len(m.Tags) != 0 { - info = append(info, yaml.MapItem{Key: "tags", Value: m.Tags}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("tags")) + info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Tags)) } if m.Summary != "" { - info = append(info, yaml.MapItem{Key: "summary", Value: m.Summary}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("summary")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Summary)) } if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.ExternalDocs != nil { - info = append(info, yaml.MapItem{Key: "externalDocs", Value: m.ExternalDocs.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("externalDocs")) + info.Content = append(info.Content, m.ExternalDocs.ToRawInfo()) } - // &{Name:externalDocs Type:ExternalDocs StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.OperationId != "" { - info = append(info, yaml.MapItem{Key: "operationId", Value: m.OperationId}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("operationId")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.OperationId)) } if len(m.Produces) != 0 { - info = append(info, yaml.MapItem{Key: "produces", Value: m.Produces}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("produces")) + info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Produces)) } if len(m.Consumes) != 0 { - info = append(info, yaml.MapItem{Key: "consumes", Value: m.Consumes}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("consumes")) + info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Consumes)) } if len(m.Parameters) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Parameters { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "parameters", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("parameters")) + info.Content = append(info.Content, items) } - // &{Name:parameters Type:ParametersItem StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:The parameters needed to send a valid API call.} // always include this required field. - info = append(info, yaml.MapItem{Key: "responses", Value: m.Responses.ToRawInfo()}) - // &{Name:responses Type:Responses StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} + info.Content = append(info.Content, compiler.NewScalarNodeForString("responses")) + info.Content = append(info.Content, m.Responses.ToRawInfo()) if len(m.Schemes) != 0 { - info = append(info, yaml.MapItem{Key: "schemes", Value: m.Schemes}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("schemes")) + info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Schemes)) } if m.Deprecated != false { - info = append(info, yaml.MapItem{Key: "deprecated", Value: m.Deprecated}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("deprecated")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Deprecated)) } if len(m.Security) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Security { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "security", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("security")) + info.Content = append(info.Content, items) } - // &{Name:security Type:SecurityRequirement StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Parameter suitable for JSON or YAML export. -func (m *Parameter) ToRawInfo() interface{} { +func (m *Parameter) ToRawInfo() *yaml.Node { // ONE OF WRAPPER // Parameter // {Name:bodyParameter Type:BodyParameter StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} @@ -8091,22 +7948,22 @@ func (m *Parameter) ToRawInfo() interface{} { } // ToRawInfo returns a description of ParameterDefinitions suitable for JSON or YAML export. -func (m *ParameterDefinitions) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *ParameterDefinitions) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.AdditionalProperties != nil { for _, item := range m.AdditionalProperties { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:additionalProperties Type:NamedParameter StringEnumValues:[] MapType:Parameter Repeated:true Pattern: Implicit:true Description:} return info } // ToRawInfo returns a description of ParametersItem suitable for JSON or YAML export. -func (m *ParametersItem) ToRawInfo() interface{} { +func (m *ParametersItem) ToRawInfo() *yaml.Node { // ONE OF WRAPPER // ParametersItem // {Name:parameter Type:Parameter StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} @@ -8123,386 +7980,439 @@ func (m *ParametersItem) ToRawInfo() interface{} { } // ToRawInfo returns a description of PathItem suitable for JSON or YAML export. -func (m *PathItem) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *PathItem) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.XRef != "" { - info = append(info, yaml.MapItem{Key: "$ref", Value: m.XRef}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("$ref")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.XRef)) } if m.Get != nil { - info = append(info, yaml.MapItem{Key: "get", Value: m.Get.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("get")) + info.Content = append(info.Content, m.Get.ToRawInfo()) } - // &{Name:get Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Put != nil { - info = append(info, yaml.MapItem{Key: "put", Value: m.Put.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("put")) + info.Content = append(info.Content, m.Put.ToRawInfo()) } - // &{Name:put Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Post != nil { - info = append(info, yaml.MapItem{Key: "post", Value: m.Post.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("post")) + info.Content = append(info.Content, m.Post.ToRawInfo()) } - // &{Name:post Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Delete != nil { - info = append(info, yaml.MapItem{Key: "delete", Value: m.Delete.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("delete")) + info.Content = append(info.Content, m.Delete.ToRawInfo()) } - // &{Name:delete Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Options != nil { - info = append(info, yaml.MapItem{Key: "options", Value: m.Options.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("options")) + info.Content = append(info.Content, m.Options.ToRawInfo()) } - // &{Name:options Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Head != nil { - info = append(info, yaml.MapItem{Key: "head", Value: m.Head.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("head")) + info.Content = append(info.Content, m.Head.ToRawInfo()) } - // &{Name:head Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Patch != nil { - info = append(info, yaml.MapItem{Key: "patch", Value: m.Patch.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("patch")) + info.Content = append(info.Content, m.Patch.ToRawInfo()) } - // &{Name:patch Type:Operation StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if len(m.Parameters) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Parameters { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "parameters", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("parameters")) + info.Content = append(info.Content, items) } - // &{Name:parameters Type:ParametersItem StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:The parameters needed to send a valid API call.} if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of PathParameterSubSchema suitable for JSON or YAML export. -func (m *PathParameterSubSchema) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *PathParameterSubSchema) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "required", Value: m.Required}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("required")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Required)) if m.In != "" { - info = append(info, yaml.MapItem{Key: "in", Value: m.In}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("in")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.In)) } if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } if m.Type != "" { - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) } if m.Format != "" { - info = append(info, yaml.MapItem{Key: "format", Value: m.Format}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("format")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Format)) } if m.Items != nil { - info = append(info, yaml.MapItem{Key: "items", Value: m.Items.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("items")) + info.Content = append(info.Content, m.Items.ToRawInfo()) } - // &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.CollectionFormat != "" { - info = append(info, yaml.MapItem{Key: "collectionFormat", Value: m.CollectionFormat}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("collectionFormat")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.CollectionFormat)) } if m.Default != nil { - info = append(info, yaml.MapItem{Key: "default", Value: m.Default.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("default")) + info.Content = append(info.Content, m.Default.ToRawInfo()) } - // &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Maximum != 0.0 { - info = append(info, yaml.MapItem{Key: "maximum", Value: m.Maximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } if m.ExclusiveMaximum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMaximum", Value: m.ExclusiveMaximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } if m.Minimum != 0.0 { - info = append(info, yaml.MapItem{Key: "minimum", Value: m.Minimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } if m.ExclusiveMinimum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMinimum", Value: m.ExclusiveMinimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } if m.MaxLength != 0 { - info = append(info, yaml.MapItem{Key: "maxLength", Value: m.MaxLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxLength)) } if m.MinLength != 0 { - info = append(info, yaml.MapItem{Key: "minLength", Value: m.MinLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinLength)) } if m.Pattern != "" { - info = append(info, yaml.MapItem{Key: "pattern", Value: m.Pattern}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("pattern")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Pattern)) } if m.MaxItems != 0 { - info = append(info, yaml.MapItem{Key: "maxItems", Value: m.MaxItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxItems)) } if m.MinItems != 0 { - info = append(info, yaml.MapItem{Key: "minItems", Value: m.MinItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } if m.UniqueItems != false { - info = append(info, yaml.MapItem{Key: "uniqueItems", Value: m.UniqueItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } if len(m.Enum) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Enum { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "enum", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("enum")) + info.Content = append(info.Content, items) } - // &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} if m.MultipleOf != 0.0 { - info = append(info, yaml.MapItem{Key: "multipleOf", Value: m.MultipleOf}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("multipleOf")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.MultipleOf)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Paths suitable for JSON or YAML export. -func (m *Paths) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Paths) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} if m.Path != nil { for _, item := range m.Path { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:Path Type:NamedPathItem StringEnumValues:[] MapType:PathItem Repeated:true Pattern:^/ Implicit:true Description:} return info } // ToRawInfo returns a description of PrimitivesItems suitable for JSON or YAML export. -func (m *PrimitivesItems) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *PrimitivesItems) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Type != "" { - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) } if m.Format != "" { - info = append(info, yaml.MapItem{Key: "format", Value: m.Format}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("format")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Format)) } if m.Items != nil { - info = append(info, yaml.MapItem{Key: "items", Value: m.Items.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("items")) + info.Content = append(info.Content, m.Items.ToRawInfo()) } - // &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.CollectionFormat != "" { - info = append(info, yaml.MapItem{Key: "collectionFormat", Value: m.CollectionFormat}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("collectionFormat")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.CollectionFormat)) } if m.Default != nil { - info = append(info, yaml.MapItem{Key: "default", Value: m.Default.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("default")) + info.Content = append(info.Content, m.Default.ToRawInfo()) } - // &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Maximum != 0.0 { - info = append(info, yaml.MapItem{Key: "maximum", Value: m.Maximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } if m.ExclusiveMaximum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMaximum", Value: m.ExclusiveMaximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } if m.Minimum != 0.0 { - info = append(info, yaml.MapItem{Key: "minimum", Value: m.Minimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } if m.ExclusiveMinimum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMinimum", Value: m.ExclusiveMinimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } if m.MaxLength != 0 { - info = append(info, yaml.MapItem{Key: "maxLength", Value: m.MaxLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxLength)) } if m.MinLength != 0 { - info = append(info, yaml.MapItem{Key: "minLength", Value: m.MinLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinLength)) } if m.Pattern != "" { - info = append(info, yaml.MapItem{Key: "pattern", Value: m.Pattern}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("pattern")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Pattern)) } if m.MaxItems != 0 { - info = append(info, yaml.MapItem{Key: "maxItems", Value: m.MaxItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxItems)) } if m.MinItems != 0 { - info = append(info, yaml.MapItem{Key: "minItems", Value: m.MinItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } if m.UniqueItems != false { - info = append(info, yaml.MapItem{Key: "uniqueItems", Value: m.UniqueItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } if len(m.Enum) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Enum { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "enum", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("enum")) + info.Content = append(info.Content, items) } - // &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} if m.MultipleOf != 0.0 { - info = append(info, yaml.MapItem{Key: "multipleOf", Value: m.MultipleOf}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("multipleOf")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.MultipleOf)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Properties suitable for JSON or YAML export. -func (m *Properties) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Properties) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.AdditionalProperties != nil { for _, item := range m.AdditionalProperties { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:additionalProperties Type:NamedSchema StringEnumValues:[] MapType:Schema Repeated:true Pattern: Implicit:true Description:} return info } // ToRawInfo returns a description of QueryParameterSubSchema suitable for JSON or YAML export. -func (m *QueryParameterSubSchema) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *QueryParameterSubSchema) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Required != false { - info = append(info, yaml.MapItem{Key: "required", Value: m.Required}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("required")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Required)) } if m.In != "" { - info = append(info, yaml.MapItem{Key: "in", Value: m.In}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("in")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.In)) } if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } if m.AllowEmptyValue != false { - info = append(info, yaml.MapItem{Key: "allowEmptyValue", Value: m.AllowEmptyValue}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("allowEmptyValue")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.AllowEmptyValue)) } if m.Type != "" { - info = append(info, yaml.MapItem{Key: "type", Value: m.Type}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type)) } if m.Format != "" { - info = append(info, yaml.MapItem{Key: "format", Value: m.Format}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("format")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Format)) } if m.Items != nil { - info = append(info, yaml.MapItem{Key: "items", Value: m.Items.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("items")) + info.Content = append(info.Content, m.Items.ToRawInfo()) } - // &{Name:items Type:PrimitivesItems StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.CollectionFormat != "" { - info = append(info, yaml.MapItem{Key: "collectionFormat", Value: m.CollectionFormat}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("collectionFormat")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.CollectionFormat)) } if m.Default != nil { - info = append(info, yaml.MapItem{Key: "default", Value: m.Default.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("default")) + info.Content = append(info.Content, m.Default.ToRawInfo()) } - // &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Maximum != 0.0 { - info = append(info, yaml.MapItem{Key: "maximum", Value: m.Maximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } if m.ExclusiveMaximum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMaximum", Value: m.ExclusiveMaximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } if m.Minimum != 0.0 { - info = append(info, yaml.MapItem{Key: "minimum", Value: m.Minimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } if m.ExclusiveMinimum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMinimum", Value: m.ExclusiveMinimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } if m.MaxLength != 0 { - info = append(info, yaml.MapItem{Key: "maxLength", Value: m.MaxLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxLength)) } if m.MinLength != 0 { - info = append(info, yaml.MapItem{Key: "minLength", Value: m.MinLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinLength)) } if m.Pattern != "" { - info = append(info, yaml.MapItem{Key: "pattern", Value: m.Pattern}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("pattern")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Pattern)) } if m.MaxItems != 0 { - info = append(info, yaml.MapItem{Key: "maxItems", Value: m.MaxItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxItems)) } if m.MinItems != 0 { - info = append(info, yaml.MapItem{Key: "minItems", Value: m.MinItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } if m.UniqueItems != false { - info = append(info, yaml.MapItem{Key: "uniqueItems", Value: m.UniqueItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } if len(m.Enum) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Enum { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "enum", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("enum")) + info.Content = append(info.Content, items) } - // &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} if m.MultipleOf != 0.0 { - info = append(info, yaml.MapItem{Key: "multipleOf", Value: m.MultipleOf}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("multipleOf")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.MultipleOf)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Response suitable for JSON or YAML export. -func (m *Response) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Response) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) if m.Schema != nil { - info = append(info, yaml.MapItem{Key: "schema", Value: m.Schema.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("schema")) + info.Content = append(info.Content, m.Schema.ToRawInfo()) } - // &{Name:schema Type:SchemaItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Headers != nil { - info = append(info, yaml.MapItem{Key: "headers", Value: m.Headers.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("headers")) + info.Content = append(info.Content, m.Headers.ToRawInfo()) } - // &{Name:headers Type:Headers StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Examples != nil { - info = append(info, yaml.MapItem{Key: "examples", Value: m.Examples.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("examples")) + info.Content = append(info.Content, m.Examples.ToRawInfo()) } - // &{Name:examples Type:Examples StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of ResponseDefinitions suitable for JSON or YAML export. -func (m *ResponseDefinitions) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *ResponseDefinitions) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.AdditionalProperties != nil { for _, item := range m.AdditionalProperties { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:additionalProperties Type:NamedResponse StringEnumValues:[] MapType:Response Repeated:true Pattern: Implicit:true Description:} return info } // ToRawInfo returns a description of ResponseValue suitable for JSON or YAML export. -func (m *ResponseValue) ToRawInfo() interface{} { +func (m *ResponseValue) ToRawInfo() *yaml.Node { // ONE OF WRAPPER // ResponseValue // {Name:response Type:Response StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} @@ -8519,159 +8429,183 @@ func (m *ResponseValue) ToRawInfo() interface{} { } // ToRawInfo returns a description of Responses suitable for JSON or YAML export. -func (m *Responses) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Responses) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.ResponseCode != nil { for _, item := range m.ResponseCode { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:ResponseCode Type:NamedResponseValue StringEnumValues:[] MapType:ResponseValue Repeated:true Pattern:^([0-9]{3})$|^(default)$ Implicit:true Description:} if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of Schema suitable for JSON or YAML export. -func (m *Schema) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Schema) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.XRef != "" { - info = append(info, yaml.MapItem{Key: "$ref", Value: m.XRef}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("$ref")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.XRef)) } if m.Format != "" { - info = append(info, yaml.MapItem{Key: "format", Value: m.Format}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("format")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Format)) } if m.Title != "" { - info = append(info, yaml.MapItem{Key: "title", Value: m.Title}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("title")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Title)) } if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.Default != nil { - info = append(info, yaml.MapItem{Key: "default", Value: m.Default.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("default")) + info.Content = append(info.Content, m.Default.ToRawInfo()) } - // &{Name:default Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.MultipleOf != 0.0 { - info = append(info, yaml.MapItem{Key: "multipleOf", Value: m.MultipleOf}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("multipleOf")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.MultipleOf)) } if m.Maximum != 0.0 { - info = append(info, yaml.MapItem{Key: "maximum", Value: m.Maximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Maximum)) } if m.ExclusiveMaximum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMaximum", Value: m.ExclusiveMaximum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMaximum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMaximum)) } if m.Minimum != 0.0 { - info = append(info, yaml.MapItem{Key: "minimum", Value: m.Minimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForFloat(m.Minimum)) } if m.ExclusiveMinimum != false { - info = append(info, yaml.MapItem{Key: "exclusiveMinimum", Value: m.ExclusiveMinimum}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("exclusiveMinimum")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ExclusiveMinimum)) } if m.MaxLength != 0 { - info = append(info, yaml.MapItem{Key: "maxLength", Value: m.MaxLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxLength)) } if m.MinLength != 0 { - info = append(info, yaml.MapItem{Key: "minLength", Value: m.MinLength}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minLength")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinLength)) } if m.Pattern != "" { - info = append(info, yaml.MapItem{Key: "pattern", Value: m.Pattern}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("pattern")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Pattern)) } if m.MaxItems != 0 { - info = append(info, yaml.MapItem{Key: "maxItems", Value: m.MaxItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxItems)) } if m.MinItems != 0 { - info = append(info, yaml.MapItem{Key: "minItems", Value: m.MinItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinItems)) } if m.UniqueItems != false { - info = append(info, yaml.MapItem{Key: "uniqueItems", Value: m.UniqueItems}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("uniqueItems")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.UniqueItems)) } if m.MaxProperties != 0 { - info = append(info, yaml.MapItem{Key: "maxProperties", Value: m.MaxProperties}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("maxProperties")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MaxProperties)) } if m.MinProperties != 0 { - info = append(info, yaml.MapItem{Key: "minProperties", Value: m.MinProperties}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("minProperties")) + info.Content = append(info.Content, compiler.NewScalarNodeForInt(m.MinProperties)) } if len(m.Required) != 0 { - info = append(info, yaml.MapItem{Key: "required", Value: m.Required}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("required")) + info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Required)) } if len(m.Enum) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Enum { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "enum", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("enum")) + info.Content = append(info.Content, items) } - // &{Name:enum Type:Any StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} if m.AdditionalProperties != nil { - info = append(info, yaml.MapItem{Key: "additionalProperties", Value: m.AdditionalProperties.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("additionalProperties")) + info.Content = append(info.Content, m.AdditionalProperties.ToRawInfo()) } - // &{Name:additionalProperties Type:AdditionalPropertiesItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Type != nil { if len(m.Type.Value) == 1 { - info = append(info, yaml.MapItem{Key: "type", Value: m.Type.Value[0]}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Type.Value[0])) } else { - info = append(info, yaml.MapItem{Key: "type", Value: m.Type.Value}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("type")) + info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Type.Value)) } } - // &{Name:type Type:TypeItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Items != nil { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.Items.Schema { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) + } + if len(items.Content) == 1 { + items = items.Content[0] } - info = append(info, yaml.MapItem{Key: "items", Value: items[0]}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("items")) + info.Content = append(info.Content, items) } - // &{Name:items Type:ItemsItem StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if len(m.AllOf) != 0 { - items := make([]interface{}, 0) + items := compiler.NewSequenceNode() for _, item := range m.AllOf { - items = append(items, item.ToRawInfo()) + items.Content = append(items.Content, item.ToRawInfo()) } - info = append(info, yaml.MapItem{Key: "allOf", Value: items}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("allOf")) + info.Content = append(info.Content, items) } - // &{Name:allOf Type:Schema StringEnumValues:[] MapType: Repeated:true Pattern: Implicit:false Description:} if m.Properties != nil { - info = append(info, yaml.MapItem{Key: "properties", Value: m.Properties.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("properties")) + info.Content = append(info.Content, m.Properties.ToRawInfo()) } - // &{Name:properties Type:Properties StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Discriminator != "" { - info = append(info, yaml.MapItem{Key: "discriminator", Value: m.Discriminator}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("discriminator")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Discriminator)) } if m.ReadOnly != false { - info = append(info, yaml.MapItem{Key: "readOnly", Value: m.ReadOnly}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("readOnly")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.ReadOnly)) } if m.Xml != nil { - info = append(info, yaml.MapItem{Key: "xml", Value: m.Xml.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("xml")) + info.Content = append(info.Content, m.Xml.ToRawInfo()) } - // &{Name:xml Type:Xml StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.ExternalDocs != nil { - info = append(info, yaml.MapItem{Key: "externalDocs", Value: m.ExternalDocs.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("externalDocs")) + info.Content = append(info.Content, m.ExternalDocs.ToRawInfo()) } - // &{Name:externalDocs Type:ExternalDocs StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.Example != nil { - info = append(info, yaml.MapItem{Key: "example", Value: m.Example.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("example")) + info.Content = append(info.Content, m.Example.ToRawInfo()) } - // &{Name:example Type:Any StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of SchemaItem suitable for JSON or YAML export. -func (m *SchemaItem) ToRawInfo() interface{} { +func (m *SchemaItem) ToRawInfo() *yaml.Node { // ONE OF WRAPPER // SchemaItem // {Name:schema Type:Schema StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} @@ -8688,22 +8622,22 @@ func (m *SchemaItem) ToRawInfo() interface{} { } // ToRawInfo returns a description of SecurityDefinitions suitable for JSON or YAML export. -func (m *SecurityDefinitions) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *SecurityDefinitions) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.AdditionalProperties != nil { for _, item := range m.AdditionalProperties { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:additionalProperties Type:NamedSecurityDefinitionsItem StringEnumValues:[] MapType:SecurityDefinitionsItem Repeated:true Pattern: Implicit:true Description:} return info } // ToRawInfo returns a description of SecurityDefinitionsItem suitable for JSON or YAML export. -func (m *SecurityDefinitionsItem) ToRawInfo() interface{} { +func (m *SecurityDefinitionsItem) ToRawInfo() *yaml.Node { // ONE OF WRAPPER // SecurityDefinitionsItem // {Name:basicAuthenticationSecurity Type:BasicAuthenticationSecurity StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} @@ -8740,103 +8674,111 @@ func (m *SecurityDefinitionsItem) ToRawInfo() interface{} { } // ToRawInfo returns a description of SecurityRequirement suitable for JSON or YAML export. -func (m *SecurityRequirement) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *SecurityRequirement) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.AdditionalProperties != nil { for _, item := range m.AdditionalProperties { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:additionalProperties Type:NamedStringArray StringEnumValues:[] MapType:StringArray Repeated:true Pattern: Implicit:true Description:} return info } // ToRawInfo returns a description of StringArray suitable for JSON or YAML export. -func (m *StringArray) ToRawInfo() interface{} { - return m.Value +func (m *StringArray) ToRawInfo() *yaml.Node { + return compiler.NewSequenceNodeForStringArray(m.Value) } // ToRawInfo returns a description of Tag suitable for JSON or YAML export. -func (m *Tag) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Tag) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } // always include this required field. - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) if m.Description != "" { - info = append(info, yaml.MapItem{Key: "description", Value: m.Description}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("description")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Description)) } if m.ExternalDocs != nil { - info = append(info, yaml.MapItem{Key: "externalDocs", Value: m.ExternalDocs.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("externalDocs")) + info.Content = append(info.Content, m.ExternalDocs.ToRawInfo()) } - // &{Name:externalDocs Type:ExternalDocs StringEnumValues:[] MapType: Repeated:false Pattern: Implicit:false Description:} if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } // ToRawInfo returns a description of TypeItem suitable for JSON or YAML export. -func (m *TypeItem) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *TypeItem) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if len(m.Value) != 0 { - info = append(info, yaml.MapItem{Key: "value", Value: m.Value}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("value")) + info.Content = append(info.Content, compiler.NewSequenceNodeForStringArray(m.Value)) } return info } // ToRawInfo returns a description of VendorExtension suitable for JSON or YAML export. -func (m *VendorExtension) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *VendorExtension) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.AdditionalProperties != nil { for _, item := range m.AdditionalProperties { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:additionalProperties Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern: Implicit:true Description:} return info } // ToRawInfo returns a description of Xml suitable for JSON or YAML export. -func (m *Xml) ToRawInfo() interface{} { - info := yaml.MapSlice{} +func (m *Xml) ToRawInfo() *yaml.Node { + info := compiler.NewMappingNode() if m == nil { return info } if m.Name != "" { - info = append(info, yaml.MapItem{Key: "name", Value: m.Name}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("name")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Name)) } if m.Namespace != "" { - info = append(info, yaml.MapItem{Key: "namespace", Value: m.Namespace}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("namespace")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Namespace)) } if m.Prefix != "" { - info = append(info, yaml.MapItem{Key: "prefix", Value: m.Prefix}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("prefix")) + info.Content = append(info.Content, compiler.NewScalarNodeForString(m.Prefix)) } if m.Attribute != false { - info = append(info, yaml.MapItem{Key: "attribute", Value: m.Attribute}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("attribute")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Attribute)) } if m.Wrapped != false { - info = append(info, yaml.MapItem{Key: "wrapped", Value: m.Wrapped}) + info.Content = append(info.Content, compiler.NewScalarNodeForString("wrapped")) + info.Content = append(info.Content, compiler.NewScalarNodeForBool(m.Wrapped)) } if m.VendorExtension != nil { for _, item := range m.VendorExtension { - info = append(info, yaml.MapItem{Key: item.Name, Value: item.Value.ToRawInfo()}) + info.Content = append(info.Content, compiler.NewScalarNodeForString(item.Name)) + info.Content = append(info.Content, item.Value.ToRawInfo()) } } - // &{Name:VendorExtension Type:NamedAny StringEnumValues:[] MapType:Any Repeated:true Pattern:^x- Implicit:true Description:} return info } diff --git a/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go b/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go new file mode 100644 index 00000000..559ddea1 --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.pb.go @@ -0,0 +1,7347 @@ +// Copyright 2020 Google LLC. All Rights Reserved. +// +// 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. + +// THIS FILE IS AUTOMATICALLY GENERATED. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.23.0 +// protoc v3.12.3 +// source: openapiv2/OpenAPIv2.proto + +package openapi_v2 + +import ( + proto "github.com/golang/protobuf/proto" + any "github.com/golang/protobuf/ptypes/any" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +type AdditionalPropertiesItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Oneof: + // *AdditionalPropertiesItem_Schema + // *AdditionalPropertiesItem_Boolean + Oneof isAdditionalPropertiesItem_Oneof `protobuf_oneof:"oneof"` +} + +func (x *AdditionalPropertiesItem) Reset() { + *x = AdditionalPropertiesItem{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AdditionalPropertiesItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdditionalPropertiesItem) ProtoMessage() {} + +func (x *AdditionalPropertiesItem) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AdditionalPropertiesItem.ProtoReflect.Descriptor instead. +func (*AdditionalPropertiesItem) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{0} +} + +func (m *AdditionalPropertiesItem) GetOneof() isAdditionalPropertiesItem_Oneof { + if m != nil { + return m.Oneof + } + return nil +} + +func (x *AdditionalPropertiesItem) GetSchema() *Schema { + if x, ok := x.GetOneof().(*AdditionalPropertiesItem_Schema); ok { + return x.Schema + } + return nil +} + +func (x *AdditionalPropertiesItem) GetBoolean() bool { + if x, ok := x.GetOneof().(*AdditionalPropertiesItem_Boolean); ok { + return x.Boolean + } + return false +} + +type isAdditionalPropertiesItem_Oneof interface { + isAdditionalPropertiesItem_Oneof() +} + +type AdditionalPropertiesItem_Schema struct { + Schema *Schema `protobuf:"bytes,1,opt,name=schema,proto3,oneof"` +} + +type AdditionalPropertiesItem_Boolean struct { + Boolean bool `protobuf:"varint,2,opt,name=boolean,proto3,oneof"` +} + +func (*AdditionalPropertiesItem_Schema) isAdditionalPropertiesItem_Oneof() {} + +func (*AdditionalPropertiesItem_Boolean) isAdditionalPropertiesItem_Oneof() {} + +type Any struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value *any.Any `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + Yaml string `protobuf:"bytes,2,opt,name=yaml,proto3" json:"yaml,omitempty"` +} + +func (x *Any) Reset() { + *x = Any{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Any) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Any) ProtoMessage() {} + +func (x *Any) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Any.ProtoReflect.Descriptor instead. +func (*Any) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{1} +} + +func (x *Any) GetValue() *any.Any { + if x != nil { + return x.Value + } + return nil +} + +func (x *Any) GetYaml() string { + if x != nil { + return x.Yaml + } + return "" +} + +type ApiKeySecurity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + In string `protobuf:"bytes,3,opt,name=in,proto3" json:"in,omitempty"` + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,5,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *ApiKeySecurity) Reset() { + *x = ApiKeySecurity{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApiKeySecurity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApiKeySecurity) ProtoMessage() {} + +func (x *ApiKeySecurity) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApiKeySecurity.ProtoReflect.Descriptor instead. +func (*ApiKeySecurity) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{2} +} + +func (x *ApiKeySecurity) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *ApiKeySecurity) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ApiKeySecurity) GetIn() string { + if x != nil { + return x.In + } + return "" +} + +func (x *ApiKeySecurity) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *ApiKeySecurity) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type BasicAuthenticationSecurity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,3,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *BasicAuthenticationSecurity) Reset() { + *x = BasicAuthenticationSecurity{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BasicAuthenticationSecurity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BasicAuthenticationSecurity) ProtoMessage() {} + +func (x *BasicAuthenticationSecurity) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BasicAuthenticationSecurity.ProtoReflect.Descriptor instead. +func (*BasicAuthenticationSecurity) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{3} +} + +func (x *BasicAuthenticationSecurity) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *BasicAuthenticationSecurity) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *BasicAuthenticationSecurity) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type BodyParameter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed. + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + // The name of the parameter. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Determines the location of the parameter. + In string `protobuf:"bytes,3,opt,name=in,proto3" json:"in,omitempty"` + // Determines whether or not this parameter is required or optional. + Required bool `protobuf:"varint,4,opt,name=required,proto3" json:"required,omitempty"` + Schema *Schema `protobuf:"bytes,5,opt,name=schema,proto3" json:"schema,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,6,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *BodyParameter) Reset() { + *x = BodyParameter{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BodyParameter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BodyParameter) ProtoMessage() {} + +func (x *BodyParameter) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BodyParameter.ProtoReflect.Descriptor instead. +func (*BodyParameter) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{4} +} + +func (x *BodyParameter) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *BodyParameter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *BodyParameter) GetIn() string { + if x != nil { + return x.In + } + return "" +} + +func (x *BodyParameter) GetRequired() bool { + if x != nil { + return x.Required + } + return false +} + +func (x *BodyParameter) GetSchema() *Schema { + if x != nil { + return x.Schema + } + return nil +} + +func (x *BodyParameter) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +// Contact information for the owners of the API. +type Contact struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The identifying name of the contact person/organization. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // The URL pointing to the contact information. + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + // The email address of the contact person/organization. + Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,4,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Contact) Reset() { + *x = Contact{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Contact) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Contact) ProtoMessage() {} + +func (x *Contact) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Contact.ProtoReflect.Descriptor instead. +func (*Contact) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{5} +} + +func (x *Contact) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Contact) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *Contact) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *Contact) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type Default struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdditionalProperties []*NamedAny `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *Default) Reset() { + *x = Default{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Default) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Default) ProtoMessage() {} + +func (x *Default) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Default.ProtoReflect.Descriptor instead. +func (*Default) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{6} +} + +func (x *Default) GetAdditionalProperties() []*NamedAny { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +// One or more JSON objects describing the schemas being consumed and produced by the API. +type Definitions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdditionalProperties []*NamedSchema `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *Definitions) Reset() { + *x = Definitions{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Definitions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Definitions) ProtoMessage() {} + +func (x *Definitions) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Definitions.ProtoReflect.Descriptor instead. +func (*Definitions) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{7} +} + +func (x *Definitions) GetAdditionalProperties() []*NamedSchema { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +type Document struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Swagger version of this document. + Swagger string `protobuf:"bytes,1,opt,name=swagger,proto3" json:"swagger,omitempty"` + Info *Info `protobuf:"bytes,2,opt,name=info,proto3" json:"info,omitempty"` + // The host (name or ip) of the API. Example: 'swagger.io' + Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` + // The base path to the API. Example: '/api'. + BasePath string `protobuf:"bytes,4,opt,name=base_path,json=basePath,proto3" json:"base_path,omitempty"` + // The transfer protocol of the API. + Schemes []string `protobuf:"bytes,5,rep,name=schemes,proto3" json:"schemes,omitempty"` + // A list of MIME types accepted by the API. + Consumes []string `protobuf:"bytes,6,rep,name=consumes,proto3" json:"consumes,omitempty"` + // A list of MIME types the API can produce. + Produces []string `protobuf:"bytes,7,rep,name=produces,proto3" json:"produces,omitempty"` + Paths *Paths `protobuf:"bytes,8,opt,name=paths,proto3" json:"paths,omitempty"` + Definitions *Definitions `protobuf:"bytes,9,opt,name=definitions,proto3" json:"definitions,omitempty"` + Parameters *ParameterDefinitions `protobuf:"bytes,10,opt,name=parameters,proto3" json:"parameters,omitempty"` + Responses *ResponseDefinitions `protobuf:"bytes,11,opt,name=responses,proto3" json:"responses,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + SecurityDefinitions *SecurityDefinitions `protobuf:"bytes,13,opt,name=security_definitions,json=securityDefinitions,proto3" json:"security_definitions,omitempty"` + Tags []*Tag `protobuf:"bytes,14,rep,name=tags,proto3" json:"tags,omitempty"` + ExternalDocs *ExternalDocs `protobuf:"bytes,15,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,16,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Document) Reset() { + *x = Document{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Document) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Document) ProtoMessage() {} + +func (x *Document) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Document.ProtoReflect.Descriptor instead. +func (*Document) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{8} +} + +func (x *Document) GetSwagger() string { + if x != nil { + return x.Swagger + } + return "" +} + +func (x *Document) GetInfo() *Info { + if x != nil { + return x.Info + } + return nil +} + +func (x *Document) GetHost() string { + if x != nil { + return x.Host + } + return "" +} + +func (x *Document) GetBasePath() string { + if x != nil { + return x.BasePath + } + return "" +} + +func (x *Document) GetSchemes() []string { + if x != nil { + return x.Schemes + } + return nil +} + +func (x *Document) GetConsumes() []string { + if x != nil { + return x.Consumes + } + return nil +} + +func (x *Document) GetProduces() []string { + if x != nil { + return x.Produces + } + return nil +} + +func (x *Document) GetPaths() *Paths { + if x != nil { + return x.Paths + } + return nil +} + +func (x *Document) GetDefinitions() *Definitions { + if x != nil { + return x.Definitions + } + return nil +} + +func (x *Document) GetParameters() *ParameterDefinitions { + if x != nil { + return x.Parameters + } + return nil +} + +func (x *Document) GetResponses() *ResponseDefinitions { + if x != nil { + return x.Responses + } + return nil +} + +func (x *Document) GetSecurity() []*SecurityRequirement { + if x != nil { + return x.Security + } + return nil +} + +func (x *Document) GetSecurityDefinitions() *SecurityDefinitions { + if x != nil { + return x.SecurityDefinitions + } + return nil +} + +func (x *Document) GetTags() []*Tag { + if x != nil { + return x.Tags + } + return nil +} + +func (x *Document) GetExternalDocs() *ExternalDocs { + if x != nil { + return x.ExternalDocs + } + return nil +} + +func (x *Document) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type Examples struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdditionalProperties []*NamedAny `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *Examples) Reset() { + *x = Examples{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Examples) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Examples) ProtoMessage() {} + +func (x *Examples) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Examples.ProtoReflect.Descriptor instead. +func (*Examples) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{9} +} + +func (x *Examples) GetAdditionalProperties() []*NamedAny { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +// information about external documentation +type ExternalDocs struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,3,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *ExternalDocs) Reset() { + *x = ExternalDocs{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExternalDocs) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExternalDocs) ProtoMessage() {} + +func (x *ExternalDocs) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExternalDocs.ProtoReflect.Descriptor instead. +func (*ExternalDocs) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{10} +} + +func (x *ExternalDocs) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *ExternalDocs) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *ExternalDocs) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +// A deterministic version of a JSON Schema object. +type FileSchema struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Format string `protobuf:"bytes,1,opt,name=format,proto3" json:"format,omitempty"` + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + Default *Any `protobuf:"bytes,4,opt,name=default,proto3" json:"default,omitempty"` + Required []string `protobuf:"bytes,5,rep,name=required,proto3" json:"required,omitempty"` + Type string `protobuf:"bytes,6,opt,name=type,proto3" json:"type,omitempty"` + ReadOnly bool `protobuf:"varint,7,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + ExternalDocs *ExternalDocs `protobuf:"bytes,8,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + Example *Any `protobuf:"bytes,9,opt,name=example,proto3" json:"example,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,10,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *FileSchema) Reset() { + *x = FileSchema{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FileSchema) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileSchema) ProtoMessage() {} + +func (x *FileSchema) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileSchema.ProtoReflect.Descriptor instead. +func (*FileSchema) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{11} +} + +func (x *FileSchema) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *FileSchema) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *FileSchema) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *FileSchema) GetDefault() *Any { + if x != nil { + return x.Default + } + return nil +} + +func (x *FileSchema) GetRequired() []string { + if x != nil { + return x.Required + } + return nil +} + +func (x *FileSchema) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *FileSchema) GetReadOnly() bool { + if x != nil { + return x.ReadOnly + } + return false +} + +func (x *FileSchema) GetExternalDocs() *ExternalDocs { + if x != nil { + return x.ExternalDocs + } + return nil +} + +func (x *FileSchema) GetExample() *Any { + if x != nil { + return x.Example + } + return nil +} + +func (x *FileSchema) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type FormDataParameterSubSchema struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Determines whether or not this parameter is required or optional. + Required bool `protobuf:"varint,1,opt,name=required,proto3" json:"required,omitempty"` + // Determines the location of the parameter. + In string `protobuf:"bytes,2,opt,name=in,proto3" json:"in,omitempty"` + // A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The name of the parameter. + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + // allows sending a parameter by name only or with an empty value. + AllowEmptyValue bool `protobuf:"varint,5,opt,name=allow_empty_value,json=allowEmptyValue,proto3" json:"allow_empty_value,omitempty"` + Type string `protobuf:"bytes,6,opt,name=type,proto3" json:"type,omitempty"` + Format string `protobuf:"bytes,7,opt,name=format,proto3" json:"format,omitempty"` + Items *PrimitivesItems `protobuf:"bytes,8,opt,name=items,proto3" json:"items,omitempty"` + CollectionFormat string `protobuf:"bytes,9,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` + Default *Any `protobuf:"bytes,10,opt,name=default,proto3" json:"default,omitempty"` + Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + Minimum float64 `protobuf:"fixed64,13,opt,name=minimum,proto3" json:"minimum,omitempty"` + ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` + MaxLength int64 `protobuf:"varint,15,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` + MinLength int64 `protobuf:"varint,16,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + Pattern string `protobuf:"bytes,17,opt,name=pattern,proto3" json:"pattern,omitempty"` + MaxItems int64 `protobuf:"varint,18,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` + MinItems int64 `protobuf:"varint,19,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` + UniqueItems bool `protobuf:"varint,20,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` + Enum []*Any `protobuf:"bytes,21,rep,name=enum,proto3" json:"enum,omitempty"` + MultipleOf float64 `protobuf:"fixed64,22,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,23,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *FormDataParameterSubSchema) Reset() { + *x = FormDataParameterSubSchema{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FormDataParameterSubSchema) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FormDataParameterSubSchema) ProtoMessage() {} + +func (x *FormDataParameterSubSchema) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FormDataParameterSubSchema.ProtoReflect.Descriptor instead. +func (*FormDataParameterSubSchema) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{12} +} + +func (x *FormDataParameterSubSchema) GetRequired() bool { + if x != nil { + return x.Required + } + return false +} + +func (x *FormDataParameterSubSchema) GetIn() string { + if x != nil { + return x.In + } + return "" +} + +func (x *FormDataParameterSubSchema) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *FormDataParameterSubSchema) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FormDataParameterSubSchema) GetAllowEmptyValue() bool { + if x != nil { + return x.AllowEmptyValue + } + return false +} + +func (x *FormDataParameterSubSchema) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *FormDataParameterSubSchema) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *FormDataParameterSubSchema) GetItems() *PrimitivesItems { + if x != nil { + return x.Items + } + return nil +} + +func (x *FormDataParameterSubSchema) GetCollectionFormat() string { + if x != nil { + return x.CollectionFormat + } + return "" +} + +func (x *FormDataParameterSubSchema) GetDefault() *Any { + if x != nil { + return x.Default + } + return nil +} + +func (x *FormDataParameterSubSchema) GetMaximum() float64 { + if x != nil { + return x.Maximum + } + return 0 +} + +func (x *FormDataParameterSubSchema) GetExclusiveMaximum() bool { + if x != nil { + return x.ExclusiveMaximum + } + return false +} + +func (x *FormDataParameterSubSchema) GetMinimum() float64 { + if x != nil { + return x.Minimum + } + return 0 +} + +func (x *FormDataParameterSubSchema) GetExclusiveMinimum() bool { + if x != nil { + return x.ExclusiveMinimum + } + return false +} + +func (x *FormDataParameterSubSchema) GetMaxLength() int64 { + if x != nil { + return x.MaxLength + } + return 0 +} + +func (x *FormDataParameterSubSchema) GetMinLength() int64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *FormDataParameterSubSchema) GetPattern() string { + if x != nil { + return x.Pattern + } + return "" +} + +func (x *FormDataParameterSubSchema) GetMaxItems() int64 { + if x != nil { + return x.MaxItems + } + return 0 +} + +func (x *FormDataParameterSubSchema) GetMinItems() int64 { + if x != nil { + return x.MinItems + } + return 0 +} + +func (x *FormDataParameterSubSchema) GetUniqueItems() bool { + if x != nil { + return x.UniqueItems + } + return false +} + +func (x *FormDataParameterSubSchema) GetEnum() []*Any { + if x != nil { + return x.Enum + } + return nil +} + +func (x *FormDataParameterSubSchema) GetMultipleOf() float64 { + if x != nil { + return x.MultipleOf + } + return 0 +} + +func (x *FormDataParameterSubSchema) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type Header struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Format string `protobuf:"bytes,2,opt,name=format,proto3" json:"format,omitempty"` + Items *PrimitivesItems `protobuf:"bytes,3,opt,name=items,proto3" json:"items,omitempty"` + CollectionFormat string `protobuf:"bytes,4,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` + Default *Any `protobuf:"bytes,5,opt,name=default,proto3" json:"default,omitempty"` + Maximum float64 `protobuf:"fixed64,6,opt,name=maximum,proto3" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,7,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + Minimum float64 `protobuf:"fixed64,8,opt,name=minimum,proto3" json:"minimum,omitempty"` + ExclusiveMinimum bool `protobuf:"varint,9,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` + MaxLength int64 `protobuf:"varint,10,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` + MinLength int64 `protobuf:"varint,11,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + Pattern string `protobuf:"bytes,12,opt,name=pattern,proto3" json:"pattern,omitempty"` + MaxItems int64 `protobuf:"varint,13,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` + MinItems int64 `protobuf:"varint,14,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` + UniqueItems bool `protobuf:"varint,15,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` + Enum []*Any `protobuf:"bytes,16,rep,name=enum,proto3" json:"enum,omitempty"` + MultipleOf float64 `protobuf:"fixed64,17,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + Description string `protobuf:"bytes,18,opt,name=description,proto3" json:"description,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,19,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Header) Reset() { + *x = Header{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Header) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Header) ProtoMessage() {} + +func (x *Header) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Header.ProtoReflect.Descriptor instead. +func (*Header) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{13} +} + +func (x *Header) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Header) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *Header) GetItems() *PrimitivesItems { + if x != nil { + return x.Items + } + return nil +} + +func (x *Header) GetCollectionFormat() string { + if x != nil { + return x.CollectionFormat + } + return "" +} + +func (x *Header) GetDefault() *Any { + if x != nil { + return x.Default + } + return nil +} + +func (x *Header) GetMaximum() float64 { + if x != nil { + return x.Maximum + } + return 0 +} + +func (x *Header) GetExclusiveMaximum() bool { + if x != nil { + return x.ExclusiveMaximum + } + return false +} + +func (x *Header) GetMinimum() float64 { + if x != nil { + return x.Minimum + } + return 0 +} + +func (x *Header) GetExclusiveMinimum() bool { + if x != nil { + return x.ExclusiveMinimum + } + return false +} + +func (x *Header) GetMaxLength() int64 { + if x != nil { + return x.MaxLength + } + return 0 +} + +func (x *Header) GetMinLength() int64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *Header) GetPattern() string { + if x != nil { + return x.Pattern + } + return "" +} + +func (x *Header) GetMaxItems() int64 { + if x != nil { + return x.MaxItems + } + return 0 +} + +func (x *Header) GetMinItems() int64 { + if x != nil { + return x.MinItems + } + return 0 +} + +func (x *Header) GetUniqueItems() bool { + if x != nil { + return x.UniqueItems + } + return false +} + +func (x *Header) GetEnum() []*Any { + if x != nil { + return x.Enum + } + return nil +} + +func (x *Header) GetMultipleOf() float64 { + if x != nil { + return x.MultipleOf + } + return 0 +} + +func (x *Header) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Header) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type HeaderParameterSubSchema struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Determines whether or not this parameter is required or optional. + Required bool `protobuf:"varint,1,opt,name=required,proto3" json:"required,omitempty"` + // Determines the location of the parameter. + In string `protobuf:"bytes,2,opt,name=in,proto3" json:"in,omitempty"` + // A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The name of the parameter. + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + Type string `protobuf:"bytes,5,opt,name=type,proto3" json:"type,omitempty"` + Format string `protobuf:"bytes,6,opt,name=format,proto3" json:"format,omitempty"` + Items *PrimitivesItems `protobuf:"bytes,7,opt,name=items,proto3" json:"items,omitempty"` + CollectionFormat string `protobuf:"bytes,8,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` + Default *Any `protobuf:"bytes,9,opt,name=default,proto3" json:"default,omitempty"` + Maximum float64 `protobuf:"fixed64,10,opt,name=maximum,proto3" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,11,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + Minimum float64 `protobuf:"fixed64,12,opt,name=minimum,proto3" json:"minimum,omitempty"` + ExclusiveMinimum bool `protobuf:"varint,13,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` + MaxLength int64 `protobuf:"varint,14,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` + MinLength int64 `protobuf:"varint,15,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + Pattern string `protobuf:"bytes,16,opt,name=pattern,proto3" json:"pattern,omitempty"` + MaxItems int64 `protobuf:"varint,17,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` + MinItems int64 `protobuf:"varint,18,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` + UniqueItems bool `protobuf:"varint,19,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` + Enum []*Any `protobuf:"bytes,20,rep,name=enum,proto3" json:"enum,omitempty"` + MultipleOf float64 `protobuf:"fixed64,21,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,22,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *HeaderParameterSubSchema) Reset() { + *x = HeaderParameterSubSchema{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HeaderParameterSubSchema) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HeaderParameterSubSchema) ProtoMessage() {} + +func (x *HeaderParameterSubSchema) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HeaderParameterSubSchema.ProtoReflect.Descriptor instead. +func (*HeaderParameterSubSchema) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{14} +} + +func (x *HeaderParameterSubSchema) GetRequired() bool { + if x != nil { + return x.Required + } + return false +} + +func (x *HeaderParameterSubSchema) GetIn() string { + if x != nil { + return x.In + } + return "" +} + +func (x *HeaderParameterSubSchema) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *HeaderParameterSubSchema) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *HeaderParameterSubSchema) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *HeaderParameterSubSchema) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *HeaderParameterSubSchema) GetItems() *PrimitivesItems { + if x != nil { + return x.Items + } + return nil +} + +func (x *HeaderParameterSubSchema) GetCollectionFormat() string { + if x != nil { + return x.CollectionFormat + } + return "" +} + +func (x *HeaderParameterSubSchema) GetDefault() *Any { + if x != nil { + return x.Default + } + return nil +} + +func (x *HeaderParameterSubSchema) GetMaximum() float64 { + if x != nil { + return x.Maximum + } + return 0 +} + +func (x *HeaderParameterSubSchema) GetExclusiveMaximum() bool { + if x != nil { + return x.ExclusiveMaximum + } + return false +} + +func (x *HeaderParameterSubSchema) GetMinimum() float64 { + if x != nil { + return x.Minimum + } + return 0 +} + +func (x *HeaderParameterSubSchema) GetExclusiveMinimum() bool { + if x != nil { + return x.ExclusiveMinimum + } + return false +} + +func (x *HeaderParameterSubSchema) GetMaxLength() int64 { + if x != nil { + return x.MaxLength + } + return 0 +} + +func (x *HeaderParameterSubSchema) GetMinLength() int64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *HeaderParameterSubSchema) GetPattern() string { + if x != nil { + return x.Pattern + } + return "" +} + +func (x *HeaderParameterSubSchema) GetMaxItems() int64 { + if x != nil { + return x.MaxItems + } + return 0 +} + +func (x *HeaderParameterSubSchema) GetMinItems() int64 { + if x != nil { + return x.MinItems + } + return 0 +} + +func (x *HeaderParameterSubSchema) GetUniqueItems() bool { + if x != nil { + return x.UniqueItems + } + return false +} + +func (x *HeaderParameterSubSchema) GetEnum() []*Any { + if x != nil { + return x.Enum + } + return nil +} + +func (x *HeaderParameterSubSchema) GetMultipleOf() float64 { + if x != nil { + return x.MultipleOf + } + return 0 +} + +func (x *HeaderParameterSubSchema) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type Headers struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdditionalProperties []*NamedHeader `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *Headers) Reset() { + *x = Headers{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Headers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Headers) ProtoMessage() {} + +func (x *Headers) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Headers.ProtoReflect.Descriptor instead. +func (*Headers) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{15} +} + +func (x *Headers) GetAdditionalProperties() []*NamedHeader { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +// General information about the API. +type Info struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A unique and precise title of the API. + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + // A semantic version number of the API. + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // A longer description of the API. Should be different from the title. GitHub Flavored Markdown is allowed. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The terms of service for the API. + TermsOfService string `protobuf:"bytes,4,opt,name=terms_of_service,json=termsOfService,proto3" json:"terms_of_service,omitempty"` + Contact *Contact `protobuf:"bytes,5,opt,name=contact,proto3" json:"contact,omitempty"` + License *License `protobuf:"bytes,6,opt,name=license,proto3" json:"license,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,7,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Info) Reset() { + *x = Info{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Info) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Info) ProtoMessage() {} + +func (x *Info) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Info.ProtoReflect.Descriptor instead. +func (*Info) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{16} +} + +func (x *Info) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *Info) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *Info) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Info) GetTermsOfService() string { + if x != nil { + return x.TermsOfService + } + return "" +} + +func (x *Info) GetContact() *Contact { + if x != nil { + return x.Contact + } + return nil +} + +func (x *Info) GetLicense() *License { + if x != nil { + return x.License + } + return nil +} + +func (x *Info) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type ItemsItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Schema []*Schema `protobuf:"bytes,1,rep,name=schema,proto3" json:"schema,omitempty"` +} + +func (x *ItemsItem) Reset() { + *x = ItemsItem{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ItemsItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ItemsItem) ProtoMessage() {} + +func (x *ItemsItem) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ItemsItem.ProtoReflect.Descriptor instead. +func (*ItemsItem) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{17} +} + +func (x *ItemsItem) GetSchema() []*Schema { + if x != nil { + return x.Schema + } + return nil +} + +type JsonReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + XRef string `protobuf:"bytes,1,opt,name=_ref,json=Ref,proto3" json:"_ref,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` +} + +func (x *JsonReference) Reset() { + *x = JsonReference{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JsonReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JsonReference) ProtoMessage() {} + +func (x *JsonReference) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JsonReference.ProtoReflect.Descriptor instead. +func (*JsonReference) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{18} +} + +func (x *JsonReference) GetXRef() string { + if x != nil { + return x.XRef + } + return "" +} + +func (x *JsonReference) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +type License struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The name of the license type. It's encouraged to use an OSI compatible license. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // The URL pointing to the license. + Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,3,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *License) Reset() { + *x = License{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *License) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*License) ProtoMessage() {} + +func (x *License) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use License.ProtoReflect.Descriptor instead. +func (*License) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{19} +} + +func (x *License) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *License) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *License) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +// Automatically-generated message used to represent maps of Any as ordered (name,value) pairs. +type NamedAny struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Map key + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Mapped value + Value *Any `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *NamedAny) Reset() { + *x = NamedAny{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamedAny) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamedAny) ProtoMessage() {} + +func (x *NamedAny) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamedAny.ProtoReflect.Descriptor instead. +func (*NamedAny) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{20} +} + +func (x *NamedAny) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NamedAny) GetValue() *Any { + if x != nil { + return x.Value + } + return nil +} + +// Automatically-generated message used to represent maps of Header as ordered (name,value) pairs. +type NamedHeader struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Map key + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Mapped value + Value *Header `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *NamedHeader) Reset() { + *x = NamedHeader{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamedHeader) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamedHeader) ProtoMessage() {} + +func (x *NamedHeader) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamedHeader.ProtoReflect.Descriptor instead. +func (*NamedHeader) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{21} +} + +func (x *NamedHeader) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NamedHeader) GetValue() *Header { + if x != nil { + return x.Value + } + return nil +} + +// Automatically-generated message used to represent maps of Parameter as ordered (name,value) pairs. +type NamedParameter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Map key + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Mapped value + Value *Parameter `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *NamedParameter) Reset() { + *x = NamedParameter{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamedParameter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamedParameter) ProtoMessage() {} + +func (x *NamedParameter) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamedParameter.ProtoReflect.Descriptor instead. +func (*NamedParameter) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{22} +} + +func (x *NamedParameter) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NamedParameter) GetValue() *Parameter { + if x != nil { + return x.Value + } + return nil +} + +// Automatically-generated message used to represent maps of PathItem as ordered (name,value) pairs. +type NamedPathItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Map key + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Mapped value + Value *PathItem `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *NamedPathItem) Reset() { + *x = NamedPathItem{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamedPathItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamedPathItem) ProtoMessage() {} + +func (x *NamedPathItem) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamedPathItem.ProtoReflect.Descriptor instead. +func (*NamedPathItem) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{23} +} + +func (x *NamedPathItem) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NamedPathItem) GetValue() *PathItem { + if x != nil { + return x.Value + } + return nil +} + +// Automatically-generated message used to represent maps of Response as ordered (name,value) pairs. +type NamedResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Map key + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Mapped value + Value *Response `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *NamedResponse) Reset() { + *x = NamedResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamedResponse) ProtoMessage() {} + +func (x *NamedResponse) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamedResponse.ProtoReflect.Descriptor instead. +func (*NamedResponse) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{24} +} + +func (x *NamedResponse) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NamedResponse) GetValue() *Response { + if x != nil { + return x.Value + } + return nil +} + +// Automatically-generated message used to represent maps of ResponseValue as ordered (name,value) pairs. +type NamedResponseValue struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Map key + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Mapped value + Value *ResponseValue `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *NamedResponseValue) Reset() { + *x = NamedResponseValue{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamedResponseValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamedResponseValue) ProtoMessage() {} + +func (x *NamedResponseValue) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamedResponseValue.ProtoReflect.Descriptor instead. +func (*NamedResponseValue) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{25} +} + +func (x *NamedResponseValue) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NamedResponseValue) GetValue() *ResponseValue { + if x != nil { + return x.Value + } + return nil +} + +// Automatically-generated message used to represent maps of Schema as ordered (name,value) pairs. +type NamedSchema struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Map key + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Mapped value + Value *Schema `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *NamedSchema) Reset() { + *x = NamedSchema{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamedSchema) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamedSchema) ProtoMessage() {} + +func (x *NamedSchema) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamedSchema.ProtoReflect.Descriptor instead. +func (*NamedSchema) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{26} +} + +func (x *NamedSchema) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NamedSchema) GetValue() *Schema { + if x != nil { + return x.Value + } + return nil +} + +// Automatically-generated message used to represent maps of SecurityDefinitionsItem as ordered (name,value) pairs. +type NamedSecurityDefinitionsItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Map key + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Mapped value + Value *SecurityDefinitionsItem `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *NamedSecurityDefinitionsItem) Reset() { + *x = NamedSecurityDefinitionsItem{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamedSecurityDefinitionsItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamedSecurityDefinitionsItem) ProtoMessage() {} + +func (x *NamedSecurityDefinitionsItem) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamedSecurityDefinitionsItem.ProtoReflect.Descriptor instead. +func (*NamedSecurityDefinitionsItem) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{27} +} + +func (x *NamedSecurityDefinitionsItem) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NamedSecurityDefinitionsItem) GetValue() *SecurityDefinitionsItem { + if x != nil { + return x.Value + } + return nil +} + +// Automatically-generated message used to represent maps of string as ordered (name,value) pairs. +type NamedString struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Map key + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Mapped value + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *NamedString) Reset() { + *x = NamedString{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamedString) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamedString) ProtoMessage() {} + +func (x *NamedString) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamedString.ProtoReflect.Descriptor instead. +func (*NamedString) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{28} +} + +func (x *NamedString) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NamedString) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +// Automatically-generated message used to represent maps of StringArray as ordered (name,value) pairs. +type NamedStringArray struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Map key + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Mapped value + Value *StringArray `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *NamedStringArray) Reset() { + *x = NamedStringArray{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamedStringArray) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamedStringArray) ProtoMessage() {} + +func (x *NamedStringArray) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NamedStringArray.ProtoReflect.Descriptor instead. +func (*NamedStringArray) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{29} +} + +func (x *NamedStringArray) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NamedStringArray) GetValue() *StringArray { + if x != nil { + return x.Value + } + return nil +} + +type NonBodyParameter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Oneof: + // *NonBodyParameter_HeaderParameterSubSchema + // *NonBodyParameter_FormDataParameterSubSchema + // *NonBodyParameter_QueryParameterSubSchema + // *NonBodyParameter_PathParameterSubSchema + Oneof isNonBodyParameter_Oneof `protobuf_oneof:"oneof"` +} + +func (x *NonBodyParameter) Reset() { + *x = NonBodyParameter{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NonBodyParameter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NonBodyParameter) ProtoMessage() {} + +func (x *NonBodyParameter) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NonBodyParameter.ProtoReflect.Descriptor instead. +func (*NonBodyParameter) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{30} +} + +func (m *NonBodyParameter) GetOneof() isNonBodyParameter_Oneof { + if m != nil { + return m.Oneof + } + return nil +} + +func (x *NonBodyParameter) GetHeaderParameterSubSchema() *HeaderParameterSubSchema { + if x, ok := x.GetOneof().(*NonBodyParameter_HeaderParameterSubSchema); ok { + return x.HeaderParameterSubSchema + } + return nil +} + +func (x *NonBodyParameter) GetFormDataParameterSubSchema() *FormDataParameterSubSchema { + if x, ok := x.GetOneof().(*NonBodyParameter_FormDataParameterSubSchema); ok { + return x.FormDataParameterSubSchema + } + return nil +} + +func (x *NonBodyParameter) GetQueryParameterSubSchema() *QueryParameterSubSchema { + if x, ok := x.GetOneof().(*NonBodyParameter_QueryParameterSubSchema); ok { + return x.QueryParameterSubSchema + } + return nil +} + +func (x *NonBodyParameter) GetPathParameterSubSchema() *PathParameterSubSchema { + if x, ok := x.GetOneof().(*NonBodyParameter_PathParameterSubSchema); ok { + return x.PathParameterSubSchema + } + return nil +} + +type isNonBodyParameter_Oneof interface { + isNonBodyParameter_Oneof() +} + +type NonBodyParameter_HeaderParameterSubSchema struct { + HeaderParameterSubSchema *HeaderParameterSubSchema `protobuf:"bytes,1,opt,name=header_parameter_sub_schema,json=headerParameterSubSchema,proto3,oneof"` +} + +type NonBodyParameter_FormDataParameterSubSchema struct { + FormDataParameterSubSchema *FormDataParameterSubSchema `protobuf:"bytes,2,opt,name=form_data_parameter_sub_schema,json=formDataParameterSubSchema,proto3,oneof"` +} + +type NonBodyParameter_QueryParameterSubSchema struct { + QueryParameterSubSchema *QueryParameterSubSchema `protobuf:"bytes,3,opt,name=query_parameter_sub_schema,json=queryParameterSubSchema,proto3,oneof"` +} + +type NonBodyParameter_PathParameterSubSchema struct { + PathParameterSubSchema *PathParameterSubSchema `protobuf:"bytes,4,opt,name=path_parameter_sub_schema,json=pathParameterSubSchema,proto3,oneof"` +} + +func (*NonBodyParameter_HeaderParameterSubSchema) isNonBodyParameter_Oneof() {} + +func (*NonBodyParameter_FormDataParameterSubSchema) isNonBodyParameter_Oneof() {} + +func (*NonBodyParameter_QueryParameterSubSchema) isNonBodyParameter_Oneof() {} + +func (*NonBodyParameter_PathParameterSubSchema) isNonBodyParameter_Oneof() {} + +type Oauth2AccessCodeSecurity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Flow string `protobuf:"bytes,2,opt,name=flow,proto3" json:"flow,omitempty"` + Scopes *Oauth2Scopes `protobuf:"bytes,3,opt,name=scopes,proto3" json:"scopes,omitempty"` + AuthorizationUrl string `protobuf:"bytes,4,opt,name=authorization_url,json=authorizationUrl,proto3" json:"authorization_url,omitempty"` + TokenUrl string `protobuf:"bytes,5,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,7,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Oauth2AccessCodeSecurity) Reset() { + *x = Oauth2AccessCodeSecurity{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Oauth2AccessCodeSecurity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Oauth2AccessCodeSecurity) ProtoMessage() {} + +func (x *Oauth2AccessCodeSecurity) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Oauth2AccessCodeSecurity.ProtoReflect.Descriptor instead. +func (*Oauth2AccessCodeSecurity) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{31} +} + +func (x *Oauth2AccessCodeSecurity) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Oauth2AccessCodeSecurity) GetFlow() string { + if x != nil { + return x.Flow + } + return "" +} + +func (x *Oauth2AccessCodeSecurity) GetScopes() *Oauth2Scopes { + if x != nil { + return x.Scopes + } + return nil +} + +func (x *Oauth2AccessCodeSecurity) GetAuthorizationUrl() string { + if x != nil { + return x.AuthorizationUrl + } + return "" +} + +func (x *Oauth2AccessCodeSecurity) GetTokenUrl() string { + if x != nil { + return x.TokenUrl + } + return "" +} + +func (x *Oauth2AccessCodeSecurity) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Oauth2AccessCodeSecurity) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type Oauth2ApplicationSecurity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Flow string `protobuf:"bytes,2,opt,name=flow,proto3" json:"flow,omitempty"` + Scopes *Oauth2Scopes `protobuf:"bytes,3,opt,name=scopes,proto3" json:"scopes,omitempty"` + TokenUrl string `protobuf:"bytes,4,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,6,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Oauth2ApplicationSecurity) Reset() { + *x = Oauth2ApplicationSecurity{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Oauth2ApplicationSecurity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Oauth2ApplicationSecurity) ProtoMessage() {} + +func (x *Oauth2ApplicationSecurity) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Oauth2ApplicationSecurity.ProtoReflect.Descriptor instead. +func (*Oauth2ApplicationSecurity) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{32} +} + +func (x *Oauth2ApplicationSecurity) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Oauth2ApplicationSecurity) GetFlow() string { + if x != nil { + return x.Flow + } + return "" +} + +func (x *Oauth2ApplicationSecurity) GetScopes() *Oauth2Scopes { + if x != nil { + return x.Scopes + } + return nil +} + +func (x *Oauth2ApplicationSecurity) GetTokenUrl() string { + if x != nil { + return x.TokenUrl + } + return "" +} + +func (x *Oauth2ApplicationSecurity) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Oauth2ApplicationSecurity) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type Oauth2ImplicitSecurity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Flow string `protobuf:"bytes,2,opt,name=flow,proto3" json:"flow,omitempty"` + Scopes *Oauth2Scopes `protobuf:"bytes,3,opt,name=scopes,proto3" json:"scopes,omitempty"` + AuthorizationUrl string `protobuf:"bytes,4,opt,name=authorization_url,json=authorizationUrl,proto3" json:"authorization_url,omitempty"` + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,6,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Oauth2ImplicitSecurity) Reset() { + *x = Oauth2ImplicitSecurity{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Oauth2ImplicitSecurity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Oauth2ImplicitSecurity) ProtoMessage() {} + +func (x *Oauth2ImplicitSecurity) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Oauth2ImplicitSecurity.ProtoReflect.Descriptor instead. +func (*Oauth2ImplicitSecurity) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{33} +} + +func (x *Oauth2ImplicitSecurity) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Oauth2ImplicitSecurity) GetFlow() string { + if x != nil { + return x.Flow + } + return "" +} + +func (x *Oauth2ImplicitSecurity) GetScopes() *Oauth2Scopes { + if x != nil { + return x.Scopes + } + return nil +} + +func (x *Oauth2ImplicitSecurity) GetAuthorizationUrl() string { + if x != nil { + return x.AuthorizationUrl + } + return "" +} + +func (x *Oauth2ImplicitSecurity) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Oauth2ImplicitSecurity) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type Oauth2PasswordSecurity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Flow string `protobuf:"bytes,2,opt,name=flow,proto3" json:"flow,omitempty"` + Scopes *Oauth2Scopes `protobuf:"bytes,3,opt,name=scopes,proto3" json:"scopes,omitempty"` + TokenUrl string `protobuf:"bytes,4,opt,name=token_url,json=tokenUrl,proto3" json:"token_url,omitempty"` + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,6,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Oauth2PasswordSecurity) Reset() { + *x = Oauth2PasswordSecurity{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Oauth2PasswordSecurity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Oauth2PasswordSecurity) ProtoMessage() {} + +func (x *Oauth2PasswordSecurity) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Oauth2PasswordSecurity.ProtoReflect.Descriptor instead. +func (*Oauth2PasswordSecurity) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{34} +} + +func (x *Oauth2PasswordSecurity) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Oauth2PasswordSecurity) GetFlow() string { + if x != nil { + return x.Flow + } + return "" +} + +func (x *Oauth2PasswordSecurity) GetScopes() *Oauth2Scopes { + if x != nil { + return x.Scopes + } + return nil +} + +func (x *Oauth2PasswordSecurity) GetTokenUrl() string { + if x != nil { + return x.TokenUrl + } + return "" +} + +func (x *Oauth2PasswordSecurity) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Oauth2PasswordSecurity) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type Oauth2Scopes struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdditionalProperties []*NamedString `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *Oauth2Scopes) Reset() { + *x = Oauth2Scopes{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Oauth2Scopes) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Oauth2Scopes) ProtoMessage() {} + +func (x *Oauth2Scopes) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Oauth2Scopes.ProtoReflect.Descriptor instead. +func (*Oauth2Scopes) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{35} +} + +func (x *Oauth2Scopes) GetAdditionalProperties() []*NamedString { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +type Operation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Tags []string `protobuf:"bytes,1,rep,name=tags,proto3" json:"tags,omitempty"` + // A brief summary of the operation. + Summary string `protobuf:"bytes,2,opt,name=summary,proto3" json:"summary,omitempty"` + // A longer description of the operation, GitHub Flavored Markdown is allowed. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + ExternalDocs *ExternalDocs `protobuf:"bytes,4,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + // A unique identifier of the operation. + OperationId string `protobuf:"bytes,5,opt,name=operation_id,json=operationId,proto3" json:"operation_id,omitempty"` + // A list of MIME types the API can produce. + Produces []string `protobuf:"bytes,6,rep,name=produces,proto3" json:"produces,omitempty"` + // A list of MIME types the API can consume. + Consumes []string `protobuf:"bytes,7,rep,name=consumes,proto3" json:"consumes,omitempty"` + // The parameters needed to send a valid API call. + Parameters []*ParametersItem `protobuf:"bytes,8,rep,name=parameters,proto3" json:"parameters,omitempty"` + Responses *Responses `protobuf:"bytes,9,opt,name=responses,proto3" json:"responses,omitempty"` + // The transfer protocol of the API. + Schemes []string `protobuf:"bytes,10,rep,name=schemes,proto3" json:"schemes,omitempty"` + Deprecated bool `protobuf:"varint,11,opt,name=deprecated,proto3" json:"deprecated,omitempty"` + Security []*SecurityRequirement `protobuf:"bytes,12,rep,name=security,proto3" json:"security,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,13,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Operation) Reset() { + *x = Operation{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Operation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Operation) ProtoMessage() {} + +func (x *Operation) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Operation.ProtoReflect.Descriptor instead. +func (*Operation) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{36} +} + +func (x *Operation) GetTags() []string { + if x != nil { + return x.Tags + } + return nil +} + +func (x *Operation) GetSummary() string { + if x != nil { + return x.Summary + } + return "" +} + +func (x *Operation) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Operation) GetExternalDocs() *ExternalDocs { + if x != nil { + return x.ExternalDocs + } + return nil +} + +func (x *Operation) GetOperationId() string { + if x != nil { + return x.OperationId + } + return "" +} + +func (x *Operation) GetProduces() []string { + if x != nil { + return x.Produces + } + return nil +} + +func (x *Operation) GetConsumes() []string { + if x != nil { + return x.Consumes + } + return nil +} + +func (x *Operation) GetParameters() []*ParametersItem { + if x != nil { + return x.Parameters + } + return nil +} + +func (x *Operation) GetResponses() *Responses { + if x != nil { + return x.Responses + } + return nil +} + +func (x *Operation) GetSchemes() []string { + if x != nil { + return x.Schemes + } + return nil +} + +func (x *Operation) GetDeprecated() bool { + if x != nil { + return x.Deprecated + } + return false +} + +func (x *Operation) GetSecurity() []*SecurityRequirement { + if x != nil { + return x.Security + } + return nil +} + +func (x *Operation) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type Parameter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Oneof: + // *Parameter_BodyParameter + // *Parameter_NonBodyParameter + Oneof isParameter_Oneof `protobuf_oneof:"oneof"` +} + +func (x *Parameter) Reset() { + *x = Parameter{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Parameter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Parameter) ProtoMessage() {} + +func (x *Parameter) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Parameter.ProtoReflect.Descriptor instead. +func (*Parameter) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{37} +} + +func (m *Parameter) GetOneof() isParameter_Oneof { + if m != nil { + return m.Oneof + } + return nil +} + +func (x *Parameter) GetBodyParameter() *BodyParameter { + if x, ok := x.GetOneof().(*Parameter_BodyParameter); ok { + return x.BodyParameter + } + return nil +} + +func (x *Parameter) GetNonBodyParameter() *NonBodyParameter { + if x, ok := x.GetOneof().(*Parameter_NonBodyParameter); ok { + return x.NonBodyParameter + } + return nil +} + +type isParameter_Oneof interface { + isParameter_Oneof() +} + +type Parameter_BodyParameter struct { + BodyParameter *BodyParameter `protobuf:"bytes,1,opt,name=body_parameter,json=bodyParameter,proto3,oneof"` +} + +type Parameter_NonBodyParameter struct { + NonBodyParameter *NonBodyParameter `protobuf:"bytes,2,opt,name=non_body_parameter,json=nonBodyParameter,proto3,oneof"` +} + +func (*Parameter_BodyParameter) isParameter_Oneof() {} + +func (*Parameter_NonBodyParameter) isParameter_Oneof() {} + +// One or more JSON representations for parameters +type ParameterDefinitions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdditionalProperties []*NamedParameter `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *ParameterDefinitions) Reset() { + *x = ParameterDefinitions{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ParameterDefinitions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ParameterDefinitions) ProtoMessage() {} + +func (x *ParameterDefinitions) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ParameterDefinitions.ProtoReflect.Descriptor instead. +func (*ParameterDefinitions) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{38} +} + +func (x *ParameterDefinitions) GetAdditionalProperties() []*NamedParameter { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +type ParametersItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Oneof: + // *ParametersItem_Parameter + // *ParametersItem_JsonReference + Oneof isParametersItem_Oneof `protobuf_oneof:"oneof"` +} + +func (x *ParametersItem) Reset() { + *x = ParametersItem{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ParametersItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ParametersItem) ProtoMessage() {} + +func (x *ParametersItem) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ParametersItem.ProtoReflect.Descriptor instead. +func (*ParametersItem) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{39} +} + +func (m *ParametersItem) GetOneof() isParametersItem_Oneof { + if m != nil { + return m.Oneof + } + return nil +} + +func (x *ParametersItem) GetParameter() *Parameter { + if x, ok := x.GetOneof().(*ParametersItem_Parameter); ok { + return x.Parameter + } + return nil +} + +func (x *ParametersItem) GetJsonReference() *JsonReference { + if x, ok := x.GetOneof().(*ParametersItem_JsonReference); ok { + return x.JsonReference + } + return nil +} + +type isParametersItem_Oneof interface { + isParametersItem_Oneof() +} + +type ParametersItem_Parameter struct { + Parameter *Parameter `protobuf:"bytes,1,opt,name=parameter,proto3,oneof"` +} + +type ParametersItem_JsonReference struct { + JsonReference *JsonReference `protobuf:"bytes,2,opt,name=json_reference,json=jsonReference,proto3,oneof"` +} + +func (*ParametersItem_Parameter) isParametersItem_Oneof() {} + +func (*ParametersItem_JsonReference) isParametersItem_Oneof() {} + +type PathItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + XRef string `protobuf:"bytes,1,opt,name=_ref,json=Ref,proto3" json:"_ref,omitempty"` + Get *Operation `protobuf:"bytes,2,opt,name=get,proto3" json:"get,omitempty"` + Put *Operation `protobuf:"bytes,3,opt,name=put,proto3" json:"put,omitempty"` + Post *Operation `protobuf:"bytes,4,opt,name=post,proto3" json:"post,omitempty"` + Delete *Operation `protobuf:"bytes,5,opt,name=delete,proto3" json:"delete,omitempty"` + Options *Operation `protobuf:"bytes,6,opt,name=options,proto3" json:"options,omitempty"` + Head *Operation `protobuf:"bytes,7,opt,name=head,proto3" json:"head,omitempty"` + Patch *Operation `protobuf:"bytes,8,opt,name=patch,proto3" json:"patch,omitempty"` + // The parameters needed to send a valid API call. + Parameters []*ParametersItem `protobuf:"bytes,9,rep,name=parameters,proto3" json:"parameters,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,10,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *PathItem) Reset() { + *x = PathItem{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PathItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PathItem) ProtoMessage() {} + +func (x *PathItem) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PathItem.ProtoReflect.Descriptor instead. +func (*PathItem) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{40} +} + +func (x *PathItem) GetXRef() string { + if x != nil { + return x.XRef + } + return "" +} + +func (x *PathItem) GetGet() *Operation { + if x != nil { + return x.Get + } + return nil +} + +func (x *PathItem) GetPut() *Operation { + if x != nil { + return x.Put + } + return nil +} + +func (x *PathItem) GetPost() *Operation { + if x != nil { + return x.Post + } + return nil +} + +func (x *PathItem) GetDelete() *Operation { + if x != nil { + return x.Delete + } + return nil +} + +func (x *PathItem) GetOptions() *Operation { + if x != nil { + return x.Options + } + return nil +} + +func (x *PathItem) GetHead() *Operation { + if x != nil { + return x.Head + } + return nil +} + +func (x *PathItem) GetPatch() *Operation { + if x != nil { + return x.Patch + } + return nil +} + +func (x *PathItem) GetParameters() []*ParametersItem { + if x != nil { + return x.Parameters + } + return nil +} + +func (x *PathItem) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type PathParameterSubSchema struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Determines whether or not this parameter is required or optional. + Required bool `protobuf:"varint,1,opt,name=required,proto3" json:"required,omitempty"` + // Determines the location of the parameter. + In string `protobuf:"bytes,2,opt,name=in,proto3" json:"in,omitempty"` + // A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The name of the parameter. + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + Type string `protobuf:"bytes,5,opt,name=type,proto3" json:"type,omitempty"` + Format string `protobuf:"bytes,6,opt,name=format,proto3" json:"format,omitempty"` + Items *PrimitivesItems `protobuf:"bytes,7,opt,name=items,proto3" json:"items,omitempty"` + CollectionFormat string `protobuf:"bytes,8,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` + Default *Any `protobuf:"bytes,9,opt,name=default,proto3" json:"default,omitempty"` + Maximum float64 `protobuf:"fixed64,10,opt,name=maximum,proto3" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,11,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + Minimum float64 `protobuf:"fixed64,12,opt,name=minimum,proto3" json:"minimum,omitempty"` + ExclusiveMinimum bool `protobuf:"varint,13,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` + MaxLength int64 `protobuf:"varint,14,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` + MinLength int64 `protobuf:"varint,15,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + Pattern string `protobuf:"bytes,16,opt,name=pattern,proto3" json:"pattern,omitempty"` + MaxItems int64 `protobuf:"varint,17,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` + MinItems int64 `protobuf:"varint,18,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` + UniqueItems bool `protobuf:"varint,19,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` + Enum []*Any `protobuf:"bytes,20,rep,name=enum,proto3" json:"enum,omitempty"` + MultipleOf float64 `protobuf:"fixed64,21,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,22,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *PathParameterSubSchema) Reset() { + *x = PathParameterSubSchema{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PathParameterSubSchema) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PathParameterSubSchema) ProtoMessage() {} + +func (x *PathParameterSubSchema) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PathParameterSubSchema.ProtoReflect.Descriptor instead. +func (*PathParameterSubSchema) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{41} +} + +func (x *PathParameterSubSchema) GetRequired() bool { + if x != nil { + return x.Required + } + return false +} + +func (x *PathParameterSubSchema) GetIn() string { + if x != nil { + return x.In + } + return "" +} + +func (x *PathParameterSubSchema) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *PathParameterSubSchema) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PathParameterSubSchema) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *PathParameterSubSchema) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *PathParameterSubSchema) GetItems() *PrimitivesItems { + if x != nil { + return x.Items + } + return nil +} + +func (x *PathParameterSubSchema) GetCollectionFormat() string { + if x != nil { + return x.CollectionFormat + } + return "" +} + +func (x *PathParameterSubSchema) GetDefault() *Any { + if x != nil { + return x.Default + } + return nil +} + +func (x *PathParameterSubSchema) GetMaximum() float64 { + if x != nil { + return x.Maximum + } + return 0 +} + +func (x *PathParameterSubSchema) GetExclusiveMaximum() bool { + if x != nil { + return x.ExclusiveMaximum + } + return false +} + +func (x *PathParameterSubSchema) GetMinimum() float64 { + if x != nil { + return x.Minimum + } + return 0 +} + +func (x *PathParameterSubSchema) GetExclusiveMinimum() bool { + if x != nil { + return x.ExclusiveMinimum + } + return false +} + +func (x *PathParameterSubSchema) GetMaxLength() int64 { + if x != nil { + return x.MaxLength + } + return 0 +} + +func (x *PathParameterSubSchema) GetMinLength() int64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *PathParameterSubSchema) GetPattern() string { + if x != nil { + return x.Pattern + } + return "" +} + +func (x *PathParameterSubSchema) GetMaxItems() int64 { + if x != nil { + return x.MaxItems + } + return 0 +} + +func (x *PathParameterSubSchema) GetMinItems() int64 { + if x != nil { + return x.MinItems + } + return 0 +} + +func (x *PathParameterSubSchema) GetUniqueItems() bool { + if x != nil { + return x.UniqueItems + } + return false +} + +func (x *PathParameterSubSchema) GetEnum() []*Any { + if x != nil { + return x.Enum + } + return nil +} + +func (x *PathParameterSubSchema) GetMultipleOf() float64 { + if x != nil { + return x.MultipleOf + } + return 0 +} + +func (x *PathParameterSubSchema) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +// Relative paths to the individual endpoints. They must be relative to the 'basePath'. +type Paths struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + VendorExtension []*NamedAny `protobuf:"bytes,1,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` + Path []*NamedPathItem `protobuf:"bytes,2,rep,name=path,proto3" json:"path,omitempty"` +} + +func (x *Paths) Reset() { + *x = Paths{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Paths) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Paths) ProtoMessage() {} + +func (x *Paths) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Paths.ProtoReflect.Descriptor instead. +func (*Paths) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{42} +} + +func (x *Paths) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +func (x *Paths) GetPath() []*NamedPathItem { + if x != nil { + return x.Path + } + return nil +} + +type PrimitivesItems struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Format string `protobuf:"bytes,2,opt,name=format,proto3" json:"format,omitempty"` + Items *PrimitivesItems `protobuf:"bytes,3,opt,name=items,proto3" json:"items,omitempty"` + CollectionFormat string `protobuf:"bytes,4,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` + Default *Any `protobuf:"bytes,5,opt,name=default,proto3" json:"default,omitempty"` + Maximum float64 `protobuf:"fixed64,6,opt,name=maximum,proto3" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,7,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + Minimum float64 `protobuf:"fixed64,8,opt,name=minimum,proto3" json:"minimum,omitempty"` + ExclusiveMinimum bool `protobuf:"varint,9,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` + MaxLength int64 `protobuf:"varint,10,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` + MinLength int64 `protobuf:"varint,11,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + Pattern string `protobuf:"bytes,12,opt,name=pattern,proto3" json:"pattern,omitempty"` + MaxItems int64 `protobuf:"varint,13,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` + MinItems int64 `protobuf:"varint,14,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` + UniqueItems bool `protobuf:"varint,15,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` + Enum []*Any `protobuf:"bytes,16,rep,name=enum,proto3" json:"enum,omitempty"` + MultipleOf float64 `protobuf:"fixed64,17,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,18,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *PrimitivesItems) Reset() { + *x = PrimitivesItems{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PrimitivesItems) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrimitivesItems) ProtoMessage() {} + +func (x *PrimitivesItems) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrimitivesItems.ProtoReflect.Descriptor instead. +func (*PrimitivesItems) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{43} +} + +func (x *PrimitivesItems) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *PrimitivesItems) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *PrimitivesItems) GetItems() *PrimitivesItems { + if x != nil { + return x.Items + } + return nil +} + +func (x *PrimitivesItems) GetCollectionFormat() string { + if x != nil { + return x.CollectionFormat + } + return "" +} + +func (x *PrimitivesItems) GetDefault() *Any { + if x != nil { + return x.Default + } + return nil +} + +func (x *PrimitivesItems) GetMaximum() float64 { + if x != nil { + return x.Maximum + } + return 0 +} + +func (x *PrimitivesItems) GetExclusiveMaximum() bool { + if x != nil { + return x.ExclusiveMaximum + } + return false +} + +func (x *PrimitivesItems) GetMinimum() float64 { + if x != nil { + return x.Minimum + } + return 0 +} + +func (x *PrimitivesItems) GetExclusiveMinimum() bool { + if x != nil { + return x.ExclusiveMinimum + } + return false +} + +func (x *PrimitivesItems) GetMaxLength() int64 { + if x != nil { + return x.MaxLength + } + return 0 +} + +func (x *PrimitivesItems) GetMinLength() int64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *PrimitivesItems) GetPattern() string { + if x != nil { + return x.Pattern + } + return "" +} + +func (x *PrimitivesItems) GetMaxItems() int64 { + if x != nil { + return x.MaxItems + } + return 0 +} + +func (x *PrimitivesItems) GetMinItems() int64 { + if x != nil { + return x.MinItems + } + return 0 +} + +func (x *PrimitivesItems) GetUniqueItems() bool { + if x != nil { + return x.UniqueItems + } + return false +} + +func (x *PrimitivesItems) GetEnum() []*Any { + if x != nil { + return x.Enum + } + return nil +} + +func (x *PrimitivesItems) GetMultipleOf() float64 { + if x != nil { + return x.MultipleOf + } + return 0 +} + +func (x *PrimitivesItems) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type Properties struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdditionalProperties []*NamedSchema `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *Properties) Reset() { + *x = Properties{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Properties) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Properties) ProtoMessage() {} + +func (x *Properties) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Properties.ProtoReflect.Descriptor instead. +func (*Properties) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{44} +} + +func (x *Properties) GetAdditionalProperties() []*NamedSchema { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +type QueryParameterSubSchema struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Determines whether or not this parameter is required or optional. + Required bool `protobuf:"varint,1,opt,name=required,proto3" json:"required,omitempty"` + // Determines the location of the parameter. + In string `protobuf:"bytes,2,opt,name=in,proto3" json:"in,omitempty"` + // A brief description of the parameter. This could contain examples of use. GitHub Flavored Markdown is allowed. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The name of the parameter. + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + // allows sending a parameter by name only or with an empty value. + AllowEmptyValue bool `protobuf:"varint,5,opt,name=allow_empty_value,json=allowEmptyValue,proto3" json:"allow_empty_value,omitempty"` + Type string `protobuf:"bytes,6,opt,name=type,proto3" json:"type,omitempty"` + Format string `protobuf:"bytes,7,opt,name=format,proto3" json:"format,omitempty"` + Items *PrimitivesItems `protobuf:"bytes,8,opt,name=items,proto3" json:"items,omitempty"` + CollectionFormat string `protobuf:"bytes,9,opt,name=collection_format,json=collectionFormat,proto3" json:"collection_format,omitempty"` + Default *Any `protobuf:"bytes,10,opt,name=default,proto3" json:"default,omitempty"` + Maximum float64 `protobuf:"fixed64,11,opt,name=maximum,proto3" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,12,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + Minimum float64 `protobuf:"fixed64,13,opt,name=minimum,proto3" json:"minimum,omitempty"` + ExclusiveMinimum bool `protobuf:"varint,14,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` + MaxLength int64 `protobuf:"varint,15,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` + MinLength int64 `protobuf:"varint,16,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + Pattern string `protobuf:"bytes,17,opt,name=pattern,proto3" json:"pattern,omitempty"` + MaxItems int64 `protobuf:"varint,18,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` + MinItems int64 `protobuf:"varint,19,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` + UniqueItems bool `protobuf:"varint,20,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` + Enum []*Any `protobuf:"bytes,21,rep,name=enum,proto3" json:"enum,omitempty"` + MultipleOf float64 `protobuf:"fixed64,22,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,23,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *QueryParameterSubSchema) Reset() { + *x = QueryParameterSubSchema{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryParameterSubSchema) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryParameterSubSchema) ProtoMessage() {} + +func (x *QueryParameterSubSchema) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryParameterSubSchema.ProtoReflect.Descriptor instead. +func (*QueryParameterSubSchema) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{45} +} + +func (x *QueryParameterSubSchema) GetRequired() bool { + if x != nil { + return x.Required + } + return false +} + +func (x *QueryParameterSubSchema) GetIn() string { + if x != nil { + return x.In + } + return "" +} + +func (x *QueryParameterSubSchema) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *QueryParameterSubSchema) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *QueryParameterSubSchema) GetAllowEmptyValue() bool { + if x != nil { + return x.AllowEmptyValue + } + return false +} + +func (x *QueryParameterSubSchema) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *QueryParameterSubSchema) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *QueryParameterSubSchema) GetItems() *PrimitivesItems { + if x != nil { + return x.Items + } + return nil +} + +func (x *QueryParameterSubSchema) GetCollectionFormat() string { + if x != nil { + return x.CollectionFormat + } + return "" +} + +func (x *QueryParameterSubSchema) GetDefault() *Any { + if x != nil { + return x.Default + } + return nil +} + +func (x *QueryParameterSubSchema) GetMaximum() float64 { + if x != nil { + return x.Maximum + } + return 0 +} + +func (x *QueryParameterSubSchema) GetExclusiveMaximum() bool { + if x != nil { + return x.ExclusiveMaximum + } + return false +} + +func (x *QueryParameterSubSchema) GetMinimum() float64 { + if x != nil { + return x.Minimum + } + return 0 +} + +func (x *QueryParameterSubSchema) GetExclusiveMinimum() bool { + if x != nil { + return x.ExclusiveMinimum + } + return false +} + +func (x *QueryParameterSubSchema) GetMaxLength() int64 { + if x != nil { + return x.MaxLength + } + return 0 +} + +func (x *QueryParameterSubSchema) GetMinLength() int64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *QueryParameterSubSchema) GetPattern() string { + if x != nil { + return x.Pattern + } + return "" +} + +func (x *QueryParameterSubSchema) GetMaxItems() int64 { + if x != nil { + return x.MaxItems + } + return 0 +} + +func (x *QueryParameterSubSchema) GetMinItems() int64 { + if x != nil { + return x.MinItems + } + return 0 +} + +func (x *QueryParameterSubSchema) GetUniqueItems() bool { + if x != nil { + return x.UniqueItems + } + return false +} + +func (x *QueryParameterSubSchema) GetEnum() []*Any { + if x != nil { + return x.Enum + } + return nil +} + +func (x *QueryParameterSubSchema) GetMultipleOf() float64 { + if x != nil { + return x.MultipleOf + } + return 0 +} + +func (x *QueryParameterSubSchema) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` + Schema *SchemaItem `protobuf:"bytes,2,opt,name=schema,proto3" json:"schema,omitempty"` + Headers *Headers `protobuf:"bytes,3,opt,name=headers,proto3" json:"headers,omitempty"` + Examples *Examples `protobuf:"bytes,4,opt,name=examples,proto3" json:"examples,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,5,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Response) Reset() { + *x = Response{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Response) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Response) ProtoMessage() {} + +func (x *Response) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Response.ProtoReflect.Descriptor instead. +func (*Response) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{46} +} + +func (x *Response) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Response) GetSchema() *SchemaItem { + if x != nil { + return x.Schema + } + return nil +} + +func (x *Response) GetHeaders() *Headers { + if x != nil { + return x.Headers + } + return nil +} + +func (x *Response) GetExamples() *Examples { + if x != nil { + return x.Examples + } + return nil +} + +func (x *Response) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +// One or more JSON representations for responses +type ResponseDefinitions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdditionalProperties []*NamedResponse `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *ResponseDefinitions) Reset() { + *x = ResponseDefinitions{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResponseDefinitions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResponseDefinitions) ProtoMessage() {} + +func (x *ResponseDefinitions) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[47] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResponseDefinitions.ProtoReflect.Descriptor instead. +func (*ResponseDefinitions) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{47} +} + +func (x *ResponseDefinitions) GetAdditionalProperties() []*NamedResponse { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +type ResponseValue struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Oneof: + // *ResponseValue_Response + // *ResponseValue_JsonReference + Oneof isResponseValue_Oneof `protobuf_oneof:"oneof"` +} + +func (x *ResponseValue) Reset() { + *x = ResponseValue{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResponseValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResponseValue) ProtoMessage() {} + +func (x *ResponseValue) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResponseValue.ProtoReflect.Descriptor instead. +func (*ResponseValue) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{48} +} + +func (m *ResponseValue) GetOneof() isResponseValue_Oneof { + if m != nil { + return m.Oneof + } + return nil +} + +func (x *ResponseValue) GetResponse() *Response { + if x, ok := x.GetOneof().(*ResponseValue_Response); ok { + return x.Response + } + return nil +} + +func (x *ResponseValue) GetJsonReference() *JsonReference { + if x, ok := x.GetOneof().(*ResponseValue_JsonReference); ok { + return x.JsonReference + } + return nil +} + +type isResponseValue_Oneof interface { + isResponseValue_Oneof() +} + +type ResponseValue_Response struct { + Response *Response `protobuf:"bytes,1,opt,name=response,proto3,oneof"` +} + +type ResponseValue_JsonReference struct { + JsonReference *JsonReference `protobuf:"bytes,2,opt,name=json_reference,json=jsonReference,proto3,oneof"` +} + +func (*ResponseValue_Response) isResponseValue_Oneof() {} + +func (*ResponseValue_JsonReference) isResponseValue_Oneof() {} + +// Response objects names can either be any valid HTTP status code or 'default'. +type Responses struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ResponseCode []*NamedResponseValue `protobuf:"bytes,1,rep,name=response_code,json=responseCode,proto3" json:"response_code,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,2,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Responses) Reset() { + *x = Responses{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Responses) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Responses) ProtoMessage() {} + +func (x *Responses) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[49] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Responses.ProtoReflect.Descriptor instead. +func (*Responses) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{49} +} + +func (x *Responses) GetResponseCode() []*NamedResponseValue { + if x != nil { + return x.ResponseCode + } + return nil +} + +func (x *Responses) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +// A deterministic version of a JSON Schema object. +type Schema struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + XRef string `protobuf:"bytes,1,opt,name=_ref,json=Ref,proto3" json:"_ref,omitempty"` + Format string `protobuf:"bytes,2,opt,name=format,proto3" json:"format,omitempty"` + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + Default *Any `protobuf:"bytes,5,opt,name=default,proto3" json:"default,omitempty"` + MultipleOf float64 `protobuf:"fixed64,6,opt,name=multiple_of,json=multipleOf,proto3" json:"multiple_of,omitempty"` + Maximum float64 `protobuf:"fixed64,7,opt,name=maximum,proto3" json:"maximum,omitempty"` + ExclusiveMaximum bool `protobuf:"varint,8,opt,name=exclusive_maximum,json=exclusiveMaximum,proto3" json:"exclusive_maximum,omitempty"` + Minimum float64 `protobuf:"fixed64,9,opt,name=minimum,proto3" json:"minimum,omitempty"` + ExclusiveMinimum bool `protobuf:"varint,10,opt,name=exclusive_minimum,json=exclusiveMinimum,proto3" json:"exclusive_minimum,omitempty"` + MaxLength int64 `protobuf:"varint,11,opt,name=max_length,json=maxLength,proto3" json:"max_length,omitempty"` + MinLength int64 `protobuf:"varint,12,opt,name=min_length,json=minLength,proto3" json:"min_length,omitempty"` + Pattern string `protobuf:"bytes,13,opt,name=pattern,proto3" json:"pattern,omitempty"` + MaxItems int64 `protobuf:"varint,14,opt,name=max_items,json=maxItems,proto3" json:"max_items,omitempty"` + MinItems int64 `protobuf:"varint,15,opt,name=min_items,json=minItems,proto3" json:"min_items,omitempty"` + UniqueItems bool `protobuf:"varint,16,opt,name=unique_items,json=uniqueItems,proto3" json:"unique_items,omitempty"` + MaxProperties int64 `protobuf:"varint,17,opt,name=max_properties,json=maxProperties,proto3" json:"max_properties,omitempty"` + MinProperties int64 `protobuf:"varint,18,opt,name=min_properties,json=minProperties,proto3" json:"min_properties,omitempty"` + Required []string `protobuf:"bytes,19,rep,name=required,proto3" json:"required,omitempty"` + Enum []*Any `protobuf:"bytes,20,rep,name=enum,proto3" json:"enum,omitempty"` + AdditionalProperties *AdditionalPropertiesItem `protobuf:"bytes,21,opt,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` + Type *TypeItem `protobuf:"bytes,22,opt,name=type,proto3" json:"type,omitempty"` + Items *ItemsItem `protobuf:"bytes,23,opt,name=items,proto3" json:"items,omitempty"` + AllOf []*Schema `protobuf:"bytes,24,rep,name=all_of,json=allOf,proto3" json:"all_of,omitempty"` + Properties *Properties `protobuf:"bytes,25,opt,name=properties,proto3" json:"properties,omitempty"` + Discriminator string `protobuf:"bytes,26,opt,name=discriminator,proto3" json:"discriminator,omitempty"` + ReadOnly bool `protobuf:"varint,27,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` + Xml *Xml `protobuf:"bytes,28,opt,name=xml,proto3" json:"xml,omitempty"` + ExternalDocs *ExternalDocs `protobuf:"bytes,29,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + Example *Any `protobuf:"bytes,30,opt,name=example,proto3" json:"example,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,31,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Schema) Reset() { + *x = Schema{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Schema) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Schema) ProtoMessage() {} + +func (x *Schema) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[50] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Schema.ProtoReflect.Descriptor instead. +func (*Schema) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{50} +} + +func (x *Schema) GetXRef() string { + if x != nil { + return x.XRef + } + return "" +} + +func (x *Schema) GetFormat() string { + if x != nil { + return x.Format + } + return "" +} + +func (x *Schema) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *Schema) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Schema) GetDefault() *Any { + if x != nil { + return x.Default + } + return nil +} + +func (x *Schema) GetMultipleOf() float64 { + if x != nil { + return x.MultipleOf + } + return 0 +} + +func (x *Schema) GetMaximum() float64 { + if x != nil { + return x.Maximum + } + return 0 +} + +func (x *Schema) GetExclusiveMaximum() bool { + if x != nil { + return x.ExclusiveMaximum + } + return false +} + +func (x *Schema) GetMinimum() float64 { + if x != nil { + return x.Minimum + } + return 0 +} + +func (x *Schema) GetExclusiveMinimum() bool { + if x != nil { + return x.ExclusiveMinimum + } + return false +} + +func (x *Schema) GetMaxLength() int64 { + if x != nil { + return x.MaxLength + } + return 0 +} + +func (x *Schema) GetMinLength() int64 { + if x != nil { + return x.MinLength + } + return 0 +} + +func (x *Schema) GetPattern() string { + if x != nil { + return x.Pattern + } + return "" +} + +func (x *Schema) GetMaxItems() int64 { + if x != nil { + return x.MaxItems + } + return 0 +} + +func (x *Schema) GetMinItems() int64 { + if x != nil { + return x.MinItems + } + return 0 +} + +func (x *Schema) GetUniqueItems() bool { + if x != nil { + return x.UniqueItems + } + return false +} + +func (x *Schema) GetMaxProperties() int64 { + if x != nil { + return x.MaxProperties + } + return 0 +} + +func (x *Schema) GetMinProperties() int64 { + if x != nil { + return x.MinProperties + } + return 0 +} + +func (x *Schema) GetRequired() []string { + if x != nil { + return x.Required + } + return nil +} + +func (x *Schema) GetEnum() []*Any { + if x != nil { + return x.Enum + } + return nil +} + +func (x *Schema) GetAdditionalProperties() *AdditionalPropertiesItem { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *Schema) GetType() *TypeItem { + if x != nil { + return x.Type + } + return nil +} + +func (x *Schema) GetItems() *ItemsItem { + if x != nil { + return x.Items + } + return nil +} + +func (x *Schema) GetAllOf() []*Schema { + if x != nil { + return x.AllOf + } + return nil +} + +func (x *Schema) GetProperties() *Properties { + if x != nil { + return x.Properties + } + return nil +} + +func (x *Schema) GetDiscriminator() string { + if x != nil { + return x.Discriminator + } + return "" +} + +func (x *Schema) GetReadOnly() bool { + if x != nil { + return x.ReadOnly + } + return false +} + +func (x *Schema) GetXml() *Xml { + if x != nil { + return x.Xml + } + return nil +} + +func (x *Schema) GetExternalDocs() *ExternalDocs { + if x != nil { + return x.ExternalDocs + } + return nil +} + +func (x *Schema) GetExample() *Any { + if x != nil { + return x.Example + } + return nil +} + +func (x *Schema) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type SchemaItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Oneof: + // *SchemaItem_Schema + // *SchemaItem_FileSchema + Oneof isSchemaItem_Oneof `protobuf_oneof:"oneof"` +} + +func (x *SchemaItem) Reset() { + *x = SchemaItem{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SchemaItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SchemaItem) ProtoMessage() {} + +func (x *SchemaItem) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[51] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SchemaItem.ProtoReflect.Descriptor instead. +func (*SchemaItem) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{51} +} + +func (m *SchemaItem) GetOneof() isSchemaItem_Oneof { + if m != nil { + return m.Oneof + } + return nil +} + +func (x *SchemaItem) GetSchema() *Schema { + if x, ok := x.GetOneof().(*SchemaItem_Schema); ok { + return x.Schema + } + return nil +} + +func (x *SchemaItem) GetFileSchema() *FileSchema { + if x, ok := x.GetOneof().(*SchemaItem_FileSchema); ok { + return x.FileSchema + } + return nil +} + +type isSchemaItem_Oneof interface { + isSchemaItem_Oneof() +} + +type SchemaItem_Schema struct { + Schema *Schema `protobuf:"bytes,1,opt,name=schema,proto3,oneof"` +} + +type SchemaItem_FileSchema struct { + FileSchema *FileSchema `protobuf:"bytes,2,opt,name=file_schema,json=fileSchema,proto3,oneof"` +} + +func (*SchemaItem_Schema) isSchemaItem_Oneof() {} + +func (*SchemaItem_FileSchema) isSchemaItem_Oneof() {} + +type SecurityDefinitions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdditionalProperties []*NamedSecurityDefinitionsItem `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *SecurityDefinitions) Reset() { + *x = SecurityDefinitions{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SecurityDefinitions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SecurityDefinitions) ProtoMessage() {} + +func (x *SecurityDefinitions) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[52] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SecurityDefinitions.ProtoReflect.Descriptor instead. +func (*SecurityDefinitions) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{52} +} + +func (x *SecurityDefinitions) GetAdditionalProperties() []*NamedSecurityDefinitionsItem { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +type SecurityDefinitionsItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Oneof: + // *SecurityDefinitionsItem_BasicAuthenticationSecurity + // *SecurityDefinitionsItem_ApiKeySecurity + // *SecurityDefinitionsItem_Oauth2ImplicitSecurity + // *SecurityDefinitionsItem_Oauth2PasswordSecurity + // *SecurityDefinitionsItem_Oauth2ApplicationSecurity + // *SecurityDefinitionsItem_Oauth2AccessCodeSecurity + Oneof isSecurityDefinitionsItem_Oneof `protobuf_oneof:"oneof"` +} + +func (x *SecurityDefinitionsItem) Reset() { + *x = SecurityDefinitionsItem{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SecurityDefinitionsItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SecurityDefinitionsItem) ProtoMessage() {} + +func (x *SecurityDefinitionsItem) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[53] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SecurityDefinitionsItem.ProtoReflect.Descriptor instead. +func (*SecurityDefinitionsItem) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{53} +} + +func (m *SecurityDefinitionsItem) GetOneof() isSecurityDefinitionsItem_Oneof { + if m != nil { + return m.Oneof + } + return nil +} + +func (x *SecurityDefinitionsItem) GetBasicAuthenticationSecurity() *BasicAuthenticationSecurity { + if x, ok := x.GetOneof().(*SecurityDefinitionsItem_BasicAuthenticationSecurity); ok { + return x.BasicAuthenticationSecurity + } + return nil +} + +func (x *SecurityDefinitionsItem) GetApiKeySecurity() *ApiKeySecurity { + if x, ok := x.GetOneof().(*SecurityDefinitionsItem_ApiKeySecurity); ok { + return x.ApiKeySecurity + } + return nil +} + +func (x *SecurityDefinitionsItem) GetOauth2ImplicitSecurity() *Oauth2ImplicitSecurity { + if x, ok := x.GetOneof().(*SecurityDefinitionsItem_Oauth2ImplicitSecurity); ok { + return x.Oauth2ImplicitSecurity + } + return nil +} + +func (x *SecurityDefinitionsItem) GetOauth2PasswordSecurity() *Oauth2PasswordSecurity { + if x, ok := x.GetOneof().(*SecurityDefinitionsItem_Oauth2PasswordSecurity); ok { + return x.Oauth2PasswordSecurity + } + return nil +} + +func (x *SecurityDefinitionsItem) GetOauth2ApplicationSecurity() *Oauth2ApplicationSecurity { + if x, ok := x.GetOneof().(*SecurityDefinitionsItem_Oauth2ApplicationSecurity); ok { + return x.Oauth2ApplicationSecurity + } + return nil +} + +func (x *SecurityDefinitionsItem) GetOauth2AccessCodeSecurity() *Oauth2AccessCodeSecurity { + if x, ok := x.GetOneof().(*SecurityDefinitionsItem_Oauth2AccessCodeSecurity); ok { + return x.Oauth2AccessCodeSecurity + } + return nil +} + +type isSecurityDefinitionsItem_Oneof interface { + isSecurityDefinitionsItem_Oneof() +} + +type SecurityDefinitionsItem_BasicAuthenticationSecurity struct { + BasicAuthenticationSecurity *BasicAuthenticationSecurity `protobuf:"bytes,1,opt,name=basic_authentication_security,json=basicAuthenticationSecurity,proto3,oneof"` +} + +type SecurityDefinitionsItem_ApiKeySecurity struct { + ApiKeySecurity *ApiKeySecurity `protobuf:"bytes,2,opt,name=api_key_security,json=apiKeySecurity,proto3,oneof"` +} + +type SecurityDefinitionsItem_Oauth2ImplicitSecurity struct { + Oauth2ImplicitSecurity *Oauth2ImplicitSecurity `protobuf:"bytes,3,opt,name=oauth2_implicit_security,json=oauth2ImplicitSecurity,proto3,oneof"` +} + +type SecurityDefinitionsItem_Oauth2PasswordSecurity struct { + Oauth2PasswordSecurity *Oauth2PasswordSecurity `protobuf:"bytes,4,opt,name=oauth2_password_security,json=oauth2PasswordSecurity,proto3,oneof"` +} + +type SecurityDefinitionsItem_Oauth2ApplicationSecurity struct { + Oauth2ApplicationSecurity *Oauth2ApplicationSecurity `protobuf:"bytes,5,opt,name=oauth2_application_security,json=oauth2ApplicationSecurity,proto3,oneof"` +} + +type SecurityDefinitionsItem_Oauth2AccessCodeSecurity struct { + Oauth2AccessCodeSecurity *Oauth2AccessCodeSecurity `protobuf:"bytes,6,opt,name=oauth2_access_code_security,json=oauth2AccessCodeSecurity,proto3,oneof"` +} + +func (*SecurityDefinitionsItem_BasicAuthenticationSecurity) isSecurityDefinitionsItem_Oneof() {} + +func (*SecurityDefinitionsItem_ApiKeySecurity) isSecurityDefinitionsItem_Oneof() {} + +func (*SecurityDefinitionsItem_Oauth2ImplicitSecurity) isSecurityDefinitionsItem_Oneof() {} + +func (*SecurityDefinitionsItem_Oauth2PasswordSecurity) isSecurityDefinitionsItem_Oneof() {} + +func (*SecurityDefinitionsItem_Oauth2ApplicationSecurity) isSecurityDefinitionsItem_Oneof() {} + +func (*SecurityDefinitionsItem_Oauth2AccessCodeSecurity) isSecurityDefinitionsItem_Oneof() {} + +type SecurityRequirement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdditionalProperties []*NamedStringArray `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *SecurityRequirement) Reset() { + *x = SecurityRequirement{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SecurityRequirement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SecurityRequirement) ProtoMessage() {} + +func (x *SecurityRequirement) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SecurityRequirement.ProtoReflect.Descriptor instead. +func (*SecurityRequirement) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{54} +} + +func (x *SecurityRequirement) GetAdditionalProperties() []*NamedStringArray { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +type StringArray struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []string `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"` +} + +func (x *StringArray) Reset() { + *x = StringArray{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StringArray) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StringArray) ProtoMessage() {} + +func (x *StringArray) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StringArray.ProtoReflect.Descriptor instead. +func (*StringArray) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{55} +} + +func (x *StringArray) GetValue() []string { + if x != nil { + return x.Value + } + return nil +} + +type Tag struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + ExternalDocs *ExternalDocs `protobuf:"bytes,3,opt,name=external_docs,json=externalDocs,proto3" json:"external_docs,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,4,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Tag) Reset() { + *x = Tag{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Tag) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Tag) ProtoMessage() {} + +func (x *Tag) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[56] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Tag.ProtoReflect.Descriptor instead. +func (*Tag) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{56} +} + +func (x *Tag) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Tag) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Tag) GetExternalDocs() *ExternalDocs { + if x != nil { + return x.ExternalDocs + } + return nil +} + +func (x *Tag) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +type TypeItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []string `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"` +} + +func (x *TypeItem) Reset() { + *x = TypeItem{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TypeItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TypeItem) ProtoMessage() {} + +func (x *TypeItem) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[57] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TypeItem.ProtoReflect.Descriptor instead. +func (*TypeItem) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{57} +} + +func (x *TypeItem) GetValue() []string { + if x != nil { + return x.Value + } + return nil +} + +// Any property starting with x- is valid. +type VendorExtension struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AdditionalProperties []*NamedAny `protobuf:"bytes,1,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *VendorExtension) Reset() { + *x = VendorExtension{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VendorExtension) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VendorExtension) ProtoMessage() {} + +func (x *VendorExtension) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[58] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VendorExtension.ProtoReflect.Descriptor instead. +func (*VendorExtension) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{58} +} + +func (x *VendorExtension) GetAdditionalProperties() []*NamedAny { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +type Xml struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` + Prefix string `protobuf:"bytes,3,opt,name=prefix,proto3" json:"prefix,omitempty"` + Attribute bool `protobuf:"varint,4,opt,name=attribute,proto3" json:"attribute,omitempty"` + Wrapped bool `protobuf:"varint,5,opt,name=wrapped,proto3" json:"wrapped,omitempty"` + VendorExtension []*NamedAny `protobuf:"bytes,6,rep,name=vendor_extension,json=vendorExtension,proto3" json:"vendor_extension,omitempty"` +} + +func (x *Xml) Reset() { + *x = Xml{} + if protoimpl.UnsafeEnabled { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Xml) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Xml) ProtoMessage() {} + +func (x *Xml) ProtoReflect() protoreflect.Message { + mi := &file_openapiv2_OpenAPIv2_proto_msgTypes[59] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Xml.ProtoReflect.Descriptor instead. +func (*Xml) Descriptor() ([]byte, []int) { + return file_openapiv2_OpenAPIv2_proto_rawDescGZIP(), []int{59} +} + +func (x *Xml) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Xml) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *Xml) GetPrefix() string { + if x != nil { + return x.Prefix + } + return "" +} + +func (x *Xml) GetAttribute() bool { + if x != nil { + return x.Attribute + } + return false +} + +func (x *Xml) GetWrapped() bool { + if x != nil { + return x.Wrapped + } + return false +} + +func (x *Xml) GetVendorExtension() []*NamedAny { + if x != nil { + return x.VendorExtension + } + return nil +} + +var File_openapiv2_OpenAPIv2_proto protoreflect.FileDescriptor + +var file_openapiv2_OpenAPIv2_proto_rawDesc = []byte{ + 0x0a, 0x19, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, 0x32, 0x2f, 0x4f, 0x70, 0x65, 0x6e, + 0x41, 0x50, 0x49, 0x76, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x6d, 0x0a, 0x18, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x2c, + 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1a, 0x0a, 0x07, + 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, + 0x07, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x6f, 0x6e, 0x65, 0x6f, + 0x66, 0x22, 0x45, 0x0a, 0x03, 0x41, 0x6e, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x79, 0x61, 0x6d, 0x6c, 0x22, 0xab, 0x01, 0x0a, 0x0e, 0x41, 0x70, 0x69, + 0x4b, 0x65, 0x79, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, + 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x94, 0x01, 0x0a, 0x1b, 0x42, 0x61, 0x73, 0x69, 0x63, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x10, + 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, + 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xde, 0x01, + 0x0a, 0x0d, 0x42, 0x6f, 0x64, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x3f, 0x0a, + 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, + 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x86, + 0x01, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, + 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, + 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, + 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x54, 0x0a, 0x07, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x12, 0x49, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, + 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x5b, 0x0a, + 0x0b, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x15, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xe8, 0x05, 0x0a, 0x08, 0x44, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x77, 0x61, 0x67, 0x67, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, + 0x72, 0x12, 0x24, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x62, + 0x61, 0x73, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x62, 0x61, 0x73, 0x65, 0x50, 0x61, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x05, 0x70, 0x61, + 0x74, 0x68, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x73, 0x52, 0x05, 0x70, 0x61, + 0x74, 0x68, 0x73, 0x12, 0x39, 0x0a, 0x0b, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x40, + 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x3d, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x12, + 0x3b, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x52, 0x0a, 0x14, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x13, 0x73, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x23, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x61, 0x67, 0x52, + 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x44, 0x6f, 0x63, 0x73, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, + 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x55, 0x0a, 0x08, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x12, 0x49, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, + 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x83, 0x01, 0x0a, + 0x0c, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x6c, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, + 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0xff, 0x02, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x29, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, + 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x3d, 0x0a, 0x0d, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x29, 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xab, 0x06, 0x0a, 0x1a, 0x46, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, + 0x61, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x75, 0x62, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x6e, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, + 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x31, 0x0a, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x29, 0x0a, + 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, + 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, + 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, + 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, + 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, + 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, + 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, + 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, + 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, + 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x04, 0x65, + 0x6e, 0x75, 0x6d, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, + 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, + 0x66, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, + 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0xab, 0x05, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x2b, 0x0a, 0x11, + 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x29, 0x0a, 0x07, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, + 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x69, + 0x6d, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, + 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x69, + 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, + 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x6d, + 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, + 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, + 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, + 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, + 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, + 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1f, 0x0a, 0x0b, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x11, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, + 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0xfd, 0x05, 0x0a, 0x18, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x53, 0x75, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1a, 0x0a, + 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x2b, + 0x0a, 0x11, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x29, 0x0a, 0x07, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, + 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, + 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, + 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, + 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, + 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, + 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, + 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, + 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69, + 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, + 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, + 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x04, 0x65, 0x6e, 0x75, + 0x6d, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1f, + 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, + 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, + 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x57, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x61, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa1, 0x02, 0x0a, 0x04, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x5f, 0x6f, 0x66, + 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x74, 0x65, 0x72, 0x6d, 0x73, 0x4f, 0x66, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2d, + 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x63, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x2d, 0x0a, + 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x63, 0x65, + 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x10, + 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, + 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x37, 0x0a, + 0x09, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x44, 0x0a, 0x0d, 0x4a, 0x73, 0x6f, 0x6e, 0x52, 0x65, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x11, 0x0a, 0x04, 0x5f, 0x72, 0x65, 0x66, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x52, 0x65, 0x66, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x70, 0x0a, 0x07, + 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, + 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x3f, 0x0a, + 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, + 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x45, + 0x0a, 0x08, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4b, 0x0a, 0x0b, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x51, 0x0a, 0x0e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4f, 0x0a, 0x0d, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x61, + 0x74, 0x68, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x74, 0x68, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4f, 0x0a, 0x0d, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x59, 0x0a, 0x12, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x4b, 0x0a, 0x0b, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x6d, 0x0a, 0x1c, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x37, + 0x0a, 0x0b, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x55, 0x0a, 0x10, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x41, 0x72, 0x72, 0x61, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb5, + 0x03, 0x0a, 0x10, 0x4e, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x1b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x75, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x48, 0x00, + 0x52, 0x18, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x53, 0x75, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x6c, 0x0a, 0x1e, 0x66, 0x6f, + 0x72, 0x6d, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x5f, 0x73, 0x75, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x46, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x53, 0x75, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x48, 0x00, 0x52, 0x1a, 0x66, 0x6f, + 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, + 0x75, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x62, 0x0a, 0x1a, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x62, 0x5f, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x75, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x48, 0x00, 0x52, 0x17, 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x53, 0x75, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x5f, 0x0a, 0x19, + 0x70, 0x61, 0x74, 0x68, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, + 0x75, 0x62, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x74, + 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x75, 0x62, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x48, 0x00, 0x52, 0x16, 0x70, 0x61, 0x74, 0x68, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x53, 0x75, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x42, 0x07, 0x0a, + 0x05, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0xa1, 0x02, 0x0a, 0x18, 0x4f, 0x61, 0x75, 0x74, 0x68, + 0x32, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x30, 0x0a, 0x06, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x2b, 0x0a, + 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, + 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, + 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, + 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xf5, 0x01, 0x0a, 0x19, 0x4f, + 0x61, 0x75, 0x74, 0x68, 0x32, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, + 0x12, 0x30, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x61, + 0x75, 0x74, 0x68, 0x32, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, + 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, + 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x82, 0x02, 0x0a, 0x16, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x49, 0x6d, 0x70, + 0x6c, 0x69, 0x63, 0x69, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, + 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, + 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, + 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xf2, 0x01, 0x0a, 0x16, 0x4f, 0x61, 0x75, 0x74, + 0x68, 0x32, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x53, 0x63, + 0x6f, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x55, 0x72, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x10, 0x76, + 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, + 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5c, 0x0a, 0x0c, + 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x4c, 0x0a, 0x15, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x9e, 0x04, 0x0a, 0x09, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, + 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, + 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, + 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x33, + 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x18, 0x0a, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, + 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3b, 0x0a, + 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x63, + 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, + 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0d, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, + 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa6, 0x01, 0x0a, 0x09, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x0e, 0x62, 0x6f, 0x64, + 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x42, + 0x6f, 0x64, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, + 0x62, 0x6f, 0x64, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x4c, 0x0a, + 0x12, 0x6e, 0x6f, 0x6e, 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x6e, 0x42, 0x6f, 0x64, 0x79, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x10, 0x6e, 0x6f, 0x6e, 0x42, 0x6f, + 0x64, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x42, 0x07, 0x0a, 0x05, 0x6f, + 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x67, 0x0a, 0x14, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x15, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x94, 0x01, + 0x0a, 0x0e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x49, 0x74, 0x65, 0x6d, + 0x12, 0x35, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x0e, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4a, 0x73, 0x6f, + 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x6a, 0x73, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x6f, + 0x6e, 0x65, 0x6f, 0x66, 0x22, 0xcf, 0x03, 0x0a, 0x08, 0x50, 0x61, 0x74, 0x68, 0x49, 0x74, 0x65, + 0x6d, 0x12, 0x11, 0x0a, 0x04, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x52, 0x65, 0x66, 0x12, 0x27, 0x0a, 0x03, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x03, 0x67, 0x65, 0x74, 0x12, 0x27, 0x0a, + 0x03, 0x70, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, + 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x03, 0x70, 0x75, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x70, 0x6f, 0x73, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x70, 0x6f, 0x73, + 0x74, 0x12, 0x2d, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x12, 0x2f, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x29, 0x0a, 0x04, 0x68, 0x65, 0x61, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x68, 0x65, 0x61, 0x64, 0x12, 0x2b, 0x0a, 0x05, + 0x70, 0x61, 0x74, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x61, 0x72, + 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, + 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xfb, 0x05, 0x0a, 0x16, 0x50, 0x61, 0x74, 0x68, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x75, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x31, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6d, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, + 0x29, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, + 0x79, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, + 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x78, + 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, + 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, + 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, + 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x61, + 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x69, 0x6e, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, + 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x23, 0x0a, + 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x65, 0x6e, + 0x75, 0x6d, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, + 0x66, 0x18, 0x15, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, + 0x65, 0x4f, 0x66, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x77, 0x0a, 0x05, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x3f, 0x0a, + 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, + 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, + 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x50, + 0x61, 0x74, 0x68, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x22, 0x92, 0x05, + 0x0a, 0x0f, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x31, 0x0a, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, + 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x29, 0x0a, + 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, + 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, + 0x6d, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, + 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, + 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, + 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, + 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, + 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, + 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, + 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x04, 0x65, + 0x6e, 0x75, 0x6d, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, + 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, + 0x66, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, + 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x5a, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x4c, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, + 0x65, 0x64, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa8, + 0x06, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x53, 0x75, 0x62, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x12, 0x29, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, + 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, + 0x6d, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, + 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x69, + 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, + 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x1d, 0x0a, + 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x1d, 0x0a, 0x0a, + 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x70, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x12, 0x23, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, + 0x79, 0x52, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, + 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x4f, 0x66, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, + 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x2d, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x07, + 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x52, + 0x08, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, + 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, + 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x65, 0x0a, 0x13, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x4e, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, + 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x14, 0x61, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4a, 0x73, 0x6f, + 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x6a, 0x73, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x6f, + 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x91, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x73, 0x12, 0x43, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, + 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, + 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xaf, 0x09, 0x0a, 0x06, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x12, 0x11, 0x0a, 0x04, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x52, 0x65, 0x66, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x6f, 0x66, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, + 0x4f, 0x66, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, + 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, + 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, + 0x76, 0x65, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x69, 0x6e, + 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x69, + 0x6d, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, + 0x5f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, + 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, + 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, + 0x1d, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x69, 0x6e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x18, + 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x5f, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, + 0x61, 0x78, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, + 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6d, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, + 0x13, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, + 0x23, 0x0a, 0x04, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, + 0x65, 0x6e, 0x75, 0x6d, 0x12, 0x59, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x15, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, + 0x28, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x05, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x29, 0x0a, 0x06, 0x61, 0x6c, 0x6c, 0x5f, 0x6f, 0x66, + 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x05, 0x61, 0x6c, 0x6c, 0x4f, + 0x66, 0x12, 0x36, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x0a, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x69, 0x73, + 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x72, 0x69, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x1b, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x21, 0x0a, 0x03, + 0x78, 0x6d, 0x6c, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x58, 0x6d, 0x6c, 0x52, 0x03, 0x78, 0x6d, 0x6c, 0x12, + 0x3d, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, + 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, + 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x29, + 0x0a, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x6e, 0x79, + 0x52, 0x07, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, + 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x1f, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, + 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x7e, 0x0a, 0x0a, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x48, 0x00, 0x52, 0x06, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x39, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6f, 0x70, + 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x42, 0x07, 0x0a, 0x05, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x74, 0x0a, 0x13, 0x53, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x5d, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x28, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, + 0x6d, 0x65, 0x64, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x22, 0xe9, 0x04, 0x0a, 0x17, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x44, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x6d, 0x0a, 0x1d, + 0x62, 0x61, 0x73, 0x69, 0x63, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, + 0x2e, 0x42, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x1b, + 0x62, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x46, 0x0a, 0x10, 0x61, + 0x70, 0x69, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x48, 0x00, 0x52, 0x0e, 0x61, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x12, 0x5e, 0x0a, 0x18, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x5f, 0x69, 0x6d, + 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x49, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, + 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x16, 0x6f, 0x61, 0x75, + 0x74, 0x68, 0x32, 0x49, 0x6d, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x12, 0x5e, 0x0a, 0x18, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x5f, 0x70, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x32, 0x2e, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x16, 0x6f, 0x61, 0x75, + 0x74, 0x68, 0x32, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x12, 0x67, 0x0a, 0x1b, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x5f, 0x61, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x41, 0x70, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x48, + 0x00, 0x52, 0x19, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x65, 0x0a, 0x1b, + 0x6f, 0x61, 0x75, 0x74, 0x68, 0x32, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6f, + 0x64, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4f, + 0x61, 0x75, 0x74, 0x68, 0x32, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x18, 0x6f, 0x61, 0x75, 0x74, 0x68, + 0x32, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x42, 0x07, 0x0a, 0x05, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x68, 0x0a, 0x13, + 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x51, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x72, 0x72, 0x61, 0x79, + 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x23, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x41, 0x72, 0x72, 0x61, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xbb, 0x01, 0x0a, 0x03, + 0x54, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0d, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x6f, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x44, 0x6f, 0x63, 0x73, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, + 0x6f, 0x72, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, + 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x20, 0x0a, 0x08, 0x54, 0x79, 0x70, + 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5c, 0x0a, 0x0f, 0x56, + 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x49, + 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x41, 0x6e, 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0xc8, 0x01, 0x0a, 0x03, 0x58, 0x6d, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x12, 0x3f, 0x0a, 0x10, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x64, + 0x41, 0x6e, 0x79, 0x52, 0x0f, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x3c, 0x0a, 0x0e, 0x6f, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x65, 0x6e, + 0x61, 0x70, 0x69, 0x5f, 0x76, 0x32, 0x42, 0x0c, 0x4f, 0x70, 0x65, 0x6e, 0x41, 0x50, 0x49, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x14, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x76, + 0x32, 0x3b, 0x6f, 0x70, 0x65, 0x6e, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x4f, + 0x41, 0x53, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_openapiv2_OpenAPIv2_proto_rawDescOnce sync.Once + file_openapiv2_OpenAPIv2_proto_rawDescData = file_openapiv2_OpenAPIv2_proto_rawDesc +) + +func file_openapiv2_OpenAPIv2_proto_rawDescGZIP() []byte { + file_openapiv2_OpenAPIv2_proto_rawDescOnce.Do(func() { + file_openapiv2_OpenAPIv2_proto_rawDescData = protoimpl.X.CompressGZIP(file_openapiv2_OpenAPIv2_proto_rawDescData) + }) + return file_openapiv2_OpenAPIv2_proto_rawDescData +} + +var file_openapiv2_OpenAPIv2_proto_msgTypes = make([]protoimpl.MessageInfo, 60) +var file_openapiv2_OpenAPIv2_proto_goTypes = []interface{}{ + (*AdditionalPropertiesItem)(nil), // 0: openapi.v2.AdditionalPropertiesItem + (*Any)(nil), // 1: openapi.v2.Any + (*ApiKeySecurity)(nil), // 2: openapi.v2.ApiKeySecurity + (*BasicAuthenticationSecurity)(nil), // 3: openapi.v2.BasicAuthenticationSecurity + (*BodyParameter)(nil), // 4: openapi.v2.BodyParameter + (*Contact)(nil), // 5: openapi.v2.Contact + (*Default)(nil), // 6: openapi.v2.Default + (*Definitions)(nil), // 7: openapi.v2.Definitions + (*Document)(nil), // 8: openapi.v2.Document + (*Examples)(nil), // 9: openapi.v2.Examples + (*ExternalDocs)(nil), // 10: openapi.v2.ExternalDocs + (*FileSchema)(nil), // 11: openapi.v2.FileSchema + (*FormDataParameterSubSchema)(nil), // 12: openapi.v2.FormDataParameterSubSchema + (*Header)(nil), // 13: openapi.v2.Header + (*HeaderParameterSubSchema)(nil), // 14: openapi.v2.HeaderParameterSubSchema + (*Headers)(nil), // 15: openapi.v2.Headers + (*Info)(nil), // 16: openapi.v2.Info + (*ItemsItem)(nil), // 17: openapi.v2.ItemsItem + (*JsonReference)(nil), // 18: openapi.v2.JsonReference + (*License)(nil), // 19: openapi.v2.License + (*NamedAny)(nil), // 20: openapi.v2.NamedAny + (*NamedHeader)(nil), // 21: openapi.v2.NamedHeader + (*NamedParameter)(nil), // 22: openapi.v2.NamedParameter + (*NamedPathItem)(nil), // 23: openapi.v2.NamedPathItem + (*NamedResponse)(nil), // 24: openapi.v2.NamedResponse + (*NamedResponseValue)(nil), // 25: openapi.v2.NamedResponseValue + (*NamedSchema)(nil), // 26: openapi.v2.NamedSchema + (*NamedSecurityDefinitionsItem)(nil), // 27: openapi.v2.NamedSecurityDefinitionsItem + (*NamedString)(nil), // 28: openapi.v2.NamedString + (*NamedStringArray)(nil), // 29: openapi.v2.NamedStringArray + (*NonBodyParameter)(nil), // 30: openapi.v2.NonBodyParameter + (*Oauth2AccessCodeSecurity)(nil), // 31: openapi.v2.Oauth2AccessCodeSecurity + (*Oauth2ApplicationSecurity)(nil), // 32: openapi.v2.Oauth2ApplicationSecurity + (*Oauth2ImplicitSecurity)(nil), // 33: openapi.v2.Oauth2ImplicitSecurity + (*Oauth2PasswordSecurity)(nil), // 34: openapi.v2.Oauth2PasswordSecurity + (*Oauth2Scopes)(nil), // 35: openapi.v2.Oauth2Scopes + (*Operation)(nil), // 36: openapi.v2.Operation + (*Parameter)(nil), // 37: openapi.v2.Parameter + (*ParameterDefinitions)(nil), // 38: openapi.v2.ParameterDefinitions + (*ParametersItem)(nil), // 39: openapi.v2.ParametersItem + (*PathItem)(nil), // 40: openapi.v2.PathItem + (*PathParameterSubSchema)(nil), // 41: openapi.v2.PathParameterSubSchema + (*Paths)(nil), // 42: openapi.v2.Paths + (*PrimitivesItems)(nil), // 43: openapi.v2.PrimitivesItems + (*Properties)(nil), // 44: openapi.v2.Properties + (*QueryParameterSubSchema)(nil), // 45: openapi.v2.QueryParameterSubSchema + (*Response)(nil), // 46: openapi.v2.Response + (*ResponseDefinitions)(nil), // 47: openapi.v2.ResponseDefinitions + (*ResponseValue)(nil), // 48: openapi.v2.ResponseValue + (*Responses)(nil), // 49: openapi.v2.Responses + (*Schema)(nil), // 50: openapi.v2.Schema + (*SchemaItem)(nil), // 51: openapi.v2.SchemaItem + (*SecurityDefinitions)(nil), // 52: openapi.v2.SecurityDefinitions + (*SecurityDefinitionsItem)(nil), // 53: openapi.v2.SecurityDefinitionsItem + (*SecurityRequirement)(nil), // 54: openapi.v2.SecurityRequirement + (*StringArray)(nil), // 55: openapi.v2.StringArray + (*Tag)(nil), // 56: openapi.v2.Tag + (*TypeItem)(nil), // 57: openapi.v2.TypeItem + (*VendorExtension)(nil), // 58: openapi.v2.VendorExtension + (*Xml)(nil), // 59: openapi.v2.Xml + (*any.Any)(nil), // 60: google.protobuf.Any +} +var file_openapiv2_OpenAPIv2_proto_depIdxs = []int32{ + 50, // 0: openapi.v2.AdditionalPropertiesItem.schema:type_name -> openapi.v2.Schema + 60, // 1: openapi.v2.Any.value:type_name -> google.protobuf.Any + 20, // 2: openapi.v2.ApiKeySecurity.vendor_extension:type_name -> openapi.v2.NamedAny + 20, // 3: openapi.v2.BasicAuthenticationSecurity.vendor_extension:type_name -> openapi.v2.NamedAny + 50, // 4: openapi.v2.BodyParameter.schema:type_name -> openapi.v2.Schema + 20, // 5: openapi.v2.BodyParameter.vendor_extension:type_name -> openapi.v2.NamedAny + 20, // 6: openapi.v2.Contact.vendor_extension:type_name -> openapi.v2.NamedAny + 20, // 7: openapi.v2.Default.additional_properties:type_name -> openapi.v2.NamedAny + 26, // 8: openapi.v2.Definitions.additional_properties:type_name -> openapi.v2.NamedSchema + 16, // 9: openapi.v2.Document.info:type_name -> openapi.v2.Info + 42, // 10: openapi.v2.Document.paths:type_name -> openapi.v2.Paths + 7, // 11: openapi.v2.Document.definitions:type_name -> openapi.v2.Definitions + 38, // 12: openapi.v2.Document.parameters:type_name -> openapi.v2.ParameterDefinitions + 47, // 13: openapi.v2.Document.responses:type_name -> openapi.v2.ResponseDefinitions + 54, // 14: openapi.v2.Document.security:type_name -> openapi.v2.SecurityRequirement + 52, // 15: openapi.v2.Document.security_definitions:type_name -> openapi.v2.SecurityDefinitions + 56, // 16: openapi.v2.Document.tags:type_name -> openapi.v2.Tag + 10, // 17: openapi.v2.Document.external_docs:type_name -> openapi.v2.ExternalDocs + 20, // 18: openapi.v2.Document.vendor_extension:type_name -> openapi.v2.NamedAny + 20, // 19: openapi.v2.Examples.additional_properties:type_name -> openapi.v2.NamedAny + 20, // 20: openapi.v2.ExternalDocs.vendor_extension:type_name -> openapi.v2.NamedAny + 1, // 21: openapi.v2.FileSchema.default:type_name -> openapi.v2.Any + 10, // 22: openapi.v2.FileSchema.external_docs:type_name -> openapi.v2.ExternalDocs + 1, // 23: openapi.v2.FileSchema.example:type_name -> openapi.v2.Any + 20, // 24: openapi.v2.FileSchema.vendor_extension:type_name -> openapi.v2.NamedAny + 43, // 25: openapi.v2.FormDataParameterSubSchema.items:type_name -> openapi.v2.PrimitivesItems + 1, // 26: openapi.v2.FormDataParameterSubSchema.default:type_name -> openapi.v2.Any + 1, // 27: openapi.v2.FormDataParameterSubSchema.enum:type_name -> openapi.v2.Any + 20, // 28: openapi.v2.FormDataParameterSubSchema.vendor_extension:type_name -> openapi.v2.NamedAny + 43, // 29: openapi.v2.Header.items:type_name -> openapi.v2.PrimitivesItems + 1, // 30: openapi.v2.Header.default:type_name -> openapi.v2.Any + 1, // 31: openapi.v2.Header.enum:type_name -> openapi.v2.Any + 20, // 32: openapi.v2.Header.vendor_extension:type_name -> openapi.v2.NamedAny + 43, // 33: openapi.v2.HeaderParameterSubSchema.items:type_name -> openapi.v2.PrimitivesItems + 1, // 34: openapi.v2.HeaderParameterSubSchema.default:type_name -> openapi.v2.Any + 1, // 35: openapi.v2.HeaderParameterSubSchema.enum:type_name -> openapi.v2.Any + 20, // 36: openapi.v2.HeaderParameterSubSchema.vendor_extension:type_name -> openapi.v2.NamedAny + 21, // 37: openapi.v2.Headers.additional_properties:type_name -> openapi.v2.NamedHeader + 5, // 38: openapi.v2.Info.contact:type_name -> openapi.v2.Contact + 19, // 39: openapi.v2.Info.license:type_name -> openapi.v2.License + 20, // 40: openapi.v2.Info.vendor_extension:type_name -> openapi.v2.NamedAny + 50, // 41: openapi.v2.ItemsItem.schema:type_name -> openapi.v2.Schema + 20, // 42: openapi.v2.License.vendor_extension:type_name -> openapi.v2.NamedAny + 1, // 43: openapi.v2.NamedAny.value:type_name -> openapi.v2.Any + 13, // 44: openapi.v2.NamedHeader.value:type_name -> openapi.v2.Header + 37, // 45: openapi.v2.NamedParameter.value:type_name -> openapi.v2.Parameter + 40, // 46: openapi.v2.NamedPathItem.value:type_name -> openapi.v2.PathItem + 46, // 47: openapi.v2.NamedResponse.value:type_name -> openapi.v2.Response + 48, // 48: openapi.v2.NamedResponseValue.value:type_name -> openapi.v2.ResponseValue + 50, // 49: openapi.v2.NamedSchema.value:type_name -> openapi.v2.Schema + 53, // 50: openapi.v2.NamedSecurityDefinitionsItem.value:type_name -> openapi.v2.SecurityDefinitionsItem + 55, // 51: openapi.v2.NamedStringArray.value:type_name -> openapi.v2.StringArray + 14, // 52: openapi.v2.NonBodyParameter.header_parameter_sub_schema:type_name -> openapi.v2.HeaderParameterSubSchema + 12, // 53: openapi.v2.NonBodyParameter.form_data_parameter_sub_schema:type_name -> openapi.v2.FormDataParameterSubSchema + 45, // 54: openapi.v2.NonBodyParameter.query_parameter_sub_schema:type_name -> openapi.v2.QueryParameterSubSchema + 41, // 55: openapi.v2.NonBodyParameter.path_parameter_sub_schema:type_name -> openapi.v2.PathParameterSubSchema + 35, // 56: openapi.v2.Oauth2AccessCodeSecurity.scopes:type_name -> openapi.v2.Oauth2Scopes + 20, // 57: openapi.v2.Oauth2AccessCodeSecurity.vendor_extension:type_name -> openapi.v2.NamedAny + 35, // 58: openapi.v2.Oauth2ApplicationSecurity.scopes:type_name -> openapi.v2.Oauth2Scopes + 20, // 59: openapi.v2.Oauth2ApplicationSecurity.vendor_extension:type_name -> openapi.v2.NamedAny + 35, // 60: openapi.v2.Oauth2ImplicitSecurity.scopes:type_name -> openapi.v2.Oauth2Scopes + 20, // 61: openapi.v2.Oauth2ImplicitSecurity.vendor_extension:type_name -> openapi.v2.NamedAny + 35, // 62: openapi.v2.Oauth2PasswordSecurity.scopes:type_name -> openapi.v2.Oauth2Scopes + 20, // 63: openapi.v2.Oauth2PasswordSecurity.vendor_extension:type_name -> openapi.v2.NamedAny + 28, // 64: openapi.v2.Oauth2Scopes.additional_properties:type_name -> openapi.v2.NamedString + 10, // 65: openapi.v2.Operation.external_docs:type_name -> openapi.v2.ExternalDocs + 39, // 66: openapi.v2.Operation.parameters:type_name -> openapi.v2.ParametersItem + 49, // 67: openapi.v2.Operation.responses:type_name -> openapi.v2.Responses + 54, // 68: openapi.v2.Operation.security:type_name -> openapi.v2.SecurityRequirement + 20, // 69: openapi.v2.Operation.vendor_extension:type_name -> openapi.v2.NamedAny + 4, // 70: openapi.v2.Parameter.body_parameter:type_name -> openapi.v2.BodyParameter + 30, // 71: openapi.v2.Parameter.non_body_parameter:type_name -> openapi.v2.NonBodyParameter + 22, // 72: openapi.v2.ParameterDefinitions.additional_properties:type_name -> openapi.v2.NamedParameter + 37, // 73: openapi.v2.ParametersItem.parameter:type_name -> openapi.v2.Parameter + 18, // 74: openapi.v2.ParametersItem.json_reference:type_name -> openapi.v2.JsonReference + 36, // 75: openapi.v2.PathItem.get:type_name -> openapi.v2.Operation + 36, // 76: openapi.v2.PathItem.put:type_name -> openapi.v2.Operation + 36, // 77: openapi.v2.PathItem.post:type_name -> openapi.v2.Operation + 36, // 78: openapi.v2.PathItem.delete:type_name -> openapi.v2.Operation + 36, // 79: openapi.v2.PathItem.options:type_name -> openapi.v2.Operation + 36, // 80: openapi.v2.PathItem.head:type_name -> openapi.v2.Operation + 36, // 81: openapi.v2.PathItem.patch:type_name -> openapi.v2.Operation + 39, // 82: openapi.v2.PathItem.parameters:type_name -> openapi.v2.ParametersItem + 20, // 83: openapi.v2.PathItem.vendor_extension:type_name -> openapi.v2.NamedAny + 43, // 84: openapi.v2.PathParameterSubSchema.items:type_name -> openapi.v2.PrimitivesItems + 1, // 85: openapi.v2.PathParameterSubSchema.default:type_name -> openapi.v2.Any + 1, // 86: openapi.v2.PathParameterSubSchema.enum:type_name -> openapi.v2.Any + 20, // 87: openapi.v2.PathParameterSubSchema.vendor_extension:type_name -> openapi.v2.NamedAny + 20, // 88: openapi.v2.Paths.vendor_extension:type_name -> openapi.v2.NamedAny + 23, // 89: openapi.v2.Paths.path:type_name -> openapi.v2.NamedPathItem + 43, // 90: openapi.v2.PrimitivesItems.items:type_name -> openapi.v2.PrimitivesItems + 1, // 91: openapi.v2.PrimitivesItems.default:type_name -> openapi.v2.Any + 1, // 92: openapi.v2.PrimitivesItems.enum:type_name -> openapi.v2.Any + 20, // 93: openapi.v2.PrimitivesItems.vendor_extension:type_name -> openapi.v2.NamedAny + 26, // 94: openapi.v2.Properties.additional_properties:type_name -> openapi.v2.NamedSchema + 43, // 95: openapi.v2.QueryParameterSubSchema.items:type_name -> openapi.v2.PrimitivesItems + 1, // 96: openapi.v2.QueryParameterSubSchema.default:type_name -> openapi.v2.Any + 1, // 97: openapi.v2.QueryParameterSubSchema.enum:type_name -> openapi.v2.Any + 20, // 98: openapi.v2.QueryParameterSubSchema.vendor_extension:type_name -> openapi.v2.NamedAny + 51, // 99: openapi.v2.Response.schema:type_name -> openapi.v2.SchemaItem + 15, // 100: openapi.v2.Response.headers:type_name -> openapi.v2.Headers + 9, // 101: openapi.v2.Response.examples:type_name -> openapi.v2.Examples + 20, // 102: openapi.v2.Response.vendor_extension:type_name -> openapi.v2.NamedAny + 24, // 103: openapi.v2.ResponseDefinitions.additional_properties:type_name -> openapi.v2.NamedResponse + 46, // 104: openapi.v2.ResponseValue.response:type_name -> openapi.v2.Response + 18, // 105: openapi.v2.ResponseValue.json_reference:type_name -> openapi.v2.JsonReference + 25, // 106: openapi.v2.Responses.response_code:type_name -> openapi.v2.NamedResponseValue + 20, // 107: openapi.v2.Responses.vendor_extension:type_name -> openapi.v2.NamedAny + 1, // 108: openapi.v2.Schema.default:type_name -> openapi.v2.Any + 1, // 109: openapi.v2.Schema.enum:type_name -> openapi.v2.Any + 0, // 110: openapi.v2.Schema.additional_properties:type_name -> openapi.v2.AdditionalPropertiesItem + 57, // 111: openapi.v2.Schema.type:type_name -> openapi.v2.TypeItem + 17, // 112: openapi.v2.Schema.items:type_name -> openapi.v2.ItemsItem + 50, // 113: openapi.v2.Schema.all_of:type_name -> openapi.v2.Schema + 44, // 114: openapi.v2.Schema.properties:type_name -> openapi.v2.Properties + 59, // 115: openapi.v2.Schema.xml:type_name -> openapi.v2.Xml + 10, // 116: openapi.v2.Schema.external_docs:type_name -> openapi.v2.ExternalDocs + 1, // 117: openapi.v2.Schema.example:type_name -> openapi.v2.Any + 20, // 118: openapi.v2.Schema.vendor_extension:type_name -> openapi.v2.NamedAny + 50, // 119: openapi.v2.SchemaItem.schema:type_name -> openapi.v2.Schema + 11, // 120: openapi.v2.SchemaItem.file_schema:type_name -> openapi.v2.FileSchema + 27, // 121: openapi.v2.SecurityDefinitions.additional_properties:type_name -> openapi.v2.NamedSecurityDefinitionsItem + 3, // 122: openapi.v2.SecurityDefinitionsItem.basic_authentication_security:type_name -> openapi.v2.BasicAuthenticationSecurity + 2, // 123: openapi.v2.SecurityDefinitionsItem.api_key_security:type_name -> openapi.v2.ApiKeySecurity + 33, // 124: openapi.v2.SecurityDefinitionsItem.oauth2_implicit_security:type_name -> openapi.v2.Oauth2ImplicitSecurity + 34, // 125: openapi.v2.SecurityDefinitionsItem.oauth2_password_security:type_name -> openapi.v2.Oauth2PasswordSecurity + 32, // 126: openapi.v2.SecurityDefinitionsItem.oauth2_application_security:type_name -> openapi.v2.Oauth2ApplicationSecurity + 31, // 127: openapi.v2.SecurityDefinitionsItem.oauth2_access_code_security:type_name -> openapi.v2.Oauth2AccessCodeSecurity + 29, // 128: openapi.v2.SecurityRequirement.additional_properties:type_name -> openapi.v2.NamedStringArray + 10, // 129: openapi.v2.Tag.external_docs:type_name -> openapi.v2.ExternalDocs + 20, // 130: openapi.v2.Tag.vendor_extension:type_name -> openapi.v2.NamedAny + 20, // 131: openapi.v2.VendorExtension.additional_properties:type_name -> openapi.v2.NamedAny + 20, // 132: openapi.v2.Xml.vendor_extension:type_name -> openapi.v2.NamedAny + 133, // [133:133] is the sub-list for method output_type + 133, // [133:133] is the sub-list for method input_type + 133, // [133:133] is the sub-list for extension type_name + 133, // [133:133] is the sub-list for extension extendee + 0, // [0:133] is the sub-list for field type_name +} + +func init() { file_openapiv2_OpenAPIv2_proto_init() } +func file_openapiv2_OpenAPIv2_proto_init() { + if File_openapiv2_OpenAPIv2_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_openapiv2_OpenAPIv2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AdditionalPropertiesItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Any); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApiKeySecurity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BasicAuthenticationSecurity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BodyParameter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Contact); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Default); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Definitions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Document); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Examples); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExternalDocs); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FileSchema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FormDataParameterSubSchema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Header); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HeaderParameterSubSchema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Headers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Info); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ItemsItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JsonReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*License); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamedAny); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamedHeader); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamedParameter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamedPathItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamedResponseValue); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamedSchema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamedSecurityDefinitionsItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamedString); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamedStringArray); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NonBodyParameter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Oauth2AccessCodeSecurity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Oauth2ApplicationSecurity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Oauth2ImplicitSecurity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Oauth2PasswordSecurity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Oauth2Scopes); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Operation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Parameter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ParameterDefinitions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ParametersItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PathItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PathParameterSubSchema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Paths); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrimitivesItems); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Properties); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryParameterSubSchema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResponseDefinitions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResponseValue); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Responses); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Schema); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SchemaItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SecurityDefinitions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SecurityDefinitionsItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SecurityRequirement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StringArray); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Tag); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TypeItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VendorExtension); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Xml); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_openapiv2_OpenAPIv2_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*AdditionalPropertiesItem_Schema)(nil), + (*AdditionalPropertiesItem_Boolean)(nil), + } + file_openapiv2_OpenAPIv2_proto_msgTypes[30].OneofWrappers = []interface{}{ + (*NonBodyParameter_HeaderParameterSubSchema)(nil), + (*NonBodyParameter_FormDataParameterSubSchema)(nil), + (*NonBodyParameter_QueryParameterSubSchema)(nil), + (*NonBodyParameter_PathParameterSubSchema)(nil), + } + file_openapiv2_OpenAPIv2_proto_msgTypes[37].OneofWrappers = []interface{}{ + (*Parameter_BodyParameter)(nil), + (*Parameter_NonBodyParameter)(nil), + } + file_openapiv2_OpenAPIv2_proto_msgTypes[39].OneofWrappers = []interface{}{ + (*ParametersItem_Parameter)(nil), + (*ParametersItem_JsonReference)(nil), + } + file_openapiv2_OpenAPIv2_proto_msgTypes[48].OneofWrappers = []interface{}{ + (*ResponseValue_Response)(nil), + (*ResponseValue_JsonReference)(nil), + } + file_openapiv2_OpenAPIv2_proto_msgTypes[51].OneofWrappers = []interface{}{ + (*SchemaItem_Schema)(nil), + (*SchemaItem_FileSchema)(nil), + } + file_openapiv2_OpenAPIv2_proto_msgTypes[53].OneofWrappers = []interface{}{ + (*SecurityDefinitionsItem_BasicAuthenticationSecurity)(nil), + (*SecurityDefinitionsItem_ApiKeySecurity)(nil), + (*SecurityDefinitionsItem_Oauth2ImplicitSecurity)(nil), + (*SecurityDefinitionsItem_Oauth2PasswordSecurity)(nil), + (*SecurityDefinitionsItem_Oauth2ApplicationSecurity)(nil), + (*SecurityDefinitionsItem_Oauth2AccessCodeSecurity)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_openapiv2_OpenAPIv2_proto_rawDesc, + NumEnums: 0, + NumMessages: 60, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_openapiv2_OpenAPIv2_proto_goTypes, + DependencyIndexes: file_openapiv2_OpenAPIv2_proto_depIdxs, + MessageInfos: file_openapiv2_OpenAPIv2_proto_msgTypes, + }.Build() + File_openapiv2_OpenAPIv2_proto = out.File + file_openapiv2_OpenAPIv2_proto_rawDesc = nil + file_openapiv2_OpenAPIv2_proto_goTypes = nil + file_openapiv2_OpenAPIv2_proto_depIdxs = nil +} diff --git a/vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.proto b/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.proto similarity index 99% rename from vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.proto rename to vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.proto index 557c8807..00ac1b0a 100644 --- a/vendor/github.com/googleapis/gnostic/OpenAPIv2/OpenAPIv2.proto +++ b/vendor/github.com/googleapis/gnostic/openapiv2/OpenAPIv2.proto @@ -1,4 +1,4 @@ -// Copyright 2017 Google Inc. All Rights Reserved. +// Copyright 2020 Google LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -41,6 +41,9 @@ option java_package = "org.openapi_v2"; // the future. 'GPB' is reserved for the protocol buffer implementation itself. option objc_class_prefix = "OAS"; +// The Go package name. +option go_package = "openapiv2;openapi_v2"; + message AdditionalPropertiesItem { oneof oneof { Schema schema = 1; @@ -553,7 +556,7 @@ message Response { repeated NamedAny vendor_extension = 5; } -// One or more JSON representations for parameters +// One or more JSON representations for responses message ResponseDefinitions { repeated NamedResponse additional_properties = 1; } diff --git a/vendor/github.com/googleapis/gnostic/openapiv2/README.md b/vendor/github.com/googleapis/gnostic/openapiv2/README.md new file mode 100644 index 00000000..5276128d --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/openapiv2/README.md @@ -0,0 +1,14 @@ +# OpenAPI v2 Protocol Buffer Models + +This directory contains a Protocol Buffer-language model and related code for +supporting OpenAPI v2. + +Gnostic applications and plugins can use OpenAPIv2.proto to generate Protocol +Buffer support code for their preferred languages. + +OpenAPIv2.go is used by Gnostic to read JSON and YAML OpenAPI descriptions into +the Protocol Buffer-based datastructures generated from OpenAPIv2.proto. + +OpenAPIv2.proto and OpenAPIv2.go are generated by the Gnostic compiler +generator, and OpenAPIv2.pb.go is generated by protoc, the Protocol Buffer +compiler, and protoc-gen-go, the Protocol Buffer Go code generation plugin. diff --git a/vendor/github.com/googleapis/gnostic/openapiv2/document.go b/vendor/github.com/googleapis/gnostic/openapiv2/document.go new file mode 100644 index 00000000..ddeed5c8 --- /dev/null +++ b/vendor/github.com/googleapis/gnostic/openapiv2/document.go @@ -0,0 +1,26 @@ +// Copyright 2020 Google LLC. All Rights Reserved. +// +// 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 openapi_v2 + +import "github.com/googleapis/gnostic/compiler" + +// ParseDocument reads an OpenAPI v2 description from a YAML/JSON representation. +func ParseDocument(b []byte) (*Document, error) { + info, err := compiler.ReadInfoFromBytes("", b) + if err != nil { + return nil, err + } + return NewDocument(info.Content[0], compiler.NewContextWithExtensions("$root", nil, nil)) +} diff --git a/vendor/github.com/googleapis/gnostic/OpenAPIv2/openapi-2.0.json b/vendor/github.com/googleapis/gnostic/openapiv2/openapi-2.0.json similarity index 99% rename from vendor/github.com/googleapis/gnostic/OpenAPIv2/openapi-2.0.json rename to vendor/github.com/googleapis/gnostic/openapiv2/openapi-2.0.json index 2815a26e..afa12b79 100644 --- a/vendor/github.com/googleapis/gnostic/OpenAPIv2/openapi-2.0.json +++ b/vendor/github.com/googleapis/gnostic/openapiv2/openapi-2.0.json @@ -203,7 +203,7 @@ "additionalProperties": { "$ref": "#/definitions/response" }, - "description": "One or more JSON representations for parameters" + "description": "One or more JSON representations for responses" }, "externalDocs": { "type": "object", @@ -1607,4 +1607,4 @@ } } } -} +} \ No newline at end of file diff --git a/vendor/github.com/imdario/mergo/README.md b/vendor/github.com/imdario/mergo/README.md index 02fc81e0..075b4d78 100644 --- a/vendor/github.com/imdario/mergo/README.md +++ b/vendor/github.com/imdario/mergo/README.md @@ -2,6 +2,8 @@ A helper to merge structs and maps in Golang. Useful for configuration default values, avoiding messy if-statements. +Mergo merges same-type structs and maps by setting default values in zero-value fields. Mergo won't merge unexported (private) fields. It will do recursively any exported one. It also won't merge structs inside maps (because they are not addressable using Go reflection). + Also a lovely [comune](http://en.wikipedia.org/wiki/Mergo) (municipality) in the Province of Ancona in the Italian region of Marche. ## Status @@ -9,36 +11,37 @@ Also a lovely [comune](http://en.wikipedia.org/wiki/Mergo) (municipality) in the It is ready for production use. [It is used in several projects by Docker, Google, The Linux Foundation, VMWare, Shopify, etc](https://github.com/imdario/mergo#mergo-in-the-wild). [![GoDoc][3]][4] -[![GoCard][5]][6] +[![GitHub release][5]][6] +[![GoCard][7]][8] [![Build Status][1]][2] -[![Coverage Status][7]][8] -[![Sourcegraph][9]][10] +[![Coverage Status][9]][10] +[![Sourcegraph][11]][12] [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fimdario%2Fmergo.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fimdario%2Fmergo?ref=badge_shield) [1]: https://travis-ci.org/imdario/mergo.png [2]: https://travis-ci.org/imdario/mergo [3]: https://godoc.org/github.com/imdario/mergo?status.svg [4]: https://godoc.org/github.com/imdario/mergo -[5]: https://goreportcard.com/badge/imdario/mergo -[6]: https://goreportcard.com/report/github.com/imdario/mergo -[7]: https://coveralls.io/repos/github/imdario/mergo/badge.svg?branch=master -[8]: https://coveralls.io/github/imdario/mergo?branch=master -[9]: https://sourcegraph.com/github.com/imdario/mergo/-/badge.svg -[10]: https://sourcegraph.com/github.com/imdario/mergo?badge - -### Latest release - -[Release v0.3.7](https://github.com/imdario/mergo/releases/tag/v0.3.7). +[5]: https://img.shields.io/github/release/imdario/mergo.svg +[6]: https://github.com/imdario/mergo/releases +[7]: https://goreportcard.com/badge/imdario/mergo +[8]: https://goreportcard.com/report/github.com/imdario/mergo +[9]: https://coveralls.io/repos/github/imdario/mergo/badge.svg?branch=master +[10]: https://coveralls.io/github/imdario/mergo?branch=master +[11]: https://sourcegraph.com/github.com/imdario/mergo/-/badge.svg +[12]: https://sourcegraph.com/github.com/imdario/mergo?badge ### Important note -Please keep in mind that in [0.3.2](//github.com/imdario/mergo/releases/tag/0.3.2) Mergo changed `Merge()`and `Map()` signatures to support [transformers](#transformers). An optional/variadic argument has been added, so it won't break existing code. +Please keep in mind that a problematic PR broke [0.3.9](//github.com/imdario/mergo/releases/tag/0.3.9). I reverted it in [0.3.10](//github.com/imdario/mergo/releases/tag/0.3.10), and I consider it stable but not bug-free. Also, this version adds suppot for go modules. -If you were using Mergo **before** April 6th 2015, please check your project works as intended after updating your local copy with ```go get -u github.com/imdario/mergo```. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause (I hope it won't!) in existing projects after the change (release 0.2.0). +Keep in mind that in [0.3.2](//github.com/imdario/mergo/releases/tag/0.3.2), Mergo changed `Merge()`and `Map()` signatures to support [transformers](#transformers). I added an optional/variadic argument so that it won't break the existing code. + +If you were using Mergo before April 6th, 2015, please check your project works as intended after updating your local copy with ```go get -u github.com/imdario/mergo```. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause in existing projects after the change (release 0.2.0). ### Donations -If Mergo is useful to you, consider buying me a coffee, a beer or making a monthly donation so I can keep building great free software. :heart_eyes: +If Mergo is useful to you, consider buying me a coffee, a beer, or making a monthly donation to allow me to keep building great free software. :heart_eyes: Buy Me a Coffee at ko-fi.com [![Beerpay](https://beerpay.io/imdario/mergo/badge.svg)](https://beerpay.io/imdario/mergo) @@ -87,8 +90,9 @@ If Mergo is useful to you, consider buying me a coffee, a beer or making a month - [mantasmatelis/whooplist-server](https://github.com/mantasmatelis/whooplist-server) - [jnuthong/item_search](https://github.com/jnuthong/item_search) - [bukalapak/snowboard](https://github.com/bukalapak/snowboard) +- [janoszen/containerssh](https://github.com/janoszen/containerssh) -## Installation +## Install go get github.com/imdario/mergo @@ -99,7 +103,7 @@ If Mergo is useful to you, consider buying me a coffee, a beer or making a month ## Usage -You can only merge same-type structs with exported fields initialized as zero value of their type and same-types maps. Mergo won't merge unexported (private) fields but will do recursively any exported one. It won't merge empty structs value as [they are not considered zero values](https://golang.org/ref/spec#The_zero_value) either. Also maps will be merged recursively except for structs inside maps (because they are not addressable using Go reflection). +You can only merge same-type structs with exported fields initialized as zero value of their type and same-types maps. Mergo won't merge unexported (private) fields but will do recursively any exported one. It won't merge empty structs value as [they are zero values](https://golang.org/ref/spec#The_zero_value) too. Also, maps will be merged recursively except for structs inside maps (because they are not addressable using Go reflection). ```go if err := mergo.Merge(&dst, src); err != nil { @@ -125,9 +129,7 @@ if err := mergo.Map(&dst, srcMap); err != nil { Warning: if you map a struct to map, it won't do it recursively. Don't expect Mergo to map struct members of your struct as `map[string]interface{}`. They will be just assigned as values. -More information and examples in [godoc documentation](http://godoc.org/github.com/imdario/mergo). - -### Nice example +Here is a nice example: ```go package main @@ -175,10 +177,10 @@ import ( "time" ) -type timeTransfomer struct { +type timeTransformer struct { } -func (t timeTransfomer) Transformer(typ reflect.Type) func(dst, src reflect.Value) error { +func (t timeTransformer) Transformer(typ reflect.Type) func(dst, src reflect.Value) error { if typ == reflect.TypeOf(time.Time{}) { return func(dst, src reflect.Value) error { if dst.CanSet() { @@ -202,7 +204,7 @@ type Snapshot struct { func main() { src := Snapshot{time.Now()} dest := Snapshot{} - mergo.Merge(&dest, src, mergo.WithTransformers(timeTransfomer{})) + mergo.Merge(&dest, src, mergo.WithTransformers(timeTransformer{})) fmt.Println(dest) // Will print // { 2018-01-12 01:15:00 +0000 UTC m=+0.000000001 } diff --git a/vendor/github.com/imdario/mergo/doc.go b/vendor/github.com/imdario/mergo/doc.go index 6e9aa7ba..fcd985f9 100644 --- a/vendor/github.com/imdario/mergo/doc.go +++ b/vendor/github.com/imdario/mergo/doc.go @@ -4,41 +4,140 @@ // license that can be found in the LICENSE file. /* -Package mergo merges same-type structs and maps by setting default values in zero-value fields. +A helper to merge structs and maps in Golang. Useful for configuration default values, avoiding messy if-statements. -Mergo won't merge unexported (private) fields but will do recursively any exported one. It also won't merge structs inside maps (because they are not addressable using Go reflection). +Mergo merges same-type structs and maps by setting default values in zero-value fields. Mergo won't merge unexported (private) fields. It will do recursively any exported one. It also won't merge structs inside maps (because they are not addressable using Go reflection). + +Status + +It is ready for production use. It is used in several projects by Docker, Google, The Linux Foundation, VMWare, Shopify, etc. + +Important note + +Please keep in mind that a problematic PR broke 0.3.9. We reverted it in 0.3.10. We consider 0.3.10 as stable but not bug-free. . Also, this version adds suppot for go modules. + +Keep in mind that in 0.3.2, Mergo changed Merge() and Map() signatures to support transformers. We added an optional/variadic argument so that it won't break the existing code. + +If you were using Mergo before April 6th, 2015, please check your project works as intended after updating your local copy with go get -u github.com/imdario/mergo. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause in existing projects after the change (release 0.2.0). + +Install + +Do your usual installation procedure: + + go get github.com/imdario/mergo + + // use in your .go code + import ( + "github.com/imdario/mergo" + ) Usage -From my own work-in-progress project: +You can only merge same-type structs with exported fields initialized as zero value of their type and same-types maps. Mergo won't merge unexported (private) fields but will do recursively any exported one. It won't merge empty structs value as they are zero values too. Also, maps will be merged recursively except for structs inside maps (because they are not addressable using Go reflection). + + if err := mergo.Merge(&dst, src); err != nil { + // ... + } + +Also, you can merge overwriting values using the transformer WithOverride. + + if err := mergo.Merge(&dst, src, mergo.WithOverride); err != nil { + // ... + } + +Additionally, you can map a map[string]interface{} to a struct (and otherwise, from struct to map), following the same restrictions as in Merge(). Keys are capitalized to find each corresponding exported field. + + if err := mergo.Map(&dst, srcMap); err != nil { + // ... + } + +Warning: if you map a struct to map, it won't do it recursively. Don't expect Mergo to map struct members of your struct as map[string]interface{}. They will be just assigned as values. + +Here is a nice example: + + package main + + import ( + "fmt" + "github.com/imdario/mergo" + ) - type networkConfig struct { - Protocol string - Address string - ServerType string `json: "server_type"` - Port uint16 + type Foo struct { + A string + B int64 } - type FssnConfig struct { - Network networkConfig + func main() { + src := Foo{ + A: "one", + B: 2, + } + dest := Foo{ + A: "two", + } + mergo.Merge(&dest, src) + fmt.Println(dest) + // Will print + // {two 2} } - var fssnDefault = FssnConfig { - networkConfig { - "tcp", - "127.0.0.1", - "http", - 31560, - }, +Transformers + +Transformers allow to merge specific types differently than in the default behavior. In other words, now you can customize how some types are merged. For example, time.Time is a struct; it doesn't have zero value but IsZero can return true because it has fields with zero value. How can we merge a non-zero time.Time? + + package main + + import ( + "fmt" + "github.com/imdario/mergo" + "reflect" + "time" + ) + + type timeTransformer struct { } - // Inside a function [...] + func (t timeTransformer) Transformer(typ reflect.Type) func(dst, src reflect.Value) error { + if typ == reflect.TypeOf(time.Time{}) { + return func(dst, src reflect.Value) error { + if dst.CanSet() { + isZero := dst.MethodByName("IsZero") + result := isZero.Call([]reflect.Value{}) + if result[0].Bool() { + dst.Set(src) + } + } + return nil + } + } + return nil + } + + type Snapshot struct { + Time time.Time + // ... + } - if err := mergo.Merge(&config, fssnDefault); err != nil { - log.Fatal(err) + func main() { + src := Snapshot{time.Now()} + dest := Snapshot{} + mergo.Merge(&dest, src, mergo.WithTransformers(timeTransformer{})) + fmt.Println(dest) + // Will print + // { 2018-01-12 01:15:00 +0000 UTC m=+0.000000001 } } - // More code [...] +Contact me + +If I can help you, you have an idea or you are using Mergo in your projects, don't hesitate to drop me a line (or a pull request): https://twitter.com/im_dario + +About + +Written by Dario Castañé: https://da.rio.hn + +License + +BSD 3-Clause license, as Go language. */ package mergo diff --git a/vendor/github.com/imdario/mergo/go.mod b/vendor/github.com/imdario/mergo/go.mod new file mode 100644 index 00000000..3d689d93 --- /dev/null +++ b/vendor/github.com/imdario/mergo/go.mod @@ -0,0 +1,5 @@ +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 new file mode 100644 index 00000000..168980da --- /dev/null +++ b/vendor/github.com/imdario/mergo/go.sum @@ -0,0 +1,4 @@ +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/imdario/mergo/map.go b/vendor/github.com/imdario/mergo/map.go index d83258b4..a13a7ee4 100644 --- a/vendor/github.com/imdario/mergo/map.go +++ b/vendor/github.com/imdario/mergo/map.go @@ -99,11 +99,11 @@ func deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth int, conf continue } if srcKind == dstKind { - if _, err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil { + if err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil { return } } else if dstKind == reflect.Interface && dstElement.Kind() == reflect.Interface { - if _, err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil { + if err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil { return } } else if srcKind == reflect.Map { @@ -141,6 +141,9 @@ func MapWithOverwrite(dst, src interface{}, opts ...func(*Config)) error { } func _map(dst, src interface{}, opts ...func(*Config)) error { + if dst != nil && reflect.ValueOf(dst).Kind() != reflect.Ptr { + return ErrNonPointerAgument + } var ( vDst, vSrc reflect.Value err error @@ -157,8 +160,7 @@ func _map(dst, src interface{}, opts ...func(*Config)) error { // To be friction-less, we redirect equal-type arguments // to deepMerge. Only because arguments can be anything. if vSrc.Kind() == vDst.Kind() { - _, err := deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, config) - return err + return deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, config) } switch vSrc.Kind() { case reflect.Struct: diff --git a/vendor/github.com/imdario/mergo/merge.go b/vendor/github.com/imdario/mergo/merge.go index 3332c9c2..11a8c156 100644 --- a/vendor/github.com/imdario/mergo/merge.go +++ b/vendor/github.com/imdario/mergo/merge.go @@ -11,26 +11,26 @@ package mergo import ( "fmt" "reflect" - "unsafe" ) -func hasExportedField(dst reflect.Value) (exported bool) { +func hasMergeableFields(dst reflect.Value) (exported bool) { for i, n := 0, dst.NumField(); i < n; i++ { field := dst.Type().Field(i) - if isExportedComponent(&field) { - return true + if field.Anonymous && dst.Field(i).Kind() == reflect.Struct { + exported = exported || hasMergeableFields(dst.Field(i)) + } else if isExportedComponent(&field) { + exported = exported || len(field.PkgPath) == 0 } } return } func isExportedComponent(field *reflect.StructField) bool { - name := field.Name pkgPath := field.PkgPath if len(pkgPath) > 0 { return false } - c := name[0] + c := field.Name[0] if 'a' <= c && c <= 'z' || c == '_' { return false } @@ -44,6 +44,8 @@ type Config struct { Transformers Transformers overwriteWithEmptyValue bool overwriteSliceWithEmptyValue bool + sliceDeepCopy bool + debug bool } type Transformers interface { @@ -53,17 +55,16 @@ type Transformers interface { // Traverses recursively both values, assigning src's fields values to dst. // The map argument tracks comparisons that have already been seen, which allows // short circuiting on recursive types. -func deepMerge(dstIn, src reflect.Value, visited map[uintptr]*visit, depth int, config *Config) (dst reflect.Value, err error) { - dst = dstIn +func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, config *Config) (err error) { overwrite := config.Overwrite typeCheck := config.TypeCheck overwriteWithEmptySrc := config.overwriteWithEmptyValue overwriteSliceWithEmptySrc := config.overwriteSliceWithEmptyValue + sliceDeepCopy := config.sliceDeepCopy if !src.IsValid() { return } - if dst.CanAddr() { addr := dst.UnsafeAddr() h := 17 * addr @@ -71,7 +72,7 @@ func deepMerge(dstIn, src reflect.Value, visited map[uintptr]*visit, depth int, typ := dst.Type() for p := seen; p != nil; p = p.next { if p.ptr == addr && p.typ == typ { - return dst, nil + return nil } } // Remember, remember... @@ -85,126 +86,154 @@ func deepMerge(dstIn, src reflect.Value, visited map[uintptr]*visit, depth int, } } - if dst.IsValid() && src.IsValid() && src.Type() != dst.Type() { - err = fmt.Errorf("cannot append two different types (%s, %s)", src.Kind(), dst.Kind()) - return - } - switch dst.Kind() { case reflect.Struct: - if hasExportedField(dst) { - dstCp := reflect.New(dst.Type()).Elem() + if hasMergeableFields(dst) { for i, n := 0, dst.NumField(); i < n; i++ { - dstField := dst.Field(i) - structField := dst.Type().Field(i) - // copy un-exported struct fields - if !isExportedComponent(&structField) { - rf := dstCp.Field(i) - rf = reflect.NewAt(rf.Type(), unsafe.Pointer(rf.UnsafeAddr())).Elem() //nolint:gosec - dstRF := dst.Field(i) - if !dst.Field(i).CanAddr() { - continue - } - - dstRF = reflect.NewAt(dstRF.Type(), unsafe.Pointer(dstRF.UnsafeAddr())).Elem() //nolint:gosec - rf.Set(dstRF) - continue - } - dstField, err = deepMerge(dstField, src.Field(i), visited, depth+1, config) - if err != nil { + if err = deepMerge(dst.Field(i), src.Field(i), visited, depth+1, config); err != nil { return } - dstCp.Field(i).Set(dstField) } - - if dst.CanSet() { - dst.Set(dstCp) - } else { - dst = dstCp - } - return } else { if (isReflectNil(dst) || overwrite) && (!isEmptyValue(src) || overwriteWithEmptySrc) { - dst = src + dst.Set(src) } } - case reflect.Map: if dst.IsNil() && !src.IsNil() { - if dst.CanSet() { - dst.Set(reflect.MakeMap(dst.Type())) - } else { - dst = src - return + dst.Set(reflect.MakeMap(dst.Type())) + } + + if src.Kind() != reflect.Map { + if overwrite { + dst.Set(src) } + return } + for _, key := range src.MapKeys() { srcElement := src.MapIndex(key) - dstElement := dst.MapIndex(key) if !srcElement.IsValid() { continue } - if dst.MapIndex(key).IsValid() { - k := dstElement.Interface() - dstElement = reflect.ValueOf(k) - } - if isReflectNil(srcElement) { - if overwrite || isReflectNil(dstElement) { - dst.SetMapIndex(key, srcElement) + dstElement := dst.MapIndex(key) + switch srcElement.Kind() { + case reflect.Chan, reflect.Func, reflect.Map, reflect.Interface, reflect.Slice: + if srcElement.IsNil() { + if overwrite { + dst.SetMapIndex(key, srcElement) + } + continue + } + fallthrough + default: + if !srcElement.CanInterface() { + continue + } + switch reflect.TypeOf(srcElement.Interface()).Kind() { + case reflect.Struct: + fallthrough + case reflect.Ptr: + fallthrough + case reflect.Map: + srcMapElm := srcElement + dstMapElm := dstElement + if srcMapElm.CanInterface() { + srcMapElm = reflect.ValueOf(srcMapElm.Interface()) + if dstMapElm.IsValid() { + dstMapElm = reflect.ValueOf(dstMapElm.Interface()) + } + } + if err = deepMerge(dstMapElm, srcMapElm, visited, depth+1, config); err != nil { + return + } + case reflect.Slice: + srcSlice := reflect.ValueOf(srcElement.Interface()) + + var dstSlice reflect.Value + if !dstElement.IsValid() || dstElement.IsNil() { + dstSlice = reflect.MakeSlice(srcSlice.Type(), 0, srcSlice.Len()) + } else { + dstSlice = reflect.ValueOf(dstElement.Interface()) + } + + if (!isEmptyValue(src) || overwriteWithEmptySrc || overwriteSliceWithEmptySrc) && (overwrite || isEmptyValue(dst)) && !config.AppendSlice && !sliceDeepCopy { + if typeCheck && srcSlice.Type() != dstSlice.Type() { + return fmt.Errorf("cannot override two slices with different type (%s, %s)", srcSlice.Type(), dstSlice.Type()) + } + dstSlice = srcSlice + } else if config.AppendSlice { + if srcSlice.Type() != dstSlice.Type() { + return fmt.Errorf("cannot append two slices with different type (%s, %s)", srcSlice.Type(), dstSlice.Type()) + } + dstSlice = reflect.AppendSlice(dstSlice, srcSlice) + } else if sliceDeepCopy { + i := 0 + for ; i < srcSlice.Len() && i < dstSlice.Len(); i++ { + srcElement := srcSlice.Index(i) + dstElement := dstSlice.Index(i) + + if srcElement.CanInterface() { + srcElement = reflect.ValueOf(srcElement.Interface()) + } + if dstElement.CanInterface() { + dstElement = reflect.ValueOf(dstElement.Interface()) + } + + if err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil { + return + } + } + + } + dst.SetMapIndex(key, dstSlice) } - continue } - if !srcElement.CanInterface() { + if dstElement.IsValid() && !isEmptyValue(dstElement) && (reflect.TypeOf(srcElement.Interface()).Kind() == reflect.Map || reflect.TypeOf(srcElement.Interface()).Kind() == reflect.Slice) { continue } - if srcElement.CanInterface() { - srcElement = reflect.ValueOf(srcElement.Interface()) - if dstElement.IsValid() { - dstElement = reflect.ValueOf(dstElement.Interface()) + if srcElement.IsValid() && ((srcElement.Kind() != reflect.Ptr && overwrite) || !dstElement.IsValid() || isEmptyValue(dstElement)) { + if dst.IsNil() { + dst.Set(reflect.MakeMap(dst.Type())) } + dst.SetMapIndex(key, srcElement) } - dstElement, err = deepMerge(dstElement, srcElement, visited, depth+1, config) - if err != nil { - return - } - dst.SetMapIndex(key, dstElement) - } case reflect.Slice: - newSlice := dst - if (!isEmptyValue(src) || overwriteWithEmptySrc || overwriteSliceWithEmptySrc) && (overwrite || isEmptyValue(dst)) && !config.AppendSlice { - if typeCheck && src.Type() != dst.Type() { - return dst, fmt.Errorf("cannot override two slices with different type (%s, %s)", src.Type(), dst.Type()) - } - newSlice = src - } else if config.AppendSlice { - if typeCheck && src.Type() != dst.Type() { - err = fmt.Errorf("cannot append two slice with different type (%s, %s)", src.Type(), dst.Type()) - return - } - newSlice = reflect.AppendSlice(dst, src) - } - if dst.CanSet() { - dst.Set(newSlice) - } else { - dst = newSlice - } - case reflect.Ptr, reflect.Interface: - if isReflectNil(src) { + if !dst.CanSet() { break } + if (!isEmptyValue(src) || overwriteWithEmptySrc || overwriteSliceWithEmptySrc) && (overwrite || isEmptyValue(dst)) && !config.AppendSlice && !sliceDeepCopy { + dst.Set(src) + } else if config.AppendSlice { + if src.Type() != dst.Type() { + return fmt.Errorf("cannot append two slice with different type (%s, %s)", src.Type(), dst.Type()) + } + dst.Set(reflect.AppendSlice(dst, src)) + } else if sliceDeepCopy { + for i := 0; i < src.Len() && i < dst.Len(); i++ { + srcElement := src.Index(i) + dstElement := dst.Index(i) + if srcElement.CanInterface() { + srcElement = reflect.ValueOf(srcElement.Interface()) + } + if dstElement.CanInterface() { + dstElement = reflect.ValueOf(dstElement.Interface()) + } - if dst.Kind() != reflect.Ptr && src.Type().AssignableTo(dst.Type()) { - if dst.IsNil() || overwrite { - if overwrite || isEmptyValue(dst) { - if dst.CanSet() { - dst.Set(src) - } else { - dst = src - } + if err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil { + return } } + } + case reflect.Ptr: + fallthrough + case reflect.Interface: + if isReflectNil(src) { + if overwriteWithEmptySrc && dst.CanSet() && src.Type().AssignableTo(dst.Type()) { + dst.Set(src) + } break } @@ -214,33 +243,40 @@ func deepMerge(dstIn, src reflect.Value, visited map[uintptr]*visit, depth int, dst.Set(src) } } else if src.Kind() == reflect.Ptr { - if dst, err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil { + if err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil { return } - dst = dst.Addr() } else if dst.Elem().Type() == src.Type() { - if dst, err = deepMerge(dst.Elem(), src, visited, depth+1, config); err != nil { + if err = deepMerge(dst.Elem(), src, visited, depth+1, config); err != nil { return } } else { - return dst, ErrDifferentArgumentsTypes + return ErrDifferentArgumentsTypes } break } + if dst.IsNil() || overwrite { - if (overwrite || isEmptyValue(dst)) && (overwriteWithEmptySrc || !isEmptyValue(src)) { - if dst.CanSet() { - dst.Set(src) - } else { - dst = src - } + if dst.CanSet() && (overwrite || isEmptyValue(dst)) { + dst.Set(src) } - } else if _, err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil { - return + break + } + + if dst.Elem().Kind() == src.Elem().Kind() { + if err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil { + return + } + break } default: - overwriteFull := (!isEmptyValue(src) || overwriteWithEmptySrc) && (overwrite || isEmptyValue(dst)) - if overwriteFull { + mustSet := (isEmptyValue(dst) || overwrite) && (!isEmptyValue(src) || overwriteWithEmptySrc) + v := fmt.Sprintf("%v", src) + if v == "TestIssue106" { + fmt.Println(mustSet) + fmt.Println(dst.CanSet()) + } + if mustSet { if dst.CanSet() { dst.Set(src) } else { @@ -281,6 +317,7 @@ func WithOverride(config *Config) { // WithOverwriteWithEmptyValue will make merge override non empty dst attributes with empty src attributes values. func WithOverwriteWithEmptyValue(config *Config) { + config.Overwrite = true config.overwriteWithEmptyValue = true } @@ -299,7 +336,16 @@ func WithTypeCheck(config *Config) { config.TypeCheck = true } +// WithSliceDeepCopy will merge slice element one by one with Overwrite flag. +func WithSliceDeepCopy(config *Config) { + config.sliceDeepCopy = true + config.Overwrite = true +} + func merge(dst, src interface{}, opts ...func(*Config)) error { + if dst != nil && reflect.ValueOf(dst).Kind() != reflect.Ptr { + return ErrNonPointerAgument + } var ( vDst, vSrc reflect.Value err error @@ -314,14 +360,10 @@ func merge(dst, src interface{}, opts ...func(*Config)) error { if vDst, vSrc, err = resolveValues(dst, src); err != nil { return err } - if !vDst.CanSet() { - return fmt.Errorf("cannot set dst, needs reference") - } if vDst.Type() != vSrc.Type() { return ErrDifferentArgumentsTypes } - _, err = deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, config) - return err + return deepMerge(vDst, vSrc, make(map[uintptr]*visit), 0, config) } // IsReflectNil is the reflect value provided nil diff --git a/vendor/github.com/imdario/mergo/mergo.go b/vendor/github.com/imdario/mergo/mergo.go index a82fea2f..3cc926c7 100644 --- a/vendor/github.com/imdario/mergo/mergo.go +++ b/vendor/github.com/imdario/mergo/mergo.go @@ -20,6 +20,7 @@ var ( ErrNotSupported = errors.New("only structs and maps are supported") ErrExpectedMapAsDestination = errors.New("dst was expected to be a map") ErrExpectedStructAsDestination = errors.New("dst was expected to be a struct") + ErrNonPointerAgument = errors.New("dst must be a pointer") ) // During deepMerge, must keep track of checks that are @@ -75,23 +76,3 @@ func resolveValues(dst, src interface{}) (vDst, vSrc reflect.Value, err error) { } return } - -// Traverses recursively both values, assigning src's fields values to dst. -// The map argument tracks comparisons that have already been seen, which allows -// short circuiting on recursive types. -func deeper(dst, src reflect.Value, visited map[uintptr]*visit, depth int) (err error) { - if dst.CanAddr() { - addr := dst.UnsafeAddr() - h := 17 * addr - seen := visited[h] - typ := dst.Type() - for p := seen; p != nil; p = p.next { - if p.ptr == addr && p.typ == typ { - return nil - } - } - // Remember, remember... - visited[h] = &visit{addr, typ, seen} - } - return // TODO refactor -} diff --git a/vendor/github.com/mattn/go-colorable/.travis.yml b/vendor/github.com/mattn/go-colorable/.travis.yml new file mode 100644 index 00000000..98db8f06 --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/.travis.yml @@ -0,0 +1,9 @@ +language: go +go: + - tip + +before_install: + - go get github.com/mattn/goveralls + - go get golang.org/x/tools/cmd/cover +script: + - $HOME/gopath/bin/goveralls -repotoken xnXqRGwgW3SXIguzxf90ZSK1GPYZPaGrw diff --git a/vendor/github.com/mattn/go-colorable/LICENSE b/vendor/github.com/mattn/go-colorable/LICENSE new file mode 100644 index 00000000..91b5cef3 --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Yasuhiro Matsumoto + +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. diff --git a/vendor/github.com/mattn/go-colorable/README.md b/vendor/github.com/mattn/go-colorable/README.md new file mode 100644 index 00000000..56729a92 --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/README.md @@ -0,0 +1,48 @@ +# go-colorable + +[![Godoc Reference](https://godoc.org/github.com/mattn/go-colorable?status.svg)](http://godoc.org/github.com/mattn/go-colorable) +[![Build Status](https://travis-ci.org/mattn/go-colorable.svg?branch=master)](https://travis-ci.org/mattn/go-colorable) +[![Coverage Status](https://coveralls.io/repos/github/mattn/go-colorable/badge.svg?branch=master)](https://coveralls.io/github/mattn/go-colorable?branch=master) +[![Go Report Card](https://goreportcard.com/badge/mattn/go-colorable)](https://goreportcard.com/report/mattn/go-colorable) + +Colorable writer for windows. + +For example, most of logger packages doesn't show colors on windows. (I know we can do it with ansicon. But I don't want.) +This package is possible to handle escape sequence for ansi color on windows. + +## Too Bad! + +![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/bad.png) + + +## So Good! + +![](https://raw.githubusercontent.com/mattn/go-colorable/gh-pages/good.png) + +## Usage + +```go +logrus.SetFormatter(&logrus.TextFormatter{ForceColors: true}) +logrus.SetOutput(colorable.NewColorableStdout()) + +logrus.Info("succeeded") +logrus.Warn("not correct") +logrus.Error("something error") +logrus.Fatal("panic") +``` + +You can compile above code on non-windows OSs. + +## Installation + +``` +$ go get github.com/mattn/go-colorable +``` + +# License + +MIT + +# Author + +Yasuhiro Matsumoto (a.k.a mattn) diff --git a/vendor/github.com/mattn/go-colorable/colorable_appengine.go b/vendor/github.com/mattn/go-colorable/colorable_appengine.go new file mode 100644 index 00000000..1f28d773 --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/colorable_appengine.go @@ -0,0 +1,29 @@ +// +build appengine + +package colorable + +import ( + "io" + "os" + + _ "github.com/mattn/go-isatty" +) + +// NewColorable return new instance of Writer which handle escape sequence. +func NewColorable(file *os.File) io.Writer { + if file == nil { + panic("nil passed instead of *os.File to NewColorable()") + } + + return file +} + +// NewColorableStdout return new instance of Writer which handle escape sequence for stdout. +func NewColorableStdout() io.Writer { + return os.Stdout +} + +// NewColorableStderr return new instance of Writer which handle escape sequence for stderr. +func NewColorableStderr() io.Writer { + return os.Stderr +} diff --git a/vendor/github.com/mattn/go-colorable/colorable_others.go b/vendor/github.com/mattn/go-colorable/colorable_others.go new file mode 100644 index 00000000..887f203d --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/colorable_others.go @@ -0,0 +1,30 @@ +// +build !windows +// +build !appengine + +package colorable + +import ( + "io" + "os" + + _ "github.com/mattn/go-isatty" +) + +// NewColorable return new instance of Writer which handle escape sequence. +func NewColorable(file *os.File) io.Writer { + if file == nil { + panic("nil passed instead of *os.File to NewColorable()") + } + + return file +} + +// NewColorableStdout return new instance of Writer which handle escape sequence for stdout. +func NewColorableStdout() io.Writer { + return os.Stdout +} + +// NewColorableStderr return new instance of Writer which handle escape sequence for stderr. +func NewColorableStderr() io.Writer { + return os.Stderr +} diff --git a/vendor/github.com/mattn/go-colorable/colorable_windows.go b/vendor/github.com/mattn/go-colorable/colorable_windows.go new file mode 100644 index 00000000..404e10ca --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/colorable_windows.go @@ -0,0 +1,980 @@ +// +build windows +// +build !appengine + +package colorable + +import ( + "bytes" + "io" + "math" + "os" + "strconv" + "strings" + "syscall" + "unsafe" + + "github.com/mattn/go-isatty" +) + +const ( + foregroundBlue = 0x1 + foregroundGreen = 0x2 + foregroundRed = 0x4 + foregroundIntensity = 0x8 + foregroundMask = (foregroundRed | foregroundBlue | foregroundGreen | foregroundIntensity) + backgroundBlue = 0x10 + backgroundGreen = 0x20 + backgroundRed = 0x40 + backgroundIntensity = 0x80 + backgroundMask = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity) +) + +const ( + genericRead = 0x80000000 + genericWrite = 0x40000000 +) + +const ( + consoleTextmodeBuffer = 0x1 +) + +type wchar uint16 +type short int16 +type dword uint32 +type word uint16 + +type coord struct { + x short + y short +} + +type smallRect struct { + left short + top short + right short + bottom short +} + +type consoleScreenBufferInfo struct { + size coord + cursorPosition coord + attributes word + window smallRect + maximumWindowSize coord +} + +type consoleCursorInfo struct { + size dword + visible int32 +} + +var ( + kernel32 = syscall.NewLazyDLL("kernel32.dll") + procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo") + procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute") + procSetConsoleCursorPosition = kernel32.NewProc("SetConsoleCursorPosition") + procFillConsoleOutputCharacter = kernel32.NewProc("FillConsoleOutputCharacterW") + procFillConsoleOutputAttribute = kernel32.NewProc("FillConsoleOutputAttribute") + procGetConsoleCursorInfo = kernel32.NewProc("GetConsoleCursorInfo") + procSetConsoleCursorInfo = kernel32.NewProc("SetConsoleCursorInfo") + procSetConsoleTitle = kernel32.NewProc("SetConsoleTitleW") + procCreateConsoleScreenBuffer = kernel32.NewProc("CreateConsoleScreenBuffer") +) + +// Writer provide colorable Writer to the console +type Writer struct { + out io.Writer + handle syscall.Handle + althandle syscall.Handle + oldattr word + oldpos coord + rest bytes.Buffer +} + +// NewColorable return new instance of Writer which handle escape sequence from File. +func NewColorable(file *os.File) io.Writer { + if file == nil { + panic("nil passed instead of *os.File to NewColorable()") + } + + if isatty.IsTerminal(file.Fd()) { + var csbi consoleScreenBufferInfo + handle := syscall.Handle(file.Fd()) + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + return &Writer{out: file, handle: handle, oldattr: csbi.attributes, oldpos: coord{0, 0}} + } + return file +} + +// NewColorableStdout return new instance of Writer which handle escape sequence for stdout. +func NewColorableStdout() io.Writer { + return NewColorable(os.Stdout) +} + +// NewColorableStderr return new instance of Writer which handle escape sequence for stderr. +func NewColorableStderr() io.Writer { + return NewColorable(os.Stderr) +} + +var color256 = map[int]int{ + 0: 0x000000, + 1: 0x800000, + 2: 0x008000, + 3: 0x808000, + 4: 0x000080, + 5: 0x800080, + 6: 0x008080, + 7: 0xc0c0c0, + 8: 0x808080, + 9: 0xff0000, + 10: 0x00ff00, + 11: 0xffff00, + 12: 0x0000ff, + 13: 0xff00ff, + 14: 0x00ffff, + 15: 0xffffff, + 16: 0x000000, + 17: 0x00005f, + 18: 0x000087, + 19: 0x0000af, + 20: 0x0000d7, + 21: 0x0000ff, + 22: 0x005f00, + 23: 0x005f5f, + 24: 0x005f87, + 25: 0x005faf, + 26: 0x005fd7, + 27: 0x005fff, + 28: 0x008700, + 29: 0x00875f, + 30: 0x008787, + 31: 0x0087af, + 32: 0x0087d7, + 33: 0x0087ff, + 34: 0x00af00, + 35: 0x00af5f, + 36: 0x00af87, + 37: 0x00afaf, + 38: 0x00afd7, + 39: 0x00afff, + 40: 0x00d700, + 41: 0x00d75f, + 42: 0x00d787, + 43: 0x00d7af, + 44: 0x00d7d7, + 45: 0x00d7ff, + 46: 0x00ff00, + 47: 0x00ff5f, + 48: 0x00ff87, + 49: 0x00ffaf, + 50: 0x00ffd7, + 51: 0x00ffff, + 52: 0x5f0000, + 53: 0x5f005f, + 54: 0x5f0087, + 55: 0x5f00af, + 56: 0x5f00d7, + 57: 0x5f00ff, + 58: 0x5f5f00, + 59: 0x5f5f5f, + 60: 0x5f5f87, + 61: 0x5f5faf, + 62: 0x5f5fd7, + 63: 0x5f5fff, + 64: 0x5f8700, + 65: 0x5f875f, + 66: 0x5f8787, + 67: 0x5f87af, + 68: 0x5f87d7, + 69: 0x5f87ff, + 70: 0x5faf00, + 71: 0x5faf5f, + 72: 0x5faf87, + 73: 0x5fafaf, + 74: 0x5fafd7, + 75: 0x5fafff, + 76: 0x5fd700, + 77: 0x5fd75f, + 78: 0x5fd787, + 79: 0x5fd7af, + 80: 0x5fd7d7, + 81: 0x5fd7ff, + 82: 0x5fff00, + 83: 0x5fff5f, + 84: 0x5fff87, + 85: 0x5fffaf, + 86: 0x5fffd7, + 87: 0x5fffff, + 88: 0x870000, + 89: 0x87005f, + 90: 0x870087, + 91: 0x8700af, + 92: 0x8700d7, + 93: 0x8700ff, + 94: 0x875f00, + 95: 0x875f5f, + 96: 0x875f87, + 97: 0x875faf, + 98: 0x875fd7, + 99: 0x875fff, + 100: 0x878700, + 101: 0x87875f, + 102: 0x878787, + 103: 0x8787af, + 104: 0x8787d7, + 105: 0x8787ff, + 106: 0x87af00, + 107: 0x87af5f, + 108: 0x87af87, + 109: 0x87afaf, + 110: 0x87afd7, + 111: 0x87afff, + 112: 0x87d700, + 113: 0x87d75f, + 114: 0x87d787, + 115: 0x87d7af, + 116: 0x87d7d7, + 117: 0x87d7ff, + 118: 0x87ff00, + 119: 0x87ff5f, + 120: 0x87ff87, + 121: 0x87ffaf, + 122: 0x87ffd7, + 123: 0x87ffff, + 124: 0xaf0000, + 125: 0xaf005f, + 126: 0xaf0087, + 127: 0xaf00af, + 128: 0xaf00d7, + 129: 0xaf00ff, + 130: 0xaf5f00, + 131: 0xaf5f5f, + 132: 0xaf5f87, + 133: 0xaf5faf, + 134: 0xaf5fd7, + 135: 0xaf5fff, + 136: 0xaf8700, + 137: 0xaf875f, + 138: 0xaf8787, + 139: 0xaf87af, + 140: 0xaf87d7, + 141: 0xaf87ff, + 142: 0xafaf00, + 143: 0xafaf5f, + 144: 0xafaf87, + 145: 0xafafaf, + 146: 0xafafd7, + 147: 0xafafff, + 148: 0xafd700, + 149: 0xafd75f, + 150: 0xafd787, + 151: 0xafd7af, + 152: 0xafd7d7, + 153: 0xafd7ff, + 154: 0xafff00, + 155: 0xafff5f, + 156: 0xafff87, + 157: 0xafffaf, + 158: 0xafffd7, + 159: 0xafffff, + 160: 0xd70000, + 161: 0xd7005f, + 162: 0xd70087, + 163: 0xd700af, + 164: 0xd700d7, + 165: 0xd700ff, + 166: 0xd75f00, + 167: 0xd75f5f, + 168: 0xd75f87, + 169: 0xd75faf, + 170: 0xd75fd7, + 171: 0xd75fff, + 172: 0xd78700, + 173: 0xd7875f, + 174: 0xd78787, + 175: 0xd787af, + 176: 0xd787d7, + 177: 0xd787ff, + 178: 0xd7af00, + 179: 0xd7af5f, + 180: 0xd7af87, + 181: 0xd7afaf, + 182: 0xd7afd7, + 183: 0xd7afff, + 184: 0xd7d700, + 185: 0xd7d75f, + 186: 0xd7d787, + 187: 0xd7d7af, + 188: 0xd7d7d7, + 189: 0xd7d7ff, + 190: 0xd7ff00, + 191: 0xd7ff5f, + 192: 0xd7ff87, + 193: 0xd7ffaf, + 194: 0xd7ffd7, + 195: 0xd7ffff, + 196: 0xff0000, + 197: 0xff005f, + 198: 0xff0087, + 199: 0xff00af, + 200: 0xff00d7, + 201: 0xff00ff, + 202: 0xff5f00, + 203: 0xff5f5f, + 204: 0xff5f87, + 205: 0xff5faf, + 206: 0xff5fd7, + 207: 0xff5fff, + 208: 0xff8700, + 209: 0xff875f, + 210: 0xff8787, + 211: 0xff87af, + 212: 0xff87d7, + 213: 0xff87ff, + 214: 0xffaf00, + 215: 0xffaf5f, + 216: 0xffaf87, + 217: 0xffafaf, + 218: 0xffafd7, + 219: 0xffafff, + 220: 0xffd700, + 221: 0xffd75f, + 222: 0xffd787, + 223: 0xffd7af, + 224: 0xffd7d7, + 225: 0xffd7ff, + 226: 0xffff00, + 227: 0xffff5f, + 228: 0xffff87, + 229: 0xffffaf, + 230: 0xffffd7, + 231: 0xffffff, + 232: 0x080808, + 233: 0x121212, + 234: 0x1c1c1c, + 235: 0x262626, + 236: 0x303030, + 237: 0x3a3a3a, + 238: 0x444444, + 239: 0x4e4e4e, + 240: 0x585858, + 241: 0x626262, + 242: 0x6c6c6c, + 243: 0x767676, + 244: 0x808080, + 245: 0x8a8a8a, + 246: 0x949494, + 247: 0x9e9e9e, + 248: 0xa8a8a8, + 249: 0xb2b2b2, + 250: 0xbcbcbc, + 251: 0xc6c6c6, + 252: 0xd0d0d0, + 253: 0xdadada, + 254: 0xe4e4e4, + 255: 0xeeeeee, +} + +// `\033]0;TITLESTR\007` +func doTitleSequence(er *bytes.Reader) error { + var c byte + var err error + + c, err = er.ReadByte() + if err != nil { + return err + } + if c != '0' && c != '2' { + return nil + } + c, err = er.ReadByte() + if err != nil { + return err + } + if c != ';' { + return nil + } + title := make([]byte, 0, 80) + for { + c, err = er.ReadByte() + if err != nil { + return err + } + if c == 0x07 || c == '\n' { + break + } + title = append(title, c) + } + if len(title) > 0 { + title8, err := syscall.UTF16PtrFromString(string(title)) + if err == nil { + procSetConsoleTitle.Call(uintptr(unsafe.Pointer(title8))) + } + } + return nil +} + +// Write write data on console +func (w *Writer) Write(data []byte) (n int, err error) { + var csbi consoleScreenBufferInfo + procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) + + handle := w.handle + + var er *bytes.Reader + if w.rest.Len() > 0 { + var rest bytes.Buffer + w.rest.WriteTo(&rest) + w.rest.Reset() + rest.Write(data) + er = bytes.NewReader(rest.Bytes()) + } else { + er = bytes.NewReader(data) + } + var bw [1]byte +loop: + for { + c1, err := er.ReadByte() + if err != nil { + break loop + } + if c1 != 0x1b { + bw[0] = c1 + w.out.Write(bw[:]) + continue + } + c2, err := er.ReadByte() + if err != nil { + break loop + } + + switch c2 { + case '>': + continue + case ']': + w.rest.WriteByte(c1) + w.rest.WriteByte(c2) + er.WriteTo(&w.rest) + if bytes.IndexByte(w.rest.Bytes(), 0x07) == -1 { + break loop + } + er = bytes.NewReader(w.rest.Bytes()[2:]) + err := doTitleSequence(er) + if err != nil { + break loop + } + w.rest.Reset() + continue + // https://github.com/mattn/go-colorable/issues/27 + case '7': + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + w.oldpos = csbi.cursorPosition + continue + case '8': + procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&w.oldpos))) + continue + case 0x5b: + // execute part after switch + default: + continue + } + + w.rest.WriteByte(c1) + w.rest.WriteByte(c2) + er.WriteTo(&w.rest) + + var buf bytes.Buffer + var m byte + for i, c := range w.rest.Bytes()[2:] { + if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' { + m = c + er = bytes.NewReader(w.rest.Bytes()[2+i+1:]) + w.rest.Reset() + break + } + buf.Write([]byte(string(c))) + } + if m == 0 { + break loop + } + + switch m { + case 'A': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.y -= short(n) + procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'B': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.y += short(n) + procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'C': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x += short(n) + procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'D': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x -= short(n) + if csbi.cursorPosition.x < 0 { + csbi.cursorPosition.x = 0 + } + procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'E': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = 0 + csbi.cursorPosition.y += short(n) + procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'F': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = 0 + csbi.cursorPosition.y -= short(n) + procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'G': + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + csbi.cursorPosition.x = short(n - 1) + procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'H', 'f': + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + if buf.Len() > 0 { + token := strings.Split(buf.String(), ";") + switch len(token) { + case 1: + n1, err := strconv.Atoi(token[0]) + if err != nil { + continue + } + csbi.cursorPosition.y = short(n1 - 1) + case 2: + n1, err := strconv.Atoi(token[0]) + if err != nil { + continue + } + n2, err := strconv.Atoi(token[1]) + if err != nil { + continue + } + csbi.cursorPosition.x = short(n2 - 1) + csbi.cursorPosition.y = short(n1 - 1) + } + } else { + csbi.cursorPosition.y = 0 + } + procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) + case 'J': + n := 0 + if buf.Len() > 0 { + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + } + var count, written dword + var cursor coord + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + switch n { + case 0: + cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y} + count = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.size.y-csbi.cursorPosition.y)*dword(csbi.size.x) + case 1: + cursor = coord{x: csbi.window.left, y: csbi.window.top} + count = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.window.top-csbi.cursorPosition.y)*dword(csbi.size.x) + case 2: + cursor = coord{x: csbi.window.left, y: csbi.window.top} + count = dword(csbi.size.x) - dword(csbi.cursorPosition.x) + dword(csbi.size.y-csbi.cursorPosition.y)*dword(csbi.size.x) + } + procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + procFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + case 'K': + n := 0 + if buf.Len() > 0 { + n, err = strconv.Atoi(buf.String()) + if err != nil { + continue + } + } + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + var cursor coord + var count, written dword + switch n { + case 0: + cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y} + count = dword(csbi.size.x - csbi.cursorPosition.x) + case 1: + cursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y} + count = dword(csbi.size.x - csbi.cursorPosition.x) + case 2: + cursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y} + count = dword(csbi.size.x) + } + procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + procFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written))) + case 'm': + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + attr := csbi.attributes + cs := buf.String() + if cs == "" { + procSetConsoleTextAttribute.Call(uintptr(handle), uintptr(w.oldattr)) + continue + } + token := strings.Split(cs, ";") + for i := 0; i < len(token); i++ { + ns := token[i] + if n, err = strconv.Atoi(ns); err == nil { + switch { + case n == 0 || n == 100: + attr = w.oldattr + case 1 <= n && n <= 5: + attr |= foregroundIntensity + case n == 7: + attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) + case n == 22 || n == 25: + attr |= foregroundIntensity + case n == 27: + attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) + case 30 <= n && n <= 37: + attr &= backgroundMask + if (n-30)&1 != 0 { + attr |= foregroundRed + } + if (n-30)&2 != 0 { + attr |= foregroundGreen + } + if (n-30)&4 != 0 { + attr |= foregroundBlue + } + case n == 38: // set foreground color. + if i < len(token)-2 && (token[i+1] == "5" || token[i+1] == "05") { + if n256, err := strconv.Atoi(token[i+2]); err == nil { + if n256foreAttr == nil { + n256setup() + } + attr &= backgroundMask + attr |= n256foreAttr[n256] + i += 2 + } + } else if len(token) == 5 && token[i+1] == "2" { + var r, g, b int + r, _ = strconv.Atoi(token[i+2]) + g, _ = strconv.Atoi(token[i+3]) + b, _ = strconv.Atoi(token[i+4]) + i += 4 + if r > 127 { + attr |= foregroundRed + } + if g > 127 { + attr |= foregroundGreen + } + if b > 127 { + attr |= foregroundBlue + } + } else { + attr = attr & (w.oldattr & backgroundMask) + } + case n == 39: // reset foreground color. + attr &= backgroundMask + attr |= w.oldattr & foregroundMask + case 40 <= n && n <= 47: + attr &= foregroundMask + if (n-40)&1 != 0 { + attr |= backgroundRed + } + if (n-40)&2 != 0 { + attr |= backgroundGreen + } + if (n-40)&4 != 0 { + attr |= backgroundBlue + } + case n == 48: // set background color. + if i < len(token)-2 && token[i+1] == "5" { + if n256, err := strconv.Atoi(token[i+2]); err == nil { + if n256backAttr == nil { + n256setup() + } + attr &= foregroundMask + attr |= n256backAttr[n256] + i += 2 + } + } else if len(token) == 5 && token[i+1] == "2" { + var r, g, b int + r, _ = strconv.Atoi(token[i+2]) + g, _ = strconv.Atoi(token[i+3]) + b, _ = strconv.Atoi(token[i+4]) + i += 4 + if r > 127 { + attr |= backgroundRed + } + if g > 127 { + attr |= backgroundGreen + } + if b > 127 { + attr |= backgroundBlue + } + } else { + attr = attr & (w.oldattr & foregroundMask) + } + case n == 49: // reset foreground color. + attr &= foregroundMask + attr |= w.oldattr & backgroundMask + case 90 <= n && n <= 97: + attr = (attr & backgroundMask) + attr |= foregroundIntensity + if (n-90)&1 != 0 { + attr |= foregroundRed + } + if (n-90)&2 != 0 { + attr |= foregroundGreen + } + if (n-90)&4 != 0 { + attr |= foregroundBlue + } + case 100 <= n && n <= 107: + attr = (attr & foregroundMask) + attr |= backgroundIntensity + if (n-100)&1 != 0 { + attr |= backgroundRed + } + if (n-100)&2 != 0 { + attr |= backgroundGreen + } + if (n-100)&4 != 0 { + attr |= backgroundBlue + } + } + procSetConsoleTextAttribute.Call(uintptr(handle), uintptr(attr)) + } + } + case 'h': + var ci consoleCursorInfo + cs := buf.String() + if cs == "5>" { + procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) + ci.visible = 0 + procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) + } else if cs == "?25" { + procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) + ci.visible = 1 + procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) + } else if cs == "?1049" { + if w.althandle == 0 { + h, _, _ := procCreateConsoleScreenBuffer.Call(uintptr(genericRead|genericWrite), 0, 0, uintptr(consoleTextmodeBuffer), 0, 0) + w.althandle = syscall.Handle(h) + if w.althandle != 0 { + handle = w.althandle + } + } + } + case 'l': + var ci consoleCursorInfo + cs := buf.String() + if cs == "5>" { + procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) + ci.visible = 1 + procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) + } else if cs == "?25" { + procGetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) + ci.visible = 0 + procSetConsoleCursorInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&ci))) + } else if cs == "?1049" { + if w.althandle != 0 { + syscall.CloseHandle(w.althandle) + w.althandle = 0 + handle = w.handle + } + } + case 's': + procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) + w.oldpos = csbi.cursorPosition + case 'u': + procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&w.oldpos))) + } + } + + return len(data), nil +} + +type consoleColor struct { + rgb int + red bool + green bool + blue bool + intensity bool +} + +func (c consoleColor) foregroundAttr() (attr word) { + if c.red { + attr |= foregroundRed + } + if c.green { + attr |= foregroundGreen + } + if c.blue { + attr |= foregroundBlue + } + if c.intensity { + attr |= foregroundIntensity + } + return +} + +func (c consoleColor) backgroundAttr() (attr word) { + if c.red { + attr |= backgroundRed + } + if c.green { + attr |= backgroundGreen + } + if c.blue { + attr |= backgroundBlue + } + if c.intensity { + attr |= backgroundIntensity + } + return +} + +var color16 = []consoleColor{ + {0x000000, false, false, false, false}, + {0x000080, false, false, true, false}, + {0x008000, false, true, false, false}, + {0x008080, false, true, true, false}, + {0x800000, true, false, false, false}, + {0x800080, true, false, true, false}, + {0x808000, true, true, false, false}, + {0xc0c0c0, true, true, true, false}, + {0x808080, false, false, false, true}, + {0x0000ff, false, false, true, true}, + {0x00ff00, false, true, false, true}, + {0x00ffff, false, true, true, true}, + {0xff0000, true, false, false, true}, + {0xff00ff, true, false, true, true}, + {0xffff00, true, true, false, true}, + {0xffffff, true, true, true, true}, +} + +type hsv struct { + h, s, v float32 +} + +func (a hsv) dist(b hsv) float32 { + dh := a.h - b.h + switch { + case dh > 0.5: + dh = 1 - dh + case dh < -0.5: + dh = -1 - dh + } + ds := a.s - b.s + dv := a.v - b.v + return float32(math.Sqrt(float64(dh*dh + ds*ds + dv*dv))) +} + +func toHSV(rgb int) hsv { + r, g, b := float32((rgb&0xFF0000)>>16)/256.0, + float32((rgb&0x00FF00)>>8)/256.0, + float32(rgb&0x0000FF)/256.0 + min, max := minmax3f(r, g, b) + h := max - min + if h > 0 { + if max == r { + h = (g - b) / h + if h < 0 { + h += 6 + } + } else if max == g { + h = 2 + (b-r)/h + } else { + h = 4 + (r-g)/h + } + } + h /= 6.0 + s := max - min + if max != 0 { + s /= max + } + v := max + return hsv{h: h, s: s, v: v} +} + +type hsvTable []hsv + +func toHSVTable(rgbTable []consoleColor) hsvTable { + t := make(hsvTable, len(rgbTable)) + for i, c := range rgbTable { + t[i] = toHSV(c.rgb) + } + return t +} + +func (t hsvTable) find(rgb int) consoleColor { + hsv := toHSV(rgb) + n := 7 + l := float32(5.0) + for i, p := range t { + d := hsv.dist(p) + if d < l { + l, n = d, i + } + } + return color16[n] +} + +func minmax3f(a, b, c float32) (min, max float32) { + if a < b { + if b < c { + return a, c + } else if a < c { + return a, b + } else { + return c, b + } + } else { + if a < c { + return b, c + } else if b < c { + return b, a + } else { + return c, a + } + } +} + +var n256foreAttr []word +var n256backAttr []word + +func n256setup() { + n256foreAttr = make([]word, 256) + n256backAttr = make([]word, 256) + t := toHSVTable(color16) + for i, rgb := range color256 { + c := t.find(rgb) + n256foreAttr[i] = c.foregroundAttr() + n256backAttr[i] = c.backgroundAttr() + } +} diff --git a/vendor/github.com/mattn/go-colorable/go.mod b/vendor/github.com/mattn/go-colorable/go.mod new file mode 100644 index 00000000..ef3ca9d4 --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/go.mod @@ -0,0 +1,3 @@ +module github.com/mattn/go-colorable + +require github.com/mattn/go-isatty v0.0.8 diff --git a/vendor/github.com/mattn/go-colorable/go.sum b/vendor/github.com/mattn/go-colorable/go.sum new file mode 100644 index 00000000..2c12960e --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/go.sum @@ -0,0 +1,4 @@ +github.com/mattn/go-isatty v0.0.5 h1:tHXDdz1cpzGaovsTB+TVB8q90WEokoVmfMqoVcrLUgw= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/mattn/go-colorable/noncolorable.go b/vendor/github.com/mattn/go-colorable/noncolorable.go new file mode 100644 index 00000000..9721e16f --- /dev/null +++ b/vendor/github.com/mattn/go-colorable/noncolorable.go @@ -0,0 +1,55 @@ +package colorable + +import ( + "bytes" + "io" +) + +// NonColorable hold writer but remove escape sequence. +type NonColorable struct { + out io.Writer +} + +// NewNonColorable return new instance of Writer which remove escape sequence from Writer. +func NewNonColorable(w io.Writer) io.Writer { + return &NonColorable{out: w} +} + +// Write write data on console +func (w *NonColorable) Write(data []byte) (n int, err error) { + er := bytes.NewReader(data) + var bw [1]byte +loop: + for { + c1, err := er.ReadByte() + if err != nil { + break loop + } + if c1 != 0x1b { + bw[0] = c1 + w.out.Write(bw[:]) + continue + } + c2, err := er.ReadByte() + if err != nil { + break loop + } + if c2 != 0x5b { + continue + } + + var buf bytes.Buffer + for { + c, err := er.ReadByte() + if err != nil { + break loop + } + if ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '@' { + break + } + buf.Write([]byte(string(c))) + } + } + + return len(data), nil +} diff --git a/vendor/github.com/mattn/go-isatty/.travis.yml b/vendor/github.com/mattn/go-isatty/.travis.yml new file mode 100644 index 00000000..604314dd --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/.travis.yml @@ -0,0 +1,14 @@ +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/LICENSE b/vendor/github.com/mattn/go-isatty/LICENSE new file mode 100644 index 00000000..65dc692b --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/LICENSE @@ -0,0 +1,9 @@ +Copyright (c) Yasuhiro MATSUMOTO + +MIT License (Expat) + +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. diff --git a/vendor/github.com/mattn/go-isatty/README.md b/vendor/github.com/mattn/go-isatty/README.md new file mode 100644 index 00000000..38418353 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/README.md @@ -0,0 +1,50 @@ +# go-isatty + +[![Godoc Reference](https://godoc.org/github.com/mattn/go-isatty?status.svg)](http://godoc.org/github.com/mattn/go-isatty) +[![Codecov](https://codecov.io/gh/mattn/go-isatty/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-isatty) +[![Coverage Status](https://coveralls.io/repos/github/mattn/go-isatty/badge.svg?branch=master)](https://coveralls.io/github/mattn/go-isatty?branch=master) +[![Go Report Card](https://goreportcard.com/badge/mattn/go-isatty)](https://goreportcard.com/report/mattn/go-isatty) + +isatty for golang + +## Usage + +```go +package main + +import ( + "fmt" + "github.com/mattn/go-isatty" + "os" +) + +func main() { + if isatty.IsTerminal(os.Stdout.Fd()) { + fmt.Println("Is Terminal") + } else if isatty.IsCygwinTerminal(os.Stdout.Fd()) { + fmt.Println("Is Cygwin/MSYS2 Terminal") + } else { + fmt.Println("Is Not Terminal") + } +} +``` + +## Installation + +``` +$ go get github.com/mattn/go-isatty +``` + +## License + +MIT + +## Author + +Yasuhiro Matsumoto (a.k.a mattn) + +## Thanks + +* k-takata: base idea for IsCygwinTerminal + + https://github.com/k-takata/go-iscygpty diff --git a/vendor/github.com/mattn/go-isatty/doc.go b/vendor/github.com/mattn/go-isatty/doc.go new file mode 100644 index 00000000..17d4f90e --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/doc.go @@ -0,0 +1,2 @@ +// Package isatty implements interface to isatty +package isatty diff --git a/vendor/github.com/mattn/go-isatty/go.mod b/vendor/github.com/mattn/go-isatty/go.mod new file mode 100644 index 00000000..605c4c22 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/go.mod @@ -0,0 +1,5 @@ +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 new file mode 100644 index 00000000..912e29cb --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/go.sum @@ -0,0 +1,2 @@ +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/go.test.sh b/vendor/github.com/mattn/go-isatty/go.test.sh new file mode 100644 index 00000000..012162b0 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/go.test.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash + +set -e +echo "" > coverage.txt + +for d in $(go list ./... | grep -v vendor); do + go test -race -coverprofile=profile.out -covermode=atomic "$d" + if [ -f profile.out ]; then + cat profile.out >> coverage.txt + rm profile.out + fi +done diff --git a/vendor/github.com/mattn/go-isatty/isatty_bsd.go b/vendor/github.com/mattn/go-isatty/isatty_bsd.go new file mode 100644 index 00000000..711f2880 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_bsd.go @@ -0,0 +1,18 @@ +// +build darwin freebsd openbsd netbsd dragonfly +// +build !appengine + +package isatty + +import "golang.org/x/sys/unix" + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + _, err := unix.IoctlGetTermios(int(fd), unix.TIOCGETA) + return err == nil +} + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_others.go b/vendor/github.com/mattn/go-isatty/isatty_others.go new file mode 100644 index 00000000..ff714a37 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_others.go @@ -0,0 +1,15 @@ +// +build appengine js nacl + +package isatty + +// IsTerminal returns true if the file descriptor is terminal which +// is always false on js and appengine classic which is a sandboxed PaaS. +func IsTerminal(fd uintptr) bool { + return false +} + +// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_plan9.go b/vendor/github.com/mattn/go-isatty/isatty_plan9.go new file mode 100644 index 00000000..c5b6e0c0 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_plan9.go @@ -0,0 +1,22 @@ +// +build plan9 + +package isatty + +import ( + "syscall" +) + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd uintptr) bool { + path, err := syscall.Fd2path(int(fd)) + if err != nil { + return false + } + return path == "/dev/cons" || path == "/mnt/term/dev/cons" +} + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_solaris.go b/vendor/github.com/mattn/go-isatty/isatty_solaris.go new file mode 100644 index 00000000..bdd5c79a --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_solaris.go @@ -0,0 +1,22 @@ +// +build solaris +// +build !appengine + +package isatty + +import ( + "golang.org/x/sys/unix" +) + +// 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 +func IsTerminal(fd uintptr) bool { + var termio unix.Termio + err := unix.IoctlSetTermio(int(fd), unix.TCGETA, &termio) + return err == nil +} + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_tcgets.go b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go new file mode 100644 index 00000000..31a1ca97 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_tcgets.go @@ -0,0 +1,18 @@ +// +build linux aix +// +build !appengine + +package isatty + +import "golang.org/x/sys/unix" + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + _, err := unix.IoctlGetTermios(int(fd), unix.TCGETS) + return err == nil +} + +// IsCygwinTerminal return true if the file descriptor is a cygwin or msys2 +// terminal. This is also always false on this environment. +func IsCygwinTerminal(fd uintptr) bool { + return false +} diff --git a/vendor/github.com/mattn/go-isatty/isatty_windows.go b/vendor/github.com/mattn/go-isatty/isatty_windows.go new file mode 100644 index 00000000..1fa86915 --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/isatty_windows.go @@ -0,0 +1,125 @@ +// +build windows +// +build !appengine + +package isatty + +import ( + "errors" + "strings" + "syscall" + "unicode/utf16" + "unsafe" +) + +const ( + objectNameInfo uintptr = 1 + fileNameInfo = 2 + fileTypePipe = 3 +) + +var ( + kernel32 = syscall.NewLazyDLL("kernel32.dll") + ntdll = syscall.NewLazyDLL("ntdll.dll") + procGetConsoleMode = kernel32.NewProc("GetConsoleMode") + procGetFileInformationByHandleEx = kernel32.NewProc("GetFileInformationByHandleEx") + procGetFileType = kernel32.NewProc("GetFileType") + procNtQueryObject = ntdll.NewProc("NtQueryObject") +) + +func init() { + // Check if GetFileInformationByHandleEx is available. + if procGetFileInformationByHandleEx.Find() != nil { + procGetFileInformationByHandleEx = nil + } +} + +// IsTerminal return true if the file descriptor is terminal. +func IsTerminal(fd uintptr) bool { + var st uint32 + r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, fd, uintptr(unsafe.Pointer(&st)), 0) + return r != 0 && e == 0 +} + +// Check pipe name is used for cygwin/msys2 pty. +// Cygwin/MSYS2 PTY has a name like: +// \{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master +func isCygwinPipeName(name string) bool { + token := strings.Split(name, "-") + if len(token) < 5 { + return false + } + + if token[0] != `\msys` && + token[0] != `\cygwin` && + token[0] != `\Device\NamedPipe\msys` && + token[0] != `\Device\NamedPipe\cygwin` { + return false + } + + if token[1] == "" { + return false + } + + if !strings.HasPrefix(token[2], "pty") { + return false + } + + if token[3] != `from` && token[3] != `to` { + return false + } + + if token[4] != "master" { + return false + } + + return true +} + +// 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 +// 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 +func getFileNameByHandle(fd uintptr) (string, error) { + if procNtQueryObject == nil { + return "", errors.New("ntdll.dll: NtQueryObject not supported") + } + + var buf [4 + syscall.MAX_PATH]uint16 + var result int + r, _, e := syscall.Syscall6(procNtQueryObject.Addr(), 5, + fd, objectNameInfo, uintptr(unsafe.Pointer(&buf)), uintptr(2*len(buf)), uintptr(unsafe.Pointer(&result)), 0) + if r != 0 { + return "", e + } + return string(utf16.Decode(buf[4 : 4+buf[0]/2])), nil +} + +// IsCygwinTerminal() return true if the file descriptor is a cygwin or msys2 +// terminal. +func IsCygwinTerminal(fd uintptr) bool { + if procGetFileInformationByHandleEx == nil { + name, err := getFileNameByHandle(fd) + if err != nil { + return false + } + return isCygwinPipeName(name) + } + + // Cygwin/msys's pty is a pipe. + ft, _, e := syscall.Syscall(procGetFileType.Addr(), 1, fd, 0, 0) + if ft != fileTypePipe || e != 0 { + return false + } + + var buf [2 + syscall.MAX_PATH]uint16 + r, _, e := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), + 4, fd, fileNameInfo, uintptr(unsafe.Pointer(&buf)), + uintptr(len(buf)*2), 0, 0) + if r == 0 || e != 0 { + return false + } + + l := *(*uint32)(unsafe.Pointer(&buf)) + return isCygwinPipeName(string(utf16.Decode(buf[2 : 2+l/2]))) +} diff --git a/vendor/github.com/mattn/go-isatty/renovate.json b/vendor/github.com/mattn/go-isatty/renovate.json new file mode 100644 index 00000000..5ae9d96b --- /dev/null +++ b/vendor/github.com/mattn/go-isatty/renovate.json @@ -0,0 +1,8 @@ +{ + "extends": [ + "config:base" + ], + "postUpdateOptions": [ + "gomodTidy" + ] +} diff --git a/vendor/github.com/onsi/ginkgo/CHANGELOG.md b/vendor/github.com/onsi/ginkgo/CHANGELOG.md index bdf18327..6092fcb6 100644 --- a/vendor/github.com/onsi/ginkgo/CHANGELOG.md +++ b/vendor/github.com/onsi/ginkgo/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.14.1 + +### Fixes +- Discard exported method declaration when running ginkgo bootstrap (#558) [f4b0240] + ## 1.14.0 ### Features diff --git a/vendor/github.com/onsi/ginkgo/README.md b/vendor/github.com/onsi/ginkgo/README.md index fab11458..475e0499 100644 --- a/vendor/github.com/onsi/ginkgo/README.md +++ b/vendor/github.com/onsi/ginkgo/README.md @@ -80,10 +80,11 @@ Agouti allows you run WebDriver integration tests. Learn more about Agouti [her You'll need the Go command-line tools. Follow the [installation instructions](https://golang.org/doc/install) if you don't have it installed. ### Global installation -To install the Ginkgo command line interface into the `$PATH` (actually to `$GOBIN`): +To install the Ginkgo command line interface: ```bash go get -u github.com/onsi/ginkgo/ginkgo ``` +Note that this will install it to `$GOBIN`, which will need to be in the `$PATH` (or equivalent). Run `go help install` for more information. ### Go module ["tools package"](https://github.com/golang/go/issues/25922): Create (or update) a file called `tools/tools.go` with the following contents: @@ -93,7 +94,7 @@ Create (or update) a file called `tools/tools.go` with the following contents: package tools import ( - _ "github.com/onsi/ginkgo" + _ "github.com/onsi/ginkgo/ginkgo" ) // This file imports packages that are used when running go generate, or used diff --git a/vendor/github.com/onsi/ginkgo/config/config.go b/vendor/github.com/onsi/ginkgo/config/config.go index 2ae48b80..feef2bcd 100644 --- a/vendor/github.com/onsi/ginkgo/config/config.go +++ b/vendor/github.com/onsi/ginkgo/config/config.go @@ -20,7 +20,7 @@ import ( "fmt" ) -const VERSION = "1.14.0" +const VERSION = "1.14.1" type GinkgoConfigType struct { RandomSeed int64 diff --git a/vendor/github.com/onsi/ginkgo/ginkgo/nodot/nodot.go b/vendor/github.com/onsi/ginkgo/ginkgo/nodot/nodot.go index 3f7237c6..c87b7216 100644 --- a/vendor/github.com/onsi/ginkgo/ginkgo/nodot/nodot.go +++ b/vendor/github.com/onsi/ginkgo/ginkgo/nodot/nodot.go @@ -186,7 +186,9 @@ func getExportedDeclarationsForFile(path string) ([]string, error) { declarations = append(declarations, s.Names[0].Name) } case *ast.FuncDecl: - declarations = append(declarations, x.Name.Name) + if x.Recv == nil { + declarations = append(declarations, x.Name.Name) + } } } diff --git a/vendor/github.com/onsi/gomega/CHANGELOG.md b/vendor/github.com/onsi/gomega/CHANGELOG.md index 3aafdbcf..0b6c2fb6 100644 --- a/vendor/github.com/onsi/gomega/CHANGELOG.md +++ b/vendor/github.com/onsi/gomega/CHANGELOG.md @@ -1,3 +1,8 @@ +## 1.10.2 + +### Fixes +- Add ExpectWithOffset, EventuallyWithOffset and ConsistentlyWithOffset to WithT (#391) [990941a] + ## 1.10.1 ### Fixes diff --git a/vendor/github.com/onsi/gomega/gomega_dsl.go b/vendor/github.com/onsi/gomega/gomega_dsl.go index 8ff9611d..b416d20c 100644 --- a/vendor/github.com/onsi/gomega/gomega_dsl.go +++ b/vendor/github.com/onsi/gomega/gomega_dsl.go @@ -24,7 +24,7 @@ import ( "github.com/onsi/gomega/types" ) -const GOMEGA_VERSION = "1.10.1" +const GOMEGA_VERSION = "1.10.2" const nilFailHandlerPanic = `You are trying to make an assertion, but Gomega's fail handler is nil. If you're using Ginkgo then you probably forgot to put your assertion in an It(). @@ -376,13 +376,13 @@ func NewGomegaWithT(t types.GomegaTestingT) *GomegaWithT { return NewWithT(t) } -// Expect is used to make assertions. See documentation for Expect. -func (g *WithT) Expect(actual interface{}, extra ...interface{}) Assertion { - return assertion.New(actual, testingtsupport.BuildTestingTGomegaFailWrapper(g.t), 0, extra...) +// ExpectWithOffset is used to make assertions. See documentation for ExpectWithOffset. +func (g *WithT) ExpectWithOffset(offset int, actual interface{}, extra ...interface{}) Assertion { + return assertion.New(actual, testingtsupport.BuildTestingTGomegaFailWrapper(g.t), offset, extra...) } -// Eventually is used to make asynchronous assertions. See documentation for Eventually. -func (g *WithT) Eventually(actual interface{}, intervals ...interface{}) AsyncAssertion { +// EventuallyWithOffset is used to make asynchronous assertions. See documentation for EventuallyWithOffset. +func (g *WithT) EventuallyWithOffset(offset int, actual interface{}, intervals ...interface{}) AsyncAssertion { timeoutInterval := defaultEventuallyTimeout pollingInterval := defaultEventuallyPollingInterval if len(intervals) > 0 { @@ -391,11 +391,11 @@ func (g *WithT) Eventually(actual interface{}, intervals ...interface{}) AsyncAs if len(intervals) > 1 { pollingInterval = toDuration(intervals[1]) } - return asyncassertion.New(asyncassertion.AsyncAssertionTypeEventually, actual, testingtsupport.BuildTestingTGomegaFailWrapper(g.t), timeoutInterval, pollingInterval, 0) + return asyncassertion.New(asyncassertion.AsyncAssertionTypeEventually, actual, testingtsupport.BuildTestingTGomegaFailWrapper(g.t), timeoutInterval, pollingInterval, offset) } -// Consistently is used to make asynchronous assertions. See documentation for Consistently. -func (g *WithT) Consistently(actual interface{}, intervals ...interface{}) AsyncAssertion { +// ConsistentlyWithOffset is used to make asynchronous assertions. See documentation for ConsistentlyWithOffset. +func (g *WithT) ConsistentlyWithOffset(offset int, actual interface{}, intervals ...interface{}) AsyncAssertion { timeoutInterval := defaultConsistentlyDuration pollingInterval := defaultConsistentlyPollingInterval if len(intervals) > 0 { @@ -404,7 +404,22 @@ func (g *WithT) Consistently(actual interface{}, intervals ...interface{}) Async if len(intervals) > 1 { pollingInterval = toDuration(intervals[1]) } - return asyncassertion.New(asyncassertion.AsyncAssertionTypeConsistently, actual, testingtsupport.BuildTestingTGomegaFailWrapper(g.t), timeoutInterval, pollingInterval, 0) + return asyncassertion.New(asyncassertion.AsyncAssertionTypeConsistently, actual, testingtsupport.BuildTestingTGomegaFailWrapper(g.t), timeoutInterval, pollingInterval, offset) +} + +// Expect is used to make assertions. See documentation for Expect. +func (g *WithT) Expect(actual interface{}, extra ...interface{}) Assertion { + return g.ExpectWithOffset(0, actual, extra...) +} + +// Eventually is used to make asynchronous assertions. See documentation for Eventually. +func (g *WithT) Eventually(actual interface{}, intervals ...interface{}) AsyncAssertion { + return g.EventuallyWithOffset(0, actual, intervals...) +} + +// Consistently is used to make asynchronous assertions. See documentation for Consistently. +func (g *WithT) Consistently(actual interface{}, intervals ...interface{}) AsyncAssertion { + return g.ConsistentlyWithOffset(0, actual, intervals...) } func toDuration(input interface{}) time.Duration { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/counter.go b/vendor/github.com/prometheus/client_golang/prometheus/counter.go index d463e36d..0e1b48c0 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/counter.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/counter.go @@ -17,6 +17,7 @@ import ( "errors" "math" "sync/atomic" + "time" dto "github.com/prometheus/client_model/go" ) @@ -42,11 +43,27 @@ type Counter interface { Add(float64) } +// ExemplarAdder is implemented by Counters that offer the option of adding a +// value to the Counter together with an exemplar. Its AddWithExemplar method +// works like the Add method of the Counter interface but also replaces the +// currently saved exemplar (if any) with a new one, created from the provided +// value, the current time as timestamp, and the provided labels. Empty Labels +// will lead to a valid (label-less) exemplar. But if Labels is nil, the current +// exemplar is left in place. AddWithExemplar panics if the value is < 0, if any +// of the provided labels are invalid, or if the provided labels contain more +// than 64 runes in total. +type ExemplarAdder interface { + AddWithExemplar(value float64, exemplar Labels) +} + // CounterOpts is an alias for Opts. See there for doc comments. type CounterOpts Opts // NewCounter creates a new Counter based on the provided CounterOpts. // +// The returned implementation also implements ExemplarAdder. It is safe to +// perform the corresponding type assertion. +// // The returned implementation tracks the counter value in two separate // variables, a float64 and a uint64. The latter is used to track calls of the // Inc method and calls of the Add method with a value that can be represented @@ -61,7 +78,7 @@ func NewCounter(opts CounterOpts) Counter { nil, opts.ConstLabels, ) - result := &counter{desc: desc, labelPairs: desc.constLabelPairs} + result := &counter{desc: desc, labelPairs: desc.constLabelPairs, now: time.Now} result.init(result) // Init self-collection. return result } @@ -78,6 +95,9 @@ type counter struct { desc *Desc labelPairs []*dto.LabelPair + exemplar atomic.Value // Containing nil or a *dto.Exemplar. + + now func() time.Time // To mock out time.Now() for testing. } func (c *counter) Desc() *Desc { @@ -88,6 +108,7 @@ func (c *counter) Add(v float64) { if v < 0 { panic(errors.New("counter cannot decrease in value")) } + ival := uint64(v) if float64(ival) == v { atomic.AddUint64(&c.valInt, ival) @@ -103,6 +124,11 @@ func (c *counter) Add(v float64) { } } +func (c *counter) AddWithExemplar(v float64, e Labels) { + c.Add(v) + c.updateExemplar(v, e) +} + func (c *counter) Inc() { atomic.AddUint64(&c.valInt, 1) } @@ -112,7 +138,23 @@ func (c *counter) Write(out *dto.Metric) error { ival := atomic.LoadUint64(&c.valInt) val := fval + float64(ival) - return populateMetric(CounterValue, val, c.labelPairs, out) + var exemplar *dto.Exemplar + if e := c.exemplar.Load(); e != nil { + exemplar = e.(*dto.Exemplar) + } + + return populateMetric(CounterValue, val, c.labelPairs, exemplar, out) +} + +func (c *counter) updateExemplar(v float64, l Labels) { + if l == nil { + return + } + e, err := newExemplar(v, c.now(), l) + if err != nil { + panic(err) + } + c.exemplar.Store(e) } // CounterVec is a Collector that bundles a set of Counters that all share the @@ -138,7 +180,7 @@ func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec { if len(lvs) != len(desc.variableLabels) { panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, lvs)) } - result := &counter{desc: desc, labelPairs: makeLabelPairs(desc, lvs)} + result := &counter{desc: desc, labelPairs: makeLabelPairs(desc, lvs), now: time.Now} result.init(result) // Init self-collection. return result }), @@ -267,6 +309,8 @@ type CounterFunc interface { // provided function must be concurrency-safe. The function should also honor // the contract for a Counter (values only go up, not down), but compliance will // not be checked. +// +// Check out the ExampleGaugeFunc examples for the similar GaugeFunc. func NewCounterFunc(opts CounterOpts, function func() float64) CounterFunc { return newValueFunc(NewDesc( BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), diff --git a/vendor/github.com/prometheus/client_golang/prometheus/desc.go b/vendor/github.com/prometheus/client_golang/prometheus/desc.go index e3232d79..2f19f5e1 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/desc.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/desc.go @@ -20,6 +20,7 @@ import ( "strings" "github.com/cespare/xxhash/v2" + //lint:ignore SA1019 Need to keep deprecated package for compatibility. "github.com/golang/protobuf/proto" "github.com/prometheus/common/model" diff --git a/vendor/github.com/prometheus/client_golang/prometheus/doc.go b/vendor/github.com/prometheus/client_golang/prometheus/doc.go index 01977de6..98450125 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/doc.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/doc.go @@ -84,25 +84,21 @@ // of those four metric types can be found in the Prometheus docs: // https://prometheus.io/docs/concepts/metric_types/ // -// A fifth "type" of metric is Untyped. It behaves like a Gauge, but signals the -// Prometheus server not to assume anything about its type. -// -// In addition to the fundamental metric types Gauge, Counter, Summary, -// Histogram, and Untyped, a very important part of the Prometheus data model is -// the partitioning of samples along dimensions called labels, which results in +// In addition to the fundamental metric types Gauge, Counter, Summary, and +// Histogram, a very important part of the Prometheus data model is the +// partitioning of samples along dimensions called labels, which results in // metric vectors. The fundamental types are GaugeVec, CounterVec, SummaryVec, -// HistogramVec, and UntypedVec. +// and HistogramVec. // // While only the fundamental metric types implement the Metric interface, both // the metrics and their vector versions implement the Collector interface. A // Collector manages the collection of a number of Metrics, but for convenience, -// a Metric can also “collect itself”. Note that Gauge, Counter, Summary, -// Histogram, and Untyped are interfaces themselves while GaugeVec, CounterVec, -// SummaryVec, HistogramVec, and UntypedVec are not. +// a Metric can also “collect itself”. Note that Gauge, Counter, Summary, and +// Histogram are interfaces themselves while GaugeVec, CounterVec, SummaryVec, +// and HistogramVec are not. // // To create instances of Metrics and their vector versions, you need a suitable -// …Opts struct, i.e. GaugeOpts, CounterOpts, SummaryOpts, HistogramOpts, or -// UntypedOpts. +// …Opts struct, i.e. GaugeOpts, CounterOpts, SummaryOpts, or HistogramOpts. // // Custom Collectors and constant Metrics // @@ -118,13 +114,16 @@ // existing numbers into Prometheus Metrics during collection. An own // implementation of the Collector interface is perfect for that. You can create // Metric instances “on the fly” using NewConstMetric, NewConstHistogram, and -// NewConstSummary (and their respective Must… versions). That will happen in -// the Collect method. The Describe method has to return separate Desc -// instances, representative of the “throw-away” metrics to be created later. -// NewDesc comes in handy to create those Desc instances. Alternatively, you -// could return no Desc at all, which will mark the Collector “unchecked”. No -// checks are performed at registration time, but metric consistency will still -// be ensured at scrape time, i.e. any inconsistencies will lead to scrape +// NewConstSummary (and their respective Must… versions). NewConstMetric is used +// for all metric types with just a float64 as their value: Counter, Gauge, and +// a special “type” called Untyped. Use the latter if you are not sure if the +// mirrored metric is a Counter or a Gauge. Creation of the Metric instance +// happens in the Collect method. The Describe method has to return separate +// Desc instances, representative of the “throw-away” metrics to be created +// later. NewDesc comes in handy to create those Desc instances. Alternatively, +// you could return no Desc at all, which will mark the Collector “unchecked”. +// No checks are performed at registration time, but metric consistency will +// still be ensured at scrape time, i.e. any inconsistencies will lead to scrape // errors. Thus, with unchecked Collectors, the responsibility to not collect // metrics that lead to inconsistencies in the total scrape result lies with the // implementer of the Collector. While this is not a desirable state, it is diff --git a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go index 56d8cc20..d67573f7 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go @@ -123,7 +123,7 @@ func (g *gauge) Sub(val float64) { func (g *gauge) Write(out *dto.Metric) error { val := math.Float64frombits(atomic.LoadUint64(&g.valBits)) - return populateMetric(GaugeValue, val, g.labelPairs, out) + return populateMetric(GaugeValue, val, g.labelPairs, nil, out) } // GaugeVec is a Collector that bundles a set of Gauges that all share the same diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go index dc9247fe..ea05cf42 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go @@ -73,7 +73,7 @@ func NewGoCollector() Collector { nil, nil), gcDesc: NewDesc( "go_gc_duration_seconds", - "A summary of the GC invocation durations.", + "A summary of the pause duration of garbage collection cycles.", nil, nil), goInfoDesc: NewDesc( "go_info", diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go index ac2614d5..d4ea301a 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go @@ -20,7 +20,9 @@ import ( "sort" "sync" "sync/atomic" + "time" + //lint:ignore SA1019 Need to keep deprecated package for compatibility. "github.com/golang/protobuf/proto" dto "github.com/prometheus/client_model/go" @@ -151,6 +153,10 @@ type HistogramOpts struct { // NewHistogram creates a new Histogram based on the provided HistogramOpts. It // panics if the buckets in HistogramOpts are not in strictly increasing order. +// +// The returned implementation also implements ExemplarObserver. It is safe to +// perform the corresponding type assertion. Exemplars are tracked separately +// for each bucket. func NewHistogram(opts HistogramOpts) Histogram { return newHistogram( NewDesc( @@ -188,6 +194,7 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr upperBounds: opts.Buckets, labelPairs: makeLabelPairs(desc, labelValues), counts: [2]*histogramCounts{{}, {}}, + now: time.Now, } for i, upperBound := range h.upperBounds { if i < len(h.upperBounds)-1 { @@ -205,9 +212,10 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr } } // Finally we know the final length of h.upperBounds and can make buckets - // for both counts: + // for both counts as well as exemplars: h.counts[0].buckets = make([]uint64, len(h.upperBounds)) h.counts[1].buckets = make([]uint64, len(h.upperBounds)) + h.exemplars = make([]atomic.Value, len(h.upperBounds)+1) h.init(h) // Init self-collection. return h @@ -254,6 +262,9 @@ type histogram struct { upperBounds []float64 labelPairs []*dto.LabelPair + exemplars []atomic.Value // One more than buckets (to include +Inf), each a *dto.Exemplar. + + now func() time.Time // To mock out time.Now() for testing. } func (h *histogram) Desc() *Desc { @@ -261,36 +272,13 @@ func (h *histogram) Desc() *Desc { } func (h *histogram) Observe(v float64) { - // TODO(beorn7): For small numbers of buckets (<30), a linear search is - // slightly faster than the binary search. If we really care, we could - // switch from one search strategy to the other depending on the number - // of buckets. - // - // Microbenchmarks (BenchmarkHistogramNoLabels): - // 11 buckets: 38.3 ns/op linear - binary 48.7 ns/op - // 100 buckets: 78.1 ns/op linear - binary 54.9 ns/op - // 300 buckets: 154 ns/op linear - binary 61.6 ns/op - i := sort.SearchFloat64s(h.upperBounds, v) - - // We increment h.countAndHotIdx so that the counter in the lower - // 63 bits gets incremented. At the same time, we get the new value - // back, which we can use to find the currently-hot counts. - n := atomic.AddUint64(&h.countAndHotIdx, 1) - hotCounts := h.counts[n>>63] + h.observe(v, h.findBucket(v)) +} - if i < len(h.upperBounds) { - atomic.AddUint64(&hotCounts.buckets[i], 1) - } - for { - oldBits := atomic.LoadUint64(&hotCounts.sumBits) - newBits := math.Float64bits(math.Float64frombits(oldBits) + v) - if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { - break - } - } - // Increment count last as we take it as a signal that the observation - // is complete. - atomic.AddUint64(&hotCounts.count, 1) +func (h *histogram) ObserveWithExemplar(v float64, e Labels) { + i := h.findBucket(v) + h.observe(v, i) + h.updateExemplar(v, i, e) } func (h *histogram) Write(out *dto.Metric) error { @@ -329,6 +317,18 @@ func (h *histogram) Write(out *dto.Metric) error { CumulativeCount: proto.Uint64(cumCount), UpperBound: proto.Float64(upperBound), } + if e := h.exemplars[i].Load(); e != nil { + his.Bucket[i].Exemplar = e.(*dto.Exemplar) + } + } + // If there is an exemplar for the +Inf bucket, we have to add that bucket explicitly. + if e := h.exemplars[len(h.upperBounds)].Load(); e != nil { + b := &dto.Bucket{ + CumulativeCount: proto.Uint64(count), + UpperBound: proto.Float64(math.Inf(1)), + Exemplar: e.(*dto.Exemplar), + } + his.Bucket = append(his.Bucket, b) } out.Histogram = his @@ -352,6 +352,57 @@ func (h *histogram) Write(out *dto.Metric) error { return nil } +// findBucket returns the index of the bucket for the provided value, or +// len(h.upperBounds) for the +Inf bucket. +func (h *histogram) findBucket(v float64) int { + // TODO(beorn7): For small numbers of buckets (<30), a linear search is + // slightly faster than the binary search. If we really care, we could + // switch from one search strategy to the other depending on the number + // of buckets. + // + // Microbenchmarks (BenchmarkHistogramNoLabels): + // 11 buckets: 38.3 ns/op linear - binary 48.7 ns/op + // 100 buckets: 78.1 ns/op linear - binary 54.9 ns/op + // 300 buckets: 154 ns/op linear - binary 61.6 ns/op + return sort.SearchFloat64s(h.upperBounds, v) +} + +// observe is the implementation for Observe without the findBucket part. +func (h *histogram) observe(v float64, bucket int) { + // We increment h.countAndHotIdx so that the counter in the lower + // 63 bits gets incremented. At the same time, we get the new value + // back, which we can use to find the currently-hot counts. + n := atomic.AddUint64(&h.countAndHotIdx, 1) + hotCounts := h.counts[n>>63] + + if bucket < len(h.upperBounds) { + atomic.AddUint64(&hotCounts.buckets[bucket], 1) + } + for { + oldBits := atomic.LoadUint64(&hotCounts.sumBits) + newBits := math.Float64bits(math.Float64frombits(oldBits) + v) + if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { + break + } + } + // Increment count last as we take it as a signal that the observation + // is complete. + atomic.AddUint64(&hotCounts.count, 1) +} + +// updateExemplar replaces the exemplar for the provided bucket. With empty +// labels, it's a no-op. It panics if any of the labels is invalid. +func (h *histogram) updateExemplar(v float64, bucket int, l Labels) { + if l == nil { + return + } + e, err := newExemplar(v, h.now(), l) + if err != nil { + panic(err) + } + h.exemplars[bucket].Store(e) +} + // HistogramVec is a Collector that bundles a set of Histograms that all share the // same Desc, but have different values for their variable labels. This is used // if you want to count the same thing partitioned by various dimensions @@ -556,7 +607,7 @@ func NewConstHistogram( } // MustNewConstHistogram is a version of NewConstHistogram that panics where -// NewConstMetric would have returned an error. +// NewConstHistogram would have returned an error. func MustNewConstHistogram( desc *Desc, count uint64, diff --git a/vendor/github.com/prometheus/client_golang/prometheus/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/metric.go index 0df1eff8..35bd8bde 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/metric.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/metric.go @@ -17,6 +17,7 @@ import ( "strings" "time" + //lint:ignore SA1019 Need to keep deprecated package for compatibility. "github.com/golang/protobuf/proto" "github.com/prometheus/common/model" diff --git a/vendor/github.com/prometheus/client_golang/prometheus/observer.go b/vendor/github.com/prometheus/client_golang/prometheus/observer.go index 5806cd09..44128016 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/observer.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/observer.go @@ -50,3 +50,15 @@ type ObserverVec interface { Collector } + +// ExemplarObserver is implemented by Observers that offer the option of +// observing a value together with an exemplar. Its ObserveWithExemplar method +// works like the Observe method of an Observer but also replaces the currently +// saved exemplar (if any) with a new one, created from the provided value, the +// current time as timestamp, and the provided Labels. Empty Labels will lead to +// a valid (label-less) exemplar. But if Labels is nil, the current exemplar is +// left in place. ObserveWithExemplar panics if any of the provided labels are +// invalid or if the provided labels contain more than 64 runes in total. +type ExemplarObserver interface { + ObserveWithExemplar(value float64, exemplar Labels) +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go index e0b935d1..f973398d 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go @@ -33,18 +33,22 @@ var ( ) type processMemoryCounters struct { - // https://docs.microsoft.com/en-us/windows/desktop/api/psapi/ns-psapi-_process_memory_counters_ex + // System interface description + // https://docs.microsoft.com/en-us/windows/desktop/api/psapi/ns-psapi-process_memory_counters_ex + + // Refer to the Golang internal implementation + // https://golang.org/src/internal/syscall/windows/psapi_windows.go _ uint32 PageFaultCount uint32 - PeakWorkingSetSize uint64 - WorkingSetSize uint64 - QuotaPeakPagedPoolUsage uint64 - QuotaPagedPoolUsage uint64 - QuotaPeakNonPagedPoolUsage uint64 - QuotaNonPagedPoolUsage uint64 - PagefileUsage uint64 - PeakPagefileUsage uint64 - PrivateUsage uint64 + PeakWorkingSetSize uintptr + WorkingSetSize uintptr + QuotaPeakPagedPoolUsage uintptr + QuotaPagedPoolUsage uintptr + QuotaPeakNonPagedPoolUsage uintptr + QuotaNonPagedPoolUsage uintptr + PagefileUsage uintptr + PeakPagefileUsage uintptr + PrivateUsage uintptr } func getProcessMemoryInfo(handle windows.Handle) (processMemoryCounters, error) { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go index d1354b10..5070e72e 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go @@ -53,12 +53,16 @@ func (r *responseWriterDelegator) Written() int64 { } func (r *responseWriterDelegator) WriteHeader(code int) { + if r.observeWriteHeader != nil && !r.wroteHeader { + // Only call observeWriteHeader for the 1st time. It's a bug if + // WriteHeader is called more than once, but we want to protect + // against it here. Note that we still delegate the WriteHeader + // to the original ResponseWriter to not mask the bug from it. + r.observeWriteHeader(code) + } r.status = code r.wroteHeader = true r.ResponseWriter.WriteHeader(code) - if r.observeWriteHeader != nil { - r.observeWriteHeader(code) - } } func (r *responseWriterDelegator) Write(b []byte) (int, error) { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go index cea5a90f..5e1c4546 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go @@ -144,7 +144,12 @@ func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler { } } - contentType := expfmt.Negotiate(req.Header) + var contentType expfmt.Format + if opts.EnableOpenMetrics { + contentType = expfmt.NegotiateIncludingOpenMetrics(req.Header) + } else { + contentType = expfmt.Negotiate(req.Header) + } header := rsp.Header() header.Set(contentTypeHeader, string(contentType)) @@ -162,28 +167,40 @@ func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler { enc := expfmt.NewEncoder(w, contentType) - var lastErr error - for _, mf := range mfs { - if err := enc.Encode(mf); err != nil { - lastErr = err - if opts.ErrorLog != nil { - opts.ErrorLog.Println("error encoding and sending metric family:", err) - } - errCnt.WithLabelValues("encoding").Inc() - switch opts.ErrorHandling { - case PanicOnError: - panic(err) - case ContinueOnError: - // Handled later. - case HTTPErrorOnError: - httpError(rsp, err) - return - } + // handleError handles the error according to opts.ErrorHandling + // and returns true if we have to abort after the handling. + handleError := func(err error) bool { + if err == nil { + return false + } + if opts.ErrorLog != nil { + opts.ErrorLog.Println("error encoding and sending metric family:", err) + } + errCnt.WithLabelValues("encoding").Inc() + switch opts.ErrorHandling { + case PanicOnError: + panic(err) + case HTTPErrorOnError: + // We cannot really send an HTTP error at this + // point because we most likely have written + // something to rsp already. But at least we can + // stop sending. + return true } + // Do nothing in all other cases, including ContinueOnError. + return false } - if lastErr != nil { - httpError(rsp, lastErr) + for _, mf := range mfs { + if handleError(enc.Encode(mf)) { + return + } + } + if closer, ok := enc.(expfmt.Closer); ok { + // This in particular takes care of the final "# EOF\n" line for OpenMetrics. + if handleError(closer.Close()) { + return + } } }) @@ -255,7 +272,12 @@ type HandlerErrorHandling int // errors are encountered. const ( // Serve an HTTP status code 500 upon the first error - // encountered. Report the error message in the body. + // encountered. Report the error message in the body. Note that HTTP + // errors cannot be served anymore once the beginning of a regular + // payload has been sent. Thus, in the (unlikely) case that encoding the + // payload into the negotiated wire format fails, serving the response + // will simply be aborted. Set an ErrorLog in HandlerOpts to detect + // those errors. HTTPErrorOnError HandlerErrorHandling = iota // Ignore errors and try to serve as many metrics as possible. However, // if no metrics can be served, serve an HTTP status code 500 and the @@ -318,6 +340,16 @@ type HandlerOpts struct { // away). Until the implementation is improved, it is recommended to // implement a separate timeout in potentially slow Collectors. Timeout time.Duration + // If true, the experimental OpenMetrics encoding is added to the + // possible options during content negotiation. Note that Prometheus + // 2.5.0+ will negotiate OpenMetrics as first priority. OpenMetrics is + // the only way to transmit exemplars. However, the move to OpenMetrics + // is not completely transparent. Most notably, the values of "quantile" + // labels of Summaries and "le" labels of Histograms are formatted with + // a trailing ".0" if they would otherwise look like integer numbers + // (which changes the identity of the resulting series on the Prometheus + // server). + EnableOpenMetrics bool } // gzipAccepted returns whether the client will accept gzip-encoded content. @@ -334,11 +366,9 @@ func gzipAccepted(header http.Header) bool { } // httpError removes any content-encoding header and then calls http.Error with -// the provided error and http.StatusInternalServerErrer. Error contents is -// supposed to be uncompressed plain text. However, same as with a plain -// http.Error, any header settings will be void if the header has already been -// sent. The error message will still be written to the writer, but it will -// probably be of limited use. +// the provided error and http.StatusInternalServerError. Error contents is +// supposed to be uncompressed plain text. Same as with a plain http.Error, this +// must not be called if the header or any payload has already been sent. func httpError(rsp http.ResponseWriter, err error) { rsp.Header().Del(contentEncodingHeader) http.Error( diff --git a/vendor/github.com/prometheus/client_golang/prometheus/registry.go b/vendor/github.com/prometheus/client_golang/prometheus/registry.go index c05d6ee1..ba94405a 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/registry.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/registry.go @@ -26,6 +26,7 @@ import ( "unicode/utf8" "github.com/cespare/xxhash/v2" + //lint:ignore SA1019 Need to keep deprecated package for compatibility. "github.com/golang/protobuf/proto" "github.com/prometheus/common/expfmt" diff --git a/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/vendor/github.com/prometheus/client_golang/prometheus/summary.go index ae42e761..f3c1440d 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/summary.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/summary.go @@ -23,6 +23,7 @@ import ( "time" "github.com/beorn7/perks/quantile" + //lint:ignore SA1019 Need to keep deprecated package for compatibility. "github.com/golang/protobuf/proto" dto "github.com/prometheus/client_model/go" diff --git a/vendor/github.com/prometheus/client_golang/prometheus/value.go b/vendor/github.com/prometheus/client_golang/prometheus/value.go index eb248f10..6206928c 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/value.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/value.go @@ -16,8 +16,12 @@ package prometheus import ( "fmt" "sort" + "time" + "unicode/utf8" + //lint:ignore SA1019 Need to keep deprecated package for compatibility. "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes" dto "github.com/prometheus/client_model/go" ) @@ -25,7 +29,8 @@ import ( // ValueType is an enumeration of metric types that represent a simple value. type ValueType int -// Possible values for the ValueType enum. +// Possible values for the ValueType enum. Use UntypedValue to mark a metric +// with an unknown type. const ( _ ValueType = iota CounterValue @@ -69,7 +74,7 @@ func (v *valueFunc) Desc() *Desc { } func (v *valueFunc) Write(out *dto.Metric) error { - return populateMetric(v.valType, v.function(), v.labelPairs, out) + return populateMetric(v.valType, v.function(), v.labelPairs, nil, out) } // NewConstMetric returns a metric with one fixed value that cannot be @@ -116,19 +121,20 @@ func (m *constMetric) Desc() *Desc { } func (m *constMetric) Write(out *dto.Metric) error { - return populateMetric(m.valType, m.val, m.labelPairs, out) + return populateMetric(m.valType, m.val, m.labelPairs, nil, out) } func populateMetric( t ValueType, v float64, labelPairs []*dto.LabelPair, + e *dto.Exemplar, m *dto.Metric, ) error { m.Label = labelPairs switch t { case CounterValue: - m.Counter = &dto.Counter{Value: proto.Float64(v)} + m.Counter = &dto.Counter{Value: proto.Float64(v), Exemplar: e} case GaugeValue: m.Gauge = &dto.Gauge{Value: proto.Float64(v)} case UntypedValue: @@ -160,3 +166,40 @@ func makeLabelPairs(desc *Desc, labelValues []string) []*dto.LabelPair { sort.Sort(labelPairSorter(labelPairs)) return labelPairs } + +// ExemplarMaxRunes is the max total number of runes allowed in exemplar labels. +const ExemplarMaxRunes = 64 + +// newExemplar creates a new dto.Exemplar from the provided values. An error is +// returned if any of the label names or values are invalid or if the total +// number of runes in the label names and values exceeds ExemplarMaxRunes. +func newExemplar(value float64, ts time.Time, l Labels) (*dto.Exemplar, error) { + e := &dto.Exemplar{} + e.Value = proto.Float64(value) + tsProto, err := ptypes.TimestampProto(ts) + if err != nil { + return nil, err + } + e.Timestamp = tsProto + labelPairs := make([]*dto.LabelPair, 0, len(l)) + var runes int + for name, value := range l { + if !checkLabelName(name) { + return nil, fmt.Errorf("exemplar label name %q is invalid", name) + } + runes += utf8.RuneCountInString(name) + if !utf8.ValidString(value) { + return nil, fmt.Errorf("exemplar label value %q is not valid UTF-8", value) + } + runes += utf8.RuneCountInString(value) + labelPairs = append(labelPairs, &dto.LabelPair{ + Name: proto.String(name), + Value: proto.String(value), + }) + } + if runes > ExemplarMaxRunes { + return nil, fmt.Errorf("exemplar labels have %d runes, exceeding the limit of %d", runes, ExemplarMaxRunes) + } + e.Label = labelPairs + return e, nil +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/vec.go b/vendor/github.com/prometheus/client_golang/prometheus/vec.go index 19df3fe6..d53848dc 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/vec.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/vec.go @@ -91,6 +91,18 @@ func (m *metricVec) Delete(labels Labels) bool { return m.metricMap.deleteByHashWithLabels(h, labels, m.curry) } +// Without explicit forwarding of Describe, Collect, Reset, those methods won't +// show up in GoDoc. + +// Describe implements Collector. +func (m *metricVec) Describe(ch chan<- *Desc) { m.metricMap.Describe(ch) } + +// Collect implements Collector. +func (m *metricVec) Collect(ch chan<- Metric) { m.metricMap.Collect(ch) } + +// Reset deletes all metrics in this vector. +func (m *metricVec) Reset() { m.metricMap.Reset() } + func (m *metricVec) curryWith(labels Labels) (*metricVec, error) { var ( newCurry []curriedLabelValue diff --git a/vendor/github.com/prometheus/client_golang/prometheus/wrap.go b/vendor/github.com/prometheus/client_golang/prometheus/wrap.go index e303eef6..438aa5e9 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/wrap.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/wrap.go @@ -17,6 +17,7 @@ import ( "fmt" "sort" + //lint:ignore SA1019 Need to keep deprecated package for compatibility. "github.com/golang/protobuf/proto" dto "github.com/prometheus/client_model/go" @@ -27,7 +28,8 @@ import ( // registered with the wrapped Registerer in a modified way. The modified // Collector adds the provided Labels to all Metrics it collects (as // ConstLabels). The Metrics collected by the unmodified Collector must not -// duplicate any of those labels. +// duplicate any of those labels. Wrapping a nil value is valid, resulting +// in a no-op Registerer. // // WrapRegistererWith provides a way to add fixed labels to a subset of // Collectors. It should not be used to add fixed labels to all metrics exposed. @@ -50,6 +52,7 @@ func WrapRegistererWith(labels Labels, reg Registerer) Registerer { // Registerer. Collectors registered with the returned Registerer will be // registered with the wrapped Registerer in a modified way. The modified // Collector adds the provided prefix to the name of all Metrics it collects. +// Wrapping a nil value is valid, resulting in a no-op Registerer. // // WrapRegistererWithPrefix is useful to have one place to prefix all metrics of // a sub-system. To make this work, register metrics of the sub-system with the @@ -80,6 +83,9 @@ type wrappingRegisterer struct { } func (r *wrappingRegisterer) Register(c Collector) error { + if r.wrappedRegisterer == nil { + return nil + } return r.wrappedRegisterer.Register(&wrappingCollector{ wrappedCollector: c, prefix: r.prefix, @@ -88,6 +94,9 @@ func (r *wrappingRegisterer) Register(c Collector) error { } func (r *wrappingRegisterer) MustRegister(cs ...Collector) { + if r.wrappedRegisterer == nil { + return + } for _, c := range cs { if err := r.Register(c); err != nil { panic(err) @@ -96,6 +105,9 @@ func (r *wrappingRegisterer) MustRegister(cs ...Collector) { } func (r *wrappingRegisterer) Unregister(c Collector) bool { + if r.wrappedRegisterer == nil { + return false + } return r.wrappedRegisterer.Unregister(&wrappingCollector{ wrappedCollector: c, prefix: r.prefix, diff --git a/vendor/github.com/prometheus/common/expfmt/encode.go b/vendor/github.com/prometheus/common/expfmt/encode.go index 11839ed6..bd4e3474 100644 --- a/vendor/github.com/prometheus/common/expfmt/encode.go +++ b/vendor/github.com/prometheus/common/expfmt/encode.go @@ -30,17 +30,38 @@ type Encoder interface { Encode(*dto.MetricFamily) error } -type encoder func(*dto.MetricFamily) error +// Closer is implemented by Encoders that need to be closed to finalize +// encoding. (For example, OpenMetrics needs a final `# EOF` line.) +// +// Note that all Encoder implementations returned from this package implement +// Closer, too, even if the Close call is a no-op. This happens in preparation +// for adding a Close method to the Encoder interface directly in a (mildly +// breaking) release in the future. +type Closer interface { + Close() error +} + +type encoderCloser struct { + encode func(*dto.MetricFamily) error + close func() error +} -func (e encoder) Encode(v *dto.MetricFamily) error { - return e(v) +func (ec encoderCloser) Encode(v *dto.MetricFamily) error { + return ec.encode(v) } -// Negotiate returns the Content-Type based on the given Accept header. -// If no appropriate accepted type is found, FmtText is returned. +func (ec encoderCloser) Close() error { + return ec.close() +} + +// Negotiate returns the Content-Type based on the given Accept header. If no +// appropriate accepted type is found, FmtText is returned (which is the +// Prometheus text format). This function will never negotiate FmtOpenMetrics, +// as the support is still experimental. To include the option to negotiate +// FmtOpenMetrics, use NegotiateOpenMetrics. func Negotiate(h http.Header) Format { for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) { - // Check for protocol buffer + ver := ac.Params["version"] if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol { switch ac.Params["encoding"] { case "delimited": @@ -51,38 +72,91 @@ func Negotiate(h http.Header) Format { return FmtProtoCompact } } - // Check for text format. + if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") { + return FmtText + } + } + return FmtText +} + +// NegotiateIncludingOpenMetrics works like Negotiate but includes +// FmtOpenMetrics as an option for the result. Note that this function is +// temporary and will disappear once FmtOpenMetrics is fully supported and as +// such may be negotiated by the normal Negotiate function. +func NegotiateIncludingOpenMetrics(h http.Header) Format { + for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) { ver := ac.Params["version"] + if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol { + switch ac.Params["encoding"] { + case "delimited": + return FmtProtoDelim + case "text": + return FmtProtoText + case "compact-text": + return FmtProtoCompact + } + } if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") { return FmtText } + if ac.Type+"/"+ac.SubType == OpenMetricsType && (ver == OpenMetricsVersion || ver == "") { + return FmtOpenMetrics + } } return FmtText } -// NewEncoder returns a new encoder based on content type negotiation. +// NewEncoder returns a new encoder based on content type negotiation. All +// Encoder implementations returned by NewEncoder also implement Closer, and +// callers should always call the Close method. It is currently only required +// for FmtOpenMetrics, but a future (breaking) release will add the Close method +// to the Encoder interface directly. The current version of the Encoder +// interface is kept for backwards compatibility. func NewEncoder(w io.Writer, format Format) Encoder { switch format { case FmtProtoDelim: - return encoder(func(v *dto.MetricFamily) error { - _, err := pbutil.WriteDelimited(w, v) - return err - }) + return encoderCloser{ + encode: func(v *dto.MetricFamily) error { + _, err := pbutil.WriteDelimited(w, v) + return err + }, + close: func() error { return nil }, + } case FmtProtoCompact: - return encoder(func(v *dto.MetricFamily) error { - _, err := fmt.Fprintln(w, v.String()) - return err - }) + return encoderCloser{ + encode: func(v *dto.MetricFamily) error { + _, err := fmt.Fprintln(w, v.String()) + return err + }, + close: func() error { return nil }, + } case FmtProtoText: - return encoder(func(v *dto.MetricFamily) error { - _, err := fmt.Fprintln(w, proto.MarshalTextString(v)) - return err - }) + return encoderCloser{ + encode: func(v *dto.MetricFamily) error { + _, err := fmt.Fprintln(w, proto.MarshalTextString(v)) + return err + }, + close: func() error { return nil }, + } case FmtText: - return encoder(func(v *dto.MetricFamily) error { - _, err := MetricFamilyToText(w, v) - return err - }) + return encoderCloser{ + encode: func(v *dto.MetricFamily) error { + _, err := MetricFamilyToText(w, v) + return err + }, + close: func() error { return nil }, + } + case FmtOpenMetrics: + return encoderCloser{ + encode: func(v *dto.MetricFamily) error { + _, err := MetricFamilyToOpenMetrics(w, v) + return err + }, + close: func() error { + _, err := FinalizeOpenMetrics(w) + return err + }, + } } - panic("expfmt.NewEncoder: unknown format") + panic(fmt.Errorf("expfmt.NewEncoder: unknown format %q", format)) } diff --git a/vendor/github.com/prometheus/common/expfmt/expfmt.go b/vendor/github.com/prometheus/common/expfmt/expfmt.go index c71bcb98..0f176fa6 100644 --- a/vendor/github.com/prometheus/common/expfmt/expfmt.go +++ b/vendor/github.com/prometheus/common/expfmt/expfmt.go @@ -19,10 +19,12 @@ type Format string // Constants to assemble the Content-Type values for the different wire protocols. const ( - TextVersion = "0.0.4" - ProtoType = `application/vnd.google.protobuf` - ProtoProtocol = `io.prometheus.client.MetricFamily` - ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";" + TextVersion = "0.0.4" + ProtoType = `application/vnd.google.protobuf` + ProtoProtocol = `io.prometheus.client.MetricFamily` + ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";" + OpenMetricsType = `application/openmetrics-text` + OpenMetricsVersion = "0.0.1" // The Content-Type values for the different wire protocols. FmtUnknown Format = `` @@ -30,6 +32,7 @@ const ( FmtProtoDelim Format = ProtoFmt + ` encoding=delimited` FmtProtoText Format = ProtoFmt + ` encoding=text` FmtProtoCompact Format = ProtoFmt + ` encoding=compact-text` + FmtOpenMetrics Format = OpenMetricsType + `; version=` + OpenMetricsVersion + `; charset=utf-8` ) const ( diff --git a/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go b/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go new file mode 100644 index 00000000..8a9313a3 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go @@ -0,0 +1,527 @@ +// Copyright 2020 The Prometheus 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 expfmt + +import ( + "bufio" + "bytes" + "fmt" + "io" + "math" + "strconv" + "strings" + + "github.com/golang/protobuf/ptypes" + "github.com/prometheus/common/model" + + dto "github.com/prometheus/client_model/go" +) + +// MetricFamilyToOpenMetrics converts a MetricFamily proto message into the +// OpenMetrics text format and writes the resulting lines to 'out'. It returns +// the number of bytes written and any error encountered. The output will have +// the same order as the input, no further sorting is performed. Furthermore, +// this function assumes the input is already sanitized and does not perform any +// sanity checks. If the input contains duplicate metrics or invalid metric or +// label names, the conversion will result in invalid text format output. +// +// This function fulfills the type 'expfmt.encoder'. +// +// Note that OpenMetrics requires a final `# EOF` line. Since this function acts +// on individual metric families, it is the responsibility of the caller to +// append this line to 'out' once all metric families have been written. +// Conveniently, this can be done by calling FinalizeOpenMetrics. +// +// The output should be fully OpenMetrics compliant. However, there are a few +// missing features and peculiarities to avoid complications when switching from +// Prometheus to OpenMetrics or vice versa: +// +// - Counters are expected to have the `_total` suffix in their metric name. In +// the output, the suffix will be truncated from the `# TYPE` and `# HELP` +// line. A counter with a missing `_total` suffix is not an error. However, +// its type will be set to `unknown` in that case to avoid invalid OpenMetrics +// output. +// +// - No support for the following (optional) features: `# UNIT` line, `_created` +// line, info type, stateset type, gaugehistogram type. +// +// - The size of exemplar labels is not checked (i.e. it's possible to create +// exemplars that are larger than allowed by the OpenMetrics specification). +// +// - The value of Counters is not checked. (OpenMetrics doesn't allow counters +// with a `NaN` value.) +func MetricFamilyToOpenMetrics(out io.Writer, in *dto.MetricFamily) (written int, err error) { + name := in.GetName() + if name == "" { + return 0, fmt.Errorf("MetricFamily has no name: %s", in) + } + + // Try the interface upgrade. If it doesn't work, we'll use a + // bufio.Writer from the sync.Pool. + w, ok := out.(enhancedWriter) + if !ok { + b := bufPool.Get().(*bufio.Writer) + b.Reset(out) + w = b + defer func() { + bErr := b.Flush() + if err == nil { + err = bErr + } + bufPool.Put(b) + }() + } + + var ( + n int + metricType = in.GetType() + shortName = name + ) + if metricType == dto.MetricType_COUNTER && strings.HasSuffix(shortName, "_total") { + shortName = name[:len(name)-6] + } + + // Comments, first HELP, then TYPE. + if in.Help != nil { + n, err = w.WriteString("# HELP ") + written += n + if err != nil { + return + } + n, err = w.WriteString(shortName) + written += n + if err != nil { + return + } + err = w.WriteByte(' ') + written++ + if err != nil { + return + } + n, err = writeEscapedString(w, *in.Help, true) + written += n + if err != nil { + return + } + err = w.WriteByte('\n') + written++ + if err != nil { + return + } + } + n, err = w.WriteString("# TYPE ") + written += n + if err != nil { + return + } + n, err = w.WriteString(shortName) + written += n + if err != nil { + return + } + switch metricType { + case dto.MetricType_COUNTER: + if strings.HasSuffix(name, "_total") { + n, err = w.WriteString(" counter\n") + } else { + n, err = w.WriteString(" unknown\n") + } + case dto.MetricType_GAUGE: + n, err = w.WriteString(" gauge\n") + case dto.MetricType_SUMMARY: + n, err = w.WriteString(" summary\n") + case dto.MetricType_UNTYPED: + n, err = w.WriteString(" unknown\n") + case dto.MetricType_HISTOGRAM: + n, err = w.WriteString(" histogram\n") + default: + return written, fmt.Errorf("unknown metric type %s", metricType.String()) + } + written += n + if err != nil { + return + } + + // Finally the samples, one line for each. + for _, metric := range in.Metric { + switch metricType { + case dto.MetricType_COUNTER: + if metric.Counter == nil { + return written, fmt.Errorf( + "expected counter in metric %s %s", name, metric, + ) + } + // Note that we have ensured above that either the name + // ends on `_total` or that the rendered type is + // `unknown`. Therefore, no `_total` must be added here. + n, err = writeOpenMetricsSample( + w, name, "", metric, "", 0, + metric.Counter.GetValue(), 0, false, + metric.Counter.Exemplar, + ) + case dto.MetricType_GAUGE: + if metric.Gauge == nil { + return written, fmt.Errorf( + "expected gauge in metric %s %s", name, metric, + ) + } + n, err = writeOpenMetricsSample( + w, name, "", metric, "", 0, + metric.Gauge.GetValue(), 0, false, + nil, + ) + case dto.MetricType_UNTYPED: + if metric.Untyped == nil { + return written, fmt.Errorf( + "expected untyped in metric %s %s", name, metric, + ) + } + n, err = writeOpenMetricsSample( + w, name, "", metric, "", 0, + metric.Untyped.GetValue(), 0, false, + nil, + ) + case dto.MetricType_SUMMARY: + if metric.Summary == nil { + return written, fmt.Errorf( + "expected summary in metric %s %s", name, metric, + ) + } + for _, q := range metric.Summary.Quantile { + n, err = writeOpenMetricsSample( + w, name, "", metric, + model.QuantileLabel, q.GetQuantile(), + q.GetValue(), 0, false, + nil, + ) + written += n + if err != nil { + return + } + } + n, err = writeOpenMetricsSample( + w, name, "_sum", metric, "", 0, + metric.Summary.GetSampleSum(), 0, false, + nil, + ) + written += n + if err != nil { + return + } + n, err = writeOpenMetricsSample( + w, name, "_count", metric, "", 0, + 0, metric.Summary.GetSampleCount(), true, + nil, + ) + case dto.MetricType_HISTOGRAM: + if metric.Histogram == nil { + return written, fmt.Errorf( + "expected histogram in metric %s %s", name, metric, + ) + } + infSeen := false + for _, b := range metric.Histogram.Bucket { + n, err = writeOpenMetricsSample( + w, name, "_bucket", metric, + model.BucketLabel, b.GetUpperBound(), + 0, b.GetCumulativeCount(), true, + b.Exemplar, + ) + written += n + if err != nil { + return + } + if math.IsInf(b.GetUpperBound(), +1) { + infSeen = true + } + } + if !infSeen { + n, err = writeOpenMetricsSample( + w, name, "_bucket", metric, + model.BucketLabel, math.Inf(+1), + 0, metric.Histogram.GetSampleCount(), true, + nil, + ) + written += n + if err != nil { + return + } + } + n, err = writeOpenMetricsSample( + w, name, "_sum", metric, "", 0, + metric.Histogram.GetSampleSum(), 0, false, + nil, + ) + written += n + if err != nil { + return + } + n, err = writeOpenMetricsSample( + w, name, "_count", metric, "", 0, + 0, metric.Histogram.GetSampleCount(), true, + nil, + ) + default: + return written, fmt.Errorf( + "unexpected type in metric %s %s", name, metric, + ) + } + written += n + if err != nil { + return + } + } + return +} + +// FinalizeOpenMetrics writes the final `# EOF\n` line required by OpenMetrics. +func FinalizeOpenMetrics(w io.Writer) (written int, err error) { + return w.Write([]byte("# EOF\n")) +} + +// writeOpenMetricsSample writes a single sample in OpenMetrics text format to +// w, given the metric name, the metric proto message itself, optionally an +// additional label name with a float64 value (use empty string as label name if +// not required), the value (optionally as float64 or uint64, determined by +// useIntValue), and optionally an exemplar (use nil if not required). The +// function returns the number of bytes written and any error encountered. +func writeOpenMetricsSample( + w enhancedWriter, + name, suffix string, + metric *dto.Metric, + additionalLabelName string, additionalLabelValue float64, + floatValue float64, intValue uint64, useIntValue bool, + exemplar *dto.Exemplar, +) (int, error) { + var written int + n, err := w.WriteString(name) + written += n + if err != nil { + return written, err + } + if suffix != "" { + n, err = w.WriteString(suffix) + written += n + if err != nil { + return written, err + } + } + n, err = writeOpenMetricsLabelPairs( + w, metric.Label, additionalLabelName, additionalLabelValue, + ) + written += n + if err != nil { + return written, err + } + err = w.WriteByte(' ') + written++ + if err != nil { + return written, err + } + if useIntValue { + n, err = writeUint(w, intValue) + } else { + n, err = writeOpenMetricsFloat(w, floatValue) + } + written += n + if err != nil { + return written, err + } + if metric.TimestampMs != nil { + err = w.WriteByte(' ') + written++ + if err != nil { + return written, err + } + // TODO(beorn7): Format this directly without converting to a float first. + n, err = writeOpenMetricsFloat(w, float64(*metric.TimestampMs)/1000) + written += n + if err != nil { + return written, err + } + } + if exemplar != nil { + n, err = writeExemplar(w, exemplar) + written += n + if err != nil { + return written, err + } + } + err = w.WriteByte('\n') + written++ + if err != nil { + return written, err + } + return written, nil +} + +// writeOpenMetricsLabelPairs works like writeOpenMetrics but formats the float +// in OpenMetrics style. +func writeOpenMetricsLabelPairs( + w enhancedWriter, + in []*dto.LabelPair, + additionalLabelName string, additionalLabelValue float64, +) (int, error) { + if len(in) == 0 && additionalLabelName == "" { + return 0, nil + } + var ( + written int + separator byte = '{' + ) + for _, lp := range in { + err := w.WriteByte(separator) + written++ + if err != nil { + return written, err + } + n, err := w.WriteString(lp.GetName()) + written += n + if err != nil { + return written, err + } + n, err = w.WriteString(`="`) + written += n + if err != nil { + return written, err + } + n, err = writeEscapedString(w, lp.GetValue(), true) + written += n + if err != nil { + return written, err + } + err = w.WriteByte('"') + written++ + if err != nil { + return written, err + } + separator = ',' + } + if additionalLabelName != "" { + err := w.WriteByte(separator) + written++ + if err != nil { + return written, err + } + n, err := w.WriteString(additionalLabelName) + written += n + if err != nil { + return written, err + } + n, err = w.WriteString(`="`) + written += n + if err != nil { + return written, err + } + n, err = writeOpenMetricsFloat(w, additionalLabelValue) + written += n + if err != nil { + return written, err + } + err = w.WriteByte('"') + written++ + if err != nil { + return written, err + } + } + err := w.WriteByte('}') + written++ + if err != nil { + return written, err + } + return written, nil +} + +// writeExemplar writes the provided exemplar in OpenMetrics format to w. The +// function returns the number of bytes written and any error encountered. +func writeExemplar(w enhancedWriter, e *dto.Exemplar) (int, error) { + written := 0 + n, err := w.WriteString(" # ") + written += n + if err != nil { + return written, err + } + n, err = writeOpenMetricsLabelPairs(w, e.Label, "", 0) + written += n + if err != nil { + return written, err + } + err = w.WriteByte(' ') + written++ + if err != nil { + return written, err + } + n, err = writeOpenMetricsFloat(w, e.GetValue()) + written += n + if err != nil { + return written, err + } + if e.Timestamp != nil { + err = w.WriteByte(' ') + written++ + if err != nil { + return written, err + } + ts, err := ptypes.Timestamp((*e).Timestamp) + if err != nil { + return written, err + } + // TODO(beorn7): Format this directly from components of ts to + // avoid overflow/underflow and precision issues of the float + // conversion. + n, err = writeOpenMetricsFloat(w, float64(ts.UnixNano())/1e9) + written += n + if err != nil { + return written, err + } + } + return written, nil +} + +// writeOpenMetricsFloat works like writeFloat but appends ".0" if the resulting +// number would otherwise contain neither a "." nor an "e". +func writeOpenMetricsFloat(w enhancedWriter, f float64) (int, error) { + switch { + case f == 1: + return w.WriteString("1.0") + case f == 0: + return w.WriteString("0.0") + case f == -1: + return w.WriteString("-1.0") + case math.IsNaN(f): + return w.WriteString("NaN") + case math.IsInf(f, +1): + return w.WriteString("+Inf") + case math.IsInf(f, -1): + return w.WriteString("-Inf") + default: + bp := numBufPool.Get().(*[]byte) + *bp = strconv.AppendFloat((*bp)[:0], f, 'g', -1, 64) + if !bytes.ContainsAny(*bp, "e.") { + *bp = append(*bp, '.', '0') + } + written, err := w.Write(*bp) + numBufPool.Put(bp) + return written, err + } +} + +// writeUint is like writeInt just for uint64. +func writeUint(w enhancedWriter, u uint64) (int, error) { + bp := numBufPool.Get().(*[]byte) + *bp = strconv.AppendUint((*bp)[:0], u, 10) + written, err := w.Write(*bp) + numBufPool.Put(bp) + return written, err +} diff --git a/vendor/github.com/prometheus/common/expfmt/text_create.go b/vendor/github.com/prometheus/common/expfmt/text_create.go index 0327865e..5ba503b0 100644 --- a/vendor/github.com/prometheus/common/expfmt/text_create.go +++ b/vendor/github.com/prometheus/common/expfmt/text_create.go @@ -423,9 +423,8 @@ var ( func writeEscapedString(w enhancedWriter, v string, includeDoubleQuote bool) (int, error) { if includeDoubleQuote { return quotedEscaper.WriteString(w, v) - } else { - return escaper.WriteString(w, v) } + return escaper.WriteString(w, v) } // writeFloat is equivalent to fmt.Fprint with a float64 argument but hardcodes diff --git a/vendor/github.com/prometheus/common/model/time.go b/vendor/github.com/prometheus/common/model/time.go index 7b0064fd..490a0240 100644 --- a/vendor/github.com/prometheus/common/model/time.go +++ b/vendor/github.com/prometheus/common/model/time.go @@ -186,6 +186,10 @@ var durationRE = regexp.MustCompile("^([0-9]+)(y|w|d|h|m|s|ms)$") // ParseDuration parses a string into a time.Duration, assuming that a year // always has 365d, a week always has 7d, and a day always has 24h. func ParseDuration(durationStr string) (Duration, error) { + // Allow 0 without a unit. + if durationStr == "0" { + return 0, nil + } matches := durationRE.FindStringSubmatch(durationStr) if len(matches) != 3 { return 0, fmt.Errorf("not a valid duration string: %q", durationStr) diff --git a/vendor/github.com/prometheus/procfs/Makefile.common b/vendor/github.com/prometheus/procfs/Makefile.common index b978dfc5..9320176c 100644 --- a/vendor/github.com/prometheus/procfs/Makefile.common +++ b/vendor/github.com/prometheus/procfs/Makefile.common @@ -150,6 +150,17 @@ else $(GO) get $(GOOPTS) -t ./... endif +.PHONY: update-go-deps +update-go-deps: + @echo ">> updating Go dependencies" + @for m in $$($(GO) list -mod=readonly -m -f '{{ if and (not .Indirect) (not .Main)}}{{.Path}}{{end}}' all); do \ + $(GO) get $$m; \ + done + GO111MODULE=$(GO111MODULE) $(GO) mod tidy +ifneq (,$(wildcard vendor)) + GO111MODULE=$(GO111MODULE) $(GO) mod vendor +endif + .PHONY: common-test-short common-test-short: $(GOTEST_DIR) @echo ">> running short tests" diff --git a/vendor/github.com/prometheus/procfs/cpuinfo.go b/vendor/github.com/prometheus/procfs/cpuinfo.go index 2e022155..31d42f71 100644 --- a/vendor/github.com/prometheus/procfs/cpuinfo.go +++ b/vendor/github.com/prometheus/procfs/cpuinfo.go @@ -11,11 +11,15 @@ // See the License for the specific language governing permissions and // limitations under the License. +// +build linux + package procfs import ( "bufio" "bytes" + "errors" + "regexp" "strconv" "strings" @@ -52,6 +56,11 @@ type CPUInfo struct { PowerManagement string } +var ( + cpuinfoClockRegexp = regexp.MustCompile(`([\d.]+)`) + cpuinfoS390XProcessorRegexp = regexp.MustCompile(`^processor\s+(\d+):.*`) +) + // CPUInfo returns information about current system CPUs. // See https://www.kernel.org/doc/Documentation/filesystems/proc.txt func (fs FS) CPUInfo() ([]CPUInfo, error) { @@ -62,14 +71,26 @@ func (fs FS) CPUInfo() ([]CPUInfo, error) { return parseCPUInfo(data) } -// parseCPUInfo parses data from /proc/cpuinfo -func parseCPUInfo(info []byte) ([]CPUInfo, error) { - cpuinfo := []CPUInfo{} - i := -1 +func parseCPUInfoX86(info []byte) ([]CPUInfo, error) { scanner := bufio.NewScanner(bytes.NewReader(info)) + + // find the first "processor" line + firstLine := firstNonEmptyLine(scanner) + if !strings.HasPrefix(firstLine, "processor") || !strings.Contains(firstLine, ":") { + return nil, errors.New("invalid cpuinfo file: " + firstLine) + } + field := strings.SplitN(firstLine, ": ", 2) + v, err := strconv.ParseUint(field[1], 0, 32) + if err != nil { + return nil, err + } + firstcpu := CPUInfo{Processor: uint(v)} + cpuinfo := []CPUInfo{firstcpu} + i := 0 + for scanner.Scan() { line := scanner.Text() - if strings.TrimSpace(line) == "" { + if !strings.Contains(line, ":") { continue } field := strings.SplitN(line, ": ", 2) @@ -82,7 +103,7 @@ func parseCPUInfo(info []byte) ([]CPUInfo, error) { return nil, err } cpuinfo[i].Processor = uint(v) - case "vendor_id": + case "vendor", "vendor_id": cpuinfo[i].VendorID = field[1] case "cpu family": cpuinfo[i].CPUFamily = field[1] @@ -163,5 +184,237 @@ func parseCPUInfo(info []byte) ([]CPUInfo, error) { } } return cpuinfo, nil +} + +func parseCPUInfoARM(info []byte) ([]CPUInfo, error) { + scanner := bufio.NewScanner(bytes.NewReader(info)) + + firstLine := firstNonEmptyLine(scanner) + match, _ := regexp.MatchString("^[Pp]rocessor", firstLine) + if !match || !strings.Contains(firstLine, ":") { + return nil, errors.New("invalid cpuinfo file: " + firstLine) + } + field := strings.SplitN(firstLine, ": ", 2) + cpuinfo := []CPUInfo{} + featuresLine := "" + commonCPUInfo := CPUInfo{} + i := 0 + if strings.TrimSpace(field[0]) == "Processor" { + commonCPUInfo = CPUInfo{ModelName: field[1]} + i = -1 + } else { + v, err := strconv.ParseUint(field[1], 0, 32) + if err != nil { + return nil, err + } + firstcpu := CPUInfo{Processor: uint(v)} + cpuinfo = []CPUInfo{firstcpu} + } + + for scanner.Scan() { + line := scanner.Text() + if !strings.Contains(line, ":") { + continue + } + field := strings.SplitN(line, ": ", 2) + switch strings.TrimSpace(field[0]) { + case "processor": + cpuinfo = append(cpuinfo, commonCPUInfo) // start of the next processor + i++ + v, err := strconv.ParseUint(field[1], 0, 32) + if err != nil { + return nil, err + } + cpuinfo[i].Processor = uint(v) + case "BogoMIPS": + if i == -1 { + cpuinfo = append(cpuinfo, commonCPUInfo) // There is only one processor + i++ + cpuinfo[i].Processor = 0 + } + v, err := strconv.ParseFloat(field[1], 64) + if err != nil { + return nil, err + } + cpuinfo[i].BogoMips = v + case "Features": + featuresLine = line + case "model name": + cpuinfo[i].ModelName = field[1] + } + } + fields := strings.SplitN(featuresLine, ": ", 2) + for i := range cpuinfo { + cpuinfo[i].Flags = strings.Fields(fields[1]) + } + return cpuinfo, nil + +} + +func parseCPUInfoS390X(info []byte) ([]CPUInfo, error) { + scanner := bufio.NewScanner(bytes.NewReader(info)) + + firstLine := firstNonEmptyLine(scanner) + if !strings.HasPrefix(firstLine, "vendor_id") || !strings.Contains(firstLine, ":") { + return nil, errors.New("invalid cpuinfo file: " + firstLine) + } + field := strings.SplitN(firstLine, ": ", 2) + cpuinfo := []CPUInfo{} + commonCPUInfo := CPUInfo{VendorID: field[1]} + + for scanner.Scan() { + line := scanner.Text() + if !strings.Contains(line, ":") { + continue + } + field := strings.SplitN(line, ": ", 2) + switch strings.TrimSpace(field[0]) { + case "bogomips per cpu": + v, err := strconv.ParseFloat(field[1], 64) + if err != nil { + return nil, err + } + commonCPUInfo.BogoMips = v + case "features": + commonCPUInfo.Flags = strings.Fields(field[1]) + } + if strings.HasPrefix(line, "processor") { + match := cpuinfoS390XProcessorRegexp.FindStringSubmatch(line) + if len(match) < 2 { + return nil, errors.New("Invalid line found in cpuinfo: " + line) + } + cpu := commonCPUInfo + v, err := strconv.ParseUint(match[1], 0, 32) + if err != nil { + return nil, err + } + cpu.Processor = uint(v) + cpuinfo = append(cpuinfo, cpu) + } + if strings.HasPrefix(line, "cpu number") { + break + } + } + + i := 0 + for scanner.Scan() { + line := scanner.Text() + if !strings.Contains(line, ":") { + continue + } + field := strings.SplitN(line, ": ", 2) + switch strings.TrimSpace(field[0]) { + case "cpu number": + i++ + case "cpu MHz dynamic": + clock := cpuinfoClockRegexp.FindString(strings.TrimSpace(field[1])) + v, err := strconv.ParseFloat(clock, 64) + if err != nil { + return nil, err + } + cpuinfo[i].CPUMHz = v + } + } + + return cpuinfo, nil +} + +func parseCPUInfoMips(info []byte) ([]CPUInfo, error) { + scanner := bufio.NewScanner(bytes.NewReader(info)) + + // find the first "processor" line + firstLine := firstNonEmptyLine(scanner) + if !strings.HasPrefix(firstLine, "system type") || !strings.Contains(firstLine, ":") { + return nil, errors.New("invalid cpuinfo file: " + firstLine) + } + field := strings.SplitN(firstLine, ": ", 2) + cpuinfo := []CPUInfo{} + systemType := field[1] + + i := 0 + + for scanner.Scan() { + line := scanner.Text() + if !strings.Contains(line, ":") { + continue + } + field := strings.SplitN(line, ": ", 2) + switch strings.TrimSpace(field[0]) { + case "processor": + v, err := strconv.ParseUint(field[1], 0, 32) + if err != nil { + return nil, err + } + i = int(v) + cpuinfo = append(cpuinfo, CPUInfo{}) // start of the next processor + cpuinfo[i].Processor = uint(v) + cpuinfo[i].VendorID = systemType + case "cpu model": + cpuinfo[i].ModelName = field[1] + case "BogoMIPS": + v, err := strconv.ParseFloat(field[1], 64) + if err != nil { + return nil, err + } + cpuinfo[i].BogoMips = v + } + } + return cpuinfo, nil +} + +func parseCPUInfoPPC(info []byte) ([]CPUInfo, error) { + scanner := bufio.NewScanner(bytes.NewReader(info)) + + firstLine := firstNonEmptyLine(scanner) + if !strings.HasPrefix(firstLine, "processor") || !strings.Contains(firstLine, ":") { + return nil, errors.New("invalid cpuinfo file: " + firstLine) + } + field := strings.SplitN(firstLine, ": ", 2) + v, err := strconv.ParseUint(field[1], 0, 32) + if err != nil { + return nil, err + } + firstcpu := CPUInfo{Processor: uint(v)} + cpuinfo := []CPUInfo{firstcpu} + i := 0 + + for scanner.Scan() { + line := scanner.Text() + if !strings.Contains(line, ":") { + continue + } + field := strings.SplitN(line, ": ", 2) + switch strings.TrimSpace(field[0]) { + case "processor": + cpuinfo = append(cpuinfo, CPUInfo{}) // start of the next processor + i++ + v, err := strconv.ParseUint(field[1], 0, 32) + if err != nil { + return nil, err + } + cpuinfo[i].Processor = uint(v) + case "cpu": + cpuinfo[i].VendorID = field[1] + case "clock": + clock := cpuinfoClockRegexp.FindString(strings.TrimSpace(field[1])) + v, err := strconv.ParseFloat(clock, 64) + if err != nil { + return nil, err + } + cpuinfo[i].CPUMHz = v + } + } + return cpuinfo, nil +} +// firstNonEmptyLine advances the scanner to the first non-empty line +// and returns the contents of that line +func firstNonEmptyLine(scanner *bufio.Scanner) string { + for scanner.Scan() { + line := scanner.Text() + if strings.TrimSpace(line) != "" { + return line + } + } + return "" } diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_arm.go b/vendor/github.com/prometheus/procfs/cpuinfo_arm.go new file mode 100644 index 00000000..83555077 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/cpuinfo_arm.go @@ -0,0 +1,18 @@ +// Copyright 2020 The Prometheus 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. + +// +build linux + +package procfs + +var parseCPUInfo = parseCPUInfoARM diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_arm64.go b/vendor/github.com/prometheus/procfs/cpuinfo_arm64.go new file mode 100644 index 00000000..4f5d172a --- /dev/null +++ b/vendor/github.com/prometheus/procfs/cpuinfo_arm64.go @@ -0,0 +1,19 @@ +// Copyright 2020 The Prometheus 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. + +// +build linux +// +build arm64 + +package procfs + +var parseCPUInfo = parseCPUInfoARM diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_default.go b/vendor/github.com/prometheus/procfs/cpuinfo_default.go new file mode 100644 index 00000000..d5bedf97 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/cpuinfo_default.go @@ -0,0 +1,19 @@ +// Copyright 2020 The Prometheus 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. + +// +build linux +// +build 386 amd64 + +package procfs + +var parseCPUInfo = parseCPUInfoX86 diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_mips.go b/vendor/github.com/prometheus/procfs/cpuinfo_mips.go new file mode 100644 index 00000000..22d93f8e --- /dev/null +++ b/vendor/github.com/prometheus/procfs/cpuinfo_mips.go @@ -0,0 +1,18 @@ +// Copyright 2020 The Prometheus 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. + +// +build linux + +package procfs + +var parseCPUInfo = parseCPUInfoMips diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_mips64.go b/vendor/github.com/prometheus/procfs/cpuinfo_mips64.go new file mode 100644 index 00000000..22d93f8e --- /dev/null +++ b/vendor/github.com/prometheus/procfs/cpuinfo_mips64.go @@ -0,0 +1,18 @@ +// Copyright 2020 The Prometheus 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. + +// +build linux + +package procfs + +var parseCPUInfo = parseCPUInfoMips diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_mips64le.go b/vendor/github.com/prometheus/procfs/cpuinfo_mips64le.go new file mode 100644 index 00000000..22d93f8e --- /dev/null +++ b/vendor/github.com/prometheus/procfs/cpuinfo_mips64le.go @@ -0,0 +1,18 @@ +// Copyright 2020 The Prometheus 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. + +// +build linux + +package procfs + +var parseCPUInfo = parseCPUInfoMips diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_mipsle.go b/vendor/github.com/prometheus/procfs/cpuinfo_mipsle.go new file mode 100644 index 00000000..22d93f8e --- /dev/null +++ b/vendor/github.com/prometheus/procfs/cpuinfo_mipsle.go @@ -0,0 +1,18 @@ +// Copyright 2020 The Prometheus 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. + +// +build linux + +package procfs + +var parseCPUInfo = parseCPUInfoMips diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_ppc64.go b/vendor/github.com/prometheus/procfs/cpuinfo_ppc64.go new file mode 100644 index 00000000..64aee9c6 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/cpuinfo_ppc64.go @@ -0,0 +1,18 @@ +// Copyright 2020 The Prometheus 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. + +// +build linux + +package procfs + +var parseCPUInfo = parseCPUInfoPPC diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_ppc64le.go b/vendor/github.com/prometheus/procfs/cpuinfo_ppc64le.go new file mode 100644 index 00000000..64aee9c6 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/cpuinfo_ppc64le.go @@ -0,0 +1,18 @@ +// Copyright 2020 The Prometheus 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. + +// +build linux + +package procfs + +var parseCPUInfo = parseCPUInfoPPC diff --git a/vendor/github.com/prometheus/procfs/cpuinfo_s390x.go b/vendor/github.com/prometheus/procfs/cpuinfo_s390x.go new file mode 100644 index 00000000..26814eeb --- /dev/null +++ b/vendor/github.com/prometheus/procfs/cpuinfo_s390x.go @@ -0,0 +1,18 @@ +// Copyright 2020 The Prometheus 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. + +// +build linux + +package procfs + +var parseCPUInfo = parseCPUInfoS390X diff --git a/vendor/github.com/prometheus/procfs/fixtures.ttar b/vendor/github.com/prometheus/procfs/fixtures.ttar index 45a73215..868c8573 100644 --- a/vendor/github.com/prometheus/procfs/fixtures.ttar +++ b/vendor/github.com/prometheus/procfs/fixtures.ttar @@ -173,6 +173,283 @@ Lines: 1 411605849 93680043 79 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/26231/smaps +Lines: 252 +00400000-00cb1000 r-xp 00000000 fd:01 952273 /bin/alertmanager +Size: 8900 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 2952 kB +Pss: 2952 kB +Shared_Clean: 0 kB +Shared_Dirty: 0 kB +Private_Clean: 2952 kB +Private_Dirty: 0 kB +Referenced: 2864 kB +Anonymous: 0 kB +LazyFree: 0 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 0 kB +SwapPss: 0 kB +Locked: 0 kB +VmFlags: rd ex mr mw me dw sd +00cb1000-016b0000 r--p 008b1000 fd:01 952273 /bin/alertmanager +Size: 10236 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 6152 kB +Pss: 6152 kB +Shared_Clean: 0 kB +Shared_Dirty: 0 kB +Private_Clean: 6152 kB +Private_Dirty: 0 kB +Referenced: 5308 kB +Anonymous: 0 kB +LazyFree: 0 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 0 kB +SwapPss: 0 kB +Locked: 0 kB +VmFlags: rd mr mw me dw sd +016b0000-0171a000 rw-p 012b0000 fd:01 952273 /bin/alertmanager +Size: 424 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 176 kB +Pss: 176 kB +Shared_Clean: 0 kB +Shared_Dirty: 0 kB +Private_Clean: 84 kB +Private_Dirty: 92 kB +Referenced: 176 kB +Anonymous: 92 kB +LazyFree: 0 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 12 kB +SwapPss: 12 kB +Locked: 0 kB +VmFlags: rd wr mr mw me dw ac sd +0171a000-0173f000 rw-p 00000000 00:00 0 +Size: 148 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 76 kB +Pss: 76 kB +Shared_Clean: 0 kB +Shared_Dirty: 0 kB +Private_Clean: 0 kB +Private_Dirty: 76 kB +Referenced: 76 kB +Anonymous: 76 kB +LazyFree: 0 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 0 kB +SwapPss: 0 kB +Locked: 0 kB +VmFlags: rd wr mr mw me ac sd +c000000000-c000400000 rw-p 00000000 00:00 0 +Size: 4096 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 2564 kB +Pss: 2564 kB +Shared_Clean: 0 kB +Shared_Dirty: 0 kB +Private_Clean: 20 kB +Private_Dirty: 2544 kB +Referenced: 2544 kB +Anonymous: 2564 kB +LazyFree: 0 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 1100 kB +SwapPss: 1100 kB +Locked: 0 kB +VmFlags: rd wr mr mw me ac sd +c000400000-c001600000 rw-p 00000000 00:00 0 +Size: 18432 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 16024 kB +Pss: 16024 kB +Shared_Clean: 0 kB +Shared_Dirty: 0 kB +Private_Clean: 5864 kB +Private_Dirty: 10160 kB +Referenced: 11944 kB +Anonymous: 16024 kB +LazyFree: 5848 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 440 kB +SwapPss: 440 kB +Locked: 0 kB +VmFlags: rd wr mr mw me ac sd nh +c001600000-c004000000 rw-p 00000000 00:00 0 +Size: 43008 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 0 kB +Pss: 0 kB +Shared_Clean: 0 kB +Shared_Dirty: 0 kB +Private_Clean: 0 kB +Private_Dirty: 0 kB +Referenced: 0 kB +Anonymous: 0 kB +LazyFree: 0 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 0 kB +SwapPss: 0 kB +Locked: 0 kB +VmFlags: rd wr mr mw me ac sd +7f0ab95ca000-7f0abbb7b000 rw-p 00000000 00:00 0 +Size: 38596 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 1992 kB +Pss: 1992 kB +Shared_Clean: 0 kB +Shared_Dirty: 0 kB +Private_Clean: 476 kB +Private_Dirty: 1516 kB +Referenced: 1828 kB +Anonymous: 1992 kB +LazyFree: 0 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 384 kB +SwapPss: 384 kB +Locked: 0 kB +VmFlags: rd wr mr mw me ac sd +7ffc07ecf000-7ffc07ef0000 rw-p 00000000 00:00 0 [stack] +Size: 132 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 8 kB +Pss: 8 kB +Shared_Clean: 0 kB +Shared_Dirty: 0 kB +Private_Clean: 0 kB +Private_Dirty: 8 kB +Referenced: 8 kB +Anonymous: 8 kB +LazyFree: 0 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 4 kB +SwapPss: 4 kB +Locked: 0 kB +VmFlags: rd wr mr mw me gd ac +7ffc07f9e000-7ffc07fa1000 r--p 00000000 00:00 0 [vvar] +Size: 12 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 0 kB +Pss: 0 kB +Shared_Clean: 0 kB +Shared_Dirty: 0 kB +Private_Clean: 0 kB +Private_Dirty: 0 kB +Referenced: 0 kB +Anonymous: 0 kB +LazyFree: 0 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 0 kB +SwapPss: 0 kB +Locked: 0 kB +VmFlags: rd mr pf io de dd sd +7ffc07fa1000-7ffc07fa3000 r-xp 00000000 00:00 0 [vdso] +Size: 8 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 4 kB +Pss: 0 kB +Shared_Clean: 4 kB +Shared_Dirty: 0 kB +Private_Clean: 0 kB +Private_Dirty: 0 kB +Referenced: 4 kB +Anonymous: 0 kB +LazyFree: 0 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 0 kB +SwapPss: 0 kB +Locked: 0 kB +VmFlags: rd ex mr mw me de sd +ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] +Size: 4 kB +KernelPageSize: 4 kB +MMUPageSize: 4 kB +Rss: 0 kB +Pss: 0 kB +Shared_Clean: 0 kB +Shared_Dirty: 0 kB +Private_Clean: 0 kB +Private_Dirty: 0 kB +Referenced: 0 kB +Anonymous: 0 kB +LazyFree: 0 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 0 kB +SwapPss: 0 kB +Locked: 0 kB +VmFlags: rd ex +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/26231/smaps_rollup +Lines: 17 +00400000-ffffffffff601000 ---p 00000000 00:00 0 [rollup] +Rss: 29948 kB +Pss: 29944 kB +Shared_Clean: 4 kB +Shared_Dirty: 0 kB +Private_Clean: 15548 kB +Private_Dirty: 14396 kB +Referenced: 24752 kB +Anonymous: 20756 kB +LazyFree: 5848 kB +AnonHugePages: 0 kB +ShmemPmdMapped: 0 kB +Shared_Hugetlb: 0 kB +Private_Hugetlb: 0 kB +Swap: 1940 kB +SwapPss: 1940 kB +Locked: 0 kB +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Path: fixtures/proc/26231/stat Lines: 1 26231 (vim) R 5392 7446 5392 34835 7446 4218880 32533 309516 26 82 1677 44 158 99 20 0 1 0 82375 56274944 1981 18446744073709551615 4194304 6294284 140736914091744 140736914087944 139965136429984 0 0 12288 1870679807 0 0 0 17 0 0 0 31 0 0 8391624 8481048 16420864 140736914093252 140736914093279 140736914093279 140736914096107 0 @@ -235,6 +512,11 @@ voluntary_ctxt_switches: 4742839 nonvoluntary_ctxt_switches: 1727500 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/26231/wchan +Lines: 1 +poll_schedule_timeoutEOF +Mode: 664 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/proc/26232 Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -310,6 +592,11 @@ Lines: 1 33 (ata_sff) S 2 0 0 0 -1 69238880 0 0 0 0 0 0 0 0 0 -20 1 0 5 0 0 18446744073709551615 0 0 0 0 0 0 0 2147483647 0 18446744073709551615 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/26232/wchan +Lines: 1 +0EOF +Mode: 664 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/proc/26233 Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1554,7 +1841,7 @@ max keysize : 32 Mode: 444 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Path: fixtures/proc/diskstats -Lines: 49 +Lines: 52 1 0 ram0 0 0 0 0 0 0 0 0 0 0 0 1 1 ram1 0 0 0 0 0 0 0 0 0 0 0 1 2 ram2 0 0 0 0 0 0 0 0 0 0 0 @@ -1604,11 +1891,45 @@ Lines: 49 8 0 sdb 326552 841 9657779 84 41822 2895 1972905 5007 0 60730 67070 68851 0 1925173784 11130 8 1 sdb1 231 3 34466 4 24 23 106 0 0 64 64 0 0 0 0 8 2 sdb2 326310 838 9622281 67 40726 2872 1972799 4924 0 58250 64567 68851 0 1925173784 11130 + 8 0 sdc 14202 71 579164 21861 2995 1589 180500 40875 0 11628 55200 0 0 0 0 127 182 + 8 1 sdc1 1027 0 13795 5021 2 0 4096 3 0 690 4579 0 0 0 0 0 0 + 8 2 sdc2 13126 71 561749 16802 2830 1589 176404 40620 0 10931 50449 0 0 0 0 0 0 Mode: 664 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/proc/fs Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/proc/fs/fscache +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/fs/fscache/stats +Lines: 24 +FS-Cache statistics +Cookies: idx=3 dat=67877 spc=0 +Objects: alc=67473 nal=0 avl=67473 ded=388 +ChkAux : non=12 ok=33 upd=44 obs=55 +Pages : mrk=547164 unc=364577 +Acquire: n=67880 nul=98 noc=25 ok=67780 nbf=39 oom=26 +Lookups: n=67473 neg=67470 pos=58 crt=67473 tmo=85 +Invals : n=14 run=13 +Updates: n=7 nul=3 run=8 +Relinqs: n=394 nul=1 wcr=2 rtr=3 +AttrChg: n=6 ok=5 nbf=4 oom=3 run=2 +Allocs : n=20 ok=19 wt=18 nbf=17 int=16 +Allocs : ops=15 owt=14 abt=13 +Retrvls: n=151959 ok=82823 wt=23467 nod=69136 nbf=15 int=69 oom=43 +Retrvls: ops=151959 owt=42747 abt=44 +Stores : n=225565 ok=225565 agn=12 nbf=13 oom=14 +Stores : ops=69156 run=294721 pgs=225565 rxd=225565 olm=43 +VmScan : nos=364512 gon=2 bsy=43 can=12 wt=66 +Ops : pend=42753 run=221129 enq=628798 can=11 rej=88 +Ops : ini=377538 dfr=27 rel=377538 gc=37 +CacheOp: alo=1 luo=2 luc=3 gro=4 +CacheOp: inv=5 upo=6 dro=7 pto=8 atc=9 syn=10 +CacheOp: rap=11 ras=12 alp=13 als=14 wrp=15 ucp=16 dsp=17 +CacheEv: nsp=18 stl=19 rtr=20 cul=21EOF +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/proc/fs/xfs Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2025,6 +2346,32 @@ Mode: 644 Directory: fixtures/proc/sys Mode: 775 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/proc/sys/kernel +Mode: 775 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/proc/sys/kernel/random +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/sys/kernel/random/entropy_avail +Lines: 1 +3943 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/sys/kernel/random/poolsize +Lines: 1 +4096 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/sys/kernel/random/urandom_min_reseed_secs +Lines: 1 +60 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/proc/sys/kernel/random/write_wakeup_threshold +Lines: 1 +3072 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/proc/sys/vm Mode: 775 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2526,6 +2873,237 @@ Mode: 664 Directory: fixtures/sys/block/sda Mode: 775 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/block/sda/queue +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/add_random +Lines: 1 +1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/chunk_sectors +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/dax +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/discard_granularity +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/discard_max_bytes +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/discard_max_hw_bytes +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/discard_zeroes_data +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/fua +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/hw_sector_size +Lines: 1 +512 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/io_poll +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/io_poll_delay +Lines: 1 +-1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/io_timeout +Lines: 1 +30000 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/block/sda/queue/iosched +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/iosched/back_seek_max +Lines: 1 +16384 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/iosched/back_seek_penalty +Lines: 1 +2 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/iosched/fifo_expire_async +Lines: 1 +250 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/iosched/fifo_expire_sync +Lines: 1 +125 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/iosched/low_latency +Lines: 1 +1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/iosched/max_budget +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/iosched/slice_idle +Lines: 1 +8 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/iosched/slice_idle_us +Lines: 1 +8000 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/iosched/strict_guarantees +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/iosched/timeout_sync +Lines: 1 +125 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/iostats +Lines: 1 +1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/logical_block_size +Lines: 1 +512 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/max_discard_segments +Lines: 1 +1 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/max_hw_sectors_kb +Lines: 1 +32767 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/max_integrity_segments +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/max_sectors_kb +Lines: 1 +1280 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/max_segment_size +Lines: 1 +65536 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/max_segments +Lines: 1 +168 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/minimum_io_size +Lines: 1 +512 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/nomerges +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/nr_requests +Lines: 1 +64 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/nr_zones +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/optimal_io_size +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/physical_block_size +Lines: 1 +512 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/read_ahead_kb +Lines: 1 +128 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/rotational +Lines: 1 +1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/rq_affinity +Lines: 1 +1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/scheduler +Lines: 1 +mq-deadline kyber [bfq] none +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/wbt_lat_usec +Lines: 1 +75000 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/write_cache +Lines: 1 +write back +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/write_same_max_bytes +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/write_zeroes_max_bytes +Lines: 1 +0 +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/block/sda/queue/zoned +Lines: 1 +none +Mode: 444 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Path: fixtures/sys/block/sda/stat Lines: 1 9652963 396792 759304206 412943 8422549 6731723 286915323 13947418 0 5658367 19174573 1 2 3 12 @@ -2534,6 +3112,140 @@ Mode: 664 Directory: fixtures/sys/class Mode: 775 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/fc_host +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/fc_host/host0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/dev_loss_tmo +Lines: 1 +30 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/fabric_name +Lines: 1 +0x0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/node_name +Lines: 1 +0x2000e0071bce95f2 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/port_id +Lines: 1 +0x000002 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/port_name +Lines: 1 +0x1000e0071bce95f2 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/port_state +Lines: 1 +Online +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/port_type +Lines: 1 +Point-To-Point (direct nport connection) +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/speed +Lines: 1 +16 Gbit +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/sys/class/fc_host/host0/statistics +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/dumped_frames +Lines: 1 +0xffffffffffffffff +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/error_frames +Lines: 1 +0x0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/fcp_packet_aborts +Lines: 1 +0x13 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/invalid_crc_count +Lines: 1 +0x2 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/invalid_tx_word_count +Lines: 1 +0x8 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/link_failure_count +Lines: 1 +0x9 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/loss_of_signal_count +Lines: 1 +0x11 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/loss_of_sync_count +Lines: 1 +0x10 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/nos_count +Lines: 1 +0x12 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/rx_frames +Lines: 1 +0x3 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/rx_words +Lines: 1 +0x4 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/seconds_since_last_reset +Lines: 1 +0x7 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/tx_frames +Lines: 1 +0x5 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/statistics/tx_words +Lines: 1 +0x6 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/supported_classes +Lines: 1 +Class 3 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/supported_speeds +Lines: 1 +4 Gbit, 8 Gbit, 16 Gbit +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/fc_host/host0/symbolic_name +Lines: 1 +Emulex SN1100E2P FV12.4.270.3 DV12.4.0.0. HN:gotest. OS:Linux +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Directory: fixtures/sys/class/infiniband Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2564,6 +3276,11 @@ Mode: 755 Directory: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/VL15_dropped +Lines: 1 +0 +Mode: 664 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Path: fixtures/sys/class/infiniband/mlx4_0/ports/1/counters/excessive_buffer_overrun_errors Lines: 1 0 @@ -2665,6 +3382,11 @@ Mode: 755 Directory: fixtures/sys/class/infiniband/mlx4_0/ports/2/counters Mode: 755 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/class/infiniband/mlx4_0/ports/2/counters/VL15_dropped +Lines: 1 +0 +Mode: 664 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Path: fixtures/sys/class/infiniband/mlx4_0/ports/2/counters/excessive_buffer_overrun_errors Lines: 1 0 @@ -3109,7 +3831,7 @@ Mode: 664 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Path: fixtures/sys/class/thermal/thermal_zone1/temp Lines: 1 -44000 +-44000 Mode: 664 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Path: fixtures/sys/class/thermal/thermal_zone1/type @@ -4287,6 +5009,17 @@ Lines: 1 0 Mode: 644 # ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/sys/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/writeback_rate_debug +Lines: 7 +rate: 1.1M/sec +dirty: 20.4G +target: 20.4G +proportional: 427.5k +integral: 790.0k +change: 321.5k/sec +next io: 17ms +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Path: fixtures/sys/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/btree_cache_size Lines: 1 0 diff --git a/vendor/github.com/prometheus/procfs/fscache.go b/vendor/github.com/prometheus/procfs/fscache.go new file mode 100644 index 00000000..8783cf3c --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fscache.go @@ -0,0 +1,422 @@ +// Copyright 2019 The Prometheus 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 procfs + +import ( + "bufio" + "bytes" + "fmt" + "io" + "strconv" + "strings" + + "github.com/prometheus/procfs/internal/util" +) + +// Fscacheinfo represents fscache statistics. +type Fscacheinfo struct { + // Number of index cookies allocated + IndexCookiesAllocated uint64 + // data storage cookies allocated + DataStorageCookiesAllocated uint64 + // Number of special cookies allocated + SpecialCookiesAllocated uint64 + // Number of objects allocated + ObjectsAllocated uint64 + // Number of object allocation failures + ObjectAllocationsFailure uint64 + // Number of objects that reached the available state + ObjectsAvailable uint64 + // Number of objects that reached the dead state + ObjectsDead uint64 + // Number of objects that didn't have a coherency check + ObjectsWithoutCoherencyCheck uint64 + // Number of objects that passed a coherency check + ObjectsWithCoherencyCheck uint64 + // Number of objects that needed a coherency data update + ObjectsNeedCoherencyCheckUpdate uint64 + // Number of objects that were declared obsolete + ObjectsDeclaredObsolete uint64 + // Number of pages marked as being cached + PagesMarkedAsBeingCached uint64 + // Number of uncache page requests seen + UncachePagesRequestSeen uint64 + // Number of acquire cookie requests seen + AcquireCookiesRequestSeen uint64 + // Number of acq reqs given a NULL parent + AcquireRequestsWithNullParent uint64 + // Number of acq reqs rejected due to no cache available + AcquireRequestsRejectedNoCacheAvailable uint64 + // Number of acq reqs succeeded + AcquireRequestsSucceeded uint64 + // Number of acq reqs rejected due to error + AcquireRequestsRejectedDueToError uint64 + // Number of acq reqs failed on ENOMEM + AcquireRequestsFailedDueToEnomem uint64 + // Number of lookup calls made on cache backends + LookupsNumber uint64 + // Number of negative lookups made + LookupsNegative uint64 + // Number of positive lookups made + LookupsPositive uint64 + // Number of objects created by lookup + ObjectsCreatedByLookup uint64 + // Number of lookups timed out and requeued + LookupsTimedOutAndRequed uint64 + InvalidationsNumber uint64 + InvalidationsRunning uint64 + // Number of update cookie requests seen + UpdateCookieRequestSeen uint64 + // Number of upd reqs given a NULL parent + UpdateRequestsWithNullParent uint64 + // Number of upd reqs granted CPU time + UpdateRequestsRunning uint64 + // Number of relinquish cookie requests seen + RelinquishCookiesRequestSeen uint64 + // Number of rlq reqs given a NULL parent + RelinquishCookiesWithNullParent uint64 + // Number of rlq reqs waited on completion of creation + RelinquishRequestsWaitingCompleteCreation uint64 + // Relinqs rtr + RelinquishRetries uint64 + // Number of attribute changed requests seen + AttributeChangedRequestsSeen uint64 + // Number of attr changed requests queued + AttributeChangedRequestsQueued uint64 + // Number of attr changed rejected -ENOBUFS + AttributeChangedRejectDueToEnobufs uint64 + // Number of attr changed failed -ENOMEM + AttributeChangedFailedDueToEnomem uint64 + // Number of attr changed ops given CPU time + AttributeChangedOps uint64 + // Number of allocation requests seen + AllocationRequestsSeen uint64 + // Number of successful alloc reqs + AllocationOkRequests uint64 + // Number of alloc reqs that waited on lookup completion + AllocationWaitingOnLookup uint64 + // Number of alloc reqs rejected -ENOBUFS + AllocationsRejectedDueToEnobufs uint64 + // Number of alloc reqs aborted -ERESTARTSYS + AllocationsAbortedDueToErestartsys uint64 + // Number of alloc reqs submitted + AllocationOperationsSubmitted uint64 + // Number of alloc reqs waited for CPU time + AllocationsWaitedForCPU uint64 + // Number of alloc reqs aborted due to object death + AllocationsAbortedDueToObjectDeath uint64 + // Number of retrieval (read) requests seen + RetrievalsReadRequests uint64 + // Number of successful retr reqs + RetrievalsOk uint64 + // Number of retr reqs that waited on lookup completion + RetrievalsWaitingLookupCompletion uint64 + // Number of retr reqs returned -ENODATA + RetrievalsReturnedEnodata uint64 + // Number of retr reqs rejected -ENOBUFS + RetrievalsRejectedDueToEnobufs uint64 + // Number of retr reqs aborted -ERESTARTSYS + RetrievalsAbortedDueToErestartsys uint64 + // Number of retr reqs failed -ENOMEM + RetrievalsFailedDueToEnomem uint64 + // Number of retr reqs submitted + RetrievalsRequests uint64 + // Number of retr reqs waited for CPU time + RetrievalsWaitingCPU uint64 + // Number of retr reqs aborted due to object death + RetrievalsAbortedDueToObjectDeath uint64 + // Number of storage (write) requests seen + StoreWriteRequests uint64 + // Number of successful store reqs + StoreSuccessfulRequests uint64 + // Number of store reqs on a page already pending storage + StoreRequestsOnPendingStorage uint64 + // Number of store reqs rejected -ENOBUFS + StoreRequestsRejectedDueToEnobufs uint64 + // Number of store reqs failed -ENOMEM + StoreRequestsFailedDueToEnomem uint64 + // Number of store reqs submitted + StoreRequestsSubmitted uint64 + // Number of store reqs granted CPU time + StoreRequestsRunning uint64 + // Number of pages given store req processing time + StorePagesWithRequestsProcessing uint64 + // Number of store reqs deleted from tracking tree + StoreRequestsDeleted uint64 + // Number of store reqs over store limit + StoreRequestsOverStoreLimit uint64 + // Number of release reqs against pages with no pending store + ReleaseRequestsAgainstPagesWithNoPendingStorage uint64 + // Number of release reqs against pages stored by time lock granted + ReleaseRequestsAgainstPagesStoredByTimeLockGranted uint64 + // Number of release reqs ignored due to in-progress store + ReleaseRequestsIgnoredDueToInProgressStore uint64 + // Number of page stores cancelled due to release req + PageStoresCancelledByReleaseRequests uint64 + VmscanWaiting uint64 + // Number of times async ops added to pending queues + OpsPending uint64 + // Number of times async ops given CPU time + OpsRunning uint64 + // Number of times async ops queued for processing + OpsEnqueued uint64 + // Number of async ops cancelled + OpsCancelled uint64 + // Number of async ops rejected due to object lookup/create failure + OpsRejected uint64 + // Number of async ops initialised + OpsInitialised uint64 + // Number of async ops queued for deferred release + OpsDeferred uint64 + // Number of async ops released (should equal ini=N when idle) + OpsReleased uint64 + // Number of deferred-release async ops garbage collected + OpsGarbageCollected uint64 + // Number of in-progress alloc_object() cache ops + CacheopAllocationsinProgress uint64 + // Number of in-progress lookup_object() cache ops + CacheopLookupObjectInProgress uint64 + // Number of in-progress lookup_complete() cache ops + CacheopLookupCompleteInPorgress uint64 + // Number of in-progress grab_object() cache ops + CacheopGrabObjectInProgress uint64 + CacheopInvalidations uint64 + // Number of in-progress update_object() cache ops + CacheopUpdateObjectInProgress uint64 + // Number of in-progress drop_object() cache ops + CacheopDropObjectInProgress uint64 + // Number of in-progress put_object() cache ops + CacheopPutObjectInProgress uint64 + // Number of in-progress attr_changed() cache ops + CacheopAttributeChangeInProgress uint64 + // Number of in-progress sync_cache() cache ops + CacheopSyncCacheInProgress uint64 + // Number of in-progress read_or_alloc_page() cache ops + CacheopReadOrAllocPageInProgress uint64 + // Number of in-progress read_or_alloc_pages() cache ops + CacheopReadOrAllocPagesInProgress uint64 + // Number of in-progress allocate_page() cache ops + CacheopAllocatePageInProgress uint64 + // Number of in-progress allocate_pages() cache ops + CacheopAllocatePagesInProgress uint64 + // Number of in-progress write_page() cache ops + CacheopWritePagesInProgress uint64 + // Number of in-progress uncache_page() cache ops + CacheopUncachePagesInProgress uint64 + // Number of in-progress dissociate_pages() cache ops + CacheopDissociatePagesInProgress uint64 + // Number of object lookups/creations rejected due to lack of space + CacheevLookupsAndCreationsRejectedLackSpace uint64 + // Number of stale objects deleted + CacheevStaleObjectsDeleted uint64 + // Number of objects retired when relinquished + CacheevRetiredWhenReliquished uint64 + // Number of objects culled + CacheevObjectsCulled uint64 +} + +// Fscacheinfo returns information about current fscache statistics. +// See https://www.kernel.org/doc/Documentation/filesystems/caching/fscache.txt +func (fs FS) Fscacheinfo() (Fscacheinfo, error) { + b, err := util.ReadFileNoStat(fs.proc.Path("fs/fscache/stats")) + if err != nil { + return Fscacheinfo{}, err + } + + m, err := parseFscacheinfo(bytes.NewReader(b)) + if err != nil { + return Fscacheinfo{}, fmt.Errorf("failed to parse Fscacheinfo: %v", err) + } + + return *m, nil +} + +func setFSCacheFields(fields []string, setFields ...*uint64) error { + var err error + if len(fields) < len(setFields) { + return fmt.Errorf("Insufficient number of fields, expected %v, got %v", len(setFields), len(fields)) + } + + for i := range setFields { + *setFields[i], err = strconv.ParseUint(strings.Split(fields[i], "=")[1], 0, 64) + if err != nil { + return err + } + } + return nil +} + +func parseFscacheinfo(r io.Reader) (*Fscacheinfo, error) { + var m Fscacheinfo + s := bufio.NewScanner(r) + for s.Scan() { + fields := strings.Fields(s.Text()) + if len(fields) < 2 { + return nil, fmt.Errorf("malformed Fscacheinfo line: %q", s.Text()) + } + + switch fields[0] { + case "Cookies:": + err := setFSCacheFields(fields[1:], &m.IndexCookiesAllocated, &m.DataStorageCookiesAllocated, + &m.SpecialCookiesAllocated) + if err != nil { + return &m, err + } + case "Objects:": + err := setFSCacheFields(fields[1:], &m.ObjectsAllocated, &m.ObjectAllocationsFailure, + &m.ObjectsAvailable, &m.ObjectsDead) + if err != nil { + return &m, err + } + case "ChkAux": + err := setFSCacheFields(fields[2:], &m.ObjectsWithoutCoherencyCheck, &m.ObjectsWithCoherencyCheck, + &m.ObjectsNeedCoherencyCheckUpdate, &m.ObjectsDeclaredObsolete) + if err != nil { + return &m, err + } + case "Pages": + err := setFSCacheFields(fields[2:], &m.PagesMarkedAsBeingCached, &m.UncachePagesRequestSeen) + if err != nil { + return &m, err + } + case "Acquire:": + err := setFSCacheFields(fields[1:], &m.AcquireCookiesRequestSeen, &m.AcquireRequestsWithNullParent, + &m.AcquireRequestsRejectedNoCacheAvailable, &m.AcquireRequestsSucceeded, &m.AcquireRequestsRejectedDueToError, + &m.AcquireRequestsFailedDueToEnomem) + if err != nil { + return &m, err + } + case "Lookups:": + err := setFSCacheFields(fields[1:], &m.LookupsNumber, &m.LookupsNegative, &m.LookupsPositive, + &m.ObjectsCreatedByLookup, &m.LookupsTimedOutAndRequed) + if err != nil { + return &m, err + } + case "Invals": + err := setFSCacheFields(fields[2:], &m.InvalidationsNumber, &m.InvalidationsRunning) + if err != nil { + return &m, err + } + case "Updates:": + err := setFSCacheFields(fields[1:], &m.UpdateCookieRequestSeen, &m.UpdateRequestsWithNullParent, + &m.UpdateRequestsRunning) + if err != nil { + return &m, err + } + case "Relinqs:": + err := setFSCacheFields(fields[1:], &m.RelinquishCookiesRequestSeen, &m.RelinquishCookiesWithNullParent, + &m.RelinquishRequestsWaitingCompleteCreation, &m.RelinquishRetries) + if err != nil { + return &m, err + } + case "AttrChg:": + err := setFSCacheFields(fields[1:], &m.AttributeChangedRequestsSeen, &m.AttributeChangedRequestsQueued, + &m.AttributeChangedRejectDueToEnobufs, &m.AttributeChangedFailedDueToEnomem, &m.AttributeChangedOps) + if err != nil { + return &m, err + } + case "Allocs": + if strings.Split(fields[2], "=")[0] == "n" { + err := setFSCacheFields(fields[2:], &m.AllocationRequestsSeen, &m.AllocationOkRequests, + &m.AllocationWaitingOnLookup, &m.AllocationsRejectedDueToEnobufs, &m.AllocationsAbortedDueToErestartsys) + if err != nil { + return &m, err + } + } else { + err := setFSCacheFields(fields[2:], &m.AllocationOperationsSubmitted, &m.AllocationsWaitedForCPU, + &m.AllocationsAbortedDueToObjectDeath) + if err != nil { + return &m, err + } + } + case "Retrvls:": + if strings.Split(fields[1], "=")[0] == "n" { + err := setFSCacheFields(fields[1:], &m.RetrievalsReadRequests, &m.RetrievalsOk, &m.RetrievalsWaitingLookupCompletion, + &m.RetrievalsReturnedEnodata, &m.RetrievalsRejectedDueToEnobufs, &m.RetrievalsAbortedDueToErestartsys, + &m.RetrievalsFailedDueToEnomem) + if err != nil { + return &m, err + } + } else { + err := setFSCacheFields(fields[1:], &m.RetrievalsRequests, &m.RetrievalsWaitingCPU, &m.RetrievalsAbortedDueToObjectDeath) + if err != nil { + return &m, err + } + } + case "Stores": + if strings.Split(fields[2], "=")[0] == "n" { + err := setFSCacheFields(fields[2:], &m.StoreWriteRequests, &m.StoreSuccessfulRequests, + &m.StoreRequestsOnPendingStorage, &m.StoreRequestsRejectedDueToEnobufs, &m.StoreRequestsFailedDueToEnomem) + if err != nil { + return &m, err + } + } else { + err := setFSCacheFields(fields[2:], &m.StoreRequestsSubmitted, &m.StoreRequestsRunning, + &m.StorePagesWithRequestsProcessing, &m.StoreRequestsDeleted, &m.StoreRequestsOverStoreLimit) + if err != nil { + return &m, err + } + } + case "VmScan": + err := setFSCacheFields(fields[2:], &m.ReleaseRequestsAgainstPagesWithNoPendingStorage, + &m.ReleaseRequestsAgainstPagesStoredByTimeLockGranted, &m.ReleaseRequestsIgnoredDueToInProgressStore, + &m.PageStoresCancelledByReleaseRequests, &m.VmscanWaiting) + if err != nil { + return &m, err + } + case "Ops": + if strings.Split(fields[2], "=")[0] == "pend" { + err := setFSCacheFields(fields[2:], &m.OpsPending, &m.OpsRunning, &m.OpsEnqueued, &m.OpsCancelled, &m.OpsRejected) + if err != nil { + return &m, err + } + } else { + err := setFSCacheFields(fields[2:], &m.OpsInitialised, &m.OpsDeferred, &m.OpsReleased, &m.OpsGarbageCollected) + if err != nil { + return &m, err + } + } + case "CacheOp:": + if strings.Split(fields[1], "=")[0] == "alo" { + err := setFSCacheFields(fields[1:], &m.CacheopAllocationsinProgress, &m.CacheopLookupObjectInProgress, + &m.CacheopLookupCompleteInPorgress, &m.CacheopGrabObjectInProgress) + if err != nil { + return &m, err + } + } else if strings.Split(fields[1], "=")[0] == "inv" { + err := setFSCacheFields(fields[1:], &m.CacheopInvalidations, &m.CacheopUpdateObjectInProgress, + &m.CacheopDropObjectInProgress, &m.CacheopPutObjectInProgress, &m.CacheopAttributeChangeInProgress, + &m.CacheopSyncCacheInProgress) + if err != nil { + return &m, err + } + } else { + err := setFSCacheFields(fields[1:], &m.CacheopReadOrAllocPageInProgress, &m.CacheopReadOrAllocPagesInProgress, + &m.CacheopAllocatePageInProgress, &m.CacheopAllocatePagesInProgress, &m.CacheopWritePagesInProgress, + &m.CacheopUncachePagesInProgress, &m.CacheopDissociatePagesInProgress) + if err != nil { + return &m, err + } + } + case "CacheEv:": + err := setFSCacheFields(fields[1:], &m.CacheevLookupsAndCreationsRejectedLackSpace, &m.CacheevStaleObjectsDeleted, + &m.CacheevRetiredWhenReliquished, &m.CacheevObjectsCulled) + if err != nil { + return &m, err + } + } + } + + return &m, nil +} diff --git a/vendor/github.com/prometheus/procfs/internal/util/parse.go b/vendor/github.com/prometheus/procfs/internal/util/parse.go index 755591d9..22cb07a6 100644 --- a/vendor/github.com/prometheus/procfs/internal/util/parse.go +++ b/vendor/github.com/prometheus/procfs/internal/util/parse.go @@ -73,6 +73,15 @@ func ReadUintFromFile(path string) (uint64, error) { return strconv.ParseUint(strings.TrimSpace(string(data)), 10, 64) } +// ReadIntFromFile reads a file and attempts to parse a int64 from it. +func ReadIntFromFile(path string) (int64, error) { + data, err := ioutil.ReadFile(path) + if err != nil { + return 0, err + } + return strconv.ParseInt(strings.TrimSpace(string(data)), 10, 64) +} + // ParseBool parses a string into a boolean pointer. func ParseBool(b string) *bool { var truth bool diff --git a/vendor/github.com/prometheus/procfs/kernel_random.go b/vendor/github.com/prometheus/procfs/kernel_random.go new file mode 100644 index 00000000..beefdf02 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/kernel_random.go @@ -0,0 +1,62 @@ +// Copyright 2020 The Prometheus 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. + +// +build !windows + +package procfs + +import ( + "os" + + "github.com/prometheus/procfs/internal/util" +) + +// KernelRandom contains information about to the kernel's random number generator. +type KernelRandom struct { + // EntropyAvaliable gives the available entropy, in bits. + EntropyAvaliable *uint64 + // PoolSize gives the size of the entropy pool, in bytes. + PoolSize *uint64 + // URandomMinReseedSeconds is the number of seconds after which the DRNG will be reseeded. + URandomMinReseedSeconds *uint64 + // WriteWakeupThreshold the number of bits of entropy below which we wake up processes + // that do a select(2) or poll(2) for write access to /dev/random. + WriteWakeupThreshold *uint64 + // ReadWakeupThreshold is the number of bits of entropy required for waking up processes that sleep + // waiting for entropy from /dev/random. + ReadWakeupThreshold *uint64 +} + +// KernelRandom returns values from /proc/sys/kernel/random. +func (fs FS) KernelRandom() (KernelRandom, error) { + random := KernelRandom{} + + for file, p := range map[string]**uint64{ + "entropy_avail": &random.EntropyAvaliable, + "poolsize": &random.PoolSize, + "urandom_min_reseed_secs": &random.URandomMinReseedSeconds, + "write_wakeup_threshold": &random.WriteWakeupThreshold, + "read_wakeup_threshold": &random.ReadWakeupThreshold, + } { + val, err := util.ReadUintFromFile(fs.proc.Path("sys", "kernel", "random", file)) + if os.IsNotExist(err) { + continue + } + if err != nil { + return random, err + } + *p = &val + } + + return random, nil +} diff --git a/vendor/github.com/prometheus/procfs/mdstat.go b/vendor/github.com/prometheus/procfs/mdstat.go index 2af3ada1..3e9362a9 100644 --- a/vendor/github.com/prometheus/procfs/mdstat.go +++ b/vendor/github.com/prometheus/procfs/mdstat.go @@ -52,7 +52,7 @@ type MDStat struct { func (fs FS) MDStat() ([]MDStat, error) { data, err := ioutil.ReadFile(fs.proc.Path("mdstat")) if err != nil { - return nil, fmt.Errorf("error parsing mdstat %s: %s", fs.proc.Path("mdstat"), err) + return nil, err } mdstat, err := parseMDStat(data) if err != nil { diff --git a/vendor/github.com/prometheus/procfs/mountinfo.go b/vendor/github.com/prometheus/procfs/mountinfo.go index 94711361..59f4d505 100644 --- a/vendor/github.com/prometheus/procfs/mountinfo.go +++ b/vendor/github.com/prometheus/procfs/mountinfo.go @@ -77,7 +77,7 @@ func parseMountInfoString(mountString string) (*MountInfo, error) { mountInfo := strings.Split(mountString, " ") mountInfoLength := len(mountInfo) - if mountInfoLength < 11 { + if mountInfoLength < 10 { return nil, fmt.Errorf("couldn't find enough fields in mount string: %s", mountString) } @@ -144,7 +144,7 @@ func mountOptionsParseOptionalFields(o []string) (map[string]string, error) { return optionalFields, nil } -// Parses the mount options, superblock options. +// mountOptionsParser parses the mount options, superblock options. func mountOptionsParser(mountOptions string) map[string]string { opts := make(map[string]string) options := strings.Split(mountOptions, ",") @@ -161,7 +161,7 @@ func mountOptionsParser(mountOptions string) map[string]string { return opts } -// Retrieves mountinfo information from `/proc/self/mountinfo`. +// GetMounts retrieves mountinfo information from `/proc/self/mountinfo`. func GetMounts() ([]*MountInfo, error) { data, err := util.ReadFileNoStat("/proc/self/mountinfo") if err != nil { @@ -170,7 +170,7 @@ func GetMounts() ([]*MountInfo, error) { return parseMountInfo(data) } -// Retrieves mountinfo information from a processes' `/proc//mountinfo`. +// GetProcMounts retrieves mountinfo information from a processes' `/proc//mountinfo`. func GetProcMounts(pid int) ([]*MountInfo, error) { data, err := util.ReadFileNoStat(fmt.Sprintf("/proc/%d/mountinfo", pid)) if err != nil { diff --git a/vendor/github.com/prometheus/procfs/mountstats.go b/vendor/github.com/prometheus/procfs/mountstats.go index 35b2ef35..861ced9d 100644 --- a/vendor/github.com/prometheus/procfs/mountstats.go +++ b/vendor/github.com/prometheus/procfs/mountstats.go @@ -186,6 +186,8 @@ type NFSOperationStats struct { CumulativeTotalResponseMilliseconds uint64 // Duration from when a request was enqueued to when it was completely handled. CumulativeTotalRequestMilliseconds uint64 + // The count of operations that complete with tk_status < 0. These statuses usually indicate error conditions. + Errors uint64 } // A NFSTransportStats contains statistics for the NFS mount RPC requests and @@ -494,8 +496,8 @@ func parseNFSEventsStats(ss []string) (*NFSEventsStats, error) { // line is reached. func parseNFSOperationStats(s *bufio.Scanner) ([]NFSOperationStats, error) { const ( - // Number of expected fields in each per-operation statistics set - numFields = 9 + // Minimum number of expected fields in each per-operation statistics set + minFields = 9 ) var ops []NFSOperationStats @@ -508,12 +510,12 @@ func parseNFSOperationStats(s *bufio.Scanner) ([]NFSOperationStats, error) { break } - if len(ss) != numFields { + if len(ss) < minFields { return nil, fmt.Errorf("invalid NFS per-operations stats: %v", ss) } // Skip string operation name for integers - ns := make([]uint64, 0, numFields-1) + ns := make([]uint64, 0, minFields-1) for _, st := range ss[1:] { n, err := strconv.ParseUint(st, 10, 64) if err != nil { @@ -523,7 +525,7 @@ func parseNFSOperationStats(s *bufio.Scanner) ([]NFSOperationStats, error) { ns = append(ns, n) } - ops = append(ops, NFSOperationStats{ + opStats := NFSOperationStats{ Operation: strings.TrimSuffix(ss[0], ":"), Requests: ns[0], Transmissions: ns[1], @@ -533,7 +535,13 @@ func parseNFSOperationStats(s *bufio.Scanner) ([]NFSOperationStats, error) { CumulativeQueueMilliseconds: ns[5], CumulativeTotalResponseMilliseconds: ns[6], CumulativeTotalRequestMilliseconds: ns[7], - }) + } + + if len(ns) > 8 { + opStats.Errors = ns[8] + } + + ops = append(ops, opStats) } return ops, s.Err() diff --git a/vendor/github.com/prometheus/procfs/net_conntrackstat.go b/vendor/github.com/prometheus/procfs/net_conntrackstat.go index 1e27c83d..b637be98 100644 --- a/vendor/github.com/prometheus/procfs/net_conntrackstat.go +++ b/vendor/github.com/prometheus/procfs/net_conntrackstat.go @@ -38,7 +38,7 @@ type ConntrackStatEntry struct { SearchRestart uint64 } -// Retrieves netfilter's conntrack statistics, split by CPU cores +// ConntrackStat retrieves netfilter's conntrack statistics, split by CPU cores func (fs FS) ConntrackStat() ([]ConntrackStatEntry, error) { return readConntrackStat(fs.proc.Path("net", "stat", "nf_conntrack")) } diff --git a/vendor/github.com/prometheus/procfs/proc.go b/vendor/github.com/prometheus/procfs/proc.go index 330e472c..9f97b6e5 100644 --- a/vendor/github.com/prometheus/procfs/proc.go +++ b/vendor/github.com/prometheus/procfs/proc.go @@ -134,6 +134,27 @@ func (p Proc) CmdLine() ([]string, error) { return strings.Split(string(bytes.TrimRight(data, string("\x00"))), string(byte(0))), nil } +// Wchan returns the wchan (wait channel) of a process. +func (p Proc) Wchan() (string, error) { + f, err := os.Open(p.path("wchan")) + if err != nil { + return "", err + } + defer f.Close() + + data, err := ioutil.ReadAll(f) + if err != nil { + return "", err + } + + wchan := string(data) + if wchan == "" || wchan == "0" { + return "", nil + } + + return wchan, nil +} + // Comm returns the command name of a process. func (p Proc) Comm() (string, error) { data, err := util.ReadFileNoStat(p.path("comm")) diff --git a/vendor/github.com/prometheus/procfs/proc_cgroup.go b/vendor/github.com/prometheus/procfs/proc_cgroup.go new file mode 100644 index 00000000..4abd4645 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/proc_cgroup.go @@ -0,0 +1,98 @@ +// Copyright 2020 The Prometheus 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 procfs + +import ( + "bufio" + "bytes" + "fmt" + "strconv" + "strings" + + "github.com/prometheus/procfs/internal/util" +) + +// Cgroup models one line from /proc/[pid]/cgroup. Each Cgroup struct describes the the placement of a PID inside a +// specific control hierarchy. The kernel has two cgroup APIs, v1 and v2. v1 has one hierarchy per available resource +// controller, while v2 has one unified hierarchy shared by all controllers. Regardless of v1 or v2, all hierarchies +// contain all running processes, so the question answerable with a Cgroup struct is 'where is this process in +// this hierarchy' (where==what path on the specific cgroupfs). By prefixing this path with the mount point of +// *this specific* hierarchy, you can locate the relevant pseudo-files needed to read/set the data for this PID +// in this hierarchy +// +// Also see http://man7.org/linux/man-pages/man7/cgroups.7.html +type Cgroup struct { + // HierarchyID that can be matched to a named hierarchy using /proc/cgroups. Cgroups V2 only has one + // hierarchy, so HierarchyID is always 0. For cgroups v1 this is a unique ID number + HierarchyID int + // Controllers using this hierarchy of processes. Controllers are also known as subsystems. For + // Cgroups V2 this may be empty, as all active controllers use the same hierarchy + Controllers []string + // Path of this control group, relative to the mount point of the cgroupfs representing this specific + // hierarchy + Path string +} + +// parseCgroupString parses each line of the /proc/[pid]/cgroup file +// Line format is hierarchyID:[controller1,controller2]:path +func parseCgroupString(cgroupStr string) (*Cgroup, error) { + var err error + + fields := strings.Split(cgroupStr, ":") + if len(fields) < 3 { + return nil, fmt.Errorf("at least 3 fields required, found %d fields in cgroup string: %s", len(fields), cgroupStr) + } + + cgroup := &Cgroup{ + Path: fields[2], + Controllers: nil, + } + cgroup.HierarchyID, err = strconv.Atoi(fields[0]) + if err != nil { + return nil, fmt.Errorf("failed to parse hierarchy ID") + } + if fields[1] != "" { + ssNames := strings.Split(fields[1], ",") + cgroup.Controllers = append(cgroup.Controllers, ssNames...) + } + return cgroup, nil +} + +// parseCgroups reads each line of the /proc/[pid]/cgroup file +func parseCgroups(data []byte) ([]Cgroup, error) { + var cgroups []Cgroup + scanner := bufio.NewScanner(bytes.NewReader(data)) + for scanner.Scan() { + mountString := scanner.Text() + parsedMounts, err := parseCgroupString(mountString) + if err != nil { + return nil, err + } + cgroups = append(cgroups, *parsedMounts) + } + + err := scanner.Err() + return cgroups, err +} + +// Cgroups reads from /proc//cgroups and returns a []*Cgroup struct locating this PID in each process +// control hierarchy running on this system. On every system (v1 and v2), all hierarchies contain all processes, +// so the len of the returned struct is equal to the number of active hierarchies on this system +func (p Proc) Cgroups() ([]Cgroup, error) { + data, err := util.ReadFileNoStat(fmt.Sprintf("/proc/%d/cgroup", p.PID)) + if err != nil { + return nil, err + } + return parseCgroups(data) +} diff --git a/vendor/github.com/prometheus/procfs/proc_fdinfo.go b/vendor/github.com/prometheus/procfs/proc_fdinfo.go index 0c9c4028..a76ca707 100644 --- a/vendor/github.com/prometheus/procfs/proc_fdinfo.go +++ b/vendor/github.com/prometheus/procfs/proc_fdinfo.go @@ -41,7 +41,7 @@ type ProcFDInfo struct { Flags string // Mount point ID MntID string - // List of inotify lines (structed) in the fdinfo file (kernel 3.8+ only) + // List of inotify lines (structured) in the fdinfo file (kernel 3.8+ only) InotifyInfos []InotifyInfo } diff --git a/vendor/github.com/prometheus/procfs/proc_maps.go b/vendor/github.com/prometheus/procfs/proc_maps.go index 28d5c6eb..1d7772d5 100644 --- a/vendor/github.com/prometheus/procfs/proc_maps.go +++ b/vendor/github.com/prometheus/procfs/proc_maps.go @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -// +build !windows +// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris package procfs @@ -25,6 +25,7 @@ import ( "golang.org/x/sys/unix" ) +// ProcMapPermissions contains permission settings read from /proc/[pid]/maps type ProcMapPermissions struct { // mapping has the [R]ead flag set Read bool diff --git a/vendor/github.com/prometheus/procfs/proc_smaps.go b/vendor/github.com/prometheus/procfs/proc_smaps.go new file mode 100644 index 00000000..a576a720 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/proc_smaps.go @@ -0,0 +1,165 @@ +// Copyright 2020 The Prometheus 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. + +// +build !windows + +package procfs + +import ( + "bufio" + "errors" + "fmt" + "os" + "regexp" + "strconv" + "strings" + + "github.com/prometheus/procfs/internal/util" +) + +var ( + // match the header line before each mapped zone in /proc/pid/smaps + procSMapsHeaderLine = regexp.MustCompile(`^[a-f0-9].*$`) +) + +type ProcSMapsRollup struct { + // Amount of the mapping that is currently resident in RAM + Rss uint64 + // Process's proportional share of this mapping + Pss uint64 + // Size in bytes of clean shared pages + SharedClean uint64 + // Size in bytes of dirty shared pages + SharedDirty uint64 + // Size in bytes of clean private pages + PrivateClean uint64 + // Size in bytes of dirty private pages + PrivateDirty uint64 + // Amount of memory currently marked as referenced or accessed + Referenced uint64 + // Amount of memory that does not belong to any file + Anonymous uint64 + // Amount would-be-anonymous memory currently on swap + Swap uint64 + // Process's proportional memory on swap + SwapPss uint64 +} + +// ProcSMapsRollup reads from /proc/[pid]/smaps_rollup to get summed memory information of the +// process. +// +// If smaps_rollup does not exists (require kernel >= 4.15), the content of /proc/pid/smaps will +// we read and summed. +func (p Proc) ProcSMapsRollup() (ProcSMapsRollup, error) { + data, err := util.ReadFileNoStat(p.path("smaps_rollup")) + if err != nil && os.IsNotExist(err) { + return p.procSMapsRollupManual() + } + if err != nil { + return ProcSMapsRollup{}, err + } + + lines := strings.Split(string(data), "\n") + smaps := ProcSMapsRollup{} + + // skip first line which don't contains information we need + lines = lines[1:] + for _, line := range lines { + if line == "" { + continue + } + + if err := smaps.parseLine(line); err != nil { + return ProcSMapsRollup{}, err + } + } + + return smaps, nil +} + +// Read /proc/pid/smaps and do the roll-up in Go code. +func (p Proc) procSMapsRollupManual() (ProcSMapsRollup, error) { + file, err := os.Open(p.path("smaps")) + if err != nil { + return ProcSMapsRollup{}, err + } + defer file.Close() + + smaps := ProcSMapsRollup{} + scan := bufio.NewScanner(file) + + for scan.Scan() { + line := scan.Text() + + if procSMapsHeaderLine.MatchString(line) { + continue + } + + if err := smaps.parseLine(line); err != nil { + return ProcSMapsRollup{}, err + } + } + + return smaps, nil +} + +func (s *ProcSMapsRollup) parseLine(line string) error { + kv := strings.SplitN(line, ":", 2) + if len(kv) != 2 { + fmt.Println(line) + return errors.New("invalid net/dev line, missing colon") + } + + k := kv[0] + if k == "VmFlags" { + return nil + } + + v := strings.TrimSpace(kv[1]) + v = strings.TrimRight(v, " kB") + + vKBytes, err := strconv.ParseUint(v, 10, 64) + if err != nil { + return err + } + vBytes := vKBytes * 1024 + + s.addValue(k, v, vKBytes, vBytes) + + return nil +} + +func (s *ProcSMapsRollup) addValue(k string, vString string, vUint uint64, vUintBytes uint64) { + switch k { + case "Rss": + s.Rss += vUintBytes + case "Pss": + s.Pss += vUintBytes + case "Shared_Clean": + s.SharedClean += vUintBytes + case "Shared_Dirty": + s.SharedDirty += vUintBytes + case "Private_Clean": + s.PrivateClean += vUintBytes + case "Private_Dirty": + s.PrivateDirty += vUintBytes + case "Referenced": + s.Referenced += vUintBytes + case "Anonymous": + s.Anonymous += vUintBytes + case "Swap": + s.Swap += vUintBytes + case "SwapPss": + s.SwapPss += vUintBytes + } +} diff --git a/vendor/github.com/spf13/cobra/.gitignore b/vendor/github.com/spf13/cobra/.gitignore index b2b848e7..c7b459e4 100644 --- a/vendor/github.com/spf13/cobra/.gitignore +++ b/vendor/github.com/spf13/cobra/.gitignore @@ -32,8 +32,8 @@ Session.vim tags *.exe -cobra cobra.test +bin .idea/ *.iml diff --git a/vendor/github.com/spf13/cobra/.travis.yml b/vendor/github.com/spf13/cobra/.travis.yml index fca1e694..a9bd4e54 100644 --- a/vendor/github.com/spf13/cobra/.travis.yml +++ b/vendor/github.com/spf13/cobra/.travis.yml @@ -3,26 +3,27 @@ language: go stages: - diff - test + - build go: - - 1.10.x - - 1.11.x - 1.12.x + - 1.13.x - tip +before_install: + - go get -u github.com/kyoh86/richgo + - go get -u github.com/mitchellh/gox + matrix: allow_failures: - go: tip include: - stage: diff - go: 1.12.x - script: diff -u <(echo -n) <(gofmt -d -s .) - -before_install: go get -u github.com/kyoh86/richgo + go: 1.13.x + script: make fmt + - stage: build + go: 1.13.x + script: make cobra_generator -script: - - richgo test -v ./... - - go build - - if [ -z $NOVET ]; then - diff -u <(echo -n) <(go vet . 2>&1 | grep -vE 'ExampleCommand|bash_completions.*Fprint'); - fi +script: + - make test diff --git a/vendor/github.com/spf13/cobra/Makefile b/vendor/github.com/spf13/cobra/Makefile new file mode 100644 index 00000000..e9740d1e --- /dev/null +++ b/vendor/github.com/spf13/cobra/Makefile @@ -0,0 +1,36 @@ +BIN="./bin" +SRC=$(shell find . -name "*.go") + +ifeq (, $(shell which richgo)) +$(warning "could not find richgo in $(PATH), run: go get github.com/kyoh86/richgo") +endif + +.PHONY: fmt vet test cobra_generator install_deps clean + +default: all + +all: fmt vet test cobra_generator + +fmt: + $(info ******************** checking formatting ********************) + @test -z $(shell gofmt -l $(SRC)) || (gofmt -d $(SRC); exit 1) + +test: install_deps vet + $(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 ./... + +vet: + $(info ******************** vetting ********************) + go vet ./... + +clean: + rm -rf $(BIN) diff --git a/vendor/github.com/spf13/cobra/README.md b/vendor/github.com/spf13/cobra/README.md index 2f8175bc..9d799342 100644 --- a/vendor/github.com/spf13/cobra/README.md +++ b/vendor/github.com/spf13/cobra/README.md @@ -25,10 +25,10 @@ Many of the most widely used Go projects are built using Cobra, such as: [mattermost-server](https://github.com/mattermost/mattermost-server), [Gardener](https://github.com/gardener/gardenctl), [Linkerd](https://linkerd.io/), +[Github CLI](https://github.com/cli/cli) etc. [![Build Status](https://travis-ci.org/spf13/cobra.svg "Travis CI status")](https://travis-ci.org/spf13/cobra) -[![CircleCI status](https://circleci.com/gh/spf13/cobra.png?circle-token=:circle-token "CircleCI status")](https://circleci.com/gh/spf13/cobra) [![GoDoc](https://godoc.org/github.com/spf13/cobra?status.svg)](https://godoc.org/github.com/spf13/cobra) [![Go Report Card](https://goreportcard.com/badge/github.com/spf13/cobra)](https://goreportcard.com/report/github.com/spf13/cobra) diff --git a/vendor/github.com/spf13/cobra/args.go b/vendor/github.com/spf13/cobra/args.go index c4d820b8..70e9b262 100644 --- a/vendor/github.com/spf13/cobra/args.go +++ b/vendor/github.com/spf13/cobra/args.go @@ -2,6 +2,7 @@ package cobra import ( "fmt" + "strings" ) type PositionalArgs func(cmd *Command, args []string) error @@ -34,8 +35,15 @@ func NoArgs(cmd *Command, args []string) error { // OnlyValidArgs returns an error if any args are not in the list of ValidArgs. func OnlyValidArgs(cmd *Command, args []string) error { if len(cmd.ValidArgs) > 0 { + // Remove any description that may be included in ValidArgs. + // A description is following a tab character. + var validArgs []string + for _, v := range cmd.ValidArgs { + validArgs = append(validArgs, strings.Split(v, "\t")[0]) + } + for _, v := range args { - if !stringInSlice(v, cmd.ValidArgs) { + if !stringInSlice(v, validArgs) { return fmt.Errorf("invalid argument %q for %q%s", v, cmd.CommandPath(), cmd.findSuggestions(args[0])) } } diff --git a/vendor/github.com/spf13/cobra/bash_completions.go b/vendor/github.com/spf13/cobra/bash_completions.go index 1e0e25cf..1e27188c 100644 --- a/vendor/github.com/spf13/cobra/bash_completions.go +++ b/vendor/github.com/spf13/cobra/bash_completions.go @@ -58,6 +58,67 @@ __%[1]s_contains_word() return 1 } +__%[1]s_handle_go_custom_completion() +{ + __%[1]s_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}" + + local out requestComp lastParam lastChar comp directive args + + # Prepare the command to request completions for the program. + # Calling ${words[0]} instead of directly %[1]s allows to handle aliases + args=("${words[@]:1}") + requestComp="${words[0]} %[2]s ${args[*]}" + + lastParam=${words[$((${#words[@]}-1))]} + lastChar=${lastParam:$((${#lastParam}-1)):1} + __%[1]s_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}" + + if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then + # If the last parameter is complete (there is a space following it) + # We add an extra empty parameter so we can indicate this to the go method. + __%[1]s_debug "${FUNCNAME[0]}: Adding extra empty parameter" + requestComp="${requestComp} \"\"" + fi + + __%[1]s_debug "${FUNCNAME[0]}: calling ${requestComp}" + # Use eval to handle any environment variables and such + out=$(eval "${requestComp}" 2>/dev/null) + + # Extract the directive integer at the very end of the output following a colon (:) + directive=${out##*:} + # Remove the directive + out=${out%%:*} + if [ "${directive}" = "${out}" ]; then + # There is not directive specified + directive=0 + fi + __%[1]s_debug "${FUNCNAME[0]}: the completion directive is: ${directive}" + __%[1]s_debug "${FUNCNAME[0]}: the completions are: ${out[*]}" + + if [ $((directive & %[3]d)) -ne 0 ]; then + # Error code. No completion. + __%[1]s_debug "${FUNCNAME[0]}: received error from custom completion go code" + return + else + if [ $((directive & %[4]d)) -ne 0 ]; then + if [[ $(type -t compopt) = "builtin" ]]; then + __%[1]s_debug "${FUNCNAME[0]}: activating no space" + compopt -o nospace + fi + fi + if [ $((directive & %[5]d)) -ne 0 ]; then + if [[ $(type -t compopt) = "builtin" ]]; then + __%[1]s_debug "${FUNCNAME[0]}: activating no file completion" + compopt +o default + fi + fi + + while IFS='' read -r comp; do + COMPREPLY+=("$comp") + done < <(compgen -W "${out[*]}" -- "$cur") + fi +} + __%[1]s_handle_reply() { __%[1]s_debug "${FUNCNAME[0]}" @@ -121,6 +182,10 @@ __%[1]s_handle_reply() completions=("${commands[@]}") if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then completions=("${must_have_one_noun[@]}") + elif [[ -n "${has_completion_function}" ]]; then + # if a go completion function is provided, defer to that function + completions=() + __%[1]s_handle_go_custom_completion fi if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then completions+=("${must_have_one_flag[@]}") @@ -279,7 +344,7 @@ __%[1]s_handle_word() __%[1]s_handle_word } -`, name)) +`, name, ShellCompNoDescRequestCmd, ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp)) } func writePostscript(buf *bytes.Buffer, name string) { @@ -304,6 +369,7 @@ func writePostscript(buf *bytes.Buffer, name string) { local commands=("%[1]s") local must_have_one_flag=() local must_have_one_noun=() + local has_completion_function local last_command local nouns=() @@ -404,7 +470,22 @@ func writeLocalNonPersistentFlag(buf *bytes.Buffer, flag *pflag.Flag) { buf.WriteString(fmt.Sprintf(format, name)) } +// Setup annotations for go completions for registered flags +func prepareCustomAnnotationsForFlags(cmd *Command) { + for flag := range flagCompletionFunctions { + // Make sure the completion script calls the __*_go_custom_completion function for + // every registered flag. We need to do this here (and not when the flag was registered + // for completion) so that we can know the root command name for the prefix + // of ___go_custom_completion + if flag.Annotations == nil { + flag.Annotations = map[string][]string{} + } + flag.Annotations[BashCompCustom] = []string{fmt.Sprintf("__%[1]s_handle_go_custom_completion", cmd.Root().Name())} + } +} + func writeFlags(buf *bytes.Buffer, cmd *Command) { + prepareCustomAnnotationsForFlags(cmd) buf.WriteString(` flags=() two_word_flags=() local_nonpersistent_flags=() @@ -467,8 +548,14 @@ func writeRequiredNouns(buf *bytes.Buffer, cmd *Command) { buf.WriteString(" must_have_one_noun=()\n") sort.Sort(sort.StringSlice(cmd.ValidArgs)) for _, value := range cmd.ValidArgs { + // Remove any description that may be included following a tab character. + // Descriptions are not supported by bash completion. + value = strings.Split(value, "\t")[0] buf.WriteString(fmt.Sprintf(" must_have_one_noun+=(%q)\n", value)) } + if cmd.ValidArgsFunction != nil { + buf.WriteString(" has_completion_function=1\n") + } } func writeCmdAliases(buf *bytes.Buffer, cmd *Command) { diff --git a/vendor/github.com/spf13/cobra/bash_completions.md b/vendor/github.com/spf13/cobra/bash_completions.md index 4ac61ee1..e61a3a65 100644 --- a/vendor/github.com/spf13/cobra/bash_completions.md +++ b/vendor/github.com/spf13/cobra/bash_completions.md @@ -56,7 +56,149 @@ func main() { `out.sh` will get you completions of subcommands and flags. Copy it to `/etc/bash_completion.d/` as described [here](https://debian-administration.org/article/316/An_introduction_to_bash_completion_part_1) and reset your terminal to use autocompletion. If you make additional annotations to your code, you can get even more intelligent and flexible behavior. -## Creating your own custom functions +## Have the completions code complete your 'nouns' + +### Static completion of nouns + +This method allows you to provide a pre-defined list of completion choices for your nouns using the `validArgs` field. +For example, if you want `kubectl get [tab][tab]` to show a list of valid "nouns" you have to set them. Simplified code from `kubectl get` looks like: + +```go +validArgs []string = { "pod", "node", "service", "replicationcontroller" } + +cmd := &cobra.Command{ + Use: "get [(-o|--output=)json|yaml|template|...] (RESOURCE [NAME] | RESOURCE/NAME ...)", + Short: "Display one or many resources", + Long: get_long, + Example: get_example, + Run: func(cmd *cobra.Command, args []string) { + err := RunGet(f, out, cmd, args) + util.CheckErr(err) + }, + ValidArgs: validArgs, +} +``` + +Notice we put the "ValidArgs" on the "get" subcommand. Doing so will give results like + +```bash +# kubectl get [tab][tab] +node pod replicationcontroller service +``` + +### Plural form and shortcuts for nouns + +If your nouns have a number of aliases, you can define them alongside `ValidArgs` using `ArgAliases`: + +```go +argAliases []string = { "pods", "nodes", "services", "svc", "replicationcontrollers", "rc" } + +cmd := &cobra.Command{ + ... + ValidArgs: validArgs, + ArgAliases: argAliases +} +``` + +The aliases are not shown to the user on tab completion, but they are accepted as valid nouns by +the completion algorithm if entered manually, e.g. in: + +```bash +# kubectl get rc [tab][tab] +backend frontend database +``` + +Note that without declaring `rc` as an alias, the completion algorithm would show the list of nouns +in this example again instead of the replication controllers. + +### Dynamic completion of nouns + +In some cases it is not possible to provide a list of possible completions in advance. Instead, the list of completions must be determined at execution-time. Cobra provides two ways of defining such dynamic completion of nouns. Note that both these methods can be used along-side each other as long as they are not both used for the same command. + +**Note**: *Custom Completions written in Go* will automatically work for other shell-completion scripts (e.g., Fish shell), while *Custom Completions written in Bash* will only work for Bash shell-completion. It is therefore recommended to use *Custom Completions written in Go*. + +#### 1. Custom completions of nouns written in Go + +In a similar fashion as for static completions, you can use the `ValidArgsFunction` field to provide a Go function that Cobra will execute when it needs the list of completion choices for the nouns of a command. Note that either `ValidArgs` or `ValidArgsFunction` can be used for a single cobra command, but not both. +Simplified code from `helm status` looks like: + +```go +cmd := &cobra.Command{ + Use: "status RELEASE_NAME", + Short: "Display the status of the named release", + Long: status_long, + RunE: func(cmd *cobra.Command, args []string) { + RunGet(args[0]) + }, + ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + if len(args) != 0 { + return nil, cobra.ShellCompDirectiveNoFileComp + } + return getReleasesFromCluster(toComplete), cobra.ShellCompDirectiveNoFileComp + }, +} +``` +Where `getReleasesFromCluster()` is a Go function that obtains the list of current Helm releases running on the Kubernetes cluster. +Notice we put the `ValidArgsFunction` on the `status` subcommand. Let's assume the Helm releases on the cluster are: `harbor`, `notary`, `rook` and `thanos` then this dynamic completion will give results like + +```bash +# helm status [tab][tab] +harbor notary rook thanos +``` +You may have noticed the use of `cobra.ShellCompDirective`. These directives are bit fields allowing to control some shell completion behaviors for your particular completion. You can combine them with the bit-or operator such as `cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp` +```go +// Indicates an error occurred and completions should be ignored. +ShellCompDirectiveError +// Indicates that the shell should not add a space after the completion, +// even if there is a single completion provided. +ShellCompDirectiveNoSpace +// Indicates that the shell should not provide file completion even when +// no completion is provided. +// This currently does not work for zsh or bash < 4 +ShellCompDirectiveNoFileComp +// Indicates that the shell will perform its default behavior after completions +// have been provided (this implies !ShellCompDirectiveNoSpace && !ShellCompDirectiveNoFileComp). +ShellCompDirectiveDefault +``` + +When using the `ValidArgsFunction`, Cobra will call your registered function after having parsed all flags and arguments provided in the command-line. You therefore don't need to do this parsing yourself. For example, when a user calls `helm status --namespace my-rook-ns [tab][tab]`, Cobra will call your registered `ValidArgsFunction` after having parsed the `--namespace` flag, as it would have done when calling the `RunE` function. + +##### Debugging + +Cobra achieves dynamic completions written in Go through the use of a hidden command called by the completion script. To debug your Go completion code, you can call this hidden command directly: +```bash +# helm __complete status har +harbor +:4 +Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr +``` +***Important:*** If the noun to complete is empty, you must pass an empty parameter to the `__complete` command: +```bash +# helm __complete status "" +harbor +notary +rook +thanos +:4 +Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr +``` +Calling the `__complete` command directly allows you to run the Go debugger to troubleshoot your code. You can also add printouts to your code; Cobra provides the following functions to use for printouts in Go completion code: +```go +// Prints to the completion script debug file (if BASH_COMP_DEBUG_FILE +// is set to a file path) and optionally prints to stderr. +cobra.CompDebug(msg string, printToStdErr bool) { +cobra.CompDebugln(msg string, printToStdErr bool) + +// Prints to the completion script debug file (if BASH_COMP_DEBUG_FILE +// is set to a file path) and to stderr. +cobra.CompError(msg string) +cobra.CompErrorln(msg string) +``` +***Important:*** You should **not** leave traces that print to stdout in your completion code as they will be interpreted as completion choices by the completion script. Instead, use the cobra-provided debugging traces functions mentioned above. + +#### 2. Custom completions of nouns written in Bash + +This method allows you to inject bash functions into the completion script. Those bash functions are responsible for providing the completion choices for your own completions. Some more actual code that works in kubernetes: @@ -111,58 +253,6 @@ Find more information at https://github.com/GoogleCloudPlatform/kubernetes.`, The `BashCompletionFunction` option is really only valid/useful on the root command. Doing the above will cause `__kubectl_custom_func()` (`___custom_func()`) to be called when the built in processor was unable to find a solution. In the case of kubernetes a valid command might look something like `kubectl get pod [mypod]`. If you type `kubectl get pod [tab][tab]` the `__kubectl_customc_func()` will run because the cobra.Command only understood "kubectl" and "get." `__kubectl_custom_func()` will see that the cobra.Command is "kubectl_get" and will thus call another helper `__kubectl_get_resource()`. `__kubectl_get_resource` will look at the 'nouns' collected. In our example the only noun will be `pod`. So it will call `__kubectl_parse_get pod`. `__kubectl_parse_get` will actually call out to kubernetes and get any pods. It will then set `COMPREPLY` to valid pods! -## Have the completions code complete your 'nouns' - -In the above example "pod" was assumed to already be typed. But if you want `kubectl get [tab][tab]` to show a list of valid "nouns" you have to set them. Simplified code from `kubectl get` looks like: - -```go -validArgs []string = { "pod", "node", "service", "replicationcontroller" } - -cmd := &cobra.Command{ - Use: "get [(-o|--output=)json|yaml|template|...] (RESOURCE [NAME] | RESOURCE/NAME ...)", - Short: "Display one or many resources", - Long: get_long, - Example: get_example, - Run: func(cmd *cobra.Command, args []string) { - err := RunGet(f, out, cmd, args) - util.CheckErr(err) - }, - ValidArgs: validArgs, -} -``` - -Notice we put the "ValidArgs" on the "get" subcommand. Doing so will give results like - -```bash -# kubectl get [tab][tab] -node pod replicationcontroller service -``` - -## Plural form and shortcuts for nouns - -If your nouns have a number of aliases, you can define them alongside `ValidArgs` using `ArgAliases`: - -```go -argAliases []string = { "pods", "nodes", "services", "svc", "replicationcontrollers", "rc" } - -cmd := &cobra.Command{ - ... - ValidArgs: validArgs, - ArgAliases: argAliases -} -``` - -The aliases are not shown to the user on tab completion, but they are accepted as valid nouns by -the completion algorithm if entered manually, e.g. in: - -```bash -# kubectl get rc [tab][tab] -backend frontend database -``` - -Note that without declaring `rc` as an alias, the completion algorithm would show the list of nouns -in this example again instead of the replication controllers. - ## Mark flags as required Most of the time completions will only show subcommands. But if a flag is required to make a subcommand work, you probably want it to show up when the user types [tab][tab]. Marking a flag as 'Required' is incredibly easy. @@ -211,8 +301,45 @@ So while there are many other files in the CWD it only shows me subdirs and thos # Specify custom flag completion -Similar to the filename completion and filtering using cobra.BashCompFilenameExt, you can specify -a custom flag completion function with cobra.BashCompCustom: +As for nouns, Cobra provides two ways of defining dynamic completion of flags. Note that both these methods can be used along-side each other as long as they are not both used for the same flag. + +**Note**: *Custom Completions written in Go* will automatically work for other shell-completion scripts (e.g., Fish shell), while *Custom Completions written in Bash* will only work for Bash shell-completion. It is therefore recommended to use *Custom Completions written in Go*. + +## 1. Custom completions of flags written in Go + +To provide a Go function that Cobra will execute when it needs the list of completion choices for a flag, you must register the function in the following manner: + +```go +flagName := "output" +cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { + return []string{"json", "table", "yaml"}, cobra.ShellCompDirectiveDefault +}) +``` +Notice that calling `RegisterFlagCompletionFunc()` is done through the `command` with which the flag is associated. In our example this dynamic completion will give results like so: + +```bash +# helm status --output [tab][tab] +json table yaml +``` + +### Debugging + +You can also easily debug your Go completion code for flags: +```bash +# helm __complete status --output "" +json +table +yaml +:4 +Completion ended with directive: ShellCompDirectiveNoFileComp # This is on stderr +``` +***Important:*** You should **not** leave traces that print to stdout in your completion code as they will be interpreted as completion choices by the completion script. Instead, use the cobra-provided debugging traces functions mentioned in the above section. + +## 2. Custom completions of flags written in Bash + +Alternatively, you can use bash code for flag custom completion. Similar to the filename +completion and filtering using `cobra.BashCompFilenameExt`, you can specify +a custom flag completion bash function with `cobra.BashCompCustom`: ```go annotation := make(map[string][]string) @@ -226,7 +353,7 @@ a custom flag completion function with cobra.BashCompCustom: cmd.Flags().AddFlag(flag) ``` -In addition add the `__handle_namespace_flag` implementation in the `BashCompletionFunction` +In addition add the `__kubectl_get_namespaces` implementation in the `BashCompletionFunction` value, e.g.: ```bash diff --git a/vendor/github.com/spf13/cobra/command.go b/vendor/github.com/spf13/cobra/command.go index fb60ebd9..88e6ed77 100644 --- a/vendor/github.com/spf13/cobra/command.go +++ b/vendor/github.com/spf13/cobra/command.go @@ -18,7 +18,6 @@ package cobra import ( "bytes" "context" - "errors" "fmt" "io" "os" @@ -29,8 +28,6 @@ import ( flag "github.com/spf13/pflag" ) -var ErrSubCommandRequired = errors.New("subcommand is required") - // FParseErrWhitelist configures Flag parse errors to be ignored type FParseErrWhitelist flag.ParseErrorsWhitelist @@ -60,6 +57,10 @@ type Command struct { // ValidArgs is list of all valid non-flag arguments that are accepted in bash completions ValidArgs []string + // ValidArgsFunction is an optional function that provides valid non-flag arguments for bash completion. + // It is a dynamic version of using ValidArgs. + // Only one of ValidArgs and ValidArgsFunction can be used for a command. + ValidArgsFunction func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) // Expected arguments Args PositionalArgs @@ -84,7 +85,8 @@ type Command struct { // Version defines the version for this command. If this value is non-empty and the command does not // define a "version" flag, a "version" boolean flag will be added to the command and, if specified, - // will print content of the "Version" variable. + // will print content of the "Version" variable. A shorthand "v" flag will also be added if the + // command does not define one. Version string // The *Run functions are executed in the following order: @@ -309,7 +311,7 @@ func (c *Command) ErrOrStderr() io.Writer { return c.getErr(os.Stderr) } -// InOrStdin returns output to stderr +// InOrStdin returns input to stdin func (c *Command) InOrStdin() io.Reader { return c.getIn(os.Stdin) } @@ -800,7 +802,7 @@ func (c *Command) execute(a []string) (err error) { } if !c.Runnable() { - return ErrSubCommandRequired + return flag.ErrHelp } c.preRun() @@ -913,6 +915,9 @@ func (c *Command) ExecuteC() (cmd *Command, err error) { args = os.Args[1:] } + // initialize the hidden command to be used for bash completion + c.initCompleteCmd(args) + var flags []string if c.TraverseChildren { cmd, flags, err = c.Traverse(args) @@ -951,14 +956,6 @@ func (c *Command) ExecuteC() (cmd *Command, err error) { return cmd, nil } - // If command wasn't runnable, show full help, but do return the error. - // This will result in apps by default returning a non-success exit code, but also gives them the option to - // handle specially. - if err == ErrSubCommandRequired { - cmd.HelpFunc()(cmd, args) - return cmd, err - } - // If root command has SilentErrors flagged, // all subcommands should respect it if !cmd.SilenceErrors && !c.SilenceErrors { @@ -1033,7 +1030,11 @@ func (c *Command) InitDefaultVersionFlag() { } else { usage += c.Name() } - c.Flags().Bool("version", false, usage) + if c.Flags().ShorthandLookup("v") == nil { + c.Flags().BoolP("version", "v", false, usage) + } else { + c.Flags().Bool("version", false, usage) + } } } diff --git a/vendor/github.com/spf13/cobra/custom_completions.go b/vendor/github.com/spf13/cobra/custom_completions.go new file mode 100644 index 00000000..ba57327c --- /dev/null +++ b/vendor/github.com/spf13/cobra/custom_completions.go @@ -0,0 +1,384 @@ +package cobra + +import ( + "errors" + "fmt" + "os" + "strings" + + "github.com/spf13/pflag" +) + +const ( + // ShellCompRequestCmd is the name of the hidden command that is used to request + // completion results from the program. It is used by the shell completion scripts. + ShellCompRequestCmd = "__complete" + // ShellCompNoDescRequestCmd is the name of the hidden command that is used to request + // completion results without their description. It is used by the shell completion scripts. + ShellCompNoDescRequestCmd = "__completeNoDesc" +) + +// Global map of flag completion functions. +var flagCompletionFunctions = map[*pflag.Flag]func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective){} + +// ShellCompDirective is a bit map representing the different behaviors the shell +// can be instructed to have once completions have been provided. +type ShellCompDirective int + +const ( + // ShellCompDirectiveError indicates an error occurred and completions should be ignored. + ShellCompDirectiveError ShellCompDirective = 1 << iota + + // ShellCompDirectiveNoSpace indicates that the shell should not add a space + // after the completion even if there is a single completion provided. + ShellCompDirectiveNoSpace + + // ShellCompDirectiveNoFileComp indicates that the shell should not provide + // file completion even when no completion is provided. + // This currently does not work for zsh or bash < 4 + ShellCompDirectiveNoFileComp + + // ShellCompDirectiveDefault indicates to let the shell perform its default + // behavior after completions have been provided. + ShellCompDirectiveDefault ShellCompDirective = 0 +) + +// RegisterFlagCompletionFunc should be called to register a function to provide completion for a flag. +func (c *Command) RegisterFlagCompletionFunc(flagName string, f func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective)) error { + flag := c.Flag(flagName) + if flag == nil { + return fmt.Errorf("RegisterFlagCompletionFunc: flag '%s' does not exist", flagName) + } + if _, exists := flagCompletionFunctions[flag]; exists { + return fmt.Errorf("RegisterFlagCompletionFunc: flag '%s' already registered", flagName) + } + flagCompletionFunctions[flag] = f + return nil +} + +// Returns a string listing the different directive enabled in the specified parameter +func (d ShellCompDirective) string() string { + var directives []string + if d&ShellCompDirectiveError != 0 { + directives = append(directives, "ShellCompDirectiveError") + } + if d&ShellCompDirectiveNoSpace != 0 { + directives = append(directives, "ShellCompDirectiveNoSpace") + } + if d&ShellCompDirectiveNoFileComp != 0 { + directives = append(directives, "ShellCompDirectiveNoFileComp") + } + if len(directives) == 0 { + directives = append(directives, "ShellCompDirectiveDefault") + } + + if d > ShellCompDirectiveError+ShellCompDirectiveNoSpace+ShellCompDirectiveNoFileComp { + return fmt.Sprintf("ERROR: unexpected ShellCompDirective value: %d", d) + } + return strings.Join(directives, ", ") +} + +// Adds a special hidden command that can be used to request custom completions. +func (c *Command) initCompleteCmd(args []string) { + completeCmd := &Command{ + Use: fmt.Sprintf("%s [command-line]", ShellCompRequestCmd), + Aliases: []string{ShellCompNoDescRequestCmd}, + DisableFlagsInUseLine: true, + Hidden: true, + DisableFlagParsing: true, + Args: MinimumNArgs(1), + Short: "Request shell completion choices for the specified command-line", + Long: fmt.Sprintf("%[2]s is a special command that is used by the shell completion logic\n%[1]s", + "to request completion choices for the specified command-line.", ShellCompRequestCmd), + Run: func(cmd *Command, args []string) { + finalCmd, completions, directive, err := cmd.getCompletions(args) + if err != nil { + CompErrorln(err.Error()) + // Keep going for multiple reasons: + // 1- There could be some valid completions even though there was an error + // 2- Even without completions, we need to print the directive + } + + noDescriptions := (cmd.CalledAs() == ShellCompNoDescRequestCmd) + for _, comp := range completions { + if noDescriptions { + // Remove any description that may be included following a tab character. + comp = strings.Split(comp, "\t")[0] + } + // Print each possible completion to stdout for the completion script to consume. + fmt.Fprintln(finalCmd.OutOrStdout(), comp) + } + + if directive > ShellCompDirectiveError+ShellCompDirectiveNoSpace+ShellCompDirectiveNoFileComp { + directive = ShellCompDirectiveDefault + } + + // As the last printout, print the completion directive for the completion script to parse. + // The directive integer must be that last character following a single colon (:). + // The completion script expects : + fmt.Fprintf(finalCmd.OutOrStdout(), ":%d\n", directive) + + // Print some helpful info to stderr for the user to understand. + // Output from stderr must be ignored by the completion script. + fmt.Fprintf(finalCmd.ErrOrStderr(), "Completion ended with directive: %s\n", directive.string()) + }, + } + c.AddCommand(completeCmd) + subCmd, _, err := c.Find(args) + if err != nil || subCmd.Name() != ShellCompRequestCmd { + // Only create this special command if it is actually being called. + // This reduces possible side-effects of creating such a command; + // for example, having this command would cause problems to a + // cobra program that only consists of the root command, since this + // command would cause the root command to suddenly have a subcommand. + c.RemoveCommand(completeCmd) + } +} + +func (c *Command) getCompletions(args []string) (*Command, []string, ShellCompDirective, error) { + var completions []string + + // The last argument, which is not completely typed by the user, + // should not be part of the list of arguments + toComplete := args[len(args)-1] + trimmedArgs := args[:len(args)-1] + + // Find the real command for which completion must be performed + finalCmd, finalArgs, err := c.Root().Find(trimmedArgs) + if err != nil { + // Unable to find the real command. E.g., someInvalidCmd + return c, completions, ShellCompDirectiveDefault, fmt.Errorf("Unable to find a command for arguments: %v", trimmedArgs) + } + + // 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 to be complete + if len(toComplete) > 0 && toComplete[0] == '-' && !strings.Contains(toComplete, "=") { + // We are completing a flag name + finalCmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) { + completions = append(completions, getFlagNameCompletions(flag, toComplete)...) + }) + finalCmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) { + completions = append(completions, getFlagNameCompletions(flag, toComplete)...) + }) + + directive := ShellCompDirectiveDefault + if len(completions) > 0 { + if strings.HasSuffix(completions[0], "=") { + directive = ShellCompDirectiveNoSpace + } + } + return finalCmd, completions, directive, nil + } + + var flag *pflag.Flag + if !finalCmd.DisableFlagParsing { + // We only do flag completion if we are allowed to parse flags + // This is important for commands which have requested to do their own flag completion. + flag, finalArgs, toComplete, err = checkIfFlagCompletion(finalCmd, finalArgs, toComplete) + if err != nil { + // Error while attempting to parse flags + return finalCmd, completions, ShellCompDirectiveDefault, err + } + } + + if flag == nil { + // Complete subcommand names + for _, subCmd := range finalCmd.Commands() { + if subCmd.IsAvailableCommand() && strings.HasPrefix(subCmd.Name(), toComplete) { + completions = append(completions, fmt.Sprintf("%s\t%s", subCmd.Name(), subCmd.Short)) + } + } + + if len(finalCmd.ValidArgs) > 0 { + // Always complete ValidArgs, even if we are completing a subcommand name. + // This is for commands that have both subcommands and ValidArgs. + for _, validArg := range finalCmd.ValidArgs { + if strings.HasPrefix(validArg, toComplete) { + completions = append(completions, validArg) + } + } + + // 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, ShellCompDirectiveNoFileComp, nil + } + + // Always 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. + } + + // Parse the flags and extract the arguments to prepare for calling the completion function + if err = finalCmd.ParseFlags(finalArgs); err != nil { + return finalCmd, completions, ShellCompDirectiveDefault, fmt.Errorf("Error while parsing flags from args %v: %s", finalArgs, err.Error()) + } + + // 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() + } + + // Find the completion function for the flag or command + var completionFn func(cmd *Command, args []string, toComplete string) ([]string, ShellCompDirective) + if flag != nil { + completionFn = flagCompletionFunctions[flag] + } else { + completionFn = finalCmd.ValidArgsFunction + } + if completionFn == nil { + // Go custom completion not supported/needed for this flag or command + return finalCmd, completions, ShellCompDirectiveDefault, nil + } + + // Call the registered completion function to get the completions + comps, directive := completionFn(finalCmd, finalArgs, toComplete) + completions = append(completions, comps...) + return finalCmd, completions, directive, nil +} + +func getFlagNameCompletions(flag *pflag.Flag, toComplete string) []string { + if nonCompletableFlag(flag) { + return []string{} + } + + var completions []string + flagName := "--" + flag.Name + if strings.HasPrefix(flagName, toComplete) { + // Flag without the = + completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage)) + + if len(flag.NoOptDefVal) == 0 { + // Flag requires a value, so it can be suffixed with = + flagName += "=" + completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage)) + } + } + + flagName = "-" + flag.Shorthand + if len(flag.Shorthand) > 0 && strings.HasPrefix(flagName, toComplete) { + completions = append(completions, fmt.Sprintf("%s\t%s", flagName, flag.Usage)) + } + + return completions +} + +func checkIfFlagCompletion(finalCmd *Command, args []string, lastArg string) (*pflag.Flag, []string, string, error) { + var flagName string + trimmedArgs := args + flagWithEqual := false + if isFlagArg(lastArg) { + if index := strings.Index(lastArg, "="); index >= 0 { + flagName = strings.TrimLeft(lastArg[:index], "-") + lastArg = lastArg[index+1:] + flagWithEqual = true + } else { + return nil, nil, "", errors.New("Unexpected completion request for flag") + } + } + + if len(flagName) == 0 { + if len(args) > 0 { + prevArg := args[len(args)-1] + if isFlagArg(prevArg) { + // Only consider the case where the flag does not contain an =. + // If the flag contains an = it means it has already been fully processed, + // so we don't need to deal with it here. + if index := strings.Index(prevArg, "="); index < 0 { + flagName = strings.TrimLeft(prevArg, "-") + + // Remove the uncompleted flag or else there could be an error created + // for an invalid value for that flag + trimmedArgs = args[:len(args)-1] + } + } + } + } + + if len(flagName) == 0 { + // Not doing flag completion + return nil, trimmedArgs, lastArg, nil + } + + flag := findFlag(finalCmd, flagName) + if flag == nil { + // Flag not supported by this command, nothing to complete + err := fmt.Errorf("Subcommand '%s' does not support flag '%s'", finalCmd.Name(), flagName) + return nil, nil, "", err + } + + if !flagWithEqual { + if len(flag.NoOptDefVal) != 0 { + // We had assumed dealing with a two-word flag but the flag is a boolean flag. + // In that case, there is no value following it, so we are not really doing flag completion. + // Reset everything to do noun completion. + trimmedArgs = args + flag = nil + } + } + + return flag, trimmedArgs, lastArg, nil +} + +func findFlag(cmd *Command, name string) *pflag.Flag { + flagSet := cmd.Flags() + if len(name) == 1 { + // First convert the short flag into a long flag + // as the cmd.Flag() search only accepts long flags + if short := flagSet.ShorthandLookup(name); short != nil { + name = short.Name + } else { + set := cmd.InheritedFlags() + if short = set.ShorthandLookup(name); short != nil { + name = short.Name + } else { + return nil + } + } + } + return cmd.Flag(name) +} + +// CompDebug prints the specified string to the same file as where the +// completion script prints its logs. +// Note that completion printouts should never be on stdout as they would +// be wrongly interpreted as actual completion choices by the completion script. +func CompDebug(msg string, printToStdErr bool) { + msg = fmt.Sprintf("[Debug] %s", msg) + + // Such logs are only printed when the user has set the environment + // variable BASH_COMP_DEBUG_FILE to the path of some file to be used. + if path := os.Getenv("BASH_COMP_DEBUG_FILE"); path != "" { + f, err := os.OpenFile(path, + os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + if err == nil { + defer f.Close() + f.WriteString(msg) + } + } + + if printToStdErr { + // Must print to stderr for this not to be read by the completion script. + fmt.Fprintf(os.Stderr, msg) + } +} + +// CompDebugln prints the specified string with a newline at the end +// to the same file as where the completion script prints its logs. +// Such logs are only printed when the user has set the environment +// variable BASH_COMP_DEBUG_FILE to the path of some file to be used. +func CompDebugln(msg string, printToStdErr bool) { + CompDebug(fmt.Sprintf("%s\n", msg), printToStdErr) +} + +// CompError prints the specified completion message to stderr. +func CompError(msg string) { + msg = fmt.Sprintf("[Error] %s", msg) + CompDebug(msg, true) +} + +// CompErrorln prints the specified completion message to stderr with a newline at the end. +func CompErrorln(msg string) { + CompError(fmt.Sprintf("%s\n", msg)) +} diff --git a/vendor/github.com/spf13/cobra/fish_completions.go b/vendor/github.com/spf13/cobra/fish_completions.go new file mode 100644 index 00000000..c83609c8 --- /dev/null +++ b/vendor/github.com/spf13/cobra/fish_completions.go @@ -0,0 +1,172 @@ +package cobra + +import ( + "bytes" + "fmt" + "io" + "os" +) + +func genFishComp(buf *bytes.Buffer, name string, includeDesc bool) { + compCmd := ShellCompRequestCmd + if !includeDesc { + compCmd = ShellCompNoDescRequestCmd + } + buf.WriteString(fmt.Sprintf("# fish completion for %-36s -*- shell-script -*-\n", name)) + buf.WriteString(fmt.Sprintf(` +function __%[1]s_debug + set file "$BASH_COMP_DEBUG_FILE" + if test -n "$file" + echo "$argv" >> $file + end +end + +function __%[1]s_perform_completion + __%[1]s_debug "Starting __%[1]s_perform_completion with: $argv" + + set args (string split -- " " "$argv") + set lastArg "$args[-1]" + + __%[1]s_debug "args: $args" + __%[1]s_debug "last arg: $lastArg" + + set emptyArg "" + if test -z "$lastArg" + __%[1]s_debug "Setting emptyArg" + set emptyArg \"\" + end + __%[1]s_debug "emptyArg: $emptyArg" + + set requestComp "$args[1] %[2]s $args[2..-1] $emptyArg" + __%[1]s_debug "Calling $requestComp" + + set results (eval $requestComp 2> /dev/null) + set comps $results[1..-2] + set directiveLine $results[-1] + + # For Fish, when completing a flag with an = (e.g., -n=) + # completions must be prefixed with the flag + set flagPrefix (string match -r -- '-.*=' "$lastArg") + + __%[1]s_debug "Comps: $comps" + __%[1]s_debug "DirectiveLine: $directiveLine" + __%[1]s_debug "flagPrefix: $flagPrefix" + + for comp in $comps + printf "%%s%%s\n" "$flagPrefix" "$comp" + end + + printf "%%s\n" "$directiveLine" +end + +# This function does three things: +# 1- Obtain the completions and store them in the global __%[1]s_comp_results +# 2- Set the __%[1]s_comp_do_file_comp flag if file completion should be performed +# and unset it otherwise +# 3- Return true if the completion results are not empty +function __%[1]s_prepare_completions + # Start fresh + set --erase __%[1]s_comp_do_file_comp + set --erase __%[1]s_comp_results + + # Check if the command-line is already provided. This is useful for testing. + if not set --query __%[1]s_comp_commandLine + set __%[1]s_comp_commandLine (commandline) + end + __%[1]s_debug "commandLine is: $__%[1]s_comp_commandLine" + + set results (__%[1]s_perform_completion "$__%[1]s_comp_commandLine") + set --erase __%[1]s_comp_commandLine + __%[1]s_debug "Completion results: $results" + + if test -z "$results" + __%[1]s_debug "No completion, probably due to a failure" + # Might as well do file completion, in case it helps + set --global __%[1]s_comp_do_file_comp 1 + return 0 + end + + set directive (string sub --start 2 $results[-1]) + set --global __%[1]s_comp_results $results[1..-2] + + __%[1]s_debug "Completions are: $__%[1]s_comp_results" + __%[1]s_debug "Directive is: $directive" + + if test -z "$directive" + set directive 0 + end + + set compErr (math (math --scale 0 $directive / %[3]d) %% 2) + if test $compErr -eq 1 + __%[1]s_debug "Received error directive: aborting." + # Might as well do file completion, in case it helps + set --global __%[1]s_comp_do_file_comp 1 + return 0 + end + + set nospace (math (math --scale 0 $directive / %[4]d) %% 2) + set nofiles (math (math --scale 0 $directive / %[5]d) %% 2) + + __%[1]s_debug "nospace: $nospace, nofiles: $nofiles" + + # Important not to quote the variable for count to work + set numComps (count $__%[1]s_comp_results) + __%[1]s_debug "numComps: $numComps" + + if test $numComps -eq 1; and test $nospace -ne 0 + # To support the "nospace" directive we trick the shell + # by outputting an extra, longer completion. + __%[1]s_debug "Adding second completion to perform nospace directive" + set --append __%[1]s_comp_results $__%[1]s_comp_results[1]. + end + + if test $numComps -eq 0; and test $nofiles -eq 0 + __%[1]s_debug "Requesting file completion" + set --global __%[1]s_comp_do_file_comp 1 + end + + # If we don't want file completion, we must return true even if there + # are no completions found. This is because fish will perform the last + # completion command, even if its condition is false, if no other + # completion command was triggered + return (not set --query __%[1]s_comp_do_file_comp) +end + +# Remove any pre-existing completions for the program since we will be handling all of them +# TODO this cleanup is not sufficient. Fish completions are only loaded once the user triggers +# them, so the below deletion will not work as it is run too early. What else can we do? +complete -c %[1]s -e + +# The order in which the below two lines are defined is very important so that __%[1]s_prepare_completions +# is called first. It is __%[1]s_prepare_completions that sets up the __%[1]s_comp_do_file_comp variable. +# +# This completion will be run second as complete commands are added FILO. +# It triggers file completion choices when __%[1]s_comp_do_file_comp is set. +complete -c %[1]s -n 'set --query __%[1]s_comp_do_file_comp' + +# This completion will be run first as complete commands are added FILO. +# The call to __%[1]s_prepare_completions will setup both __%[1]s_comp_results abd __%[1]s_comp_do_file_comp. +# It provides the program's completion choices. +complete -c %[1]s -n '__%[1]s_prepare_completions' -f -a '$__%[1]s_comp_results' + +`, name, compCmd, ShellCompDirectiveError, ShellCompDirectiveNoSpace, ShellCompDirectiveNoFileComp)) +} + +// GenFishCompletion generates fish completion file and writes to the passed writer. +func (c *Command) GenFishCompletion(w io.Writer, includeDesc bool) error { + buf := new(bytes.Buffer) + genFishComp(buf, c.Name(), includeDesc) + _, err := buf.WriteTo(w) + return err +} + +// GenFishCompletionFile generates fish completion file. +func (c *Command) GenFishCompletionFile(filename string, includeDesc bool) error { + outFile, err := os.Create(filename) + if err != nil { + return err + } + defer outFile.Close() + + return c.GenFishCompletion(outFile, includeDesc) +} diff --git a/vendor/github.com/spf13/cobra/fish_completions.md b/vendor/github.com/spf13/cobra/fish_completions.md new file mode 100644 index 00000000..6bfe5f88 --- /dev/null +++ b/vendor/github.com/spf13/cobra/fish_completions.md @@ -0,0 +1,7 @@ +## Generating Fish Completions for your own cobra.Command + +Cobra supports native Fish completions generated from the root `cobra.Command`. You can use the `command.GenFishCompletion()` or `command.GenFishCompletionFile()` functions. You must provide these functions with a parameter indicating if the completions should be annotated with a description; Cobra will provide the description automatically based on usage information. You can choose to make this option configurable by your users. + +### Limitations + +* Custom completions implemented using the `ValidArgsFunction` and `RegisterFlagCompletionFunc()` are supported automatically but the ones implemented in Bash scripting are not. diff --git a/vendor/go.uber.org/atomic/CHANGELOG.md b/vendor/go.uber.org/atomic/CHANGELOG.md index 6db846f1..aef8b6eb 100644 --- a/vendor/go.uber.org/atomic/CHANGELOG.md +++ b/vendor/go.uber.org/atomic/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.6.0] - 2020-02-24 +### Changed +- Drop library dependency on `golang.org/x/{lint, tools}`. + ## [1.5.1] - 2019-11-19 - Fix bug where `Bool.CAS` and `Bool.Toggle` do work correctly together causing `CAS` to fail even though the old value matches. @@ -48,6 +52,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Initial release. +[1.6.0]: https://github.com/uber-go/atomic/compare/v1.5.1...v1.6.0 [1.5.1]: https://github.com/uber-go/atomic/compare/v1.5.0...v1.5.1 [1.5.0]: https://github.com/uber-go/atomic/compare/v1.4.0...v1.5.0 [1.4.0]: https://github.com/uber-go/atomic/compare/v1.3.2...v1.4.0 diff --git a/vendor/go.uber.org/atomic/tools.go b/vendor/go.uber.org/atomic/tools.go deleted file mode 100644 index 654f5b2f..00000000 --- a/vendor/go.uber.org/atomic/tools.go +++ /dev/null @@ -1,28 +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. - -// +build tools - -package atomic - -import ( - // Tools used during development. - _ "golang.org/x/lint/golint" -) diff --git a/vendor/go.uber.org/multierr/CHANGELOG.md b/vendor/go.uber.org/multierr/CHANGELOG.md index abb355a0..3110c5af 100644 --- a/vendor/go.uber.org/multierr/CHANGELOG.md +++ b/vendor/go.uber.org/multierr/CHANGELOG.md @@ -1,6 +1,12 @@ Releases ======== +v1.5.0 (2020-02-24) +=================== + +- Drop library dependency on development-time tooling. + + v1.4.0 (2019-11-04) =================== diff --git a/vendor/go.uber.org/multierr/error.go b/vendor/go.uber.org/multierr/error.go index 0ee6fe8b..04eb9618 100644 --- a/vendor/go.uber.org/multierr/error.go +++ b/vendor/go.uber.org/multierr/error.go @@ -130,7 +130,7 @@ type errorGroup interface { } // Errors returns a slice containing zero or more errors that the supplied -// error is composed of. If the error is nil, the returned slice is empty. +// error is composed of. If the error is nil, a nil slice is returned. // // err := multierr.Append(r.Close(), w.Close()) // errors := multierr.Errors(err) diff --git a/vendor/go.uber.org/multierr/go.mod b/vendor/go.uber.org/multierr/go.mod index 5463fac7..58d5f90b 100644 --- a/vendor/go.uber.org/multierr/go.mod +++ b/vendor/go.uber.org/multierr/go.mod @@ -4,7 +4,7 @@ go 1.12 require ( github.com/stretchr/testify v1.3.0 - go.uber.org/atomic v1.5.0 + go.uber.org/atomic v1.6.0 go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee golang.org/x/lint v0.0.0-20190930215403-16217165b5de golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 // indirect diff --git a/vendor/go.uber.org/multierr/go.sum b/vendor/go.uber.org/multierr/go.sum index b460913d..557fbba2 100644 --- a/vendor/go.uber.org/multierr/go.sum +++ b/vendor/go.uber.org/multierr/go.sum @@ -15,8 +15,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR 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.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= diff --git a/vendor/go.uber.org/multierr/tools.go b/vendor/go.uber.org/multierr/tools.go deleted file mode 100644 index df93f072..00000000 --- a/vendor/go.uber.org/multierr/tools.go +++ /dev/null @@ -1,30 +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. - -// +build tools - -package multierr - -import ( - // Tools we use during development. - _ "go.uber.org/tools/update-license" - _ "golang.org/x/lint/golint" - _ "honnef.co/go/tools/cmd/staticcheck" -) diff --git a/vendor/go.uber.org/tools/update-license/.gitignore b/vendor/go.uber.org/tools/update-license/.gitignore deleted file mode 100644 index b167772c..00000000 --- a/vendor/go.uber.org/tools/update-license/.gitignore +++ /dev/null @@ -1 +0,0 @@ -update-license diff --git a/vendor/go.uber.org/tools/update-license/README.md b/vendor/go.uber.org/tools/update-license/README.md deleted file mode 100644 index 5887df1d..00000000 --- a/vendor/go.uber.org/tools/update-license/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# update-license - -This is a small tool that updates the license header for Uber's open source Golang files. - -## Installation - -``` -go get go.uber.org/tools/update-license -``` - -## Usage - -``` -update-license go_files... -``` - -## Further Work - -* Support more licenses by name (MIT, Apache 2.0, etc), file path, url (http GET) -* Support custom owner (not just "Uber Technologies, Inc.") -* Support more languages than go (cover go, java, js, py to start, along with LICENSE, LICENSE.txt) -* Talk about removing custom logic for header comments (ie `@generated`, `Code generated by`), it probably makes more sense just to put the license at the top -* Better detection support for existing licenses so they can be removed -* Verbose, dry run support diff --git a/vendor/go.uber.org/tools/update-license/licenses.go b/vendor/go.uber.org/tools/update-license/licenses.go deleted file mode 100644 index 76957c21..00000000 --- a/vendor/go.uber.org/tools/update-license/licenses.go +++ /dev/null @@ -1,56 +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. - -package main - -var licenseTemplates = map[string]string{ - "Apache-2.0": `// Copyright {{.Year}} {{.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.`, - "MIT": `// Copyright (c) {{.Year}} {{.Owner}} -// -// 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.`, -} diff --git a/vendor/go.uber.org/tools/update-license/main.go b/vendor/go.uber.org/tools/update-license/main.go deleted file mode 100644 index 269fd9b4..00000000 --- a/vendor/go.uber.org/tools/update-license/main.go +++ /dev/null @@ -1,228 +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. - -package main - -import ( - "bytes" - "flag" - "fmt" - "html/template" - "io/ioutil" - "log" - "os" - "path/filepath" - "sort" - "strings" - "time" -) - -const ( - // how many lines to check for an existing copyright - // this logic is not great and we should probably do something else - // but this was copied from the python script - copyrightLineLimit = 5 - headerPrefix = "// Copyright" -) - -var ( - flagDryRun = flag.Bool("dry", false, "Do not edit files and just print out what files would be edited") - flagOwner = flag.String("owner", "Uber Technologies, Inc.", "Copyright owner") - flagLicense = flag.String( - "license", - "MIT", - fmt.Sprintf( - "Type of license to use [%s]", - strings.Join(validLicenses(), ", "), - ), - ) - - lineSkipPrefixes = []string{ - "// Code generated by", - "// @generated", - } -) - -func main() { - log.SetFlags(0) - log.SetOutput(os.Stdout) - log.SetPrefix("") - if err := do(); err != nil { - log.Fatal(err) - } -} - -func do() error { - flag.Parse() - - if len(flag.Args()) < 1 { - return fmt.Errorf("usage: %s GO_FILES", os.Args[0]) - } - - return updateFiles( - flag.Args(), - time.Now().UTC().Year(), - *flagLicense, - *flagOwner, - *flagDryRun, - ) -} - -func fullLicense(ts string, year int, owner string) string { - var buf bytes.Buffer - t, err := template.New("").Parse(ts) - if err != nil { - log.Panic("failed to parse license template", err) - } - - data := struct { - Year int - Owner string - }{year, owner} - if err := t.Execute(&buf, data); err != nil { - log.Panic("failed to execture license template", err) - } - - return strings.TrimSpace(buf.String()) -} - -// validLicenses grabs all the license templates from the folder -func validLicenses() []string { - res := make([]string, 0, len(licenseTemplates)) - - for k := range licenseTemplates { - res = append(res, k) - } - - sort.Strings(res) - return res -} - -func updateFiles( - filePaths []string, - year int, - license string, - owner string, - dryRun bool, -) error { - if err := checkFilePaths(filePaths); err != nil { - return err - } - for _, filePath := range filePaths { - if err := updateFile(filePath, year, license, owner, dryRun); err != nil { - return err - } - } - return nil -} - -func checkFilePaths(filePaths []string) error { - for _, filePath := range filePaths { - if filepath.Ext(filePath) != ".go" { - return fmt.Errorf("%s is not a go file", filePath) - } - } - return nil -} - -func updateFile( - filePath string, - year int, - license string, - owner string, - dryRun bool, -) error { - data, err := ioutil.ReadFile(filePath) - if err != nil { - return err - } - newData := updateData(data, year, license, owner) - if !bytes.Equal(data, newData) { - if dryRun { - log.Print(filePath) - return nil - } - // we could do something more complicated so that we do not - // need to pass 0644 as the file mode, but in this case it should - // never actually be used to create a file since we know the file - // already exists, and it's easier to use the ReadFile/WriteFile - // logic as it is right now, and since this is just a generation - // program, this should be acceptable - return ioutil.WriteFile(filePath, newData, 0644) - } - return nil -} - -func updateData( - data []byte, - year int, - license string, - owner string, -) []byte { - licenseText := fullLicense(string(licenseTemplates[license]), year, owner) - - return []byte( - strings.Join( - updateLines(strings.Split(string(data), "\n"), licenseText), - "\n", - ), - ) -} - -// a value in the returned slice may contain newlines itself -func updateLines(lines []string, license string) []string { - for i, line := range lines { - if i >= copyrightLineLimit { - break - } - if strings.HasPrefix(line, headerPrefix) { - // assume that the new license text always starts with the copyright - // string. Pretty safe to assume, right? RIGHT? - lines[i] = strings.Split(license, "\n")[0] - return lines - } - } - return addToLines(lines, license) -} - -// a value in the returned slice may contain newlines itself -func addToLines(lines []string, license string) []string { - i := 0 - for len(lines) > i && lineContainsSkipPrefix(lines[i]) { - i++ - // skip comments under the generated line too - for strings.HasPrefix(lines[i], "//") { - i++ - } - } - if i == 0 { - return append([]string{license, ""}, lines...) - } - return append(lines[0:i], append([]string{"", license}, lines[i:]...)...) -} - -func lineContainsSkipPrefix(line string) bool { - for _, skipPrefix := range lineSkipPrefixes { - if strings.HasPrefix(line, skipPrefix) { - return true - } - } - return false -} diff --git a/vendor/go.uber.org/zap/.travis.yml b/vendor/go.uber.org/zap/.travis.yml index 647b4ee4..cfdc69f4 100644 --- a/vendor/go.uber.org/zap/.travis.yml +++ b/vendor/go.uber.org/zap/.travis.yml @@ -9,8 +9,8 @@ env: matrix: include: - - go: 1.12.x - go: 1.13.x + - go: 1.14.x env: LINT=1 script: diff --git a/vendor/go.uber.org/zap/CHANGELOG.md b/vendor/go.uber.org/zap/CHANGELOG.md index bebdb748..aeff90e4 100644 --- a/vendor/go.uber.org/zap/CHANGELOG.md +++ b/vendor/go.uber.org/zap/CHANGELOG.md @@ -1,5 +1,43 @@ # Changelog +## 1.15.0 (23 Apr 2020) + +Bugfixes: +* [#804][]: Fix handling of `Time` values out of `UnixNano` range. +* [#812][]: Fix `IncreaseLevel` being reset after a call to `With`. + +Enhancements: +* [#806][]: Add `WithCaller` option to supersede the `AddCaller` option. This + allows disabling annotation of log entries with caller information if + previously enabled with `AddCaller`. +* [#813][]: Deprecate `NewSampler` constructor in favor of + `NewSamplerWithOptions` which supports a `SamplerHook` option. This option + adds support for monitoring sampling decisions through a hook. + +Thanks to @danielbprice for their contributions to this release. + +## 1.14.1 (14 Mar 2020) + +Bugfixes: +* [#791][]: Fix panic on attempting to build a logger with an invalid Config. +* [#795][]: Vendoring Zap with `go mod vendor` no longer includes Zap's + development-time dependencies. +* [#799][]: Fix issue introduced in 1.14.0 that caused invalid JSON output to + be generated for arrays of `time.Time` objects when using string-based time + formats. + +Thanks to @YashishDua for their contributions to this release. + +## 1.14.0 (20 Feb 2020) + +Enhancements: +* [#771][]: Optimize calls for disabled log levels. +* [#773][]: Add millisecond duration encoder. +* [#775][]: Add option to increase the level of a logger. +* [#786][]: Optimize time formatters using `Time.AppendFormat` where possible. + +Thanks to @caibirdme for their contributions to this release. + ## 1.13.0 (13 Nov 2019) Enhancements: @@ -350,3 +388,14 @@ upgrade to the upcoming stable release. [#736]: https://github.com/uber-go/zap/pull/736 [#751]: https://github.com/uber-go/zap/pull/751 [#758]: https://github.com/uber-go/zap/pull/758 +[#771]: https://github.com/uber-go/zap/pull/771 +[#773]: https://github.com/uber-go/zap/pull/773 +[#775]: https://github.com/uber-go/zap/pull/775 +[#786]: https://github.com/uber-go/zap/pull/786 +[#791]: https://github.com/uber-go/zap/pull/791 +[#795]: https://github.com/uber-go/zap/pull/795 +[#799]: https://github.com/uber-go/zap/pull/799 +[#804]: https://github.com/uber-go/zap/pull/804 +[#812]: https://github.com/uber-go/zap/pull/812 +[#806]: https://github.com/uber-go/zap/pull/806 +[#813]: https://github.com/uber-go/zap/pull/813 diff --git a/vendor/go.uber.org/zap/Makefile b/vendor/go.uber.org/zap/Makefile index 21e436c4..dfaf6406 100644 --- a/vendor/go.uber.org/zap/Makefile +++ b/vendor/go.uber.org/zap/Makefile @@ -1,6 +1,7 @@ export GOBIN ?= $(shell pwd)/bin GOLINT = $(GOBIN)/golint +STATICCHECK = $(GOBIN)/staticcheck BENCH_FLAGS ?= -cpuprofile=cpu.pprof -memprofile=mem.pprof -benchmem # Directories containing independent Go modules. @@ -17,7 +18,7 @@ GO_FILES := $(shell \ all: lint test .PHONY: lint -lint: $(GOLINT) +lint: $(GOLINT) $(STATICCHECK) @rm -rf lint.log @echo "Checking formatting..." @gofmt -d -s $(GO_FILES) 2>&1 | tee lint.log @@ -25,6 +26,8 @@ lint: $(GOLINT) @$(foreach dir,$(MODULE_DIRS),(cd $(dir) && go vet ./... 2>&1) &&) true | tee -a lint.log @echo "Checking lint..." @$(foreach dir,$(MODULE_DIRS),(cd $(dir) && $(GOLINT) ./... 2>&1) &&) true | tee -a lint.log + @echo "Checking staticcheck..." + @$(foreach dir,$(MODULE_DIRS),(cd $(dir) && $(STATICCHECK) ./... 2>&1) &&) true | tee -a lint.log @echo "Checking for unresolved FIXMEs..." @git grep -i fixme | grep -v -e Makefile | tee -a lint.log @echo "Checking for license headers..." @@ -34,6 +37,9 @@ lint: $(GOLINT) $(GOLINT): go install golang.org/x/lint/golint +$(STATICCHECK): + go install honnef.co/go/tools/cmd/staticcheck + .PHONY: test test: @$(foreach dir,$(MODULE_DIRS),(cd $(dir) && go test -race ./...) &&) true diff --git a/vendor/go.uber.org/zap/buffer/buffer.go b/vendor/go.uber.org/zap/buffer/buffer.go index 7592e8c6..3f4b86e0 100644 --- a/vendor/go.uber.org/zap/buffer/buffer.go +++ b/vendor/go.uber.org/zap/buffer/buffer.go @@ -23,7 +23,10 @@ // package's zero-allocation formatters. package buffer // import "go.uber.org/zap/buffer" -import "strconv" +import ( + "strconv" + "time" +) const _size = 1024 // by default, create 1 KiB buffers @@ -49,6 +52,11 @@ func (b *Buffer) AppendInt(i int64) { b.bs = strconv.AppendInt(b.bs, i, 10) } +// AppendTime appends the time formatted using the specified layout. +func (b *Buffer) AppendTime(t time.Time, layout string) { + b.bs = t.AppendFormat(b.bs, layout) +} + // AppendUint appends an unsigned integer to the underlying buffer (assuming // base 10). func (b *Buffer) AppendUint(i uint64) { diff --git a/vendor/go.uber.org/zap/config.go b/vendor/go.uber.org/zap/config.go index 6fe17d9e..192fd1a9 100644 --- a/vendor/go.uber.org/zap/config.go +++ b/vendor/go.uber.org/zap/config.go @@ -21,6 +21,7 @@ package zap import ( + "fmt" "sort" "time" @@ -31,10 +32,14 @@ import ( // global CPU and I/O load that logging puts on your process while attempting // to preserve a representative subset of your logs. // -// Values configured here are per-second. See zapcore.NewSampler for details. +// If specified, the Sampler will invoke the Hook after each decision. +// +// Values configured here are per-second. See zapcore.NewSamplerWithOptions for +// details. type SamplingConfig struct { - Initial int `json:"initial" yaml:"initial"` - Thereafter int `json:"thereafter" yaml:"thereafter"` + Initial int `json:"initial" yaml:"initial"` + Thereafter int `json:"thereafter" yaml:"thereafter"` + Hook func(zapcore.Entry, zapcore.SamplingDecision) `json:"-" yaml:"-"` } // Config offers a declarative way to construct a logger. It doesn't do @@ -174,6 +179,10 @@ func (cfg Config) Build(opts ...Option) (*Logger, error) { return nil, err } + if cfg.Level == (AtomicLevel{}) { + return nil, fmt.Errorf("missing Level") + } + log := New( zapcore.NewCore(enc, sink, cfg.Level), cfg.buildOptions(errSink)..., @@ -203,9 +212,19 @@ func (cfg Config) buildOptions(errSink zapcore.WriteSyncer) []Option { opts = append(opts, AddStacktrace(stackLevel)) } - if cfg.Sampling != nil { + if scfg := cfg.Sampling; scfg != nil { opts = append(opts, WrapCore(func(core zapcore.Core) zapcore.Core { - return zapcore.NewSampler(core, time.Second, int(cfg.Sampling.Initial), int(cfg.Sampling.Thereafter)) + var samplerOpts []zapcore.SamplerOption + if scfg.Hook != nil { + samplerOpts = append(samplerOpts, zapcore.SamplerHook(scfg.Hook)) + } + return zapcore.NewSamplerWithOptions( + core, + time.Second, + cfg.Sampling.Initial, + cfg.Sampling.Thereafter, + samplerOpts..., + ) })) } diff --git a/vendor/go.uber.org/zap/encoder.go b/vendor/go.uber.org/zap/encoder.go index 2e9d3c34..08ed8335 100644 --- a/vendor/go.uber.org/zap/encoder.go +++ b/vendor/go.uber.org/zap/encoder.go @@ -62,6 +62,10 @@ func RegisterEncoder(name string, constructor func(zapcore.EncoderConfig) (zapco } func newEncoder(name string, encoderConfig zapcore.EncoderConfig) (zapcore.Encoder, error) { + if encoderConfig.TimeKey != "" && encoderConfig.EncodeTime == nil { + return nil, fmt.Errorf("missing EncodeTime in EncoderConfig") + } + _encoderMutex.RLock() defer _encoderMutex.RUnlock() if name == "" { diff --git a/vendor/go.uber.org/zap/field.go b/vendor/go.uber.org/zap/field.go index 83c1ea24..dd558fc2 100644 --- a/vendor/go.uber.org/zap/field.go +++ b/vendor/go.uber.org/zap/field.go @@ -32,6 +32,11 @@ import ( // improves the navigability of this package's API documentation. type Field = zapcore.Field +var ( + _minTimeInt64 = time.Unix(0, math.MinInt64) + _maxTimeInt64 = time.Unix(0, math.MaxInt64) +) + // Skip constructs a no-op field, which is often useful when handling invalid // inputs in other Field constructors. func Skip() Field { @@ -339,6 +344,9 @@ func Stringer(key string, val fmt.Stringer) Field { // Time constructs a Field with the given key and value. The encoder // controls how the time is serialized. func Time(key string, val time.Time) Field { + if val.Before(_minTimeInt64) || val.After(_maxTimeInt64) { + return Field{Key: key, Type: zapcore.TimeFullType, Interface: val} + } return Field{Key: key, Type: zapcore.TimeType, Integer: val.UnixNano(), Interface: val.Location()} } diff --git a/vendor/go.uber.org/zap/go.mod b/vendor/go.uber.org/zap/go.mod index 1fb6bba0..118abda1 100644 --- a/vendor/go.uber.org/zap/go.mod +++ b/vendor/go.uber.org/zap/go.mod @@ -5,7 +5,8 @@ go 1.13 require ( github.com/pkg/errors v0.8.1 github.com/stretchr/testify v1.4.0 - go.uber.org/atomic v1.5.0 - go.uber.org/multierr v1.3.0 + go.uber.org/atomic v1.6.0 + go.uber.org/multierr v1.5.0 golang.org/x/lint v0.0.0-20190930215403-16217165b5de + honnef.co/go/tools v0.0.1-2019.2.3 ) diff --git a/vendor/go.uber.org/zap/go.sum b/vendor/go.uber.org/zap/go.sum index 9ff6735d..99cdb93e 100644 --- a/vendor/go.uber.org/zap/go.sum +++ b/vendor/go.uber.org/zap/go.sum @@ -20,10 +20,10 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= diff --git a/vendor/go.uber.org/zap/logger.go b/vendor/go.uber.org/zap/logger.go index dc8f6e3a..cd6e1955 100644 --- a/vendor/go.uber.org/zap/logger.go +++ b/vendor/go.uber.org/zap/logger.go @@ -258,6 +258,12 @@ func (log *Logger) check(lvl zapcore.Level, msg string) *zapcore.CheckedEntry { // (e.g., Check, Info, Fatal). const callerSkipOffset = 2 + // Check the level first to reduce the cost of disabled log calls. + // Since Panic and higher may exit, we skip the optimization for those levels. + if lvl < zapcore.DPanicLevel && !log.core.Enabled(lvl) { + return nil + } + // Create basic checked entry thru the core; this will be non-nil if the // log message will actually be written somewhere. ent := zapcore.Entry{ diff --git a/vendor/go.uber.org/zap/options.go b/vendor/go.uber.org/zap/options.go index 7a6b0fca..59f1b54a 100644 --- a/vendor/go.uber.org/zap/options.go +++ b/vendor/go.uber.org/zap/options.go @@ -20,7 +20,11 @@ package zap -import "go.uber.org/zap/zapcore" +import ( + "fmt" + + "go.uber.org/zap/zapcore" +) // An Option configures a Logger. type Option interface { @@ -83,10 +87,17 @@ func Development() Option { } // AddCaller configures the Logger to annotate each message with the filename -// and line number of zap's caller. +// and line number of zap's caller. See also WithCaller. func AddCaller() Option { + return WithCaller(true) +} + +// WithCaller configures the Logger to annotate each message with the filename +// and line number of zap's caller, or not, depending on the value of enabled. +// This is a generalized form of AddCaller. +func WithCaller(enabled bool) Option { return optionFunc(func(log *Logger) { - log.addCaller = true + log.addCaller = enabled }) } @@ -107,3 +118,16 @@ func AddStacktrace(lvl zapcore.LevelEnabler) Option { log.addStack = lvl }) } + +// IncreaseLevel increase the level of the logger. It has no effect if +// the passed in level tries to decrease the level of the logger. +func IncreaseLevel(lvl zapcore.LevelEnabler) Option { + return optionFunc(func(log *Logger) { + core, err := zapcore.NewIncreaseLevelCore(log.core, lvl) + if err != nil { + fmt.Fprintf(log.errorOutput, "failed to IncreaseLevel: %v", err) + } else { + log.core = core + } + }) +} diff --git a/vendor/go.uber.org/zap/tools.go b/vendor/go.uber.org/zap/tools.go deleted file mode 100644 index 2b6366be..00000000 --- a/vendor/go.uber.org/zap/tools.go +++ /dev/null @@ -1,28 +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. - -// +build tools - -package zap - -import ( - // Tools we use during development. - _ "golang.org/x/lint/golint" -) diff --git a/vendor/go.uber.org/zap/zapcore/encoder.go b/vendor/go.uber.org/zap/zapcore/encoder.go index 5e0a69be..6c78f7e4 100644 --- a/vendor/go.uber.org/zap/zapcore/encoder.go +++ b/vendor/go.uber.org/zap/zapcore/encoder.go @@ -112,21 +112,43 @@ func EpochNanosTimeEncoder(t time.Time, enc PrimitiveArrayEncoder) { enc.AppendInt64(t.UnixNano()) } +func encodeTimeLayout(t time.Time, layout string, enc PrimitiveArrayEncoder) { + type appendTimeEncoder interface { + AppendTimeLayout(time.Time, string) + } + + if enc, ok := enc.(appendTimeEncoder); ok { + enc.AppendTimeLayout(t, layout) + return + } + + enc.AppendString(t.Format(layout)) +} + // ISO8601TimeEncoder serializes a time.Time to an ISO8601-formatted string // with millisecond precision. +// +// If enc supports AppendTimeLayout(t time.Time,layout string), it's used +// instead of appending a pre-formatted string value. func ISO8601TimeEncoder(t time.Time, enc PrimitiveArrayEncoder) { - enc.AppendString(t.Format("2006-01-02T15:04:05.000Z0700")) + encodeTimeLayout(t, "2006-01-02T15:04:05.000Z0700", enc) } // RFC3339TimeEncoder serializes a time.Time to an RFC3339-formatted string. +// +// If enc supports AppendTimeLayout(t time.Time,layout string), it's used +// instead of appending a pre-formatted string value. func RFC3339TimeEncoder(t time.Time, enc PrimitiveArrayEncoder) { - enc.AppendString(t.Format(time.RFC3339)) + encodeTimeLayout(t, time.RFC3339, enc) } // RFC3339NanoTimeEncoder serializes a time.Time to an RFC3339-formatted string // with nanosecond precision. +// +// If enc supports AppendTimeLayout(t time.Time,layout string), it's used +// instead of appending a pre-formatted string value. func RFC3339NanoTimeEncoder(t time.Time, enc PrimitiveArrayEncoder) { - enc.AppendString(t.Format(time.RFC3339Nano)) + encodeTimeLayout(t, time.RFC3339Nano, enc) } // UnmarshalText unmarshals text to a TimeEncoder. @@ -168,6 +190,12 @@ func NanosDurationEncoder(d time.Duration, enc PrimitiveArrayEncoder) { enc.AppendInt64(int64(d)) } +// MillisDurationEncoder serializes a time.Duration to an integer number of +// milliseconds elapsed. +func MillisDurationEncoder(d time.Duration, enc PrimitiveArrayEncoder) { + enc.AppendInt64(d.Nanoseconds() / 1e6) +} + // StringDurationEncoder serializes a time.Duration using its built-in String // method. func StringDurationEncoder(d time.Duration, enc PrimitiveArrayEncoder) { @@ -183,6 +211,8 @@ func (e *DurationEncoder) UnmarshalText(text []byte) error { *e = StringDurationEncoder case "nanos": *e = NanosDurationEncoder + case "ms": + *e = MillisDurationEncoder default: *e = SecondsDurationEncoder } diff --git a/vendor/go.uber.org/zap/zapcore/error.go b/vendor/go.uber.org/zap/zapcore/error.go index a67c7bac..9ba2272c 100644 --- a/vendor/go.uber.org/zap/zapcore/error.go +++ b/vendor/go.uber.org/zap/zapcore/error.go @@ -66,11 +66,6 @@ type errorGroup interface { Errors() []error } -type causer interface { - // Provides access to the error that caused this error. - Cause() error -} - // Note that errArry and errArrayElem are very similar to the version // implemented in the top-level error.go file. We can't re-use this because // that would require exporting errArray as part of the zapcore API. diff --git a/vendor/go.uber.org/zap/zapcore/field.go b/vendor/go.uber.org/zap/zapcore/field.go index ae772e4a..6e05f831 100644 --- a/vendor/go.uber.org/zap/zapcore/field.go +++ b/vendor/go.uber.org/zap/zapcore/field.go @@ -65,8 +65,11 @@ const ( Int8Type // StringType indicates that the field carries a string. StringType - // TimeType indicates that the field carries a time.Time. + // TimeType indicates that the field carries a time.Time that is + // representable by a UnixNano() stored as an int64. TimeType + // TimeFullType indicates that the field carries a time.Time stored as-is. + TimeFullType // Uint64Type indicates that the field carries a uint64. Uint64Type // Uint32Type indicates that the field carries a uint32. @@ -145,6 +148,8 @@ func (f Field) AddTo(enc ObjectEncoder) { // Fall back to UTC if location is nil. enc.AddTime(f.Key, time.Unix(0, f.Integer)) } + case TimeFullType: + enc.AddTime(f.Key, f.Interface.(time.Time)) case Uint64Type: enc.AddUint64(f.Key, uint64(f.Integer)) case Uint32Type: diff --git a/vendor/go.uber.org/zap/zapcore/increase_level.go b/vendor/go.uber.org/zap/zapcore/increase_level.go new file mode 100644 index 00000000..5a174926 --- /dev/null +++ b/vendor/go.uber.org/zap/zapcore/increase_level.go @@ -0,0 +1,66 @@ +// Copyright (c) 2020 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. + +package zapcore + +import "fmt" + +type levelFilterCore struct { + core Core + level LevelEnabler +} + +// NewIncreaseLevelCore creates a core that can be used to increase the level of +// an existing Core. It cannot be used to decrease the logging level, as it acts +// as a filter before calling the underlying core. If level decreases the log level, +// an error is returned. +func NewIncreaseLevelCore(core Core, level LevelEnabler) (Core, error) { + for l := _maxLevel; l >= _minLevel; l-- { + if !core.Enabled(l) && level.Enabled(l) { + return nil, fmt.Errorf("invalid increase level, as level %q is allowed by increased level, but not by existing core", l) + } + } + + return &levelFilterCore{core, level}, nil +} + +func (c *levelFilterCore) Enabled(lvl Level) bool { + return c.level.Enabled(lvl) +} + +func (c *levelFilterCore) With(fields []Field) Core { + return &levelFilterCore{c.core.With(fields), c.level} +} + +func (c *levelFilterCore) Check(ent Entry, ce *CheckedEntry) *CheckedEntry { + if !c.Enabled(ent.Level) { + return ce + } + + return c.core.Check(ent, ce) +} + +func (c *levelFilterCore) Write(ent Entry, fields []Field) error { + return c.core.Write(ent, fields) +} + +func (c *levelFilterCore) Sync() error { + return c.core.Sync() +} diff --git a/vendor/go.uber.org/zap/zapcore/json_encoder.go b/vendor/go.uber.org/zap/zapcore/json_encoder.go index 56256be8..7facc1b3 100644 --- a/vendor/go.uber.org/zap/zapcore/json_encoder.go +++ b/vendor/go.uber.org/zap/zapcore/json_encoder.go @@ -266,6 +266,13 @@ func (enc *jsonEncoder) AppendString(val string) { enc.buf.AppendByte('"') } +func (enc *jsonEncoder) AppendTimeLayout(time time.Time, layout string) { + enc.addElementSeparator() + enc.buf.AppendByte('"') + enc.buf.AppendTime(time, layout) + enc.buf.AppendByte('"') +} + func (enc *jsonEncoder) AppendTime(val time.Time) { cur := enc.buf.Len() enc.EncodeTime(val, enc) diff --git a/vendor/go.uber.org/zap/zapcore/sampler.go b/vendor/go.uber.org/zap/zapcore/sampler.go index e3164186..25f10ca1 100644 --- a/vendor/go.uber.org/zap/zapcore/sampler.go +++ b/vendor/go.uber.org/zap/zapcore/sampler.go @@ -81,33 +81,104 @@ func (c *counter) IncCheckReset(t time.Time, tick time.Duration) uint64 { return 1 } -type sampler struct { - Core +// SamplingDecision is a decision represented as a bit field made by sampler. +// More decisions may be added in the future. +type SamplingDecision uint32 - counts *counters - tick time.Duration - first, thereafter uint64 +const ( + // LogDropped indicates that the Sampler dropped a log entry. + LogDropped SamplingDecision = 1 << iota + // LogSampled indicates that the Sampler sampled a log entry. + LogSampled +) + +// optionFunc wraps a func so it satisfies the SamplerOption interface. +type optionFunc func(*sampler) + +func (f optionFunc) apply(s *sampler) { + f(s) +} + +// SamplerOption configures a Sampler. +type SamplerOption interface { + apply(*sampler) } -// NewSampler creates a Core that samples incoming entries, which caps the CPU -// and I/O load of logging while attempting to preserve a representative subset -// of your logs. +// nopSamplingHook is the default hook used by sampler. +func nopSamplingHook(Entry, SamplingDecision) {} + +// SamplerHook registers a function which will be called when Sampler makes a +// decision. +// +// This hook may be used to get visibility into the performance of the sampler. +// For example, use it to track metrics of dropped versus sampled logs. +// +// var dropped atomic.Int64 +// zapcore.SamplerHook(func(ent zapcore.Entry, dec zapcore.SamplingDecision) { +// if dec&zapcore.LogDropped > 0 { +// dropped.Inc() +// } +// }) +func SamplerHook(hook func(entry Entry, dec SamplingDecision)) SamplerOption { + return optionFunc(func(s *sampler) { + s.hook = hook + }) +} + +// NewSamplerWithOptions creates a Core that samples incoming entries, which +// caps the CPU and I/O load of logging while attempting to preserve a +// representative subset of your logs. // // Zap samples by logging the first N entries with a given level and message // 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. // +// 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 // absolute precision; under load, each tick may be slightly over- or // under-sampled. -func NewSampler(core Core, tick time.Duration, first, thereafter int) Core { - return &sampler{ +func NewSamplerWithOptions(core Core, tick time.Duration, first, thereafter int, opts ...SamplerOption) Core { + s := &sampler{ Core: core, tick: tick, counts: newCounters(), first: uint64(first), thereafter: uint64(thereafter), + hook: nopSamplingHook, } + for _, opt := range opts { + opt.apply(s) + } + + return s +} + +type sampler struct { + Core + + counts *counters + tick time.Duration + first, thereafter uint64 + hook func(Entry, SamplingDecision) +} + +// NewSampler creates a Core that samples incoming entries, which +// caps the CPU and I/O load of logging while attempting to preserve a +// representative subset of your logs. +// +// Zap samples by logging the first N entries with a given level and message +// 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. +// +// 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. +// +// Deprecated: use NewSamplerWithOptions. +func NewSampler(core Core, tick time.Duration, first, thereafter int) Core { + return NewSamplerWithOptions(core, tick, first, thereafter) } func (s *sampler) With(fields []Field) Core { @@ -117,6 +188,7 @@ func (s *sampler) With(fields []Field) Core { counts: s.counts, first: s.first, thereafter: s.thereafter, + hook: s.hook, } } @@ -128,7 +200,9 @@ func (s *sampler) Check(ent Entry, ce *CheckedEntry) *CheckedEntry { 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 { + s.hook(ent, LogDropped) return ce } + s.hook(ent, LogSampled) return s.Core.Check(ent, ce) } diff --git a/vendor/golang.org/x/crypto/ssh/terminal/terminal.go b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go index d1b4fca3..2ffb97bf 100644 --- a/vendor/golang.org/x/crypto/ssh/terminal/terminal.go +++ b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go @@ -113,6 +113,7 @@ func NewTerminal(c io.ReadWriter, prompt string) *Terminal { } const ( + keyCtrlC = 3 keyCtrlD = 4 keyCtrlU = 21 keyEnter = '\r' @@ -151,8 +152,12 @@ func bytesToKey(b []byte, pasteActive bool) (rune, []byte) { switch b[0] { case 1: // ^A return keyHome, b[1:] + case 2: // ^B + return keyLeft, b[1:] case 5: // ^E return keyEnd, b[1:] + case 6: // ^F + return keyRight, b[1:] case 8: // ^H return keyBackspace, b[1:] case 11: // ^K @@ -738,6 +743,9 @@ func (t *Terminal) readLine() (line string, err error) { return "", io.EOF } } + if key == keyCtrlC { + return "", io.EOF + } if key == keyPasteStart { t.pasteActive = true if len(t.line) == 0 { diff --git a/vendor/golang.org/x/net/html/const.go b/vendor/golang.org/x/net/html/const.go index 73804d34..ff7acf2d 100644 --- a/vendor/golang.org/x/net/html/const.go +++ b/vendor/golang.org/x/net/html/const.go @@ -52,7 +52,7 @@ var isSpecialElementMap = map[string]bool{ "iframe": true, "img": true, "input": true, - "keygen": true, + "keygen": true, // "keygen" has been removed from the spec, but are kept here for backwards compatibility. "li": true, "link": true, "listing": true, diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go index 74774c45..9da9e9dc 100644 --- a/vendor/golang.org/x/net/html/foreign.go +++ b/vendor/golang.org/x/net/html/foreign.go @@ -161,65 +161,62 @@ var mathMLAttributeAdjustments = map[string]string{ } var svgAttributeAdjustments = map[string]string{ - "attributename": "attributeName", - "attributetype": "attributeType", - "basefrequency": "baseFrequency", - "baseprofile": "baseProfile", - "calcmode": "calcMode", - "clippathunits": "clipPathUnits", - "contentscripttype": "contentScriptType", - "contentstyletype": "contentStyleType", - "diffuseconstant": "diffuseConstant", - "edgemode": "edgeMode", - "externalresourcesrequired": "externalResourcesRequired", - "filterunits": "filterUnits", - "glyphref": "glyphRef", - "gradienttransform": "gradientTransform", - "gradientunits": "gradientUnits", - "kernelmatrix": "kernelMatrix", - "kernelunitlength": "kernelUnitLength", - "keypoints": "keyPoints", - "keysplines": "keySplines", - "keytimes": "keyTimes", - "lengthadjust": "lengthAdjust", - "limitingconeangle": "limitingConeAngle", - "markerheight": "markerHeight", - "markerunits": "markerUnits", - "markerwidth": "markerWidth", - "maskcontentunits": "maskContentUnits", - "maskunits": "maskUnits", - "numoctaves": "numOctaves", - "pathlength": "pathLength", - "patterncontentunits": "patternContentUnits", - "patterntransform": "patternTransform", - "patternunits": "patternUnits", - "pointsatx": "pointsAtX", - "pointsaty": "pointsAtY", - "pointsatz": "pointsAtZ", - "preservealpha": "preserveAlpha", - "preserveaspectratio": "preserveAspectRatio", - "primitiveunits": "primitiveUnits", - "refx": "refX", - "refy": "refY", - "repeatcount": "repeatCount", - "repeatdur": "repeatDur", - "requiredextensions": "requiredExtensions", - "requiredfeatures": "requiredFeatures", - "specularconstant": "specularConstant", - "specularexponent": "specularExponent", - "spreadmethod": "spreadMethod", - "startoffset": "startOffset", - "stddeviation": "stdDeviation", - "stitchtiles": "stitchTiles", - "surfacescale": "surfaceScale", - "systemlanguage": "systemLanguage", - "tablevalues": "tableValues", - "targetx": "targetX", - "targety": "targetY", - "textlength": "textLength", - "viewbox": "viewBox", - "viewtarget": "viewTarget", - "xchannelselector": "xChannelSelector", - "ychannelselector": "yChannelSelector", - "zoomandpan": "zoomAndPan", + "attributename": "attributeName", + "attributetype": "attributeType", + "basefrequency": "baseFrequency", + "baseprofile": "baseProfile", + "calcmode": "calcMode", + "clippathunits": "clipPathUnits", + "diffuseconstant": "diffuseConstant", + "edgemode": "edgeMode", + "filterunits": "filterUnits", + "glyphref": "glyphRef", + "gradienttransform": "gradientTransform", + "gradientunits": "gradientUnits", + "kernelmatrix": "kernelMatrix", + "kernelunitlength": "kernelUnitLength", + "keypoints": "keyPoints", + "keysplines": "keySplines", + "keytimes": "keyTimes", + "lengthadjust": "lengthAdjust", + "limitingconeangle": "limitingConeAngle", + "markerheight": "markerHeight", + "markerunits": "markerUnits", + "markerwidth": "markerWidth", + "maskcontentunits": "maskContentUnits", + "maskunits": "maskUnits", + "numoctaves": "numOctaves", + "pathlength": "pathLength", + "patterncontentunits": "patternContentUnits", + "patterntransform": "patternTransform", + "patternunits": "patternUnits", + "pointsatx": "pointsAtX", + "pointsaty": "pointsAtY", + "pointsatz": "pointsAtZ", + "preservealpha": "preserveAlpha", + "preserveaspectratio": "preserveAspectRatio", + "primitiveunits": "primitiveUnits", + "refx": "refX", + "refy": "refY", + "repeatcount": "repeatCount", + "repeatdur": "repeatDur", + "requiredextensions": "requiredExtensions", + "requiredfeatures": "requiredFeatures", + "specularconstant": "specularConstant", + "specularexponent": "specularExponent", + "spreadmethod": "spreadMethod", + "startoffset": "startOffset", + "stddeviation": "stdDeviation", + "stitchtiles": "stitchTiles", + "surfacescale": "surfaceScale", + "systemlanguage": "systemLanguage", + "tablevalues": "tableValues", + "targetx": "targetX", + "targety": "targetY", + "textlength": "textLength", + "viewbox": "viewBox", + "viewtarget": "viewTarget", + "xchannelselector": "xChannelSelector", + "ychannelselector": "yChannelSelector", + "zoomandpan": "zoomAndPan", } diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go index 2cd12fc8..f91466f7 100644 --- a/vendor/golang.org/x/net/html/parse.go +++ b/vendor/golang.org/x/net/html/parse.go @@ -728,7 +728,13 @@ func inHeadNoscriptIM(p *parser) bool { return inBodyIM(p) case a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Style: return inHeadIM(p) - case a.Head, a.Noscript: + case a.Head: + // Ignore the token. + return true + case a.Noscript: + // Don't let the tokenizer go into raw text mode even when a