From e5b6a32e215d0df456e169daea006318bc4b653a Mon Sep 17 00:00:00 2001 From: Stoyan Rachev Date: Fri, 27 Aug 2021 15:14:32 +0300 Subject: [PATCH 1/2] Vendor g/g v1.31.0-dev --- go.mod | 2 +- go.sum | 4 +- .../gardener/gardener/charts/images.go | 14 +- .../gardener/gardener/charts/images.yaml | 30 +- .../infrastructure/configvalidator.go | 31 + .../controller/infrastructure/controller.go | 4 +- .../controller/infrastructure/reconciler.go | 45 +- .../controlplane/genericmutator/mutator.go | 7 + .../genericmutator/noopensurer.go | 5 + .../gardener/hack/.ci/component_descriptor | 35 +- .../gardener/hack/.ci/set_dependency_version | 2 +- .../gardener/gardener/hack/hook-me.sh | 342 +++-- .../gardener/hack/install-requirements.sh | 1 + .../pkg/apis/core/types_cloudprofile.go | 1 + .../gardener/pkg/apis/core/types_common.go | 2 + .../gardener/pkg/apis/core/types_seed.go | 1 + .../gardener/pkg/apis/core/types_shoot.go | 31 +- .../v1alpha1/constants/types_constants.go | 4 +- .../pkg/apis/core/v1alpha1/defaults.go | 29 + .../pkg/apis/core/v1alpha1/generated.pb.go | 1295 +++++++++-------- .../pkg/apis/core/v1alpha1/generated.proto | 13 +- .../pkg/apis/core/v1alpha1/types_shoot.go | 32 +- .../core/v1alpha1/zz_generated.conversion.go | 4 + .../core/v1alpha1/zz_generated.deepcopy.go | 10 + .../core/v1alpha1/zz_generated.defaults.go | 3 + .../core/v1beta1/constants/types_constants.go | 4 +- .../pkg/apis/core/v1beta1/defaults.go | 29 + .../pkg/apis/core/v1beta1/generated.pb.go | 1243 ++++++++-------- .../pkg/apis/core/v1beta1/generated.proto | 15 +- .../v1beta1/types_controllerregistration.go | 2 + .../pkg/apis/core/v1beta1/types_shoot.go | 37 +- .../core/v1beta1/zz_generated.conversion.go | 4 + .../core/v1beta1/zz_generated.deepcopy.go | 10 + .../core/v1beta1/zz_generated.defaults.go | 3 + .../pkg/apis/core/validation/shoot.go | 28 +- .../pkg/apis/core/zz_generated.deepcopy.go | 10 + .../gardener/pkg/controllerutils/worker.go | 22 +- .../gardener/pkg/features/features.go | 7 - .../gardener/gardener/pkg/logger/logrus.go | 2 +- .../botanist/component/etcd/bootstrap.go | 37 +- .../operation/botanist/component/etcd/etcd.go | 8 +- .../component/kubescheduler/kube_scheduler.go | 52 +- .../component/monitoring/blackbox_exporter.go | 18 + .../component/monitoring/prometheus.go | 28 + .../gardener/pkg/operation/common/utils.go | 41 +- .../pkg/utils/kubernetes/kubernetes.go | 6 +- .../gardener/pkg/utils/kubernetes/object.go | 4 +- .../pkg/utils/secrets/certificates.go | 9 +- .../gardener/pkg/utils/secrets/generate.go | 5 +- .../gardener/pkg/utils/secrets/secrets.go | 4 +- vendor/modules.txt | 3 +- 51 files changed, 2127 insertions(+), 1451 deletions(-) create mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/configvalidator.go create mode 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/component/monitoring/blackbox_exporter.go create mode 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/component/monitoring/prometheus.go diff --git a/go.mod b/go.mod index d7bf3048a..a2c5af5fc 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/coreos/go-systemd/v22 v22.1.0 github.com/frankban/quicktest v1.9.0 // indirect github.com/gardener/etcd-druid v0.5.0 - github.com/gardener/gardener v1.29.0 + github.com/gardener/gardener v1.30.1-0.20210827103926-aa88e5700bb0 github.com/gardener/machine-controller-manager v0.36.0 github.com/go-logr/logr v0.4.0 github.com/golang/mock v1.6.0 diff --git a/go.sum b/go.sum index 1b1768cd0..3eb8f481b 100644 --- a/go.sum +++ b/go.sum @@ -205,8 +205,8 @@ github.com/gardener/gardener v1.6.5/go.mod h1:w5IHIQDccvSxZJFOtBa8YConyyFgt07DBH github.com/gardener/gardener v1.11.3/go.mod h1:5DzqfOm+G8UftKu5zUbYJ+9Cnfd4XrvRNDabkM9AIp4= github.com/gardener/gardener v1.17.1/go.mod h1:uucRHq0xV46xd9MpJJjRswx/Slq3+ipbbJg09FVUtvM= github.com/gardener/gardener v1.27.1/go.mod h1:g+3Vx1Q8HSwcSkRwxn4G54WealBh4pcZSNOSkE6ygdQ= -github.com/gardener/gardener v1.29.0 h1:5mEMC9iL1fGPvG+mO+YOssGTAc5UQOy0djbFxnciln8= -github.com/gardener/gardener v1.29.0/go.mod h1:3VK2HoMK33jZmS4+PeVfHSBXI06t9ybvM+rj1QvYtc0= +github.com/gardener/gardener v1.30.1-0.20210827103926-aa88e5700bb0 h1:99ImzW2fLvg8tQCSxAwdpsmkn+TGeSS1wREpu4vDeKI= +github.com/gardener/gardener v1.30.1-0.20210827103926-aa88e5700bb0/go.mod h1:3VK2HoMK33jZmS4+PeVfHSBXI06t9ybvM+rj1QvYtc0= github.com/gardener/gardener-resource-manager v0.10.0/go.mod h1:0pKTHOhvU91eQB0EYr/6Ymd7lXc/5Hi8P8tF/gpV0VQ= github.com/gardener/gardener-resource-manager v0.13.1/go.mod h1:0No/XttYRUwDn5lSppq9EqlKdo/XJQ44aCZz5BVu3Vw= github.com/gardener/gardener-resource-manager v0.18.0/go.mod h1:k53Yw2iDAIpTxnChQY9qFHrRtuPQWJDNnCP9eE6TnWQ= diff --git a/vendor/github.com/gardener/gardener/charts/images.go b/vendor/github.com/gardener/gardener/charts/images.go index 7377c4c77..791f5ad49 100644 --- a/vendor/github.com/gardener/gardener/charts/images.go +++ b/vendor/github.com/gardener/gardener/charts/images.go @@ -33,8 +33,6 @@ const ( ImageNameApiserverProxySidecar = "apiserver-proxy-sidecar" // ImageNameBlackboxExporter is a constant for an image in the image vector with name 'blackbox-exporter'. ImageNameBlackboxExporter = "blackbox-exporter" - // ImageNameBusybox is a constant for an image in the image vector with name 'busybox'. - ImageNameBusybox = "busybox" // ImageNameClusterAutoscaler is a constant for an image in the image vector with name 'cluster-autoscaler'. ImageNameClusterAutoscaler = "cluster-autoscaler" // ImageNameConfigmapReloader is a constant for an image in the image vector with name 'configmap-reloader'. @@ -73,6 +71,8 @@ const ( ImageNameKubeControllerManager = "kube-controller-manager" // ImageNameKubeProxy is a constant for an image in the image vector with name 'kube-proxy'. ImageNameKubeProxy = "kube-proxy" + // ImageNameKubeRbacProxy is a constant for an image in the image vector with name 'kube-rbac-proxy'. + ImageNameKubeRbacProxy = "kube-rbac-proxy" // ImageNameKubeScheduler is a constant for an image in the image vector with name 'kube-scheduler'. ImageNameKubeScheduler = "kube-scheduler" // ImageNameKubeStateMetrics is a constant for an image in the image vector with name 'kube-state-metrics'. @@ -85,12 +85,6 @@ const ( ImageNameLoki = "loki" // ImageNameLokiCurator is a constant for an image in the image vector with name 'loki-curator'. ImageNameLokiCurator = "loki-curator" - // ImageNameKubeRBACKProxy is a constant for an image in the image vector with name 'kube-rbac-proxy'. - ImageNameKubeRBACKProxy = "kube-rbac-proxy" - // PromtailImageName is the image of grafana/promtail image - PromtailImageName = "promtail" - // ImageNameTelegraf is a constant for an image in the image vector with name 'telegraf'. - ImageNameTelegraf = "telegraf" // ImageNameMetricsServer is a constant for an image in the image vector with name 'metrics-server'. ImageNameMetricsServer = "metrics-server" // ImageNameNginxIngressController is a constant for an image in the image vector with name 'nginx-ingress-controller'. @@ -107,6 +101,10 @@ const ( ImageNamePauseContainer = "pause-container" // ImageNamePrometheus is a constant for an image in the image vector with name 'prometheus'. ImageNamePrometheus = "prometheus" + // ImageNamePromtail is a constant for an image in the image vector with name 'promtail'. + ImageNamePromtail = "promtail" + // ImageNameTelegraf is a constant for an image in the image vector with name 'telegraf'. + ImageNameTelegraf = "telegraf" // ImageNameVpaAdmissionController is a constant for an image in the image vector with name 'vpa-admission-controller'. ImageNameVpaAdmissionController = "vpa-admission-controller" // ImageNameVpaExporter is a constant for an image in the image vector with name 'vpa-exporter'. diff --git a/vendor/github.com/gardener/gardener/charts/images.yaml b/vendor/github.com/gardener/gardener/charts/images.yaml index 3d479c6fb..15cb63138 100644 --- a/vendor/github.com/gardener/gardener/charts/images.yaml +++ b/vendor/github.com/gardener/gardener/charts/images.yaml @@ -17,6 +17,13 @@ images: sourceRepository: github.com/kubernetes/kubernetes/blob/master/build/pause/Dockerfile repository: gcr.io/google_containers/pause-amd64 tag: "3.1" + labels: + - name: cloud.gardener.cnudie/dso/scanning-hints/binary_id/v1 + value: + policy: skip + comment: > + pause-container is not accessible from outside k8s clusters and not + interacted with from other containers or other systems - name: etcd-druid sourceRepository: github.com/gardener/etcd-druid repository: eu.gcr.io/gardener-project/gardener/etcd-druid @@ -95,11 +102,11 @@ images: - name: alertmanager sourceRepository: github.com/prometheus/alertmanager repository: quay.io/prometheus/alertmanager - tag: v0.18.0 + tag: v0.22.2 - name: prometheus sourceRepository: github.com/prometheus/prometheus repository: quay.io/prometheus/prometheus - tag: v2.23.0 + tag: v2.29.1 - name: configmap-reloader sourceRepository: github.com/jimmidyson/configmap-reload repository: quay.io/coreos/configmap-reload @@ -123,7 +130,7 @@ images: - name: metrics-server sourceRepository: github.com/kubernetes-sigs/metrics-server repository: k8s.gcr.io/metrics-server/metrics-server - tag: v0.4.3 + tag: v0.5.0 # Shoot core addons - name: vpn-shoot @@ -173,6 +180,13 @@ images: repository: quay.io/kubernetes-ingress-controller/nginx-ingress-controller tag: "0.22.0" targetVersion: "< 1.20" + labels: + - name: cloud.gardener.cnudie/dso/scanning-hints/binary_id/v1 + value: + policy: skip + comment: > + not deployed as part of gardener infrastructure. Offered to users for development + purposes only, accompanied w/ warning that no support be provided. - name: nginx-ingress-controller sourceRepository: github.com/kubernetes/ingress-nginx repository: k8s.gcr.io/ingress-nginx/controller @@ -188,10 +202,6 @@ images: tag: "0.9.0" # Miscellaenous -- name: busybox - sourceRepository: github.com/mirror/busybox - repository: busybox - tag: "1.29.2" - name: alpine repository: alpine tag: "3.10.3" @@ -208,7 +218,7 @@ images: - name: fluent-bit-plugin-installer sourceRepository: github.com/gardener/logging repository: eu.gcr.io/gardener-project/gardener/fluent-bit-to-loki - tag: "v0.36.1" + tag: "v0.36.2" - name: loki sourceRepository: github.com/grafana/loki repository: grafana/loki @@ -216,7 +226,7 @@ images: - name: loki-curator sourceRepository: github.com/gardener/logging repository: eu.gcr.io/gardener-project/gardener/loki-curator - tag: "v0.36.1" + tag: "v0.36.2" - name: kube-rbac-proxy sourceRepository: github.com/brancz/kube-rbac-proxy repository: quay.io/brancz/kube-rbac-proxy @@ -228,7 +238,7 @@ images: - name: telegraf sourceRepository: github.com/gardener/logging repository: eu.gcr.io/gardener-project/gardener/telegraf-iptables - tag: "v0.36.1" + tag: "v0.36.2" # VPA - name: vpa-admission-controller diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/configvalidator.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/configvalidator.go new file mode 100644 index 000000000..171bd4b41 --- /dev/null +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/configvalidator.go @@ -0,0 +1,31 @@ +// 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 infrastructure + +import ( + "context" + + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" + "k8s.io/apimachinery/pkg/util/validation/field" +) + +// ConfigValidator validates the provider config of infrastructures resource with the cloud provider. +type ConfigValidator interface { + // Validate validates the provider config of the given infrastructure resource with the cloud provider. + // If the returned error list is non-empty, the reconciliation will fail with an error. + // This error will have the error code ERR_CONFIGURATION_PROBLEM, unless there is at least one error in the list + // that has its ErrorType field set to field.ErrorTypeInternal. + Validate(ctx context.Context, infra *extensionsv1alpha1.Infrastructure) field.ErrorList +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/controller.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/controller.go index d20ecb089..e91daf7a0 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/controller.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/controller.go @@ -38,6 +38,8 @@ const ( type AddArgs struct { // Actuator is an infrastructure actuator. Actuator Actuator + // ConfigValidator is an infrastructure config validator. + ConfigValidator ConfigValidator // ControllerOptions are the controller options used for creating a controller. // The options.Reconciler is always overridden with a reconciler created from the // given actuator. @@ -77,7 +79,7 @@ func DefaultPredicates(ignoreOperationAnnotation bool) []predicate.Predicate { // Add creates a new Infrastructure Controller and adds it to the Manager. // and Start it when the Manager is Started. func Add(mgr manager.Manager, args AddArgs) error { - args.ControllerOptions.Reconciler = NewReconciler(args.Actuator) + args.ControllerOptions.Reconciler = NewReconciler(args.Actuator, args.ConfigValidator) return add(mgr, args) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go index 6fa47c7c6..f2232a511 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go @@ -20,6 +20,7 @@ import ( "github.com/go-logr/logr" "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/util/validation/field" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/log" @@ -36,8 +37,9 @@ import ( ) type reconciler struct { - logger logr.Logger - actuator Actuator + logger logr.Logger + actuator Actuator + configValidator ConfigValidator client client.Client reader client.Reader @@ -46,20 +48,26 @@ type reconciler struct { // NewReconciler creates a new reconcile.Reconciler that reconciles // infrastructure resources of Gardener's `extensions.gardener.cloud` API group. -func NewReconciler(actuator Actuator) reconcile.Reconciler { +func NewReconciler(actuator Actuator, configValidator ConfigValidator) reconcile.Reconciler { logger := log.Log.WithName(ControllerName) return extensionscontroller.OperationAnnotationWrapper( func() client.Object { return &extensionsv1alpha1.Infrastructure{} }, &reconciler{ - logger: logger, - actuator: actuator, - statusUpdater: extensionscontroller.NewStatusUpdater(logger), + logger: logger, + actuator: actuator, + configValidator: configValidator, + statusUpdater: extensionscontroller.NewStatusUpdater(logger), }, ) } func (r *reconciler) InjectFunc(f inject.Func) error { + if r.configValidator != nil { + if err := f(r.configValidator); err != nil { + return err + } + } return f(r.actuator) } @@ -119,6 +127,11 @@ func (r *reconciler) reconcile(ctx context.Context, logger logr.Logger, infrastr return reconcile.Result{}, err } + if err := r.validateConfig(ctx, infrastructure); err != nil { + _ = r.statusUpdater.Error(ctx, infrastructure, err, operationType, "Error checking infrastructure config") + return reconcile.Result{}, err + } + logger.Info("Starting the reconciliation of infrastructure", "infrastructure", kutil.ObjectName(infrastructure)) if err := r.actuator.Reconcile(ctx, infrastructure, cluster); err != nil { _ = r.statusUpdater.Error(ctx, infrastructure, extensionscontroller.ReconcileErrCauseOrErr(err), operationType, "Error reconciling infrastructure") @@ -190,6 +203,11 @@ func (r *reconciler) restore(ctx context.Context, logger logr.Logger, infrastruc return reconcile.Result{}, err } + if err := r.validateConfig(ctx, infrastructure); err != nil { + _ = r.statusUpdater.Error(ctx, infrastructure, err, gardencorev1beta1.LastOperationTypeRestore, "Error checking infrastructure config") + return reconcile.Result{}, err + } + if err := r.actuator.Restore(ctx, infrastructure, cluster); err != nil { _ = r.statusUpdater.Error(ctx, infrastructure, extensionscontroller.ReconcileErrCauseOrErr(err), gardencorev1beta1.LastOperationTypeRestore, "Error restoring infrastructure") return extensionscontroller.ReconcileErr(err) @@ -218,3 +236,18 @@ func (r *reconciler) removeAnnotation(ctx context.Context, logger logr.Logger, i } return nil } + +func (r *reconciler) validateConfig(ctx context.Context, infrastructure *extensionsv1alpha1.Infrastructure) error { + if r.configValidator == nil { + return nil + } + + if allErrs := r.configValidator.Validate(ctx, infrastructure); len(allErrs) > 0 { + if filteredErrs := allErrs.Filter(field.NewErrorTypeMatcher(field.ErrorTypeInternal)); len(filteredErrs) < len(allErrs) { + return allErrs.ToAggregate() + } + return gardencorev1beta1helper.NewErrorWithCodes(allErrs.ToAggregate().Error(), gardencorev1beta1.ErrorConfigurationProblem) + } + + return nil +} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/mutator.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/mutator.go index 2605c3a21..d8b3a0978 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/mutator.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/mutator.go @@ -56,6 +56,10 @@ type Ensurer interface { // EnsureETCD ensures that the etcds conform to the respective provider requirements. // "old" might be "nil" and must always be checked. EnsureETCD(ctx context.Context, gctx gcontext.GardenContext, new, old *druidv1alpha1.Etcd) error + // EnsureVPNSeedServerDeployment ensures that the vpn-seed-server deployment conforms to the provider requirements. + // "old" might be "nil" and must always be checked. Please note that the vpn-seed-server deployment will only exist + // if the gardenlet's ReversedVPN feature gate is enabeld. + EnsureVPNSeedServerDeployment(ctx context.Context, gctx gcontext.GardenContext, new, old *appsv1.Deployment) error // EnsureKubeletServiceUnitOptions ensures that the kubelet.service unit options conform to the provider requirements. EnsureKubeletServiceUnitOptions(ctx context.Context, gctx gcontext.GardenContext, new, old []*unit.UnitOption) ([]*unit.UnitOption, error) // EnsureKubeletConfiguration ensures that the kubelet configuration conforms to the provider requirements. @@ -157,6 +161,9 @@ func (m *mutator) Mutate(ctx context.Context, new, old client.Object) error { case v1beta1constants.DeploymentNameKubeScheduler: extensionswebhook.LogMutation(m.logger, x.Kind, x.Namespace, x.Name) return m.ensurer.EnsureKubeSchedulerDeployment(ctx, gctx, x, oldDep) + case v1beta1constants.DeploymentNameVPNSeedServer: + extensionswebhook.LogMutation(m.logger, x.Kind, x.Namespace, x.Name) + return m.ensurer.EnsureVPNSeedServerDeployment(ctx, gctx, x, oldDep) } case *druidv1alpha1.Etcd: switch x.Name { diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/noopensurer.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/noopensurer.go index 92bd0439e..0d2569d45 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/noopensurer.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/controlplane/genericmutator/noopensurer.go @@ -56,6 +56,11 @@ func (e *NoopEnsurer) EnsureETCD(ctx context.Context, gctx gcontext.GardenContex return nil } +// EnsureVPNSeedServerDeployment ensures that the vpn-seed-server deployment conforms to the provider requirements. +func (e *NoopEnsurer) EnsureVPNSeedServerDeployment(ctx context.Context, gctx gcontext.GardenContext, new, old *appsv1.Deployment) error { + return nil +} + // EnsureKubeletServiceUnitOptions ensures that the kubelet.service unit options conform to the provider requirements. func (e *NoopEnsurer) EnsureKubeletServiceUnitOptions(ctx context.Context, gctx gcontext.GardenContext, new, old []*unit.UnitOption) ([]*unit.UnitOption, error) { return new, nil diff --git a/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor b/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor index cdf65cfc7..f176b816a 100755 --- a/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor +++ b/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor @@ -1,5 +1,18 @@ #!/usr/bin/env bash +# Configuration Options: +# +# COMPONENT_PREFIXES: Set the image prefix that should be used to +# determine if an image is defined by another component. +# Defaults to "eu.gcr.io/gardener-project/gardener" +# +# GENERIC_DEPENDENCIES: Set images that are generic dependencies with no specific tag. +# Defaults to "hyperkube,kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy" +# +# COMPONENT_CLI_ARGS: Set all component-cli arguments. +# This should be used with care as all defaults are overwritten. +# + set -e repo_root_dir="$1" @@ -9,12 +22,26 @@ descriptor_out_file="${COMPONENT_DESCRIPTOR_PATH}" echo "Enriching component descriptor from ${BASE_DEFINITION_PATH}" if [[ -f "$repo_root_dir/charts/images.yaml" ]]; then + # default environment variables + if [[ -z "${COMPONENT_PREFIXES}" ]]; then + COMPONENT_PREFIXES="eu.gcr.io/gardener-project/gardener" + fi + if [[ -z "${GENERIC_DEPENDENCIES}" ]]; then + GENERIC_DEPENDENCIES="hyperkube,kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy" + fi + + if [[ -z "${COMPONENT_CLI_ARGS}" ]]; then + COMPONENT_CLI_ARGS=" + --comp-desc ${BASE_DEFINITION_PATH} \ + --image-vector "$repo_root_dir/charts/images.yaml" \ + --component-prefixes "${COMPONENT_PREFIXES}" \ + --generic-dependencies "${GENERIC_DEPENDENCIES}" \ + " + fi + # translates all images defined the images.yaml into component descriptor resources. # For detailed documentation see https://github.com/gardener/component-cli/blob/main/docs/reference/components-cli_image-vector_add.md - component-cli image-vector add --comp-desc ${BASE_DEFINITION_PATH} \ - --image-vector "$repo_root_dir/charts/images.yaml" \ - --component-prefixes eu.gcr.io/gardener-project/gardener \ - --generic-dependencies hyperkube,kube-apiserver,kube-controller-manager,kube-scheduler,kube-proxy + component-cli image-vector add ${COMPONENT_CLI_ARGS} fi if [[ -d "$repo_root_dir/charts/" ]]; then diff --git a/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version b/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version index 359daf42b..8ffa5a692 100755 --- a/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version +++ b/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version @@ -114,7 +114,7 @@ elif name == 'vpn2': elif name == 'external-dns-management': names = ['dns-controller-manager'] elif name == 'logging': - names = ['fluent-bit-plugin-installer', 'loki-curator'] + names = ['fluent-bit-plugin-installer', 'loki-curator', 'telegraf'] elif name == 'etcd-custom-image': names = ['etcd'] else: diff --git a/vendor/github.com/gardener/gardener/hack/hook-me.sh b/vendor/github.com/gardener/gardener/hack/hook-me.sh index 729ef0eef..e6cd72ad7 100755 --- a/vendor/github.com/gardener/gardener/hack/hook-me.sh +++ b/vendor/github.com/gardener/gardener/hack/hook-me.sh @@ -14,9 +14,17 @@ # See the License for the specific language governing permissions and # limitations under the License. +QUIC_CLIENT_IMAGE=ghcr.io/mvladev/quic-reverse-http-tunnel/quic-client-tcp:v0.1.2 +QUIC_SERVER_IMAGE=ghcr.io/mvladev/quic-reverse-http-tunnel/quic-server:v0.1.2 + +QUIC_SECRET_NAME=quic-tunnel-certs +QUIC_CLIENT_CONTAINER=gardener-quic-client + +CERTS_DIR=$(pwd)/tmp/certs + checkPrereqs() { command -v host > /dev/null || echo "please install host command for lookup" - command -v inlets > /dev/null || echo "please install the inlets command. For mac, simply use \`brew install inlets\`, for linux \`curl -sLS https://get.inlets.dev | sudo sh\`" + command -v docker > /dev/null || echo "please install docker https://www.docker.com" } createOrUpdateWebhookSVC(){ @@ -26,8 +34,8 @@ namespace=${1:-} providerName=${2:-} [[ -z $providerName ]] && echo "Please specify the provider name (aws,gcp,azure,..etc.)!" && exit 1 -local inletsServerPort=${3:-} -[[ -z $inletsServerPort ]] && echo "Please specify the inlets pod server port!" && exit 1 +local quicServerPort=${3:-} +[[ -z $quicServerPort ]] && echo "Please specify the quic pod server port!" && exit 1 tmpService=$(mktemp) kubectl get svc gardener-extension-provider-$providerName -o yaml > $tmpService @@ -47,9 +55,9 @@ spec: ports: - port: 443 protocol: TCP - targetPort: $inletsServerPort + targetPort: $quicServerPort selector: - app: inlets-server + app: quic-server app.kubernetes.io/instance: provider-$providerName app.kubernetes.io/name: gardener-extension-provider-$providerName type: ClusterIP @@ -57,174 +65,245 @@ EOF } -createInletsLB(){ +createQuicLB(){ namespace=${1:-} [[ -z $namespace ]] && echo "Please specify extension namespace!" && exit 1 +local quicTunnelPort=${2:-} +[[ -z $quicTunnelPort ]] && echo "Please specify the quic pod tunnel port!" && exit 1 + cat <&1 > /dev/null - do - sleep 2s - done - echo $(kubectl -n $namespace get svc inlets-lb -o go-template="{{ index (index .status.loadBalancer.ingress 0).hostname }}") + template="{{ index (index .status.loadBalancer.ingress 0).hostname }}" ;; *) - until host $(kubectl -n $namespace get svc inlets-lb -o go-template="{{ index (index .status.loadBalancer.ingress 0).ip }}") 2>&1 > /dev/null - do - sleep 2s - done - echo $(kubectl -n $namespace get svc inlets-lb -o go-template="{{ index (index .status.loadBalancer.ingress 0).ip }}") ;; + template="{{ index (index .status.loadBalancer.ingress 0).ip }}" + ;; esac + until host $(kubectl -n $namespace get svc quic-lb -o go-template="${template}") 2>&1 > /dev/null + do + sleep 2s + done + echo $(kubectl -n $namespace get svc quic-lb -o go-template="${template}") } -createServerPod(){ +createServerDeploy(){ namespace=${1:-} [[ -z $namespace ]] && echo "Please specify extension namespace!" && exit 1 providerName=${2:-} [[ -z $providerName ]] && echo "Please specify the provider name (aws,gcp,azure,..etc.)!" && exit 1 -local inletsServerPort=${3:-} -[[ -z $inletsServerPort ]] && echo "Please specify the inlets pod server port!" && exit 1 +local quicServerPort=${3:-} +[[ -z $quicServerPort ]] && echo "Please specify the quic pod server port!" && exit 1 + +local quicTunnelPort=${4:-} +[[ -z $quicTunnelPort ]] && echo "Please specify the quic pod tunnel port!" && exit 1 cat < server.conf << EOF +[req] +req_extensions = v3_req +distinguished_name = req_distinguished_name +[req_distinguished_name] +[ v3_req ] +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +extendedKeyUsage = serverAuth +subjectAltName = @alt_names +[alt_names] +DNS.1 = localhost +DNS.2 = quic-tunnel-server +IP.1 = 127.0.0.1 +EOF + + cat > client.conf << EOF +[req] +req_extensions = v3_req +distinguished_name = req_distinguished_name +[req_distinguished_name] +[ v3_req ] +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +extendedKeyUsage = clientAuth +EOF + + # Create a certificate authority + openssl genrsa -out ca.key 2048 + openssl req -x509 -new -nodes -key ca.key -days 100000 -out ca.crt -subj "/CN=quic-tunnel-ca" + + # Create a server certiticate + openssl genrsa -out tls.key 2048 + openssl req -new -key tls.key -out server.csr -subj "/CN=quic-tunnel-server" -config server.conf + openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt -days 100000 -extensions v3_req -extfile server.conf + + # Create a client certiticate + openssl genrsa -out client.key 2048 + openssl req -new -key client.key -out client.csr -subj "/CN=quic-tunnel-client" -config client.conf + openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 100000 -extensions v3_req -extfile client.conf + + # Clean up after we're done. + rm ./*.csr + rm ./*.srl + rm ./*.conf +) +} + +loadCerts() { + local certsDir=${1:-} + local namespace=${2:-} + local secret=${3:-} + [[ -z $certsDir ]] && echo "Please specify local certs Dir!" && exit 1 + [[ -z $namespace ]] && echo "Please specify extension namespace!" && exit 1 + [[ -z $secret ]] && echo "Please specify webhook secret name!" && exit 1 + + # if it already exists, we get rid of it + kubectl -n $namespace delete secret $secret 2>/dev/null || true + + # now create it anew + ( + cd $certsDir + kubectl -n $namespace create secret generic $secret --from-file=ca.crt --from-file=tls.key --from-file=tls.crt + ) +} + + cleanUP() { namespace=${1:-} [[ -z $namespace ]] && echo "Please specify the extension namespace!" && exit 1 echo "cleaning up local-dev setup.." - echo "Deleting inlets service..." - kubectl -n $namespace delete svc/inlets-lb + echo "Deleting quic service..." + kubectl -n $namespace delete svc/quic-lb + + echo "Deleting the quic deploy..." + kubectl -n $namespace delete deploy/quic-server - echo "Deleting the inlets pod..." - kubectl -n $namespace delete pod/inlets-server + echo "Deleting the quic certs..." + kubectl -n $namespace delete secret/quic-tunnel-certs echo "Re-applying old service values..." kubectl apply -f $tmpService - kill -9 $(pgrep inlets) 2>/dev/null + docker kill $QUIC_CLIENT_CONTAINER exit 0 } @@ -238,21 +317,21 @@ usage(){ echo "===================================PRE-REQs=========================================" echo "\`host\` commands for DNS" - echo "\`inlets\` command. For mac, simply use \`brew install inlets\`, for linux \`curl -sLS https://get.inlets.dev | sudo sh\`" + echo "\`docker\` https://www.docker.com" echo "====================================================================================" echo "" echo "========================================================USAGE======================================================================" - echo "> ./hack/hook-me.sh []" + echo "> ./hack/hook-me.sh []" echo "> \`make EXTENSION_NAMESPACE= WEBHOOK_CONFIG_MODE=service start\`" echo "==================================================================================================================================" echo "" echo "===================================CLEAN UP COMMANDS=========================================" - echo "> kubectl -n $namespace delete svc/inlets-lb" - echo "> kubectl -n $namespace delete pod/inlets-server" + echo "> kubectl -n $namespace delete svc/quic-lb" + echo "> kubectl -n $namespace delete deploy/quic-server" echo "=============================================================================================" exit 0 @@ -272,8 +351,11 @@ if [[ "${BASH_SOURCE[0]}" = "$0" ]]; then webhookServerPort=${3:-} [[ -z $webhookServerPort ]] && echo "Please specify webhook server port" && exit 1 - inletsServerPort=${4:-} - [[ -z $inletsServerPort ]] && echo "inlets-server port not specified, using default port of 9443" && inletsServerPort=9443 + quicServerPort=${4:-} + [[ -z $quicServerPort ]] && echo "quic-server port not specified, using default port of 9443" && quicServerPort=9443 + + quicTunnelPort=${5:-} + [[ -z $quicTunnelPort ]] && echo "quic-tunnel port not specified, using default port of 9444" && quicTunnelPort=9444 trap 'cleanUP $namespace' SIGINT SIGTERM @@ -285,28 +367,44 @@ if [[ "${BASH_SOURCE[0]}" = "$0" ]]; then echo "[STEP 1] Checking Pre-reqs!" checkPrereqs - echo "[STEP 2] Creating Inlets LB Service..!" - createInletsLB $namespace && sleep 2s + echo "[STEP 2] Creating Quic LB Service..!" + createQuicLB $namespace $quicTunnelPort && sleep 2s - echo "[STEP 3] Waiting for Inlets LB Service to be created..!"; - output=$(waitForInletsLBToBeReady $namespace $providerName) + echo "[STEP 3] Waiting for Quic LB Service to be created..!"; + output=$(waitForQuicLBToBeReady $namespace $providerName) loadbalancerIPOrHostName=$(echo "$output" | tail -n1) echo "[Info] LB IP is $loadbalancerIPOrHostName" - echo "[STEP 4] Creating the server Pod for TLS Termination and Tunneling connection..!"; - createServerPod $namespace $providerName $inletsServerPort + echo "[STEP 4] Creating the CA, client and server keys and certs..!"; + createCerts $CERTS_DIR + + echo "[STEP 5] Loading quic tunnel certs into cluster..!"; + loadCerts $CERTS_DIR $namespace $QUIC_SECRET_NAME + + echo "[STEP 6] Creating the server Deploy for TLS Termination and Tunneling connection..!"; + createServerDeploy $namespace $providerName $quicServerPort $quicTunnelPort - echo "[STEP 5] Waiting for Inlets Pod to be ready..!"; - waitForInletsPodToBeReady $namespace + echo "[STEP 7] Waiting for Quic Deploy to be ready..!"; + waitForQuicDeployToBeReady $namespace - echo "[STEP 6] Creating WebhookSVC LB..!" - createOrUpdateWebhookSVC $namespace $providerName $inletsServerPort + echo "[STEP 8] Creating WebhookSVC LB..!" + createOrUpdateWebhookSVC $namespace $providerName $quicServerPort - echo "[STEP 7] Initializing the inlets client"; - echo "[Info] Inlets initialized, you are ready to go ahead and run \"make EXTENSION_NAMESPACE=$namespace WEBHOOK_CONFIG_MODE=service start\"" + echo "[STEP 9] Initializing the quic client"; + echo "[Info] Quic 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 + echo "[Step 10] Running quic client" + docker run \ + --name ${QUIC_CLIENT_CONTAINER} \ + --rm \ + -v "$CERTS_DIR":/certs \ + $QUIC_CLIENT_IMAGE \ + --server="$loadbalancerIPOrHostName:$quicTunnelPort" \ + --upstream="host.docker.internal:$webhookServerPort" \ + --ca-file=/certs/ca.crt \ + --cert-file=/certs/client.crt \ + --cert-key=/certs/client.key ;; [Nn]* ) echo "You need to set \`ignoreResources\` to true and generate the controller installlation first in your extension chart before proceeding!"; exit;; * ) echo "Please answer yes or no.";; diff --git a/vendor/github.com/gardener/gardener/hack/install-requirements.sh b/vendor/github.com/gardener/gardener/hack/install-requirements.sh index 9cb27faf9..1d5e70c60 100755 --- a/vendor/github.com/gardener/gardener/hack/install-requirements.sh +++ b/vendor/github.com/gardener/gardener/hack/install-requirements.sh @@ -19,6 +19,7 @@ set -e echo "> Installing requirements" GO111MODULE=off go get -u golang.org/x/tools/cmd/goimports +GO111MODULE=off go get -u github.com/bronze1man/yaml2json export GO111MODULE=on curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.41.1 diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_cloudprofile.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_cloudprofile.go index c68794d8e..3eccfe869 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_cloudprofile.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_cloudprofile.go @@ -71,6 +71,7 @@ type CloudProfileSpec struct { VolumeTypes []VolumeType } +// GetProviderType gets the type of the provider. func (c *CloudProfile) GetProviderType() string { return c.Spec.Type } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_common.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_common.go index 2b2464a2b..8a5969acf 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_common.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_common.go @@ -72,6 +72,8 @@ const ( LastOperationTypeDelete LastOperationType = "Delete" // LastOperationTypeRestore indicates a 'restore' operation. LastOperationTypeRestore LastOperationType = "Restore" + // LastOperationTypeMigrate indicates a 'migrate' operation. + LastOperationTypeMigrate LastOperationType = "Migrate" ) // LastOperationState is a string alias. 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 807009100..34482d0f2 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 @@ -81,6 +81,7 @@ type SeedSpec struct { Ingress *Ingress } +// GetProviderType gets the type of the provider. func (s *Seed) GetProviderType() string { return s.Spec.Provider.Type } 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 2be8aa6f3..9c6917598 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 @@ -100,6 +100,7 @@ type ShootSpec struct { ExposureClassName *string } +// GetProviderType gets the type of the provider. func (s *Shoot) GetProviderType() string { return s.Spec.Provider.Type } @@ -315,18 +316,44 @@ type Kubernetes struct { type ClusterAutoscaler struct { // ScaleDownDelayAfterAdd defines how long after scale up that scale down evaluation resumes (default: 1 hour). ScaleDownDelayAfterAdd *metav1.Duration - // ScaleDownDelayAfterDelete how long after node deletion that scale down evaluation resumes, defaults to scanInterval (defaults to ScanInterval). + // ScaleDownDelayAfterDelete how long after node deletion that scale down evaluation resumes, defaults to scanInterval (default: 0 secs). ScaleDownDelayAfterDelete *metav1.Duration // ScaleDownDelayAfterFailure how long after scale down failure that scale down evaluation resumes (default: 3 mins). ScaleDownDelayAfterFailure *metav1.Duration // ScaleDownUnneededTime defines how long a node should be unneeded before it is eligible for scale down (default: 30 mins). ScaleDownUnneededTime *metav1.Duration - // ScaleDownUtilizationThreshold defines the threshold in % under which a node is being removed + // ScaleDownUtilizationThreshold defines the threshold in fraction (0.0 - 1.0) under which a node is being removed (default: 0.5). ScaleDownUtilizationThreshold *float64 // ScanInterval how often cluster is reevaluated for scale up or down (default: 10 secs). ScanInterval *metav1.Duration + // Expander defines the algorithm to use during scale up (default: least-waste). + // See: https://github.com/gardener/autoscaler/blob/machine-controller-manager-provider/cluster-autoscaler/FAQ.md#what-are-expanders. + Expander *ExpanderMode + // MaxNodeProvisionTime defines how long CA waits for node to be provisioned (default: 20 mins). + MaxNodeProvisionTime *metav1.Duration } +// ExpanderMode is type used for Expander values +type ExpanderMode string + +const ( + // ClusterAutoscalerExpanderLeastWaste selects the node group that will have the least idle CPU (if tied, unused memory) after scale-up. + // This is useful when you have different classes of nodes, for example, high CPU or high memory nodes, and + // only want to expand those when there are pending pods that need a lot of those resources. + // This is the default value. + ClusterAutoscalerExpanderLeastWaste ExpanderMode = "least-waste" + // ClusterAutoscalerExpanderMostPods selects the node group that would be able to schedule the most pods when scaling up. + // This is useful when you are using nodeSelector to make sure certain pods land on certain nodes. + // Note that this won't cause the autoscaler to select bigger nodes vs. smaller, as it can add multiple smaller nodes at once. + ClusterAutoscalerExpanderMostPods ExpanderMode = "most-pods" + // ClusterAutoscalerExpanderPriority selects the node group that has the highest priority assigned by the user. For configurations, + // See: https://github.com/gardener/autoscaler/blob/machine-controller-manager-provider/cluster-autoscaler/expander/priority/readme.md + ClusterAutoscalerExpanderPriority ExpanderMode = "priority" + // ClusterAutoscalerExpanderRandom should be used when you don't have a particular need + // for the node groups to scale differently. + ClusterAutoscalerExpanderRandom ExpanderMode = "random" +) + // VerticalPodAutoscaler contains the configuration flags for the Kubernetes vertical pod autoscaler. type VerticalPodAutoscaler struct { // Enabled specifies whether the Kubernetes VPA shall be enabled for the shoot cluster. 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 index 0b1229de7..a14c61a43 100644 --- 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 @@ -145,8 +145,10 @@ const ( LabelShootProvider = "shoot.gardener.cloud/provider" // LabelNetworkingProvider is used to identify the networking provider for the cni plugin. LabelNetworkingProvider = "networking.shoot.gardener.cloud/provider" + // LabelExtensionPrefix is used to prefix extension specific labels. + LabelExtensionPrefix = "extensions.gardener.cloud/" // LabelExtensionConfiguration is used to identify the provider's configuration which will be added to Gardener configuration - LabelExtensionConfiguration = "extensions.gardener.cloud/configuration" + LabelExtensionConfiguration = LabelExtensionPrefix + "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 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 256fa033e..f8b7ba1dd 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 @@ -321,6 +321,35 @@ func SetDefaults_Worker(obj *Worker) { } } +// SetDefaults_ClusterAutoscaler sets default values for ClusterAutoscaler object. +func SetDefaults_ClusterAutoscaler(obj *ClusterAutoscaler) { + if obj.ScaleDownDelayAfterAdd == nil { + obj.ScaleDownDelayAfterAdd = &metav1.Duration{Duration: 1 * time.Hour} + } + if obj.ScaleDownDelayAfterDelete == nil { + obj.ScaleDownDelayAfterDelete = &metav1.Duration{Duration: 0} + } + if obj.ScaleDownDelayAfterFailure == nil { + obj.ScaleDownDelayAfterFailure = &metav1.Duration{Duration: 3 * time.Minute} + } + if obj.ScaleDownUnneededTime == nil { + obj.ScaleDownUnneededTime = &metav1.Duration{Duration: 30 * time.Minute} + } + if obj.ScaleDownUtilizationThreshold == nil { + obj.ScaleDownUtilizationThreshold = pointer.Float64(0.5) + } + if obj.ScanInterval == nil { + obj.ScanInterval = &metav1.Duration{Duration: 10 * time.Second} + } + if obj.Expander == nil { + leastWaste := ClusterAutoscalerExpanderLeastWaste + obj.Expander = &leastWaste + } + if obj.MaxNodeProvisionTime == nil { + obj.MaxNodeProvisionTime = &metav1.Duration{Duration: 20 * time.Minute} + } +} + // SetDefaults_NginxIngress sets default values for NginxIngress objects. func SetDefaults_NginxIngress(obj *NginxIngress) { if obj.ExternalTrafficPolicy == nil { 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 8e529dedf..7f2daeb8f 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 @@ -4336,603 +4336,606 @@ func init() { } var fileDescriptor_f1caaec5647a9dbf = []byte{ - // 9528 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0xbd, 0x6b, 0x70, 0x24, 0xd7, - 0x75, 0x18, 0xac, 0x1e, 0x60, 0x80, 0xc1, 0x19, 0x00, 0x0b, 0xdc, 0x7d, 0x10, 0x5c, 0x2e, 0x17, - 0xab, 0x96, 0xa8, 0x8f, 0xfc, 0x24, 0x63, 0x4d, 0x51, 0xb2, 0x44, 0x8a, 0xa4, 0x88, 0x99, 0xc1, - 0xee, 0x8e, 0x76, 0xb1, 0x0b, 0xde, 0x59, 0x90, 0xa2, 0xe4, 0x12, 0xd5, 0xe8, 0xbe, 0x18, 0x34, - 0xd1, 0xd3, 0x3d, 0xec, 0xee, 0xc1, 0x02, 0x4b, 0x25, 0x52, 0x68, 0x4b, 0x8a, 0xad, 0x4a, 0x2a, - 0x29, 0x3b, 0xa5, 0x94, 0xa4, 0x92, 0x1f, 0x95, 0x4a, 0x39, 0x95, 0x87, 0x1c, 0xa7, 0xa2, 0x94, - 0x92, 0x94, 0x7f, 0xd8, 0x3f, 0xac, 0x92, 0x53, 0x8a, 0x2b, 0x0f, 0x97, 0xe2, 0xb2, 0xa1, 0x08, - 0x49, 0x25, 0x4e, 0xe2, 0xfc, 0x48, 0xb9, 0xf2, 0x67, 0xcb, 0x49, 0xa5, 0xee, 0xa3, 0x6f, 0xdf, - 0xee, 0xe9, 0x06, 0x06, 0xdd, 0xbb, 0x20, 0xf7, 0x17, 0x30, 0xf7, 0x9e, 0x3e, 0xe7, 0x3e, 0xcf, - 0x3d, 0xe7, 0xdc, 0x73, 0xcf, 0x81, 0x66, 0xd7, 0x0e, 0xb7, 0x06, 0x1b, 0x4b, 0xa6, 0xd7, 0xbb, - 0xdc, 0x35, 0x7c, 0x8b, 0xb8, 0xc4, 0x8f, 0xff, 0xe9, 0x6f, 0x77, 0x2f, 0x1b, 0x7d, 0x3b, 0xb8, - 0x6c, 0x7a, 0x3e, 0xb9, 0xbc, 0xf3, 0xb4, 0xe1, 0xf4, 0xb7, 0x8c, 0xa7, 0x2f, 0x77, 0x69, 0xa5, - 0x11, 0x12, 0x6b, 0xa9, 0xef, 0x7b, 0xa1, 0x87, 0x9e, 0x89, 0x91, 0x2c, 0x45, 0xdf, 0xc6, 0xff, - 0xf4, 0xb7, 0xbb, 0x4b, 0x14, 0xc9, 0x12, 0x45, 0xb2, 0x14, 0x21, 0x39, 0xdf, 0x38, 0x16, 0xe5, - 0x0d, 0x12, 0x0e, 0x13, 0x3e, 0xff, 0x53, 0x2a, 0x0e, 0xaf, 0xeb, 0x5d, 0x66, 0xc5, 0x1b, 0x83, - 0x4d, 0xf6, 0x8b, 0xfd, 0x60, 0xff, 0x09, 0xf0, 0xa7, 0xb6, 0x3f, 0x1e, 0x2c, 0xd9, 0x1e, 0x45, - 0x7c, 0xd9, 0x18, 0x84, 0x5e, 0x60, 0x1a, 0x8e, 0xed, 0x76, 0x2f, 0xef, 0x0c, 0x63, 0xd6, 0x15, - 0x50, 0xd1, 0x84, 0x43, 0x61, 0xfc, 0x0d, 0xc3, 0xcc, 0x82, 0xf9, 0x48, 0x0c, 0xd3, 0x33, 0xcc, - 0x2d, 0xdb, 0x25, 0xfe, 0x5e, 0xd4, 0xb9, 0xcb, 0x3e, 0x09, 0xbc, 0x81, 0x6f, 0x92, 0x63, 0x7d, - 0x15, 0x5c, 0xee, 0x91, 0xd0, 0xc8, 0xa2, 0x75, 0x39, 0xef, 0x2b, 0x7f, 0xe0, 0x86, 0x76, 0x6f, - 0x98, 0xcc, 0xcf, 0x1c, 0xf5, 0x41, 0x60, 0x6e, 0x91, 0x9e, 0x31, 0xf4, 0xdd, 0x33, 0x79, 0xdf, - 0x0d, 0x42, 0xdb, 0xb9, 0x6c, 0xbb, 0x61, 0x10, 0xfa, 0xe9, 0x8f, 0xf4, 0x0f, 0x43, 0x75, 0xd9, - 0xb2, 0x3c, 0x17, 0x3d, 0x05, 0x93, 0xc4, 0x35, 0x36, 0x1c, 0x62, 0x2d, 0x68, 0x97, 0xb4, 0x27, - 0x6b, 0x8d, 0x53, 0xdf, 0xdf, 0x5f, 0x7c, 0xcf, 0xc1, 0xfe, 0xe2, 0xe4, 0x0a, 0x2f, 0xc6, 0x51, - 0xbd, 0xfe, 0xf5, 0x0a, 0x4c, 0xb0, 0x8f, 0x02, 0xf4, 0x4b, 0x1a, 0x9c, 0xde, 0x1e, 0x6c, 0x10, - 0xdf, 0x25, 0x21, 0x09, 0x5a, 0x46, 0xb0, 0xb5, 0xe1, 0x19, 0x3e, 0x47, 0x51, 0xff, 0xf0, 0xb5, - 0xa5, 0x02, 0x4b, 0x70, 0xe9, 0xfa, 0x30, 0xbe, 0xc6, 0x23, 0x07, 0xfb, 0x8b, 0xa7, 0x33, 0x2a, - 0x70, 0x16, 0x75, 0x74, 0x07, 0xa6, 0xdd, 0xae, 0xed, 0xee, 0xb6, 0xdd, 0xae, 0x4f, 0x82, 0x60, - 0xa1, 0xc2, 0x5a, 0xb3, 0x5c, 0xa8, 0x35, 0x37, 0x15, 0x44, 0x8d, 0xb9, 0x83, 0xfd, 0xc5, 0x69, - 0xb5, 0x04, 0x27, 0x08, 0xe9, 0x5f, 0xd1, 0xe0, 0xd4, 0xb2, 0xd5, 0xb3, 0x83, 0xc0, 0xf6, 0xdc, - 0x35, 0x67, 0xd0, 0xb5, 0x5d, 0x74, 0x09, 0xc6, 0x5d, 0xa3, 0x47, 0xd8, 0x90, 0x4c, 0x35, 0xa6, - 0xc5, 0xa8, 0x8e, 0xdf, 0x34, 0x7a, 0x04, 0xb3, 0x1a, 0xf4, 0x32, 0x4c, 0x98, 0x9e, 0xbb, 0x69, - 0x77, 0x45, 0x43, 0x7f, 0x6a, 0x89, 0xcf, 0xe4, 0x92, 0x3a, 0x93, 0xac, 0x7d, 0x62, 0x05, 0x2c, - 0x61, 0xe3, 0xce, 0xca, 0x6e, 0x48, 0x5c, 0x4a, 0xa6, 0x01, 0x07, 0xfb, 0x8b, 0x13, 0x4d, 0x86, - 0x00, 0x0b, 0x44, 0xfa, 0x15, 0xa8, 0x2d, 0x3b, 0xc4, 0x0f, 0x6d, 0xb7, 0x8b, 0x9e, 0x83, 0x59, - 0xd2, 0x33, 0x6c, 0x07, 0x13, 0x93, 0xd8, 0x3b, 0xc4, 0x0f, 0x16, 0xb4, 0x4b, 0x63, 0x4f, 0x4e, - 0x35, 0xd0, 0xc1, 0xfe, 0xe2, 0xec, 0x4a, 0xa2, 0x06, 0xa7, 0x20, 0xf5, 0xb7, 0x35, 0xa8, 0x2f, - 0x0f, 0x2c, 0x3b, 0xe4, 0xf8, 0x51, 0x00, 0x75, 0x83, 0xfe, 0x5c, 0xf3, 0x1c, 0xdb, 0xdc, 0x13, - 0xd3, 0xfc, 0x52, 0xa1, 0x81, 0x5d, 0x8e, 0xf1, 0x34, 0x4e, 0x1d, 0xec, 0x2f, 0xd6, 0x95, 0x02, - 0xac, 0x52, 0xd1, 0xb7, 0x40, 0xad, 0x43, 0xaf, 0xc1, 0x34, 0xef, 0xe5, 0xaa, 0xd1, 0xc7, 0x64, - 0x53, 0x34, 0xe2, 0x7d, 0xca, 0xa0, 0x45, 0x94, 0x96, 0x6e, 0x6d, 0xbc, 0x41, 0xcc, 0x10, 0x93, - 0x4d, 0xe2, 0x13, 0xd7, 0x24, 0x7c, 0xfe, 0x9a, 0xca, 0xc7, 0x38, 0x81, 0x4a, 0xff, 0xb1, 0x06, - 0x73, 0xcb, 0x3b, 0x86, 0xed, 0x18, 0x1b, 0xb6, 0x63, 0x87, 0x7b, 0x9f, 0xf1, 0x5c, 0x32, 0xc2, - 0x04, 0xae, 0xc3, 0x23, 0x03, 0xd7, 0xe0, 0xdf, 0x39, 0x64, 0x95, 0x4f, 0xd9, 0xed, 0xbd, 0x3e, - 0xa1, 0x4b, 0x8f, 0x0e, 0xf5, 0x63, 0x07, 0xfb, 0x8b, 0x8f, 0xac, 0x67, 0x83, 0xe0, 0xbc, 0x6f, - 0x11, 0x86, 0x73, 0x4a, 0xd5, 0x2b, 0x9e, 0x33, 0xe8, 0x09, 0xac, 0x63, 0x0c, 0xeb, 0xf9, 0x83, - 0xfd, 0xc5, 0x73, 0xeb, 0x99, 0x10, 0x38, 0xe7, 0x4b, 0xfd, 0x07, 0x15, 0x98, 0x6e, 0x18, 0xe6, - 0xf6, 0xa0, 0xdf, 0x18, 0x98, 0xdb, 0x24, 0x44, 0x9f, 0x87, 0x1a, 0xe5, 0x5c, 0x96, 0x11, 0x1a, - 0x62, 0x24, 0x7f, 0x3a, 0x77, 0xf9, 0xb1, 0x59, 0xa4, 0xd0, 0xf1, 0xd8, 0xae, 0x92, 0xd0, 0x68, - 0x20, 0x31, 0x26, 0x10, 0x97, 0x61, 0x89, 0x15, 0x75, 0x61, 0x3c, 0xe8, 0x13, 0x53, 0x2c, 0xee, - 0x95, 0x42, 0x8b, 0x45, 0x6d, 0x72, 0xa7, 0x4f, 0xcc, 0x78, 0x1a, 0xe8, 0x2f, 0xcc, 0x08, 0x20, - 0x0f, 0x26, 0x82, 0xd0, 0x08, 0x07, 0x74, 0x7c, 0x28, 0xa9, 0xab, 0xe5, 0x49, 0x31, 0x74, 0x8d, - 0x59, 0x41, 0x6c, 0x82, 0xff, 0xc6, 0x82, 0x8c, 0xfe, 0x23, 0x0d, 0xe6, 0x54, 0xf0, 0x1b, 0x76, - 0x10, 0xa2, 0x9f, 0x1d, 0x1a, 0xd0, 0xa5, 0xd1, 0x06, 0x94, 0x7e, 0xcd, 0x86, 0x73, 0x4e, 0x90, - 0xab, 0x45, 0x25, 0xca, 0x60, 0x6e, 0x42, 0xd5, 0x0e, 0x49, 0x8f, 0x2f, 0xac, 0xa2, 0x3c, 0x4d, - 0x6d, 0x73, 0x63, 0x46, 0x50, 0xab, 0xb6, 0x29, 0x5e, 0xcc, 0xd1, 0xeb, 0x9f, 0x87, 0x33, 0x2a, - 0xd4, 0x9a, 0xef, 0xed, 0xd8, 0x16, 0xf1, 0xe9, 0x66, 0x08, 0xf7, 0xfa, 0x43, 0x9b, 0x81, 0x2e, - 0x2e, 0xcc, 0x6a, 0xd0, 0x07, 0x60, 0xc2, 0x27, 0x5d, 0xdb, 0x73, 0xd9, 0x84, 0x4f, 0xc5, 0x83, - 0x87, 0x59, 0x29, 0x16, 0xb5, 0xfa, 0x7f, 0xaf, 0x24, 0x07, 0x8f, 0x4e, 0x24, 0xba, 0x03, 0xb5, - 0xbe, 0x20, 0x25, 0x06, 0xaf, 0x5d, 0xba, 0x87, 0x51, 0xdb, 0xe3, 0x71, 0x8d, 0x4a, 0xb0, 0x24, - 0x86, 0x6c, 0x98, 0x8d, 0xfe, 0x6f, 0x96, 0xe0, 0xc5, 0x8c, 0xa7, 0xae, 0x25, 0x10, 0xe1, 0x14, - 0x62, 0x74, 0x1b, 0xa6, 0x02, 0x62, 0xfa, 0x84, 0xf2, 0x25, 0xb1, 0x52, 0x33, 0x99, 0x57, 0x27, - 0x02, 0x12, 0xcc, 0x6b, 0x5e, 0x34, 0x7f, 0x4a, 0x56, 0xe0, 0x18, 0x11, 0xba, 0x00, 0xe3, 0x01, - 0x21, 0xd6, 0xc2, 0x38, 0x1b, 0xf4, 0x1a, 0xdb, 0x1a, 0x84, 0x58, 0x98, 0x95, 0xea, 0xbf, 0x3e, - 0x0e, 0x68, 0x78, 0x61, 0xab, 0xbd, 0xe6, 0x25, 0x62, 0xd0, 0xcb, 0xf4, 0x5a, 0xec, 0x91, 0x14, - 0x62, 0xf4, 0x16, 0xcc, 0x38, 0x46, 0x10, 0xde, 0xea, 0x53, 0xf1, 0x23, 0x5a, 0x1d, 0xf5, 0x0f, - 0x37, 0x0a, 0x4d, 0xef, 0x0d, 0x15, 0x53, 0x63, 0xfe, 0x60, 0x7f, 0x71, 0x26, 0x51, 0x84, 0x93, - 0xb4, 0xd0, 0x36, 0x4c, 0xd1, 0x82, 0x15, 0xdf, 0xf7, 0x7c, 0x31, 0xe4, 0x2f, 0x16, 0x26, 0xcc, - 0xb0, 0x34, 0x66, 0xe8, 0x4c, 0xc8, 0x9f, 0x38, 0xc6, 0x8f, 0x3e, 0x05, 0xc8, 0xdb, 0x08, 0x88, - 0xbf, 0x43, 0xac, 0xab, 0x5c, 0xda, 0xa2, 0xdd, 0xa5, 0xf3, 0x32, 0xd6, 0x38, 0x2f, 0xe6, 0x10, - 0xdd, 0x1a, 0x82, 0xc0, 0x19, 0x5f, 0xa1, 0x6d, 0x40, 0x52, 0x62, 0x93, 0xd3, 0xbe, 0x50, 0x1d, - 0x7d, 0xd1, 0x9c, 0xa3, 0xc4, 0xae, 0x0e, 0xa1, 0xc0, 0x19, 0x68, 0xf5, 0xdf, 0xab, 0x40, 0x9d, - 0x2f, 0x92, 0x15, 0x37, 0xf4, 0xf7, 0x4e, 0xe0, 0x68, 0xd8, 0x4c, 0x1c, 0x0d, 0xad, 0x12, 0x5b, - 0x9d, 0xb5, 0x38, 0xf7, 0x64, 0x70, 0x53, 0x27, 0xc3, 0x95, 0xd2, 0x94, 0x0e, 0x3f, 0x18, 0xfe, - 0x50, 0x83, 0x53, 0x0a, 0xf4, 0x09, 0x9c, 0x0b, 0x24, 0x79, 0x2e, 0xbc, 0x54, 0xb6, 0x83, 0x39, - 0xc7, 0x82, 0x99, 0xe8, 0x17, 0x63, 0xd9, 0x1f, 0x06, 0xd8, 0x60, 0x3c, 0xe5, 0x66, 0x2c, 0x24, - 0xc9, 0x59, 0x6f, 0xc8, 0x1a, 0xac, 0x40, 0x49, 0x66, 0x55, 0xc9, 0x64, 0x56, 0x7f, 0x5e, 0x81, - 0xf9, 0xa1, 0xb1, 0x1e, 0x66, 0x20, 0xda, 0x3b, 0xc5, 0x40, 0x2a, 0xef, 0x08, 0x03, 0x19, 0x2b, - 0xc4, 0x40, 0x9e, 0x84, 0x1a, 0x1d, 0x53, 0x36, 0x37, 0xfc, 0x68, 0x98, 0xa6, 0x2b, 0xa8, 0x23, - 0xca, 0xb0, 0xac, 0xd5, 0x7f, 0x57, 0x83, 0xb1, 0x26, 0x6e, 0xa3, 0x0f, 0x26, 0xc4, 0xdd, 0x47, - 0x54, 0x71, 0xf7, 0xde, 0xfe, 0xe2, 0x64, 0x13, 0xb7, 0x15, 0xc9, 0xf7, 0xaf, 0x6b, 0x30, 0x6f, - 0x7a, 0x6e, 0x68, 0xd0, 0xb5, 0x8b, 0xf9, 0xd9, 0x10, 0xad, 0xc1, 0x62, 0x92, 0x5e, 0x33, 0x85, - 0xad, 0xf1, 0xa8, 0x68, 0xc1, 0x7c, 0xba, 0x26, 0xc0, 0xc3, 0xa4, 0xf5, 0x75, 0x98, 0x6a, 0x3a, - 0xde, 0xc0, 0x6a, 0xbb, 0x9b, 0xde, 0x7d, 0x14, 0x56, 0xfe, 0x83, 0x06, 0xd3, 0x0c, 0xef, 0x9a, - 0xef, 0x6d, 0xda, 0x0e, 0x79, 0x48, 0xc4, 0x66, 0xb5, 0xc9, 0x79, 0xcc, 0x91, 0x49, 0xb1, 0x2a, - 0xe0, 0xc3, 0x22, 0xc5, 0xaa, 0x6d, 0xce, 0x61, 0x57, 0xdf, 0x9c, 0x4c, 0x76, 0x8d, 0x31, 0xac, - 0x27, 0xa1, 0x66, 0x1a, 0x8d, 0x81, 0x6b, 0x39, 0x72, 0x65, 0xd0, 0x66, 0x36, 0x97, 0x79, 0x19, - 0x96, 0xb5, 0xe8, 0x2d, 0x80, 0xd8, 0xbc, 0x20, 0x26, 0xe2, 0x6a, 0x49, 0x9b, 0x46, 0x87, 0x84, - 0x54, 0x2b, 0x0f, 0xe2, 0xd9, 0x8f, 0xeb, 0xb0, 0x42, 0x0e, 0xfd, 0x65, 0x98, 0x11, 0xc3, 0xdc, - 0xee, 0x19, 0x5d, 0xa1, 0xf4, 0x15, 0x1d, 0xab, 0x55, 0x05, 0x53, 0xe3, 0xac, 0xa0, 0x3c, 0xa3, - 0x96, 0x06, 0x38, 0x49, 0x0e, 0xdd, 0x85, 0xe9, 0x9e, 0xaa, 0xc9, 0x8e, 0x97, 0x38, 0x58, 0x14, - 0xb5, 0xb6, 0x71, 0x46, 0x50, 0x9f, 0x4e, 0x28, 0xc1, 0x09, 0x5a, 0x19, 0xd2, 0x78, 0xf5, 0x41, - 0x49, 0xe3, 0x9b, 0x30, 0xc9, 0xf7, 0x78, 0xb0, 0x30, 0xc1, 0x7a, 0xf8, 0x89, 0x42, 0x3d, 0xe4, - 0xfc, 0x22, 0x36, 0x9a, 0xf1, 0xdf, 0x01, 0x8e, 0x90, 0xa3, 0x3b, 0x30, 0x4d, 0x59, 0x6d, 0x87, - 0x38, 0xc4, 0x0c, 0x3d, 0x7f, 0x61, 0xb2, 0x84, 0x4d, 0xaa, 0xa3, 0x20, 0xe2, 0x36, 0x0d, 0xb5, - 0x04, 0x27, 0x08, 0x49, 0x26, 0x58, 0xcb, 0x65, 0x82, 0x3b, 0x50, 0xdf, 0x51, 0x8c, 0x0b, 0x53, - 0x6c, 0x18, 0x3e, 0x59, 0xa8, 0x65, 0xb1, 0xa9, 0xa1, 0x71, 0x5a, 0x50, 0xaa, 0xab, 0x66, 0x09, - 0x95, 0x90, 0xfe, 0xd5, 0x09, 0x98, 0x6f, 0x3a, 0x83, 0x20, 0x24, 0xfe, 0xb2, 0xb0, 0xfb, 0x12, - 0x1f, 0xbd, 0xad, 0xc1, 0x39, 0xf6, 0x6f, 0xcb, 0xbb, 0xe3, 0xb6, 0x88, 0x63, 0xec, 0x2d, 0x6f, - 0x52, 0x08, 0xcb, 0x3a, 0x1e, 0x23, 0x6a, 0x0d, 0xc4, 0xe9, 0xce, 0xcc, 0x24, 0x9d, 0x4c, 0x8c, - 0x38, 0x87, 0x12, 0xfa, 0x9a, 0x06, 0x8f, 0x66, 0x54, 0xb5, 0x88, 0x43, 0x42, 0x22, 0x38, 0xc1, - 0x71, 0xdb, 0xf1, 0xf8, 0xc1, 0xfe, 0xe2, 0xa3, 0x9d, 0x3c, 0xa4, 0x38, 0x9f, 0x1e, 0x3d, 0x65, - 0xcf, 0x67, 0xd4, 0x5e, 0x31, 0x6c, 0x67, 0xe0, 0x13, 0x21, 0xd3, 0x1e, 0xb7, 0x39, 0x17, 0x0f, - 0xf6, 0x17, 0xcf, 0x77, 0x72, 0xb1, 0xe2, 0x43, 0x28, 0xa2, 0x2f, 0xc2, 0x59, 0x59, 0xbb, 0xee, - 0xba, 0x84, 0x58, 0xc4, 0xba, 0x6d, 0x0b, 0x11, 0xe3, 0xf8, 0x4d, 0x79, 0xf4, 0x60, 0x7f, 0xf1, - 0x6c, 0x27, 0x0b, 0x21, 0xce, 0xa6, 0x83, 0xba, 0xf0, 0x78, 0x5c, 0x11, 0xda, 0x8e, 0x7d, 0x97, - 0x61, 0xba, 0xbd, 0xe5, 0x93, 0x60, 0xcb, 0x73, 0x2c, 0xc6, 0x2f, 0xb4, 0xc6, 0x7b, 0x0f, 0xf6, - 0x17, 0x1f, 0xef, 0x1c, 0x06, 0x88, 0x0f, 0xc7, 0x83, 0x2c, 0x98, 0x0e, 0x4c, 0xc3, 0x6d, 0xbb, - 0x21, 0xf1, 0x77, 0x0c, 0x67, 0x61, 0xa2, 0x50, 0x07, 0xf9, 0x1e, 0x55, 0xf0, 0xe0, 0x04, 0x56, - 0xfd, 0x7f, 0x68, 0x50, 0x17, 0x3b, 0x81, 0x09, 0x2e, 0x26, 0x54, 0x4d, 0x7a, 0x6c, 0x89, 0x15, - 0xff, 0x62, 0xf1, 0xf3, 0x91, 0xa2, 0x8b, 0x0f, 0x47, 0x56, 0x84, 0x39, 0x6e, 0x74, 0x27, 0xe3, - 0x74, 0x6b, 0x96, 0x3c, 0xdd, 0x18, 0xb9, 0x23, 0x4e, 0x36, 0x7d, 0x7f, 0x0c, 0xa6, 0x9a, 0x9e, - 0x6b, 0xd9, 0x4c, 0x42, 0x7d, 0x3a, 0x21, 0xa4, 0x3d, 0xae, 0xf2, 0xa7, 0x7b, 0xfb, 0x8b, 0x33, - 0x12, 0x50, 0x61, 0x58, 0xcf, 0x4a, 0x75, 0x8e, 0x4b, 0x6d, 0xef, 0x4d, 0xaa, 0x61, 0xf7, 0xf6, - 0x17, 0x4f, 0xc9, 0xcf, 0x92, 0x9a, 0x19, 0xda, 0x01, 0x44, 0x05, 0xed, 0xdb, 0xbe, 0xe1, 0x06, - 0x1c, 0x2d, 0x5d, 0xb6, 0x7c, 0x07, 0xfd, 0xff, 0xa3, 0xcd, 0x2a, 0xfd, 0x22, 0x96, 0xc3, 0x6f, - 0x0c, 0x61, 0xc3, 0x19, 0x14, 0xd0, 0x1b, 0x30, 0x4b, 0x4b, 0xd7, 0xfb, 0x96, 0x11, 0x12, 0x65, - 0xab, 0x1c, 0x87, 0xe6, 0x39, 0x41, 0x73, 0xf6, 0x46, 0x02, 0x13, 0x4e, 0x61, 0xe6, 0x42, 0xad, - 0x11, 0x78, 0x2e, 0xdb, 0x05, 0x09, 0xa1, 0x96, 0x96, 0x62, 0x51, 0x8b, 0x9e, 0x82, 0xc9, 0x1e, - 0x09, 0x02, 0xa3, 0x4b, 0xd8, 0xb2, 0x9e, 0x8a, 0x4f, 0xaf, 0x55, 0x5e, 0x8c, 0xa3, 0x7a, 0xf4, - 0x21, 0xa8, 0x9a, 0x9e, 0x45, 0x82, 0x85, 0x49, 0x66, 0x79, 0x3e, 0xc7, 0x16, 0x13, 0x2d, 0xb8, - 0xb7, 0xbf, 0x38, 0xc5, 0xb4, 0x16, 0xfa, 0x0b, 0x73, 0x20, 0xfd, 0x57, 0xa8, 0x44, 0x99, 0x12, - 0xcd, 0xf3, 0xcc, 0xe8, 0x7c, 0x5a, 0x99, 0x32, 0x71, 0x72, 0x36, 0x38, 0xfd, 0x17, 0x2a, 0x70, - 0x86, 0xb6, 0xd0, 0xf7, 0x1c, 0x87, 0xb2, 0xd9, 0xbe, 0xe3, 0xed, 0xf5, 0x88, 0x7b, 0x12, 0xe6, - 0xf0, 0xe8, 0x3c, 0xae, 0xe4, 0x9e, 0xc7, 0xbd, 0xa1, 0x71, 0x18, 0x2b, 0x32, 0x0e, 0x72, 0xb9, - 0x1c, 0x31, 0x16, 0x7f, 0xaa, 0xc1, 0x42, 0xd6, 0x58, 0x9c, 0x80, 0x1e, 0xe0, 0x26, 0xf5, 0x80, - 0x76, 0x61, 0x8d, 0x31, 0xdd, 0xf6, 0x1c, 0x7d, 0xe0, 0x4f, 0x2b, 0x70, 0x2e, 0x06, 0x6f, 0xbb, - 0x41, 0x68, 0x38, 0x0e, 0x57, 0x94, 0x1f, 0xfc, 0xc4, 0xbf, 0x99, 0x50, 0xe8, 0x6e, 0x95, 0xec, - 0xab, 0xda, 0xf8, 0x5c, 0xbb, 0xd7, 0x5e, 0xca, 0xee, 0xf5, 0xf2, 0xfd, 0x24, 0x7a, 0xb8, 0x09, - 0xec, 0xcf, 0x34, 0x38, 0x9f, 0xfd, 0xe1, 0x09, 0xac, 0xab, 0x7e, 0x72, 0x5d, 0x5d, 0xbf, 0x8f, - 0xdd, 0xce, 0x59, 0x59, 0xbf, 0x55, 0xc9, 0xeb, 0x2e, 0xd3, 0x39, 0x37, 0xe1, 0x14, 0x55, 0x04, - 0x82, 0x50, 0x98, 0x6a, 0x8e, 0x77, 0x6d, 0x19, 0x19, 0x61, 0x4e, 0xe1, 0x24, 0x0e, 0x9c, 0x46, - 0x8a, 0x6e, 0xc2, 0x24, 0x15, 0xfe, 0x29, 0xfe, 0xca, 0xe8, 0xf8, 0x25, 0xdf, 0xef, 0xf0, 0x6f, - 0x71, 0x84, 0x04, 0xfd, 0x2c, 0xcc, 0x58, 0x72, 0x53, 0x1d, 0x71, 0x5f, 0x91, 0xc6, 0xca, 0xac, - 0x6a, 0x2d, 0xf5, 0x6b, 0x9c, 0x44, 0xa6, 0xff, 0x1f, 0x0d, 0x2e, 0x1c, 0xb6, 0xb8, 0x90, 0x0f, - 0x60, 0x46, 0x07, 0x39, 0xbf, 0xb6, 0x2e, 0x2c, 0x0c, 0x45, 0x68, 0xe2, 0x4d, 0x2a, 0x8b, 0x02, - 0xac, 0x50, 0xc9, 0xb8, 0x13, 0xa9, 0x3c, 0xa0, 0x3b, 0x11, 0xfd, 0x7f, 0x6a, 0x2a, 0x3b, 0x52, - 0x27, 0xf7, 0xa1, 0x63, 0x47, 0x6a, 0xe3, 0x73, 0x2d, 0x4d, 0x7f, 0x32, 0x06, 0x97, 0xb2, 0x3f, - 0x51, 0x4e, 0xe0, 0x0b, 0x09, 0x79, 0xb0, 0x96, 0x3a, 0x1b, 0x4f, 0xf0, 0x9e, 0xee, 0x25, 0x98, - 0xe8, 0x73, 0x37, 0x87, 0x31, 0xd6, 0x94, 0x27, 0x29, 0x97, 0xe3, 0x3e, 0x08, 0xf7, 0xf6, 0x17, - 0xcf, 0x67, 0x1d, 0x3b, 0xc2, 0x7b, 0x41, 0x7c, 0x87, 0xec, 0x94, 0xce, 0xcf, 0x45, 0xbe, 0x67, - 0x46, 0x64, 0x74, 0xc6, 0x06, 0x71, 0x46, 0xd6, 0xf2, 0xdf, 0xd6, 0x60, 0x36, 0xb1, 0xb9, 0x82, - 0x85, 0x2a, 0xdb, 0x2e, 0xc5, 0xec, 0xe3, 0x89, 0x6d, 0x1b, 0x4b, 0x12, 0x89, 0xe2, 0x00, 0xa7, - 0x28, 0xa6, 0x78, 0xbe, 0x3a, 0xbf, 0x0f, 0x1f, 0xcf, 0x57, 0x5b, 0x9f, 0xc3, 0xf3, 0xbf, 0x5d, - 0xc9, 0xeb, 0x2e, 0xe3, 0xf9, 0xbb, 0x30, 0x15, 0xb9, 0x92, 0x45, 0xbc, 0xeb, 0x6a, 0xe9, 0x46, - 0x71, 0x7c, 0xf1, 0x5d, 0x70, 0x54, 0x12, 0xe0, 0x98, 0x18, 0xfa, 0xb2, 0x06, 0x10, 0x4f, 0x8d, - 0xd8, 0x21, 0xeb, 0xf7, 0x71, 0x40, 0x14, 0x41, 0x6b, 0x96, 0x32, 0x18, 0x65, 0x5d, 0x28, 0x84, - 0xf5, 0xdf, 0xac, 0x00, 0x1a, 0x6e, 0x3c, 0x95, 0x80, 0xb7, 0x6d, 0xd7, 0x4a, 0x6b, 0x02, 0xd7, - 0x6d, 0xd7, 0xc2, 0xac, 0x66, 0x04, 0x19, 0xf9, 0x05, 0x38, 0xd5, 0x75, 0xbc, 0x0d, 0xc3, 0x71, - 0xf6, 0x84, 0x7f, 0x1a, 0xdb, 0xa5, 0xb5, 0xc6, 0x69, 0x7a, 0x4e, 0x5e, 0x4d, 0x56, 0xe1, 0x34, - 0x2c, 0xea, 0xc3, 0x9c, 0x4f, 0x4c, 0xcf, 0x35, 0x6d, 0x87, 0xe9, 0x4c, 0xde, 0x20, 0x2c, 0x68, - 0xbb, 0x38, 0x73, 0xb0, 0xbf, 0x38, 0x87, 0x53, 0xb8, 0xf0, 0x10, 0x76, 0xf4, 0x04, 0x4c, 0xf6, - 0x7d, 0xbb, 0x67, 0xf8, 0x7b, 0x4c, 0x2b, 0xab, 0x35, 0xea, 0xf4, 0xc0, 0x5d, 0xe3, 0x45, 0x38, - 0xaa, 0xd3, 0xbf, 0xa5, 0xc1, 0x58, 0xeb, 0x66, 0x07, 0xe9, 0x30, 0x61, 0x79, 0x3d, 0xc3, 0x76, - 0xc5, 0x28, 0x31, 0x27, 0xaf, 0x16, 0x2b, 0xc1, 0xa2, 0x06, 0xbd, 0x09, 0x53, 0x11, 0xcb, 0x2a, - 0x77, 0xef, 0xd7, 0xba, 0xd9, 0x91, 0x4e, 0x12, 0x72, 0x65, 0x45, 0x25, 0x01, 0x8e, 0xa9, 0xe8, - 0x06, 0xcc, 0xb7, 0x6e, 0x76, 0xda, 0xae, 0xe9, 0x0c, 0x2c, 0xb2, 0xb2, 0xcb, 0xfe, 0xd0, 0xae, - 0xd9, 0xbc, 0x44, 0x78, 0x96, 0xb1, 0xae, 0x09, 0x20, 0x1c, 0xd5, 0x51, 0x30, 0xc2, 0xbf, 0x10, - 0x5e, 0x51, 0x0c, 0x4c, 0x20, 0xc1, 0x51, 0x9d, 0xfe, 0x47, 0x15, 0xa8, 0x2b, 0x0d, 0x42, 0x3d, - 0x98, 0xe4, 0xfd, 0x8d, 0x9c, 0x13, 0xae, 0x14, 0xed, 0x63, 0xb2, 0xd9, 0x9c, 0x3c, 0x1f, 0xd2, - 0x00, 0x47, 0x34, 0xd4, 0x79, 0xaa, 0xe4, 0xcf, 0x13, 0x5a, 0x02, 0xe0, 0xbe, 0x17, 0xec, 0x66, - 0x8d, 0x1f, 0x10, 0x6c, 0x2b, 0x74, 0x64, 0x29, 0x56, 0x20, 0xe4, 0xa9, 0x36, 0x9e, 0x79, 0xaa, - 0x75, 0xa1, 0x7a, 0xd7, 0x73, 0x49, 0x20, 0xcc, 0xdc, 0xf7, 0xab, 0x87, 0x53, 0x94, 0x65, 0x7d, - 0x86, 0x22, 0xc6, 0x1c, 0xbf, 0xfe, 0x6b, 0x1a, 0x40, 0xcb, 0x08, 0x0d, 0x6e, 0x93, 0x1d, 0xc1, - 0xb5, 0xed, 0x42, 0x62, 0x27, 0xd6, 0x86, 0xae, 0xcf, 0xc6, 0x03, 0xfb, 0x6e, 0xd4, 0x7f, 0x29, - 0x6f, 0x70, 0xec, 0x1d, 0xfb, 0x2e, 0xc1, 0xac, 0x1e, 0x7d, 0x10, 0xa6, 0x88, 0x6b, 0xfa, 0x7b, - 0xfd, 0x50, 0x78, 0xa8, 0xd4, 0xf8, 0xf5, 0xe7, 0x4a, 0x54, 0x88, 0xe3, 0x7a, 0xfd, 0x69, 0x48, - 0x4a, 0x8d, 0x47, 0xb7, 0x52, 0xdf, 0x81, 0xda, 0x8a, 0x6b, 0xf5, 0x3d, 0xdb, 0x0d, 0x47, 0xe8, - 0xd3, 0xe3, 0x30, 0x36, 0xf0, 0x1d, 0xd1, 0xa5, 0xba, 0x00, 0x18, 0x5b, 0xc7, 0x37, 0x30, 0x2d, - 0x47, 0x4f, 0xc1, 0x64, 0x7f, 0xe0, 0xf7, 0xbd, 0x20, 0xea, 0x97, 0x14, 0x8f, 0xd7, 0x78, 0x31, - 0x8e, 0xea, 0xf5, 0x7b, 0x1a, 0xcc, 0xad, 0xec, 0xf6, 0x6d, 0x9f, 0xb9, 0xd9, 0x11, 0x9f, 0xca, - 0x16, 0xf4, 0xfb, 0x1d, 0xfe, 0xaf, 0x68, 0x83, 0xfc, 0x5e, 0x40, 0xe0, 0xa8, 0x1e, 0x6d, 0xc2, - 0x2c, 0x61, 0x9f, 0x33, 0xa6, 0x6a, 0x48, 0xd3, 0xf2, 0x71, 0xac, 0x42, 0xdc, 0x8d, 0x33, 0x81, - 0x05, 0xa7, 0xb0, 0xa2, 0x0e, 0xcc, 0x9a, 0x8e, 0x11, 0x04, 0xf6, 0xa6, 0x6d, 0xc6, 0xb7, 0xc9, - 0x53, 0x8d, 0x0f, 0xd2, 0x6f, 0x9b, 0x89, 0x9a, 0x7b, 0xfb, 0x8b, 0x67, 0x45, 0x3b, 0x93, 0x15, - 0x38, 0x85, 0x42, 0xff, 0x46, 0x05, 0x66, 0x56, 0x76, 0xfb, 0x5e, 0x30, 0xf0, 0x09, 0x03, 0x3d, - 0x01, 0xa1, 0xf5, 0x29, 0x98, 0xdc, 0x32, 0x5c, 0xcb, 0x21, 0xbe, 0x98, 0x3e, 0x39, 0xb6, 0xd7, - 0x78, 0x31, 0x8e, 0xea, 0xd1, 0x17, 0x00, 0x02, 0x73, 0x8b, 0x58, 0x03, 0xc7, 0x76, 0x23, 0x0b, - 0xca, 0x8d, 0x42, 0x1b, 0x2b, 0xd1, 0xc9, 0x8e, 0xc4, 0x29, 0xf6, 0xbb, 0xfc, 0x8d, 0x15, 0x7a, - 0xfa, 0x1f, 0x69, 0x30, 0x9f, 0xf8, 0xee, 0x04, 0x24, 0xa0, 0x6e, 0x52, 0x02, 0x6a, 0x94, 0xef, - 0x6c, 0x8e, 0xe0, 0xf3, 0x8b, 0x15, 0x78, 0x24, 0x67, 0x50, 0x86, 0xee, 0xb9, 0xb4, 0x93, 0xba, - 0xe7, 0xda, 0x81, 0x7a, 0xe8, 0x39, 0xc2, 0xef, 0x21, 0x1a, 0x83, 0x62, 0xb7, 0x58, 0xb7, 0x25, - 0x9e, 0xf8, 0x16, 0x2b, 0x2e, 0x0b, 0xb0, 0x4a, 0x48, 0xff, 0x1d, 0x0d, 0xa6, 0xa4, 0x62, 0x31, - 0x82, 0xcb, 0xc1, 0x09, 0x6a, 0x30, 0x4f, 0x42, 0xcd, 0xb2, 0x03, 0x55, 0x3a, 0x62, 0x37, 0xdd, - 0x2d, 0x51, 0x86, 0x65, 0xad, 0xfe, 0xaf, 0x2a, 0x70, 0x4e, 0xe2, 0x8e, 0x04, 0x35, 0xaa, 0xa5, - 0x8e, 0x22, 0xad, 0x5d, 0x10, 0x1c, 0x57, 0x39, 0x23, 0x14, 0x6e, 0xfb, 0x44, 0x9a, 0x9d, 0xd6, - 0xb3, 0x58, 0x29, 0xba, 0x09, 0xd5, 0x80, 0xd2, 0x13, 0x62, 0xd8, 0x31, 0x47, 0x83, 0x9d, 0x74, - 0xac, 0xbd, 0x98, 0xa3, 0x41, 0x6f, 0xa9, 0xd2, 0x37, 0x57, 0x85, 0x3e, 0x75, 0xbc, 0xc5, 0xc0, - 0x1e, 0xb7, 0x2c, 0xd1, 0x9e, 0x58, 0xd1, 0x88, 0x64, 0x38, 0x63, 0x66, 0x09, 0xe0, 0xfa, 0xbf, - 0xd5, 0xe0, 0x94, 0x6c, 0x9c, 0xb0, 0x65, 0xdc, 0x0f, 0xa9, 0x77, 0xc4, 0xb1, 0x5c, 0x97, 0x66, - 0xbf, 0x42, 0x83, 0x99, 0x67, 0xd2, 0x0b, 0xa0, 0x76, 0x55, 0x0c, 0x16, 0x3a, 0x0f, 0x15, 0x3b, - 0xea, 0x0b, 0x08, 0xf8, 0x4a, 0xbb, 0x85, 0x2b, 0xb6, 0x25, 0x4f, 0xe0, 0x4a, 0xee, 0x09, 0xac, - 0x1c, 0x91, 0x63, 0x87, 0x1f, 0x91, 0xfa, 0xdf, 0xd7, 0xe0, 0x4c, 0x44, 0x35, 0x1a, 0xeb, 0x96, - 0xb0, 0xa3, 0x1f, 0x71, 0xce, 0x1f, 0x3d, 0x9e, 0xb7, 0x60, 0x9c, 0xf1, 0xe2, 0x42, 0xf6, 0x75, - 0x89, 0x90, 0x36, 0x07, 0x33, 0x44, 0xfa, 0x77, 0x34, 0xa8, 0x5f, 0xb3, 0x37, 0x88, 0xef, 0x72, - 0x33, 0xce, 0x13, 0xe9, 0x57, 0x35, 0xf5, 0xac, 0x17, 0x35, 0x68, 0x0f, 0xa6, 0xc4, 0xd9, 0x21, - 0xbd, 0xa7, 0x8a, 0xbd, 0x9d, 0x51, 0x68, 0x0b, 0x9e, 0xac, 0xfa, 0x0d, 0x47, 0x24, 0x70, 0x4c, - 0x4d, 0x7f, 0x0b, 0x4e, 0x67, 0x7c, 0x84, 0x16, 0xd9, 0x76, 0xf4, 0x43, 0x31, 0xbc, 0xd1, 0xfe, - 0xf2, 0x43, 0xcc, 0xcb, 0xd1, 0xa3, 0x30, 0x46, 0xdc, 0xc8, 0x83, 0x6f, 0x92, 0x0a, 0x50, 0x2b, - 0xae, 0x85, 0x69, 0x19, 0x65, 0x3b, 0x8e, 0x97, 0x90, 0x33, 0x18, 0xdb, 0xb9, 0x21, 0xca, 0xb0, - 0xac, 0xd5, 0xff, 0xf9, 0x38, 0x3c, 0x7e, 0xcd, 0xf3, 0xed, 0xbb, 0x9e, 0x1b, 0x1a, 0xce, 0x9a, - 0x67, 0xc5, 0x7e, 0x00, 0x82, 0x85, 0x7d, 0x59, 0x83, 0x47, 0xcc, 0xfe, 0xa0, 0xed, 0xda, 0xa1, - 0x6d, 0x44, 0xd7, 0xb3, 0x6b, 0xc4, 0xb7, 0xbd, 0xa2, 0xee, 0x00, 0xec, 0x2d, 0x46, 0x73, 0x6d, - 0x3d, 0x0b, 0x25, 0xce, 0xa3, 0xc5, 0xbc, 0x12, 0x2c, 0xef, 0x8e, 0xcb, 0x1a, 0xd7, 0x09, 0xd9, - 0xfb, 0x90, 0xbb, 0x71, 0x17, 0x0b, 0x7a, 0x25, 0xb4, 0x32, 0x31, 0xe2, 0x1c, 0x4a, 0xe8, 0x8b, - 0x70, 0xd6, 0xe6, 0x8d, 0xc3, 0xc4, 0xb0, 0x6c, 0x97, 0x04, 0x01, 0xbb, 0x9b, 0x2f, 0x73, 0xed, - 0xde, 0xce, 0x42, 0x88, 0xb3, 0xe9, 0xa0, 0xcf, 0x01, 0x04, 0x7b, 0xae, 0x29, 0xc6, 0xbf, 0x5a, - 0x88, 0x2a, 0x97, 0x9a, 0x24, 0x16, 0xac, 0x60, 0xa4, 0x7a, 0x02, 0x3f, 0x5a, 0x5d, 0x93, 0xdf, - 0x49, 0x6a, 0x5c, 0x4f, 0xb8, 0x1d, 0x15, 0xe2, 0xb8, 0x5e, 0xff, 0x87, 0x1a, 0x4c, 0x8a, 0x87, - 0x57, 0xe8, 0x03, 0x29, 0x75, 0x59, 0xb2, 0xb0, 0x94, 0xca, 0x7c, 0x97, 0x19, 0x94, 0x85, 0x41, - 0x42, 0x1c, 0xbc, 0xc5, 0xb4, 0x2d, 0x41, 0x39, 0x36, 0x6f, 0x24, 0x0c, 0xcb, 0x91, 0xc9, 0x43, - 0xa1, 0xa6, 0xff, 0xaa, 0x06, 0xf3, 0x43, 0x5f, 0x8d, 0x70, 0x2c, 0x9c, 0xe0, 0xb5, 0xe8, 0x97, - 0xeb, 0xc0, 0x5e, 0xd9, 0x2d, 0xaf, 0xb5, 0x3b, 0xc4, 0xdf, 0x91, 0xbb, 0xf0, 0x6b, 0x1a, 0xcc, - 0xc5, 0x17, 0xf8, 0xa2, 0x15, 0x5a, 0x09, 0xc7, 0xc4, 0xeb, 0x29, 0x64, 0x8d, 0x05, 0xd1, 0xf1, - 0xb9, 0x74, 0x0d, 0x1e, 0x22, 0x8c, 0x7e, 0x51, 0x83, 0x39, 0x23, 0xf9, 0xca, 0x2e, 0xe2, 0x9a, - 0xc5, 0x5c, 0xc8, 0x53, 0x4f, 0xf6, 0xe2, 0xc6, 0xa4, 0x2a, 0x02, 0x3c, 0x44, 0x17, 0x7d, 0x04, - 0xa6, 0x8d, 0xbe, 0xbd, 0x3c, 0xb0, 0x6c, 0x2a, 0x17, 0x44, 0x4f, 0xb3, 0x98, 0xb0, 0xba, 0xbc, - 0xd6, 0x96, 0xe5, 0x38, 0x01, 0x25, 0xdf, 0xd1, 0x89, 0xa1, 0x1c, 0x2f, 0xfb, 0x8e, 0x4e, 0x8c, - 0x62, 0xfc, 0x8e, 0x4e, 0x0c, 0x9e, 0x4a, 0x05, 0x7d, 0x16, 0x1e, 0xe5, 0x07, 0x4e, 0xc3, 0x08, - 0x6c, 0x73, 0x79, 0x10, 0x6e, 0x11, 0x37, 0x8c, 0x14, 0x42, 0x6e, 0x94, 0x62, 0x3e, 0x4a, 0x2b, - 0x79, 0x40, 0x38, 0xff, 0x7b, 0xe4, 0x01, 0x78, 0xb6, 0x65, 0x8a, 0x0e, 0x71, 0x37, 0x99, 0x62, - 0xd2, 0xf7, 0xad, 0x76, 0xab, 0x29, 0xfa, 0xc3, 0x78, 0x45, 0xfc, 0x1b, 0x2b, 0x24, 0xd0, 0xdf, - 0xd6, 0x60, 0x46, 0x2c, 0x74, 0x41, 0x74, 0x92, 0x2d, 0x81, 0xcf, 0x16, 0x5e, 0x90, 0xa9, 0x55, - 0xbf, 0x84, 0x55, 0xec, 0xdc, 0x2b, 0x5e, 0xba, 0x4e, 0x26, 0xea, 0x70, 0xb2, 0x21, 0xe8, 0xeb, - 0x1a, 0x9c, 0x09, 0x88, 0xbf, 0x63, 0x9b, 0x64, 0xd9, 0x34, 0xbd, 0x81, 0x1b, 0xcd, 0x73, 0xad, - 0xc4, 0x93, 0xa6, 0x4e, 0x06, 0xc2, 0xc6, 0xc2, 0xc1, 0xfe, 0xe2, 0x99, 0xac, 0x1a, 0x9c, 0xd9, - 0x00, 0xf4, 0x73, 0x1a, 0x9c, 0xba, 0x63, 0x84, 0xe6, 0x56, 0xd3, 0x30, 0xb7, 0x98, 0x85, 0x26, - 0x58, 0x98, 0x2a, 0xf1, 0xf8, 0xe2, 0xd5, 0x24, 0x2e, 0x6e, 0x7d, 0x4d, 0x15, 0xe2, 0x34, 0x45, - 0x14, 0x42, 0xcd, 0x27, 0x6f, 0x0e, 0x48, 0x10, 0x06, 0x0b, 0xc0, 0xa8, 0x7f, 0xaa, 0xfc, 0xa4, - 0x61, 0x81, 0x91, 0x0b, 0x1b, 0xd1, 0x2f, 0x2c, 0x29, 0xa1, 0x2e, 0x3c, 0xce, 0x97, 0xef, 0xb2, - 0xeb, 0xb9, 0x7b, 0x3d, 0x6f, 0x10, 0xa4, 0xb6, 0x40, 0x9d, 0x6d, 0x01, 0xe6, 0x33, 0xb6, 0x72, - 0x18, 0x20, 0x3e, 0x1c, 0xcf, 0xf9, 0x97, 0x00, 0x0d, 0x2f, 0x1d, 0x34, 0x07, 0x63, 0xdb, 0x84, - 0x3f, 0x99, 0x9d, 0xc2, 0xf4, 0x5f, 0x74, 0x06, 0xaa, 0x3b, 0x86, 0x33, 0xe0, 0x02, 0x6a, 0x0d, - 0xf3, 0x1f, 0xcf, 0x55, 0x3e, 0xae, 0xe9, 0xdf, 0xd5, 0xe0, 0x6c, 0x66, 0xe7, 0x10, 0x86, 0x73, - 0x3d, 0x63, 0xf7, 0xa6, 0xe7, 0xae, 0x0e, 0x42, 0x23, 0xb4, 0xdd, 0x6e, 0xdb, 0xdd, 0x74, 0xec, - 0xee, 0x16, 0x17, 0xd4, 0xaa, 0x5c, 0xac, 0x58, 0xcd, 0x84, 0xc0, 0x39, 0x5f, 0xa2, 0x36, 0x9c, - 0xee, 0x19, 0xbb, 0x43, 0x08, 0x2b, 0x0c, 0x21, 0x7b, 0x79, 0xbd, 0x3a, 0x5c, 0x8d, 0xb3, 0xbe, - 0xd1, 0xbf, 0x55, 0x85, 0xc7, 0x68, 0xc3, 0xe3, 0x03, 0x6e, 0xd5, 0x70, 0x8d, 0xee, 0xbb, 0xf4, - 0x20, 0xf9, 0x8e, 0x06, 0x8f, 0x6c, 0x65, 0x8b, 0x9f, 0xe2, 0x8c, 0xc5, 0xc5, 0xa4, 0xf0, 0xc3, - 0x44, 0x5a, 0xbe, 0xc0, 0x0e, 0x05, 0xc1, 0x79, 0xad, 0x42, 0x2f, 0xc1, 0x9c, 0xeb, 0x59, 0xa4, - 0xd9, 0x6e, 0xe1, 0x55, 0x23, 0xd8, 0xee, 0x44, 0xc6, 0xd7, 0x2a, 0xbf, 0x87, 0xb8, 0x99, 0xaa, - 0xc3, 0x43, 0xd0, 0x68, 0x07, 0x50, 0xdf, 0xb3, 0x56, 0x76, 0x6c, 0x33, 0xf2, 0x4d, 0x2b, 0x7e, - 0xf7, 0xc1, 0x1e, 0x97, 0xad, 0x0d, 0x61, 0xc3, 0x19, 0x14, 0x98, 0x00, 0x4d, 0x1b, 0xb3, 0xea, - 0xb9, 0x76, 0xe8, 0xf9, 0x57, 0x7d, 0xc3, 0x24, 0xa5, 0xe4, 0x48, 0xb6, 0xd2, 0x6f, 0x66, 0x62, - 0xc4, 0x39, 0x94, 0xf4, 0xff, 0xa5, 0xc1, 0x29, 0xba, 0x2e, 0xd6, 0x7c, 0x6f, 0x77, 0xef, 0x5d, - 0xb9, 0x24, 0x9f, 0x82, 0xf1, 0x9e, 0x67, 0x45, 0x3a, 0xeb, 0x59, 0x2a, 0x0a, 0xae, 0x7a, 0x16, - 0xb9, 0xc7, 0x2f, 0x64, 0x76, 0xf7, 0xe8, 0x0f, 0xcc, 0x40, 0x54, 0xdd, 0x72, 0x2c, 0x5f, 0xb7, - 0xd4, 0xff, 0x58, 0xe3, 0x32, 0x5d, 0xa4, 0xda, 0xbd, 0x3b, 0xb7, 0xe2, 0xc7, 0x60, 0x86, 0x96, - 0xad, 0x1a, 0xbb, 0x6b, 0xad, 0x57, 0x3c, 0x27, 0xf2, 0xec, 0x64, 0x3e, 0x24, 0xd7, 0xd5, 0x0a, - 0x9c, 0x84, 0xd3, 0xff, 0xf3, 0x2c, 0x30, 0x00, 0x87, 0x84, 0xef, 0xca, 0x8e, 0x3d, 0x0d, 0x75, - 0xb3, 0x3f, 0x68, 0x5e, 0xe9, 0xbc, 0x3c, 0xf0, 0x42, 0x43, 0xdc, 0x29, 0x31, 0x39, 0xad, 0xb9, - 0xb6, 0x1e, 0x15, 0x63, 0x15, 0x86, 0x6e, 0x72, 0xb3, 0x3f, 0x10, 0x8c, 0x73, 0x4d, 0x75, 0x41, - 0x60, 0x9b, 0xbc, 0xb9, 0xb6, 0x9e, 0xa8, 0xc3, 0x43, 0xd0, 0xe8, 0x4b, 0x1a, 0x4c, 0x13, 0xb1, - 0x01, 0xaf, 0x19, 0xbe, 0x25, 0xf6, 0x77, 0xf1, 0x53, 0x56, 0x8e, 0x6e, 0xb4, 0xad, 0xb9, 0x84, - 0xbb, 0xa2, 0xd0, 0xc0, 0x09, 0x8a, 0x4c, 0xd8, 0x14, 0xbf, 0xe9, 0x64, 0x79, 0x56, 0x7a, 0xc7, - 0x57, 0x85, 0xb0, 0x99, 0x07, 0x84, 0xf3, 0xbf, 0x47, 0xff, 0x40, 0x83, 0x73, 0xb2, 0xd6, 0x76, - 0xed, 0xde, 0xa0, 0x87, 0x89, 0xe9, 0x18, 0x76, 0x4f, 0x48, 0x9e, 0x9f, 0xbe, 0x7f, 0x3d, 0x4d, - 0xe2, 0xe7, 0x6c, 0x27, 0xbb, 0x0e, 0xe7, 0xb4, 0x09, 0xfd, 0xaa, 0x06, 0x97, 0xa2, 0xaa, 0x35, - 0xaa, 0xff, 0x0d, 0x7c, 0x12, 0xfb, 0x07, 0x8b, 0x31, 0x99, 0x2c, 0xc4, 0x05, 0xdf, 0x7f, 0xb0, - 0xbf, 0x78, 0x69, 0xe5, 0x08, 0xdc, 0xf8, 0x48, 0xea, 0x89, 0x15, 0xd3, 0xf1, 0x36, 0x43, 0x21, - 0xaa, 0x3e, 0xb0, 0x15, 0x43, 0x69, 0xe0, 0x04, 0x45, 0xf4, 0x9b, 0x1a, 0x3c, 0xa2, 0x16, 0xa8, - 0x0b, 0x86, 0xcb, 0xa8, 0xaf, 0xdd, 0xbf, 0xd6, 0xa4, 0x08, 0x70, 0xab, 0x50, 0x4e, 0x25, 0xce, - 0x6b, 0x16, 0x65, 0xc1, 0x3d, 0xb6, 0x38, 0xb9, 0x1c, 0x5b, 0xe5, 0x2c, 0x98, 0xaf, 0xd7, 0x00, - 0x47, 0x75, 0x54, 0x47, 0xec, 0x7b, 0xd6, 0x9a, 0x6d, 0x05, 0x37, 0xec, 0x9e, 0x1d, 0x32, 0x41, - 0x73, 0x8c, 0x8f, 0xc7, 0x9a, 0x67, 0xad, 0xb5, 0x5b, 0xbc, 0x1c, 0x27, 0xa0, 0xd8, 0x1b, 0x14, - 0xbb, 0x67, 0x74, 0xc9, 0xda, 0xc0, 0x71, 0xd6, 0x7c, 0x8f, 0x59, 0x0e, 0x5a, 0xc4, 0xb0, 0x1c, - 0xdb, 0x25, 0x0b, 0xd3, 0xc5, 0xdf, 0xa0, 0xb4, 0xf3, 0x90, 0xe2, 0x7c, 0x7a, 0x68, 0x09, 0x60, - 0xd3, 0xb0, 0x9d, 0xce, 0x1d, 0xa3, 0x7f, 0xcb, 0x5d, 0x98, 0x61, 0x6c, 0x8c, 0xa9, 0x67, 0x57, - 0x64, 0x29, 0x56, 0x20, 0xd8, 0x82, 0xa2, 0xcc, 0x10, 0x13, 0xfe, 0x26, 0x75, 0x61, 0xf6, 0x7e, - 0x2d, 0xa8, 0x08, 0x23, 0x1f, 0xc0, 0xeb, 0x0a, 0x0d, 0x9c, 0xa0, 0x88, 0xbe, 0xa2, 0xc1, 0x6c, - 0xb0, 0x17, 0x84, 0xa4, 0x27, 0x1b, 0x71, 0xea, 0xbe, 0x37, 0x82, 0x99, 0x55, 0x3a, 0x09, 0x2a, - 0x38, 0x45, 0x15, 0x19, 0xf0, 0x18, 0x1b, 0xd8, 0xab, 0xcd, 0x6b, 0x76, 0x77, 0x4b, 0x3e, 0x2e, - 0x59, 0x23, 0xbe, 0x49, 0xdc, 0x70, 0x61, 0x8e, 0x2d, 0x9d, 0xc5, 0x83, 0xfd, 0xc5, 0xc7, 0xda, - 0xf9, 0x60, 0xf8, 0x30, 0x1c, 0xe8, 0x73, 0x70, 0x5e, 0x54, 0xdf, 0xf0, 0xee, 0x0c, 0x51, 0x98, - 0x67, 0x14, 0xd8, 0x8b, 0x9f, 0x76, 0x2e, 0x14, 0x3e, 0x04, 0x83, 0xbe, 0x5f, 0xe1, 0x1a, 0xc9, - 0xd0, 0x46, 0x42, 0x2f, 0xc0, 0xa9, 0x1e, 0xe9, 0x79, 0xfe, 0xde, 0x72, 0x14, 0x6f, 0x46, 0xd8, - 0xb2, 0x98, 0x2e, 0xb8, 0x9a, 0xac, 0xc2, 0x69, 0x58, 0x7a, 0xd8, 0x31, 0xb2, 0x57, 0x3a, 0xf1, - 0xf7, 0x95, 0xf8, 0xb0, 0x6b, 0xa7, 0xea, 0xf0, 0x10, 0x34, 0x6a, 0xc2, 0xbc, 0x28, 0x6b, 0x53, - 0xb1, 0x2f, 0xb8, 0xe2, 0x93, 0xe8, 0x7a, 0x84, 0xca, 0x4f, 0xf3, 0xed, 0x74, 0x25, 0x1e, 0x86, - 0xa7, 0xbd, 0xa0, 0x3f, 0xd4, 0x56, 0x8c, 0xc7, 0xbd, 0xb8, 0x99, 0xac, 0xc2, 0x69, 0xd8, 0x48, - 0x2e, 0x4f, 0x34, 0xa1, 0x1a, 0xf7, 0xe2, 0x66, 0xaa, 0x0e, 0x0f, 0x41, 0xeb, 0x7f, 0x3c, 0x0e, - 0xef, 0x1b, 0xe1, 0xfc, 0x41, 0xbd, 0xec, 0xe1, 0x3e, 0x82, 0x15, 0x2c, 0x45, 0x77, 0x53, 0x4b, - 0x2f, 0x0f, 0x0c, 0x37, 0xb4, 0xc3, 0xbd, 0x11, 0xa7, 0xa7, 0x9f, 0x33, 0x3d, 0xc7, 0xa7, 0x37, - 0xea, 0x74, 0x06, 0x79, 0xd3, 0x79, 0x7c, 0x92, 0xa3, 0x4f, 0x7f, 0x2f, 0x7b, 0xfa, 0x0b, 0x8e, - 0xea, 0x91, 0xcb, 0xa5, 0x9f, 0xb3, 0x5c, 0x0a, 0x8e, 0xea, 0x08, 0xcb, 0xeb, 0x4f, 0xc6, 0xe1, - 0xfd, 0xa3, 0x1c, 0x84, 0x05, 0xd7, 0x57, 0xc6, 0x51, 0xf3, 0x40, 0xd7, 0x57, 0x9e, 0x23, 0xde, - 0x03, 0x5c, 0x5f, 0x19, 0x24, 0x1f, 0xf4, 0xfa, 0xca, 0x1b, 0xd5, 0x07, 0xb5, 0xbe, 0xf2, 0x46, - 0x75, 0x84, 0xf5, 0xf5, 0xe7, 0xe9, 0xf3, 0x41, 0x1e, 0x7e, 0x6d, 0x18, 0x33, 0xfb, 0x83, 0x82, - 0x4c, 0x8a, 0x5d, 0x2c, 0x36, 0xd7, 0xd6, 0x31, 0xc5, 0x81, 0x30, 0x4c, 0xf0, 0xf5, 0x53, 0x90, - 0x05, 0x31, 0x27, 0x4a, 0xbe, 0x24, 0xb1, 0xc0, 0x44, 0x87, 0x8a, 0xf4, 0xb7, 0x48, 0x8f, 0xf8, - 0x86, 0xd3, 0x09, 0x3d, 0xdf, 0xe8, 0x16, 0xe5, 0x36, 0x6c, 0xa8, 0x56, 0x52, 0xb8, 0xf0, 0x10, - 0x76, 0x3a, 0x20, 0x7d, 0xdb, 0x2a, 0xc8, 0x5f, 0xd8, 0x80, 0xac, 0xb5, 0x5b, 0x98, 0xe2, 0xd0, - 0x7f, 0x50, 0x03, 0xe5, 0x91, 0x25, 0xd5, 0xb9, 0x0c, 0xc7, 0xf1, 0xee, 0xac, 0xf9, 0xf6, 0x8e, - 0xed, 0x90, 0x2e, 0xb1, 0xe4, 0x2b, 0xbc, 0x40, 0xdc, 0x3f, 0x33, 0x01, 0x70, 0x39, 0x0f, 0x08, - 0xe7, 0x7f, 0x4f, 0xc5, 0xd1, 0x79, 0x33, 0xfd, 0x5a, 0xbb, 0xd4, 0x15, 0xda, 0xd0, 0xdb, 0x6f, - 0xbe, 0xa1, 0x86, 0x8a, 0xf1, 0x30, 0x5d, 0xf4, 0x57, 0x34, 0x6e, 0x30, 0x90, 0x16, 0x52, 0x31, - 0x69, 0xd7, 0xee, 0x97, 0xf5, 0x3f, 0x36, 0x3d, 0xc4, 0x46, 0xd8, 0x24, 0x45, 0xf4, 0x6b, 0x1a, - 0x9c, 0xdd, 0xce, 0x32, 0x76, 0x8a, 0xb9, 0x5d, 0x2b, 0xdc, 0x96, 0x1c, 0xf3, 0x29, 0xbf, 0xb1, - 0xcd, 0x04, 0xc0, 0xd9, 0x2d, 0x91, 0xe3, 0x24, 0xad, 0x3f, 0x82, 0x0f, 0x14, 0x1f, 0xa7, 0x94, - 0x1d, 0x29, 0x1e, 0x27, 0x59, 0x81, 0x93, 0x14, 0xd1, 0x9b, 0x30, 0xb5, 0x1d, 0x19, 0xdd, 0x84, - 0x7e, 0xde, 0x2a, 0x4c, 0x5e, 0x31, 0xdd, 0xf1, 0xbb, 0x61, 0x59, 0x88, 0x63, 0x2a, 0xc8, 0x86, - 0xc9, 0x6d, 0xce, 0x8d, 0x84, 0x5e, 0xdd, 0x28, 0x2f, 0xf2, 0x73, 0xe5, 0x4e, 0x14, 0xe1, 0x08, - 0xbf, 0xea, 0xcb, 0x52, 0x3b, 0xc2, 0xdd, 0xf3, 0x9b, 0x1a, 0x9c, 0xdd, 0x21, 0x7e, 0x68, 0x9b, - 0x69, 0x6b, 0xf3, 0x54, 0x09, 0xbd, 0xe4, 0x95, 0x2c, 0x8c, 0x7c, 0xa9, 0x64, 0x56, 0xe1, 0xec, - 0x36, 0xe8, 0xff, 0x55, 0x83, 0x21, 0x83, 0x16, 0xfa, 0x9b, 0x1a, 0x4c, 0x6f, 0x12, 0x23, 0x1c, - 0xf8, 0xe4, 0xaa, 0x11, 0xca, 0x87, 0x0c, 0xaf, 0xde, 0x17, 0x43, 0xda, 0xd2, 0x15, 0x05, 0x33, - 0xbf, 0x60, 0x93, 0xd1, 0x41, 0xd4, 0x2a, 0x9c, 0x68, 0xc2, 0xf9, 0x4f, 0xc2, 0xfc, 0xd0, 0x87, - 0xc7, 0xba, 0x5e, 0xf9, 0x6d, 0x61, 0x12, 0x4d, 0xc7, 0x8d, 0x7d, 0x1d, 0xaa, 0x86, 0x65, 0xc9, - 0xd8, 0x74, 0xcf, 0x15, 0xbc, 0x4c, 0xb6, 0xd4, 0x17, 0x23, 0xec, 0x27, 0xe6, 0x78, 0xd1, 0x15, - 0x40, 0x46, 0xe2, 0xae, 0x68, 0xd5, 0xb3, 0x22, 0x75, 0x89, 0x19, 0xd3, 0x97, 0x87, 0x6a, 0x71, - 0xc6, 0x17, 0xfa, 0x27, 0x60, 0x36, 0xf9, 0xe6, 0xfe, 0x18, 0x4e, 0xc7, 0xfa, 0x2f, 0x68, 0x80, - 0x86, 0xe3, 0xd1, 0xa0, 0x00, 0x6a, 0x02, 0x22, 0x9a, 0xe4, 0x95, 0xa2, 0x0e, 0xa4, 0x09, 0x7f, - 0xe8, 0xd8, 0x65, 0x55, 0x14, 0x04, 0x58, 0x12, 0xd2, 0xff, 0x42, 0x83, 0x38, 0x06, 0x16, 0xfa, - 0x28, 0xd4, 0x2d, 0x12, 0x98, 0xbe, 0xdd, 0x0f, 0xe3, 0x8e, 0x48, 0x0f, 0xcc, 0x56, 0x5c, 0x85, - 0x55, 0x38, 0xa4, 0xc3, 0x44, 0x68, 0x04, 0xdb, 0xed, 0x96, 0x50, 0x1c, 0xd9, 0x31, 0x7f, 0x9b, - 0x95, 0x60, 0x51, 0x13, 0x3f, 0x60, 0x1f, 0x1b, 0xe1, 0x01, 0x3b, 0xda, 0xbc, 0x0f, 0xaf, 0xf5, - 0xd1, 0xd1, 0x2f, 0xf5, 0xf5, 0x7f, 0x53, 0x81, 0x64, 0xdc, 0xb1, 0xa2, 0x43, 0x30, 0x1c, 0x5e, - 0xa0, 0xf2, 0xc0, 0xc2, 0x0b, 0x7c, 0x88, 0xc5, 0xe8, 0xe4, 0x91, 0x95, 0xf9, 0xdd, 0x93, 0x1a, - 0x58, 0x93, 0x87, 0x45, 0x96, 0x10, 0xe8, 0x59, 0xd5, 0xaf, 0x73, 0xaa, 0xf1, 0xbe, 0x68, 0x5f, - 0x30, 0x67, 0xcd, 0x7b, 0x22, 0x80, 0x82, 0xec, 0x7f, 0xc2, 0x85, 0xf3, 0xa3, 0xc2, 0x7f, 0xaf, - 0x9a, 0x08, 0xf2, 0x10, 0x45, 0x86, 0x98, 0x4f, 0x7c, 0x18, 0x3b, 0xf5, 0xe9, 0xbf, 0xac, 0xc1, - 0xa4, 0x88, 0x2d, 0x34, 0x82, 0x3b, 0x6e, 0x17, 0xaa, 0x4c, 0x5c, 0x2f, 0x25, 0xc9, 0x74, 0xb6, - 0x3c, 0x2f, 0x4c, 0xc4, 0x58, 0x62, 0x0e, 0x73, 0xec, 0x5f, 0xcc, 0xf1, 0xeb, 0xdf, 0x1c, 0x87, - 0x4b, 0x02, 0x64, 0xe8, 0x98, 0x96, 0x9b, 0x70, 0x0f, 0x4e, 0x8b, 0x69, 0x6a, 0xf9, 0x86, 0x2d, - 0xaf, 0xe7, 0x8a, 0x69, 0x60, 0xe2, 0xea, 0x76, 0x08, 0x1d, 0xce, 0xa2, 0x81, 0xbe, 0x00, 0x67, - 0x44, 0xf1, 0x35, 0x62, 0x38, 0xe1, 0x56, 0x44, 0xbb, 0x98, 0x36, 0xc6, 0x1c, 0x13, 0x56, 0x33, - 0xf0, 0xe1, 0x4c, 0x2a, 0xec, 0x7a, 0x50, 0x54, 0x34, 0x7d, 0x62, 0xa8, 0x77, 0x93, 0x25, 0xfc, - 0xeb, 0x56, 0x33, 0x31, 0xe2, 0x1c, 0x4a, 0xcc, 0x94, 0x65, 0xec, 0x32, 0xcd, 0x18, 0x93, 0xd0, - 0xb7, 0x09, 0x77, 0xa0, 0xad, 0x0a, 0x5d, 0x36, 0x59, 0x85, 0xd3, 0xb0, 0xe8, 0x39, 0x98, 0x65, - 0xd7, 0xad, 0xf1, 0x8b, 0xe5, 0x6a, 0x1c, 0x68, 0xfb, 0x66, 0xa2, 0x06, 0xa7, 0x20, 0xf5, 0xdf, - 0xd0, 0x60, 0x5a, 0x5d, 0x40, 0x23, 0xb8, 0xb7, 0xee, 0x28, 0x0c, 0xbb, 0x8c, 0xcf, 0xa8, 0x4a, - 0x76, 0x44, 0x9e, 0x7d, 0x3a, 0xe3, 0x1b, 0x76, 0xef, 0x46, 0x52, 0xcc, 0xbf, 0xd4, 0xbd, 0xdb, - 0xd0, 0x49, 0x22, 0xef, 0xdd, 0xd2, 0x35, 0x78, 0x88, 0x30, 0x7a, 0x15, 0xc6, 0x4c, 0xdf, 0x16, - 0x03, 0xf3, 0xf1, 0x62, 0xfa, 0x09, 0x6e, 0xc7, 0xcf, 0x83, 0x9a, 0xb8, 0x8d, 0x29, 0x46, 0xfd, - 0x7b, 0x63, 0x50, 0x57, 0x42, 0x97, 0xa1, 0xd5, 0x32, 0xfa, 0x6d, 0x8c, 0x3e, 0xd2, 0x71, 0x57, - 0x61, 0xac, 0xdb, 0x1f, 0x14, 0x54, 0x70, 0x25, 0xba, 0xab, 0x14, 0x5d, 0xb7, 0x3f, 0x40, 0xaf, - 0x48, 0x95, 0xb9, 0x98, 0x52, 0x2b, 0x1d, 0x29, 0x53, 0x6a, 0x73, 0xb4, 0x3c, 0xc7, 0x73, 0x97, - 0xa7, 0x0b, 0x93, 0x81, 0xd0, 0xa7, 0xab, 0x25, 0x22, 0xe7, 0x29, 0x43, 0x2d, 0x14, 0x68, 0x2e, - 0x87, 0x47, 0xfa, 0x75, 0x44, 0x84, 0x4a, 0x01, 0x03, 0xf6, 0x9a, 0x81, 0xa9, 0x18, 0x35, 0x2e, - 0x05, 0xac, 0xb3, 0x12, 0x2c, 0x6a, 0xf4, 0xaf, 0x56, 0x00, 0x0d, 0x23, 0x44, 0xef, 0x83, 0x2a, - 0x7b, 0xdb, 0x24, 0x36, 0x9b, 0x12, 0x2e, 0xc9, 0x08, 0x02, 0xcc, 0xeb, 0x50, 0x47, 0xbc, 0x75, - 0x2b, 0x36, 0x33, 0xec, 0xc6, 0x57, 0xd0, 0x53, 0x1e, 0xc6, 0x45, 0xe7, 0xd3, 0x58, 0xee, 0xf9, - 0xb4, 0x0e, 0x93, 0x3d, 0xdb, 0x65, 0x8e, 0x1e, 0xc5, 0x2c, 0x06, 0xfc, 0x4a, 0x8a, 0xa3, 0xc0, - 0x11, 0x2e, 0xfd, 0xc7, 0x15, 0xba, 0x8a, 0x6d, 0x37, 0x24, 0xae, 0xe1, 0x9a, 0x04, 0xdd, 0x05, - 0x30, 0x06, 0xa1, 0xc7, 0x8f, 0x79, 0xb1, 0x98, 0x3f, 0x55, 0x70, 0xc2, 0x24, 0xd6, 0x65, 0x89, - 0x91, 0x5f, 0x15, 0xc5, 0xbf, 0xb1, 0x42, 0x8d, 0xd2, 0x0e, 0xed, 0x1e, 0x79, 0xd5, 0x76, 0x2d, - 0xef, 0x8e, 0x18, 0xdf, 0xd2, 0xb4, 0x6f, 0x4b, 0x8c, 0x9c, 0x76, 0xfc, 0x1b, 0x2b, 0xd4, 0xd0, - 0xa7, 0x61, 0x81, 0x65, 0x00, 0x70, 0x59, 0x6c, 0x48, 0xd1, 0x38, 0xcf, 0x71, 0xa2, 0x83, 0xa7, - 0xd6, 0xb8, 0x70, 0xb0, 0xbf, 0xb8, 0xd0, 0xcc, 0x81, 0xc1, 0xb9, 0x5f, 0xeb, 0xdf, 0xd1, 0xe0, - 0x6c, 0xe6, 0x58, 0xa0, 0xab, 0x30, 0x1f, 0xbb, 0x09, 0xa8, 0x8c, 0xb2, 0x16, 0x07, 0x3b, 0xbd, - 0x9e, 0x06, 0xc0, 0xc3, 0xdf, 0xa0, 0x55, 0x29, 0x2d, 0xa8, 0x8c, 0x58, 0xf8, 0x18, 0x3c, 0x26, - 0x50, 0x65, 0xf1, 0x6a, 0x9c, 0xf5, 0x9d, 0xfe, 0xd9, 0x44, 0x83, 0xe3, 0x01, 0xa3, 0xfb, 0x63, - 0x83, 0x74, 0xa5, 0x73, 0xb5, 0xdc, 0x1f, 0x0d, 0x5a, 0x88, 0x79, 0x1d, 0x7a, 0x5c, 0x7d, 0x10, - 0x20, 0x19, 0x51, 0xf4, 0x28, 0x40, 0x1f, 0x00, 0x08, 0x87, 0x1c, 0xdb, 0xed, 0xa2, 0x2e, 0xd4, - 0x0c, 0x91, 0x9f, 0x42, 0x2c, 0xb6, 0x17, 0x8a, 0x29, 0x5b, 0x02, 0x09, 0x77, 0xfa, 0x8b, 0x7e, - 0x61, 0x89, 0x5c, 0xff, 0x7b, 0x1a, 0x9c, 0xcb, 0x7e, 0xc2, 0x33, 0xc2, 0x09, 0xdb, 0x83, 0xba, - 0x1f, 0x7f, 0x26, 0x56, 0xe6, 0xcf, 0xa8, 0xb1, 0x4f, 0x94, 0x7c, 0x35, 0x54, 0xfa, 0x68, 0xfa, - 0x5e, 0x10, 0xcd, 0x4e, 0x3a, 0x1c, 0x8a, 0x14, 0xe2, 0x95, 0x96, 0x60, 0x15, 0xbf, 0xfe, 0x76, - 0x05, 0xe0, 0x26, 0x09, 0xef, 0x78, 0xfe, 0x36, 0x1d, 0xa3, 0x77, 0xd5, 0x53, 0xb2, 0x0b, 0x30, - 0xde, 0xf7, 0xac, 0x40, 0x30, 0x2a, 0xf6, 0xc6, 0x8b, 0xdd, 0x71, 0xb3, 0x52, 0xb4, 0x08, 0x55, - 0x66, 0x0a, 0x16, 0xc7, 0x01, 0x13, 0x7e, 0xa9, 0xc0, 0x13, 0x60, 0x5e, 0xce, 0xc3, 0x10, 0x33, - 0x7f, 0xd4, 0x40, 0x88, 0xf3, 0x22, 0x0c, 0x31, 0x2f, 0xc3, 0xb2, 0x56, 0xff, 0xf9, 0x71, 0x48, - 0x64, 0x58, 0x89, 0x95, 0xf2, 0xf1, 0x07, 0xa4, 0x94, 0x7f, 0x1a, 0x16, 0x1c, 0xcf, 0xb0, 0x1a, - 0x86, 0x43, 0x97, 0xbd, 0xdf, 0xe1, 0xf3, 0x61, 0xb8, 0x5d, 0x12, 0x65, 0x4a, 0x61, 0x2c, 0xe0, - 0x46, 0x0e, 0x0c, 0xce, 0xfd, 0x1a, 0x0d, 0x94, 0xc4, 0x2e, 0x54, 0x0c, 0x59, 0x2d, 0x9d, 0x81, - 0x66, 0x49, 0x75, 0x46, 0x96, 0x67, 0x73, 0x32, 0xf9, 0x0b, 0xfa, 0x8a, 0x06, 0x67, 0xc9, 0x6e, - 0x48, 0x7c, 0xd7, 0x70, 0x6e, 0xfb, 0xc6, 0xe6, 0xa6, 0x6d, 0x26, 0xbc, 0x88, 0xd6, 0x0e, 0xf6, - 0x17, 0xcf, 0xae, 0x64, 0x01, 0xdc, 0xdb, 0x5f, 0x7c, 0x66, 0x38, 0xc5, 0x52, 0xe4, 0x7a, 0x9c, - 0xf9, 0x09, 0x5b, 0x8e, 0xd9, 0xe4, 0xce, 0x3f, 0x0b, 0xf5, 0x63, 0x78, 0xc0, 0x4e, 0xa9, 0x26, - 0x9a, 0x6f, 0x4f, 0x80, 0xe2, 0xf8, 0x7d, 0x8c, 0x98, 0xbd, 0x7f, 0x47, 0x83, 0x33, 0xa6, 0x63, - 0x13, 0x37, 0x4c, 0x79, 0xf7, 0xf2, 0xad, 0xf1, 0x4a, 0x31, 0x97, 0xf4, 0x3e, 0x71, 0xdb, 0xad, - 0xa6, 0xe7, 0xba, 0xc4, 0x0c, 0x9b, 0x19, 0xd8, 0xb9, 0xbe, 0x93, 0x55, 0x83, 0x33, 0x5b, 0xc3, - 0x3a, 0xc4, 0xca, 0xdb, 0x2d, 0xf5, 0x8d, 0x54, 0x53, 0x94, 0x61, 0x59, 0x8b, 0x9e, 0x86, 0x7a, - 0xd7, 0xf7, 0x06, 0xfd, 0xa0, 0xc9, 0xfc, 0x9b, 0xf8, 0x0e, 0x63, 0xe2, 0xc4, 0xd5, 0xb8, 0x18, - 0xab, 0x30, 0xe8, 0x23, 0x30, 0xcd, 0x7f, 0xae, 0xf9, 0x64, 0xd3, 0xde, 0x15, 0x3b, 0x8e, 0xb9, - 0x4b, 0x5c, 0x55, 0xca, 0x71, 0x02, 0x0a, 0x7d, 0x10, 0xa6, 0xec, 0x20, 0x18, 0x10, 0x7f, 0x1d, - 0xdf, 0x10, 0x01, 0x01, 0x99, 0x81, 0xb5, 0x1d, 0x15, 0xe2, 0xb8, 0x1e, 0xfd, 0x92, 0x06, 0xb3, - 0x3e, 0x79, 0x73, 0x60, 0xfb, 0xc4, 0x62, 0x44, 0x03, 0xe1, 0x7e, 0xdf, 0x29, 0xe9, 0xf3, 0xbf, - 0x84, 0x13, 0x58, 0xf9, 0x4a, 0x97, 0xa6, 0x89, 0x64, 0x25, 0x4e, 0x35, 0x81, 0x8e, 0x55, 0x60, - 0x77, 0x5d, 0xdb, 0xed, 0x2e, 0x3b, 0xdd, 0x60, 0xa1, 0xc6, 0x76, 0x2f, 0x17, 0xbd, 0xe2, 0x62, - 0xac, 0xc2, 0xa0, 0x8f, 0xc1, 0xcc, 0x20, 0xa0, 0x6b, 0xb7, 0x47, 0xf8, 0x00, 0x4f, 0xc5, 0x8e, - 0x87, 0xeb, 0x6a, 0x05, 0x4e, 0xc2, 0x51, 0x6d, 0x2f, 0x2a, 0x10, 0xc3, 0x0c, 0x3c, 0x0a, 0x02, - 0x6d, 0xe7, 0x7a, 0xa2, 0x06, 0xa7, 0x20, 0xcf, 0x2f, 0xc3, 0xe9, 0x8c, 0x6e, 0x1e, 0x6b, 0x83, - 0xfc, 0x46, 0x05, 0xde, 0x7b, 0xe4, 0xb2, 0x44, 0xdf, 0xd6, 0xa0, 0x4e, 0x76, 0x43, 0xdf, 0x90, - 0x6e, 0x90, 0x74, 0x8e, 0xba, 0x0f, 0x66, 0x13, 0x2c, 0xad, 0xc4, 0x94, 0xf8, 0xbc, 0xc9, 0x33, - 0x4f, 0xa9, 0xc1, 0x6a, 0x83, 0xa8, 0xd4, 0xce, 0xa3, 0x64, 0xa8, 0xb6, 0x3b, 0x91, 0x92, 0x42, - 0xd4, 0x9c, 0x7f, 0x11, 0xe6, 0xd2, 0x98, 0x8f, 0x35, 0x54, 0xff, 0xb4, 0x02, 0xd5, 0x35, 0xc7, - 0x38, 0x91, 0xe8, 0x8e, 0x9f, 0x4f, 0x44, 0xd5, 0x2a, 0x16, 0xab, 0x8c, 0xb5, 0x35, 0x37, 0xa6, - 0xdf, 0x56, 0x2a, 0xa6, 0xdf, 0x4b, 0x25, 0x68, 0x1c, 0x1e, 0xc2, 0xef, 0x07, 0x1a, 0x4c, 0x31, - 0xb8, 0x13, 0x88, 0x5d, 0xf0, 0x7a, 0x32, 0x76, 0xc1, 0x73, 0xc5, 0x3b, 0x95, 0x13, 0xb3, 0xe0, - 0x0f, 0xa3, 0xce, 0xb0, 0xd8, 0x4c, 0xaf, 0xa9, 0x39, 0x78, 0x78, 0x6f, 0x9e, 0xcc, 0x8a, 0x69, - 0x77, 0xc3, 0x33, 0x0d, 0x67, 0x28, 0xb0, 0xdd, 0xa1, 0x89, 0x78, 0x5c, 0x98, 0x22, 0x22, 0x16, - 0x49, 0xd4, 0x9b, 0x62, 0xb2, 0x6d, 0x14, 0xd1, 0x24, 0xa6, 0x17, 0x95, 0x04, 0x38, 0x26, 0xa1, - 0xff, 0x76, 0x05, 0xea, 0xca, 0x6c, 0xbe, 0x23, 0x31, 0xf3, 0xae, 0x64, 0x66, 0xac, 0xa8, 0x30, - 0x37, 0xc7, 0x73, 0xc7, 0xc8, 0x56, 0x11, 0x40, 0xdd, 0x8c, 0xc3, 0x20, 0x97, 0x5a, 0xe0, 0x4a, - 0x38, 0x65, 0xe1, 0x6e, 0x1d, 0x17, 0x60, 0x95, 0x8a, 0xfe, 0x2f, 0x2a, 0x30, 0xb9, 0xe6, 0x7b, - 0x74, 0x8e, 0x4f, 0x80, 0x41, 0x6c, 0x24, 0x18, 0x44, 0xc1, 0xcd, 0xcb, 0x5b, 0x9b, 0xcb, 0x22, - 0xde, 0x48, 0xb1, 0x88, 0x46, 0x29, 0x2a, 0x87, 0x33, 0x89, 0x1f, 0x6a, 0x50, 0x17, 0x90, 0x27, - 0xc0, 0x26, 0x8c, 0x24, 0x9b, 0x78, 0xbe, 0x4c, 0xc7, 0x72, 0x18, 0xc5, 0x37, 0x34, 0x98, 0x11, - 0x10, 0xab, 0xa4, 0xb7, 0x41, 0x7c, 0x74, 0x05, 0x26, 0x83, 0x01, 0x9b, 0x4b, 0xd1, 0xa3, 0xc7, - 0x54, 0x56, 0xe1, 0x6f, 0x18, 0x26, 0xcb, 0xbc, 0xc4, 0x41, 0x94, 0x60, 0x9a, 0xbc, 0x00, 0x47, - 0x1f, 0x53, 0x85, 0xce, 0xf7, 0x9c, 0xa1, 0x78, 0x04, 0xd8, 0x73, 0x08, 0x66, 0x35, 0x54, 0x8f, - 0xa2, 0x7f, 0xa3, 0x5b, 0x2a, 0xa6, 0x47, 0xd1, 0xea, 0x00, 0xf3, 0x72, 0xfd, 0xab, 0xe3, 0x72, - 0xb4, 0x19, 0x1f, 0xbb, 0x06, 0x53, 0xa6, 0x4f, 0x8c, 0x90, 0x58, 0x8d, 0xbd, 0x51, 0x1a, 0xc7, - 0x04, 0xba, 0x66, 0xf4, 0x05, 0x8e, 0x3f, 0xa6, 0xa2, 0x93, 0x7a, 0xf1, 0x54, 0x89, 0xc5, 0xcc, - 0xdc, 0x4b, 0xa7, 0xe7, 0xa1, 0xea, 0xdd, 0x71, 0xa5, 0xeb, 0xc5, 0xa1, 0x84, 0x59, 0x57, 0x6e, - 0x51, 0x68, 0xcc, 0x3f, 0x52, 0x63, 0x59, 0x8c, 0x1f, 0x12, 0xcb, 0xa2, 0x07, 0x93, 0x3d, 0x36, - 0x0d, 0xe5, 0x02, 0x1a, 0x26, 0x66, 0x54, 0x0d, 0x74, 0xcd, 0x50, 0xe3, 0x88, 0x06, 0x15, 0x82, - 0xa9, 0x9c, 0x16, 0xf4, 0x0d, 0x93, 0xa8, 0x42, 0xf0, 0xcd, 0xa8, 0x10, 0xc7, 0xf5, 0xe8, 0x6e, - 0x32, 0xe4, 0xcc, 0x64, 0x09, 0x33, 0xa7, 0x68, 0x9f, 0x12, 0x65, 0x86, 0x0f, 0x7e, 0x6e, 0xd8, - 0x99, 0xaf, 0x8d, 0xcb, 0x65, 0x2a, 0x18, 0x7f, 0x76, 0xda, 0x20, 0xad, 0x50, 0xda, 0xa0, 0x67, - 0xa0, 0xda, 0xdf, 0x32, 0x82, 0x68, 0xad, 0x46, 0x51, 0xd9, 0xab, 0x6b, 0xb4, 0xf0, 0xde, 0xfe, - 0xe2, 0xb4, 0x20, 0xcd, 0x7e, 0x63, 0x0e, 0x8b, 0x06, 0x70, 0x3a, 0x08, 0x0d, 0x87, 0x74, 0x6c, - 0x61, 0x3e, 0x0a, 0x42, 0xa3, 0xd7, 0x2f, 0x10, 0x5c, 0x9d, 0x5d, 0x5c, 0x75, 0x86, 0x51, 0xe1, - 0x2c, 0xfc, 0xe8, 0xe7, 0x35, 0x58, 0x60, 0xe5, 0xcb, 0x83, 0xd0, 0xe3, 0x19, 0x13, 0x62, 0xe2, - 0xc7, 0xbf, 0xb7, 0x65, 0xca, 0x7e, 0x27, 0x07, 0x1f, 0xce, 0xa5, 0x84, 0xde, 0x82, 0xb3, 0x8e, - 0x11, 0x84, 0xcb, 0x66, 0x68, 0xef, 0xd8, 0xe1, 0x5e, 0xdc, 0x84, 0xea, 0xb1, 0x9b, 0xc0, 0x7c, - 0x37, 0x6e, 0x64, 0x21, 0xc3, 0xd9, 0x34, 0xf4, 0xff, 0xad, 0x01, 0x1a, 0x5e, 0x42, 0xa8, 0x07, - 0x35, 0x8b, 0x6c, 0x1a, 0x03, 0x27, 0x8c, 0x24, 0x81, 0xd2, 0x01, 0x91, 0x24, 0x77, 0x6e, 0x09, - 0xc4, 0x58, 0x92, 0x40, 0x7d, 0x98, 0xba, 0xb3, 0x65, 0x87, 0xc4, 0xb1, 0x83, 0xf0, 0x7e, 0x05, - 0x60, 0x92, 0xc2, 0xcf, 0xab, 0x11, 0x66, 0x1c, 0x13, 0xd1, 0xff, 0xea, 0x18, 0xd4, 0x8e, 0x91, - 0x9b, 0x72, 0x00, 0x48, 0x04, 0x64, 0xa0, 0x12, 0x13, 0x29, 0x63, 0x34, 0x63, 0x62, 0x4d, 0x73, - 0x08, 0x19, 0xce, 0x20, 0x80, 0xde, 0x82, 0x33, 0xb6, 0xbb, 0xe9, 0x1b, 0x41, 0xe8, 0x0f, 0xcc, - 0x70, 0xe0, 0x93, 0x32, 0x61, 0xdd, 0x99, 0xa5, 0xa1, 0x9d, 0x81, 0x0e, 0x67, 0x12, 0x41, 0x9b, - 0x30, 0x79, 0xc7, 0xf3, 0xb7, 0x29, 0x03, 0x1d, 0x2f, 0x91, 0xe0, 0xe6, 0x55, 0x86, 0x23, 0xe6, - 0x9c, 0xfc, 0x77, 0x80, 0x23, 0xe4, 0xfa, 0xef, 0x6b, 0x50, 0xe5, 0xef, 0xd7, 0x1e, 0x0e, 0x2d, - 0x8b, 0xb5, 0x35, 0x37, 0x54, 0x31, 0xd5, 0x7d, 0x18, 0xc4, 0xc3, 0xa2, 0xfb, 0xb0, 0xc6, 0xe6, - 0x88, 0x34, 0xbf, 0x3f, 0x26, 0x3a, 0xc3, 0x64, 0x86, 0x36, 0x9c, 0x16, 0xe2, 0xef, 0x0d, 0x7b, - 0x93, 0xd0, 0x05, 0xd6, 0x32, 0xf6, 0x02, 0xf1, 0x7e, 0x9c, 0xb1, 0xde, 0xe6, 0x70, 0x35, 0xce, - 0xfa, 0x06, 0xfd, 0x4b, 0x8d, 0x9e, 0xce, 0xa1, 0x6f, 0x9b, 0xe5, 0xc2, 0xee, 0xca, 0xc6, 0x2d, - 0xad, 0x72, 0x6c, 0xdc, 0x7c, 0xb0, 0x1e, 0x1f, 0xd3, 0xac, 0xf4, 0xde, 0xfe, 0xe2, 0x62, 0x86, - 0x79, 0x32, 0x32, 0xa8, 0xd3, 0xa1, 0x7d, 0xfb, 0xc7, 0x87, 0x82, 0x30, 0xe3, 0x7e, 0xd4, 0x64, - 0x74, 0x0d, 0xaa, 0x81, 0xe9, 0xf5, 0xc9, 0x71, 0xa2, 0x9a, 0xcb, 0x11, 0xee, 0xd0, 0x2f, 0x31, - 0x47, 0x70, 0xfe, 0x0d, 0x98, 0x56, 0x5b, 0x9e, 0x61, 0x9e, 0x68, 0xa9, 0xe6, 0x89, 0x63, 0xdf, - 0xe2, 0xa9, 0xe6, 0x8c, 0xdf, 0xa9, 0x80, 0x48, 0x4f, 0x37, 0xc2, 0x15, 0xc6, 0x1b, 0x51, 0x64, - 0xd1, 0x32, 0x39, 0xf9, 0xd2, 0x29, 0xb1, 0xe3, 0x41, 0x50, 0x83, 0x8b, 0x22, 0x0f, 0x26, 0x1c, - 0x63, 0x83, 0x38, 0x51, 0xaa, 0xb2, 0xab, 0x25, 0x32, 0x69, 0xf1, 0xf0, 0xd7, 0x41, 0xca, 0xd0, - 0xcd, 0x0b, 0xb1, 0x20, 0x73, 0xfe, 0x59, 0xa8, 0x2b, 0x60, 0xc7, 0xb2, 0x09, 0xfd, 0x50, 0x83, - 0xe9, 0x44, 0x38, 0xb1, 0x1e, 0x8c, 0xf9, 0xd2, 0x16, 0x50, 0xf4, 0x8e, 0x27, 0xf2, 0x6e, 0x7a, - 0xec, 0x10, 0x20, 0x4c, 0xe9, 0xc8, 0xc8, 0x63, 0x95, 0xfb, 0x15, 0x79, 0xec, 0xeb, 0x1a, 0x9c, - 0x8b, 0x3a, 0x94, 0x0c, 0xc0, 0x81, 0x9e, 0x84, 0x9a, 0xd1, 0xb7, 0x99, 0xe5, 0x57, 0x35, 0x9e, - 0x2f, 0xaf, 0xb5, 0x59, 0x19, 0x96, 0xb5, 0xe8, 0x43, 0x50, 0x8b, 0x96, 0x9e, 0x90, 0xfc, 0x24, - 0xdf, 0x92, 0xb7, 0x56, 0x12, 0x02, 0x3d, 0xa1, 0x44, 0x7f, 0xad, 0xc6, 0x07, 0xb5, 0x24, 0xcc, - 0xef, 0xb8, 0xf5, 0x5f, 0xae, 0xc0, 0x0c, 0xb7, 0x94, 0x34, 0x6c, 0xd7, 0xb2, 0xdd, 0xee, 0x09, - 0x1c, 0x10, 0x89, 0x1c, 0xcb, 0x95, 0xfb, 0x95, 0x63, 0xf9, 0x3a, 0x4c, 0xbc, 0x49, 0x39, 0x55, - 0xb4, 0xc0, 0x47, 0x62, 0x18, 0x72, 0xf1, 0x32, 0x26, 0x17, 0x60, 0x81, 0x82, 0x45, 0x08, 0x4d, - 0x0c, 0xcb, 0xc3, 0x12, 0x21, 0x34, 0xd1, 0xe8, 0xfc, 0x74, 0x18, 0x2c, 0xa3, 0xeb, 0x09, 0x4c, - 0xf5, 0xeb, 0x09, 0x59, 0xe0, 0x85, 0xe2, 0x81, 0x46, 0xf3, 0xac, 0x29, 0xdd, 0x94, 0x35, 0xe5, - 0x93, 0xc5, 0x49, 0x1c, 0x6e, 0x4a, 0xf9, 0x95, 0x0a, 0x00, 0x05, 0xe3, 0xb9, 0x6f, 0x85, 0x9f, - 0x65, 0x9c, 0x0b, 0x7d, 0xea, 0xdd, 0x92, 0xc0, 0x5c, 0x97, 0x49, 0x53, 0xc7, 0x62, 0x9b, 0x7d, - 0x32, 0x61, 0x6a, 0x72, 0x03, 0x8e, 0xdf, 0xa7, 0x0d, 0xa8, 0xff, 0x96, 0x06, 0x2c, 0x47, 0x49, - 0xeb, 0x66, 0x07, 0x7d, 0x0c, 0x66, 0x6c, 0x7e, 0x29, 0xda, 0x52, 0x23, 0xbf, 0xb1, 0x8b, 0x9b, - 0xb6, 0x5a, 0x81, 0x93, 0x70, 0xc8, 0x55, 0xc6, 0xb5, 0x4c, 0xe2, 0x69, 0xd1, 0x10, 0x19, 0x39, - 0x7d, 0x3a, 0x7b, 0x66, 0xf4, 0x9f, 0x54, 0xe0, 0x54, 0x0a, 0x76, 0x04, 0x55, 0xe5, 0xc1, 0x70, - 0x30, 0x25, 0x98, 0xfa, 0xd8, 0x09, 0x04, 0x53, 0x97, 0x71, 0xcd, 0xc7, 0x1f, 0x70, 0x5c, 0xf3, - 0xef, 0x6b, 0xc0, 0x72, 0x1a, 0x9f, 0x00, 0x0f, 0xfd, 0x5c, 0x92, 0x87, 0x3e, 0x5b, 0x78, 0xed, - 0xe4, 0xb0, 0xce, 0xbf, 0xd0, 0x80, 0x85, 0x39, 0x16, 0x9e, 0x20, 0x8a, 0x73, 0x85, 0x96, 0xe3, - 0x5c, 0x71, 0x49, 0xf8, 0x66, 0xa4, 0xec, 0x8a, 0x8a, 0x7f, 0xc6, 0x87, 0x14, 0xf7, 0x8b, 0xb1, - 0x24, 0x2b, 0x19, 0x76, 0xc1, 0x40, 0x6f, 0xc1, 0x4c, 0xb0, 0xe5, 0x79, 0x61, 0xa4, 0xe1, 0x8b, - 0xd9, 0x6b, 0x14, 0x77, 0x8d, 0x8e, 0xfa, 0xc2, 0x77, 0x67, 0x47, 0x45, 0x8e, 0x93, 0xb4, 0xf4, - 0xdf, 0x15, 0xdd, 0x3f, 0xc6, 0x56, 0x39, 0x41, 0xd6, 0xf7, 0x81, 0x14, 0xeb, 0xcb, 0xcb, 0x17, - 0xfd, 0x3d, 0xd1, 0x0b, 0x19, 0x9d, 0xba, 0x0f, 0x33, 0x8e, 0x9a, 0xd0, 0x45, 0x2c, 0xcc, 0x42, - 0xb9, 0x60, 0x64, 0x10, 0xba, 0x44, 0x31, 0x4e, 0x12, 0xa0, 0xfc, 0x31, 0x6a, 0x3c, 0xcf, 0xeb, - 0xca, 0x93, 0x2e, 0xb0, 0x19, 0x58, 0x53, 0x2b, 0x70, 0x12, 0x4e, 0x7f, 0x19, 0xde, 0xcf, 0x9b, - 0xce, 0x7c, 0xd2, 0x57, 0x76, 0x4d, 0x12, 0x04, 0x4d, 0xa3, 0x6f, 0x98, 0x54, 0x0f, 0x61, 0xaf, - 0x3a, 0xb9, 0x8d, 0xf0, 0xa9, 0x74, 0x6c, 0x5b, 0x69, 0x1b, 0x18, 0x8a, 0x41, 0xf4, 0xa5, 0x0a, - 0x2c, 0x2a, 0x38, 0x13, 0xae, 0x34, 0xd1, 0xaa, 0xfb, 0x96, 0x06, 0x75, 0xc3, 0x75, 0xbd, 0xd0, - 0x50, 0x6f, 0xae, 0x48, 0x89, 0xc0, 0xe1, 0xb9, 0xb4, 0x96, 0x96, 0x63, 0x3a, 0xa9, 0x8b, 0x6a, - 0xa5, 0x06, 0xab, 0xcd, 0x39, 0xff, 0x22, 0xcc, 0xa5, 0xbf, 0x3a, 0x96, 0xc2, 0xd1, 0x80, 0xb3, - 0x4a, 0xab, 0x94, 0x80, 0xe9, 0x4f, 0xc1, 0xe4, 0x8e, 0x1d, 0xd8, 0xd1, 0x43, 0x6b, 0x65, 0x18, - 0x5f, 0xe1, 0xc5, 0x38, 0xaa, 0xd7, 0x5f, 0x82, 0xd3, 0x2a, 0x0e, 0xb6, 0x6f, 0x6e, 0x76, 0x8e, - 0x33, 0x11, 0xab, 0x70, 0x49, 0xc1, 0x90, 0xf9, 0x3c, 0xec, 0x38, 0xe8, 0xbe, 0x3c, 0x11, 0x2d, - 0x73, 0xf1, 0x7e, 0xe1, 0xbb, 0x1a, 0x3c, 0x4a, 0xf2, 0x56, 0x8c, 0x58, 0xf3, 0xaf, 0x95, 0x9d, - 0xd2, 0xdc, 0x25, 0x29, 0x22, 0x0a, 0xe5, 0x55, 0xe3, 0xfc, 0xa6, 0xa1, 0xbb, 0x89, 0x6c, 0x01, - 0x65, 0x7c, 0x50, 0x33, 0x67, 0xf9, 0xb0, 0x5c, 0x01, 0xc8, 0x87, 0x5a, 0x20, 0xe6, 0xb2, 0xd4, - 0x2b, 0xd6, 0x8c, 0xb5, 0x21, 0xdc, 0xec, 0xc4, 0x2f, 0x2c, 0xe9, 0xa0, 0x5f, 0xd7, 0xe0, 0x8c, - 0x93, 0xb1, 0x35, 0x04, 0xaf, 0xbf, 0xfd, 0x20, 0xb6, 0x1d, 0x37, 0x5d, 0x66, 0xd5, 0xe0, 0xcc, - 0xb6, 0xa0, 0xbf, 0x9b, 0xfb, 0x5e, 0xb2, 0x5a, 0x22, 0xa5, 0xd1, 0x51, 0x1b, 0xa0, 0xc0, 0xd3, - 0xc9, 0x7f, 0x3d, 0xc9, 0xc5, 0x0f, 0x66, 0x5f, 0x33, 0x61, 0x62, 0x83, 0x49, 0xf0, 0x62, 0xbd, - 0x17, 0xd7, 0x17, 0xb8, 0x22, 0xc0, 0xe5, 0x6b, 0xfe, 0x3f, 0x16, 0xa8, 0xd1, 0x12, 0xc0, 0x86, - 0xe3, 0x99, 0xdb, 0xcd, 0x76, 0x0b, 0x47, 0xac, 0x9d, 0xad, 0xb1, 0x86, 0x2c, 0xc5, 0x0a, 0x04, - 0xfa, 0x2c, 0x8c, 0x59, 0x52, 0xe8, 0x7b, 0xbe, 0x8c, 0xbc, 0x1b, 0xfb, 0xf6, 0xd2, 0x15, 0x45, - 0xb1, 0x22, 0x0f, 0x6a, 0xae, 0x38, 0xe1, 0xc5, 0xfa, 0x29, 0x9e, 0xef, 0x41, 0x8a, 0x0a, 0x52, - 0x42, 0x89, 0x4a, 0xb0, 0x24, 0x42, 0x09, 0x4a, 0x11, 0xbe, 0x5a, 0x92, 0xa0, 0x94, 0xdf, 0x0f, - 0xd3, 0xae, 0xd6, 0x54, 0x69, 0x7c, 0x62, 0x74, 0x69, 0x7c, 0x26, 0x57, 0x12, 0xdf, 0x84, 0x89, - 0xd0, 0x60, 0x3e, 0x22, 0x93, 0x25, 0x5c, 0x34, 0x68, 0x07, 0x6e, 0x53, 0x34, 0xb1, 0x24, 0xc2, - 0x7e, 0x06, 0x58, 0x60, 0xa7, 0xab, 0x91, 0xe7, 0x5c, 0x17, 0x11, 0xbd, 0x8a, 0xaf, 0x46, 0x9e, - 0xd5, 0x87, 0xaf, 0x46, 0xfe, 0x3f, 0x16, 0xa8, 0xd1, 0x36, 0x95, 0x2f, 0xf9, 0x11, 0x20, 0x9e, - 0x32, 0x2f, 0x97, 0xdd, 0x9a, 0x41, 0xe4, 0x21, 0xcc, 0x7f, 0x61, 0x49, 0x00, 0x99, 0x30, 0x29, - 0x14, 0x3a, 0x11, 0x3c, 0xf6, 0xf9, 0x32, 0x01, 0xbc, 0xa3, 0x64, 0x55, 0xfc, 0xdd, 0x62, 0x84, - 0x59, 0xff, 0xde, 0x18, 0xd7, 0xc5, 0xdf, 0x41, 0xa7, 0x9a, 0x2e, 0xd4, 0x22, 0x64, 0xa5, 0x8c, - 0x1b, 0x51, 0xf6, 0x04, 0x3e, 0xa0, 0x32, 0x97, 0x82, 0x44, 0x8e, 0x9a, 0x59, 0xef, 0x11, 0x94, - 0x00, 0x4a, 0x23, 0xbd, 0x45, 0xc8, 0xbe, 0x7d, 0x1e, 0x2f, 0x74, 0xfb, 0xfc, 0x02, 0x9c, 0x8a, - 0x1c, 0x74, 0x2c, 0xc2, 0xec, 0xdf, 0xc2, 0x85, 0x95, 0xbd, 0xc3, 0x6b, 0x26, 0xab, 0x70, 0x1a, - 0x56, 0xbf, 0x0e, 0x53, 0x72, 0x5f, 0xa0, 0xc7, 0x15, 0x19, 0x2d, 0x66, 0x5d, 0xd7, 0xc9, 0x1e, - 0x17, 0xd8, 0x16, 0x13, 0x02, 0x1b, 0x57, 0xae, 0x5e, 0xa1, 0x05, 0x42, 0x76, 0xd3, 0xff, 0x9b, - 0xc6, 0x17, 0x82, 0xc8, 0x98, 0x65, 0x40, 0xbd, 0xc7, 0x03, 0x32, 0xb1, 0x27, 0x39, 0x5a, 0xf1, - 0xc7, 0x40, 0xab, 0x31, 0x1a, 0xac, 0xe2, 0x44, 0xbb, 0xc3, 0x69, 0xdd, 0xae, 0x96, 0xdc, 0xb4, - 0x23, 0x67, 0x77, 0x43, 0xc3, 0xdf, 0xa8, 0xf9, 0xb0, 0xb4, 0xc3, 0xf3, 0x61, 0x1d, 0x9d, 0xf9, - 0x43, 0xff, 0x47, 0x1a, 0x64, 0xc6, 0xab, 0x46, 0x3a, 0x4c, 0x70, 0xef, 0x62, 0x35, 0xe1, 0x1d, - 0x77, 0x3d, 0xc6, 0xa2, 0x06, 0xf9, 0x70, 0x46, 0xb8, 0xee, 0x5e, 0x27, 0x7b, 0x71, 0xa2, 0x35, - 0xb1, 0x3b, 0x46, 0x77, 0xe0, 0x63, 0x91, 0x5a, 0x3a, 0x29, 0x4c, 0x38, 0x13, 0x37, 0x73, 0x1e, - 0x65, 0xf2, 0xd3, 0x43, 0x72, 0xad, 0xc9, 0xda, 0xfa, 0x80, 0x9d, 0x47, 0x39, 0x8d, 0xc3, 0x8d, - 0x99, 0xaf, 0xc1, 0x39, 0x06, 0xb6, 0x6c, 0x31, 0x91, 0x29, 0x20, 0xd6, 0xb2, 0x65, 0xb1, 0x07, - 0x1d, 0x65, 0x13, 0xb4, 0xe9, 0x7f, 0x46, 0xd7, 0x10, 0xc5, 0x9d, 0x4e, 0xb1, 0xf3, 0xe0, 0x67, - 0x88, 0x8a, 0xea, 0x8c, 0x16, 0x29, 0x97, 0x71, 0x20, 0xd5, 0x72, 0xc5, 0x1c, 0x23, 0xb0, 0x63, - 0x49, 0x87, 0xe5, 0x67, 0xcf, 0xea, 0xee, 0xc3, 0x92, 0x9f, 0x3d, 0xab, 0xed, 0x39, 0xb6, 0xaf, - 0x1f, 0x68, 0x30, 0xc5, 0xc0, 0x1f, 0x96, 0x5b, 0x77, 0xd6, 0xd8, 0x9c, 0xce, 0xfc, 0x9e, 0x06, - 0xf3, 0x43, 0x81, 0x01, 0x46, 0x58, 0xfd, 0x27, 0x68, 0xce, 0x7a, 0x22, 0x9d, 0x87, 0xa9, 0x9e, - 0x19, 0x31, 0xe4, 0x55, 0x98, 0x49, 0x98, 0xf1, 0xe4, 0x6b, 0x30, 0x2d, 0xf3, 0x35, 0x98, 0xfa, - 0xd8, 0xab, 0x72, 0xe8, 0x63, 0xaf, 0x7f, 0x32, 0x23, 0xe6, 0x9b, 0x29, 0x4e, 0xaf, 0xc3, 0x04, - 0x7b, 0x91, 0x15, 0x25, 0xfa, 0xfc, 0x44, 0xf1, 0xa7, 0x5e, 0x01, 0x3f, 0x3f, 0xf8, 0xff, 0x58, - 0xa0, 0x45, 0x2d, 0x98, 0x33, 0x1d, 0x6f, 0x40, 0x45, 0xfe, 0x4d, 0xdb, 0x21, 0x37, 0xe3, 0xa3, - 0x4a, 0xbe, 0x2c, 0x6f, 0xa6, 0xea, 0xf1, 0xd0, 0x17, 0xa8, 0xa3, 0xaa, 0x52, 0x1f, 0x2f, 0x6a, - 0xd2, 0xe6, 0x91, 0xbc, 0xa4, 0x0a, 0xe5, 0x03, 0x90, 0x68, 0xea, 0x22, 0x47, 0x9d, 0x17, 0xcb, - 0xb1, 0x96, 0x98, 0x95, 0xc9, 0xa2, 0x00, 0x2b, 0x54, 0x50, 0x00, 0xf5, 0xad, 0x38, 0xf5, 0x93, - 0x50, 0xa4, 0x5e, 0x2a, 0x9b, 0x77, 0x8a, 0x4b, 0x37, 0x4a, 0x01, 0x56, 0xa9, 0xa0, 0x00, 0x20, - 0x16, 0x1e, 0x4b, 0xe5, 0x09, 0x89, 0xc5, 0xd2, 0xb8, 0xa7, 0x71, 0x19, 0x56, 0xc8, 0x50, 0xa2, - 0xae, 0x7c, 0x58, 0x29, 0xfc, 0x34, 0x8b, 0x11, 0x8d, 0xdf, 0x67, 0xc6, 0x44, 0xe3, 0x32, 0xac, - 0x90, 0xa1, 0xc3, 0xdb, 0x8b, 0x9f, 0xd3, 0x0a, 0xf5, 0xeb, 0xa5, 0xb2, 0xef, 0x9a, 0x85, 0xf0, - 0x18, 0x17, 0x60, 0x95, 0x0a, 0xf2, 0x00, 0x7a, 0xf2, 0x99, 0xad, 0xd0, 0xc5, 0x8a, 0xf5, 0x34, - 0x7e, 0xad, 0xcb, 0x0d, 0x0b, 0xf1, 0x6f, 0xac, 0x90, 0xa0, 0xaa, 0x9f, 0x54, 0xc5, 0xa1, 0x84, - 0x96, 0x32, 0x92, 0x1a, 0xfe, 0xd1, 0x58, 0x14, 0xad, 0xb3, 0x7d, 0xfb, 0x98, 0x22, 0x86, 0xde, - 0xdb, 0x5f, 0x9c, 0x66, 0xcc, 0x64, 0x48, 0x2c, 0x8d, 0xad, 0xf6, 0xd3, 0x87, 0x59, 0xed, 0xd1, - 0x55, 0x98, 0x0f, 0xd4, 0xcb, 0x6d, 0xc6, 0x20, 0x66, 0xd8, 0x27, 0xf2, 0x61, 0x76, 0x27, 0x0d, - 0x80, 0x87, 0xbf, 0xe1, 0x1c, 0x90, 0x58, 0xec, 0xfb, 0x59, 0x95, 0x03, 0xf2, 0x32, 0x2c, 0x6b, - 0x87, 0xd2, 0x65, 0x9e, 0x3a, 0xa9, 0x74, 0x99, 0x5f, 0x50, 0xf3, 0x23, 0xce, 0x95, 0xf0, 0xdd, - 0x2a, 0x92, 0x20, 0x31, 0x9d, 0xac, 0x73, 0xfe, 0x84, 0x92, 0x75, 0x52, 0x55, 0x97, 0xa8, 0x89, - 0x4b, 0xd9, 0x0c, 0xa1, 0x58, 0xd5, 0x5d, 0x49, 0x57, 0xe2, 0x61, 0x78, 0xfd, 0xdf, 0x53, 0x95, - 0x30, 0x12, 0x81, 0xc9, 0x09, 0x48, 0x9d, 0x24, 0xa1, 0x17, 0x34, 0xcb, 0xc9, 0xec, 0x24, 0xd7, - 0xe7, 0xf1, 0xdf, 0x69, 0x30, 0x1b, 0x83, 0x9d, 0x80, 0x08, 0x66, 0x25, 0x45, 0xb0, 0x4f, 0x96, - 0xec, 0x58, 0x8e, 0x1c, 0xf6, 0x7f, 0x2b, 0x6a, 0xb7, 0x98, 0xa4, 0x71, 0x47, 0x31, 0xad, 0x68, - 0x25, 0x44, 0xdb, 0xac, 0xc4, 0x94, 0x71, 0x8f, 0x33, 0x4c, 0x2d, 0x5f, 0x4c, 0x1c, 0xf3, 0x65, - 0x5c, 0x26, 0xb3, 0xb3, 0xb5, 0x1e, 0x79, 0xe6, 0xfb, 0xea, 0xb6, 0xe7, 0x5e, 0x4c, 0xcb, 0x05, - 0xdd, 0xf4, 0x94, 0x2e, 0x1f, 0x9e, 0x0d, 0xf5, 0x1f, 0x03, 0xd4, 0x15, 0x95, 0xf1, 0x1d, 0x31, - 0xa6, 0x0d, 0xa0, 0x6e, 0x7a, 0x6e, 0x10, 0xfa, 0x86, 0xf2, 0x2e, 0xaf, 0x2c, 0x51, 0xc9, 0x6f, - 0x9a, 0x31, 0x6a, 0xac, 0xd2, 0xa1, 0xa7, 0xa3, 0x5c, 0x68, 0x63, 0xf7, 0xc3, 0x86, 0x77, 0xd8, - 0xe2, 0xfa, 0x08, 0x40, 0x24, 0x69, 0xc9, 0x34, 0xeb, 0x32, 0x9e, 0x62, 0x3b, 0xb8, 0x26, 0xeb, - 0xb0, 0x02, 0x87, 0xde, 0x82, 0x19, 0x47, 0x8d, 0xa4, 0x26, 0xe4, 0xc0, 0x62, 0xb7, 0xfd, 0x89, - 0x98, 0x6c, 0xfc, 0xae, 0x39, 0x51, 0x84, 0x93, 0xb4, 0xd0, 0x36, 0x4c, 0x39, 0x51, 0xf8, 0x3f, - 0x21, 0x0c, 0xbe, 0x58, 0x98, 0x30, 0xc3, 0xc2, 0x4d, 0xee, 0xf2, 0x27, 0x8e, 0xf1, 0xd3, 0x75, - 0x27, 0x7f, 0x94, 0x33, 0xbb, 0xc7, 0xd4, 0xe4, 0xba, 0x93, 0x45, 0x01, 0x56, 0xa8, 0xe4, 0x98, - 0x45, 0x6b, 0x85, 0xcc, 0xa2, 0x03, 0x38, 0xed, 0x93, 0xd0, 0xdf, 0x6b, 0xee, 0x99, 0x2c, 0x33, - 0xa8, 0x1f, 0xb2, 0x48, 0x7f, 0x53, 0xc5, 0xde, 0xd7, 0xe0, 0x61, 0x54, 0x38, 0x0b, 0x3f, 0x55, - 0xf6, 0xa8, 0xe4, 0x20, 0x9e, 0xb7, 0x33, 0x65, 0x8f, 0xca, 0x15, 0x98, 0x95, 0xa2, 0x8f, 0x42, - 0x3d, 0x24, 0xe6, 0x96, 0x6b, 0x9b, 0x86, 0xd3, 0x6e, 0x09, 0xb1, 0x2c, 0x3e, 0x88, 0xe3, 0x2a, - 0xac, 0xc2, 0xa1, 0x06, 0x8c, 0x0d, 0x6c, 0x4b, 0xc8, 0x63, 0x3f, 0x2d, 0x4d, 0x3c, 0xed, 0xd6, - 0xbd, 0xfd, 0xc5, 0xf7, 0xc6, 0x0e, 0xdc, 0xb2, 0x27, 0x97, 0xfb, 0xdb, 0xdd, 0xcb, 0xe1, 0x5e, - 0x9f, 0x04, 0x4b, 0xeb, 0xed, 0x16, 0xa6, 0x1f, 0x67, 0x99, 0x89, 0x67, 0x46, 0x37, 0x13, 0xa3, - 0x6f, 0x68, 0x70, 0xda, 0x48, 0x5b, 0xa7, 0x48, 0xb0, 0x30, 0x5b, 0x82, 0x2b, 0x67, 0x9b, 0xbc, - 0xe2, 0x58, 0x3c, 0xcb, 0xc3, 0xf4, 0x70, 0x56, 0x23, 0xf4, 0x1b, 0x00, 0xb1, 0x10, 0x53, 0xda, - 0x88, 0xfd, 0x5f, 0xaa, 0x70, 0xb6, 0xec, 0x65, 0x3f, 0x0b, 0xd1, 0xc7, 0x12, 0xa1, 0x2c, 0x6f, - 0x86, 0xc4, 0xbf, 0x75, 0x6b, 0x55, 0x26, 0x89, 0x28, 0x18, 0x23, 0x30, 0x4e, 0xa5, 0x33, 0x84, - 0x11, 0xe7, 0x50, 0x62, 0x02, 0x9c, 0x88, 0x5c, 0x8f, 0xe9, 0x79, 0x37, 0xf0, 0x83, 0x50, 0x38, - 0x20, 0x73, 0x01, 0x2e, 0x5d, 0x89, 0x87, 0xe1, 0xd3, 0x48, 0x78, 0x52, 0x96, 0x71, 0x96, 0x6e, - 0x76, 0x08, 0x09, 0xcf, 0xcc, 0x32, 0x0c, 0xaf, 0x22, 0x91, 0xe9, 0x69, 0x19, 0xef, 0x4c, 0x21, - 0x89, 0x73, 0xd7, 0x0e, 0xc3, 0x23, 0x0b, 0x2e, 0xf8, 0xc4, 0xf4, 0x7a, 0x3d, 0xe2, 0x5a, 0x3c, - 0xbc, 0xab, 0xe1, 0x77, 0x6d, 0xf7, 0x8a, 0x6f, 0x30, 0x40, 0x91, 0x03, 0xf7, 0xd2, 0xc1, 0xfe, - 0xe2, 0x05, 0x7c, 0x08, 0x1c, 0x3e, 0x14, 0x0b, 0xea, 0xc1, 0xa9, 0x01, 0x0b, 0x3d, 0xe5, 0xb7, - 0xdd, 0x90, 0xf8, 0x3b, 0x86, 0x53, 0x30, 0xdb, 0x10, 0xdb, 0x58, 0xeb, 0x49, 0x54, 0x38, 0x8d, - 0x1b, 0xed, 0x51, 0x3e, 0x25, 0x9a, 0xa3, 0x90, 0xac, 0x15, 0x0f, 0x62, 0x89, 0x87, 0xd1, 0xe1, - 0x2c, 0x1a, 0xfa, 0xdf, 0xd2, 0x40, 0xdc, 0x4d, 0xca, 0xac, 0xf4, 0x5a, 0x66, 0x56, 0xfa, 0x0b, - 0x89, 0xdc, 0xe0, 0xb5, 0x94, 0x47, 0xd9, 0x07, 0x14, 0xcf, 0xf6, 0xa9, 0x98, 0xc7, 0x73, 0xcc, - 0x4a, 0xf8, 0xb6, 0xff, 0x0f, 0x26, 0xfb, 0xbe, 0xdd, 0x33, 0xfc, 0x3d, 0x71, 0xdc, 0xce, 0xf0, - 0x67, 0xfa, 0xa6, 0xbf, 0xd7, 0xa7, 0xe7, 0x6c, 0x54, 0xab, 0xff, 0x50, 0x03, 0xf1, 0x35, 0x8b, - 0x19, 0x38, 0x52, 0xc0, 0xb9, 0xa3, 0xd3, 0xa8, 0xc7, 0x21, 0xef, 0xc6, 0xf2, 0x42, 0xde, 0x3d, - 0xa8, 0xf8, 0x71, 0xdf, 0xd5, 0x20, 0x9d, 0xe7, 0x13, 0x3d, 0x01, 0x93, 0xe2, 0x29, 0xa0, 0x78, - 0x4c, 0xc4, 0x9d, 0x42, 0x79, 0x11, 0x8e, 0xea, 0x92, 0x9a, 0x67, 0x19, 0x11, 0x38, 0xfb, 0xb9, - 0xc3, 0x11, 0xc2, 0xe8, 0xfe, 0x2c, 0x4c, 0xf0, 0xb7, 0x6b, 0xe8, 0xe7, 0x32, 0x3d, 0xce, 0x6e, - 0x94, 0x78, 0x1e, 0x57, 0xc0, 0xb1, 0x2c, 0x11, 0xda, 0xa8, 0x72, 0x68, 0x68, 0xa3, 0x0e, 0x0f, - 0x69, 0x59, 0xc6, 0xf0, 0xd8, 0xc4, 0x6d, 0x91, 0x53, 0x41, 0x84, 0xb3, 0x44, 0x83, 0x84, 0x3d, - 0x6e, 0xbc, 0x44, 0xb8, 0x4e, 0x3e, 0x04, 0x8a, 0x55, 0x6e, 0xf6, 0x10, 0x8b, 0x5c, 0xfc, 0x56, - 0xa8, 0x5a, 0xe2, 0x86, 0x53, 0x8c, 0xfa, 0x08, 0x6f, 0x85, 0xe4, 0x6e, 0x9a, 0xc8, 0xdd, 0x4d, - 0x5d, 0x98, 0x14, 0xfb, 0x41, 0x70, 0xc7, 0xe7, 0xcb, 0x04, 0xac, 0x54, 0xde, 0x98, 0xf3, 0x02, - 0x1c, 0x61, 0xa7, 0x67, 0x6e, 0xcf, 0xd8, 0xb5, 0x7b, 0x83, 0x1e, 0xe3, 0x89, 0x55, 0x15, 0x94, - 0x15, 0xe3, 0xa8, 0x9e, 0x81, 0xf2, 0xab, 0x61, 0x26, 0xe6, 0xa9, 0xa0, 0x22, 0x2d, 0x50, 0x54, - 0x8f, 0x3e, 0x03, 0xb5, 0x9e, 0xb1, 0xdb, 0x19, 0xf8, 0x5d, 0x22, 0x0c, 0x71, 0xf9, 0x66, 0x88, - 0x41, 0x68, 0x3b, 0x4b, 0x54, 0x41, 0x09, 0xfd, 0xa5, 0xb6, 0x1b, 0xde, 0xf2, 0x3b, 0xa1, 0x2f, - 0xa3, 0xe8, 0xad, 0x0a, 0x2c, 0x58, 0xe2, 0x43, 0x0e, 0xcc, 0xf6, 0x8c, 0xdd, 0x75, 0xd7, 0x90, - 0xd9, 0x4b, 0xea, 0x05, 0x29, 0xb0, 0x5b, 0x89, 0xd5, 0x04, 0x2e, 0x9c, 0xc2, 0x9d, 0x71, 0x01, - 0x32, 0xfd, 0xa0, 0x2e, 0x40, 0x96, 0xa5, 0x17, 0xce, 0x0c, 0x5b, 0x86, 0x8f, 0x66, 0xdd, 0x21, - 0x1f, 0xee, 0x60, 0xf3, 0xba, 0x74, 0xb0, 0x99, 0x2d, 0x71, 0x6b, 0x71, 0x88, 0x73, 0xcd, 0x0e, - 0xd4, 0x2d, 0x23, 0x34, 0x78, 0x69, 0xb0, 0x70, 0xaa, 0x84, 0xad, 0xa4, 0x25, 0xf1, 0x28, 0x31, - 0xc5, 0x63, 0xdc, 0x58, 0x25, 0x84, 0x6e, 0xf1, 0xec, 0x16, 0x0e, 0x09, 0x63, 0x10, 0x66, 0x2f, - 0x9b, 0xe3, 0x16, 0xd1, 0x28, 0x17, 0xc5, 0x10, 0x00, 0xce, 0xfe, 0x8e, 0x8a, 0xa9, 0xfc, 0x35, - 0xc0, 0x7c, 0x1c, 0xdd, 0x22, 0xf1, 0x80, 0xf0, 0xaf, 0x69, 0x30, 0xc7, 0x53, 0xa7, 0x35, 0xbd, - 0x5e, 0xdf, 0x73, 0x09, 0x9d, 0x18, 0xc4, 0x46, 0xf5, 0x7a, 0x09, 0xfe, 0xd0, 0x49, 0xa1, 0x14, - 0xf7, 0xff, 0xa9, 0x52, 0x3c, 0x44, 0x1a, 0xfd, 0x33, 0x0d, 0x16, 0x7a, 0x39, 0x21, 0xbb, 0x17, - 0x4e, 0x97, 0x70, 0x41, 0x3c, 0x2a, 0x0e, 0x38, 0x4f, 0xeb, 0x78, 0x14, 0x14, 0xce, 0x6d, 0x5c, - 0x59, 0x6f, 0xe5, 0x32, 0x2f, 0x2b, 0xff, 0x12, 0xcc, 0xa5, 0x4f, 0x02, 0x35, 0x1d, 0x87, 0xf6, - 0x60, 0xd3, 0x71, 0xe8, 0x2f, 0xc0, 0xb9, 0xec, 0x59, 0xa7, 0x42, 0x17, 0xcb, 0x6e, 0x23, 0x14, - 0x9d, 0x38, 0x18, 0x24, 0x2d, 0xc4, 0xbc, 0xae, 0xb1, 0xf4, 0xfd, 0x9f, 0x5c, 0x7c, 0xcf, 0x1f, - 0xfc, 0xe4, 0xe2, 0x7b, 0x7e, 0xf4, 0x93, 0x8b, 0xef, 0xf9, 0xd2, 0xc1, 0x45, 0xed, 0xfb, 0x07, - 0x17, 0xb5, 0x3f, 0x38, 0xb8, 0xa8, 0xfd, 0xe8, 0xe0, 0xa2, 0xf6, 0x1f, 0x0f, 0x2e, 0x6a, 0x7f, - 0xe3, 0x3f, 0x5d, 0x7c, 0xcf, 0x67, 0x6a, 0x51, 0x93, 0xfe, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x25, 0x85, 0x06, 0xa6, 0xaa, 0xbb, 0x00, 0x00, + // 9576 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x7d, 0x6d, 0x6c, 0x24, 0xc9, + 0x75, 0x98, 0x7a, 0xc8, 0x21, 0x87, 0x6f, 0x48, 0x2e, 0x59, 0xfb, 0x71, 0xbc, 0xbd, 0xbd, 0xe5, + 0xaa, 0xa5, 0x53, 0xee, 0x22, 0x99, 0xeb, 0xd3, 0x87, 0x75, 0x77, 0xba, 0x3b, 0x1d, 0x67, 0x86, + 0xbb, 0x3b, 0xda, 0xe5, 0x2e, 0xaf, 0x66, 0x79, 0xa7, 0x93, 0x0c, 0x9d, 0x9a, 0xdd, 0xc5, 0x61, + 0x1f, 0x7b, 0xba, 0xe7, 0xba, 0x7b, 0xb8, 0xe4, 0x9e, 0x12, 0x29, 0x67, 0x4b, 0x8e, 0x2d, 0x24, + 0x48, 0x60, 0x07, 0x0a, 0x24, 0x41, 0xfe, 0x40, 0x10, 0x38, 0xc8, 0x87, 0x1c, 0x07, 0x51, 0xa0, + 0x24, 0x70, 0x00, 0xfb, 0x87, 0x05, 0x39, 0x50, 0x8c, 0x7c, 0x18, 0x8a, 0x61, 0x53, 0x11, 0x13, + 0x24, 0x4e, 0xe2, 0xfc, 0x08, 0x8c, 0xfc, 0x59, 0x38, 0x41, 0x50, 0x1f, 0x5d, 0x5d, 0xdd, 0xd3, + 0x4d, 0x0e, 0xbb, 0x77, 0x79, 0xb7, 0xbf, 0xc8, 0xa9, 0x7a, 0xfd, 0x5e, 0x7d, 0xbe, 0x7a, 0xef, + 0xd5, 0xab, 0xf7, 0xa0, 0xd9, 0xb5, 0xc3, 0xad, 0xc1, 0xc6, 0x92, 0xe9, 0xf5, 0x2e, 0x77, 0x0d, + 0xdf, 0x22, 0x2e, 0xf1, 0xe3, 0x7f, 0xfa, 0xdb, 0xdd, 0xcb, 0x46, 0xdf, 0x0e, 0x2e, 0x9b, 0x9e, + 0x4f, 0x2e, 0xef, 0x3c, 0x6d, 0x38, 0xfd, 0x2d, 0xe3, 0xe9, 0xcb, 0x5d, 0x5a, 0x69, 0x84, 0xc4, + 0x5a, 0xea, 0xfb, 0x5e, 0xe8, 0xa1, 0x8f, 0xc4, 0x48, 0x96, 0xa2, 0x6f, 0xe3, 0x7f, 0xfa, 0xdb, + 0xdd, 0x25, 0x8a, 0x64, 0x89, 0x22, 0x59, 0x8a, 0x90, 0x9c, 0x6f, 0x1c, 0x8b, 0xf2, 0x06, 0x09, + 0x87, 0x09, 0x9f, 0xff, 0x09, 0x15, 0x87, 0xd7, 0xf5, 0x2e, 0xb3, 0xe2, 0x8d, 0xc1, 0x26, 0xfb, + 0xc5, 0x7e, 0xb0, 0xff, 0x04, 0xf8, 0x53, 0xdb, 0xcf, 0x04, 0x4b, 0xb6, 0x47, 0x11, 0x5f, 0x36, + 0x06, 0xa1, 0x17, 0x98, 0x86, 0x63, 0xbb, 0xdd, 0xcb, 0x3b, 0xc3, 0x98, 0x75, 0x05, 0x54, 0x34, + 0xe1, 0x50, 0x18, 0x7f, 0xc3, 0x30, 0xb3, 0x60, 0x3e, 0x1a, 0xc3, 0xf4, 0x0c, 0x73, 0xcb, 0x76, + 0x89, 0xbf, 0x17, 0x75, 0xee, 0xb2, 0x4f, 0x02, 0x6f, 0xe0, 0x9b, 0xe4, 0x58, 0x5f, 0x05, 0x97, + 0x7b, 0x24, 0x34, 0xb2, 0x68, 0x5d, 0xce, 0xfb, 0xca, 0x1f, 0xb8, 0xa1, 0xdd, 0x1b, 0x26, 0xf3, + 0x53, 0x47, 0x7d, 0x10, 0x98, 0x5b, 0xa4, 0x67, 0x0c, 0x7d, 0xf7, 0x91, 0xbc, 0xef, 0x06, 0xa1, + 0xed, 0x5c, 0xb6, 0xdd, 0x30, 0x08, 0xfd, 0xf4, 0x47, 0xfa, 0x87, 0xa1, 0xba, 0x6c, 0x59, 0x9e, + 0x8b, 0x9e, 0x82, 0x49, 0xe2, 0x1a, 0x1b, 0x0e, 0xb1, 0x16, 0xb4, 0x4b, 0xda, 0x93, 0xb5, 0xc6, + 0xa9, 0xef, 0xed, 0x2f, 0xbe, 0xe7, 0x60, 0x7f, 0x71, 0x72, 0x85, 0x17, 0xe3, 0xa8, 0x5e, 0xff, + 0x5a, 0x05, 0x26, 0xd8, 0x47, 0x01, 0xfa, 0x45, 0x0d, 0x4e, 0x6f, 0x0f, 0x36, 0x88, 0xef, 0x92, + 0x90, 0x04, 0x2d, 0x23, 0xd8, 0xda, 0xf0, 0x0c, 0x9f, 0xa3, 0xa8, 0x7f, 0xf8, 0xda, 0x52, 0x81, + 0x25, 0xb8, 0x74, 0x7d, 0x18, 0x5f, 0xe3, 0x91, 0x83, 0xfd, 0xc5, 0xd3, 0x19, 0x15, 0x38, 0x8b, + 0x3a, 0xba, 0x03, 0xd3, 0x6e, 0xd7, 0x76, 0x77, 0xdb, 0x6e, 0xd7, 0x27, 0x41, 0xb0, 0x50, 0x61, + 0xad, 0x59, 0x2e, 0xd4, 0x9a, 0x9b, 0x0a, 0xa2, 0xc6, 0xdc, 0xc1, 0xfe, 0xe2, 0xb4, 0x5a, 0x82, + 0x13, 0x84, 0xf4, 0xaf, 0x68, 0x70, 0x6a, 0xd9, 0xea, 0xd9, 0x41, 0x60, 0x7b, 0xee, 0x9a, 0x33, + 0xe8, 0xda, 0x2e, 0xba, 0x04, 0xe3, 0xae, 0xd1, 0x23, 0x6c, 0x48, 0xa6, 0x1a, 0xd3, 0x62, 0x54, + 0xc7, 0x6f, 0x1a, 0x3d, 0x82, 0x59, 0x0d, 0x7a, 0x19, 0x26, 0x4c, 0xcf, 0xdd, 0xb4, 0xbb, 0xa2, + 0xa1, 0x3f, 0xb1, 0xc4, 0x67, 0x72, 0x49, 0x9d, 0x49, 0xd6, 0x3e, 0xb1, 0x02, 0x96, 0xb0, 0x71, + 0x67, 0x65, 0x37, 0x24, 0x2e, 0x25, 0xd3, 0x80, 0x83, 0xfd, 0xc5, 0x89, 0x26, 0x43, 0x80, 0x05, + 0x22, 0xfd, 0x0a, 0xd4, 0x96, 0x1d, 0xe2, 0x87, 0xb6, 0xdb, 0x45, 0xcf, 0xc1, 0x2c, 0xe9, 0x19, + 0xb6, 0x83, 0x89, 0x49, 0xec, 0x1d, 0xe2, 0x07, 0x0b, 0xda, 0xa5, 0xb1, 0x27, 0xa7, 0x1a, 0xe8, + 0x60, 0x7f, 0x71, 0x76, 0x25, 0x51, 0x83, 0x53, 0x90, 0xfa, 0xdb, 0x1a, 0xd4, 0x97, 0x07, 0x96, + 0x1d, 0x72, 0xfc, 0x28, 0x80, 0xba, 0x41, 0x7f, 0xae, 0x79, 0x8e, 0x6d, 0xee, 0x89, 0x69, 0x7e, + 0xa9, 0xd0, 0xc0, 0x2e, 0xc7, 0x78, 0x1a, 0xa7, 0x0e, 0xf6, 0x17, 0xeb, 0x4a, 0x01, 0x56, 0xa9, + 0xe8, 0x5b, 0xa0, 0xd6, 0xa1, 0xd7, 0x60, 0x9a, 0xf7, 0x72, 0xd5, 0xe8, 0x63, 0xb2, 0x29, 0x1a, + 0xf1, 0x3e, 0x65, 0xd0, 0x22, 0x4a, 0x4b, 0xb7, 0x36, 0xde, 0x20, 0x66, 0x88, 0xc9, 0x26, 0xf1, + 0x89, 0x6b, 0x12, 0x3e, 0x7f, 0x4d, 0xe5, 0x63, 0x9c, 0x40, 0xa5, 0xff, 0x48, 0x83, 0xb9, 0xe5, + 0x1d, 0xc3, 0x76, 0x8c, 0x0d, 0xdb, 0xb1, 0xc3, 0xbd, 0xcf, 0x78, 0x2e, 0x19, 0x61, 0x02, 0xd7, + 0xe1, 0x91, 0x81, 0x6b, 0xf0, 0xef, 0x1c, 0xb2, 0xca, 0xa7, 0xec, 0xf6, 0x5e, 0x9f, 0xd0, 0xa5, + 0x47, 0x87, 0xfa, 0xb1, 0x83, 0xfd, 0xc5, 0x47, 0xd6, 0xb3, 0x41, 0x70, 0xde, 0xb7, 0x08, 0xc3, + 0x39, 0xa5, 0xea, 0x15, 0xcf, 0x19, 0xf4, 0x04, 0xd6, 0x31, 0x86, 0xf5, 0xfc, 0xc1, 0xfe, 0xe2, + 0xb9, 0xf5, 0x4c, 0x08, 0x9c, 0xf3, 0xa5, 0xfe, 0xfd, 0x0a, 0x4c, 0x37, 0x0c, 0x73, 0x7b, 0xd0, + 0x6f, 0x0c, 0xcc, 0x6d, 0x12, 0xa2, 0xcf, 0x43, 0x8d, 0x72, 0x2e, 0xcb, 0x08, 0x0d, 0x31, 0x92, + 0x3f, 0x99, 0xbb, 0xfc, 0xd8, 0x2c, 0x52, 0xe8, 0x78, 0x6c, 0x57, 0x49, 0x68, 0x34, 0x90, 0x18, + 0x13, 0x88, 0xcb, 0xb0, 0xc4, 0x8a, 0xba, 0x30, 0x1e, 0xf4, 0x89, 0x29, 0x16, 0xf7, 0x4a, 0xa1, + 0xc5, 0xa2, 0x36, 0xb9, 0xd3, 0x27, 0x66, 0x3c, 0x0d, 0xf4, 0x17, 0x66, 0x04, 0x90, 0x07, 0x13, + 0x41, 0x68, 0x84, 0x03, 0x3a, 0x3e, 0x94, 0xd4, 0xd5, 0xf2, 0xa4, 0x18, 0xba, 0xc6, 0xac, 0x20, + 0x36, 0xc1, 0x7f, 0x63, 0x41, 0x46, 0xff, 0xa1, 0x06, 0x73, 0x2a, 0xf8, 0x0d, 0x3b, 0x08, 0xd1, + 0x4f, 0x0f, 0x0d, 0xe8, 0xd2, 0x68, 0x03, 0x4a, 0xbf, 0x66, 0xc3, 0x39, 0x27, 0xc8, 0xd5, 0xa2, + 0x12, 0x65, 0x30, 0x37, 0xa1, 0x6a, 0x87, 0xa4, 0xc7, 0x17, 0x56, 0x51, 0x9e, 0xa6, 0xb6, 0xb9, + 0x31, 0x23, 0xa8, 0x55, 0xdb, 0x14, 0x2f, 0xe6, 0xe8, 0xf5, 0xcf, 0xc3, 0x19, 0x15, 0x6a, 0xcd, + 0xf7, 0x76, 0x6c, 0x8b, 0xf8, 0x74, 0x33, 0x84, 0x7b, 0xfd, 0xa1, 0xcd, 0x40, 0x17, 0x17, 0x66, + 0x35, 0xe8, 0x03, 0x30, 0xe1, 0x93, 0xae, 0xed, 0xb9, 0x6c, 0xc2, 0xa7, 0xe2, 0xc1, 0xc3, 0xac, + 0x14, 0x8b, 0x5a, 0xfd, 0x7f, 0x54, 0x92, 0x83, 0x47, 0x27, 0x12, 0xdd, 0x81, 0x5a, 0x5f, 0x90, + 0x12, 0x83, 0xd7, 0x2e, 0xdd, 0xc3, 0xa8, 0xed, 0xf1, 0xb8, 0x46, 0x25, 0x58, 0x12, 0x43, 0x36, + 0xcc, 0x46, 0xff, 0x37, 0x4b, 0xf0, 0x62, 0xc6, 0x53, 0xd7, 0x12, 0x88, 0x70, 0x0a, 0x31, 0xba, + 0x0d, 0x53, 0x01, 0x31, 0x7d, 0x42, 0xf9, 0x92, 0x58, 0xa9, 0x99, 0xcc, 0xab, 0x13, 0x01, 0x09, + 0xe6, 0x35, 0x2f, 0x9a, 0x3f, 0x25, 0x2b, 0x70, 0x8c, 0x08, 0x5d, 0x80, 0xf1, 0x80, 0x10, 0x6b, + 0x61, 0x9c, 0x0d, 0x7a, 0x8d, 0x6d, 0x0d, 0x42, 0x2c, 0xcc, 0x4a, 0xf5, 0x5f, 0x1b, 0x07, 0x34, + 0xbc, 0xb0, 0xd5, 0x5e, 0xf3, 0x12, 0x31, 0xe8, 0x65, 0x7a, 0x2d, 0xf6, 0x48, 0x0a, 0x31, 0x7a, + 0x0b, 0x66, 0x1c, 0x23, 0x08, 0x6f, 0xf5, 0xa9, 0xf8, 0x11, 0xad, 0x8e, 0xfa, 0x87, 0x1b, 0x85, + 0xa6, 0xf7, 0x86, 0x8a, 0xa9, 0x31, 0x7f, 0xb0, 0xbf, 0x38, 0x93, 0x28, 0xc2, 0x49, 0x5a, 0x68, + 0x1b, 0xa6, 0x68, 0xc1, 0x8a, 0xef, 0x7b, 0xbe, 0x18, 0xf2, 0x17, 0x0b, 0x13, 0x66, 0x58, 0x1a, + 0x33, 0x74, 0x26, 0xe4, 0x4f, 0x1c, 0xe3, 0x47, 0x9f, 0x02, 0xe4, 0x6d, 0x04, 0xc4, 0xdf, 0x21, + 0xd6, 0x55, 0x2e, 0x6d, 0xd1, 0xee, 0xd2, 0x79, 0x19, 0x6b, 0x9c, 0x17, 0x73, 0x88, 0x6e, 0x0d, + 0x41, 0xe0, 0x8c, 0xaf, 0xd0, 0x36, 0x20, 0x29, 0xb1, 0xc9, 0x69, 0x5f, 0xa8, 0x8e, 0xbe, 0x68, + 0xce, 0x51, 0x62, 0x57, 0x87, 0x50, 0xe0, 0x0c, 0xb4, 0xfa, 0xef, 0x56, 0xa0, 0xce, 0x17, 0xc9, + 0x8a, 0x1b, 0xfa, 0x7b, 0x27, 0x70, 0x34, 0x6c, 0x26, 0x8e, 0x86, 0x56, 0x89, 0xad, 0xce, 0x5a, + 0x9c, 0x7b, 0x32, 0xb8, 0xa9, 0x93, 0xe1, 0x4a, 0x69, 0x4a, 0x87, 0x1f, 0x0c, 0x7f, 0xa0, 0xc1, + 0x29, 0x05, 0xfa, 0x04, 0xce, 0x05, 0x92, 0x3c, 0x17, 0x5e, 0x2a, 0xdb, 0xc1, 0x9c, 0x63, 0xc1, + 0x4c, 0xf4, 0x8b, 0xb1, 0xec, 0x0f, 0x03, 0x6c, 0x30, 0x9e, 0x72, 0x33, 0x16, 0x92, 0xe4, 0xac, + 0x37, 0x64, 0x0d, 0x56, 0xa0, 0x24, 0xb3, 0xaa, 0x64, 0x32, 0xab, 0x3f, 0xab, 0xc0, 0xfc, 0xd0, + 0x58, 0x0f, 0x33, 0x10, 0xed, 0x9d, 0x62, 0x20, 0x95, 0x77, 0x84, 0x81, 0x8c, 0x15, 0x62, 0x20, + 0x4f, 0x42, 0x8d, 0x8e, 0x29, 0x9b, 0x1b, 0x7e, 0x34, 0x4c, 0xd3, 0x15, 0xd4, 0x11, 0x65, 0x58, + 0xd6, 0xea, 0xbf, 0xa3, 0xc1, 0x58, 0x13, 0xb7, 0xd1, 0x07, 0x13, 0xe2, 0xee, 0x23, 0xaa, 0xb8, + 0x7b, 0x6f, 0x7f, 0x71, 0xb2, 0x89, 0xdb, 0x8a, 0xe4, 0xfb, 0xd7, 0x35, 0x98, 0x37, 0x3d, 0x37, + 0x34, 0xe8, 0xda, 0xc5, 0xfc, 0x6c, 0x88, 0xd6, 0x60, 0x31, 0x49, 0xaf, 0x99, 0xc2, 0xd6, 0x78, + 0x54, 0xb4, 0x60, 0x3e, 0x5d, 0x13, 0xe0, 0x61, 0xd2, 0xfa, 0x3a, 0x4c, 0x35, 0x1d, 0x6f, 0x60, + 0xb5, 0xdd, 0x4d, 0xef, 0x3e, 0x0a, 0x2b, 0xff, 0x51, 0x83, 0x69, 0x86, 0x77, 0xcd, 0xf7, 0x36, + 0x6d, 0x87, 0x3c, 0x24, 0x62, 0xb3, 0xda, 0xe4, 0x3c, 0xe6, 0xc8, 0xa4, 0x58, 0x15, 0xf0, 0x61, + 0x91, 0x62, 0xd5, 0x36, 0xe7, 0xb0, 0xab, 0x6f, 0x4c, 0x26, 0xbb, 0xc6, 0x18, 0xd6, 0x93, 0x50, + 0x33, 0x8d, 0xc6, 0xc0, 0xb5, 0x1c, 0xb9, 0x32, 0x68, 0x33, 0x9b, 0xcb, 0xbc, 0x0c, 0xcb, 0x5a, + 0xf4, 0x16, 0x40, 0x6c, 0x5e, 0x10, 0x13, 0x71, 0xb5, 0xa4, 0x4d, 0xa3, 0x43, 0x42, 0xaa, 0x95, + 0x07, 0xf1, 0xec, 0xc7, 0x75, 0x58, 0x21, 0x87, 0xfe, 0x32, 0xcc, 0x88, 0x61, 0x6e, 0xf7, 0x8c, + 0xae, 0x50, 0xfa, 0x8a, 0x8e, 0xd5, 0xaa, 0x82, 0xa9, 0x71, 0x56, 0x50, 0x9e, 0x51, 0x4b, 0x03, + 0x9c, 0x24, 0x87, 0xee, 0xc2, 0x74, 0x4f, 0xd5, 0x64, 0xc7, 0x4b, 0x1c, 0x2c, 0x8a, 0x5a, 0xdb, + 0x38, 0x23, 0xa8, 0x4f, 0x27, 0x94, 0xe0, 0x04, 0xad, 0x0c, 0x69, 0xbc, 0xfa, 0xa0, 0xa4, 0xf1, + 0x4d, 0x98, 0xe4, 0x7b, 0x3c, 0x58, 0x98, 0x60, 0x3d, 0xfc, 0x44, 0xa1, 0x1e, 0x72, 0x7e, 0x11, + 0x1b, 0xcd, 0xf8, 0xef, 0x00, 0x47, 0xc8, 0xd1, 0x1d, 0x98, 0xa6, 0xac, 0xb6, 0x43, 0x1c, 0x62, + 0x86, 0x9e, 0xbf, 0x30, 0x59, 0xc2, 0x26, 0xd5, 0x51, 0x10, 0x71, 0x9b, 0x86, 0x5a, 0x82, 0x13, + 0x84, 0x24, 0x13, 0xac, 0xe5, 0x32, 0xc1, 0x1d, 0xa8, 0xef, 0x28, 0xc6, 0x85, 0x29, 0x36, 0x0c, + 0x9f, 0x2c, 0xd4, 0xb2, 0xd8, 0xd4, 0xd0, 0x38, 0x2d, 0x28, 0xd5, 0x55, 0xb3, 0x84, 0x4a, 0x48, + 0xff, 0x57, 0x93, 0x30, 0xdf, 0x74, 0x06, 0x41, 0x48, 0xfc, 0x65, 0x61, 0xf7, 0x25, 0x3e, 0x7a, + 0x5b, 0x83, 0x73, 0xec, 0xdf, 0x96, 0x77, 0xc7, 0x6d, 0x11, 0xc7, 0xd8, 0x5b, 0xde, 0xa4, 0x10, + 0x96, 0x75, 0x3c, 0x46, 0xd4, 0x1a, 0x88, 0xd3, 0x9d, 0x99, 0x49, 0x3a, 0x99, 0x18, 0x71, 0x0e, + 0x25, 0xf4, 0x55, 0x0d, 0x1e, 0xcd, 0xa8, 0x6a, 0x11, 0x87, 0x84, 0x44, 0x70, 0x82, 0xe3, 0xb6, + 0xe3, 0xf1, 0x83, 0xfd, 0xc5, 0x47, 0x3b, 0x79, 0x48, 0x71, 0x3e, 0x3d, 0x7a, 0xca, 0x9e, 0xcf, + 0xa8, 0xbd, 0x62, 0xd8, 0xce, 0xc0, 0x27, 0x42, 0xa6, 0x3d, 0x6e, 0x73, 0x2e, 0x1e, 0xec, 0x2f, + 0x9e, 0xef, 0xe4, 0x62, 0xc5, 0x87, 0x50, 0x44, 0x5f, 0x84, 0xb3, 0xb2, 0x76, 0xdd, 0x75, 0x09, + 0xb1, 0x88, 0x75, 0xdb, 0x16, 0x22, 0xc6, 0xf1, 0x9b, 0xf2, 0xe8, 0xc1, 0xfe, 0xe2, 0xd9, 0x4e, + 0x16, 0x42, 0x9c, 0x4d, 0x07, 0x75, 0xe1, 0xf1, 0xb8, 0x22, 0xb4, 0x1d, 0xfb, 0x2e, 0xc3, 0x74, + 0x7b, 0xcb, 0x27, 0xc1, 0x96, 0xe7, 0x58, 0x8c, 0x5f, 0x68, 0x8d, 0xf7, 0x1e, 0xec, 0x2f, 0x3e, + 0xde, 0x39, 0x0c, 0x10, 0x1f, 0x8e, 0x07, 0x59, 0x30, 0x1d, 0x98, 0x86, 0xdb, 0x76, 0x43, 0xe2, + 0xef, 0x18, 0xce, 0xc2, 0x44, 0xa1, 0x0e, 0xf2, 0x3d, 0xaa, 0xe0, 0xc1, 0x09, 0xac, 0xe8, 0x19, + 0xa8, 0x91, 0xdd, 0xbe, 0xe1, 0x5a, 0x84, 0x33, 0x86, 0xa9, 0xc6, 0x05, 0x7a, 0x24, 0xad, 0x88, + 0xb2, 0x7b, 0xfb, 0x8b, 0xd3, 0xd1, 0xff, 0xab, 0x9e, 0x45, 0xb0, 0x84, 0x46, 0x5f, 0x80, 0x33, + 0x3d, 0x63, 0xf7, 0xa6, 0x67, 0x11, 0xc6, 0xe7, 0x28, 0xdb, 0x63, 0x13, 0x51, 0x2b, 0xd4, 0xce, + 0x85, 0x83, 0xfd, 0xc5, 0x33, 0xab, 0x19, 0xf8, 0x70, 0x26, 0x15, 0xfd, 0x7f, 0x6a, 0x50, 0x17, + 0x3b, 0x98, 0x09, 0x5c, 0x26, 0x54, 0x4d, 0x7a, 0xdc, 0x8a, 0x9d, 0xfa, 0x62, 0xf1, 0x73, 0x9d, + 0xa2, 0x8b, 0x0f, 0x75, 0x56, 0x84, 0x39, 0x6e, 0x74, 0x27, 0xe3, 0x54, 0x6e, 0x96, 0x3c, 0x95, + 0x19, 0xb9, 0x23, 0x4e, 0x64, 0x7d, 0x7f, 0x0c, 0xa6, 0x9a, 0x9e, 0x6b, 0xd9, 0x4c, 0xb2, 0x7e, + 0x3a, 0x21, 0x5c, 0x3e, 0xae, 0xf2, 0xd5, 0x7b, 0xfb, 0x8b, 0x33, 0x12, 0x50, 0x61, 0xb4, 0xcf, + 0x4a, 0x35, 0x94, 0x4b, 0x9b, 0xef, 0x4d, 0xaa, 0x8f, 0xf7, 0xf6, 0x17, 0x4f, 0xc9, 0xcf, 0x92, + 0x1a, 0x25, 0xda, 0x01, 0x44, 0x15, 0x84, 0xdb, 0xbe, 0xe1, 0x06, 0x1c, 0x2d, 0x9d, 0x65, 0xbe, + 0xf3, 0xff, 0xe2, 0x68, 0xb3, 0x4c, 0xbf, 0x88, 0xf5, 0x87, 0x1b, 0x43, 0xd8, 0x70, 0x06, 0x05, + 0xf4, 0x06, 0xcc, 0xd2, 0xd2, 0xf5, 0xbe, 0x65, 0x84, 0x44, 0xd9, 0xe2, 0xc7, 0xa1, 0x79, 0x4e, + 0xd0, 0x9c, 0xbd, 0x91, 0xc0, 0x84, 0x53, 0x98, 0xb9, 0x30, 0x6e, 0x04, 0x9e, 0xcb, 0x76, 0x6f, + 0x42, 0x18, 0xa7, 0xa5, 0x58, 0xd4, 0xa2, 0xa7, 0x60, 0xb2, 0x47, 0x82, 0xc0, 0xe8, 0x12, 0xb6, + 0x1d, 0xa7, 0xe2, 0x53, 0x77, 0x95, 0x17, 0xe3, 0xa8, 0x1e, 0x7d, 0x08, 0xaa, 0xa6, 0x67, 0x91, + 0x60, 0x61, 0x92, 0x59, 0xcc, 0xcf, 0xb1, 0xc5, 0x44, 0x0b, 0xee, 0xed, 0x2f, 0x4e, 0x31, 0x6d, + 0x8b, 0xfe, 0xc2, 0x1c, 0x48, 0xff, 0x65, 0x2a, 0x09, 0xa7, 0x54, 0x8a, 0x3c, 0xf3, 0x3f, 0x9f, + 0x56, 0xa6, 0x04, 0x9d, 0x9c, 0xed, 0x50, 0xff, 0xf9, 0x0a, 0x9c, 0xa1, 0x2d, 0xf4, 0x3d, 0xc7, + 0xa1, 0xc7, 0x43, 0xdf, 0xf1, 0xf6, 0x7a, 0xc4, 0x3d, 0x09, 0x33, 0x7e, 0x24, 0x47, 0x54, 0x72, + 0xe5, 0x88, 0xde, 0xd0, 0x38, 0x8c, 0x15, 0x19, 0x07, 0xb9, 0x5c, 0x8e, 0x18, 0x8b, 0x3f, 0xd1, + 0x60, 0x21, 0x6b, 0x2c, 0x4e, 0x40, 0x7f, 0x71, 0x93, 0xfa, 0x4b, 0xbb, 0xb0, 0xa6, 0x9b, 0x6e, + 0x7b, 0x8e, 0x1e, 0xf3, 0x27, 0x15, 0x38, 0x17, 0x83, 0xb7, 0xdd, 0x20, 0x34, 0x1c, 0x87, 0x2b, + 0xf8, 0x0f, 0x7e, 0xe2, 0xdf, 0x4c, 0x28, 0xa2, 0xb7, 0x4a, 0xf6, 0x55, 0x6d, 0x7c, 0xae, 0xbd, + 0x6e, 0x2f, 0x65, 0xaf, 0x7b, 0xf9, 0x7e, 0x12, 0x3d, 0xdc, 0x74, 0xf7, 0xa7, 0x1a, 0x9c, 0xcf, + 0xfe, 0xf0, 0x04, 0xd6, 0x55, 0x3f, 0xb9, 0xae, 0xae, 0xdf, 0xc7, 0x6e, 0xe7, 0xac, 0xac, 0xdf, + 0xac, 0xe4, 0x75, 0x97, 0xe9, 0xca, 0x9b, 0x70, 0x8a, 0x2a, 0x30, 0x41, 0x28, 0x4c, 0x4c, 0xc7, + 0xbb, 0x6e, 0x8d, 0x8c, 0x47, 0xa7, 0x70, 0x12, 0x07, 0x4e, 0x23, 0x45, 0x37, 0x61, 0x92, 0x2a, + 0x2d, 0x14, 0x7f, 0x65, 0x74, 0xfc, 0x92, 0xef, 0x77, 0xf8, 0xb7, 0x38, 0x42, 0x82, 0x7e, 0x1a, + 0x66, 0x2c, 0xb9, 0xa9, 0x8e, 0xb8, 0x67, 0x49, 0x63, 0x65, 0xd6, 0xc0, 0x96, 0xfa, 0x35, 0x4e, + 0x22, 0xd3, 0xff, 0xaf, 0x06, 0x17, 0x0e, 0x5b, 0x5c, 0xc8, 0x07, 0x30, 0xa3, 0x83, 0x9c, 0x5f, + 0xb7, 0x17, 0x16, 0x86, 0x22, 0x34, 0xf1, 0x26, 0x95, 0x45, 0x01, 0x56, 0xa8, 0x64, 0xdc, 0xe5, + 0x54, 0x1e, 0xd0, 0x5d, 0x8e, 0xfe, 0xbf, 0x34, 0x95, 0x1d, 0xa9, 0x93, 0xfb, 0xd0, 0xb1, 0x23, + 0xb5, 0xf1, 0xb9, 0x16, 0xb2, 0x3f, 0x1e, 0x83, 0x4b, 0xd9, 0x9f, 0x28, 0x27, 0xf0, 0x85, 0x84, + 0x3c, 0x58, 0x4b, 0x9d, 0x8d, 0x27, 0x78, 0xbf, 0xf8, 0x12, 0x4c, 0xf4, 0xb9, 0x7b, 0xc6, 0x18, + 0x6b, 0xca, 0x93, 0x94, 0xcb, 0x71, 0xdf, 0x89, 0x7b, 0xfb, 0x8b, 0xe7, 0xb3, 0x8e, 0x1d, 0xe1, + 0x75, 0x21, 0xbe, 0x43, 0x76, 0xca, 0x56, 0xc1, 0x45, 0xbe, 0x8f, 0x8c, 0xc8, 0xe8, 0x8c, 0x0d, + 0xe2, 0x8c, 0x6c, 0x9d, 0x78, 0x5b, 0x83, 0xd9, 0xc4, 0xe6, 0x0a, 0x16, 0xaa, 0x6c, 0xbb, 0x14, + 0xb3, 0xeb, 0x27, 0xb6, 0x6d, 0x2c, 0x49, 0x24, 0x8a, 0x03, 0x9c, 0xa2, 0x98, 0xe2, 0xf9, 0xea, + 0xfc, 0x3e, 0x7c, 0x3c, 0x5f, 0x6d, 0x7d, 0x0e, 0xcf, 0xff, 0x56, 0x25, 0xaf, 0xbb, 0x8c, 0xe7, + 0xef, 0xc2, 0x54, 0xe4, 0x02, 0x17, 0xf1, 0xae, 0xab, 0xa5, 0x1b, 0xc5, 0xf1, 0xc5, 0x77, 0xd8, + 0x51, 0x49, 0x80, 0x63, 0x62, 0xe8, 0xcb, 0x1a, 0x40, 0x3c, 0x35, 0x62, 0x87, 0xac, 0xdf, 0xc7, + 0x01, 0x51, 0x04, 0xad, 0x59, 0xca, 0x60, 0x94, 0x75, 0xa1, 0x10, 0xd6, 0x7f, 0xa3, 0x02, 0x68, + 0xb8, 0xf1, 0x54, 0x02, 0xde, 0xb6, 0x5d, 0x2b, 0xad, 0x09, 0x5c, 0xb7, 0x5d, 0x0b, 0xb3, 0x9a, + 0x11, 0x64, 0xe4, 0x17, 0xe0, 0x54, 0xd7, 0xf1, 0x36, 0x0c, 0xc7, 0xd9, 0x13, 0x7e, 0x75, 0x6c, + 0x97, 0xd6, 0x1a, 0xa7, 0xe9, 0x39, 0x79, 0x35, 0x59, 0x85, 0xd3, 0xb0, 0xa8, 0x0f, 0x73, 0x3e, + 0x31, 0x3d, 0xd7, 0xb4, 0x1d, 0xa6, 0x33, 0x79, 0x83, 0xb0, 0xa0, 0xcd, 0xe5, 0xcc, 0xc1, 0xfe, + 0xe2, 0x1c, 0x4e, 0xe1, 0xc2, 0x43, 0xd8, 0xd1, 0x13, 0x30, 0xd9, 0xf7, 0xed, 0x9e, 0xe1, 0xef, + 0x31, 0xad, 0xac, 0xd6, 0xa8, 0xd3, 0x03, 0x77, 0x8d, 0x17, 0xe1, 0xa8, 0x4e, 0xff, 0xa6, 0x06, + 0x63, 0xad, 0x9b, 0x1d, 0xa4, 0xc3, 0x84, 0xe5, 0xf5, 0x0c, 0xdb, 0x15, 0xa3, 0xc4, 0x9c, 0xd3, + 0x5a, 0xac, 0x04, 0x8b, 0x1a, 0xf4, 0x26, 0x4c, 0x45, 0x2c, 0xab, 0xdc, 0x7d, 0x65, 0xeb, 0x66, + 0x47, 0x3a, 0x77, 0xc8, 0x95, 0x15, 0x95, 0x04, 0x38, 0xa6, 0xa2, 0x1b, 0x30, 0xdf, 0xba, 0xd9, + 0x69, 0xbb, 0xa6, 0x33, 0xb0, 0xc8, 0xca, 0x2e, 0xfb, 0x43, 0xbb, 0x66, 0xf3, 0x12, 0xe1, 0x11, + 0xc7, 0xba, 0x26, 0x80, 0x70, 0x54, 0x47, 0xc1, 0x08, 0xff, 0x42, 0x78, 0x73, 0x31, 0x30, 0x81, + 0x04, 0x47, 0x75, 0xfa, 0x1f, 0x56, 0xa0, 0xae, 0x34, 0x08, 0xf5, 0x60, 0x92, 0xf7, 0x37, 0x72, + 0xaa, 0xb8, 0x52, 0xb4, 0x8f, 0xc9, 0x66, 0x73, 0xf2, 0x7c, 0x48, 0x03, 0x1c, 0xd1, 0x50, 0xe7, + 0xa9, 0x92, 0x3f, 0x4f, 0x68, 0x09, 0x80, 0xfb, 0x8c, 0xb0, 0x1b, 0x41, 0x7e, 0x40, 0xb0, 0xad, + 0xd0, 0x91, 0xa5, 0x58, 0x81, 0x90, 0xa7, 0xda, 0x78, 0xe6, 0xa9, 0xd6, 0x85, 0xea, 0x5d, 0xcf, + 0x25, 0x81, 0x30, 0xcf, 0xdf, 0xaf, 0x1e, 0x4e, 0x51, 0x96, 0xf5, 0x19, 0x8a, 0x18, 0x73, 0xfc, + 0xfa, 0xaf, 0x6a, 0x00, 0x2d, 0x23, 0x34, 0xb8, 0x2d, 0x79, 0x04, 0x97, 0xbc, 0x0b, 0x89, 0x9d, + 0x58, 0x1b, 0xba, 0xf6, 0x1b, 0x0f, 0xec, 0xbb, 0x51, 0xff, 0xa5, 0xbc, 0xc1, 0xb1, 0x77, 0xec, + 0xbb, 0x04, 0xb3, 0x7a, 0xf4, 0x41, 0x98, 0x22, 0xae, 0xe9, 0xef, 0xf5, 0x43, 0xe1, 0x59, 0x53, + 0xe3, 0xd7, 0xb6, 0x2b, 0x51, 0x21, 0x8e, 0xeb, 0xf5, 0xa7, 0x21, 0x29, 0x35, 0x1e, 0xdd, 0x4a, + 0x7d, 0x07, 0x6a, 0x2b, 0xae, 0xd5, 0xf7, 0x6c, 0x37, 0x1c, 0xa1, 0x4f, 0x8f, 0xc3, 0xd8, 0xc0, + 0x77, 0x44, 0x97, 0xea, 0x02, 0x60, 0x6c, 0x1d, 0xdf, 0xc0, 0xb4, 0x1c, 0x3d, 0x05, 0x93, 0xfd, + 0x81, 0xdf, 0xf7, 0x82, 0xa8, 0x5f, 0x52, 0x3c, 0x5e, 0xe3, 0xc5, 0x38, 0xaa, 0xd7, 0xef, 0x69, + 0x30, 0xb7, 0xb2, 0xdb, 0xb7, 0x7d, 0xe6, 0x1e, 0x48, 0x7c, 0x2a, 0x5b, 0xd0, 0xef, 0x77, 0xf8, + 0xbf, 0xa2, 0x0d, 0xf2, 0x7b, 0x01, 0x81, 0xa3, 0x7a, 0xb4, 0x09, 0xb3, 0x84, 0x7d, 0xce, 0x98, + 0xaa, 0x21, 0x4d, 0xe2, 0xc7, 0xb1, 0x0a, 0x71, 0xf7, 0xd3, 0x04, 0x16, 0x9c, 0xc2, 0x8a, 0x3a, + 0x30, 0x6b, 0x3a, 0x46, 0x10, 0xd8, 0x9b, 0xb6, 0x19, 0xdf, 0x82, 0x4f, 0x35, 0x3e, 0x48, 0xbf, + 0x6d, 0x26, 0x6a, 0xee, 0xed, 0x2f, 0x9e, 0x15, 0xed, 0x4c, 0x56, 0xe0, 0x14, 0x0a, 0xfd, 0xeb, + 0x15, 0x98, 0x59, 0xd9, 0xed, 0x7b, 0xc1, 0xc0, 0x27, 0x0c, 0xf4, 0x04, 0x84, 0xd6, 0xa7, 0x60, + 0x72, 0xcb, 0x70, 0x2d, 0x87, 0xf8, 0x62, 0xfa, 0xe4, 0xd8, 0x5e, 0xe3, 0xc5, 0x38, 0xaa, 0x47, + 0x5f, 0x00, 0x08, 0xcc, 0x2d, 0x62, 0x0d, 0x1c, 0xdb, 0x8d, 0x2c, 0x28, 0x37, 0x0a, 0x6d, 0xac, + 0x44, 0x27, 0x3b, 0x12, 0xa7, 0xd8, 0xef, 0xf2, 0x37, 0x56, 0xe8, 0xe9, 0x7f, 0xa8, 0xc1, 0x7c, + 0xe2, 0xbb, 0x13, 0x90, 0x80, 0xba, 0x49, 0x09, 0xa8, 0x51, 0xbe, 0xb3, 0x39, 0x82, 0xcf, 0x2f, + 0x54, 0xe0, 0x91, 0x9c, 0x41, 0x19, 0xba, 0x9f, 0xd3, 0x4e, 0xea, 0x7e, 0x6e, 0x07, 0xea, 0xa1, + 0xe7, 0x08, 0x7f, 0x8d, 0x68, 0x0c, 0x8a, 0xdd, 0xbe, 0xdd, 0x96, 0x78, 0xe2, 0xdb, 0xb7, 0xb8, + 0x2c, 0xc0, 0x2a, 0x21, 0xfd, 0xb7, 0x35, 0x98, 0x92, 0x8a, 0xc5, 0x08, 0xae, 0x12, 0x27, 0xa8, + 0xc1, 0x3c, 0x09, 0x35, 0xcb, 0x0e, 0x54, 0xe9, 0x88, 0xdd, 0xd0, 0xb7, 0x44, 0x19, 0x96, 0xb5, + 0xfa, 0xbf, 0xae, 0xc0, 0x39, 0x89, 0x3b, 0x12, 0xd4, 0xa8, 0x96, 0x3a, 0x8a, 0xb4, 0x76, 0x41, + 0x70, 0x5c, 0xe5, 0x8c, 0x50, 0xb8, 0xed, 0x13, 0x69, 0x76, 0x5a, 0xcf, 0x62, 0xa5, 0xe8, 0x26, + 0x54, 0x03, 0x4a, 0x4f, 0x88, 0x61, 0xc7, 0x1c, 0x0d, 0x76, 0xd2, 0xb1, 0xf6, 0x62, 0x8e, 0x06, + 0xbd, 0xa5, 0x4a, 0xdf, 0x5c, 0x15, 0xfa, 0xd4, 0xf1, 0x16, 0x03, 0x7b, 0x94, 0xb3, 0x44, 0x7b, + 0x62, 0x45, 0x23, 0x92, 0xe1, 0x44, 0x9a, 0x25, 0x80, 0xeb, 0xff, 0x4e, 0x83, 0x53, 0xb2, 0x71, + 0xc2, 0x96, 0x71, 0x3f, 0xa4, 0xde, 0x11, 0xc7, 0x72, 0x5d, 0x9a, 0xfd, 0x0a, 0x0d, 0x66, 0x9e, + 0x49, 0x2f, 0x80, 0xda, 0x55, 0x31, 0x58, 0xe8, 0x3c, 0x54, 0xec, 0xa8, 0x2f, 0x20, 0xe0, 0x2b, + 0xed, 0x16, 0xae, 0xd8, 0x96, 0x3c, 0x81, 0x2b, 0xb9, 0x27, 0xb0, 0x72, 0x44, 0x8e, 0x1d, 0x7e, + 0x44, 0xea, 0x7f, 0x5f, 0x83, 0x33, 0x11, 0xd5, 0x68, 0xac, 0x5b, 0xc2, 0x8e, 0x7e, 0xc4, 0x39, + 0x7f, 0xf4, 0x78, 0xde, 0x82, 0x71, 0xc6, 0x8b, 0x0b, 0xd9, 0xd7, 0x25, 0x42, 0xda, 0x1c, 0xcc, + 0x10, 0xe9, 0xdf, 0xd6, 0xa0, 0x7e, 0xcd, 0xde, 0x20, 0xbe, 0xcb, 0xcd, 0x38, 0x4f, 0xa4, 0x5f, + 0x03, 0xd5, 0xb3, 0x5e, 0x02, 0xa1, 0x3d, 0x98, 0x12, 0x67, 0x87, 0xf4, 0xfa, 0x2a, 0xf6, 0xe6, + 0x47, 0xa1, 0x2d, 0x78, 0xb2, 0xea, 0xef, 0x1c, 0x91, 0xc0, 0x31, 0x35, 0xfd, 0x2d, 0x38, 0x9d, + 0xf1, 0x11, 0x5a, 0x64, 0xdb, 0xd1, 0x0f, 0xc5, 0xf0, 0x46, 0xfb, 0xcb, 0x0f, 0x31, 0x2f, 0x47, + 0x8f, 0xc2, 0x18, 0x71, 0x23, 0xcf, 0xc3, 0x49, 0x2a, 0x40, 0xad, 0xb8, 0x16, 0xa6, 0x65, 0x94, + 0xed, 0x38, 0x5e, 0x42, 0xce, 0x60, 0x6c, 0xe7, 0x86, 0x28, 0xc3, 0xb2, 0x56, 0xff, 0xe7, 0xe3, + 0xf0, 0xf8, 0x35, 0xcf, 0xb7, 0xef, 0x7a, 0x6e, 0x68, 0x38, 0x6b, 0x9e, 0x15, 0xfb, 0x2f, 0x08, + 0x16, 0xf6, 0x65, 0x0d, 0x1e, 0x31, 0xfb, 0x83, 0xb6, 0x6b, 0x87, 0xb6, 0x11, 0x5d, 0x2b, 0xaf, + 0x11, 0xdf, 0xf6, 0x8a, 0xba, 0x31, 0xb0, 0x37, 0x24, 0xcd, 0xb5, 0xf5, 0x2c, 0x94, 0x38, 0x8f, + 0x16, 0xf3, 0xa6, 0xb0, 0xbc, 0x3b, 0x2e, 0x6b, 0x5c, 0x27, 0x64, 0xef, 0x5a, 0xee, 0xc6, 0x5d, + 0x2c, 0xe8, 0x4d, 0xd1, 0xca, 0xc4, 0x88, 0x73, 0x28, 0xa1, 0x2f, 0xc2, 0x59, 0x9b, 0x37, 0x0e, + 0x13, 0xc3, 0xb2, 0x5d, 0x12, 0x04, 0xcc, 0xa7, 0xa0, 0x8c, 0xbb, 0x40, 0x3b, 0x0b, 0x21, 0xce, + 0xa6, 0x83, 0x3e, 0x07, 0x10, 0xec, 0xb9, 0xa6, 0x18, 0xff, 0x6a, 0x21, 0xaa, 0x5c, 0x6a, 0x92, + 0x58, 0xb0, 0x82, 0x91, 0xea, 0x09, 0xfc, 0x68, 0x75, 0x4d, 0x7e, 0x27, 0xa9, 0x71, 0x3d, 0xe1, + 0x76, 0x54, 0x88, 0xe3, 0x7a, 0xfd, 0x1f, 0x6a, 0x30, 0x29, 0x1e, 0x8c, 0xa1, 0x0f, 0xa4, 0xd4, + 0x65, 0xc9, 0xc2, 0x52, 0x2a, 0xf3, 0x5d, 0x66, 0x50, 0x16, 0x06, 0x09, 0x71, 0xf0, 0x16, 0xd3, + 0xb6, 0x04, 0xe5, 0xd8, 0xbc, 0x91, 0x30, 0x2c, 0x47, 0x26, 0x0f, 0x85, 0x9a, 0xfe, 0x2b, 0x1a, + 0xcc, 0x0f, 0x7d, 0x35, 0xc2, 0xb1, 0x70, 0x82, 0xd7, 0xa2, 0x5f, 0xae, 0x03, 0x7b, 0x1d, 0xb8, + 0xbc, 0xd6, 0xee, 0x10, 0x7f, 0x47, 0xee, 0xc2, 0xaf, 0x6a, 0x30, 0x17, 0x5f, 0xe0, 0x8b, 0x56, + 0x68, 0x25, 0x1c, 0x2a, 0xaf, 0xa7, 0x90, 0x35, 0x16, 0x44, 0xc7, 0xe7, 0xd2, 0x35, 0x78, 0x88, + 0x30, 0xfa, 0x05, 0x0d, 0xe6, 0x8c, 0xe4, 0xeb, 0xc0, 0x88, 0x6b, 0x16, 0x73, 0x7d, 0x4f, 0x3d, + 0x35, 0x8c, 0x1b, 0x93, 0xaa, 0x08, 0xf0, 0x10, 0x5d, 0xf4, 0x51, 0x98, 0x36, 0xfa, 0xf6, 0xf2, + 0xc0, 0xb2, 0xa9, 0x5c, 0x10, 0x3d, 0x29, 0x63, 0xc2, 0xea, 0xf2, 0x5a, 0x5b, 0x96, 0xe3, 0x04, + 0x94, 0x7c, 0xff, 0x27, 0x86, 0x72, 0xbc, 0xec, 0xfb, 0x3f, 0x31, 0x8a, 0xf1, 0xfb, 0x3f, 0x31, + 0x78, 0x2a, 0x15, 0xf4, 0x59, 0x78, 0x94, 0x1f, 0x38, 0x0d, 0x23, 0xb0, 0xcd, 0xe5, 0x41, 0xb8, + 0x45, 0xdc, 0x30, 0x52, 0x08, 0xb9, 0x51, 0x8a, 0xf9, 0x56, 0xad, 0xe4, 0x01, 0xe1, 0xfc, 0xef, + 0x91, 0x07, 0xe0, 0xd9, 0x96, 0x29, 0x3a, 0xc4, 0xdd, 0x7b, 0x8a, 0x49, 0xdf, 0xb7, 0xda, 0xad, + 0xa6, 0xe8, 0x0f, 0xe3, 0x15, 0xf1, 0x6f, 0xac, 0x90, 0x40, 0x7f, 0x5b, 0x83, 0x19, 0xb1, 0xd0, + 0x05, 0xd1, 0x49, 0xb6, 0x04, 0x3e, 0x5b, 0x78, 0x41, 0xa6, 0x56, 0xfd, 0x12, 0x56, 0xb1, 0x73, + 0x6f, 0x7e, 0xe9, 0xf2, 0x99, 0xa8, 0xc3, 0xc9, 0x86, 0xa0, 0xaf, 0x69, 0x70, 0x26, 0x20, 0xfe, + 0x8e, 0x6d, 0x92, 0x65, 0xd3, 0xf4, 0x06, 0x6e, 0x34, 0xcf, 0xb5, 0x12, 0x4f, 0xb1, 0x3a, 0x19, + 0x08, 0xb9, 0xa3, 0x51, 0x56, 0x0d, 0xce, 0x6c, 0x00, 0xfa, 0x19, 0x0d, 0x4e, 0xdd, 0x31, 0x42, + 0x73, 0xab, 0x69, 0x98, 0x5b, 0xcc, 0x42, 0x13, 0x2c, 0x4c, 0x95, 0x78, 0x34, 0xf2, 0x6a, 0x12, + 0x17, 0xb7, 0xbe, 0xa6, 0x0a, 0x71, 0x9a, 0x22, 0x0a, 0xa1, 0xe6, 0x93, 0x37, 0x07, 0x24, 0x08, + 0x83, 0x05, 0x60, 0xd4, 0x3f, 0x55, 0x7e, 0xd2, 0xb0, 0xc0, 0xc8, 0x85, 0x8d, 0xe8, 0x17, 0x96, + 0x94, 0x50, 0x17, 0x1e, 0xe7, 0xcb, 0x77, 0xd9, 0xf5, 0xdc, 0xbd, 0x9e, 0x37, 0x08, 0x52, 0x5b, + 0xa0, 0xce, 0xb6, 0x00, 0xf3, 0x75, 0x5b, 0x39, 0x0c, 0x10, 0x1f, 0x8e, 0xe7, 0xfc, 0x4b, 0x80, + 0x86, 0x97, 0x0e, 0x9a, 0x83, 0xb1, 0x6d, 0xc2, 0x9f, 0xfa, 0x4e, 0x61, 0xfa, 0x2f, 0x3a, 0x03, + 0xd5, 0x1d, 0xc3, 0x19, 0x70, 0x01, 0xb5, 0x86, 0xf9, 0x8f, 0xe7, 0x2a, 0xcf, 0x68, 0xfa, 0x77, + 0x34, 0x38, 0x9b, 0xd9, 0x39, 0x84, 0xe1, 0x1c, 0xf3, 0x20, 0x73, 0x57, 0x07, 0xa1, 0x11, 0xda, + 0x6e, 0xb7, 0xed, 0x6e, 0x3a, 0x76, 0x77, 0x8b, 0x0b, 0x6a, 0x55, 0x2e, 0x56, 0xac, 0x66, 0x42, + 0xe0, 0x9c, 0x2f, 0x51, 0x1b, 0x4e, 0xf7, 0x8c, 0xdd, 0x21, 0x84, 0x15, 0x86, 0x90, 0xbd, 0x18, + 0x5f, 0x1d, 0xae, 0xc6, 0x59, 0xdf, 0xe8, 0xdf, 0xac, 0xc2, 0x63, 0xb4, 0xe1, 0xf1, 0x01, 0xb7, + 0x6a, 0xb8, 0x46, 0xf7, 0x5d, 0x7a, 0x90, 0x7c, 0x5b, 0x83, 0x47, 0xb6, 0xb2, 0xc5, 0x4f, 0x71, + 0xc6, 0xe2, 0x62, 0x52, 0xf8, 0x61, 0x22, 0x2d, 0x5f, 0x60, 0x87, 0x82, 0xe0, 0xbc, 0x56, 0xa1, + 0x97, 0x60, 0xce, 0xf5, 0x2c, 0xd2, 0x6c, 0xb7, 0xf0, 0xaa, 0x11, 0x6c, 0x77, 0x22, 0xe3, 0x6b, + 0x95, 0xdf, 0x43, 0xdc, 0x4c, 0xd5, 0xe1, 0x21, 0x68, 0xb4, 0x03, 0xa8, 0xef, 0x59, 0x2b, 0x3b, + 0xb6, 0x19, 0xf9, 0xa6, 0x15, 0xbf, 0xfb, 0x60, 0x8f, 0xe2, 0xd6, 0x86, 0xb0, 0xe1, 0x0c, 0x0a, + 0x4c, 0x80, 0xa6, 0x8d, 0x59, 0xf5, 0x5c, 0x3b, 0xf4, 0xfc, 0xab, 0xbe, 0x61, 0x92, 0x52, 0x72, + 0x24, 0x5b, 0xe9, 0x37, 0x33, 0x31, 0xe2, 0x1c, 0x4a, 0xfa, 0xff, 0xd6, 0xe0, 0x14, 0x5d, 0x17, + 0x6b, 0xbe, 0xb7, 0xbb, 0xf7, 0xae, 0x5c, 0x92, 0x4f, 0xc1, 0x78, 0xcf, 0xb3, 0x22, 0x9d, 0xf5, + 0x2c, 0x15, 0x05, 0x57, 0x3d, 0x8b, 0xdc, 0xe3, 0x17, 0x32, 0xbb, 0x7b, 0xcc, 0x6d, 0x95, 0x81, + 0xa8, 0xba, 0xe5, 0x58, 0xbe, 0x6e, 0xa9, 0xff, 0x91, 0xc6, 0x65, 0xba, 0x48, 0xb5, 0x7b, 0x77, + 0x6e, 0xc5, 0x8f, 0xc3, 0x0c, 0x2d, 0x5b, 0x35, 0x76, 0xd7, 0x5a, 0xaf, 0x78, 0x4e, 0xe4, 0xd9, + 0xc9, 0x7c, 0x48, 0xae, 0xab, 0x15, 0x38, 0x09, 0xa7, 0xff, 0x97, 0x59, 0x60, 0x00, 0x0e, 0x09, + 0xdf, 0x95, 0x1d, 0x7b, 0x1a, 0xea, 0x66, 0x7f, 0xd0, 0xbc, 0xd2, 0x79, 0x79, 0xe0, 0x85, 0x86, + 0xb8, 0x53, 0x62, 0x72, 0x5a, 0x73, 0x6d, 0x3d, 0x2a, 0xc6, 0x2a, 0x0c, 0xdd, 0xe4, 0x66, 0x7f, + 0x20, 0x18, 0xe7, 0x9a, 0xea, 0x82, 0xc0, 0x36, 0x79, 0x73, 0x6d, 0x3d, 0x51, 0x87, 0x87, 0xa0, + 0xd1, 0x97, 0x34, 0x98, 0x26, 0x62, 0x03, 0x5e, 0x33, 0x7c, 0x4b, 0xec, 0xef, 0xe2, 0xa7, 0xac, + 0x1c, 0xdd, 0x68, 0x5b, 0x73, 0x09, 0x77, 0x45, 0xa1, 0x81, 0x13, 0x14, 0x99, 0xb0, 0x29, 0x7e, + 0xd3, 0xc9, 0xf2, 0xac, 0xf4, 0x8e, 0xaf, 0x0a, 0x61, 0x33, 0x0f, 0x08, 0xe7, 0x7f, 0x8f, 0xfe, + 0x81, 0x06, 0xe7, 0x64, 0xad, 0xed, 0xda, 0xbd, 0x41, 0x0f, 0x13, 0xd3, 0x31, 0xec, 0x9e, 0x90, + 0x3c, 0x3f, 0x7d, 0xff, 0x7a, 0x9a, 0xc4, 0xcf, 0xd9, 0x4e, 0x76, 0x1d, 0xce, 0x69, 0x13, 0xfa, + 0x15, 0x0d, 0x2e, 0x45, 0x55, 0x6b, 0x54, 0xff, 0x1b, 0xf8, 0x24, 0xf6, 0x0f, 0x16, 0x63, 0x32, + 0x59, 0x88, 0x0b, 0xbe, 0xff, 0x60, 0x7f, 0xf1, 0xd2, 0xca, 0x11, 0xb8, 0xf1, 0x91, 0xd4, 0x13, + 0x2b, 0xa6, 0xe3, 0x6d, 0x86, 0x42, 0x54, 0x7d, 0x60, 0x2b, 0x86, 0xd2, 0xc0, 0x09, 0x8a, 0xe8, + 0x37, 0x34, 0x78, 0x44, 0x2d, 0x50, 0x17, 0x0c, 0x97, 0x51, 0x5f, 0xbb, 0x7f, 0xad, 0x49, 0x11, + 0xe0, 0x56, 0xa1, 0x9c, 0x4a, 0x9c, 0xd7, 0x2c, 0xca, 0x82, 0x7b, 0x6c, 0x71, 0x72, 0x39, 0xb6, + 0xca, 0x59, 0x30, 0x5f, 0xaf, 0x01, 0x8e, 0xea, 0xa8, 0x8e, 0xd8, 0xf7, 0xac, 0x35, 0xdb, 0x0a, + 0x6e, 0xd8, 0x3d, 0x3b, 0x64, 0x82, 0xe6, 0x18, 0x1f, 0x8f, 0x35, 0xcf, 0x5a, 0x6b, 0xb7, 0x78, + 0x39, 0x4e, 0x40, 0xb1, 0xb7, 0x33, 0x76, 0xcf, 0xe8, 0x92, 0xb5, 0x81, 0xe3, 0xac, 0xf9, 0x1e, + 0xb3, 0x1c, 0xb4, 0x88, 0x61, 0x39, 0xb6, 0x4b, 0x16, 0xa6, 0x8b, 0xbf, 0x9d, 0x69, 0xe7, 0x21, + 0xc5, 0xf9, 0xf4, 0xd0, 0x12, 0xc0, 0xa6, 0x61, 0x3b, 0x9d, 0x3b, 0x46, 0xff, 0x96, 0xbb, 0x30, + 0xc3, 0xd8, 0x18, 0x53, 0xcf, 0xae, 0xc8, 0x52, 0xac, 0x40, 0xb0, 0x05, 0x45, 0x99, 0x21, 0x26, + 0xfc, 0x2d, 0xed, 0xc2, 0xec, 0xfd, 0x5a, 0x50, 0x11, 0x46, 0x3e, 0x80, 0xd7, 0x15, 0x1a, 0x38, + 0x41, 0x11, 0x7d, 0x45, 0x83, 0xd9, 0x60, 0x2f, 0x08, 0x49, 0x4f, 0x36, 0xe2, 0xd4, 0x7d, 0x6f, + 0x04, 0x33, 0xab, 0x74, 0x12, 0x54, 0x70, 0x8a, 0x2a, 0x32, 0xe0, 0x31, 0x36, 0xb0, 0x57, 0x9b, + 0xd7, 0xec, 0xee, 0x96, 0x7c, 0x14, 0xb3, 0x46, 0x7c, 0x93, 0xb8, 0xe1, 0xc2, 0x1c, 0x5b, 0x3a, + 0x8b, 0x07, 0xfb, 0x8b, 0x8f, 0xb5, 0xf3, 0xc1, 0xf0, 0x61, 0x38, 0xd0, 0xe7, 0xe0, 0xbc, 0xa8, + 0xbe, 0xe1, 0xdd, 0x19, 0xa2, 0x30, 0xcf, 0x28, 0xb0, 0x97, 0x4a, 0xed, 0x5c, 0x28, 0x7c, 0x08, + 0x06, 0x7d, 0xbf, 0xc2, 0x35, 0x92, 0xa1, 0x8d, 0x84, 0x5e, 0x80, 0x53, 0x3d, 0xd2, 0xf3, 0xfc, + 0xbd, 0xe5, 0x28, 0x4e, 0x8e, 0xb0, 0x65, 0x31, 0x5d, 0x70, 0x35, 0x59, 0x85, 0xd3, 0xb0, 0xf4, + 0xb0, 0x63, 0x64, 0xaf, 0x74, 0xe2, 0xef, 0x2b, 0xf1, 0x61, 0xd7, 0x4e, 0xd5, 0xe1, 0x21, 0x68, + 0xd4, 0x84, 0x79, 0x51, 0xd6, 0xa6, 0x62, 0x5f, 0x70, 0xc5, 0x27, 0xd1, 0xf5, 0x08, 0x95, 0x9f, + 0xe6, 0xdb, 0xe9, 0x4a, 0x3c, 0x0c, 0x4f, 0x7b, 0x41, 0x7f, 0xa8, 0xad, 0x18, 0x8f, 0x7b, 0x71, + 0x33, 0x59, 0x85, 0xd3, 0xb0, 0x91, 0x5c, 0x9e, 0x68, 0x42, 0x35, 0xee, 0xc5, 0xcd, 0x54, 0x1d, + 0x1e, 0x82, 0xd6, 0xff, 0x68, 0x1c, 0xde, 0x37, 0xc2, 0xf9, 0x83, 0x7a, 0xd9, 0xc3, 0x7d, 0x04, + 0x2b, 0x58, 0x8a, 0xee, 0xa6, 0x96, 0x5e, 0x1e, 0x18, 0x6e, 0x68, 0x87, 0x7b, 0x23, 0x4e, 0x4f, + 0x3f, 0x67, 0x7a, 0x8e, 0x4f, 0x6f, 0xd4, 0xe9, 0x0c, 0xf2, 0xa6, 0xf3, 0xf8, 0x24, 0x47, 0x9f, + 0xfe, 0x5e, 0xf6, 0xf4, 0x17, 0x1c, 0xd5, 0x23, 0x97, 0x4b, 0x3f, 0x67, 0xb9, 0x14, 0x1c, 0xd5, + 0x11, 0x96, 0xd7, 0x1f, 0x8f, 0xc3, 0xfb, 0x47, 0x39, 0x08, 0x0b, 0xae, 0xaf, 0x8c, 0xa3, 0xe6, + 0x81, 0xae, 0xaf, 0x3c, 0x47, 0xbc, 0x07, 0xb8, 0xbe, 0x32, 0x48, 0x3e, 0xe8, 0xf5, 0x95, 0x37, + 0xaa, 0x0f, 0x6a, 0x7d, 0xe5, 0x8d, 0xea, 0x08, 0xeb, 0xeb, 0xcf, 0xd2, 0xe7, 0x83, 0x3c, 0xfc, + 0xda, 0x30, 0x66, 0xf6, 0x07, 0x05, 0x99, 0x14, 0xbb, 0x58, 0x6c, 0xae, 0xad, 0x63, 0x8a, 0x03, + 0x61, 0x98, 0xe0, 0xeb, 0xa7, 0x20, 0x0b, 0x62, 0x4e, 0x94, 0x7c, 0x49, 0x62, 0x81, 0x89, 0x0e, + 0x15, 0xe9, 0x6f, 0x91, 0x1e, 0xf1, 0x0d, 0xa7, 0x13, 0x7a, 0xbe, 0xd1, 0x2d, 0xca, 0x6d, 0xd8, + 0x50, 0xad, 0xa4, 0x70, 0xe1, 0x21, 0xec, 0x74, 0x40, 0xfa, 0xb6, 0x55, 0x90, 0xbf, 0xb0, 0x01, + 0x59, 0x6b, 0xb7, 0x30, 0xc5, 0xa1, 0x7f, 0xbf, 0x06, 0xca, 0x23, 0x4b, 0xaa, 0x73, 0x19, 0x8e, + 0xe3, 0xdd, 0x59, 0xf3, 0xed, 0x1d, 0xdb, 0x21, 0x5d, 0x62, 0xc9, 0x57, 0x78, 0x81, 0xb8, 0x7f, + 0x66, 0x02, 0xe0, 0x72, 0x1e, 0x10, 0xce, 0xff, 0x9e, 0x8a, 0xa3, 0xf3, 0x66, 0xfa, 0x95, 0x79, + 0xa9, 0x2b, 0xb4, 0xa1, 0x37, 0xeb, 0x7c, 0x43, 0x0d, 0x15, 0xe3, 0x61, 0xba, 0xe8, 0xaf, 0x68, + 0xdc, 0x60, 0x20, 0x2d, 0xa4, 0x62, 0xd2, 0xae, 0xdd, 0x2f, 0xeb, 0x7f, 0x6c, 0x7a, 0x88, 0x8d, + 0xb0, 0x49, 0x8a, 0xe8, 0x57, 0x35, 0x38, 0xbb, 0x9d, 0x65, 0xec, 0x14, 0x73, 0xbb, 0x56, 0xb8, + 0x2d, 0x39, 0xe6, 0x53, 0x7e, 0x63, 0x9b, 0x09, 0x80, 0xb3, 0x5b, 0x22, 0xc7, 0x49, 0x5a, 0x7f, + 0x04, 0x1f, 0x28, 0x3e, 0x4e, 0x29, 0x3b, 0x52, 0x3c, 0x4e, 0xb2, 0x02, 0x27, 0x29, 0xa2, 0x37, + 0x61, 0x6a, 0x3b, 0x32, 0xba, 0x09, 0xfd, 0xbc, 0x55, 0x98, 0xbc, 0x62, 0xba, 0xe3, 0x77, 0xc3, + 0xb2, 0x10, 0xc7, 0x54, 0x90, 0x0d, 0x93, 0xdb, 0x9c, 0x1b, 0x09, 0xbd, 0xba, 0x51, 0x5e, 0xe4, + 0xe7, 0xca, 0x9d, 0x28, 0xc2, 0x11, 0x7e, 0xd5, 0x97, 0xa5, 0x76, 0x84, 0xbb, 0xe7, 0x37, 0x34, + 0x38, 0xbb, 0x43, 0xfc, 0xd0, 0x36, 0xd3, 0xd6, 0xe6, 0xa9, 0x12, 0x7a, 0xc9, 0x2b, 0x59, 0x18, + 0xf9, 0x52, 0xc9, 0xac, 0xc2, 0xd9, 0x6d, 0xd0, 0xff, 0x9b, 0x06, 0x43, 0x06, 0x2d, 0xf4, 0x37, + 0x35, 0x98, 0xde, 0x24, 0x46, 0x38, 0xf0, 0xc9, 0x55, 0x23, 0x94, 0x0f, 0x19, 0x5e, 0xbd, 0x2f, + 0x86, 0xb4, 0xa5, 0x2b, 0x0a, 0x66, 0x7e, 0xc1, 0x26, 0xa3, 0x9a, 0xa8, 0x55, 0x38, 0xd1, 0x84, + 0xf3, 0x9f, 0x84, 0xf9, 0xa1, 0x0f, 0x8f, 0x75, 0xbd, 0xf2, 0x5b, 0xc2, 0x24, 0x9a, 0x8e, 0x77, + 0xfb, 0x3a, 0x54, 0x0d, 0xcb, 0x92, 0x31, 0xf5, 0x9e, 0x2b, 0x78, 0x99, 0x6c, 0xa9, 0x2f, 0x46, + 0xd8, 0x4f, 0xcc, 0xf1, 0xa2, 0x2b, 0x80, 0x8c, 0xc4, 0x5d, 0xd1, 0xaa, 0x67, 0x45, 0xea, 0x12, + 0x33, 0xa6, 0x2f, 0x0f, 0xd5, 0xe2, 0x8c, 0x2f, 0xf4, 0x4f, 0xc0, 0x6c, 0xf2, 0xcd, 0xfd, 0x31, + 0x9c, 0x8e, 0xf5, 0x9f, 0xd7, 0x00, 0x0d, 0xc7, 0xd1, 0x41, 0x01, 0xd4, 0x04, 0x44, 0x34, 0xc9, + 0x2b, 0x45, 0x1d, 0x48, 0x13, 0xfe, 0xd0, 0xb1, 0xcb, 0xaa, 0x28, 0x08, 0xb0, 0x24, 0xa4, 0xff, + 0xb9, 0x06, 0x71, 0xec, 0x2e, 0xf4, 0x31, 0xa8, 0x5b, 0x24, 0x30, 0x7d, 0xbb, 0x1f, 0xc6, 0x1d, + 0x91, 0x1e, 0x98, 0xad, 0xb8, 0x0a, 0xab, 0x70, 0x48, 0x87, 0x89, 0xd0, 0x08, 0xb6, 0xdb, 0x2d, + 0xa1, 0x38, 0xb2, 0x63, 0xfe, 0x36, 0x2b, 0xc1, 0xa2, 0x26, 0x7e, 0xc0, 0x3e, 0x36, 0xc2, 0x03, + 0x76, 0xb4, 0x79, 0x1f, 0x5e, 0xeb, 0xa3, 0xa3, 0x5f, 0xea, 0xeb, 0xff, 0xb6, 0x02, 0xc9, 0x78, + 0x69, 0x45, 0x87, 0x60, 0x38, 0xbc, 0x40, 0xe5, 0x81, 0x85, 0x17, 0xf8, 0x10, 0x8b, 0x2d, 0xca, + 0x23, 0x42, 0xf3, 0xbb, 0x27, 0x35, 0x20, 0x28, 0x0f, 0xe7, 0x2c, 0x21, 0xd0, 0xb3, 0xaa, 0x5f, + 0xe7, 0x54, 0xe3, 0x7d, 0xd1, 0xbe, 0x60, 0xce, 0x9a, 0xf7, 0x44, 0x00, 0x05, 0xd9, 0xff, 0x84, + 0x0b, 0xe7, 0xc7, 0x84, 0xff, 0x5e, 0x35, 0x11, 0xe4, 0x21, 0x8a, 0x0c, 0x31, 0x9f, 0xf8, 0x30, + 0x76, 0xea, 0xd3, 0x7f, 0x49, 0x83, 0x49, 0x11, 0x13, 0x69, 0x04, 0x77, 0xdc, 0x2e, 0x54, 0x99, + 0xb8, 0x5e, 0x4a, 0x92, 0xe9, 0x6c, 0x79, 0x5e, 0x98, 0x88, 0x0d, 0xc5, 0x1c, 0xe6, 0xd8, 0xbf, + 0x98, 0xe3, 0xd7, 0xbf, 0x31, 0x0e, 0x97, 0x04, 0xc8, 0xd0, 0x31, 0x2d, 0x37, 0xe1, 0x1e, 0x9c, + 0x16, 0xd3, 0xd4, 0xf2, 0x0d, 0x5b, 0x5e, 0xcf, 0x15, 0xd3, 0xc0, 0xc4, 0xd5, 0xed, 0x10, 0x3a, + 0x9c, 0x45, 0x83, 0x47, 0x40, 0x61, 0xc5, 0xd7, 0x88, 0xe1, 0x84, 0x5b, 0x11, 0xed, 0x4a, 0x99, + 0x08, 0x28, 0xc3, 0xf8, 0x70, 0x26, 0x15, 0x76, 0x3d, 0x28, 0x2a, 0x9a, 0x3e, 0x31, 0xd4, 0xbb, + 0xc9, 0x12, 0xfe, 0x75, 0xab, 0x99, 0x18, 0x71, 0x0e, 0x25, 0x66, 0xca, 0x32, 0x76, 0x99, 0x66, + 0x8c, 0x49, 0xe8, 0xdb, 0x84, 0x3b, 0xd0, 0x56, 0x85, 0x2e, 0x9b, 0xac, 0xc2, 0x69, 0x58, 0xf4, + 0x1c, 0xcc, 0xb2, 0xeb, 0xd6, 0xf8, 0xc5, 0x72, 0x35, 0x0e, 0x10, 0x7e, 0x33, 0x51, 0x83, 0x53, + 0x90, 0xfa, 0xaf, 0x6b, 0x30, 0xad, 0x2e, 0xa0, 0x11, 0xdc, 0x5b, 0x77, 0x14, 0x86, 0x5d, 0xc6, + 0x67, 0x54, 0x25, 0x3b, 0x22, 0xcf, 0x3e, 0x9d, 0xf1, 0x0d, 0xbb, 0x77, 0x23, 0x29, 0xe6, 0x5f, + 0xea, 0xde, 0x6d, 0xe8, 0x24, 0x91, 0xf7, 0x6e, 0xe9, 0x1a, 0x3c, 0x44, 0x18, 0xbd, 0x0a, 0x63, + 0xa6, 0x6f, 0x8b, 0x81, 0x79, 0xa6, 0x98, 0x7e, 0x82, 0xdb, 0xf1, 0xf3, 0xa0, 0x26, 0x6e, 0x63, + 0x8a, 0x51, 0xff, 0xee, 0x18, 0xd4, 0x95, 0x90, 0x6b, 0x68, 0xb5, 0x8c, 0x7e, 0x1b, 0xa3, 0x8f, + 0x74, 0xdc, 0x55, 0x18, 0xeb, 0xf6, 0x07, 0x05, 0x15, 0x5c, 0x89, 0xee, 0x2a, 0x45, 0xd7, 0xed, + 0x0f, 0xd0, 0x2b, 0x52, 0x65, 0x2e, 0xa6, 0xd4, 0x4a, 0x47, 0xca, 0x94, 0xda, 0x1c, 0x2d, 0xcf, + 0xf1, 0xdc, 0xe5, 0xe9, 0xc2, 0x64, 0x20, 0xf4, 0xe9, 0x6a, 0x89, 0x88, 0x7f, 0xca, 0x50, 0x0b, + 0x05, 0x9a, 0xcb, 0xe1, 0x91, 0x7e, 0x1d, 0x11, 0xa1, 0x52, 0xc0, 0x80, 0xbd, 0x66, 0x60, 0x2a, + 0x46, 0x8d, 0x4b, 0x01, 0xeb, 0xac, 0x04, 0x8b, 0x1a, 0xfd, 0xe7, 0x2a, 0x80, 0x86, 0x11, 0xa2, + 0xf7, 0x41, 0x95, 0xbd, 0x6d, 0x12, 0x9b, 0x4d, 0x09, 0x97, 0x64, 0x04, 0x01, 0xe6, 0x75, 0xa8, + 0x23, 0xde, 0xba, 0x15, 0x9b, 0x19, 0x76, 0xe3, 0x2b, 0xe8, 0x29, 0x0f, 0xe3, 0xa2, 0xf3, 0x69, + 0x2c, 0xf7, 0x7c, 0x5a, 0x87, 0xc9, 0x9e, 0xed, 0x32, 0x47, 0x8f, 0x62, 0x16, 0x03, 0x7e, 0x25, + 0xc5, 0x51, 0xe0, 0x08, 0x97, 0xfe, 0xa3, 0x0a, 0x5d, 0xc5, 0xb6, 0x1b, 0x12, 0xd7, 0x70, 0x4d, + 0x82, 0xee, 0x02, 0x18, 0x83, 0xd0, 0xe3, 0xc7, 0xbc, 0x58, 0xcc, 0x9f, 0x2a, 0x38, 0x61, 0x12, + 0xeb, 0xb2, 0xc4, 0xc8, 0xaf, 0x8a, 0xe2, 0xdf, 0x58, 0xa1, 0x46, 0x69, 0x87, 0x76, 0x8f, 0xbc, + 0x6a, 0xbb, 0x96, 0x77, 0x47, 0x8c, 0x6f, 0x69, 0xda, 0xb7, 0x25, 0x46, 0x4e, 0x3b, 0xfe, 0x8d, + 0x15, 0x6a, 0xe8, 0xd3, 0xb0, 0xc0, 0x32, 0x17, 0xb8, 0x2c, 0xa6, 0xa5, 0x68, 0x9c, 0xe7, 0x38, + 0xd1, 0xc1, 0x53, 0x63, 0x11, 0xc4, 0x16, 0x9a, 0x39, 0x30, 0x38, 0xf7, 0x6b, 0xfd, 0xdb, 0x1a, + 0x9c, 0xcd, 0x1c, 0x0b, 0x74, 0x15, 0xe6, 0x63, 0x37, 0x01, 0x95, 0x51, 0xd6, 0xe2, 0x20, 0xad, + 0xd7, 0xd3, 0x00, 0x78, 0xf8, 0x1b, 0xb4, 0x2a, 0xa5, 0x05, 0x95, 0x11, 0x0b, 0x1f, 0x83, 0xc7, + 0x04, 0xaa, 0x2c, 0x5e, 0x8d, 0xb3, 0xbe, 0xd3, 0x3f, 0x9b, 0x68, 0x70, 0x3c, 0x60, 0x74, 0x7f, + 0x6c, 0x90, 0xae, 0x74, 0xae, 0x96, 0xfb, 0xa3, 0x41, 0x0b, 0x31, 0xaf, 0x43, 0x8f, 0xab, 0x0f, + 0x02, 0x24, 0x23, 0x8a, 0x1e, 0x05, 0xe8, 0x03, 0x00, 0xe1, 0x90, 0x63, 0xbb, 0x5d, 0xd4, 0x85, + 0x9a, 0x21, 0xf2, 0x6a, 0x88, 0xc5, 0xf6, 0x42, 0x31, 0x65, 0x4b, 0x20, 0xe1, 0x4e, 0x7f, 0xd1, + 0x2f, 0x2c, 0x91, 0xeb, 0x7f, 0x4f, 0x83, 0x73, 0xd9, 0x4f, 0x78, 0x46, 0x38, 0x61, 0x7b, 0x50, + 0xf7, 0xe3, 0xcf, 0xc4, 0xca, 0xfc, 0x29, 0x35, 0xf6, 0x89, 0x92, 0x67, 0x87, 0x4a, 0x1f, 0x4d, + 0xdf, 0x0b, 0xa2, 0xd9, 0x49, 0x87, 0x43, 0x91, 0x42, 0xbc, 0xd2, 0x12, 0xac, 0xe2, 0xd7, 0xdf, + 0xae, 0x00, 0xdc, 0x24, 0xe1, 0x1d, 0xcf, 0xdf, 0xa6, 0x63, 0xf4, 0xae, 0x7a, 0x4a, 0x76, 0x01, + 0xc6, 0xfb, 0x9e, 0x15, 0x08, 0x46, 0xc5, 0xde, 0x78, 0xb1, 0x3b, 0x6e, 0x56, 0x8a, 0x16, 0xa1, + 0xca, 0x4c, 0xc1, 0xe2, 0x38, 0x60, 0xc2, 0x2f, 0x15, 0x78, 0x02, 0xcc, 0xcb, 0x79, 0xf8, 0x64, + 0xe6, 0x8f, 0x1a, 0x08, 0x71, 0x5e, 0x84, 0x4f, 0xe6, 0x65, 0x58, 0xd6, 0xea, 0x3f, 0x3b, 0x0e, + 0x89, 0xcc, 0x30, 0xb1, 0x52, 0x3e, 0xfe, 0x80, 0x94, 0xf2, 0x4f, 0xc3, 0x82, 0xe3, 0x19, 0x56, + 0xc3, 0x70, 0xe8, 0xb2, 0xf7, 0x3b, 0x7c, 0x3e, 0x0c, 0xb7, 0x4b, 0xa2, 0x0c, 0x2f, 0x8c, 0x05, + 0xdc, 0xc8, 0x81, 0xc1, 0xb9, 0x5f, 0xa3, 0x81, 0x92, 0x90, 0x86, 0x8a, 0x21, 0xab, 0xa5, 0x33, + 0xe7, 0x2c, 0xa9, 0xce, 0xc8, 0xf2, 0x6c, 0x4e, 0x26, 0xad, 0x41, 0x5f, 0xd1, 0xe0, 0x2c, 0xd9, + 0x0d, 0x89, 0xef, 0x1a, 0xce, 0x6d, 0xdf, 0xd8, 0xdc, 0xb4, 0xcd, 0x84, 0x17, 0xd1, 0xda, 0xc1, + 0xfe, 0xe2, 0xd9, 0x95, 0x2c, 0x80, 0x7b, 0xfb, 0x8b, 0x1f, 0x19, 0x4e, 0x0d, 0x15, 0xb9, 0x1e, + 0x67, 0x7e, 0xc2, 0x96, 0x63, 0x36, 0xb9, 0xf3, 0xcf, 0x42, 0xfd, 0x18, 0x1e, 0xb0, 0x53, 0xaa, + 0x89, 0xe6, 0x5b, 0x13, 0xa0, 0x38, 0x7e, 0x1f, 0x23, 0xd6, 0xf0, 0xdf, 0xd1, 0xe0, 0x8c, 0xe9, + 0xd8, 0xc4, 0x0d, 0x53, 0xde, 0xbd, 0x7c, 0x6b, 0xbc, 0x52, 0xcc, 0x25, 0xbd, 0x4f, 0xdc, 0x76, + 0xab, 0xe9, 0xb9, 0x2e, 0x31, 0xc3, 0x66, 0x06, 0x76, 0xae, 0xef, 0x64, 0xd5, 0xe0, 0xcc, 0xd6, + 0xb0, 0x0e, 0xb1, 0xf2, 0x76, 0x4b, 0x7d, 0x23, 0xd5, 0x14, 0x65, 0x58, 0xd6, 0xa2, 0xa7, 0xa1, + 0xde, 0xf5, 0xbd, 0x41, 0x3f, 0x68, 0x32, 0xff, 0x26, 0xbe, 0xc3, 0x98, 0x38, 0x71, 0x35, 0x2e, + 0xc6, 0x2a, 0x0c, 0xfa, 0x28, 0x4c, 0xf3, 0x9f, 0x6b, 0x3e, 0xd9, 0xb4, 0x77, 0xc5, 0x8e, 0x63, + 0xee, 0x12, 0x57, 0x95, 0x72, 0x9c, 0x80, 0x42, 0x1f, 0x84, 0x29, 0x3b, 0x08, 0x06, 0xc4, 0x5f, + 0xc7, 0x37, 0x44, 0x40, 0x40, 0x66, 0x60, 0x6d, 0x47, 0x85, 0x38, 0xae, 0x47, 0xbf, 0xa8, 0xc1, + 0xac, 0x4f, 0xde, 0x1c, 0xd8, 0x3e, 0xb1, 0x18, 0xd1, 0x40, 0xb8, 0xdf, 0x77, 0x4a, 0xfa, 0xfc, + 0x2f, 0xe1, 0x04, 0x56, 0xbe, 0xd2, 0xa5, 0x69, 0x22, 0x59, 0x89, 0x53, 0x4d, 0xa0, 0x63, 0x15, + 0xd8, 0x5d, 0xd7, 0x76, 0xbb, 0xcb, 0x4e, 0x37, 0x58, 0xa8, 0xb1, 0xdd, 0xcb, 0x45, 0xaf, 0xb8, + 0x18, 0xab, 0x30, 0xe8, 0xe3, 0x30, 0x33, 0x08, 0xe8, 0xda, 0xed, 0x11, 0x3e, 0xc0, 0x53, 0xb1, + 0xe3, 0xe1, 0xba, 0x5a, 0x81, 0x93, 0x70, 0x54, 0xdb, 0x8b, 0x0a, 0xc4, 0x30, 0x03, 0x8f, 0x82, + 0x40, 0xdb, 0xb9, 0x9e, 0xa8, 0xc1, 0x29, 0xc8, 0xf3, 0xcb, 0x70, 0x3a, 0xa3, 0x9b, 0xc7, 0xda, + 0x20, 0xbf, 0x5e, 0x81, 0xf7, 0x1e, 0xb9, 0x2c, 0xd1, 0xb7, 0x34, 0xa8, 0x93, 0xdd, 0xd0, 0x37, + 0xa4, 0x1b, 0x24, 0x9d, 0xa3, 0xee, 0x83, 0xd9, 0x04, 0x4b, 0x2b, 0x31, 0x25, 0x3e, 0x6f, 0xf2, + 0xcc, 0x53, 0x6a, 0xb0, 0xda, 0x20, 0x2a, 0xb5, 0xf3, 0x28, 0x19, 0xaa, 0xed, 0x4e, 0xa4, 0xd2, + 0x10, 0x35, 0xe7, 0x5f, 0x84, 0xb9, 0x34, 0xe6, 0x63, 0x0d, 0xd5, 0x3f, 0xad, 0x40, 0x75, 0xcd, + 0x31, 0x4e, 0x24, 0xba, 0xe3, 0xe7, 0x13, 0x51, 0xb5, 0x8a, 0xc5, 0x2a, 0x63, 0x6d, 0xcd, 0x8d, + 0xe9, 0xb7, 0x95, 0x8a, 0xe9, 0xf7, 0x52, 0x09, 0x1a, 0x87, 0x87, 0xf0, 0xfb, 0xbe, 0x06, 0x53, + 0x0c, 0xee, 0x04, 0x62, 0x17, 0xbc, 0x9e, 0x8c, 0x5d, 0xf0, 0x5c, 0xf1, 0x4e, 0xe5, 0xc4, 0x2c, + 0xf8, 0x83, 0xa8, 0x33, 0x2c, 0x36, 0xd3, 0x6b, 0x6a, 0xee, 0x20, 0xde, 0x9b, 0x27, 0xb3, 0x62, + 0xda, 0xdd, 0xf0, 0x4c, 0xc3, 0x19, 0x0a, 0x6c, 0x77, 0x68, 0x02, 0x21, 0x17, 0xa6, 0x88, 0x88, + 0x45, 0x12, 0xf5, 0xa6, 0x98, 0x6c, 0x1b, 0x45, 0x34, 0x89, 0xe9, 0x45, 0x25, 0x01, 0x8e, 0x49, + 0xe8, 0xbf, 0x55, 0x81, 0xba, 0x32, 0x9b, 0xef, 0x48, 0xcc, 0xbc, 0x2b, 0x99, 0x99, 0x36, 0x2a, + 0xcc, 0xcd, 0xf1, 0xdc, 0x31, 0xb2, 0x6c, 0x04, 0x50, 0x37, 0xe3, 0x30, 0xc8, 0xa5, 0x16, 0xb8, + 0x12, 0x4e, 0x59, 0xb8, 0x5b, 0xc7, 0x05, 0x58, 0xa5, 0xa2, 0xff, 0x8b, 0x0a, 0x4c, 0xae, 0xf9, + 0x1e, 0x9d, 0xe3, 0x13, 0x60, 0x10, 0x1b, 0x09, 0x06, 0x51, 0x70, 0xf3, 0xf2, 0xd6, 0xe6, 0xb2, + 0x88, 0x37, 0x52, 0x2c, 0xa2, 0x51, 0x8a, 0xca, 0xe1, 0x4c, 0xe2, 0x07, 0x1a, 0xd4, 0x05, 0xe4, + 0x09, 0xb0, 0x09, 0x23, 0xc9, 0x26, 0x9e, 0x2f, 0xd3, 0xb1, 0x1c, 0x46, 0xf1, 0x75, 0x0d, 0x66, + 0x04, 0xc4, 0x2a, 0xe9, 0x6d, 0x10, 0x1f, 0x5d, 0x81, 0xc9, 0x60, 0xc0, 0xe6, 0x52, 0xf4, 0xe8, + 0x31, 0x95, 0x55, 0xf8, 0x1b, 0x86, 0xc9, 0x32, 0x46, 0x71, 0x10, 0x25, 0x98, 0x26, 0x2f, 0xc0, + 0xd1, 0xc7, 0x54, 0xa1, 0xf3, 0x3d, 0x67, 0x28, 0x1e, 0x01, 0xf6, 0x1c, 0x82, 0x59, 0x0d, 0xd5, + 0xa3, 0xe8, 0xdf, 0xe8, 0x96, 0x8a, 0xe9, 0x51, 0xb4, 0x3a, 0xc0, 0xbc, 0x5c, 0xff, 0xb9, 0x71, + 0x39, 0xda, 0x8c, 0x8f, 0x5d, 0x83, 0x29, 0xd3, 0x27, 0x46, 0x48, 0xac, 0xc6, 0xde, 0x28, 0x8d, + 0x63, 0x02, 0x5d, 0x33, 0xfa, 0x02, 0xc7, 0x1f, 0x53, 0xd1, 0x49, 0xbd, 0x78, 0xaa, 0xc4, 0x62, + 0x66, 0xee, 0xa5, 0xd3, 0xf3, 0x50, 0xf5, 0xee, 0xb8, 0xd2, 0xf5, 0xe2, 0x50, 0xc2, 0xac, 0x2b, + 0xb7, 0x28, 0x34, 0xe6, 0x1f, 0xa9, 0xb1, 0x2c, 0xc6, 0x0f, 0x89, 0x65, 0xd1, 0x83, 0xc9, 0x1e, + 0x9b, 0x86, 0x72, 0x01, 0x0d, 0x13, 0x33, 0xaa, 0x06, 0xba, 0x66, 0xa8, 0x71, 0x44, 0x83, 0x0a, + 0xc1, 0x54, 0x4e, 0x0b, 0xfa, 0x86, 0x49, 0x54, 0x21, 0xf8, 0x66, 0x54, 0x88, 0xe3, 0x7a, 0x74, + 0x37, 0x19, 0x72, 0x66, 0xb2, 0x84, 0x99, 0x53, 0xb4, 0x4f, 0x89, 0x32, 0xc3, 0x07, 0x3f, 0x37, + 0xec, 0xcc, 0x57, 0xc7, 0xe5, 0x32, 0x15, 0x8c, 0x3f, 0x3b, 0xdd, 0x91, 0x56, 0x28, 0xdd, 0xd1, + 0x47, 0xa0, 0xda, 0xdf, 0x32, 0x82, 0x68, 0xad, 0x46, 0x51, 0xd9, 0xab, 0x6b, 0xb4, 0xf0, 0xde, + 0xfe, 0xe2, 0xb4, 0x20, 0xcd, 0x7e, 0x63, 0x0e, 0x8b, 0x06, 0x70, 0x3a, 0x08, 0x0d, 0x87, 0x74, + 0x6c, 0x61, 0x3e, 0x0a, 0x42, 0xa3, 0xd7, 0x2f, 0x10, 0x5c, 0x9d, 0x5d, 0x5c, 0x75, 0x86, 0x51, + 0xe1, 0x2c, 0xfc, 0xe8, 0x67, 0x35, 0x58, 0x60, 0xe5, 0xcb, 0x83, 0xd0, 0xe3, 0x99, 0x1e, 0x62, + 0xe2, 0xc7, 0xbf, 0xb7, 0x65, 0xca, 0x7e, 0x27, 0x07, 0x1f, 0xce, 0xa5, 0x84, 0xde, 0x82, 0xb3, + 0x8e, 0x11, 0x84, 0xcb, 0x66, 0x68, 0xef, 0xd8, 0xe1, 0x5e, 0xdc, 0x84, 0xea, 0xb1, 0x9b, 0xc0, + 0x7c, 0x37, 0x6e, 0x64, 0x21, 0xc3, 0xd9, 0x34, 0xf4, 0xff, 0xa3, 0x01, 0x1a, 0x5e, 0x42, 0xa8, + 0x07, 0x35, 0x8b, 0x6c, 0x1a, 0x03, 0x27, 0x8c, 0x24, 0x81, 0xd2, 0x01, 0x91, 0x24, 0x77, 0x6e, + 0x09, 0xc4, 0x58, 0x92, 0x40, 0x7d, 0x98, 0xba, 0xb3, 0x65, 0x87, 0xc4, 0xb1, 0x83, 0xf0, 0x7e, + 0x05, 0x60, 0x92, 0xc2, 0xcf, 0xab, 0x11, 0x66, 0x1c, 0x13, 0xd1, 0xff, 0xea, 0x18, 0xd4, 0x8e, + 0x91, 0x53, 0x73, 0x00, 0x48, 0x04, 0x64, 0xa0, 0x12, 0x13, 0x29, 0x63, 0x34, 0x63, 0x62, 0x4d, + 0x73, 0x08, 0x19, 0xce, 0x20, 0x80, 0xde, 0x82, 0x33, 0xb6, 0xbb, 0xe9, 0x1b, 0x41, 0xe8, 0x0f, + 0xcc, 0x70, 0xe0, 0x93, 0x32, 0x61, 0xdd, 0x99, 0xa5, 0xa1, 0x9d, 0x81, 0x0e, 0x67, 0x12, 0x41, + 0x9b, 0x30, 0x79, 0xc7, 0xf3, 0xb7, 0x29, 0x03, 0x1d, 0x2f, 0x91, 0x98, 0xe7, 0x55, 0x86, 0x23, + 0xe6, 0x9c, 0xfc, 0x77, 0x80, 0x23, 0xe4, 0xfa, 0xef, 0x69, 0x50, 0xe5, 0xef, 0xd7, 0x1e, 0x0e, + 0x2d, 0x8b, 0xb5, 0x35, 0x37, 0x54, 0x31, 0xd5, 0x7d, 0x18, 0xc4, 0xc3, 0xa2, 0xfb, 0xb0, 0xc6, + 0xe6, 0x88, 0x34, 0xbf, 0x37, 0x26, 0x3a, 0xc3, 0x64, 0x86, 0x36, 0x9c, 0x16, 0xe2, 0xef, 0x0d, + 0x7b, 0x93, 0xd0, 0x05, 0xd6, 0x32, 0xf6, 0x02, 0xf1, 0x7e, 0x9c, 0xb1, 0xde, 0xe6, 0x70, 0x35, + 0xce, 0xfa, 0x06, 0xfd, 0x4b, 0x8d, 0x9e, 0xce, 0xa1, 0x6f, 0x9b, 0xe5, 0xc2, 0xee, 0xca, 0xc6, + 0x2d, 0xad, 0x72, 0x6c, 0xdc, 0x7c, 0xb0, 0x1e, 0x1f, 0xd3, 0xac, 0xf4, 0xde, 0xfe, 0xe2, 0x62, + 0x86, 0x79, 0x32, 0x32, 0xa8, 0xd3, 0xa1, 0x7d, 0xfb, 0x47, 0x87, 0x82, 0x30, 0xe3, 0x7e, 0xd4, + 0x64, 0x74, 0x0d, 0xaa, 0x81, 0xe9, 0xf5, 0xc9, 0x71, 0xa2, 0x9a, 0xcb, 0x11, 0xee, 0xd0, 0x2f, + 0x31, 0x47, 0x70, 0xfe, 0x0d, 0x98, 0x56, 0x5b, 0x9e, 0x61, 0x9e, 0x68, 0xa9, 0xe6, 0x89, 0x63, + 0xdf, 0xe2, 0xa9, 0xe6, 0x8c, 0xdf, 0xae, 0x80, 0x48, 0xab, 0x37, 0xc2, 0x15, 0xc6, 0x1b, 0x51, + 0x64, 0xd1, 0x32, 0xb9, 0x04, 0xd3, 0xa9, 0xbc, 0xe3, 0x41, 0x50, 0x83, 0x8b, 0x22, 0x0f, 0x26, + 0x1c, 0x63, 0x83, 0x38, 0x51, 0x8a, 0xb5, 0xab, 0x25, 0x32, 0x80, 0xf1, 0xf0, 0xd7, 0x41, 0xca, + 0xd0, 0xcd, 0x0b, 0xb1, 0x20, 0x73, 0xfe, 0x59, 0xa8, 0x2b, 0x60, 0xc7, 0xb2, 0x09, 0xfd, 0x40, + 0x83, 0xe9, 0x44, 0x38, 0xb1, 0x1e, 0x8c, 0xf9, 0xd2, 0x16, 0x50, 0xf4, 0x8e, 0x27, 0xf2, 0x6e, + 0x7a, 0xec, 0x10, 0x20, 0x4c, 0xe9, 0xc8, 0xc8, 0x63, 0x95, 0xfb, 0x15, 0x79, 0xec, 0x6b, 0x1a, + 0x9c, 0x8b, 0x3a, 0x94, 0x0c, 0xc0, 0x81, 0x9e, 0x84, 0x9a, 0xd1, 0xb7, 0x99, 0xe5, 0x57, 0x35, + 0x9e, 0x2f, 0xaf, 0xb5, 0x59, 0x19, 0x96, 0xb5, 0xe8, 0x43, 0x50, 0x8b, 0x96, 0x9e, 0x90, 0xfc, + 0x24, 0xdf, 0x92, 0xb7, 0x56, 0x12, 0x02, 0x3d, 0xa1, 0x44, 0x7f, 0xad, 0xc6, 0x07, 0xb5, 0x24, + 0xcc, 0xef, 0xb8, 0xf5, 0x5f, 0xaa, 0xc0, 0x0c, 0xb7, 0x94, 0x34, 0x6c, 0xd7, 0xb2, 0xdd, 0xee, + 0x09, 0x1c, 0x10, 0x89, 0xdc, 0xd0, 0x95, 0xfb, 0x95, 0x1b, 0xfa, 0x3a, 0x4c, 0xbc, 0x49, 0x39, + 0x55, 0xb4, 0xc0, 0x47, 0x62, 0x18, 0x72, 0xf1, 0x32, 0x26, 0x17, 0x60, 0x81, 0x82, 0x45, 0x08, + 0x4d, 0x0c, 0xcb, 0xc3, 0x12, 0x21, 0x34, 0xd1, 0xe8, 0xfc, 0x74, 0x18, 0x2c, 0x13, 0xed, 0x09, + 0x4c, 0xf5, 0xeb, 0x09, 0x59, 0xe0, 0x85, 0xe2, 0x81, 0x46, 0xf3, 0xac, 0x29, 0xdd, 0x94, 0x35, + 0xe5, 0x93, 0xc5, 0x49, 0x1c, 0x6e, 0x4a, 0xf9, 0xe5, 0x0a, 0x00, 0x05, 0xe3, 0x39, 0x7b, 0x85, + 0x9f, 0x65, 0x9c, 0xc3, 0x7d, 0xea, 0xdd, 0x92, 0x78, 0x5d, 0x97, 0xc9, 0x5e, 0xc7, 0x62, 0x9b, + 0x7d, 0x32, 0xd1, 0x6b, 0x72, 0x03, 0x8e, 0xdf, 0xa7, 0x0d, 0xa8, 0xff, 0xa6, 0x06, 0x2c, 0x47, + 0x49, 0xeb, 0x66, 0x07, 0x7d, 0x1c, 0x66, 0x6c, 0x7e, 0x29, 0xda, 0x52, 0x23, 0xbf, 0xb1, 0x8b, + 0x9b, 0xb6, 0x5a, 0x81, 0x93, 0x70, 0xc8, 0x55, 0xc6, 0xb5, 0x4c, 0xc2, 0x6c, 0xd1, 0x10, 0x19, + 0x39, 0x7d, 0x3a, 0x7b, 0x66, 0xf4, 0x1f, 0x57, 0xe0, 0x54, 0x0a, 0x76, 0x04, 0x55, 0xe5, 0xc1, + 0x70, 0x30, 0x25, 0x98, 0xfa, 0xd8, 0x09, 0x04, 0x53, 0x97, 0x71, 0xcd, 0xc7, 0x1f, 0x70, 0x5c, + 0xf3, 0xef, 0x69, 0xc0, 0x72, 0x31, 0x9f, 0x00, 0x0f, 0xfd, 0x5c, 0x92, 0x87, 0x3e, 0x5b, 0x78, + 0xed, 0xe4, 0xb0, 0xce, 0x3f, 0xd7, 0x80, 0x85, 0x39, 0x16, 0x9e, 0x20, 0x8a, 0x73, 0x85, 0x96, + 0xe3, 0x5c, 0x71, 0x49, 0xf8, 0x66, 0xa4, 0xec, 0x8a, 0x8a, 0x7f, 0xc6, 0x87, 0x14, 0xf7, 0x8b, + 0xb1, 0x24, 0x2b, 0x19, 0x76, 0xc1, 0x40, 0x6f, 0xc1, 0x4c, 0xb0, 0xe5, 0x79, 0x61, 0xa4, 0xe1, + 0x8b, 0xd9, 0x6b, 0x14, 0x77, 0x8d, 0x8e, 0xfa, 0xc2, 0x77, 0x67, 0x47, 0x45, 0x8e, 0x93, 0xb4, + 0xf4, 0xdf, 0x11, 0xdd, 0x3f, 0xc6, 0x56, 0x39, 0x41, 0xd6, 0xf7, 0x81, 0x14, 0xeb, 0xcb, 0xcb, + 0x73, 0xfd, 0x5d, 0xd1, 0x0b, 0x19, 0x9d, 0xba, 0x0f, 0x33, 0x8e, 0x9a, 0xd0, 0x45, 0x2c, 0xcc, + 0x42, 0xb9, 0x60, 0x64, 0x10, 0xba, 0x44, 0x31, 0x4e, 0x12, 0xa0, 0xfc, 0x31, 0x6a, 0x3c, 0xcf, + 0x47, 0xcb, 0x93, 0x2e, 0xb0, 0x19, 0x58, 0x53, 0x2b, 0x70, 0x12, 0x4e, 0x7f, 0x19, 0xde, 0xcf, + 0x9b, 0xce, 0x7c, 0xd2, 0x57, 0x76, 0x4d, 0x12, 0x04, 0x4d, 0xa3, 0x6f, 0x98, 0x54, 0x0f, 0x61, + 0xaf, 0x3a, 0xb9, 0x8d, 0xf0, 0xa9, 0x74, 0x6c, 0x5b, 0x69, 0x1b, 0x18, 0x8a, 0x41, 0xf4, 0xa5, + 0x0a, 0x2c, 0x2a, 0x38, 0x13, 0xae, 0x34, 0xd1, 0xaa, 0xfb, 0xa6, 0x06, 0x75, 0xc3, 0x75, 0xbd, + 0xd0, 0x50, 0x6f, 0xae, 0x48, 0x89, 0xc0, 0xe1, 0xb9, 0xb4, 0x96, 0x96, 0x63, 0x3a, 0xa9, 0x8b, + 0x6a, 0xa5, 0x06, 0xab, 0xcd, 0x39, 0xff, 0x22, 0xcc, 0xa5, 0xbf, 0x3a, 0x96, 0xc2, 0xd1, 0x80, + 0xb3, 0x4a, 0xab, 0x94, 0x80, 0xe9, 0x4f, 0xc1, 0xe4, 0x8e, 0x1d, 0xd8, 0xd1, 0x43, 0x6b, 0x65, + 0x18, 0x5f, 0xe1, 0xc5, 0x38, 0xaa, 0xd7, 0x5f, 0x82, 0xd3, 0x2a, 0x0e, 0xb6, 0x6f, 0x6e, 0x76, + 0x8e, 0x33, 0x11, 0xab, 0x70, 0x49, 0xc1, 0x90, 0xf9, 0x3c, 0xec, 0x38, 0xe8, 0xbe, 0x3c, 0x11, + 0x2d, 0x73, 0xf1, 0x7e, 0xe1, 0x3b, 0x1a, 0x3c, 0x4a, 0xf2, 0x56, 0x8c, 0x58, 0xf3, 0xaf, 0x95, + 0x9d, 0xd2, 0xdc, 0x25, 0x29, 0x22, 0x0a, 0xe5, 0x55, 0xe3, 0xfc, 0xa6, 0xa1, 0xbb, 0x89, 0x6c, + 0x01, 0x65, 0x7c, 0x50, 0x33, 0x67, 0xf9, 0xb0, 0x5c, 0x01, 0xc8, 0x87, 0x5a, 0x20, 0xe6, 0xb2, + 0xd4, 0x2b, 0xd6, 0x8c, 0xb5, 0x21, 0xdc, 0xec, 0xc4, 0x2f, 0x2c, 0xe9, 0xa0, 0x5f, 0xd3, 0xe0, + 0x8c, 0x93, 0xb1, 0x35, 0x04, 0xaf, 0xbf, 0xfd, 0x20, 0xb6, 0x1d, 0x37, 0x5d, 0x66, 0xd5, 0xe0, + 0xcc, 0xb6, 0xa0, 0xbf, 0x9b, 0xfb, 0x5e, 0xb2, 0x5a, 0x22, 0xa5, 0xd1, 0x51, 0x1b, 0xa0, 0xc0, + 0xd3, 0xc9, 0x7f, 0x33, 0xc9, 0xc5, 0x0f, 0x66, 0x5f, 0x33, 0x61, 0x62, 0x83, 0x49, 0xf0, 0x62, + 0xbd, 0x17, 0xd7, 0x17, 0xb8, 0x22, 0xc0, 0xe5, 0x6b, 0xfe, 0x3f, 0x16, 0xa8, 0xd1, 0x12, 0xc0, + 0x86, 0xe3, 0x99, 0xdb, 0xcd, 0x76, 0x0b, 0x47, 0xac, 0x9d, 0xad, 0xb1, 0x86, 0x2c, 0xc5, 0x0a, + 0x04, 0xfa, 0x2c, 0x8c, 0x59, 0x52, 0xe8, 0x7b, 0xbe, 0x8c, 0xbc, 0x1b, 0xfb, 0xf6, 0xd2, 0x15, + 0x45, 0xb1, 0x22, 0x0f, 0x6a, 0xae, 0x38, 0xe1, 0xc5, 0xfa, 0x29, 0x9e, 0xef, 0x41, 0x8a, 0x0a, + 0x52, 0x42, 0x89, 0x4a, 0xb0, 0x24, 0x42, 0x09, 0x4a, 0x11, 0xbe, 0x5a, 0x92, 0xa0, 0x94, 0xdf, + 0x0f, 0xd3, 0xae, 0xd6, 0x54, 0x69, 0x7c, 0x62, 0x74, 0x69, 0x7c, 0x26, 0x57, 0x12, 0xdf, 0x84, + 0x89, 0xd0, 0x60, 0x3e, 0x22, 0x93, 0x25, 0x5c, 0x34, 0x68, 0x07, 0x6e, 0x53, 0x34, 0xb1, 0x24, + 0xc2, 0x7e, 0x06, 0x58, 0x60, 0xa7, 0xab, 0x91, 0xe7, 0x8a, 0x17, 0x11, 0xbd, 0x8a, 0xaf, 0x46, + 0x9e, 0xd5, 0x87, 0xaf, 0x46, 0xfe, 0x3f, 0x16, 0xa8, 0xd1, 0x36, 0x95, 0x2f, 0xf9, 0x11, 0x20, + 0x9e, 0x32, 0x2f, 0x97, 0xdd, 0x9a, 0x41, 0xe4, 0x21, 0xcc, 0x7f, 0x61, 0x49, 0x00, 0x99, 0x30, + 0x29, 0x14, 0x3a, 0x11, 0x3c, 0xf6, 0xf9, 0x32, 0x01, 0xbc, 0xa3, 0x64, 0x55, 0xfc, 0xdd, 0x62, + 0x84, 0x59, 0xff, 0xee, 0x18, 0xd7, 0xc5, 0xdf, 0x41, 0xa7, 0x9a, 0x2e, 0xd4, 0x22, 0x64, 0xa5, + 0x8c, 0x1b, 0x51, 0xf6, 0x04, 0x3e, 0xa0, 0x32, 0x97, 0x82, 0x44, 0x8e, 0x9a, 0x59, 0xef, 0x11, + 0x94, 0x00, 0x4a, 0x23, 0xbd, 0x45, 0xc8, 0xbe, 0x7d, 0x1e, 0x2f, 0x74, 0xfb, 0xfc, 0x02, 0x9c, + 0x8a, 0x1c, 0x74, 0x2c, 0xc2, 0xec, 0xdf, 0xc2, 0x85, 0x95, 0xbd, 0xc3, 0x6b, 0x26, 0xab, 0x70, + 0x1a, 0x56, 0xbf, 0x0e, 0x53, 0x72, 0x5f, 0xa0, 0xc7, 0x15, 0x19, 0x2d, 0x66, 0x5d, 0xd7, 0xc9, + 0x1e, 0x17, 0xd8, 0x16, 0x13, 0x02, 0x1b, 0x57, 0xae, 0x5e, 0xa1, 0x05, 0x42, 0x76, 0xd3, 0xff, + 0xbb, 0xc6, 0x17, 0x82, 0xc8, 0x98, 0x65, 0x40, 0xbd, 0xc7, 0x03, 0x32, 0xb1, 0x27, 0x39, 0x5a, + 0xf1, 0xc7, 0x40, 0xab, 0x31, 0x1a, 0xac, 0xe2, 0x44, 0xbb, 0xc3, 0x69, 0xdd, 0xae, 0x96, 0xdc, + 0xb4, 0x23, 0x67, 0x77, 0x43, 0xc3, 0xdf, 0xa8, 0xf9, 0xb0, 0xb4, 0xc3, 0xf3, 0x61, 0x1d, 0x9d, + 0xf9, 0x43, 0xff, 0x47, 0x1a, 0x64, 0xc6, 0xab, 0x46, 0x3a, 0x4c, 0x70, 0xef, 0x62, 0x35, 0xe1, + 0x1d, 0x77, 0x3d, 0xc6, 0xa2, 0x06, 0xf9, 0x70, 0x46, 0xb8, 0xee, 0x5e, 0x27, 0x7b, 0x71, 0xa2, + 0x35, 0xb1, 0x3b, 0x46, 0x77, 0xe0, 0x63, 0x91, 0x5a, 0x3a, 0x29, 0x4c, 0x38, 0x13, 0x37, 0x73, + 0x1e, 0x65, 0xf2, 0xd3, 0x43, 0x72, 0xad, 0xc9, 0xda, 0xfa, 0x80, 0x9d, 0x47, 0x39, 0x8d, 0xc3, + 0x8d, 0x99, 0xaf, 0xc1, 0x39, 0x06, 0xb6, 0x6c, 0x31, 0x91, 0x29, 0x20, 0xd6, 0xb2, 0x65, 0xb1, + 0x07, 0x1d, 0x65, 0x13, 0xb4, 0xe9, 0x7f, 0x4a, 0xd7, 0x10, 0xc5, 0x9d, 0x4e, 0xb1, 0xf3, 0xe0, + 0x67, 0x88, 0x8a, 0xea, 0x8c, 0x16, 0x29, 0x97, 0x71, 0x20, 0xd5, 0x72, 0xc5, 0x1c, 0x23, 0xb0, + 0x63, 0x49, 0x87, 0xe5, 0x67, 0xcf, 0xea, 0xee, 0xc3, 0x92, 0x9f, 0x3d, 0xab, 0xed, 0x39, 0xb6, + 0xaf, 0xef, 0x6b, 0x30, 0xc5, 0xc0, 0x1f, 0x96, 0x5b, 0x77, 0xd6, 0xd8, 0x9c, 0xce, 0xfc, 0xae, + 0x06, 0xf3, 0x43, 0x81, 0x01, 0x46, 0x58, 0xfd, 0x27, 0x68, 0xce, 0x7a, 0x22, 0x9d, 0x87, 0xa9, + 0x9e, 0x19, 0x31, 0xe4, 0x55, 0x98, 0x49, 0x98, 0xf1, 0xe4, 0x6b, 0x30, 0x2d, 0xf3, 0x35, 0x98, + 0xfa, 0xd8, 0xab, 0x72, 0xe8, 0x63, 0xaf, 0x7f, 0x32, 0x23, 0xe6, 0x9b, 0x29, 0x4e, 0xaf, 0xc3, + 0x04, 0x7b, 0x91, 0x15, 0x25, 0xfa, 0xfc, 0x44, 0xf1, 0xa7, 0x5e, 0x01, 0x3f, 0x3f, 0xf8, 0xff, + 0x58, 0xa0, 0x45, 0x2d, 0x98, 0x33, 0x1d, 0x6f, 0x40, 0x45, 0xfe, 0x4d, 0xdb, 0x21, 0x37, 0xe3, + 0xa3, 0x4a, 0xbe, 0x2c, 0x6f, 0xa6, 0xea, 0xf1, 0xd0, 0x17, 0xa8, 0xa3, 0xaa, 0x52, 0xcf, 0x14, + 0x35, 0x69, 0xf3, 0x48, 0x5e, 0x52, 0x85, 0xf2, 0x01, 0x48, 0x34, 0x75, 0x91, 0xa3, 0xce, 0x8b, + 0xe5, 0x58, 0x4b, 0xcc, 0xca, 0x64, 0x51, 0x80, 0x15, 0x2a, 0x28, 0x80, 0xfa, 0x56, 0x9c, 0xfa, + 0x49, 0x28, 0x52, 0x2f, 0x95, 0xcd, 0x3b, 0xc5, 0xa5, 0x1b, 0xa5, 0x00, 0xab, 0x54, 0x50, 0x00, + 0x10, 0x0b, 0x8f, 0xa5, 0xf2, 0x84, 0xc4, 0x62, 0x69, 0xdc, 0xd3, 0xb8, 0x0c, 0x2b, 0x64, 0x28, + 0x51, 0x57, 0x3e, 0xac, 0x14, 0x7e, 0x9a, 0xc5, 0x88, 0xc6, 0xef, 0x33, 0x63, 0xa2, 0x71, 0x19, + 0x56, 0xc8, 0xd0, 0xe1, 0xed, 0xc5, 0xcf, 0x69, 0x85, 0xfa, 0xf5, 0x52, 0xd9, 0x77, 0xcd, 0x42, + 0x78, 0x8c, 0x0b, 0xb0, 0x4a, 0x05, 0x79, 0x00, 0x3d, 0xf9, 0xcc, 0x56, 0xe8, 0x62, 0xc5, 0x7a, + 0x1a, 0xbf, 0xd6, 0xe5, 0x86, 0x85, 0xf8, 0x37, 0x56, 0x48, 0x50, 0xd5, 0x4f, 0xaa, 0xe2, 0x50, + 0x42, 0x4b, 0x19, 0x49, 0x0d, 0xff, 0x58, 0x2c, 0x8a, 0xd6, 0xd9, 0xbe, 0x7d, 0x4c, 0x11, 0x43, + 0xef, 0xed, 0x2f, 0x4e, 0x33, 0x66, 0x32, 0x24, 0x96, 0xc6, 0x56, 0xfb, 0xe9, 0xc3, 0xac, 0xf6, + 0xe8, 0x2a, 0xcc, 0x07, 0xea, 0xe5, 0x36, 0x63, 0x10, 0x33, 0xec, 0x13, 0xf9, 0x30, 0xbb, 0x93, + 0x06, 0xc0, 0xc3, 0xdf, 0x70, 0x0e, 0x48, 0x2c, 0xf6, 0xfd, 0xac, 0xca, 0x01, 0x79, 0x19, 0x96, + 0xb5, 0x43, 0xe9, 0x32, 0x4f, 0x9d, 0x54, 0xba, 0xcc, 0x2f, 0xa8, 0xf9, 0x11, 0xe7, 0x4a, 0xf8, + 0x6e, 0x15, 0x49, 0x90, 0x98, 0x4e, 0xd6, 0x39, 0x7f, 0x42, 0xc9, 0x3a, 0xa9, 0xaa, 0x4b, 0xd4, + 0xc4, 0xa5, 0x6c, 0x86, 0x50, 0xac, 0xea, 0xae, 0xa4, 0x2b, 0xf1, 0x30, 0xbc, 0xfe, 0x1f, 0xa8, + 0x4a, 0x18, 0x89, 0xc0, 0xe4, 0x04, 0xa4, 0x4e, 0x92, 0xd0, 0x0b, 0x9a, 0xe5, 0x64, 0x76, 0x92, + 0xeb, 0xf3, 0xf8, 0xef, 0x35, 0x98, 0x8d, 0xc1, 0x4e, 0x40, 0x04, 0xb3, 0x92, 0x22, 0xd8, 0x27, + 0x4b, 0x76, 0x2c, 0x47, 0x0e, 0xfb, 0x7f, 0x15, 0xb5, 0x5b, 0x4c, 0xd2, 0xb8, 0xa3, 0x98, 0x56, + 0xb4, 0x12, 0xa2, 0x6d, 0x56, 0x62, 0xca, 0xb8, 0xc7, 0x19, 0xa6, 0x96, 0x2f, 0x26, 0x8e, 0xf9, + 0x32, 0x2e, 0x93, 0xd9, 0xd9, 0x5a, 0x8f, 0x3c, 0xf3, 0x7d, 0x75, 0xdb, 0x73, 0x2f, 0xa6, 0xe5, + 0x82, 0x6e, 0x7a, 0x4a, 0x97, 0x0f, 0xcf, 0x86, 0xfa, 0x8f, 0x01, 0xea, 0x8a, 0xca, 0xf8, 0x8e, + 0x18, 0xd3, 0x06, 0x50, 0x37, 0x3d, 0x37, 0x08, 0x7d, 0x43, 0x79, 0x97, 0x57, 0x96, 0xa8, 0xe4, + 0x37, 0xcd, 0x18, 0x35, 0x56, 0xe9, 0xd0, 0xd3, 0x51, 0x2e, 0xb4, 0xb1, 0xfb, 0x61, 0xc3, 0x3b, + 0x6c, 0x71, 0x7d, 0x14, 0x20, 0x92, 0xb4, 0x64, 0x9a, 0x75, 0x19, 0x4f, 0xb1, 0x1d, 0x5c, 0x93, + 0x75, 0x58, 0x81, 0x43, 0x6f, 0xc1, 0x8c, 0xa3, 0x46, 0x52, 0x13, 0x72, 0x60, 0xb1, 0xdb, 0xfe, + 0x44, 0x4c, 0x36, 0x7e, 0xd7, 0x9c, 0x28, 0xc2, 0x49, 0x5a, 0x68, 0x1b, 0xa6, 0x9c, 0x28, 0xfc, + 0x9f, 0x10, 0x06, 0x5f, 0x2c, 0x4c, 0x98, 0x61, 0xe1, 0x26, 0x77, 0xf9, 0x13, 0xc7, 0xf8, 0xe9, + 0xba, 0x93, 0x3f, 0xca, 0x99, 0xdd, 0x63, 0x6a, 0x72, 0xdd, 0xc9, 0xa2, 0x00, 0x2b, 0x54, 0x72, + 0xcc, 0xa2, 0xb5, 0x42, 0x66, 0xd1, 0x01, 0x9c, 0xf6, 0x49, 0xe8, 0xef, 0x35, 0xf7, 0x4c, 0x96, + 0x19, 0xd4, 0x0f, 0x59, 0xa4, 0xbf, 0xa9, 0x62, 0xef, 0x6b, 0xf0, 0x30, 0x2a, 0x9c, 0x85, 0x9f, + 0x2a, 0x7b, 0x54, 0x72, 0x10, 0xcf, 0xdb, 0x99, 0xb2, 0x47, 0xe5, 0x0a, 0xcc, 0x4a, 0xd1, 0xc7, + 0xa0, 0x1e, 0x12, 0x73, 0xcb, 0xb5, 0x4d, 0xc3, 0x69, 0xb7, 0x84, 0x58, 0x16, 0x1f, 0xc4, 0x71, + 0x15, 0x56, 0xe1, 0x50, 0x03, 0xc6, 0x06, 0xb6, 0x25, 0xe4, 0xb1, 0x9f, 0x94, 0x26, 0x9e, 0x76, + 0xeb, 0xde, 0xfe, 0xe2, 0x7b, 0x63, 0x07, 0x6e, 0xd9, 0x93, 0xcb, 0xfd, 0xed, 0xee, 0xe5, 0x70, + 0xaf, 0x4f, 0x82, 0xa5, 0xf5, 0x76, 0x0b, 0xd3, 0x8f, 0xb3, 0xcc, 0xc4, 0x33, 0xa3, 0x9b, 0x89, + 0xd1, 0xd7, 0x35, 0x38, 0x6d, 0xa4, 0xad, 0x53, 0x24, 0x58, 0x98, 0x2d, 0xc1, 0x95, 0xb3, 0x4d, + 0x5e, 0x71, 0x2c, 0x9e, 0xe5, 0x61, 0x7a, 0x38, 0xab, 0x11, 0xfa, 0x0d, 0x80, 0x58, 0x88, 0x29, + 0x6d, 0xc4, 0xfe, 0xaf, 0x55, 0x38, 0x5b, 0xf6, 0xb2, 0x9f, 0x85, 0xe8, 0x63, 0x89, 0x50, 0x96, + 0x37, 0x43, 0xe2, 0xdf, 0xba, 0xb5, 0x2a, 0x93, 0x44, 0x14, 0x8c, 0x11, 0x18, 0xa7, 0xd2, 0x19, + 0xc2, 0x88, 0x73, 0x28, 0x31, 0x01, 0x4e, 0x44, 0xae, 0xc7, 0xf4, 0xbc, 0x1b, 0xf8, 0x41, 0x28, + 0x1c, 0x90, 0xb9, 0x00, 0x97, 0xae, 0xc4, 0xc3, 0xf0, 0x69, 0x24, 0x3c, 0x29, 0xcb, 0x38, 0x4b, + 0x37, 0x3b, 0x84, 0x84, 0x67, 0x66, 0x19, 0x86, 0x57, 0x91, 0xc8, 0xf4, 0xb4, 0x8c, 0x77, 0xa6, + 0x90, 0xc4, 0xb9, 0x6b, 0x87, 0xe1, 0x91, 0x05, 0x17, 0x7c, 0x62, 0x7a, 0xbd, 0x1e, 0x71, 0x2d, + 0x1e, 0xde, 0xd5, 0xf0, 0xbb, 0xb6, 0x7b, 0xc5, 0x37, 0x18, 0xa0, 0xc8, 0x81, 0x7b, 0xe9, 0x60, + 0x7f, 0xf1, 0x02, 0x3e, 0x04, 0x0e, 0x1f, 0x8a, 0x05, 0xf5, 0xe0, 0xd4, 0x80, 0x85, 0x9e, 0xf2, + 0xdb, 0x6e, 0x48, 0xfc, 0x1d, 0xc3, 0x29, 0x98, 0x6d, 0x88, 0x6d, 0xac, 0xf5, 0x24, 0x2a, 0x9c, + 0xc6, 0x8d, 0xf6, 0x28, 0x9f, 0x12, 0xcd, 0x51, 0x48, 0xd6, 0x8a, 0x07, 0xb1, 0xc4, 0xc3, 0xe8, + 0x70, 0x16, 0x0d, 0xfd, 0x6f, 0x69, 0x20, 0xee, 0x26, 0x65, 0x56, 0x7a, 0x2d, 0x33, 0x2b, 0xfd, + 0x85, 0x44, 0x6e, 0xf0, 0x5a, 0xca, 0xa3, 0xec, 0x03, 0x8a, 0x67, 0xfb, 0x54, 0xcc, 0xe3, 0x39, + 0x66, 0x25, 0x7c, 0xdb, 0x5f, 0x80, 0xc9, 0xbe, 0x6f, 0xf7, 0x0c, 0x7f, 0x4f, 0x1c, 0xb7, 0x33, + 0xfc, 0x99, 0xbe, 0xe9, 0xef, 0xf5, 0xe9, 0x39, 0x1b, 0xd5, 0xea, 0x3f, 0xd0, 0x40, 0x7c, 0xcd, + 0x62, 0x06, 0x8e, 0x14, 0x70, 0xee, 0xe8, 0x34, 0xea, 0x71, 0xc8, 0xbb, 0xb1, 0xbc, 0x90, 0x77, + 0x0f, 0x2a, 0x7e, 0xdc, 0x77, 0x34, 0x48, 0xe7, 0xf9, 0x44, 0x4f, 0xc0, 0xa4, 0x78, 0x0a, 0x28, + 0x1e, 0x13, 0x71, 0xa7, 0x50, 0x5e, 0x84, 0xa3, 0xba, 0xa4, 0xe6, 0x59, 0x46, 0x04, 0xce, 0x7e, + 0xee, 0x70, 0x84, 0x30, 0xba, 0x3f, 0x0b, 0x13, 0xfc, 0xed, 0x1a, 0xfa, 0x99, 0x4c, 0x8f, 0xb3, + 0x1b, 0x25, 0x9e, 0xc7, 0x15, 0x70, 0x2c, 0x4b, 0x84, 0x36, 0xaa, 0x1c, 0x1a, 0xda, 0xa8, 0xc3, + 0x43, 0x5a, 0x96, 0x31, 0x3c, 0x36, 0x71, 0x5b, 0xe4, 0x54, 0x10, 0xe1, 0x2c, 0xd1, 0x20, 0x61, + 0x8f, 0x1b, 0x2f, 0x11, 0xae, 0x93, 0x0f, 0x81, 0x62, 0x95, 0x9b, 0x3d, 0xc4, 0x22, 0x17, 0xbf, + 0x15, 0xaa, 0x96, 0xb8, 0xe1, 0x14, 0xa3, 0x3e, 0xc2, 0x5b, 0x21, 0xb9, 0x9b, 0x26, 0x72, 0x77, + 0x53, 0x17, 0x26, 0xc5, 0x7e, 0x10, 0xdc, 0xf1, 0xf9, 0x32, 0x01, 0x2b, 0x95, 0x37, 0xe6, 0xbc, + 0x00, 0x47, 0xd8, 0xe9, 0x99, 0xdb, 0x33, 0x76, 0xed, 0xde, 0xa0, 0xc7, 0x78, 0x62, 0x55, 0x05, + 0x65, 0xc5, 0x38, 0xaa, 0x67, 0xa0, 0xfc, 0x6a, 0x98, 0x89, 0x79, 0x2a, 0xa8, 0x48, 0x0b, 0x14, + 0xd5, 0xa3, 0xcf, 0x40, 0xad, 0x67, 0xec, 0x76, 0x06, 0x7e, 0x97, 0x08, 0x43, 0x5c, 0xbe, 0x19, + 0x62, 0x10, 0xda, 0xce, 0x12, 0x55, 0x50, 0x42, 0x7f, 0xa9, 0xed, 0x86, 0xb7, 0xfc, 0x4e, 0xe8, + 0xcb, 0x28, 0x7a, 0xab, 0x02, 0x0b, 0x96, 0xf8, 0x90, 0x03, 0xb3, 0x3d, 0x63, 0x77, 0xdd, 0x35, + 0x64, 0xf6, 0x92, 0x7a, 0x41, 0x0a, 0xec, 0x56, 0x62, 0x35, 0x81, 0x0b, 0xa7, 0x70, 0x67, 0x5c, + 0x80, 0x4c, 0x3f, 0xa8, 0x0b, 0x90, 0x65, 0xe9, 0x85, 0x33, 0xc3, 0x96, 0xe1, 0xa3, 0x59, 0x77, + 0xc8, 0x87, 0x3b, 0xd8, 0xbc, 0x2e, 0x1d, 0x6c, 0x66, 0x4b, 0xdc, 0x5a, 0x1c, 0xe2, 0x5c, 0xb3, + 0x03, 0x75, 0xcb, 0x08, 0x0d, 0x5e, 0x1a, 0x2c, 0x9c, 0x2a, 0x61, 0x2b, 0x69, 0x49, 0x3c, 0x4a, + 0x4c, 0xf1, 0x18, 0x37, 0x56, 0x09, 0xa1, 0x5b, 0x3c, 0xbb, 0x85, 0x43, 0xc2, 0x18, 0x84, 0xd9, + 0xcb, 0xe6, 0xb8, 0x45, 0x34, 0xca, 0x45, 0x31, 0x04, 0x80, 0xb3, 0xbf, 0xa3, 0x62, 0x2a, 0x7f, + 0x0d, 0x30, 0x1f, 0x47, 0xb7, 0x48, 0x3c, 0x20, 0xfc, 0x6b, 0x1a, 0xcc, 0xf1, 0xd4, 0x69, 0x4d, + 0xaf, 0xd7, 0xf7, 0x5c, 0x42, 0x27, 0x06, 0xb1, 0x51, 0xbd, 0x5e, 0x82, 0x3f, 0x74, 0x52, 0x28, + 0xc5, 0xfd, 0x7f, 0xaa, 0x14, 0x0f, 0x91, 0x46, 0xff, 0x4c, 0x83, 0x85, 0x5e, 0x4e, 0xc8, 0xee, + 0x85, 0xd3, 0x25, 0x5c, 0x10, 0x8f, 0x8a, 0x03, 0xce, 0xd3, 0x3a, 0x1e, 0x05, 0x85, 0x73, 0x1b, + 0x57, 0xd6, 0x5b, 0xb9, 0xcc, 0xcb, 0xca, 0xbf, 0x04, 0x73, 0xe9, 0x93, 0x40, 0x4d, 0xc7, 0xa1, + 0x3d, 0xd8, 0x74, 0x1c, 0xfa, 0x0b, 0x70, 0x2e, 0x7b, 0xd6, 0xa9, 0xd0, 0xc5, 0xb2, 0xdb, 0x08, + 0x45, 0x27, 0x0e, 0x06, 0x49, 0x0b, 0x31, 0xaf, 0x6b, 0x2c, 0x7d, 0xef, 0xc7, 0x17, 0xdf, 0xf3, + 0xfb, 0x3f, 0xbe, 0xf8, 0x9e, 0x1f, 0xfe, 0xf8, 0xe2, 0x7b, 0xbe, 0x74, 0x70, 0x51, 0xfb, 0xde, + 0xc1, 0x45, 0xed, 0xf7, 0x0f, 0x2e, 0x6a, 0x3f, 0x3c, 0xb8, 0xa8, 0xfd, 0xa7, 0x83, 0x8b, 0xda, + 0xdf, 0xf8, 0xcf, 0x17, 0xdf, 0xf3, 0x99, 0x5a, 0xd4, 0xa4, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, + 0xcc, 0x5f, 0x24, 0x2b, 0x62, 0xbc, 0x00, 0x00, } func (m *Addon) Marshal() (dAtA []byte, err error) { @@ -5972,6 +5975,25 @@ func (m *ClusterAutoscaler) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.MaxNodeProvisionTime != nil { + { + size, err := m.MaxNodeProvisionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if m.Expander != nil { + i -= len(*m.Expander) + copy(dAtA[i:], *m.Expander) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Expander))) + i-- + dAtA[i] = 0x3a + } if m.ScanInterval != nil { { size, err := m.ScanInterval.MarshalToSizedBuffer(dAtA[:i]) @@ -13691,6 +13713,14 @@ func (m *ClusterAutoscaler) Size() (n int) { l = m.ScanInterval.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Expander != nil { + l = len(*m.Expander) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.MaxNodeProvisionTime != nil { + l = m.MaxNodeProvisionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -16684,6 +16714,8 @@ func (this *ClusterAutoscaler) String() string { `ScaleDownUnneededTime:` + strings.Replace(fmt.Sprintf("%v", this.ScaleDownUnneededTime), "Duration", "v11.Duration", 1) + `,`, `ScaleDownUtilizationThreshold:` + valueToStringGenerated(this.ScaleDownUtilizationThreshold) + `,`, `ScanInterval:` + strings.Replace(fmt.Sprintf("%v", this.ScanInterval), "Duration", "v11.Duration", 1) + `,`, + `Expander:` + valueToStringGenerated(this.Expander) + `,`, + `MaxNodeProvisionTime:` + strings.Replace(fmt.Sprintf("%v", this.MaxNodeProvisionTime), "Duration", "v11.Duration", 1) + `,`, `}`, }, "") return s @@ -21688,6 +21720,75 @@ func (m *ClusterAutoscaler) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Expander", 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 := ExpanderMode(dAtA[iNdEx:postIndex]) + m.Expander = &s + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxNodeProvisionTime", 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.MaxNodeProvisionTime == nil { + m.MaxNodeProvisionTime = &v11.Duration{} + } + if err := m.MaxNodeProvisionTime.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 9632d6ceb..e53f6afcf 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 @@ -317,7 +317,7 @@ message ClusterAutoscaler { // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration scaleDownDelayAfterAdd = 1; - // ScaleDownDelayAfterDelete how long after node deletion that scale down evaluation resumes, defaults to scanInterval (defaults to ScanInterval). + // ScaleDownDelayAfterDelete how long after node deletion that scale down evaluation resumes, defaults to scanInterval (default: 0 secs). // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration scaleDownDelayAfterDelete = 2; @@ -329,13 +329,22 @@ message ClusterAutoscaler { // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration scaleDownUnneededTime = 4; - // ScaleDownUtilizationThreshold defines the threshold in % under which a node is being removed + // ScaleDownUtilizationThreshold defines the threshold in decimal (0.0 - 1.0) under which a node is being removed (default: 0.5). // +optional optional double scaleDownUtilizationThreshold = 5; // ScanInterval how often cluster is reevaluated for scale up or down (default: 10 secs). // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration scanInterval = 6; + + // Expander defines the algorithm to use during scale up (default: least-waste). + // See: https://github.com/gardener/autoscaler/blob/machine-controller-manager-provider/cluster-autoscaler/FAQ.md#what-are-expanders. + // +optional + optional string expander = 7; + + // MaxNodeProvisionTime defines how long CA waits for node to be provisioned (default: 20 mins). + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration maxNodeProvisionTime = 8; } // ClusterInfo contains information about the Plant 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 c7afb3b3d..a2dfa1297 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 @@ -372,7 +372,7 @@ type ClusterAutoscaler struct { // ScaleDownDelayAfterAdd defines how long after scale up that scale down evaluation resumes (default: 1 hour). // +optional ScaleDownDelayAfterAdd *metav1.Duration `json:"scaleDownDelayAfterAdd,omitempty" protobuf:"bytes,1,opt,name=scaleDownDelayAfterAdd"` - // ScaleDownDelayAfterDelete how long after node deletion that scale down evaluation resumes, defaults to scanInterval (defaults to ScanInterval). + // ScaleDownDelayAfterDelete how long after node deletion that scale down evaluation resumes, defaults to scanInterval (default: 0 secs). // +optional ScaleDownDelayAfterDelete *metav1.Duration `json:"scaleDownDelayAfterDelete,omitempty" protobuf:"bytes,2,opt,name=scaleDownDelayAfterDelete"` // ScaleDownDelayAfterFailure how long after scale down failure that scale down evaluation resumes (default: 3 mins). @@ -381,14 +381,42 @@ type ClusterAutoscaler struct { // ScaleDownUnneededTime defines how long a node should be unneeded before it is eligible for scale down (default: 30 mins). // +optional ScaleDownUnneededTime *metav1.Duration `json:"scaleDownUnneededTime,omitempty" protobuf:"bytes,4,opt,name=scaleDownUnneededTime"` - // ScaleDownUtilizationThreshold defines the threshold in % under which a node is being removed + // ScaleDownUtilizationThreshold defines the threshold in decimal (0.0 - 1.0) under which a node is being removed (default: 0.5). // +optional ScaleDownUtilizationThreshold *float64 `json:"scaleDownUtilizationThreshold,omitempty" protobuf:"fixed64,5,opt,name=scaleDownUtilizationThreshold"` // ScanInterval how often cluster is reevaluated for scale up or down (default: 10 secs). // +optional ScanInterval *metav1.Duration `json:"scanInterval,omitempty" protobuf:"bytes,6,opt,name=scanInterval"` + // Expander defines the algorithm to use during scale up (default: least-waste). + // See: https://github.com/gardener/autoscaler/blob/machine-controller-manager-provider/cluster-autoscaler/FAQ.md#what-are-expanders. + // +optional + Expander *ExpanderMode `json:"expander,omitempty" protobuf:"bytes,7,opt,name=expander"` + // MaxNodeProvisionTime defines how long CA waits for node to be provisioned (default: 20 mins). + // +optional + MaxNodeProvisionTime *metav1.Duration `json:"maxNodeProvisionTime,omitempty" protobuf:"bytes,8,opt,name=maxNodeProvisionTime"` } +// ExpanderMode is type used for Expander values +type ExpanderMode string + +const ( + // ClusterAutoscalerExpanderLeastWaste selects the node group that will have the least idle CPU (if tied, unused memory) after scale-up. + // This is useful when you have different classes of nodes, for example, high CPU or high memory nodes, and + // only want to expand those when there are pending pods that need a lot of those resources. + // This is the default value. + ClusterAutoscalerExpanderLeastWaste ExpanderMode = "least-waste" + // ClusterAutoscalerExpanderMostPods selects the node group that would be able to schedule the most pods when scaling up. + // This is useful when you are using nodeSelector to make sure certain pods land on certain nodes. + // Note that this won't cause the autoscaler to select bigger nodes vs. smaller, as it can add multiple smaller nodes at once. + ClusterAutoscalerExpanderMostPods ExpanderMode = "most-pods" + // ClusterAutoscalerExpanderPriority selects the node group that has the highest priority assigned by the user. For configurations, + // See: https://github.com/gardener/autoscaler/blob/machine-controller-manager-provider/cluster-autoscaler/expander/priority/readme.md + ClusterAutoscalerExpanderPriority ExpanderMode = "priority" + // ClusterAutoscalerExpanderRandom should be used when you don't have a particular need + // for the node groups to scale differently. + ClusterAutoscalerExpanderRandom ExpanderMode = "random" +) + // VerticalPodAutoscaler contains the configuration flags for the Kubernetes vertical pod autoscaler. type VerticalPodAutoscaler struct { // Enabled specifies whether the Kubernetes VPA shall be enabled for the shoot cluster. 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 4766a6895..c5c15d4fe 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 @@ -2038,6 +2038,8 @@ func autoConvert_v1alpha1_ClusterAutoscaler_To_core_ClusterAutoscaler(in *Cluste out.ScaleDownUnneededTime = (*metav1.Duration)(unsafe.Pointer(in.ScaleDownUnneededTime)) out.ScaleDownUtilizationThreshold = (*float64)(unsafe.Pointer(in.ScaleDownUtilizationThreshold)) out.ScanInterval = (*metav1.Duration)(unsafe.Pointer(in.ScanInterval)) + out.Expander = (*core.ExpanderMode)(unsafe.Pointer(in.Expander)) + out.MaxNodeProvisionTime = (*metav1.Duration)(unsafe.Pointer(in.MaxNodeProvisionTime)) return nil } @@ -2053,6 +2055,8 @@ func autoConvert_core_ClusterAutoscaler_To_v1alpha1_ClusterAutoscaler(in *core.C out.ScaleDownUnneededTime = (*metav1.Duration)(unsafe.Pointer(in.ScaleDownUnneededTime)) out.ScaleDownUtilizationThreshold = (*float64)(unsafe.Pointer(in.ScaleDownUtilizationThreshold)) out.ScanInterval = (*metav1.Duration)(unsafe.Pointer(in.ScanInterval)) + out.Expander = (*ExpanderMode)(unsafe.Pointer(in.Expander)) + out.MaxNodeProvisionTime = (*metav1.Duration)(unsafe.Pointer(in.MaxNodeProvisionTime)) return nil } 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 0be28a839..af9fc90bf 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 @@ -627,6 +627,16 @@ func (in *ClusterAutoscaler) DeepCopyInto(out *ClusterAutoscaler) { *out = new(metav1.Duration) **out = **in } + if in.Expander != nil { + in, out := &in.Expander, &out.Expander + *out = new(ExpanderMode) + **out = **in + } + if in.MaxNodeProvisionTime != nil { + in, out := &in.MaxNodeProvisionTime, &out.MaxNodeProvisionTime + *out = new(metav1.Duration) + **out = **in + } 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 da58ed186..0e62ed16b 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 @@ -118,6 +118,9 @@ func SetObjectDefaults_Shoot(in *Shoot) { SetDefaults_NginxIngress(in.Spec.Addons.NginxIngress) } } + if in.Spec.Kubernetes.ClusterAutoscaler != nil { + SetDefaults_ClusterAutoscaler(in.Spec.Kubernetes.ClusterAutoscaler) + } if in.Spec.Kubernetes.VerticalPodAutoscaler != nil { SetDefaults_VerticalPodAutoscaler(in.Spec.Kubernetes.VerticalPodAutoscaler) } 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 f0f0537b2..193666dbd 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 @@ -266,8 +266,10 @@ const ( LabelShootProvider = "shoot.gardener.cloud/provider" // LabelNetworkingProvider is used to identify the networking provider for the cni plugin. LabelNetworkingProvider = "networking.shoot.gardener.cloud/provider" + // LabelExtensionPrefix is used to prefix extension specific labels. + LabelExtensionPrefix = "extensions.gardener.cloud/" // LabelExtensionConfiguration is used to identify the provider's configuration which will be added to Gardener configuration - LabelExtensionConfiguration = "extensions.gardener.cloud/configuration" + LabelExtensionConfiguration = LabelExtensionPrefix + "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 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 340ec3b1a..aec568e89 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 @@ -321,6 +321,35 @@ func SetDefaults_Worker(obj *Worker) { } } +// SetDefaults_ClusterAutoscaler sets default values for ClusterAutoscaler object. +func SetDefaults_ClusterAutoscaler(obj *ClusterAutoscaler) { + if obj.ScaleDownDelayAfterAdd == nil { + obj.ScaleDownDelayAfterAdd = &metav1.Duration{Duration: 1 * time.Hour} + } + if obj.ScaleDownDelayAfterDelete == nil { + obj.ScaleDownDelayAfterDelete = &metav1.Duration{Duration: 0} + } + if obj.ScaleDownDelayAfterFailure == nil { + obj.ScaleDownDelayAfterFailure = &metav1.Duration{Duration: 3 * time.Minute} + } + if obj.ScaleDownUnneededTime == nil { + obj.ScaleDownUnneededTime = &metav1.Duration{Duration: 30 * time.Minute} + } + if obj.ScaleDownUtilizationThreshold == nil { + obj.ScaleDownUtilizationThreshold = pointer.Float64(0.5) + } + if obj.ScanInterval == nil { + obj.ScanInterval = &metav1.Duration{Duration: 10 * time.Second} + } + if obj.Expander == nil { + leastWaste := ClusterAutoscalerExpanderLeastWaste + obj.Expander = &leastWaste + } + if obj.MaxNodeProvisionTime == nil { + obj.MaxNodeProvisionTime = &metav1.Duration{Duration: 20 * time.Minute} + } +} + // SetDefaults_NginxIngress sets default values for NginxIngress objects. func SetDefaults_NginxIngress(obj *NginxIngress) { if obj.ExternalTrafficPolicy == nil { 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 2855c35e0..f42cf9062 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 @@ -4046,582 +4046,585 @@ func init() { } var fileDescriptor_ca37af0df9a5bbd2 = []byte{ - // 9192 bytes of a gzipped FileDescriptorProto + // 9246 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x7d, 0x6d, 0x6c, 0x24, 0xc9, 0x75, 0x98, 0x7a, 0xc8, 0x21, 0x87, 0x6f, 0x48, 0x2e, 0x59, 0xfb, 0x71, 0x3c, 0xde, 0xdd, 0xce, 0xaa, 0xa5, 0x13, 0xee, 0x22, 0x89, 0xeb, 0x3b, 0x49, 0x3e, 0xdd, 0x9d, 0x4e, 0x77, 0x9c, 0x19, 0xee, 0xee, 0x68, 0x97, 0xdc, 0xb9, 0x9a, 0xe5, 0x9d, 0x74, 0x76, 0x2e, 0x6a, 0x76, 0x17, 0x87, - 0x7d, 0xec, 0xe9, 0x9e, 0xeb, 0xee, 0xe1, 0x92, 0x2b, 0x07, 0x92, 0x05, 0xcb, 0x8a, 0xe3, 0x24, + 0x7d, 0xec, 0xe9, 0x9e, 0xeb, 0xee, 0xe1, 0x92, 0x2b, 0x07, 0x92, 0x05, 0xcb, 0x8e, 0xe3, 0x24, 0x30, 0x9c, 0x38, 0x82, 0x25, 0x07, 0x96, 0x11, 0x24, 0x42, 0xe0, 0x40, 0x76, 0x12, 0xd8, 0x88, - 0xf3, 0x01, 0x18, 0x36, 0x02, 0x2b, 0x42, 0x12, 0x08, 0x06, 0x84, 0x28, 0x89, 0x4d, 0x45, 0x0c, - 0xa0, 0x24, 0x48, 0x7e, 0x24, 0x30, 0xf2, 0x67, 0xe1, 0x20, 0x41, 0x7d, 0x74, 0x75, 0x75, 0x4f, - 0x37, 0x77, 0xd8, 0xb3, 0xe4, 0xdd, 0xfd, 0x22, 0xa7, 0x5e, 0xd5, 0x7b, 0xd5, 0x55, 0xaf, 0x5e, - 0xbd, 0xf7, 0xea, 0xd5, 0x2b, 0xa8, 0x77, 0xed, 0x70, 0x67, 0xb0, 0xb5, 0x62, 0x7a, 0xbd, 0xab, - 0x5d, 0xc3, 0xb7, 0x88, 0x4b, 0xfc, 0xf8, 0x9f, 0xfe, 0x6e, 0xf7, 0xaa, 0xd1, 0xb7, 0x83, 0xab, - 0xa6, 0xe7, 0x93, 0xab, 0x7b, 0xcf, 0x6c, 0x91, 0xd0, 0x78, 0xe6, 0x6a, 0x97, 0xc2, 0x8c, 0x90, - 0x58, 0x2b, 0x7d, 0xdf, 0x0b, 0x3d, 0xf4, 0x6c, 0x8c, 0x63, 0x25, 0x6a, 0x1a, 0xff, 0xd3, 0xdf, - 0xed, 0xae, 0x50, 0x1c, 0x2b, 0x14, 0xc7, 0x8a, 0xc0, 0xb1, 0xfc, 0x51, 0x95, 0xae, 0xd7, 0xf5, - 0xae, 0x32, 0x54, 0x5b, 0x83, 0x6d, 0xf6, 0x8b, 0xfd, 0x60, 0xff, 0x71, 0x12, 0xcb, 0x4f, 0xef, - 0x7e, 0x32, 0x58, 0xb1, 0x3d, 0xda, 0x99, 0xab, 0xc6, 0x20, 0xf4, 0x02, 0xd3, 0x70, 0x6c, 0xb7, - 0x7b, 0x75, 0x6f, 0xa8, 0x37, 0xcb, 0xba, 0x52, 0x55, 0x74, 0xfb, 0xd8, 0x3a, 0xfe, 0x96, 0x61, - 0x66, 0xd5, 0xf9, 0x78, 0x5c, 0xa7, 0x67, 0x98, 0x3b, 0xb6, 0x4b, 0xfc, 0x83, 0x68, 0x40, 0xae, - 0xfa, 0x24, 0xf0, 0x06, 0xbe, 0x49, 0x4e, 0xd4, 0x2a, 0xb8, 0xda, 0x23, 0xa1, 0x91, 0x45, 0xeb, - 0x6a, 0x5e, 0x2b, 0x7f, 0xe0, 0x86, 0x76, 0x6f, 0x98, 0xcc, 0x4f, 0x3e, 0xa8, 0x41, 0x60, 0xee, - 0x90, 0x9e, 0x31, 0xd4, 0xee, 0x63, 0x79, 0xed, 0x06, 0xa1, 0xed, 0x5c, 0xb5, 0xdd, 0x30, 0x08, - 0xfd, 0x74, 0x23, 0xfd, 0x59, 0x28, 0xaf, 0x5a, 0x96, 0xe7, 0xa2, 0xa7, 0x61, 0x9a, 0xb8, 0xc6, - 0x96, 0x43, 0xac, 0x25, 0xed, 0x8a, 0xf6, 0x54, 0xa5, 0x7e, 0xee, 0x3b, 0x87, 0xb5, 0xf7, 0x1d, - 0x1d, 0xd6, 0xa6, 0xd7, 0x78, 0x31, 0x8e, 0xe0, 0xfa, 0xaf, 0x94, 0x60, 0x8a, 0x35, 0x0a, 0xd0, - 0x2f, 0x6b, 0x70, 0x7e, 0x77, 0xb0, 0x45, 0x7c, 0x97, 0x84, 0x24, 0x68, 0x1a, 0xc1, 0xce, 0x96, - 0x67, 0xf8, 0x1c, 0x45, 0xf5, 0xd9, 0xeb, 0x2b, 0x27, 0xe7, 0x9e, 0x95, 0x9b, 0xc3, 0xe8, 0xea, - 0x8f, 0x1c, 0x1d, 0xd6, 0xce, 0x67, 0x00, 0x70, 0x16, 0x71, 0xb4, 0x07, 0xb3, 0x6e, 0xd7, 0x76, - 0xf7, 0x5b, 0x6e, 0xd7, 0x27, 0x41, 0xb0, 0x54, 0x62, 0x9d, 0x79, 0xa5, 0x48, 0x67, 0x36, 0x14, - 0x3c, 0xf5, 0x85, 0xa3, 0xc3, 0xda, 0xac, 0x5a, 0x82, 0x13, 0x74, 0xf4, 0x9f, 0xd7, 0xe0, 0xdc, - 0xaa, 0xd5, 0xb3, 0x83, 0xc0, 0xf6, 0xdc, 0xb6, 0x33, 0xe8, 0xda, 0x2e, 0xba, 0x02, 0x93, 0xae, - 0xd1, 0x23, 0x6c, 0x40, 0x66, 0xea, 0xb3, 0x62, 0x4c, 0x27, 0x37, 0x8c, 0x1e, 0xc1, 0x0c, 0x82, - 0x5e, 0x85, 0x29, 0xd3, 0x73, 0xb7, 0xed, 0xae, 0xe8, 0xe7, 0x47, 0x57, 0xf8, 0x3c, 0xae, 0xa8, - 0xf3, 0xc8, 0xba, 0x27, 0xe6, 0x7f, 0x05, 0x1b, 0x77, 0xd7, 0xf6, 0x43, 0xe2, 0x52, 0x32, 0x75, - 0x38, 0x3a, 0xac, 0x4d, 0x35, 0x18, 0x02, 0x2c, 0x10, 0xe9, 0xd7, 0xa0, 0xb2, 0xea, 0x10, 0x3f, - 0xb4, 0xdd, 0x2e, 0x7a, 0x01, 0xe6, 0x49, 0xcf, 0xb0, 0x1d, 0x4c, 0x4c, 0x62, 0xef, 0x11, 0x3f, - 0x58, 0xd2, 0xae, 0x4c, 0x3c, 0x35, 0x53, 0x47, 0x47, 0x87, 0xb5, 0xf9, 0xb5, 0x04, 0x04, 0xa7, - 0x6a, 0xea, 0x3f, 0xab, 0x41, 0x75, 0x75, 0x60, 0xd9, 0x21, 0xc7, 0x8f, 0x7c, 0xa8, 0x1a, 0xf4, - 0x67, 0xdb, 0x73, 0x6c, 0xf3, 0x40, 0x4c, 0xf2, 0xcb, 0x45, 0xc6, 0x75, 0x35, 0x46, 0x53, 0x3f, - 0x77, 0x74, 0x58, 0xab, 0x2a, 0x05, 0x58, 0x25, 0xa2, 0xef, 0x80, 0x0a, 0x43, 0x9f, 0x83, 0x59, - 0xfe, 0x91, 0xeb, 0x46, 0x1f, 0x93, 0x6d, 0xd1, 0x87, 0x0f, 0x28, 0x63, 0x16, 0x11, 0x5a, 0xb9, - 0xbd, 0xf5, 0x16, 0x31, 0x43, 0x4c, 0xb6, 0x89, 0x4f, 0x5c, 0x93, 0xf0, 0xe9, 0x6b, 0x28, 0x8d, - 0x71, 0x02, 0x95, 0xfe, 0x43, 0x0d, 0x16, 0x56, 0xf7, 0x0c, 0xdb, 0x31, 0xb6, 0x6c, 0xc7, 0x0e, - 0x0f, 0xde, 0xf0, 0x5c, 0x32, 0xc2, 0xfc, 0x6d, 0xc2, 0x23, 0x03, 0xd7, 0xe0, 0xed, 0x1c, 0xb2, - 0xce, 0x67, 0xec, 0xce, 0x41, 0x9f, 0x50, 0xc6, 0xa3, 0x23, 0xfd, 0xd8, 0xd1, 0x61, 0xed, 0x91, - 0xcd, 0xec, 0x2a, 0x38, 0xaf, 0x2d, 0xc2, 0x70, 0x49, 0x01, 0xbd, 0xe6, 0x39, 0x83, 0x9e, 0xc0, - 0x3a, 0xc1, 0xb0, 0x2e, 0x1f, 0x1d, 0xd6, 0x2e, 0x6d, 0x66, 0xd6, 0xc0, 0x39, 0x2d, 0xf5, 0xef, - 0x94, 0x60, 0xb6, 0x6e, 0x98, 0xbb, 0x83, 0x7e, 0x7d, 0x60, 0xee, 0x92, 0x10, 0x7d, 0x1e, 0x2a, - 0x54, 0x6c, 0x59, 0x46, 0x68, 0x88, 0x91, 0xfc, 0x89, 0x5c, 0xee, 0x63, 0x93, 0x48, 0x6b, 0xc7, - 0x63, 0xbb, 0x4e, 0x42, 0xa3, 0x8e, 0xc4, 0x98, 0x40, 0x5c, 0x86, 0x25, 0x56, 0xb4, 0x0d, 0x93, - 0x41, 0x9f, 0x98, 0x82, 0xb7, 0x9b, 0x45, 0x78, 0x45, 0xed, 0x71, 0xa7, 0x4f, 0xcc, 0x78, 0x16, - 0xe8, 0x2f, 0xcc, 0xf0, 0x23, 0x17, 0xa6, 0x82, 0xd0, 0x08, 0x07, 0x74, 0x78, 0x28, 0xa5, 0x6b, - 0x63, 0x53, 0x62, 0xd8, 0xea, 0xf3, 0x82, 0xd6, 0x14, 0xff, 0x8d, 0x05, 0x15, 0xfd, 0xdf, 0x6b, - 0xb0, 0xa0, 0x56, 0xbf, 0x65, 0x07, 0x21, 0xfa, 0xe9, 0xa1, 0xe1, 0x5c, 0x19, 0x6d, 0x38, 0x69, - 0x6b, 0x36, 0x98, 0x0b, 0x82, 0x5c, 0x25, 0x2a, 0x51, 0x86, 0x92, 0x40, 0xd9, 0x0e, 0x49, 0x8f, - 0xb3, 0x55, 0x41, 0x79, 0xa6, 0x76, 0xb9, 0x3e, 0x27, 0x88, 0x95, 0x5b, 0x14, 0x2d, 0xe6, 0xd8, - 0xf5, 0xcf, 0xc3, 0x05, 0xb5, 0x56, 0xdb, 0xf7, 0xf6, 0x6c, 0x8b, 0xf8, 0x74, 0x25, 0x84, 0x07, - 0xfd, 0xa1, 0x95, 0x40, 0x39, 0x0b, 0x33, 0x08, 0xfa, 0x10, 0x4c, 0xf9, 0xa4, 0x6b, 0x7b, 0x2e, - 0x9b, 0xed, 0x99, 0x78, 0xec, 0x30, 0x2b, 0xc5, 0x02, 0xaa, 0xff, 0x9f, 0x52, 0x72, 0xec, 0xe8, - 0x34, 0xa2, 0x3d, 0xa8, 0xf4, 0x05, 0x29, 0x31, 0x76, 0x37, 0xc6, 0xfd, 0xc0, 0xa8, 0xeb, 0xf1, - 0xa8, 0x46, 0x25, 0x58, 0xd2, 0x42, 0x36, 0xcc, 0x47, 0xff, 0x37, 0xc6, 0x10, 0xc3, 0x4c, 0x9c, - 0xb6, 0x13, 0x88, 0x70, 0x0a, 0x31, 0xba, 0x03, 0x33, 0x01, 0x31, 0x7d, 0x42, 0x65, 0x92, 0x60, - 0xd3, 0x4c, 0xc1, 0xd5, 0x89, 0x2a, 0x09, 0xc1, 0xb5, 0x28, 0xba, 0x3f, 0x23, 0x01, 0x38, 0x46, - 0x84, 0x9e, 0x82, 0x4a, 0x40, 0x88, 0x45, 0x25, 0xd2, 0xd2, 0x24, 0x9f, 0x1b, 0xfa, 0xa9, 0x1d, - 0x51, 0x86, 0x25, 0x54, 0xff, 0xe6, 0x24, 0xa0, 0x61, 0x16, 0x57, 0x47, 0x80, 0x97, 0x88, 0xf1, - 0x1f, 0x67, 0x04, 0xc4, 0x6a, 0x49, 0x21, 0x46, 0xf7, 0x60, 0xce, 0x31, 0x82, 0xf0, 0x76, 0x9f, - 0xea, 0x20, 0x11, 0xa3, 0x54, 0x9f, 0x5d, 0x2d, 0x32, 0xd3, 0xb7, 0x54, 0x44, 0xf5, 0xc5, 0xa3, - 0xc3, 0xda, 0x5c, 0xa2, 0x08, 0x27, 0x49, 0xa1, 0xb7, 0x60, 0x86, 0x16, 0xac, 0xf9, 0xbe, 0xe7, - 0x8b, 0xd1, 0x7f, 0xa9, 0x28, 0x5d, 0x86, 0xa4, 0x3e, 0x47, 0xe7, 0x44, 0xfe, 0xc4, 0x31, 0x7a, - 0xf4, 0x19, 0x40, 0xde, 0x56, 0x40, 0xfc, 0x3d, 0x62, 0x5d, 0xe7, 0x0a, 0x17, 0xfd, 0x58, 0x3a, - 0x3b, 0x13, 0xf5, 0x65, 0x31, 0x9b, 0xe8, 0xf6, 0x50, 0x0d, 0x9c, 0xd1, 0x0a, 0xed, 0x02, 0x92, - 0x4a, 0x9b, 0x64, 0x80, 0xa5, 0xf2, 0xe8, 0xec, 0x73, 0x89, 0x12, 0xbb, 0x3e, 0x84, 0x02, 0x67, - 0xa0, 0xd5, 0xff, 0x55, 0x09, 0xaa, 0x9c, 0x45, 0xd6, 0xdc, 0xd0, 0x3f, 0x38, 0x83, 0x0d, 0x82, - 0x24, 0x36, 0x88, 0x46, 0xf1, 0x35, 0xcf, 0x3a, 0x9c, 0xbb, 0x3f, 0xf4, 0x52, 0xfb, 0xc3, 0xda, - 0xb8, 0x84, 0x8e, 0xdf, 0x1e, 0xbe, 0xaf, 0xc1, 0x39, 0xa5, 0xf6, 0x19, 0xec, 0x0e, 0x56, 0x72, - 0x77, 0x78, 0x79, 0xcc, 0xef, 0xcb, 0xd9, 0x1c, 0xbc, 0xc4, 0x67, 0x31, 0xc1, 0xfd, 0x2c, 0xc0, - 0x16, 0x13, 0x27, 0x1b, 0xb1, 0x9e, 0x24, 0xa7, 0xbc, 0x2e, 0x21, 0x58, 0xa9, 0x95, 0x90, 0x59, - 0xa5, 0x63, 0x65, 0xd6, 0xff, 0x2e, 0xc1, 0xe2, 0xd0, 0xb0, 0x0f, 0xcb, 0x11, 0xed, 0x1d, 0x92, - 0x23, 0xa5, 0x77, 0x42, 0x8e, 0x4c, 0x14, 0x92, 0x23, 0xa3, 0xef, 0x13, 0x7f, 0xa0, 0xc1, 0x44, - 0x03, 0xb7, 0xd0, 0x87, 0x13, 0xba, 0xef, 0x23, 0xaa, 0xee, 0x7b, 0xff, 0xb0, 0x36, 0xdd, 0xc0, - 0x2d, 0x45, 0x0d, 0xfe, 0xeb, 0x1a, 0x2c, 0x9a, 0x9e, 0x1b, 0x1a, 0x94, 0x89, 0x31, 0xdf, 0x20, - 0x22, 0x66, 0x2c, 0xa4, 0xf6, 0x35, 0x52, 0xc8, 0xea, 0x8f, 0x8a, 0x0e, 0x2c, 0xa6, 0x21, 0x01, - 0x1e, 0xa6, 0xac, 0x6f, 0xc2, 0x4c, 0xc3, 0xf1, 0x06, 0x56, 0xcb, 0xdd, 0xf6, 0x1e, 0xa2, 0xee, - 0xf2, 0x03, 0x0d, 0x66, 0x19, 0xde, 0xb6, 0xef, 0x6d, 0xdb, 0x0e, 0x79, 0x6f, 0xa8, 0xd0, 0x6a, - 0x8f, 0xf3, 0x44, 0x24, 0x53, 0x69, 0xd5, 0x8a, 0xef, 0x11, 0x95, 0x56, 0xed, 0x72, 0x8e, 0xd4, - 0xfa, 0x95, 0xe9, 0xe4, 0x97, 0x31, 0xb9, 0xf5, 0x14, 0x54, 0x4c, 0xa3, 0x3e, 0x70, 0x2d, 0x47, - 0xf2, 0x05, 0xed, 0x65, 0x63, 0x95, 0x97, 0x61, 0x09, 0x45, 0xf7, 0x00, 0x62, 0x37, 0x83, 0x98, - 0x86, 0x6b, 0xe3, 0xb9, 0x36, 0x3a, 0x24, 0xa4, 0xd6, 0x79, 0x10, 0x4f, 0x7d, 0x0c, 0xc3, 0x0a, - 0x35, 0xf4, 0x97, 0x61, 0x4e, 0x0c, 0x72, 0xab, 0x67, 0x74, 0x85, 0xf5, 0x57, 0x70, 0xa4, 0xd6, - 0x15, 0x44, 0xf5, 0x8b, 0x82, 0xf0, 0x9c, 0x5a, 0x1a, 0xe0, 0x24, 0x35, 0x74, 0x00, 0xb3, 0x3d, - 0xd5, 0xa2, 0x9d, 0x2c, 0xbe, 0xb9, 0x28, 0xd6, 0x6d, 0xfd, 0x82, 0x20, 0x3e, 0x9b, 0xb0, 0x85, - 0x13, 0xa4, 0x32, 0x14, 0xf3, 0xf2, 0x69, 0x29, 0xe6, 0x04, 0xa6, 0xf9, 0xf2, 0x0e, 0x96, 0xa6, - 0xd8, 0x07, 0xbe, 0x50, 0xe4, 0x03, 0xb9, 0xa4, 0x88, 0xfd, 0x66, 0xfc, 0x77, 0x80, 0x23, 0xdc, - 0x68, 0x0f, 0x66, 0xa9, 0x8c, 0xed, 0x10, 0x87, 0x98, 0xa1, 0xe7, 0x2f, 0x4d, 0x17, 0xf7, 0x4b, - 0x75, 0x14, 0x3c, 0xdc, 0xb1, 0xa1, 0x96, 0xe0, 0x04, 0x1d, 0x29, 0xfd, 0x2a, 0xb9, 0xd2, 0x6f, - 0x00, 0xd5, 0x3d, 0xc5, 0xc3, 0x30, 0xc3, 0x06, 0xe1, 0xd3, 0x45, 0x3a, 0x16, 0xbb, 0x1b, 0xea, - 0xe7, 0x05, 0xa1, 0xaa, 0xea, 0x9a, 0x50, 0xe9, 0xe8, 0x5f, 0x9d, 0x82, 0xc5, 0x86, 0x33, 0x08, - 0x42, 0xe2, 0xaf, 0x0a, 0xc7, 0x2f, 0xf1, 0xd1, 0x97, 0x35, 0xb8, 0xc4, 0xfe, 0x6d, 0x7a, 0x77, - 0xdd, 0x26, 0x71, 0x8c, 0x83, 0xd5, 0x6d, 0x5a, 0xc3, 0xb2, 0x4e, 0x26, 0x81, 0x9a, 0x03, 0xb1, - 0xa7, 0x33, 0x57, 0x49, 0x27, 0x13, 0x23, 0xce, 0xa1, 0x84, 0x7e, 0x51, 0x83, 0x47, 0x33, 0x40, - 0x4d, 0xe2, 0x90, 0x90, 0x08, 0x19, 0x70, 0xd2, 0x7e, 0x3c, 0x71, 0x74, 0x58, 0x7b, 0xb4, 0x93, - 0x87, 0x14, 0xe7, 0xd3, 0x43, 0x7f, 0x43, 0x83, 0xe5, 0x0c, 0xe8, 0x35, 0xc3, 0x76, 0x06, 0x3e, - 0x11, 0x2a, 0xed, 0x49, 0xbb, 0x73, 0xf9, 0xe8, 0xb0, 0xb6, 0xdc, 0xc9, 0xc5, 0x8a, 0x8f, 0xa1, - 0x88, 0xbe, 0x08, 0x17, 0x25, 0x74, 0xd3, 0x75, 0x09, 0xb1, 0x88, 0x75, 0xc7, 0x16, 0x9a, 0xc5, - 0xc9, 0xbb, 0xf2, 0xe8, 0xd1, 0x61, 0xed, 0x62, 0x27, 0x0b, 0x21, 0xce, 0xa6, 0x83, 0xba, 0xf0, - 0x44, 0x0c, 0x08, 0x6d, 0xc7, 0xbe, 0xc7, 0x30, 0xdd, 0xd9, 0xf1, 0x49, 0xb0, 0xe3, 0x39, 0x16, - 0x13, 0x16, 0x5a, 0xfd, 0xfd, 0x47, 0x87, 0xb5, 0x27, 0x3a, 0xc7, 0x55, 0xc4, 0xc7, 0xe3, 0x41, - 0x16, 0xcc, 0x06, 0xa6, 0xe1, 0xb6, 0xdc, 0x90, 0xf8, 0x7b, 0x86, 0xb3, 0x34, 0x55, 0xe8, 0x03, - 0xf9, 0x12, 0x55, 0xf0, 0xe0, 0x04, 0x56, 0xfd, 0xbf, 0x6b, 0x50, 0x15, 0x2b, 0x81, 0x29, 0x2c, - 0x5b, 0x50, 0x36, 0xe9, 0x86, 0x25, 0x38, 0xfe, 0xa5, 0xc2, 0x1b, 0x23, 0xc5, 0x16, 0xef, 0x8a, - 0xac, 0x08, 0x73, 0xd4, 0x68, 0x2f, 0x63, 0x5b, 0xab, 0x8f, 0xb7, 0xad, 0x31, 0x6a, 0x0f, 0xd8, - 0xd2, 0xf4, 0xc3, 0x09, 0x98, 0x69, 0x78, 0xae, 0x65, 0x33, 0xb5, 0xf4, 0x99, 0x84, 0x6a, 0xf6, - 0x84, 0x2a, 0x9c, 0xee, 0x1f, 0xd6, 0xe6, 0x64, 0x45, 0x45, 0x5a, 0x3d, 0x2f, 0x6d, 0x39, 0xae, - 0xab, 0xbd, 0x3f, 0x69, 0x84, 0xdd, 0x3f, 0xac, 0x9d, 0x93, 0xcd, 0x92, 0x76, 0x19, 0xda, 0x03, - 0x44, 0xb5, 0xeb, 0x3b, 0xbe, 0xe1, 0x06, 0x1c, 0x2d, 0x65, 0x5a, 0xbe, 0x7e, 0xfe, 0xc2, 0x68, - 0x73, 0x4a, 0x5b, 0xc4, 0xca, 0xf7, 0xad, 0x21, 0x6c, 0x38, 0x83, 0x02, 0x7a, 0x0b, 0xe6, 0x69, - 0xe9, 0x66, 0xdf, 0x32, 0x42, 0xa2, 0x2c, 0x94, 0x93, 0xd0, 0xbc, 0x24, 0x68, 0xce, 0xdf, 0x4a, - 0x60, 0xc2, 0x29, 0xcc, 0x5c, 0x95, 0x35, 0x02, 0xcf, 0x65, 0x6b, 0x20, 0xa1, 0xca, 0xd2, 0x52, - 0x2c, 0xa0, 0xe8, 0x69, 0x98, 0xee, 0x91, 0x20, 0x30, 0xba, 0x84, 0x31, 0xf5, 0x4c, 0xbc, 0x73, - 0xad, 0xf3, 0x62, 0x1c, 0xc1, 0xd1, 0x47, 0xa0, 0x6c, 0x7a, 0x16, 0x09, 0x96, 0xa6, 0x99, 0xef, - 0xf9, 0x12, 0xe3, 0x25, 0x5a, 0x70, 0xff, 0xb0, 0x36, 0xc3, 0x4c, 0x15, 0xfa, 0x0b, 0xf3, 0x4a, - 0xfa, 0xaf, 0x53, 0x45, 0x32, 0xa5, 0x90, 0x8f, 0xa0, 0x82, 0x9f, 0x9d, 0x27, 0x4e, 0xff, 0x85, - 0x12, 0x5c, 0xa0, 0x3d, 0xf4, 0x3d, 0xc7, 0xa1, 0x42, 0xb6, 0xef, 0x78, 0x07, 0x3d, 0xe2, 0x9e, - 0x85, 0x43, 0x3c, 0x1a, 0x87, 0x52, 0xee, 0x38, 0xf4, 0x86, 0xc6, 0x61, 0xa2, 0xc8, 0x38, 0x48, - 0x76, 0x79, 0xc0, 0x58, 0xfc, 0x57, 0x0d, 0x96, 0xb2, 0xc6, 0xe2, 0x0c, 0xd4, 0xff, 0x5e, 0x52, - 0xfd, 0xbf, 0x51, 0xd4, 0x4c, 0x4c, 0x77, 0x3d, 0xc7, 0x0c, 0xf8, 0x71, 0x09, 0x2e, 0xc5, 0xd5, - 0x5b, 0x6e, 0x10, 0x1a, 0x8e, 0xc3, 0x8d, 0xe3, 0xd3, 0x9f, 0xf7, 0x7e, 0xc2, 0x8a, 0xdb, 0x18, - 0xef, 0x53, 0xd5, 0xbe, 0xe7, 0xba, 0xbc, 0xf6, 0x53, 0x2e, 0xaf, 0xf6, 0x43, 0xa4, 0x79, 0xbc, - 0xf7, 0xeb, 0x7f, 0x68, 0xb0, 0x9c, 0xdd, 0xf0, 0x0c, 0x98, 0xca, 0x4b, 0x32, 0xd5, 0x67, 0x1e, - 0xde, 0x57, 0xe7, 0xb0, 0xd5, 0x3f, 0x2e, 0xe5, 0x7d, 0x2d, 0xb3, 0x33, 0xb7, 0xe1, 0x1c, 0x35, - 0x00, 0x82, 0x50, 0xf8, 0x66, 0x4e, 0x76, 0x68, 0x19, 0x79, 0x5d, 0xce, 0xe1, 0x24, 0x0e, 0x9c, - 0x46, 0x8a, 0x36, 0x60, 0x9a, 0x6a, 0xfd, 0x14, 0x7f, 0x69, 0x74, 0xfc, 0x52, 0xe6, 0x77, 0x78, - 0x5b, 0x1c, 0x21, 0x41, 0x3f, 0x0d, 0x73, 0x96, 0x5c, 0x51, 0x0f, 0x38, 0xb1, 0x48, 0x63, 0x65, - 0x5e, 0xb4, 0xa6, 0xda, 0x1a, 0x27, 0x91, 0xe9, 0x7f, 0xae, 0xc1, 0xe3, 0xc7, 0xf1, 0x16, 0x7a, - 0x1b, 0xc0, 0x8c, 0x36, 0x71, 0x7e, 0x66, 0x5d, 0x54, 0x0d, 0x8a, 0xb0, 0xc4, 0x0b, 0x54, 0x16, - 0x05, 0x58, 0x21, 0x92, 0x71, 0x10, 0x52, 0x3a, 0xa5, 0x83, 0x10, 0xfd, 0x7f, 0x6a, 0xaa, 0x28, - 0x52, 0xe7, 0xf6, 0xbd, 0x26, 0x8a, 0xd4, 0xbe, 0xe7, 0xba, 0x96, 0xfe, 0x64, 0x02, 0xae, 0x64, - 0x37, 0x51, 0xf6, 0xde, 0xc7, 0x13, 0x1a, 0x42, 0xe5, 0x1d, 0xd3, 0x0e, 0xd0, 0x2b, 0x30, 0xd5, - 0xe7, 0x11, 0x0e, 0x13, 0xac, 0x2b, 0x4f, 0x51, 0x11, 0xc7, 0xe3, 0x0f, 0xee, 0x1f, 0xd6, 0x96, - 0xb3, 0x76, 0x1c, 0x11, 0xb9, 0x20, 0xda, 0x21, 0x3b, 0x65, 0xe9, 0x73, 0x65, 0xef, 0x63, 0x23, - 0x4a, 0x39, 0x63, 0x8b, 0x38, 0x23, 0x1b, 0xf7, 0x3f, 0xab, 0xc1, 0x7c, 0x62, 0x69, 0x05, 0x4b, - 0x65, 0xb6, 0x58, 0x0a, 0x39, 0xc3, 0x13, 0x6b, 0x36, 0x56, 0x21, 0x12, 0xc5, 0x01, 0x4e, 0x11, - 0x4c, 0xc9, 0x7b, 0x75, 0x7a, 0xdf, 0x73, 0xf2, 0x5e, 0xed, 0x7c, 0x8e, 0xbc, 0xff, 0xb5, 0x52, - 0xde, 0xd7, 0x32, 0x79, 0x7f, 0x17, 0x66, 0xa2, 0x08, 0xb2, 0x48, 0x6e, 0x5d, 0x1b, 0xb7, 0x4f, - 0x1c, 0x5d, 0x7c, 0x10, 0x1c, 0x95, 0x04, 0x38, 0xa6, 0x85, 0x7e, 0x4e, 0x03, 0x88, 0x27, 0x46, - 0x2c, 0x8f, 0x3b, 0x0f, 0x6f, 0x38, 0x14, 0xfd, 0x6a, 0x9e, 0xca, 0x16, 0x85, 0x29, 0x14, 0xba, - 0xfa, 0x6f, 0x97, 0x00, 0x0d, 0xf7, 0x9d, 0xea, 0xbd, 0xbb, 0xb6, 0x6b, 0xa5, 0xf5, 0xff, 0x9b, - 0xb6, 0x6b, 0x61, 0x06, 0x19, 0x41, 0x33, 0x7e, 0x09, 0xce, 0x75, 0x1d, 0x6f, 0xcb, 0x70, 0x9c, - 0x03, 0x11, 0x94, 0xc6, 0x56, 0x68, 0xa5, 0x7e, 0x9e, 0xee, 0x90, 0xd7, 0x93, 0x20, 0x9c, 0xae, - 0x8b, 0xfa, 0xb0, 0xe0, 0x13, 0xd3, 0x73, 0x4d, 0xdb, 0x61, 0x96, 0x92, 0x37, 0x08, 0x0b, 0xfa, - 0x2b, 0x2e, 0x1c, 0x1d, 0xd6, 0x16, 0x70, 0x0a, 0x17, 0x1e, 0xc2, 0x8e, 0x9e, 0x84, 0xe9, 0xbe, - 0x6f, 0xf7, 0x0c, 0xff, 0x80, 0xd9, 0x62, 0x95, 0x7a, 0x95, 0x6e, 0xb5, 0x6d, 0x5e, 0x84, 0x23, - 0x98, 0xfe, 0x0d, 0x0d, 0x26, 0x9a, 0x1b, 0x1d, 0xa4, 0xc3, 0x94, 0xe5, 0xf5, 0x0c, 0xdb, 0x15, - 0xa3, 0xc4, 0x62, 0xbb, 0x9a, 0xac, 0x04, 0x0b, 0x08, 0xea, 0xc3, 0x4c, 0x24, 0xae, 0xc6, 0x3a, - 0xeb, 0x6b, 0x6e, 0x74, 0x64, 0x7c, 0x84, 0xe4, 0xab, 0xa8, 0x24, 0xc0, 0x31, 0x11, 0xdd, 0x80, - 0xc5, 0xe6, 0x46, 0xa7, 0xe5, 0x9a, 0xce, 0xc0, 0x22, 0x6b, 0xfb, 0xec, 0x0f, 0xfd, 0x32, 0x9b, - 0x97, 0x88, 0x78, 0x32, 0xf6, 0x65, 0xa2, 0x12, 0x8e, 0x60, 0xb4, 0x1a, 0xe1, 0x2d, 0x44, 0x30, - 0x14, 0xab, 0x26, 0x90, 0xe0, 0x08, 0xa6, 0xff, 0xa0, 0x04, 0x55, 0xa5, 0x43, 0xc8, 0x81, 0x69, - 0xfe, 0xb9, 0x51, 0x2c, 0xc2, 0x5a, 0xc1, 0x4f, 0x4c, 0xf6, 0x9a, 0x53, 0xe7, 0x03, 0x1a, 0xe0, - 0x88, 0x84, 0x3a, 0x4b, 0xa5, 0xfc, 0x59, 0x42, 0x2b, 0x00, 0x3c, 0xea, 0x82, 0x1d, 0xa1, 0xf1, - 0xad, 0x81, 0x2d, 0x84, 0x8e, 0x2c, 0xc5, 0x4a, 0x0d, 0xb9, 0x9f, 0x4d, 0x66, 0xee, 0x67, 0xdb, - 0x50, 0xbe, 0xe7, 0xb9, 0x24, 0x10, 0x5e, 0xed, 0x87, 0xf4, 0x81, 0x33, 0x54, 0x5a, 0xbd, 0x41, - 0xf1, 0x62, 0x8e, 0x5e, 0xff, 0x0d, 0x0d, 0xa0, 0x69, 0x84, 0x06, 0x77, 0xc2, 0x8e, 0x10, 0xcf, - 0xf6, 0x78, 0x62, 0x19, 0x56, 0x86, 0xce, 0xc9, 0x26, 0x03, 0xfb, 0x5e, 0xf4, 0xf9, 0x52, 0xcf, - 0xe0, 0xd8, 0x3b, 0xf6, 0x3d, 0x82, 0x19, 0x1c, 0x7d, 0x18, 0x66, 0x88, 0x6b, 0xfa, 0x07, 0xfd, - 0x90, 0x58, 0x6c, 0x04, 0x2a, 0xfc, 0x98, 0x73, 0x2d, 0x2a, 0xc4, 0x31, 0x5c, 0x7f, 0x06, 0x92, - 0xca, 0xe2, 0x83, 0x7b, 0xa9, 0xef, 0x41, 0x65, 0xcd, 0xb5, 0xfa, 0x9e, 0xed, 0x86, 0x23, 0x7c, - 0xd3, 0x13, 0x30, 0x31, 0xf0, 0x1d, 0xf1, 0x49, 0x55, 0x51, 0x61, 0x62, 0x13, 0xdf, 0xc2, 0xb4, - 0x1c, 0x3d, 0x0d, 0xd3, 0xfd, 0x81, 0xdf, 0xf7, 0x82, 0xe8, 0xbb, 0xa4, 0x56, 0xdc, 0xe6, 0xc5, - 0x38, 0x82, 0xeb, 0xf7, 0x35, 0x58, 0x58, 0xdb, 0xef, 0xdb, 0x3e, 0x8b, 0xad, 0x23, 0x3e, 0x55, - 0x2a, 0x68, 0xfb, 0x3d, 0xfe, 0xaf, 0xe8, 0x83, 0x6c, 0x2f, 0x6a, 0xe0, 0x08, 0x8e, 0xb6, 0x61, - 0x9e, 0xb0, 0xe6, 0x4c, 0xa2, 0x1a, 0xd2, 0x97, 0x7c, 0x12, 0x47, 0x10, 0x0f, 0xdd, 0x4c, 0x60, - 0xc1, 0x29, 0xac, 0xa8, 0x03, 0xf3, 0xa6, 0x63, 0x04, 0x81, 0xbd, 0x6d, 0x9b, 0xf1, 0xa9, 0xf1, - 0x4c, 0xfd, 0xc3, 0xb4, 0x6d, 0x23, 0x01, 0xb9, 0x7f, 0x58, 0xbb, 0x28, 0xfa, 0x99, 0x04, 0xe0, - 0x14, 0x0a, 0xfd, 0x0f, 0x34, 0x98, 0x91, 0xaa, 0xd4, 0xbb, 0xca, 0xa3, 0x83, 0x9e, 0x82, 0x8a, - 0x65, 0x07, 0xea, 0x9e, 0xc0, 0x4e, 0xf3, 0x9a, 0xa2, 0x0c, 0x4b, 0xa8, 0x1e, 0x40, 0xe5, 0xba, - 0x58, 0x56, 0x68, 0x19, 0x4a, 0x76, 0xb4, 0x25, 0x81, 0xf8, 0x80, 0x52, 0xab, 0x89, 0x4b, 0xb6, - 0x25, 0xb9, 0xaa, 0x94, 0xcb, 0x55, 0xca, 0xb4, 0x4f, 0x1c, 0x3f, 0xed, 0xfa, 0xb7, 0x35, 0xa8, - 0xde, 0xb0, 0xb7, 0x88, 0xef, 0x72, 0x25, 0xff, 0xc9, 0x74, 0xb4, 0x75, 0x35, 0x2b, 0xd2, 0x1a, - 0xed, 0xc3, 0x4c, 0x60, 0xee, 0x10, 0x6b, 0xe0, 0xc8, 0xb3, 0xf4, 0x42, 0x31, 0xd5, 0x0a, 0xe9, - 0x8e, 0xc0, 0xa7, 0x44, 0x95, 0x45, 0x14, 0x70, 0x4c, 0x4c, 0xff, 0x02, 0x9c, 0xcf, 0x68, 0x84, - 0x6a, 0x50, 0x0e, 0x42, 0xc3, 0x0f, 0xc5, 0x98, 0x31, 0x71, 0xd3, 0xa1, 0x05, 0x98, 0x97, 0xa3, - 0x47, 0x61, 0x82, 0xb8, 0x96, 0x18, 0xb4, 0x69, 0xba, 0xca, 0xd6, 0x5c, 0x0b, 0xd3, 0x32, 0x3a, - 0x45, 0x8e, 0x97, 0x60, 0x46, 0x36, 0x45, 0xb7, 0x44, 0x19, 0x96, 0x50, 0xfd, 0x9f, 0x4d, 0xc2, - 0x13, 0x37, 0x3c, 0xdf, 0xbe, 0xe7, 0xb9, 0xa1, 0xe1, 0xb4, 0x3d, 0x2b, 0x3e, 0x1d, 0x12, 0xd3, - 0xfd, 0x15, 0x0d, 0x1e, 0x31, 0xfb, 0x83, 0x96, 0x6b, 0x87, 0xb6, 0x11, 0x39, 0xed, 0xdb, 0xc4, - 0xb7, 0xbd, 0xa2, 0x87, 0x44, 0x2c, 0x4a, 0xb7, 0xd1, 0xde, 0xcc, 0x42, 0x89, 0xf3, 0x68, 0xb1, - 0xb3, 0x2a, 0xcb, 0xbb, 0xeb, 0xb2, 0xce, 0x75, 0x42, 0x16, 0x39, 0x7c, 0x2f, 0xfe, 0xc4, 0x82, - 0x67, 0x55, 0xcd, 0x4c, 0x8c, 0x38, 0x87, 0x12, 0xfa, 0x22, 0x5c, 0xb4, 0x79, 0xe7, 0x30, 0x31, - 0x2c, 0xdb, 0x25, 0x41, 0xc0, 0x4e, 0x6c, 0xc6, 0x39, 0x8c, 0x69, 0x65, 0x21, 0xc4, 0xd9, 0x74, - 0xd0, 0x9b, 0x00, 0xc1, 0x81, 0x6b, 0x8a, 0xf1, 0x2f, 0x17, 0xa2, 0xca, 0x77, 0x52, 0x89, 0x05, - 0x2b, 0x18, 0xe9, 0x66, 0x12, 0x7a, 0x0e, 0xf1, 0x0d, 0xd7, 0xe4, 0xbe, 0x6a, 0x8d, 0x6f, 0x26, - 0x77, 0xa2, 0x42, 0x1c, 0xc3, 0xf5, 0x7f, 0xa8, 0xc1, 0xb4, 0x88, 0xc8, 0x47, 0x1f, 0x4a, 0x29, - 0x54, 0xd2, 0x61, 0x95, 0x52, 0xaa, 0x0e, 0x98, 0xb3, 0x41, 0xa8, 0xac, 0x42, 0x48, 0x15, 0xda, - 0x91, 0x05, 0xe1, 0x58, 0xff, 0x4d, 0x38, 0x1d, 0x22, 0x9d, 0x58, 0x21, 0xa6, 0x7f, 0x53, 0x83, - 0xc5, 0xa1, 0x56, 0x23, 0x68, 0xcb, 0x67, 0xe8, 0x2d, 0xff, 0xbf, 0x00, 0xec, 0xf2, 0xc5, 0x6a, - 0xbb, 0xd5, 0x21, 0xfe, 0x9e, 0x5c, 0x84, 0x7f, 0x55, 0x83, 0x85, 0xf8, 0x5c, 0x47, 0xf4, 0x42, - 0x2b, 0x1e, 0xa5, 0x72, 0x33, 0x85, 0xab, 0xbe, 0x24, 0xbe, 0x7b, 0x21, 0x0d, 0xc1, 0x43, 0x74, - 0xd1, 0x2f, 0x68, 0xb0, 0x60, 0x24, 0x2f, 0x5f, 0x44, 0x22, 0xb3, 0x50, 0x50, 0x61, 0xea, 0x22, - 0x47, 0xdc, 0x97, 0x14, 0x20, 0xc0, 0x43, 0x64, 0xd1, 0xc7, 0x61, 0xd6, 0xe8, 0xdb, 0xab, 0x03, - 0xcb, 0x26, 0xae, 0x29, 0x23, 0xf6, 0x99, 0x25, 0xbf, 0xda, 0x6e, 0xc9, 0x72, 0x9c, 0xa8, 0x25, - 0x6f, 0x57, 0x88, 0x81, 0x9c, 0x1c, 0xf3, 0x76, 0x85, 0x18, 0xc3, 0xf8, 0x76, 0x85, 0x18, 0x3a, - 0x95, 0x08, 0xfa, 0x29, 0x78, 0x94, 0xef, 0x35, 0x75, 0x23, 0xb0, 0xcd, 0xd5, 0x41, 0xb8, 0x43, - 0xdc, 0x30, 0xd2, 0x18, 0xb8, 0xc9, 0xc2, 0x4e, 0xad, 0xd7, 0xf2, 0x2a, 0xe1, 0xfc, 0xf6, 0xc8, - 0x05, 0xf0, 0x6c, 0xcb, 0x14, 0xdf, 0xc3, 0x0f, 0x4e, 0x0b, 0x05, 0x15, 0xdc, 0x6e, 0x35, 0x1b, - 0xe2, 0x73, 0x98, 0x98, 0x88, 0x7f, 0x63, 0x85, 0x02, 0xfa, 0x9a, 0x06, 0x73, 0x82, 0xc9, 0x05, - 0xcd, 0x69, 0x36, 0xff, 0x6f, 0x14, 0x65, 0xc6, 0x14, 0xc3, 0xaf, 0x60, 0x15, 0x39, 0x0f, 0x93, - 0x94, 0x61, 0x34, 0x09, 0x18, 0x4e, 0xf6, 0x03, 0xfd, 0x6d, 0x0d, 0x2e, 0x04, 0xc4, 0xdf, 0xb3, - 0x4d, 0xb2, 0x6a, 0x9a, 0xde, 0xc0, 0x8d, 0x26, 0xb9, 0x52, 0x3c, 0xd2, 0xbd, 0x93, 0x81, 0xaf, - 0xbe, 0x74, 0x74, 0x58, 0xbb, 0x90, 0x05, 0xc1, 0x99, 0xf4, 0xe9, 0xfe, 0x75, 0xee, 0xae, 0x11, - 0x9a, 0x3b, 0x0d, 0xc3, 0xdc, 0x61, 0xfa, 0x7b, 0xb0, 0x34, 0x53, 0x3c, 0x12, 0xf7, 0xf5, 0x24, - 0x2a, 0x6e, 0x97, 0xa7, 0x0a, 0x71, 0x9a, 0x20, 0x0a, 0xa0, 0xe2, 0x93, 0xb7, 0x07, 0x24, 0x08, - 0x83, 0x25, 0x60, 0xc4, 0x5b, 0x63, 0xcf, 0x18, 0x16, 0x08, 0xb9, 0x8e, 0x11, 0xfd, 0xc2, 0x92, - 0x10, 0xea, 0xc2, 0x13, 0x9c, 0x73, 0x57, 0x5d, 0xcf, 0x3d, 0xe8, 0x79, 0x83, 0x20, 0xc5, 0xfd, - 0x55, 0xc6, 0xfd, 0x2c, 0x80, 0x60, 0xed, 0xb8, 0x8a, 0xf8, 0x78, 0x3c, 0xcb, 0xaf, 0x00, 0x1a, - 0xe6, 0x1b, 0xb4, 0x00, 0x13, 0xbb, 0x84, 0x5f, 0xa1, 0x9a, 0xc1, 0xf4, 0x5f, 0x74, 0x01, 0xca, - 0x7b, 0x86, 0x33, 0xe0, 0x0a, 0x67, 0x05, 0xf3, 0x1f, 0x2f, 0x94, 0x3e, 0xa9, 0xe9, 0xbf, 0xab, - 0xc1, 0xc5, 0xcc, 0x8f, 0x43, 0x18, 0x2e, 0xf5, 0x8c, 0xfd, 0x0d, 0xcf, 0x5d, 0x1f, 0x84, 0x46, - 0x68, 0xbb, 0xdd, 0x96, 0xbb, 0xed, 0xd8, 0xdd, 0x1d, 0xae, 0x9f, 0x95, 0xb9, 0x36, 0xb1, 0x9e, - 0x59, 0x03, 0xe7, 0xb4, 0x44, 0x2d, 0x38, 0xdf, 0x33, 0xf6, 0x87, 0x10, 0x96, 0x18, 0x42, 0x76, - 0x11, 0x6f, 0x7d, 0x18, 0x8c, 0xb3, 0xda, 0xe8, 0x5f, 0x2f, 0xc3, 0x63, 0xb4, 0xe3, 0xf1, 0xc6, - 0xb6, 0x6e, 0xb8, 0x46, 0xf7, 0xdd, 0xb9, 0x81, 0x7c, 0x5b, 0x83, 0x47, 0x76, 0xb2, 0x95, 0x4e, - 0xb1, 0xb5, 0xbe, 0x5a, 0x48, 0xf5, 0x3e, 0x4e, 0x8f, 0xe5, 0xec, 0x75, 0x6c, 0x15, 0x9c, 0xd7, - 0x29, 0xf4, 0x0a, 0x2c, 0xb8, 0x9e, 0x45, 0x1a, 0xad, 0x26, 0x5e, 0x37, 0x82, 0xdd, 0x4e, 0x64, - 0x96, 0x97, 0xb9, 0x7b, 0x6a, 0x23, 0x05, 0xc3, 0x43, 0xb5, 0xd1, 0x1e, 0xa0, 0xbe, 0x67, 0xad, - 0xed, 0xd9, 0x66, 0x14, 0xa8, 0x50, 0xdc, 0x25, 0xc6, 0x6e, 0x19, 0xb4, 0x87, 0xb0, 0xe1, 0x0c, - 0x0a, 0x4c, 0x6b, 0xa6, 0x9d, 0x59, 0xf7, 0x5c, 0x3b, 0xf4, 0xfc, 0xeb, 0xbe, 0x61, 0x92, 0xb1, - 0x94, 0x47, 0xc6, 0xe7, 0x1b, 0x99, 0x18, 0x71, 0x0e, 0x25, 0xfd, 0x7f, 0x69, 0x70, 0x8e, 0xb2, - 0x45, 0xdb, 0xf7, 0xf6, 0x0f, 0xde, 0x8d, 0x0c, 0xf9, 0x34, 0x4c, 0xf6, 0x3c, 0x2b, 0x32, 0x40, - 0x2f, 0x52, 0xfd, 0x6f, 0xdd, 0xb3, 0xc8, 0x7d, 0xee, 0xa7, 0xdb, 0x3f, 0xa0, 0x3f, 0x30, 0xab, - 0xa2, 0x9a, 0x93, 0x13, 0xf9, 0xe6, 0xa4, 0xfe, 0x9f, 0x34, 0xae, 0xc8, 0x45, 0xe6, 0xdc, 0xbb, - 0x72, 0x1d, 0x3e, 0x07, 0x73, 0xb4, 0x6c, 0xdd, 0xd8, 0x6f, 0x37, 0x5f, 0xf3, 0x9c, 0x28, 0xc8, - 0x87, 0x1d, 0x29, 0xde, 0x54, 0x01, 0x38, 0x59, 0x4f, 0xff, 0x8f, 0xf3, 0xc0, 0x2a, 0x38, 0x24, - 0x7c, 0x37, 0x7e, 0xd7, 0x33, 0x50, 0x35, 0xfb, 0x83, 0xc6, 0xb5, 0xce, 0xab, 0x03, 0x2f, 0x34, - 0x84, 0xa7, 0x91, 0x69, 0x67, 0x8d, 0xf6, 0x66, 0x54, 0x8c, 0xd5, 0x3a, 0x74, 0x85, 0x9b, 0xfd, - 0x81, 0x90, 0x99, 0x6d, 0xf5, 0x48, 0x8a, 0xad, 0xf0, 0x46, 0x7b, 0x33, 0x01, 0xc3, 0x43, 0xb5, - 0xd1, 0x17, 0x61, 0x96, 0x88, 0xc5, 0x77, 0xc3, 0xf0, 0x2d, 0xb1, 0xb6, 0x0b, 0x6f, 0xaf, 0x72, - 0x68, 0xa3, 0x15, 0xcd, 0x95, 0xda, 0x35, 0x85, 0x04, 0x4e, 0x10, 0x64, 0x0a, 0xa6, 0xf8, 0x4d, - 0x67, 0xca, 0xb3, 0xd2, 0x8b, 0xbd, 0x2c, 0x14, 0xcc, 0xbc, 0x4a, 0x38, 0xbf, 0x3d, 0xfa, 0x4d, - 0x0d, 0x2e, 0x49, 0xa8, 0xed, 0xda, 0xbd, 0x41, 0x0f, 0x13, 0xd3, 0x31, 0xec, 0x9e, 0xd0, 0x36, - 0x5f, 0x7f, 0x68, 0x1f, 0x9a, 0x44, 0xcf, 0x05, 0x4e, 0x36, 0x0c, 0xe7, 0x74, 0x09, 0x7d, 0x53, - 0x83, 0x2b, 0x11, 0xa8, 0x4d, 0xed, 0xbd, 0x81, 0x4f, 0xe2, 0x30, 0x31, 0x31, 0x24, 0xd3, 0x85, - 0xe4, 0xdf, 0x07, 0x8f, 0x0e, 0x6b, 0x57, 0xd6, 0x1e, 0x80, 0x1b, 0x3f, 0x90, 0xba, 0xca, 0x2e, - 0x1d, 0x6f, 0x3b, 0x14, 0xea, 0xe9, 0x69, 0xb1, 0x0b, 0x25, 0x81, 0x13, 0x04, 0xd1, 0x6f, 0x69, - 0xf0, 0x88, 0x5a, 0xa0, 0x72, 0x0b, 0xd7, 0x4b, 0x3f, 0xfb, 0xd0, 0x3a, 0x93, 0xc2, 0xcf, 0x3d, - 0x40, 0x39, 0x40, 0x9c, 0xd7, 0x2b, 0x2a, 0x7a, 0x7b, 0x8c, 0x31, 0xb9, 0xee, 0x5a, 0xe6, 0xa2, - 0x97, 0xf3, 0x6a, 0x80, 0x23, 0x18, 0x35, 0x09, 0xfb, 0x9e, 0xd5, 0xb6, 0xad, 0xe0, 0x96, 0xdd, - 0xb3, 0x43, 0xa6, 0x5d, 0x4e, 0xf0, 0xe1, 0x68, 0x7b, 0x56, 0xbb, 0xd5, 0xe4, 0xe5, 0x38, 0x51, - 0x8b, 0x45, 0x21, 0xdb, 0x3d, 0xa3, 0x4b, 0xda, 0x03, 0xc7, 0x69, 0xfb, 0x1e, 0x73, 0x13, 0x34, - 0x89, 0x61, 0x39, 0xb6, 0x4b, 0x96, 0x66, 0x8b, 0x47, 0x21, 0xb7, 0xf2, 0x90, 0xe2, 0x7c, 0x7a, - 0x68, 0x05, 0x60, 0xdb, 0xb0, 0x9d, 0xce, 0x5d, 0xa3, 0x7f, 0xdb, 0x5d, 0x9a, 0x63, 0x02, 0x8c, - 0xd9, 0x63, 0xd7, 0x64, 0x29, 0x56, 0x6a, 0x50, 0x6e, 0xa2, 0x52, 0x10, 0x13, 0x7e, 0x17, 0x69, - 0x69, 0xfe, 0x21, 0x71, 0x53, 0x84, 0x90, 0x0f, 0xdf, 0x4d, 0x85, 0x04, 0x4e, 0x10, 0x44, 0x5f, - 0xd1, 0x60, 0x3e, 0x38, 0x08, 0x42, 0xd2, 0x93, 0x7d, 0x38, 0xf7, 0xb0, 0xfb, 0xc0, 0x1c, 0x28, - 0x9d, 0x04, 0x11, 0x9c, 0x22, 0x8a, 0x0c, 0x78, 0x8c, 0x8d, 0xea, 0xf5, 0xc6, 0x0d, 0xbb, 0xbb, - 0x23, 0x63, 0x8b, 0xdb, 0xc4, 0x37, 0x89, 0x1b, 0x2e, 0x2d, 0x30, 0xbe, 0xa9, 0x1d, 0x1d, 0xd6, - 0x1e, 0x6b, 0xe5, 0x57, 0xc3, 0xc7, 0xe1, 0x40, 0x6f, 0xc2, 0xb2, 0x00, 0xdf, 0xf2, 0xee, 0x0e, - 0x51, 0x58, 0x64, 0x14, 0x58, 0xc0, 0x77, 0x2b, 0xb7, 0x16, 0x3e, 0x06, 0x83, 0x7e, 0x58, 0xe2, - 0x36, 0xc8, 0xd0, 0x2a, 0x42, 0x2f, 0xc1, 0xb9, 0x1e, 0xe9, 0x79, 0xfe, 0xc1, 0x6a, 0x94, 0x72, - 0x40, 0x78, 0xad, 0x98, 0xf1, 0xb7, 0x9e, 0x04, 0xe1, 0x74, 0x5d, 0xba, 0xc7, 0x31, 0xb2, 0xd7, - 0x3a, 0x71, 0xfb, 0x52, 0xbc, 0xc7, 0xb5, 0x52, 0x30, 0x3c, 0x54, 0x1b, 0x35, 0x60, 0x51, 0x94, - 0xb5, 0xa8, 0xaa, 0x17, 0x5c, 0xf3, 0x49, 0x74, 0x8e, 0x43, 0x95, 0xa6, 0xc5, 0x56, 0x1a, 0x88, - 0x87, 0xeb, 0xd3, 0xaf, 0xa0, 0x3f, 0xd4, 0x5e, 0x4c, 0xc6, 0x5f, 0xb1, 0x91, 0x04, 0xe1, 0x74, - 0xdd, 0x48, 0x17, 0x4f, 0x74, 0xa1, 0x1c, 0x7f, 0xc5, 0x46, 0x0a, 0x86, 0x87, 0x6a, 0xeb, 0x7f, - 0x32, 0x09, 0x1f, 0x18, 0x61, 0xe7, 0x41, 0xbd, 0xec, 0xe1, 0x7e, 0x80, 0x1c, 0x58, 0x89, 0xc2, - 0x04, 0x56, 0x5e, 0x1d, 0x18, 0x6e, 0x68, 0x87, 0x07, 0x23, 0x4e, 0x4f, 0x3f, 0x67, 0x7a, 0x4e, - 0x4e, 0x6f, 0xd4, 0xe9, 0x0c, 0xf2, 0xa6, 0xf3, 0xe4, 0x24, 0x47, 0x9f, 0xfe, 0x5e, 0xf6, 0xf4, - 0x17, 0x1c, 0xd5, 0x07, 0xb2, 0x4b, 0x3f, 0x87, 0x5d, 0x0a, 0x8e, 0xea, 0x08, 0xec, 0xf5, 0xa7, - 0x93, 0xf0, 0xc1, 0x51, 0x76, 0xc1, 0x82, 0xfc, 0x95, 0xb1, 0xcf, 0x9c, 0x2a, 0x7f, 0xe5, 0xc5, - 0x64, 0x9c, 0x22, 0x7f, 0x65, 0x90, 0x3c, 0x6d, 0xfe, 0xca, 0x1b, 0xd5, 0xd3, 0xe2, 0xaf, 0xbc, - 0x51, 0x1d, 0x81, 0xbf, 0xfe, 0x2c, 0xbd, 0x3f, 0xc8, 0xcd, 0xaf, 0x05, 0x13, 0x66, 0x7f, 0x50, - 0x50, 0x48, 0xb1, 0x13, 0xc4, 0x46, 0x7b, 0x13, 0x53, 0x1c, 0x08, 0xc3, 0x14, 0xe7, 0x9f, 0x82, - 0x22, 0x88, 0xc5, 0xd3, 0x70, 0x96, 0xc4, 0x02, 0x13, 0x1d, 0x2a, 0xd2, 0xdf, 0x21, 0x3d, 0xe2, - 0x1b, 0x4e, 0x27, 0xf4, 0x7c, 0xa3, 0x5b, 0x54, 0xda, 0xb0, 0xa1, 0x5a, 0x4b, 0xe1, 0xc2, 0x43, - 0xd8, 0xe9, 0x80, 0xf4, 0x6d, 0xab, 0xa0, 0x7c, 0x61, 0x03, 0xd2, 0x6e, 0x35, 0x31, 0xc5, 0xa1, - 0xff, 0x61, 0x05, 0x94, 0x5b, 0x36, 0xd4, 0xd8, 0x32, 0x1c, 0xc7, 0xbb, 0xdb, 0xf6, 0xed, 0x3d, - 0xdb, 0x21, 0x5d, 0x62, 0xc9, 0x6b, 0x18, 0x81, 0x38, 0x67, 0x66, 0xda, 0xdf, 0x6a, 0x5e, 0x25, - 0x9c, 0xdf, 0x9e, 0x1a, 0xd3, 0x8b, 0x66, 0xfa, 0xb2, 0xde, 0x38, 0x67, 0x65, 0x43, 0x37, 0xff, - 0xf8, 0x7a, 0x1a, 0x2a, 0xc6, 0xc3, 0x64, 0xd1, 0x97, 0x34, 0xee, 0x25, 0x90, 0x2e, 0x51, 0x31, - 0x67, 0xd7, 0x1f, 0x92, 0xab, 0x3f, 0x76, 0x37, 0xc4, 0x4e, 0xd7, 0x24, 0x41, 0x6a, 0xce, 0x5d, - 0xdc, 0xcd, 0x72, 0x6e, 0x8a, 0x99, 0xbd, 0x5d, 0xb4, 0x2b, 0x39, 0xde, 0x52, 0x7e, 0x2e, 0x9b, - 0x59, 0x01, 0x67, 0x77, 0x44, 0x8e, 0x92, 0xf4, 0xf7, 0x08, 0x21, 0x50, 0x78, 0x94, 0x52, 0x8e, - 0xa3, 0x78, 0x94, 0x24, 0x00, 0x27, 0x09, 0xa2, 0x3e, 0xcc, 0xec, 0x46, 0x4e, 0x36, 0x61, 0x94, - 0x37, 0x8a, 0x52, 0x57, 0x3c, 0x75, 0xfc, 0xfc, 0x57, 0x16, 0xe2, 0x98, 0x08, 0xda, 0x81, 0xe9, - 0x5d, 0x2e, 0x88, 0x84, 0x31, 0xbd, 0x3a, 0xb6, 0xb2, 0xcf, 0x6d, 0x3a, 0x51, 0x84, 0x23, 0xf4, - 0x6a, 0xfc, 0x47, 0xe5, 0x01, 0x61, 0x3f, 0x5f, 0xd7, 0xe0, 0xe2, 0x1e, 0xf1, 0x43, 0xdb, 0x4c, - 0xbb, 0x96, 0x67, 0x8a, 0x1b, 0x24, 0xaf, 0x65, 0x21, 0xe4, 0x6c, 0x92, 0x09, 0xc2, 0xd9, 0x5d, - 0xd0, 0x7f, 0xac, 0xc1, 0x90, 0x03, 0x0b, 0xfd, 0x92, 0x06, 0xb3, 0xdb, 0xc4, 0x08, 0x07, 0x3e, - 0xb9, 0x6e, 0x84, 0x32, 0x94, 0xf5, 0xb5, 0x87, 0xe1, 0x37, 0x5b, 0xb9, 0xa6, 0x20, 0xe6, 0xe7, - 0x68, 0xf2, 0x46, 0xb8, 0x0a, 0xc2, 0x89, 0x1e, 0x2c, 0xbf, 0x0c, 0x8b, 0x43, 0x0d, 0x4f, 0x74, - 0x90, 0xf2, 0x2f, 0x85, 0xff, 0x33, 0x9d, 0x30, 0xf0, 0x4d, 0x28, 0x1b, 0x96, 0x25, 0xd3, 0x11, - 0x3d, 0x5f, 0xec, 0xbc, 0xd8, 0x52, 0x23, 0x86, 0xd9, 0x4f, 0xcc, 0xd1, 0xa2, 0x6b, 0x80, 0x8c, - 0xc4, 0xa1, 0xd0, 0xba, 0x67, 0x45, 0x56, 0x12, 0xf3, 0x9b, 0xaf, 0x0e, 0x41, 0x71, 0x46, 0x0b, - 0xfd, 0x45, 0x98, 0x4f, 0xde, 0xb5, 0x3c, 0x41, 0xe4, 0x99, 0xfe, 0x57, 0x34, 0x40, 0xc3, 0x09, - 0x08, 0x90, 0x0f, 0x15, 0x51, 0x23, 0x9a, 0xe2, 0x42, 0xae, 0xd1, 0x74, 0x4c, 0x5c, 0x1c, 0xb2, - 0x2d, 0x0a, 0x02, 0x2c, 0xe9, 0xe8, 0x7f, 0xae, 0x41, 0x9c, 0xef, 0x04, 0x7d, 0x02, 0xaa, 0x16, - 0x09, 0x4c, 0xdf, 0xee, 0x87, 0xf1, 0x77, 0xc8, 0xcb, 0xe3, 0xcd, 0x18, 0x84, 0xd5, 0x7a, 0x48, - 0x87, 0xa9, 0xd0, 0x08, 0x76, 0x5b, 0x4d, 0x61, 0x2e, 0xb2, 0xcd, 0xfd, 0x0e, 0x2b, 0xc1, 0x02, - 0x12, 0xdf, 0x5b, 0x9c, 0x18, 0xe1, 0xde, 0x22, 0xda, 0x7e, 0x08, 0x97, 0x34, 0xd1, 0x83, 0x2f, - 0x68, 0xea, 0x7f, 0x5c, 0x82, 0x64, 0x8a, 0x99, 0xa2, 0x43, 0x30, 0x7c, 0xab, 0xb4, 0x74, 0x6a, - 0xb7, 0x4a, 0x3f, 0xc2, 0xf2, 0xb3, 0xf1, 0x84, 0x9a, 0xfc, 0x94, 0x49, 0xcd, 0xaa, 0xc6, 0xd3, - 0x61, 0xca, 0x1a, 0xe8, 0x79, 0x16, 0x27, 0x16, 0x46, 0x46, 0xf4, 0x07, 0xa2, 0x65, 0xd1, 0xa1, - 0x85, 0xf7, 0xc5, 0xbd, 0x59, 0xf9, 0xfd, 0xac, 0x14, 0xf3, 0x16, 0xe8, 0x13, 0x22, 0xac, 0xb0, - 0x9c, 0xb8, 0xdb, 0x1b, 0x5d, 0x08, 0x5e, 0x4c, 0x34, 0x8c, 0x63, 0x0d, 0xf5, 0xbf, 0xa9, 0xc1, - 0xb4, 0xc8, 0x26, 0x31, 0x42, 0x64, 0xe2, 0x36, 0x94, 0x99, 0x92, 0x3e, 0x8e, 0xfe, 0xd2, 0xd9, - 0xf1, 0xbc, 0x30, 0x91, 0x53, 0x83, 0x85, 0xc3, 0xb1, 0x7f, 0x31, 0x47, 0xaf, 0x7f, 0x63, 0x12, - 0xae, 0x88, 0x2a, 0x43, 0xdb, 0xb3, 0x5c, 0x82, 0x07, 0x70, 0x5e, 0xcc, 0x52, 0xd3, 0x37, 0x6c, - 0x79, 0x0e, 0x57, 0xcc, 0xec, 0x12, 0x27, 0xb4, 0x43, 0xe8, 0x70, 0x16, 0x0d, 0xf4, 0x33, 0x70, - 0x41, 0x14, 0xdf, 0x20, 0x86, 0x13, 0xee, 0x44, 0xb4, 0x8b, 0x99, 0x60, 0x2c, 0xfa, 0x60, 0x3d, - 0x03, 0x1f, 0xce, 0xa4, 0xc2, 0xce, 0x01, 0x05, 0xa0, 0xe1, 0x13, 0x43, 0x3d, 0x84, 0x1c, 0x23, - 0x7a, 0x6e, 0x3d, 0x13, 0x23, 0xce, 0xa1, 0xc4, 0xfc, 0x57, 0xc6, 0x3e, 0x33, 0x87, 0x31, 0x09, - 0x7d, 0x9b, 0x65, 0x39, 0xa1, 0xfc, 0xcd, 0x0d, 0xd8, 0x24, 0x08, 0xa7, 0xeb, 0xa2, 0x17, 0x60, - 0x9e, 0x9d, 0xab, 0xc6, 0x77, 0xd5, 0xca, 0x71, 0x7e, 0xd5, 0x8d, 0x04, 0x04, 0xa7, 0x6a, 0xea, - 0xdf, 0xd2, 0x60, 0x56, 0x65, 0xa0, 0x11, 0x22, 0x99, 0x07, 0x8a, 0xb8, 0x1e, 0x23, 0x20, 0x54, - 0xa5, 0x3a, 0x8a, 0xc4, 0xbe, 0xaf, 0xc1, 0xf9, 0x8c, 0x36, 0xec, 0x84, 0x8d, 0xa4, 0x44, 0xff, - 0x38, 0x27, 0x6c, 0x43, 0xdb, 0x88, 0x3c, 0x61, 0x4b, 0x43, 0xf0, 0x10, 0x5d, 0xf4, 0x1a, 0x4c, - 0x98, 0xbe, 0x2d, 0x86, 0xe5, 0xb9, 0x42, 0x26, 0x09, 0x6e, 0xc5, 0xe1, 0xe1, 0x0d, 0xdc, 0xc2, - 0x14, 0xa1, 0xfe, 0x4f, 0x27, 0xa0, 0xaa, 0x24, 0xaa, 0x41, 0xeb, 0xe3, 0x58, 0xb4, 0x31, 0xfa, - 0xc8, 0xaa, 0x5d, 0x87, 0x89, 0x6e, 0x7f, 0x50, 0xd0, 0xa4, 0x95, 0xe8, 0xae, 0x53, 0x74, 0xdd, - 0xfe, 0x00, 0xbd, 0x26, 0x8d, 0xe4, 0x62, 0x66, 0xac, 0x8c, 0x91, 0x4c, 0x19, 0xca, 0x11, 0x6f, - 0x4e, 0xe6, 0xf2, 0x66, 0x0f, 0xa6, 0x03, 0x61, 0x41, 0x97, 0x8b, 0x27, 0x49, 0x52, 0x46, 0x5a, - 0x58, 0xcc, 0x5c, 0xfd, 0x8e, 0x0c, 0xea, 0x88, 0x06, 0x55, 0x00, 0x06, 0x2c, 0xa6, 0x9b, 0xd9, - 0x15, 0x15, 0xae, 0x00, 0x6c, 0xb2, 0x12, 0x2c, 0x20, 0xfa, 0x57, 0x4b, 0x80, 0x86, 0x11, 0xa2, - 0x0f, 0x40, 0x99, 0x85, 0xb6, 0x8b, 0x85, 0xa6, 0xe4, 0xc7, 0x30, 0x82, 0x00, 0x73, 0x18, 0xea, - 0x88, 0xab, 0x0e, 0xc5, 0x26, 0x86, 0x9d, 0xec, 0x0a, 0x7a, 0xca, 0xbd, 0x88, 0x68, 0x6b, 0x9a, - 0xc8, 0xdd, 0x9a, 0x36, 0x61, 0xba, 0x67, 0xbb, 0x2c, 0x9a, 0xa3, 0x98, 0x8b, 0x80, 0x1f, 0x40, - 0x71, 0x14, 0x38, 0xc2, 0xa5, 0xff, 0x69, 0x89, 0x32, 0xb1, 0xed, 0x86, 0xc4, 0x35, 0x5c, 0x93, - 0xa0, 0x03, 0x00, 0x63, 0x10, 0x7a, 0x7c, 0x87, 0x17, 0xbc, 0xdc, 0x2a, 0x36, 0x5f, 0x12, 0xe9, - 0xaa, 0x44, 0xc8, 0xcf, 0x85, 0xe2, 0xdf, 0x58, 0x21, 0x46, 0x49, 0x87, 0x76, 0x8f, 0xbc, 0x6e, - 0xbb, 0x96, 0x77, 0x57, 0x0c, 0xef, 0xb8, 0xa4, 0xef, 0x48, 0x84, 0x9c, 0x74, 0xfc, 0x1b, 0x2b, - 0xc4, 0xd0, 0x67, 0x61, 0x89, 0xe5, 0x7c, 0x76, 0x59, 0x0e, 0x30, 0xd1, 0x37, 0xcf, 0x71, 0xa2, - 0x2d, 0xa7, 0x52, 0x7f, 0xfc, 0xe8, 0xb0, 0xb6, 0xd4, 0xc8, 0xa9, 0x83, 0x73, 0x5b, 0xeb, 0xbf, - 0xa5, 0xc1, 0xc5, 0xcc, 0xa1, 0x40, 0xd7, 0x61, 0x31, 0x0e, 0x06, 0x50, 0x65, 0x64, 0x25, 0x4e, - 0x69, 0x77, 0x33, 0x5d, 0x01, 0x0f, 0xb7, 0x41, 0xeb, 0x52, 0x4f, 0x50, 0x65, 0xb0, 0x88, 0x24, - 0x78, 0x4c, 0xa0, 0xca, 0x12, 0xd3, 0x38, 0xab, 0x9d, 0xfe, 0x53, 0x89, 0x0e, 0xc7, 0x03, 0x46, - 0x57, 0xc7, 0x16, 0xe9, 0xca, 0xa0, 0x69, 0xb9, 0x3a, 0xea, 0xb4, 0x10, 0x73, 0x18, 0x7a, 0x42, - 0x0d, 0xf4, 0x97, 0x52, 0x28, 0x0a, 0xf6, 0xd7, 0x43, 0x00, 0x11, 0x73, 0x63, 0xbb, 0x5d, 0xb4, - 0x0d, 0x15, 0x43, 0x24, 0x24, 0x17, 0xac, 0xf6, 0xa9, 0x42, 0x36, 0x96, 0xc0, 0xc1, 0x83, 0xfa, - 0xa2, 0x5f, 0x58, 0xe2, 0xd6, 0xff, 0x81, 0x06, 0x97, 0xa8, 0x40, 0xb2, 0xa2, 0x6b, 0x87, 0xf2, - 0x4a, 0xfa, 0x08, 0x5b, 0x6b, 0x0f, 0xaa, 0x7e, 0xdc, 0x4c, 0xf0, 0xe5, 0x4f, 0xaa, 0xd7, 0xdd, - 0x95, 0xd7, 0x09, 0xa8, 0xda, 0xd1, 0xf0, 0xbd, 0x20, 0x9a, 0x9c, 0xf4, 0x0d, 0x78, 0xa9, 0xbc, - 0x2b, 0x3d, 0xc1, 0x2a, 0x7e, 0xfd, 0xcb, 0x25, 0x80, 0x0d, 0x12, 0xde, 0xf5, 0xfc, 0x5d, 0x3a, - 0x44, 0xef, 0xaa, 0xdb, 0x34, 0x8f, 0xc3, 0x64, 0xdf, 0xb3, 0x02, 0x21, 0xa5, 0xd8, 0x1d, 0x30, - 0x76, 0x9c, 0xcd, 0x4a, 0x51, 0x0d, 0xca, 0xcc, 0xf1, 0x2b, 0xb6, 0x02, 0xa6, 0xf5, 0x52, 0x4d, - 0x27, 0xc0, 0xbc, 0x9c, 0xa7, 0x9a, 0x64, 0xd1, 0xa6, 0x81, 0x50, 0xe3, 0x45, 0xaa, 0x49, 0x5e, - 0x86, 0x25, 0x54, 0xff, 0xf2, 0x24, 0x24, 0x32, 0xea, 0xc7, 0xa6, 0xb8, 0x76, 0x3a, 0xa6, 0xf8, - 0x67, 0x61, 0xc9, 0xf1, 0x0c, 0xab, 0x6e, 0x38, 0x94, 0xe9, 0xfd, 0x0e, 0x9f, 0x0e, 0xc3, 0xed, - 0xca, 0x74, 0xed, 0x4c, 0x00, 0xdc, 0xca, 0xa9, 0x83, 0x73, 0x5b, 0xa3, 0x50, 0xe6, 0xf1, 0xe7, - 0x29, 0xfa, 0x6e, 0x8d, 0xfb, 0xde, 0xc0, 0x8a, 0x1a, 0x67, 0x2c, 0x77, 0xe5, 0x64, 0xaa, 0x7f, - 0xf4, 0xf3, 0x1a, 0x5c, 0x24, 0xfb, 0x21, 0xf1, 0x5d, 0xc3, 0xb9, 0xe3, 0x1b, 0xdb, 0xdb, 0xb6, - 0x29, 0x02, 0x85, 0xf8, 0xe4, 0xb4, 0x8f, 0x0e, 0x6b, 0x17, 0xd7, 0xb2, 0x2a, 0xdc, 0x3f, 0xac, - 0x7d, 0x6c, 0xf8, 0x39, 0x8d, 0x28, 0xac, 0x38, 0xb3, 0x09, 0x63, 0xc6, 0x6c, 0x72, 0xcb, 0xcf, - 0x43, 0xf5, 0x04, 0xf1, 0xad, 0x33, 0xaa, 0x5b, 0xe6, 0xd7, 0xa6, 0x40, 0x09, 0xe9, 0x3e, 0x41, - 0x62, 0xc6, 0xbf, 0xab, 0xc1, 0x05, 0xd3, 0xb1, 0x89, 0x1b, 0xa6, 0x62, 0x77, 0xf9, 0xc2, 0xd8, - 0x2c, 0x14, 0x6b, 0xde, 0x27, 0x6e, 0xab, 0xd9, 0xf0, 0x5c, 0x97, 0x98, 0x61, 0x23, 0x03, 0x39, - 0xb7, 0x72, 0xb2, 0x20, 0x38, 0xb3, 0x33, 0xec, 0x7b, 0x58, 0x79, 0xab, 0xa9, 0xde, 0x7b, 0x6a, - 0x88, 0x32, 0x2c, 0xa1, 0xe8, 0x19, 0xa8, 0x76, 0x7d, 0x6f, 0xd0, 0x0f, 0x1a, 0x2c, 0x86, 0x89, - 0xcf, 0x20, 0x53, 0x24, 0xae, 0xc7, 0xc5, 0x58, 0xad, 0x83, 0x3e, 0x0e, 0xb3, 0xfc, 0x67, 0xdb, - 0x27, 0xdb, 0xf6, 0xbe, 0x58, 0x6e, 0x2c, 0x30, 0xe2, 0xba, 0x52, 0x8e, 0x13, 0xb5, 0xd0, 0x87, - 0x61, 0xc6, 0x0e, 0x82, 0x01, 0xf1, 0x37, 0xf1, 0x2d, 0x91, 0xfc, 0x89, 0x39, 0x54, 0x5b, 0x51, - 0x21, 0x8e, 0xe1, 0xe8, 0x97, 0x35, 0x98, 0xf7, 0xc9, 0xdb, 0x03, 0xdb, 0x27, 0x16, 0x23, 0x1a, - 0x88, 0xb8, 0x7a, 0x3c, 0x5e, 0x2c, 0xff, 0x0a, 0x4e, 0x20, 0xe5, 0x7c, 0x2e, 0xdd, 0x11, 0x49, - 0x20, 0x4e, 0xf5, 0x80, 0x0e, 0x55, 0x60, 0x77, 0x5d, 0xdb, 0xed, 0xae, 0x3a, 0xdd, 0x60, 0xa9, - 0xc2, 0x96, 0x2e, 0xd7, 0xb9, 0xe2, 0x62, 0xac, 0xd6, 0x41, 0xcf, 0xc1, 0xdc, 0x20, 0xa0, 0x9c, - 0xdb, 0x23, 0x7c, 0x7c, 0x67, 0xe2, 0xc0, 0xc2, 0x4d, 0x15, 0x80, 0x93, 0xf5, 0xa8, 0x89, 0x17, - 0x15, 0x88, 0x51, 0x06, 0x7e, 0xfb, 0x95, 0xf6, 0x73, 0x33, 0x01, 0xc1, 0xa9, 0x9a, 0xcb, 0xab, - 0x70, 0x3e, 0xe3, 0x33, 0x4f, 0xb4, 0x3c, 0xbe, 0x55, 0x82, 0xf7, 0x3f, 0x90, 0x2b, 0xd1, 0xdf, - 0xd1, 0xa0, 0x4a, 0xf6, 0x43, 0xdf, 0x90, 0x61, 0x8e, 0x74, 0x8a, 0xb6, 0x4f, 0x65, 0x09, 0xac, - 0xac, 0xc5, 0x84, 0xf8, 0xb4, 0xc9, 0xed, 0x4e, 0x81, 0x60, 0xb5, 0x3f, 0x54, 0x5b, 0xe7, 0x77, - 0xa3, 0x55, 0x77, 0x9d, 0x48, 0x3c, 0x2e, 0x20, 0xcb, 0x9f, 0x86, 0x85, 0x34, 0xe6, 0x13, 0x8d, - 0xd4, 0x3f, 0x29, 0x41, 0xb9, 0xed, 0x18, 0x67, 0x92, 0xc7, 0xeb, 0x2f, 0x25, 0x92, 0xa8, 0x14, - 0xca, 0x4c, 0xc3, 0xba, 0x9a, 0x9b, 0xbe, 0xa9, 0x9b, 0x4a, 0xdf, 0xf4, 0x72, 0x71, 0x12, 0xc7, - 0x67, 0x6b, 0xfa, 0xd7, 0x1a, 0xcc, 0xb0, 0x7a, 0x67, 0x90, 0xac, 0xe3, 0xcd, 0x64, 0xb2, 0x8e, - 0xe7, 0x0b, 0x7f, 0x53, 0x4e, 0x6e, 0x8e, 0xef, 0x47, 0xdf, 0xc2, 0x52, 0x71, 0x7c, 0x4e, 0x7d, - 0x70, 0x81, 0x7f, 0xcc, 0x53, 0x59, 0xe9, 0x8b, 0x6e, 0x79, 0xa6, 0xe1, 0x0c, 0xe5, 0x30, 0x3a, - 0xf6, 0xd5, 0x85, 0x1e, 0xcc, 0x10, 0x71, 0xff, 0x3c, 0xfa, 0x98, 0x42, 0x2a, 0x6d, 0x74, 0x89, - 0x3d, 0x26, 0x17, 0x95, 0x04, 0x38, 0xa6, 0xa0, 0xff, 0x8b, 0x12, 0x54, 0x95, 0xb9, 0x7c, 0x27, - 0xb2, 0x23, 0x5d, 0xcb, 0xcc, 0x45, 0x5e, 0x62, 0x71, 0x8c, 0x97, 0x4e, 0x90, 0x87, 0xdc, 0x87, - 0xaa, 0x19, 0x67, 0xba, 0x1c, 0x87, 0xb9, 0x95, 0x84, 0x99, 0x22, 0x90, 0x3a, 0x2e, 0xc0, 0x2a, - 0x11, 0xfd, 0xf7, 0x4a, 0x30, 0xdd, 0xf6, 0x3d, 0x3a, 0xc1, 0x67, 0x20, 0x1a, 0x8c, 0x84, 0x68, - 0x28, 0xb6, 0x6e, 0x79, 0x67, 0x73, 0x85, 0x83, 0x9d, 0x12, 0x0e, 0xab, 0xe3, 0x10, 0x39, 0x5e, - 0x3c, 0xfc, 0x5b, 0x0d, 0xaa, 0xa2, 0xe6, 0x19, 0x08, 0x88, 0xcf, 0x27, 0x05, 0xc4, 0x8b, 0x63, - 0x7c, 0x57, 0x8e, 0x88, 0xf8, 0xba, 0x06, 0x73, 0xa2, 0xc6, 0x3a, 0xe9, 0x6d, 0x11, 0x1f, 0x5d, - 0x83, 0xe9, 0x60, 0xc0, 0x26, 0x52, 0x7c, 0xd0, 0x63, 0xaa, 0x90, 0xf0, 0xb7, 0x0c, 0x93, 0x3d, - 0xab, 0xc1, 0xab, 0x28, 0x19, 0xd3, 0x78, 0x01, 0x8e, 0x1a, 0x53, 0x13, 0xce, 0xf7, 0x9c, 0xa1, - 0x8c, 0x01, 0xd8, 0x73, 0x08, 0x66, 0x10, 0x6a, 0x39, 0xd1, 0xbf, 0xd1, 0x79, 0x14, 0xb3, 0x9c, - 0x28, 0x38, 0xc0, 0xbc, 0x5c, 0xff, 0xca, 0xa4, 0x1c, 0x6c, 0x26, 0xc1, 0x6e, 0xc0, 0x8c, 0xe9, - 0x13, 0x23, 0x24, 0x56, 0xfd, 0x60, 0x94, 0xce, 0x31, 0x2d, 0xae, 0x11, 0xb5, 0xc0, 0x71, 0x63, - 0xaa, 0x30, 0xa9, 0x47, 0x4c, 0xa5, 0x58, 0xb7, 0xcc, 0x3d, 0x5e, 0xfa, 0x14, 0x94, 0xbd, 0xbb, - 0xae, 0x8c, 0xad, 0x38, 0x96, 0x30, 0xfb, 0x94, 0xdb, 0xb4, 0x36, 0xe6, 0x8d, 0x58, 0x56, 0x15, - 0x91, 0x54, 0x83, 0x2b, 0xb2, 0xd5, 0xac, 0x84, 0x1a, 0xc8, 0x81, 0xe9, 0x1e, 0x9b, 0x86, 0xb1, - 0xf2, 0x56, 0x25, 0x26, 0x54, 0x4d, 0x64, 0xca, 0x30, 0xe3, 0x88, 0x04, 0x55, 0x7c, 0xa9, 0x72, - 0x16, 0xf4, 0x0d, 0x93, 0xa8, 0x8a, 0xef, 0x46, 0x54, 0x88, 0x63, 0x38, 0x3a, 0x80, 0x2a, 0xbf, - 0x56, 0xce, 0xa5, 0xec, 0x74, 0x71, 0x9f, 0xa6, 0xe8, 0xde, 0x9d, 0x18, 0x1b, 0x1f, 0x7a, 0xa5, - 0x00, 0xab, 0xb4, 0xf4, 0x5f, 0x9c, 0x94, 0x4c, 0x2a, 0x24, 0x7e, 0xf6, 0x53, 0x10, 0x5a, 0xa1, - 0xa7, 0x20, 0x3e, 0x06, 0xe5, 0xfe, 0x8e, 0x11, 0x44, 0x9c, 0x1a, 0x25, 0xdd, 0x2d, 0xb7, 0x69, - 0xe1, 0xfd, 0xc3, 0xda, 0xac, 0x20, 0xcd, 0x7e, 0x63, 0x5e, 0x17, 0x0d, 0xe0, 0x7c, 0x10, 0x1a, - 0x0e, 0xe9, 0xd8, 0xc2, 0x5b, 0x14, 0x84, 0x46, 0xaf, 0x5f, 0x20, 0x77, 0x2e, 0x3b, 0xa1, 0xea, - 0x0c, 0xa3, 0xc2, 0x59, 0xf8, 0xd1, 0xcf, 0x69, 0xb0, 0xc4, 0xca, 0x57, 0x07, 0xa1, 0xc7, 0xd3, - 0x61, 0xc7, 0xc4, 0x4f, 0x7e, 0x3e, 0xcb, 0xac, 0xfb, 0x4e, 0x0e, 0x3e, 0x9c, 0x4b, 0x09, 0x7d, - 0x01, 0x2e, 0x3a, 0x46, 0x10, 0xae, 0x9a, 0xa1, 0xbd, 0x67, 0x87, 0x07, 0x71, 0x17, 0xca, 0x27, - 0xee, 0x02, 0x0b, 0xd0, 0xb8, 0x95, 0x85, 0x0c, 0x67, 0xd3, 0xd0, 0xff, 0x4c, 0x03, 0x34, 0xcc, - 0x42, 0xc8, 0x81, 0x8a, 0x45, 0xb6, 0x8d, 0x81, 0x13, 0x46, 0x2a, 0x40, 0xa1, 0xdb, 0xd5, 0x31, - 0xca, 0x58, 0x32, 0x37, 0x05, 0x5e, 0x2c, 0x29, 0x20, 0x0f, 0x66, 0xee, 0xee, 0xd8, 0x21, 0x71, - 0xec, 0x20, 0x14, 0xd2, 0x79, 0x5c, 0x72, 0x52, 0xe7, 0x79, 0x3d, 0x42, 0x8c, 0x63, 0x1a, 0xfa, - 0x57, 0x27, 0xa0, 0x72, 0x82, 0xd7, 0xc7, 0x06, 0x80, 0x44, 0x5a, 0x05, 0xaa, 0x28, 0x91, 0x71, - 0x5c, 0x64, 0x4c, 0x9d, 0x69, 0x0c, 0x21, 0xc3, 0x19, 0x04, 0xd0, 0x17, 0xe0, 0x82, 0xed, 0x6e, - 0xfb, 0x46, 0x10, 0xfa, 0x03, 0x33, 0x1c, 0xf8, 0x64, 0x9c, 0x9c, 0xbd, 0xcc, 0xb5, 0xd0, 0xca, - 0x40, 0x87, 0x33, 0x89, 0x20, 0x02, 0xd3, 0x77, 0x3d, 0x7f, 0x97, 0x0a, 0xcf, 0xc9, 0xe2, 0x0f, - 0x17, 0xbc, 0xce, 0x50, 0xc4, 0x52, 0x93, 0xff, 0x0e, 0x70, 0x84, 0x5b, 0xff, 0xae, 0x06, 0x65, - 0x7e, 0x23, 0xed, 0x3d, 0x61, 0x57, 0xb1, 0xae, 0xe6, 0xe6, 0xa2, 0xa4, 0xe6, 0x0e, 0xab, 0xf1, - 0x1e, 0x31, 0x77, 0x58, 0x5f, 0x73, 0x74, 0x99, 0xef, 0x4e, 0x88, 0x6f, 0x61, 0xca, 0x42, 0x0b, - 0xce, 0x0b, 0xa5, 0xf7, 0x96, 0xbd, 0x4d, 0x28, 0x77, 0x35, 0x8d, 0x83, 0x40, 0x5c, 0x05, 0x67, - 0x52, 0xb7, 0x31, 0x0c, 0xc6, 0x59, 0x6d, 0xd0, 0x3f, 0xd7, 0xe8, 0xb6, 0x1c, 0xfa, 0xb6, 0x39, - 0x56, 0x5e, 0x45, 0xd9, 0xb7, 0x95, 0x75, 0x8e, 0x8c, 0x7b, 0x0b, 0x36, 0xe3, 0xfd, 0x99, 0x95, - 0xde, 0x3f, 0xac, 0xd5, 0x32, 0x5c, 0x91, 0x91, 0xeb, 0x9c, 0x0e, 0xec, 0x97, 0x7f, 0x78, 0x6c, - 0x15, 0xe6, 0xc6, 0x8f, 0x7a, 0x8c, 0x6e, 0x40, 0x39, 0x30, 0xbd, 0x3e, 0x39, 0x49, 0xca, 0x5a, - 0x39, 0xc0, 0x1d, 0xda, 0x12, 0x73, 0x04, 0xcb, 0x6f, 0xc1, 0xac, 0xda, 0xf3, 0x0c, 0x6f, 0x44, - 0x53, 0xf5, 0x46, 0x9c, 0xf8, 0xb0, 0x4e, 0xf5, 0x5e, 0xfc, 0x7e, 0x09, 0xc4, 0x6b, 0x43, 0x23, - 0x1c, 0x56, 0xd8, 0x51, 0xfa, 0xb8, 0x31, 0x5e, 0x58, 0x4a, 0x3f, 0x76, 0x1a, 0x8f, 0x81, 0x9a, - 0x41, 0x0e, 0xb9, 0x30, 0xe5, 0x18, 0x5b, 0xc4, 0x89, 0xde, 0x9e, 0xb9, 0x56, 0xfc, 0x71, 0x14, - 0x9e, 0xdb, 0x34, 0x48, 0xb9, 0xb4, 0x79, 0x21, 0x16, 0x54, 0x96, 0x9f, 0x87, 0xaa, 0x52, 0xed, - 0x44, 0x0e, 0xa0, 0xaf, 0x69, 0x70, 0x29, 0x62, 0x89, 0x64, 0xda, 0x09, 0xf4, 0x14, 0x54, 0x8c, - 0xbe, 0xcd, 0x7c, 0xa2, 0xaa, 0x57, 0x79, 0xb5, 0xdd, 0x62, 0x65, 0x58, 0x42, 0xd1, 0x47, 0xa0, - 0x12, 0xcd, 0x93, 0x50, 0x90, 0xe4, 0x12, 0x97, 0x87, 0x39, 0xb2, 0x06, 0x7a, 0x52, 0x49, 0x88, - 0x57, 0x8e, 0x77, 0x34, 0x49, 0x98, 0x9f, 0xfb, 0xea, 0x7f, 0xab, 0x04, 0x73, 0xdc, 0x91, 0x50, - 0xb7, 0x5d, 0xcb, 0x76, 0xbb, 0x67, 0x20, 0x4a, 0x13, 0xef, 0x4d, 0x96, 0x1e, 0xd6, 0x7b, 0x93, - 0x37, 0x61, 0xea, 0x6d, 0xba, 0xac, 0x23, 0x76, 0x18, 0x69, 0x75, 0xc9, 0xb9, 0x66, 0x12, 0x21, - 0xc0, 0x02, 0x85, 0xfe, 0x1f, 0x34, 0x58, 0x4c, 0x0c, 0xcb, 0x19, 0x08, 0xe5, 0xed, 0xa4, 0x50, - 0x5e, 0x2d, 0x96, 0x7c, 0x45, 0xe9, 0x73, 0x8e, 0x70, 0xfe, 0xed, 0x12, 0x4c, 0x76, 0x08, 0xb1, - 0xce, 0x60, 0xa6, 0xdf, 0x4c, 0x6c, 0x9a, 0x9f, 0x2a, 0xfc, 0xa2, 0x50, 0x9e, 0xbb, 0x61, 0x3b, - 0xe5, 0x6e, 0xf8, 0x74, 0x61, 0x0a, 0xc7, 0xfb, 0x1a, 0x7e, 0xbd, 0x04, 0x40, 0xab, 0xf1, 0x17, - 0xff, 0x44, 0xcc, 0x61, 0xfc, 0x26, 0xec, 0xcc, 0xbb, 0xe5, 0x25, 0x57, 0x5d, 0xbe, 0x16, 0x37, - 0x11, 0x3b, 0xb3, 0x93, 0x2f, 0xc5, 0x25, 0x57, 0xdf, 0xe4, 0x43, 0x5a, 0x7d, 0xfa, 0x3f, 0xd2, - 0x80, 0xa5, 0x6a, 0x6f, 0x6e, 0x74, 0xd0, 0x73, 0x30, 0x67, 0xf3, 0xa3, 0xc2, 0xa6, 0x9a, 0xe4, - 0x8c, 0x1d, 0x68, 0xb4, 0x54, 0x00, 0x4e, 0xd6, 0x43, 0x3d, 0x65, 0x5c, 0xc7, 0x78, 0x77, 0x53, - 0xf4, 0x43, 0xa6, 0x91, 0x9d, 0xcd, 0x9e, 0x18, 0xfd, 0x87, 0x25, 0x38, 0x97, 0xaa, 0x3b, 0x82, - 0x3e, 0x7f, 0x3a, 0xd2, 0x4b, 0xc9, 0x2c, 0x3b, 0x71, 0xfa, 0x99, 0x65, 0x65, 0x92, 0xd7, 0xc9, - 0xd3, 0x4d, 0xf2, 0xfa, 0x47, 0x1a, 0xb0, 0x87, 0x1c, 0xcf, 0x40, 0x7a, 0xfe, 0xc5, 0xa4, 0xf4, - 0xfc, 0x64, 0x51, 0xc6, 0xc9, 0x11, 0x9a, 0xbf, 0x59, 0x02, 0x96, 0xed, 0x5c, 0x44, 0x46, 0x28, - 0xc1, 0x06, 0x5a, 0x4e, 0xb0, 0xc1, 0x15, 0x11, 0xab, 0x90, 0xf2, 0xba, 0x29, 0xf1, 0x0a, 0x1f, - 0x51, 0xc2, 0x11, 0x26, 0x92, 0x62, 0x64, 0x38, 0x24, 0x01, 0xdd, 0x83, 0xb9, 0x60, 0xc7, 0xf3, - 0xc2, 0xc8, 0x04, 0x16, 0x73, 0xb7, 0x5a, 0x38, 0x44, 0x38, 0xfa, 0x14, 0xbe, 0x30, 0x3b, 0x2a, - 0x6e, 0x9c, 0x24, 0x85, 0x56, 0x00, 0xb6, 0x1c, 0xcf, 0xdc, 0x6d, 0xb4, 0x9a, 0x38, 0x0a, 0x24, - 0x65, 0xe1, 0x4c, 0x75, 0x59, 0x8a, 0x95, 0x1a, 0xfa, 0x1f, 0x6a, 0x7c, 0xb4, 0x4e, 0xb0, 0xac, - 0xce, 0x50, 0x4a, 0x7e, 0x28, 0x25, 0x25, 0xf3, 0xde, 0xd4, 0xfc, 0x3d, 0xf1, 0x15, 0x32, 0xa7, - 0x7d, 0x1f, 0xe6, 0x1c, 0x35, 0x09, 0xbe, 0x60, 0xe3, 0x42, 0xf9, 0xf3, 0x65, 0x82, 0xb6, 0x44, - 0x31, 0x4e, 0x12, 0xa0, 0xa2, 0x34, 0xea, 0xbc, 0xfa, 0x74, 0x3f, 0x9b, 0xb1, 0xb6, 0x0a, 0xc0, - 0xc9, 0x7a, 0xfa, 0xab, 0xf0, 0x41, 0xde, 0x75, 0x16, 0xcb, 0xbd, 0xb6, 0x6f, 0x92, 0x20, 0x68, - 0x18, 0x7d, 0xc3, 0xa4, 0xca, 0x3d, 0xbb, 0x02, 0xc9, 0x5d, 0x6e, 0x4f, 0xa7, 0x13, 0xbe, 0x4a, - 0x6b, 0x7b, 0x28, 0x4b, 0xcf, 0xff, 0xd3, 0xa0, 0xa6, 0xe0, 0x4c, 0x84, 0xa2, 0x44, 0x4c, 0xfa, - 0x0d, 0x0d, 0xaa, 0x86, 0xeb, 0x7a, 0xa1, 0xa1, 0x9e, 0x00, 0x59, 0xc5, 0x9f, 0x12, 0xcc, 0x25, - 0xb5, 0xb2, 0x1a, 0x93, 0x49, 0x9d, 0xf5, 0x2a, 0x10, 0xac, 0xf6, 0x66, 0xf9, 0xd3, 0xb0, 0x90, - 0x6e, 0x75, 0x22, 0x35, 0xbe, 0x0e, 0x17, 0x95, 0x5e, 0x89, 0xcb, 0x64, 0x54, 0x67, 0x7e, 0x1a, - 0xa6, 0xf7, 0xec, 0xc0, 0x8e, 0x2e, 0x25, 0x2b, 0xa3, 0xf8, 0x1a, 0x2f, 0xc6, 0x11, 0x5c, 0x7f, - 0x05, 0xce, 0xab, 0x38, 0xd8, 0x32, 0xdb, 0xe8, 0x9c, 0x64, 0x1e, 0xd6, 0xe1, 0x8a, 0x82, 0x21, - 0xf3, 0x46, 0xd5, 0x49, 0xd0, 0x7d, 0x69, 0x2a, 0xe2, 0x72, 0x11, 0xf6, 0xff, 0x3b, 0x1a, 0x3c, - 0x4a, 0xf2, 0x18, 0x46, 0xb0, 0xfc, 0x67, 0xc7, 0x9c, 0xd1, 0x5c, 0x86, 0x14, 0x59, 0x77, 0xf2, - 0xc0, 0x38, 0xbf, 0x67, 0xe8, 0x00, 0x20, 0x90, 0x53, 0x32, 0x4e, 0xf8, 0x66, 0xe6, 0x1c, 0x8b, - 0x44, 0xb0, 0xf2, 0x37, 0x56, 0x88, 0xa1, 0xb7, 0xa1, 0x12, 0x88, 0x99, 0x1c, 0xe7, 0xc2, 0x67, - 0x06, 0x63, 0x88, 0x08, 0x35, 0xf1, 0x0b, 0x4b, 0x32, 0xe8, 0x37, 0x34, 0xb8, 0xe0, 0x64, 0xac, - 0x0b, 0xb1, 0x2d, 0x74, 0x4e, 0x61, 0xc9, 0x71, 0x37, 0x60, 0x16, 0x04, 0x67, 0x76, 0x05, 0xfd, - 0xbd, 0xdc, 0xdb, 0x85, 0xe5, 0xe2, 0x8f, 0x40, 0x3c, 0x88, 0xf7, 0x0b, 0x5c, 0x34, 0xfc, 0xda, - 0x34, 0x57, 0x53, 0x98, 0xb7, 0x6a, 0x0b, 0xa6, 0xb6, 0x98, 0x9a, 0x2f, 0x58, 0xbd, 0xb0, 0x4d, - 0xc1, 0x8d, 0x05, 0xae, 0x83, 0xf3, 0xff, 0xb1, 0xc0, 0x8c, 0xde, 0x80, 0x09, 0xcb, 0x8d, 0x9e, - 0xf1, 0x79, 0x71, 0x0c, 0x1d, 0x37, 0x8e, 0x70, 0xa5, 0xdc, 0x41, 0x91, 0x22, 0x17, 0x2a, 0xae, - 0xd8, 0xd9, 0x05, 0x2f, 0x16, 0x7e, 0xc9, 0x55, 0x6a, 0x08, 0x52, 0x2f, 0x89, 0x4a, 0xb0, 0xa4, - 0x41, 0xe9, 0x49, 0xa5, 0x7d, 0x72, 0x3c, 0x7a, 0x52, 0x63, 0x3f, 0xce, 0x9c, 0x6a, 0xab, 0xfa, - 0x77, 0x79, 0x74, 0xfd, 0x7b, 0x2e, 0x57, 0xf7, 0x26, 0x30, 0x15, 0x1a, 0x2c, 0x60, 0x62, 0xaa, - 0x78, 0xc0, 0x02, 0xed, 0xff, 0x1d, 0x8a, 0x25, 0x56, 0x27, 0xd8, 0xcf, 0x00, 0x0b, 0xe4, 0x94, - 0xb1, 0xf8, 0x23, 0xb3, 0xe2, 0xc4, 0xae, 0x30, 0x63, 0xf1, 0x47, 0x0d, 0x38, 0x63, 0xf1, 0xff, - 0xb1, 0xc0, 0x8c, 0xde, 0xa2, 0x2a, 0x25, 0x97, 0xe3, 0x22, 0x49, 0xd6, 0x2b, 0x63, 0xae, 0xb1, - 0x20, 0x8a, 0x91, 0xe5, 0xbf, 0xb0, 0xc4, 0x8f, 0xb6, 0x60, 0x5a, 0x98, 0x6f, 0xe2, 0xb2, 0xf0, - 0x8b, 0x63, 0x64, 0xa6, 0x8e, 0xde, 0xe9, 0xe0, 0x17, 0xf6, 0x22, 0xc4, 0xfa, 0xdf, 0xaf, 0x70, - 0xc3, 0x5b, 0x1c, 0x36, 0x6e, 0x43, 0x25, 0x42, 0x37, 0x4e, 0xbc, 0x76, 0x94, 0x67, 0x9f, 0x7f, - 0x5a, 0xf4, 0x0b, 0x4b, 0xdc, 0xa8, 0x91, 0x15, 0x1a, 0x1f, 0xe7, 0x3b, 0x1c, 0x2d, 0x2c, 0x3e, - 0x19, 0x0b, 0x33, 0x71, 0x16, 0xb1, 0x30, 0xd9, 0x87, 0xb1, 0x93, 0x85, 0x0e, 0x63, 0x5f, 0x82, - 0x73, 0x51, 0xa8, 0x8a, 0x45, 0x98, 0x53, 0x58, 0x04, 0x71, 0xb2, 0xfb, 0x67, 0x8d, 0x24, 0x08, - 0xa7, 0xeb, 0xa2, 0xdf, 0xd7, 0xa0, 0x62, 0x8a, 0x5d, 0x5a, 0xac, 0xab, 0x5b, 0xe3, 0x79, 0x67, - 0x56, 0xa2, 0x4d, 0x9f, 0xab, 0x7b, 0xaf, 0x45, 0x32, 0x22, 0x2a, 0x7e, 0x48, 0xde, 0x7a, 0xd9, - 0x6b, 0xf4, 0x6f, 0xa8, 0x32, 0xeb, 0xb0, 0xec, 0xff, 0xec, 0x3a, 0x0f, 0x8f, 0x2e, 0xbd, 0x3d, - 0xe6, 0x57, 0xac, 0xc6, 0x18, 0xf9, 0x87, 0x7c, 0x4e, 0xea, 0xad, 0x31, 0xe4, 0x21, 0x7d, 0x8b, - 0xda, 0xfd, 0xe5, 0x5d, 0x98, 0x4b, 0x8c, 0xe0, 0x69, 0x1e, 0x1a, 0x2c, 0xbb, 0xb0, 0x90, 0xfe, - 0xd0, 0x53, 0x3d, 0xa4, 0xb8, 0x09, 0x33, 0x52, 0x02, 0xa3, 0x27, 0x14, 0x42, 0xf1, 0x0e, 0x79, - 0x93, 0x1c, 0x70, 0xaa, 0xb5, 0x84, 0x82, 0xcf, 0x4d, 0xf7, 0xd7, 0x68, 0x81, 0x40, 0xa8, 0x7f, - 0x4f, 0x18, 0x7e, 0x77, 0x48, 0xaf, 0xef, 0x18, 0x21, 0x79, 0xef, 0x7b, 0x4a, 0xf5, 0xff, 0xa6, - 0x71, 0x41, 0x2a, 0x9e, 0xdb, 0x31, 0xa0, 0xda, 0xe3, 0xf9, 0xbb, 0xd8, 0x85, 0x2e, 0xad, 0xf8, - 0x55, 0xb2, 0xf5, 0x18, 0x0d, 0x56, 0x71, 0xa2, 0xbb, 0xc3, 0x0f, 0x42, 0x5d, 0x1b, 0x6f, 0xc7, - 0x1b, 0xf9, 0x5d, 0x28, 0x34, 0xdc, 0x46, 0x7d, 0x4b, 0x47, 0x3b, 0xfe, 0x2d, 0x9d, 0x07, 0xbf, - 0xb0, 0xa2, 0x7f, 0x5b, 0x83, 0xcc, 0x6c, 0xe6, 0x48, 0x87, 0x29, 0x1e, 0xa0, 0xae, 0xbe, 0x94, - 0xc5, 0xa3, 0xd7, 0xb1, 0x80, 0x20, 0x1f, 0x2e, 0x88, 0xf0, 0xef, 0x9b, 0xe4, 0x20, 0x7e, 0xa3, - 0x49, 0x4c, 0xfd, 0xe8, 0x81, 0xa0, 0x2c, 0xaf, 0x4f, 0x27, 0x85, 0x09, 0x67, 0xe2, 0x66, 0x11, - 0xc8, 0xcc, 0x88, 0x78, 0x6f, 0x9c, 0x94, 0xb3, 0xae, 0x9e, 0x6e, 0x04, 0x32, 0x27, 0x71, 0xbc, - 0xdb, 0xff, 0x73, 0x70, 0x89, 0x55, 0x5b, 0xb5, 0x98, 0xdd, 0x10, 0x10, 0x6b, 0xd5, 0xb2, 0xd8, - 0x75, 0xa0, 0x71, 0x9f, 0x76, 0x62, 0xa7, 0xfd, 0x0c, 0xf7, 0x7b, 0xe4, 0xb4, 0x9f, 0xf5, 0x35, - 0xc7, 0x37, 0xfa, 0x47, 0x1a, 0x2c, 0x0e, 0x25, 0x1d, 0x18, 0xe9, 0xac, 0xf8, 0xcc, 0x5c, 0x7e, - 0x4f, 0xa6, 0x9f, 0x44, 0xaa, 0x66, 0xe6, 0x22, 0x79, 0x1d, 0xe6, 0x12, 0xae, 0x51, 0x79, 0xe1, - 0x4c, 0xcb, 0xbc, 0x70, 0xa6, 0xde, 0x27, 0x2b, 0x1d, 0x7b, 0x9f, 0xec, 0x5b, 0x73, 0x62, 0xba, - 0x99, 0x89, 0xf9, 0x26, 0x4c, 0xb1, 0x5b, 0x5f, 0xd1, 0x2b, 0x72, 0x2f, 0x14, 0xbe, 0x4d, 0x16, - 0x70, 0x09, 0xc3, 0xff, 0xc7, 0x02, 0x2b, 0x6a, 0xc2, 0x02, 0x7b, 0x4a, 0xbf, 0xed, 0x7b, 0xdb, - 0xb6, 0x43, 0x36, 0x62, 0x61, 0x26, 0xaf, 0xad, 0x37, 0x52, 0x70, 0x3c, 0xd4, 0x02, 0x61, 0x6e, - 0xa4, 0xf2, 0x35, 0xf6, 0x5c, 0xc1, 0x23, 0x02, 0x9e, 0x18, 0x4c, 0x1a, 0xa7, 0x6f, 0x03, 0x90, - 0x68, 0xe2, 0xa2, 0xd8, 0xa0, 0x97, 0x8a, 0x5d, 0xc8, 0x97, 0xd3, 0x1f, 0x09, 0x23, 0x59, 0x14, - 0x60, 0x85, 0x08, 0xf2, 0xa1, 0xba, 0x13, 0xbf, 0x18, 0x25, 0x2c, 0xc6, 0x97, 0xc7, 0x7c, 0xad, - 0x8a, 0xef, 0x7d, 0x4a, 0x01, 0x56, 0x89, 0x20, 0x1f, 0x20, 0xb6, 0x07, 0xc6, 0x79, 0x61, 0x24, - 0x36, 0x34, 0xe2, 0xef, 0x8c, 0xcb, 0xb0, 0x42, 0x85, 0xd2, 0x74, 0xe5, 0xb5, 0xcd, 0x71, 0x4c, - 0xcc, 0xf8, 0xf2, 0x67, 0x4c, 0x33, 0x2e, 0xc3, 0x0a, 0x15, 0x3a, 0xb6, 0xbd, 0xf8, 0xaa, 0xae, - 0xb0, 0x38, 0x5f, 0x1e, 0xf3, 0xca, 0xb4, 0xd0, 0x2b, 0xe2, 0x02, 0xac, 0x12, 0x41, 0x2e, 0x40, - 0x4f, 0xde, 0xe0, 0x15, 0x96, 0x67, 0xa1, 0xef, 0x8c, 0xef, 0x01, 0x73, 0xdf, 0x5e, 0xfc, 0x1b, - 0x2b, 0x14, 0xa8, 0x49, 0x2d, 0xfd, 0x1b, 0x50, 0x5c, 0x3b, 0x1b, 0xc9, 0xb7, 0xf1, 0x89, 0x58, - 0x49, 0xa9, 0xb2, 0xf5, 0xfa, 0x98, 0xa2, 0xa0, 0xdc, 0x3f, 0xac, 0xcd, 0x32, 0x19, 0x32, 0xa4, - 0xb0, 0xc4, 0x07, 0x1a, 0xb3, 0xc7, 0x1d, 0x68, 0xa0, 0xeb, 0xb0, 0x18, 0xa8, 0x01, 0x02, 0x4c, - 0x30, 0xcc, 0xb1, 0x26, 0xf2, 0xc6, 0x77, 0x27, 0x5d, 0x01, 0x0f, 0xb7, 0xe1, 0x82, 0x8f, 0x58, - 0xac, 0xfd, 0xbc, 0x2a, 0xf8, 0x78, 0x19, 0x96, 0x50, 0xb4, 0x97, 0x7a, 0x71, 0xf8, 0xdc, 0xb8, - 0x4e, 0x89, 0x11, 0x9f, 0x1f, 0xfe, 0x82, 0xfa, 0xda, 0xed, 0x42, 0xf1, 0x48, 0xb1, 0xec, 0x5b, - 0xdb, 0x0f, 0x78, 0xf1, 0x76, 0x90, 0x0c, 0xd0, 0x5e, 0x7c, 0x28, 0x41, 0xa9, 0xf2, 0x78, 0x23, - 0x2f, 0x38, 0x1b, 0x35, 0x60, 0x91, 0xec, 0xf7, 0xbd, 0x60, 0xe0, 0x13, 0x96, 0x30, 0x82, 0x4d, - 0x0f, 0x8a, 0xbd, 0x16, 0x6b, 0x69, 0x20, 0x1e, 0xae, 0xaf, 0x7f, 0x77, 0x06, 0xaa, 0x8a, 0x6e, - 0xf4, 0x4e, 0xdc, 0xe8, 0x09, 0xa1, 0x6a, 0x7a, 0x6e, 0x10, 0xfa, 0x86, 0x72, 0x8b, 0x69, 0x4c, - 0x9a, 0x72, 0xf4, 0x1a, 0x31, 0x66, 0xac, 0x92, 0xa1, 0xeb, 0x5c, 0xfa, 0x96, 0x26, 0x1e, 0x82, - 0x6f, 0x49, 0xae, 0xf3, 0x0c, 0xff, 0xd2, 0xc7, 0x01, 0xa2, 0xed, 0x42, 0x3e, 0x43, 0x2a, 0x33, - 0xcd, 0xb5, 0x82, 0x1b, 0x12, 0x86, 0x95, 0x7a, 0xe8, 0x1e, 0xcc, 0x39, 0x6a, 0x96, 0x29, 0xb1, - 0x97, 0x15, 0x3a, 0x01, 0x4e, 0xa4, 0xab, 0xe2, 0xe7, 0x89, 0x89, 0x22, 0x9c, 0x24, 0x45, 0xd9, - 0xc0, 0x89, 0x32, 0xa3, 0x8d, 0xe5, 0x27, 0x95, 0xf9, 0xd5, 0x62, 0x36, 0x90, 0x45, 0x01, 0x56, - 0x88, 0xe4, 0x38, 0xb3, 0xa6, 0x0b, 0x39, 0xb3, 0x06, 0x70, 0xde, 0x27, 0xa1, 0x7f, 0xd0, 0x38, - 0x30, 0xd9, 0x2b, 0x85, 0x7e, 0xc8, 0xd2, 0x92, 0x55, 0x8a, 0x5d, 0x12, 0xc0, 0xc3, 0xa8, 0x70, - 0x16, 0xfe, 0x84, 0x9c, 0x9c, 0x39, 0x56, 0x4e, 0x7e, 0x02, 0xaa, 0x21, 0x31, 0x77, 0x5c, 0xdb, - 0x34, 0x9c, 0x56, 0x53, 0x5c, 0xe4, 0x8d, 0x97, 0x7c, 0x0c, 0xc2, 0x6a, 0x3d, 0x54, 0x87, 0x89, - 0x81, 0x6d, 0x89, 0xcd, 0xe2, 0x27, 0xa4, 0x95, 0xd1, 0x6a, 0xde, 0x3f, 0xac, 0xbd, 0x3f, 0xf6, - 0x0e, 0xc9, 0xaf, 0xba, 0xda, 0xdf, 0xed, 0x5e, 0x0d, 0x0f, 0xfa, 0x24, 0x58, 0xd9, 0x6c, 0x35, - 0x31, 0x6d, 0x9c, 0xe5, 0xe8, 0x9b, 0x3d, 0x81, 0xa3, 0xef, 0x57, 0x35, 0x38, 0x6f, 0xa4, 0x0d, - 0x24, 0x12, 0x2c, 0xcd, 0x15, 0x17, 0xba, 0xd9, 0x46, 0x57, 0x9c, 0x4a, 0x64, 0x75, 0x98, 0x1c, - 0xce, 0xea, 0x83, 0xfe, 0xc7, 0x9a, 0x50, 0xe8, 0xcf, 0xd0, 0x93, 0x73, 0xda, 0xe6, 0xaf, 0x7e, - 0x0b, 0x20, 0xde, 0x02, 0xc6, 0xf6, 0x75, 0xfd, 0xb8, 0x0c, 0x17, 0xc7, 0x3d, 0x43, 0x66, 0x09, - 0xd3, 0xd8, 0x43, 0x14, 0xab, 0xdb, 0x21, 0xf1, 0x6f, 0xdf, 0x5e, 0x97, 0x79, 0xfa, 0x0b, 0x66, - 0x6c, 0x8b, 0xdf, 0x31, 0x19, 0xc2, 0x88, 0x73, 0x28, 0xb1, 0xed, 0x4f, 0x24, 0x0f, 0xc7, 0x46, - 0x48, 0xea, 0x03, 0x3f, 0x08, 0x45, 0xf8, 0x2b, 0xdf, 0xfe, 0xd2, 0x40, 0x3c, 0x5c, 0x3f, 0x8d, - 0x84, 0x3f, 0x8a, 0x31, 0xc9, 0x9e, 0xf6, 0x1c, 0x42, 0xc2, 0x5f, 0xc6, 0x18, 0xae, 0xaf, 0x22, - 0x91, 0x4f, 0x81, 0x32, 0x61, 0x9d, 0x42, 0x12, 0xbf, 0x13, 0x3a, 0x5c, 0x1f, 0x59, 0xf0, 0xb8, - 0x4f, 0x4c, 0xaf, 0xd7, 0x23, 0xae, 0xc5, 0x53, 0x6d, 0x1a, 0x7e, 0xd7, 0x76, 0xaf, 0xf9, 0x06, - 0xab, 0x28, 0xde, 0x1b, 0xbd, 0x72, 0x74, 0x58, 0x7b, 0x1c, 0x1f, 0x53, 0x0f, 0x1f, 0x8b, 0x05, - 0xf5, 0xe0, 0xdc, 0x80, 0xa5, 0x03, 0xf2, 0x5b, 0x6e, 0x48, 0xfc, 0x3d, 0xc3, 0x29, 0xf8, 0xd4, - 0x0b, 0x13, 0x16, 0x9b, 0x49, 0x54, 0x38, 0x8d, 0x1b, 0x1d, 0x50, 0x39, 0x2c, 0xba, 0xa3, 0x90, - 0xac, 0x14, 0x4f, 0x29, 0x88, 0x87, 0xd1, 0xe1, 0x2c, 0x1a, 0xfa, 0xaf, 0x6a, 0x20, 0x4e, 0xcb, - 0xa8, 0x55, 0xaf, 0xb8, 0x26, 0x2a, 0xef, 0xfc, 0x43, 0xe3, 0xff, 0x4e, 0x03, 0x81, 0x81, 0x25, - 0x72, 0x1b, 0x29, 0x0d, 0xd8, 0x83, 0xdf, 0x81, 0x8e, 0x13, 0x91, 0x4d, 0xe4, 0x25, 0x22, 0x3b, - 0xad, 0xac, 0x5e, 0xbf, 0xa3, 0x41, 0xfa, 0x7d, 0x45, 0xf4, 0x24, 0x4c, 0x8b, 0x4b, 0x5b, 0xe2, - 0xea, 0x07, 0x8f, 0x4d, 0xe4, 0x45, 0x38, 0x82, 0x25, 0x35, 0xf7, 0x31, 0xee, 0x78, 0x64, 0xc7, - 0xdb, 0x1f, 0xaf, 0xb9, 0xeb, 0xdf, 0x9f, 0x87, 0x29, 0x7e, 0xcd, 0x88, 0xca, 0xb4, 0x8c, 0x50, - 0xa6, 0x9b, 0xc5, 0x2f, 0x32, 0x15, 0x88, 0x58, 0x4a, 0xe4, 0x9c, 0x29, 0x1d, 0x9b, 0x73, 0x06, - 0xf3, 0x24, 0x83, 0x63, 0x78, 0x6b, 0x1a, 0xb8, 0x25, 0xf2, 0xda, 0x8b, 0x04, 0x83, 0x28, 0x4c, - 0xb8, 0x31, 0x26, 0x8b, 0xa7, 0x4f, 0xe4, 0x03, 0xa0, 0x38, 0x33, 0xe6, 0x8f, 0x71, 0x64, 0xc4, - 0xf7, 0x3a, 0xca, 0xc5, 0x4f, 0x0d, 0xc4, 0x90, 0x8f, 0x70, 0xaf, 0x43, 0x2e, 0xa4, 0xa9, 0xdc, - 0x85, 0xb4, 0x0d, 0xd3, 0x62, 0x29, 0x08, 0xe1, 0xf8, 0xe2, 0x18, 0x09, 0x04, 0x95, 0x5b, 0xc0, - 0xbc, 0x00, 0x47, 0xc8, 0xe9, 0x8e, 0xdb, 0x33, 0xf6, 0xed, 0xde, 0xa0, 0xc7, 0x24, 0x62, 0x59, - 0xad, 0xca, 0x8a, 0x71, 0x04, 0x67, 0x55, 0xf9, 0x61, 0x0b, 0x53, 0x2c, 0xd5, 0xaa, 0xe2, 0x5d, - 0x96, 0x08, 0x8e, 0xde, 0x80, 0x4a, 0xcf, 0xd8, 0xef, 0x0c, 0xfc, 0x2e, 0x11, 0x0e, 0x8c, 0x7c, - 0x95, 0x67, 0x10, 0xda, 0xce, 0x0a, 0x35, 0x87, 0x42, 0x7f, 0xa5, 0xe5, 0x86, 0xb7, 0xfd, 0x4e, - 0xe8, 0xcb, 0xc4, 0x66, 0xeb, 0x02, 0x0b, 0x96, 0xf8, 0x90, 0x03, 0xf3, 0x3d, 0x63, 0x7f, 0xd3, - 0x35, 0xe4, 0xf3, 0x11, 0xd5, 0x82, 0x14, 0x98, 0x17, 0x77, 0x3d, 0x81, 0x0b, 0xa7, 0x70, 0x67, - 0x38, 0x8c, 0x67, 0x4f, 0xcb, 0x61, 0xbc, 0x2a, 0x63, 0x42, 0xb8, 0x1e, 0xfb, 0x68, 0xd6, 0xb1, - 0xcc, 0xf1, 0xf1, 0x1e, 0x6f, 0xca, 0x78, 0x8f, 0xf9, 0xe2, 0x5e, 0xde, 0x63, 0x62, 0x3d, 0x06, - 0x50, 0xa5, 0x0a, 0x27, 0x2f, 0x0d, 0x96, 0xce, 0x15, 0xf7, 0x32, 0x34, 0x25, 0x1a, 0x25, 0xb9, - 0x73, 0x8c, 0x1a, 0xab, 0x74, 0xd0, 0x6d, 0xfe, 0xbc, 0x80, 0x43, 0xc2, 0xb8, 0x0a, 0x33, 0x70, - 0x16, 0xb8, 0x23, 0x29, 0x7a, 0x0d, 0x60, 0xa8, 0x02, 0xce, 0x6e, 0x47, 0x55, 0x54, 0x1e, 0x8c, - 0xbe, 0x18, 0x27, 0x1f, 0x48, 0x5c, 0xf4, 0xfa, 0x6b, 0x1a, 0x2c, 0xf0, 0x97, 0xab, 0x1a, 0x5e, - 0xaf, 0xef, 0xb9, 0x84, 0x4e, 0x0b, 0x62, 0x63, 0xfa, 0x99, 0xe2, 0xb2, 0xa1, 0x93, 0xc2, 0x28, - 0xce, 0xd3, 0x52, 0xa5, 0x78, 0x88, 0x32, 0xfa, 0x5d, 0x0d, 0x96, 0x7a, 0x39, 0xb9, 0x93, 0x97, - 0xce, 0x17, 0x0f, 0x6c, 0x7b, 0x50, 0x3e, 0x66, 0xfe, 0x9a, 0xde, 0x83, 0x6a, 0xe1, 0xdc, 0xbe, - 0x8d, 0x1b, 0xfe, 0x3a, 0xce, 0x05, 0xb8, 0x9f, 0x81, 0x85, 0xf4, 0x1e, 0xa0, 0x3e, 0x88, 0xa0, - 0x9d, 0xea, 0x83, 0x08, 0xfa, 0x4b, 0x70, 0x29, 0x7b, 0xce, 0xa9, 0xa6, 0xc5, 0x5e, 0x16, 0x11, - 0x16, 0x4e, 0x9c, 0x9b, 0x8f, 0x16, 0x62, 0x0e, 0xab, 0x7f, 0xf4, 0x3b, 0x3f, 0xba, 0xfc, 0xbe, - 0xef, 0xfd, 0xe8, 0xf2, 0xfb, 0x7e, 0xf0, 0xa3, 0xcb, 0xef, 0xfb, 0xd2, 0xd1, 0x65, 0xed, 0x3b, - 0x47, 0x97, 0xb5, 0xef, 0x1d, 0x5d, 0xd6, 0x7e, 0x70, 0x74, 0x59, 0xfb, 0xcf, 0x47, 0x97, 0xb5, - 0x5f, 0xfa, 0x2f, 0x97, 0xdf, 0xf7, 0xc6, 0xb4, 0xe8, 0xd1, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, - 0x3d, 0x58, 0xd3, 0xcc, 0xdf, 0xb2, 0x00, 0x00, + 0xf3, 0x81, 0x18, 0x36, 0x02, 0x2b, 0x42, 0x12, 0x08, 0x06, 0x84, 0x28, 0x89, 0x4d, 0x45, 0x0c, + 0xa0, 0x24, 0x48, 0x7e, 0x24, 0x30, 0xf2, 0x67, 0xe1, 0x20, 0x46, 0x7d, 0x74, 0x75, 0x75, 0x4f, + 0x37, 0x77, 0xd8, 0xb3, 0xe4, 0xdd, 0xfd, 0x22, 0xa7, 0xde, 0xab, 0xf7, 0xaa, 0xeb, 0xe3, 0xd5, + 0x7b, 0xaf, 0x5e, 0xbd, 0x82, 0x7a, 0xd7, 0x0e, 0x77, 0x06, 0x5b, 0x2b, 0xa6, 0xd7, 0xbb, 0xda, + 0x35, 0x7c, 0x8b, 0xb8, 0xc4, 0x8f, 0xff, 0xe9, 0xef, 0x76, 0xaf, 0x1a, 0x7d, 0x3b, 0xb8, 0x6a, + 0x7a, 0x3e, 0xb9, 0xba, 0xf7, 0xcc, 0x16, 0x09, 0x8d, 0x67, 0xae, 0x76, 0x29, 0xcc, 0x08, 0x89, + 0xb5, 0xd2, 0xf7, 0xbd, 0xd0, 0x43, 0xcf, 0xc6, 0x34, 0x56, 0xa2, 0xaa, 0xf1, 0x3f, 0xfd, 0xdd, + 0xee, 0x0a, 0xa5, 0xb1, 0x42, 0x69, 0xac, 0x08, 0x1a, 0xcb, 0x1f, 0x55, 0xf9, 0x7a, 0x5d, 0xef, + 0x2a, 0x23, 0xb5, 0x35, 0xd8, 0x66, 0xbf, 0xd8, 0x0f, 0xf6, 0x1f, 0x67, 0xb1, 0xfc, 0xf4, 0xee, + 0x27, 0x83, 0x15, 0xdb, 0xa3, 0x8d, 0xb9, 0x6a, 0x0c, 0x42, 0x2f, 0x30, 0x0d, 0xc7, 0x76, 0xbb, + 0x57, 0xf7, 0x86, 0x5a, 0xb3, 0xac, 0x2b, 0xa8, 0xa2, 0xd9, 0xc7, 0xe2, 0xf8, 0x5b, 0x86, 0x99, + 0x85, 0xf3, 0xf1, 0x18, 0xa7, 0x67, 0x98, 0x3b, 0xb6, 0x4b, 0xfc, 0x83, 0xa8, 0x43, 0xae, 0xfa, + 0x24, 0xf0, 0x06, 0xbe, 0x49, 0x4e, 0x54, 0x2b, 0xb8, 0xda, 0x23, 0xa1, 0x91, 0xc5, 0xeb, 0x6a, + 0x5e, 0x2d, 0x7f, 0xe0, 0x86, 0x76, 0x6f, 0x98, 0xcd, 0x8f, 0x3f, 0xa8, 0x42, 0x60, 0xee, 0x90, + 0x9e, 0x31, 0x54, 0xef, 0x63, 0x79, 0xf5, 0x06, 0xa1, 0xed, 0x5c, 0xb5, 0xdd, 0x30, 0x08, 0xfd, + 0x74, 0x25, 0xfd, 0x59, 0x28, 0xaf, 0x5a, 0x96, 0xe7, 0xa2, 0xa7, 0x61, 0x9a, 0xb8, 0xc6, 0x96, + 0x43, 0xac, 0x25, 0xed, 0x8a, 0xf6, 0x54, 0xa5, 0x7e, 0xee, 0xdb, 0x87, 0xb5, 0xf7, 0x1d, 0x1d, + 0xd6, 0xa6, 0xd7, 0x78, 0x31, 0x8e, 0xe0, 0xfa, 0x2f, 0x97, 0x60, 0x8a, 0x55, 0x0a, 0xd0, 0x2f, + 0x69, 0x70, 0x7e, 0x77, 0xb0, 0x45, 0x7c, 0x97, 0x84, 0x24, 0x68, 0x1a, 0xc1, 0xce, 0x96, 0x67, + 0xf8, 0x9c, 0x44, 0xf5, 0xd9, 0xeb, 0x2b, 0x27, 0x9f, 0x3d, 0x2b, 0x37, 0x87, 0xc9, 0xd5, 0x1f, + 0x39, 0x3a, 0xac, 0x9d, 0xcf, 0x00, 0xe0, 0x2c, 0xe6, 0x68, 0x0f, 0x66, 0xdd, 0xae, 0xed, 0xee, + 0xb7, 0xdc, 0xae, 0x4f, 0x82, 0x60, 0xa9, 0xc4, 0x1a, 0xf3, 0x4a, 0x91, 0xc6, 0x6c, 0x28, 0x74, + 0xea, 0x0b, 0x47, 0x87, 0xb5, 0x59, 0xb5, 0x04, 0x27, 0xf8, 0xe8, 0x3f, 0xab, 0xc1, 0xb9, 0x55, + 0xab, 0x67, 0x07, 0x81, 0xed, 0xb9, 0x6d, 0x67, 0xd0, 0xb5, 0x5d, 0x74, 0x05, 0x26, 0x5d, 0xa3, + 0x47, 0x58, 0x87, 0xcc, 0xd4, 0x67, 0x45, 0x9f, 0x4e, 0x6e, 0x18, 0x3d, 0x82, 0x19, 0x04, 0xbd, + 0x0a, 0x53, 0xa6, 0xe7, 0x6e, 0xdb, 0x5d, 0xd1, 0xce, 0x8f, 0xae, 0xf0, 0x71, 0x5c, 0x51, 0xc7, + 0x91, 0x35, 0x4f, 0x8c, 0xff, 0x0a, 0x36, 0xee, 0xae, 0xed, 0x87, 0xc4, 0xa5, 0x6c, 0xea, 0x70, + 0x74, 0x58, 0x9b, 0x6a, 0x30, 0x02, 0x58, 0x10, 0xd2, 0xaf, 0x41, 0x65, 0xd5, 0x21, 0x7e, 0x68, + 0xbb, 0x5d, 0xf4, 0x02, 0xcc, 0x93, 0x9e, 0x61, 0x3b, 0x98, 0x98, 0xc4, 0xde, 0x23, 0x7e, 0xb0, + 0xa4, 0x5d, 0x99, 0x78, 0x6a, 0xa6, 0x8e, 0x8e, 0x0e, 0x6b, 0xf3, 0x6b, 0x09, 0x08, 0x4e, 0x61, + 0xea, 0x3f, 0xad, 0x41, 0x75, 0x75, 0x60, 0xd9, 0x21, 0xa7, 0x8f, 0x7c, 0xa8, 0x1a, 0xf4, 0x67, + 0xdb, 0x73, 0x6c, 0xf3, 0x40, 0x0c, 0xf2, 0xcb, 0x45, 0xfa, 0x75, 0x35, 0x26, 0x53, 0x3f, 0x77, + 0x74, 0x58, 0xab, 0x2a, 0x05, 0x58, 0x65, 0xa2, 0xef, 0x80, 0x0a, 0x43, 0x9f, 0x83, 0x59, 0xfe, + 0x91, 0xeb, 0x46, 0x1f, 0x93, 0x6d, 0xd1, 0x86, 0x0f, 0x28, 0x7d, 0x16, 0x31, 0x5a, 0xb9, 0xbd, + 0xf5, 0x16, 0x31, 0x43, 0x4c, 0xb6, 0x89, 0x4f, 0x5c, 0x93, 0xf0, 0xe1, 0x6b, 0x28, 0x95, 0x71, + 0x82, 0x94, 0xfe, 0x03, 0x0d, 0x16, 0x56, 0xf7, 0x0c, 0xdb, 0x31, 0xb6, 0x6c, 0xc7, 0x0e, 0x0f, + 0xde, 0xf0, 0x5c, 0x32, 0xc2, 0xf8, 0x6d, 0xc2, 0x23, 0x03, 0xd7, 0xe0, 0xf5, 0x1c, 0xb2, 0xce, + 0x47, 0xec, 0xce, 0x41, 0x9f, 0xd0, 0x89, 0x47, 0x7b, 0xfa, 0xb1, 0xa3, 0xc3, 0xda, 0x23, 0x9b, + 0xd9, 0x28, 0x38, 0xaf, 0x2e, 0xc2, 0x70, 0x49, 0x01, 0xbd, 0xe6, 0x39, 0x83, 0x9e, 0xa0, 0x3a, + 0xc1, 0xa8, 0x2e, 0x1f, 0x1d, 0xd6, 0x2e, 0x6d, 0x66, 0x62, 0xe0, 0x9c, 0x9a, 0xfa, 0xb7, 0x4b, + 0x30, 0x5b, 0x37, 0xcc, 0xdd, 0x41, 0xbf, 0x3e, 0x30, 0x77, 0x49, 0x88, 0x3e, 0x0f, 0x15, 0x2a, + 0xb6, 0x2c, 0x23, 0x34, 0x44, 0x4f, 0xfe, 0x58, 0xee, 0xec, 0x63, 0x83, 0x48, 0xb1, 0xe3, 0xbe, + 0x5d, 0x27, 0xa1, 0x51, 0x47, 0xa2, 0x4f, 0x20, 0x2e, 0xc3, 0x92, 0x2a, 0xda, 0x86, 0xc9, 0xa0, + 0x4f, 0x4c, 0x31, 0xb7, 0x9b, 0x45, 0xe6, 0x8a, 0xda, 0xe2, 0x4e, 0x9f, 0x98, 0xf1, 0x28, 0xd0, + 0x5f, 0x98, 0xd1, 0x47, 0x2e, 0x4c, 0x05, 0xa1, 0x11, 0x0e, 0x68, 0xf7, 0x50, 0x4e, 0xd7, 0xc6, + 0xe6, 0xc4, 0xa8, 0xd5, 0xe7, 0x05, 0xaf, 0x29, 0xfe, 0x1b, 0x0b, 0x2e, 0xfa, 0x7f, 0xd0, 0x60, + 0x41, 0x45, 0xbf, 0x65, 0x07, 0x21, 0xfa, 0xc9, 0xa1, 0xee, 0x5c, 0x19, 0xad, 0x3b, 0x69, 0x6d, + 0xd6, 0x99, 0x0b, 0x82, 0x5d, 0x25, 0x2a, 0x51, 0xba, 0x92, 0x40, 0xd9, 0x0e, 0x49, 0x8f, 0x4f, + 0xab, 0x82, 0xf2, 0x4c, 0x6d, 0x72, 0x7d, 0x4e, 0x30, 0x2b, 0xb7, 0x28, 0x59, 0xcc, 0xa9, 0xeb, + 0x9f, 0x87, 0x0b, 0x2a, 0x56, 0xdb, 0xf7, 0xf6, 0x6c, 0x8b, 0xf8, 0x74, 0x25, 0x84, 0x07, 0xfd, + 0xa1, 0x95, 0x40, 0x67, 0x16, 0x66, 0x10, 0xf4, 0x21, 0x98, 0xf2, 0x49, 0xd7, 0xf6, 0x5c, 0x36, + 0xda, 0x33, 0x71, 0xdf, 0x61, 0x56, 0x8a, 0x05, 0x54, 0xff, 0xbf, 0xa5, 0x64, 0xdf, 0xd1, 0x61, + 0x44, 0x7b, 0x50, 0xe9, 0x0b, 0x56, 0xa2, 0xef, 0x6e, 0x8c, 0xfb, 0x81, 0x51, 0xd3, 0xe3, 0x5e, + 0x8d, 0x4a, 0xb0, 0xe4, 0x85, 0x6c, 0x98, 0x8f, 0xfe, 0x6f, 0x8c, 0x21, 0x86, 0x99, 0x38, 0x6d, + 0x27, 0x08, 0xe1, 0x14, 0x61, 0x74, 0x07, 0x66, 0x02, 0x62, 0xfa, 0x84, 0xca, 0x24, 0x31, 0x4d, + 0x33, 0x05, 0x57, 0x27, 0x42, 0x12, 0x82, 0x6b, 0x51, 0x34, 0x7f, 0x46, 0x02, 0x70, 0x4c, 0x08, + 0x3d, 0x05, 0x95, 0x80, 0x10, 0x8b, 0x4a, 0xa4, 0xa5, 0x49, 0x3e, 0x36, 0xf4, 0x53, 0x3b, 0xa2, + 0x0c, 0x4b, 0xa8, 0xfe, 0x8d, 0x49, 0x40, 0xc3, 0x53, 0x5c, 0xed, 0x01, 0x5e, 0x22, 0xfa, 0x7f, + 0x9c, 0x1e, 0x10, 0xab, 0x25, 0x45, 0x18, 0xdd, 0x83, 0x39, 0xc7, 0x08, 0xc2, 0xdb, 0x7d, 0xaa, + 0x83, 0x44, 0x13, 0xa5, 0xfa, 0xec, 0x6a, 0x91, 0x91, 0xbe, 0xa5, 0x12, 0xaa, 0x2f, 0x1e, 0x1d, + 0xd6, 0xe6, 0x12, 0x45, 0x38, 0xc9, 0x0a, 0xbd, 0x05, 0x33, 0xb4, 0x60, 0xcd, 0xf7, 0x3d, 0x5f, + 0xf4, 0xfe, 0x4b, 0x45, 0xf9, 0x32, 0x22, 0xf5, 0x39, 0x3a, 0x26, 0xf2, 0x27, 0x8e, 0xc9, 0xa3, + 0xcf, 0x00, 0xf2, 0xb6, 0x02, 0xe2, 0xef, 0x11, 0xeb, 0x3a, 0x57, 0xb8, 0xe8, 0xc7, 0xd2, 0xd1, + 0x99, 0xa8, 0x2f, 0x8b, 0xd1, 0x44, 0xb7, 0x87, 0x30, 0x70, 0x46, 0x2d, 0xb4, 0x0b, 0x48, 0x2a, + 0x6d, 0x72, 0x02, 0x2c, 0x95, 0x47, 0x9f, 0x3e, 0x97, 0x28, 0xb3, 0xeb, 0x43, 0x24, 0x70, 0x06, + 0x59, 0xfd, 0x5f, 0x97, 0xa0, 0xca, 0xa7, 0xc8, 0x9a, 0x1b, 0xfa, 0x07, 0x67, 0xb0, 0x41, 0x90, + 0xc4, 0x06, 0xd1, 0x28, 0xbe, 0xe6, 0x59, 0x83, 0x73, 0xf7, 0x87, 0x5e, 0x6a, 0x7f, 0x58, 0x1b, + 0x97, 0xd1, 0xf1, 0xdb, 0xc3, 0xf7, 0x34, 0x38, 0xa7, 0x60, 0x9f, 0xc1, 0xee, 0x60, 0x25, 0x77, + 0x87, 0x97, 0xc7, 0xfc, 0xbe, 0x9c, 0xcd, 0xc1, 0x4b, 0x7c, 0x16, 0x13, 0xdc, 0xcf, 0x02, 0x6c, + 0x31, 0x71, 0xb2, 0x11, 0xeb, 0x49, 0x72, 0xc8, 0xeb, 0x12, 0x82, 0x15, 0xac, 0x84, 0xcc, 0x2a, + 0x1d, 0x2b, 0xb3, 0xfe, 0x4f, 0x09, 0x16, 0x87, 0xba, 0x7d, 0x58, 0x8e, 0x68, 0xef, 0x90, 0x1c, + 0x29, 0xbd, 0x13, 0x72, 0x64, 0xa2, 0x90, 0x1c, 0x19, 0x7d, 0x9f, 0xf8, 0x7d, 0x0d, 0x26, 0x1a, + 0xb8, 0x85, 0x3e, 0x9c, 0xd0, 0x7d, 0x1f, 0x51, 0x75, 0xdf, 0xfb, 0x87, 0xb5, 0xe9, 0x06, 0x6e, + 0x29, 0x6a, 0xf0, 0x5f, 0xd7, 0x60, 0xd1, 0xf4, 0xdc, 0xd0, 0xa0, 0x93, 0x18, 0xf3, 0x0d, 0x22, + 0x9a, 0x8c, 0x85, 0xd4, 0xbe, 0x46, 0x8a, 0x58, 0xfd, 0x51, 0xd1, 0x80, 0xc5, 0x34, 0x24, 0xc0, + 0xc3, 0x9c, 0xf5, 0x4d, 0x98, 0x69, 0x38, 0xde, 0xc0, 0x6a, 0xb9, 0xdb, 0xde, 0x43, 0xd4, 0x5d, + 0xbe, 0xaf, 0xc1, 0x2c, 0xa3, 0xdb, 0xf6, 0xbd, 0x6d, 0xdb, 0x21, 0xef, 0x0d, 0x15, 0x5a, 0x6d, + 0x71, 0x9e, 0x88, 0x64, 0x2a, 0xad, 0x8a, 0xf8, 0x1e, 0x51, 0x69, 0xd5, 0x26, 0xe7, 0x48, 0xad, + 0x5f, 0x9e, 0x4e, 0x7e, 0x19, 0x93, 0x5b, 0x4f, 0x41, 0xc5, 0x34, 0xea, 0x03, 0xd7, 0x72, 0xe4, + 0xbc, 0xa0, 0xad, 0x6c, 0xac, 0xf2, 0x32, 0x2c, 0xa1, 0xe8, 0x1e, 0x40, 0xec, 0x66, 0x10, 0xc3, + 0x70, 0x6d, 0x3c, 0xd7, 0x46, 0x87, 0x84, 0xd4, 0x3a, 0x0f, 0xe2, 0xa1, 0x8f, 0x61, 0x58, 0xe1, + 0x86, 0xfe, 0x32, 0xcc, 0x89, 0x4e, 0x6e, 0xf5, 0x8c, 0xae, 0xb0, 0xfe, 0x0a, 0xf6, 0xd4, 0xba, + 0x42, 0xa8, 0x7e, 0x51, 0x30, 0x9e, 0x53, 0x4b, 0x03, 0x9c, 0xe4, 0x86, 0x0e, 0x60, 0xb6, 0xa7, + 0x5a, 0xb4, 0x93, 0xc5, 0x37, 0x17, 0xc5, 0xba, 0xad, 0x5f, 0x10, 0xcc, 0x67, 0x13, 0xb6, 0x70, + 0x82, 0x55, 0x86, 0x62, 0x5e, 0x3e, 0x2d, 0xc5, 0x9c, 0xc0, 0x34, 0x5f, 0xde, 0xc1, 0xd2, 0x14, + 0xfb, 0xc0, 0x17, 0x8a, 0x7c, 0x20, 0x97, 0x14, 0xb1, 0xdf, 0x8c, 0xff, 0x0e, 0x70, 0x44, 0x1b, + 0xed, 0xc1, 0x2c, 0x95, 0xb1, 0x1d, 0xe2, 0x10, 0x33, 0xf4, 0xfc, 0xa5, 0xe9, 0xe2, 0x7e, 0xa9, + 0x8e, 0x42, 0x87, 0x3b, 0x36, 0xd4, 0x12, 0x9c, 0xe0, 0x23, 0xa5, 0x5f, 0x25, 0x57, 0xfa, 0x0d, + 0xa0, 0xba, 0xa7, 0x78, 0x18, 0x66, 0x58, 0x27, 0x7c, 0xba, 0x48, 0xc3, 0x62, 0x77, 0x43, 0xfd, + 0xbc, 0x60, 0x54, 0x55, 0x5d, 0x13, 0x2a, 0x1f, 0xfd, 0x5f, 0x4d, 0xc3, 0x62, 0xc3, 0x19, 0x04, + 0x21, 0xf1, 0x57, 0x85, 0xe3, 0x97, 0xf8, 0xe8, 0xcb, 0x1a, 0x5c, 0x62, 0xff, 0x36, 0xbd, 0xbb, + 0x6e, 0x93, 0x38, 0xc6, 0xc1, 0xea, 0x36, 0xc5, 0xb0, 0xac, 0x93, 0x49, 0xa0, 0xe6, 0x40, 0xec, + 0xe9, 0xcc, 0x55, 0xd2, 0xc9, 0xa4, 0x88, 0x73, 0x38, 0xa1, 0x5f, 0xd0, 0xe0, 0xd1, 0x0c, 0x50, + 0x93, 0x38, 0x24, 0x24, 0x42, 0x06, 0x9c, 0xb4, 0x1d, 0x4f, 0x1c, 0x1d, 0xd6, 0x1e, 0xed, 0xe4, + 0x11, 0xc5, 0xf9, 0xfc, 0xd0, 0xdf, 0xd0, 0x60, 0x39, 0x03, 0x7a, 0xcd, 0xb0, 0x9d, 0x81, 0x4f, + 0x84, 0x4a, 0x7b, 0xd2, 0xe6, 0x5c, 0x3e, 0x3a, 0xac, 0x2d, 0x77, 0x72, 0xa9, 0xe2, 0x63, 0x38, + 0xa2, 0x2f, 0xc2, 0x45, 0x09, 0xdd, 0x74, 0x5d, 0x42, 0x2c, 0x62, 0xdd, 0xb1, 0x85, 0x66, 0x71, + 0xf2, 0xa6, 0x3c, 0x7a, 0x74, 0x58, 0xbb, 0xd8, 0xc9, 0x22, 0x88, 0xb3, 0xf9, 0xa0, 0x2e, 0x3c, + 0x11, 0x03, 0x42, 0xdb, 0xb1, 0xef, 0x31, 0x4a, 0x77, 0x76, 0x7c, 0x12, 0xec, 0x78, 0x8e, 0xc5, + 0x84, 0x85, 0x56, 0x7f, 0xff, 0xd1, 0x61, 0xed, 0x89, 0xce, 0x71, 0x88, 0xf8, 0x78, 0x3a, 0xc8, + 0x82, 0xd9, 0xc0, 0x34, 0xdc, 0x96, 0x1b, 0x12, 0x7f, 0xcf, 0x70, 0x96, 0xa6, 0x0a, 0x7d, 0x20, + 0x5f, 0xa2, 0x0a, 0x1d, 0x9c, 0xa0, 0x8a, 0x3e, 0x09, 0x15, 0xb2, 0xdf, 0x37, 0x5c, 0x8b, 0x70, + 0xb1, 0x30, 0x53, 0x7f, 0x9c, 0x6e, 0x46, 0x6b, 0xa2, 0xec, 0xfe, 0x61, 0x6d, 0x36, 0xfa, 0x7f, + 0xdd, 0xb3, 0x08, 0x96, 0xd8, 0xe8, 0xa7, 0xe0, 0x42, 0xcf, 0xd8, 0xdf, 0xf0, 0x2c, 0xc2, 0x84, + 0x1c, 0x95, 0x79, 0x6c, 0x20, 0x2a, 0x85, 0xda, 0xb9, 0x74, 0x74, 0x58, 0xbb, 0xb0, 0x9e, 0x41, + 0x0f, 0x67, 0x72, 0xd1, 0xff, 0x87, 0x06, 0x55, 0xb1, 0x82, 0x99, 0xa2, 0xb5, 0x05, 0x65, 0x93, + 0x6e, 0xb4, 0x62, 0xa5, 0xbe, 0x54, 0x78, 0x43, 0xa7, 0xd4, 0xe2, 0xdd, 0x9c, 0x15, 0x61, 0x4e, + 0x1a, 0xed, 0x65, 0x6c, 0xc7, 0xf5, 0xf1, 0xb6, 0x63, 0xc6, 0xed, 0x01, 0x5b, 0xb1, 0x7e, 0x38, + 0x01, 0x33, 0x0d, 0xcf, 0xb5, 0x6c, 0xa6, 0x4e, 0x3f, 0x93, 0x50, 0x29, 0x9f, 0x50, 0x85, 0xea, + 0xfd, 0xc3, 0xda, 0x9c, 0x44, 0x54, 0xa4, 0xec, 0xf3, 0xd2, 0x06, 0xe5, 0x3a, 0xe6, 0xfb, 0x93, + 0xc6, 0xe3, 0xfd, 0xc3, 0xda, 0x39, 0x59, 0x2d, 0x69, 0x4f, 0xa2, 0x3d, 0x40, 0xd4, 0x2a, 0xb8, + 0xe3, 0x1b, 0x6e, 0xc0, 0xc9, 0xd2, 0x31, 0xe6, 0xeb, 0xfe, 0x2f, 0x8c, 0x36, 0xc6, 0xb4, 0x46, + 0x6c, 0x34, 0xdc, 0x1a, 0xa2, 0x86, 0x33, 0x38, 0xa0, 0xb7, 0x60, 0x9e, 0x96, 0x6e, 0xf6, 0x2d, + 0x23, 0x24, 0xca, 0x02, 0x3f, 0x09, 0xcf, 0x4b, 0x82, 0xe7, 0xfc, 0xad, 0x04, 0x25, 0x9c, 0xa2, + 0xcc, 0x55, 0x70, 0x23, 0xf0, 0x5c, 0xb6, 0x76, 0x13, 0x2a, 0x38, 0x2d, 0xc5, 0x02, 0x8a, 0x9e, + 0x86, 0xe9, 0x1e, 0x09, 0x02, 0xa3, 0x4b, 0xd8, 0x62, 0x9c, 0x89, 0x77, 0xdc, 0x75, 0x5e, 0x8c, + 0x23, 0x38, 0xfa, 0x08, 0x94, 0x4d, 0xcf, 0x22, 0xc1, 0xd2, 0x34, 0xf3, 0x99, 0x5f, 0x62, 0x73, + 0x89, 0x16, 0xdc, 0x3f, 0xac, 0xcd, 0x30, 0x13, 0x8b, 0xfe, 0xc2, 0x1c, 0x49, 0xff, 0x35, 0xaa, + 0x00, 0xa7, 0x0c, 0x89, 0x11, 0x4c, 0x87, 0xb3, 0xf3, 0x20, 0xea, 0x3f, 0x5f, 0x82, 0x0b, 0xb4, + 0x85, 0xbe, 0xe7, 0x38, 0x74, 0x73, 0xe8, 0x3b, 0xde, 0x41, 0x8f, 0xb8, 0x67, 0xe1, 0xc8, 0x8f, + 0xfa, 0xa1, 0x94, 0xdb, 0x0f, 0xbd, 0xa1, 0x7e, 0x98, 0x28, 0xd2, 0x0f, 0x72, 0xba, 0x3c, 0xa0, + 0x2f, 0xfe, 0x9b, 0x06, 0x4b, 0x59, 0x7d, 0x71, 0x06, 0x66, 0x4b, 0x2f, 0x69, 0xb6, 0xdc, 0x28, + 0x6a, 0xde, 0xa6, 0x9b, 0x9e, 0x63, 0xbe, 0xfc, 0xa8, 0x04, 0x97, 0x62, 0xf4, 0x96, 0x1b, 0x84, + 0x86, 0xe3, 0x70, 0xa3, 0xfe, 0xf4, 0xc7, 0xbd, 0x9f, 0xb0, 0x3e, 0x37, 0xc6, 0xfb, 0x54, 0xb5, + 0xed, 0xb9, 0xae, 0xba, 0xfd, 0x94, 0xab, 0xae, 0xfd, 0x10, 0x79, 0x1e, 0xef, 0xb5, 0xfb, 0x9f, + 0x1a, 0x2c, 0x67, 0x57, 0x3c, 0x83, 0x49, 0xe5, 0x25, 0x27, 0xd5, 0x67, 0x1e, 0xde, 0x57, 0xe7, + 0x4c, 0xab, 0x7f, 0x5c, 0xca, 0xfb, 0x5a, 0x66, 0x1f, 0x6f, 0xc3, 0x39, 0x6a, 0xb8, 0x04, 0xa1, + 0xf0, 0x29, 0x9d, 0xec, 0xb0, 0x35, 0xf2, 0x16, 0x9d, 0xc3, 0x49, 0x1a, 0x38, 0x4d, 0x14, 0x6d, + 0xc0, 0x34, 0xb5, 0x56, 0x28, 0xfd, 0xd2, 0xe8, 0xf4, 0xa5, 0xcc, 0xef, 0xf0, 0xba, 0x38, 0x22, + 0x82, 0x7e, 0x12, 0xe6, 0x2c, 0xb9, 0xa2, 0x1e, 0x70, 0xd2, 0x92, 0xa6, 0xca, 0xbc, 0x7f, 0x4d, + 0xb5, 0x36, 0x4e, 0x12, 0xd3, 0xff, 0x4c, 0x83, 0xc7, 0x8f, 0x9b, 0x5b, 0xe8, 0x6d, 0x00, 0x33, + 0xda, 0xc4, 0xf9, 0x59, 0x7b, 0x51, 0x35, 0x28, 0xa2, 0x12, 0x2f, 0x50, 0x59, 0x14, 0x60, 0x85, + 0x49, 0xc6, 0x01, 0x4e, 0xe9, 0x94, 0x0e, 0x70, 0xf4, 0xff, 0xa5, 0xa9, 0xa2, 0x48, 0x1d, 0xdb, + 0xf7, 0x9a, 0x28, 0x52, 0xdb, 0x9e, 0xeb, 0x12, 0xfb, 0xe3, 0x09, 0xb8, 0x92, 0x5d, 0x45, 0xd9, + 0x7b, 0x1f, 0x4f, 0x68, 0x08, 0x95, 0x77, 0x4c, 0x3b, 0x40, 0xaf, 0xc0, 0x54, 0x9f, 0x47, 0x66, + 0x4c, 0xb0, 0xa6, 0x3c, 0x45, 0x45, 0x1c, 0x8f, 0x9b, 0xb8, 0x7f, 0x58, 0x5b, 0xce, 0xda, 0x71, + 0x44, 0xc4, 0x85, 0xa8, 0x87, 0xec, 0x94, 0x87, 0x82, 0x2b, 0x7b, 0x1f, 0x1b, 0x51, 0xca, 0x19, + 0x5b, 0xc4, 0x19, 0xd9, 0x29, 0xf1, 0xd3, 0x1a, 0xcc, 0x27, 0x96, 0x56, 0xb0, 0x54, 0x66, 0x8b, + 0xa5, 0x90, 0x13, 0x3f, 0xb1, 0x66, 0x63, 0x15, 0x22, 0x51, 0x1c, 0xe0, 0x14, 0xc3, 0x94, 0xbc, + 0x57, 0x87, 0xf7, 0x3d, 0x27, 0xef, 0xd5, 0xc6, 0xe7, 0xc8, 0xfb, 0x5f, 0x2d, 0xe5, 0x7d, 0x2d, + 0x93, 0xf7, 0x77, 0x61, 0x26, 0x8a, 0x7c, 0x8b, 0xe4, 0xd6, 0xb5, 0x71, 0xdb, 0xc4, 0xc9, 0xc5, + 0x07, 0xd8, 0x51, 0x49, 0x80, 0x63, 0x5e, 0xe8, 0x67, 0x34, 0x80, 0x78, 0x60, 0xc4, 0xf2, 0xb8, + 0xf3, 0xf0, 0xba, 0x43, 0xd1, 0xaf, 0xe6, 0xa9, 0x6c, 0x51, 0x26, 0x85, 0xc2, 0x57, 0xff, 0xad, + 0x12, 0xa0, 0xe1, 0xb6, 0x53, 0xbd, 0x77, 0xd7, 0x76, 0xad, 0xb4, 0xfe, 0x7f, 0xd3, 0x76, 0x2d, + 0xcc, 0x20, 0x23, 0x68, 0xc6, 0x2f, 0xc1, 0xb9, 0xae, 0xe3, 0x6d, 0x19, 0x8e, 0x73, 0x20, 0x82, + 0xe9, 0xd8, 0x0a, 0xad, 0xd4, 0xcf, 0xd3, 0x1d, 0xf2, 0x7a, 0x12, 0x84, 0xd3, 0xb8, 0xa8, 0x0f, + 0x0b, 0x3e, 0x31, 0x3d, 0xd7, 0xb4, 0x1d, 0x66, 0x29, 0x79, 0x83, 0xb0, 0xa0, 0x9f, 0xe5, 0xc2, + 0xd1, 0x61, 0x6d, 0x01, 0xa7, 0x68, 0xe1, 0x21, 0xea, 0xe8, 0x49, 0x98, 0xee, 0xfb, 0x76, 0xcf, + 0xf0, 0x0f, 0x98, 0x2d, 0x56, 0xa9, 0x57, 0xe9, 0x56, 0xdb, 0xe6, 0x45, 0x38, 0x82, 0xe9, 0x5f, + 0xd7, 0x60, 0xa2, 0xb9, 0xd1, 0x41, 0x3a, 0x4c, 0x59, 0x5e, 0xcf, 0xb0, 0x5d, 0xd1, 0x4b, 0x2c, + 0x26, 0xad, 0xc9, 0x4a, 0xb0, 0x80, 0xa0, 0x3e, 0xcc, 0x44, 0xe2, 0x6a, 0xac, 0x33, 0xca, 0xe6, + 0x46, 0x47, 0xc6, 0x75, 0xc8, 0x79, 0x15, 0x95, 0x04, 0x38, 0x66, 0xa2, 0x1b, 0xb0, 0xd8, 0xdc, + 0xe8, 0xb4, 0x5c, 0xd3, 0x19, 0x58, 0x64, 0x6d, 0x9f, 0xfd, 0xa1, 0x5f, 0x66, 0xf3, 0x12, 0x11, + 0x07, 0xc7, 0xbe, 0x4c, 0x20, 0xe1, 0x08, 0x46, 0xd1, 0x08, 0xaf, 0x21, 0x82, 0xb8, 0x18, 0x9a, + 0x20, 0x82, 0x23, 0x98, 0xfe, 0xfd, 0x12, 0x54, 0x95, 0x06, 0x21, 0x07, 0xa6, 0xf9, 0xe7, 0x46, + 0x31, 0x14, 0x6b, 0x05, 0x3f, 0x31, 0xd9, 0x6a, 0xce, 0x9d, 0x77, 0x68, 0x80, 0x23, 0x16, 0xea, + 0x28, 0x95, 0xf2, 0x47, 0x09, 0xad, 0x00, 0xf0, 0x68, 0x11, 0x76, 0xf4, 0xc7, 0xb7, 0x06, 0xb6, + 0x10, 0x3a, 0xb2, 0x14, 0x2b, 0x18, 0x72, 0x3f, 0x9b, 0xcc, 0xdc, 0xcf, 0xb6, 0xa1, 0x7c, 0xcf, + 0x73, 0x49, 0x20, 0xbc, 0xf1, 0x0f, 0xe9, 0x03, 0x67, 0xa8, 0xb4, 0x7a, 0x83, 0xd2, 0xc5, 0x9c, + 0xbc, 0xfe, 0xeb, 0x1a, 0x40, 0xd3, 0x08, 0x0d, 0xee, 0x3c, 0x1e, 0x21, 0x0e, 0xef, 0xf1, 0xc4, + 0x32, 0xac, 0x0c, 0x9d, 0xef, 0x4d, 0x06, 0xf6, 0xbd, 0xe8, 0xf3, 0xa5, 0x9e, 0xc1, 0xa9, 0x77, + 0xec, 0x7b, 0x04, 0x33, 0x38, 0xfa, 0x30, 0xcc, 0x10, 0xd7, 0xf4, 0x0f, 0xfa, 0x21, 0xb1, 0x58, + 0x0f, 0x54, 0xf8, 0xf1, 0xec, 0x5a, 0x54, 0x88, 0x63, 0xb8, 0xfe, 0x0c, 0x24, 0x95, 0xc5, 0x07, + 0xb7, 0x52, 0xdf, 0x83, 0xca, 0x9a, 0x6b, 0xf5, 0x3d, 0xdb, 0x0d, 0x47, 0xf8, 0xa6, 0x27, 0x60, + 0x62, 0xe0, 0x3b, 0xe2, 0x93, 0xaa, 0x02, 0x61, 0x62, 0x13, 0xdf, 0xc2, 0xb4, 0x1c, 0x3d, 0x0d, + 0xd3, 0xfd, 0x81, 0xdf, 0xf7, 0x82, 0xe8, 0xbb, 0xa4, 0x56, 0xdc, 0xe6, 0xc5, 0x38, 0x82, 0xeb, + 0xf7, 0x35, 0x58, 0x58, 0xdb, 0xef, 0xdb, 0x3e, 0x8b, 0x09, 0x24, 0x3e, 0x55, 0x2a, 0x68, 0xfd, + 0x3d, 0xfe, 0xaf, 0x68, 0x83, 0xac, 0x2f, 0x30, 0x70, 0x04, 0x47, 0xdb, 0x30, 0x4f, 0x58, 0x75, + 0x26, 0x51, 0x0d, 0xe9, 0x03, 0x3f, 0x89, 0x23, 0x88, 0x87, 0x9c, 0x26, 0xa8, 0xe0, 0x14, 0x55, + 0xd4, 0x81, 0x79, 0xd3, 0x31, 0x82, 0xc0, 0xde, 0xb6, 0xcd, 0xf8, 0xb4, 0x7b, 0xa6, 0xfe, 0x61, + 0x5a, 0xb7, 0x91, 0x80, 0xdc, 0x3f, 0xac, 0x5d, 0x14, 0xed, 0x4c, 0x02, 0x70, 0x8a, 0x84, 0xfe, + 0xfb, 0x1a, 0xcc, 0x48, 0x55, 0xea, 0x5d, 0xe5, 0xd1, 0x41, 0x4f, 0x41, 0xc5, 0xb2, 0x03, 0x75, + 0x4f, 0x60, 0xa7, 0x90, 0x4d, 0x51, 0x86, 0x25, 0x54, 0x0f, 0xa0, 0x72, 0x5d, 0x2c, 0x2b, 0xb4, + 0x0c, 0x25, 0x3b, 0xda, 0x92, 0x40, 0x7c, 0x40, 0xa9, 0xd5, 0xc4, 0x25, 0xdb, 0x92, 0xb3, 0xaa, + 0x94, 0x3b, 0xab, 0x94, 0x61, 0x9f, 0x38, 0x7e, 0xd8, 0xf5, 0x6f, 0x69, 0x50, 0xbd, 0x61, 0x6f, + 0x11, 0xdf, 0xe5, 0x4a, 0xfe, 0x93, 0xe9, 0x28, 0xf1, 0x6a, 0x56, 0x84, 0x38, 0xda, 0x87, 0x99, + 0xc0, 0xdc, 0x21, 0xd6, 0xc0, 0x91, 0x31, 0x00, 0x85, 0x62, 0xc1, 0x15, 0xd6, 0x1d, 0x41, 0x4f, + 0x89, 0x86, 0x8b, 0x38, 0xe0, 0x98, 0x99, 0xfe, 0x05, 0x38, 0x9f, 0x51, 0x09, 0xd5, 0xa0, 0x1c, + 0x84, 0x86, 0x1f, 0x8a, 0x3e, 0x63, 0xe2, 0xa6, 0x43, 0x0b, 0x30, 0x2f, 0x47, 0x8f, 0xc2, 0x04, + 0x71, 0x2d, 0xd1, 0x69, 0xd3, 0x74, 0x95, 0xad, 0xb9, 0x16, 0xa6, 0x65, 0x74, 0x88, 0x1c, 0x2f, + 0x31, 0x19, 0xd9, 0x10, 0xdd, 0x12, 0x65, 0x58, 0x42, 0xf5, 0x7f, 0x36, 0x09, 0x4f, 0xdc, 0xf0, + 0x7c, 0xfb, 0x9e, 0xe7, 0x86, 0x86, 0xd3, 0xf6, 0xac, 0xf8, 0x54, 0x4b, 0x0c, 0xf7, 0x57, 0x34, + 0x78, 0xc4, 0xec, 0x0f, 0x5a, 0xae, 0x1d, 0xda, 0x46, 0x74, 0xd8, 0xd0, 0x26, 0xbe, 0xed, 0x15, + 0x3d, 0xdc, 0x62, 0xd1, 0xc5, 0x8d, 0xf6, 0x66, 0x16, 0x49, 0x9c, 0xc7, 0x8b, 0x9d, 0xb1, 0x59, + 0xde, 0x5d, 0x97, 0x35, 0xae, 0x13, 0xb2, 0x88, 0xe7, 0x7b, 0xf1, 0x27, 0x16, 0x3c, 0x63, 0x6b, + 0x66, 0x52, 0xc4, 0x39, 0x9c, 0xd0, 0x17, 0xe1, 0xa2, 0xcd, 0x1b, 0x87, 0x89, 0x61, 0xd9, 0x2e, + 0x09, 0x02, 0x76, 0xd2, 0x34, 0xce, 0x21, 0x52, 0x2b, 0x8b, 0x20, 0xce, 0xe6, 0x83, 0xde, 0x04, + 0x08, 0x0e, 0x5c, 0x53, 0xf4, 0x7f, 0xb9, 0x10, 0x57, 0xbe, 0x93, 0x4a, 0x2a, 0x58, 0xa1, 0x48, + 0x37, 0x93, 0xd0, 0x73, 0x88, 0x6f, 0xb8, 0x26, 0xf7, 0x55, 0x6b, 0x7c, 0x33, 0xb9, 0x13, 0x15, + 0xe2, 0x18, 0xae, 0xff, 0x43, 0x0d, 0xa6, 0xc5, 0x4d, 0x02, 0xf4, 0xa1, 0x94, 0x42, 0x25, 0x1d, + 0x56, 0x29, 0xa5, 0xea, 0x80, 0x39, 0x1b, 0x84, 0xca, 0x2a, 0x84, 0x54, 0xa1, 0x1d, 0x59, 0x30, + 0x8e, 0xf5, 0xdf, 0x84, 0xd3, 0x21, 0xd2, 0x89, 0x15, 0x66, 0xfa, 0x37, 0x34, 0x58, 0x1c, 0xaa, + 0x35, 0x82, 0xb6, 0x7c, 0x86, 0xde, 0xf2, 0xff, 0x07, 0xc0, 0x2e, 0x8d, 0xac, 0xb6, 0x5b, 0x1d, + 0xe2, 0xef, 0xc9, 0x45, 0xf8, 0x57, 0x35, 0x58, 0x88, 0xcf, 0x75, 0x44, 0x2b, 0xb4, 0xe2, 0xd1, + 0x35, 0x37, 0x53, 0xb4, 0xea, 0x4b, 0xe2, 0xbb, 0x17, 0xd2, 0x10, 0x3c, 0xc4, 0x17, 0xfd, 0xbc, + 0x06, 0x0b, 0x46, 0xf2, 0xd2, 0x48, 0x24, 0x32, 0x0b, 0x05, 0x43, 0xa6, 0x2e, 0xa0, 0xc4, 0x6d, + 0x49, 0x01, 0x02, 0x3c, 0xc4, 0x16, 0x7d, 0x1c, 0x66, 0x8d, 0xbe, 0xbd, 0x3a, 0xb0, 0x6c, 0xe2, + 0x9a, 0xf2, 0xa6, 0x01, 0xb3, 0xe4, 0x57, 0xdb, 0x2d, 0x59, 0x8e, 0x13, 0x58, 0xf2, 0x56, 0x88, + 0xe8, 0xc8, 0xc9, 0x31, 0x6f, 0x85, 0x88, 0x3e, 0x8c, 0x6f, 0x85, 0x88, 0xae, 0x53, 0x99, 0xa0, + 0x9f, 0x80, 0x47, 0xf9, 0x5e, 0x53, 0x37, 0x02, 0xdb, 0x5c, 0x1d, 0x84, 0x3b, 0xc4, 0x0d, 0x23, + 0x8d, 0x81, 0x9b, 0x2c, 0xec, 0xb4, 0x7d, 0x2d, 0x0f, 0x09, 0xe7, 0xd7, 0x47, 0x2e, 0x80, 0x67, + 0x5b, 0xa6, 0xf8, 0x1e, 0x7e, 0xe0, 0x5b, 0x28, 0x18, 0xe2, 0x76, 0xab, 0xd9, 0x10, 0x9f, 0xc3, + 0xc4, 0x44, 0xfc, 0x1b, 0x2b, 0x1c, 0xd0, 0x57, 0x35, 0x98, 0x13, 0x93, 0x5c, 0xf0, 0x9c, 0x66, + 0xe3, 0xff, 0x46, 0xd1, 0xc9, 0x98, 0x9a, 0xf0, 0x2b, 0x58, 0x25, 0xce, 0xc3, 0x3b, 0x65, 0xf8, + 0x4f, 0x02, 0x86, 0x93, 0xed, 0x40, 0x7f, 0x5b, 0x83, 0x0b, 0x01, 0xf1, 0xf7, 0x6c, 0x93, 0xac, + 0x9a, 0xa6, 0x37, 0x70, 0xa3, 0x41, 0xae, 0x14, 0x8f, 0xd0, 0xef, 0x64, 0xd0, 0xe3, 0xe7, 0xce, + 0x59, 0x10, 0x9c, 0xc9, 0x9f, 0xee, 0x5f, 0xe7, 0xee, 0x1a, 0xa1, 0xb9, 0xd3, 0x30, 0xcc, 0x1d, + 0xa6, 0xbf, 0x07, 0x4b, 0x33, 0xc5, 0x23, 0x88, 0x5f, 0x4f, 0x92, 0xe2, 0x76, 0x79, 0xaa, 0x10, + 0xa7, 0x19, 0xa2, 0x00, 0x2a, 0x3e, 0x79, 0x7b, 0x40, 0x82, 0x30, 0x58, 0x02, 0xc6, 0xbc, 0x35, + 0xf6, 0x88, 0x61, 0x41, 0x90, 0xeb, 0x18, 0xd1, 0x2f, 0x2c, 0x19, 0xa1, 0x2e, 0x3c, 0xc1, 0x67, + 0xee, 0xaa, 0xeb, 0xb9, 0x07, 0x3d, 0x6f, 0x10, 0xa4, 0x66, 0x7f, 0x95, 0xcd, 0x7e, 0x16, 0xf8, + 0xb0, 0x76, 0x1c, 0x22, 0x3e, 0x9e, 0xce, 0xf2, 0x2b, 0x80, 0x86, 0xe7, 0x0d, 0x5a, 0x80, 0x89, + 0x5d, 0xc2, 0xaf, 0x7e, 0xcd, 0x60, 0xfa, 0x2f, 0xba, 0x00, 0xe5, 0x3d, 0xc3, 0x19, 0x70, 0x85, + 0xb3, 0x82, 0xf9, 0x8f, 0x17, 0x4a, 0x9f, 0xd4, 0xf4, 0xdf, 0xd1, 0xe0, 0x62, 0xe6, 0xc7, 0x21, + 0x0c, 0x97, 0x58, 0x38, 0x81, 0xbb, 0x3e, 0x08, 0x8d, 0xd0, 0x76, 0xbb, 0x2d, 0x77, 0xdb, 0xb1, + 0xbb, 0x3b, 0x5c, 0x3f, 0x2b, 0x73, 0x6d, 0x62, 0x3d, 0x13, 0x03, 0xe7, 0xd4, 0x44, 0x2d, 0x38, + 0xdf, 0x33, 0xf6, 0x87, 0x08, 0x96, 0x18, 0x41, 0x76, 0x81, 0x70, 0x7d, 0x18, 0x8c, 0xb3, 0xea, + 0xe8, 0x5f, 0x2b, 0xc3, 0x63, 0xb4, 0xe1, 0xf1, 0xc6, 0xb6, 0x6e, 0xb8, 0x46, 0xf7, 0xdd, 0xb9, + 0x81, 0x7c, 0x4b, 0x83, 0x47, 0x76, 0xb2, 0x95, 0x4e, 0xb1, 0xb5, 0xbe, 0x5a, 0x48, 0xf5, 0x3e, + 0x4e, 0x8f, 0xe5, 0xd3, 0xeb, 0x58, 0x14, 0x9c, 0xd7, 0x28, 0xf4, 0x0a, 0x2c, 0xb8, 0x9e, 0x45, + 0x1a, 0xad, 0x26, 0x5e, 0x37, 0x82, 0xdd, 0x4e, 0x64, 0x96, 0x97, 0xb9, 0x7b, 0x6a, 0x23, 0x05, + 0xc3, 0x43, 0xd8, 0x68, 0x0f, 0x50, 0xdf, 0xb3, 0xd6, 0xf6, 0x6c, 0x33, 0x0a, 0x54, 0x28, 0xee, + 0x12, 0x63, 0xb7, 0x23, 0xda, 0x43, 0xd4, 0x70, 0x06, 0x07, 0xa6, 0x35, 0xd3, 0xc6, 0xac, 0x7b, + 0xae, 0x1d, 0x7a, 0xfe, 0x75, 0xdf, 0x30, 0xc9, 0x58, 0xca, 0x23, 0x9b, 0xe7, 0x1b, 0x99, 0x14, + 0x71, 0x0e, 0x27, 0xfd, 0x7f, 0x6b, 0x70, 0x8e, 0x4e, 0x8b, 0xb6, 0xef, 0xed, 0x1f, 0xbc, 0x1b, + 0x27, 0xe4, 0xd3, 0x30, 0xd9, 0xf3, 0xac, 0xc8, 0x00, 0xbd, 0x48, 0xf5, 0xbf, 0x75, 0xcf, 0x22, + 0xf7, 0xb9, 0x9f, 0x6e, 0xff, 0x80, 0x05, 0x30, 0x31, 0x14, 0xd5, 0x9c, 0x9c, 0xc8, 0x37, 0x27, + 0xf5, 0xff, 0xac, 0x71, 0x45, 0x2e, 0x32, 0xe7, 0xde, 0x95, 0xeb, 0xf0, 0x39, 0x98, 0xa3, 0x65, + 0xeb, 0xc6, 0x7e, 0xbb, 0xf9, 0x9a, 0xe7, 0x44, 0x41, 0x3e, 0xec, 0x48, 0xf1, 0xa6, 0x0a, 0xc0, + 0x49, 0x3c, 0xfd, 0x3f, 0xcd, 0x03, 0x43, 0x70, 0x48, 0xf8, 0x6e, 0xfc, 0xae, 0x67, 0xa0, 0x6a, + 0xf6, 0x07, 0x8d, 0x6b, 0x9d, 0x57, 0x07, 0x5e, 0x68, 0x08, 0x4f, 0x23, 0xd3, 0xce, 0x1a, 0xed, + 0xcd, 0xa8, 0x18, 0xab, 0x38, 0x74, 0x85, 0x9b, 0xfd, 0x81, 0x90, 0x99, 0x6d, 0xf5, 0x48, 0x8a, + 0xad, 0xf0, 0x46, 0x7b, 0x33, 0x01, 0xc3, 0x43, 0xd8, 0xe8, 0x8b, 0x30, 0x4b, 0xc4, 0xe2, 0xbb, + 0x61, 0xf8, 0x96, 0x58, 0xdb, 0x85, 0xb7, 0x57, 0xd9, 0xb5, 0xd1, 0x8a, 0xe6, 0x4a, 0xed, 0x9a, + 0xc2, 0x02, 0x27, 0x18, 0x32, 0x05, 0x53, 0xfc, 0xa6, 0x23, 0xe5, 0x59, 0xe9, 0xc5, 0x5e, 0x16, + 0x0a, 0x66, 0x1e, 0x12, 0xce, 0xaf, 0x8f, 0x7e, 0x43, 0x83, 0x4b, 0x12, 0x6a, 0xbb, 0x76, 0x6f, + 0xd0, 0xc3, 0xc4, 0x74, 0x0c, 0xbb, 0x27, 0xb4, 0xcd, 0xd7, 0x1f, 0xda, 0x87, 0x26, 0xc9, 0x73, + 0x81, 0x93, 0x0d, 0xc3, 0x39, 0x4d, 0x42, 0xdf, 0xd0, 0xe0, 0x4a, 0x04, 0x6a, 0x53, 0x7b, 0x6f, + 0xe0, 0x93, 0x38, 0x4c, 0x4c, 0x74, 0xc9, 0x74, 0x21, 0xf9, 0xf7, 0xc1, 0xa3, 0xc3, 0xda, 0x95, + 0xb5, 0x07, 0xd0, 0xc6, 0x0f, 0xe4, 0xae, 0x4e, 0x97, 0x8e, 0xb7, 0x1d, 0x0a, 0xf5, 0xf4, 0xb4, + 0xa6, 0x0b, 0x65, 0x81, 0x13, 0x0c, 0xd1, 0x6f, 0x6a, 0xf0, 0x88, 0x5a, 0xa0, 0xce, 0x16, 0xae, + 0x97, 0x7e, 0xf6, 0xa1, 0x35, 0x26, 0x45, 0x9f, 0x7b, 0x80, 0x72, 0x80, 0x38, 0xaf, 0x55, 0x54, + 0xf4, 0xf6, 0xd8, 0xc4, 0xe4, 0xba, 0x6b, 0x99, 0x8b, 0x5e, 0x3e, 0x57, 0x03, 0x1c, 0xc1, 0xa8, + 0x49, 0xd8, 0xf7, 0xac, 0xb6, 0x6d, 0x05, 0xb7, 0xec, 0x9e, 0x1d, 0x32, 0xed, 0x72, 0x82, 0x77, + 0x47, 0xdb, 0xb3, 0xda, 0xad, 0x26, 0x2f, 0xc7, 0x09, 0x2c, 0x16, 0x3d, 0x6d, 0xf7, 0x8c, 0x2e, + 0x69, 0x0f, 0x1c, 0xa7, 0xed, 0x7b, 0xcc, 0x4d, 0xd0, 0x24, 0x86, 0xe5, 0xd8, 0x2e, 0x59, 0x9a, + 0x2d, 0x1e, 0x3d, 0xdd, 0xca, 0x23, 0x8a, 0xf3, 0xf9, 0xa1, 0x15, 0x80, 0x6d, 0xc3, 0x76, 0x3a, + 0x77, 0x8d, 0xfe, 0x6d, 0x77, 0x69, 0x8e, 0x09, 0x30, 0x66, 0x8f, 0x5d, 0x93, 0xa5, 0x58, 0xc1, + 0xa0, 0xb3, 0x89, 0x4a, 0x41, 0x4c, 0xf8, 0x1d, 0xaa, 0xa5, 0xf9, 0x87, 0x34, 0x9b, 0x22, 0x82, + 0xbc, 0xfb, 0x6e, 0x2a, 0x2c, 0x70, 0x82, 0x21, 0xfa, 0x8a, 0x06, 0xf3, 0xc1, 0x41, 0x10, 0x92, + 0x9e, 0x6c, 0xc3, 0xb9, 0x87, 0xdd, 0x06, 0xe6, 0x40, 0xe9, 0x24, 0x98, 0xe0, 0x14, 0x53, 0x64, + 0xc0, 0x63, 0xac, 0x57, 0xaf, 0x37, 0x6e, 0xd8, 0xdd, 0x1d, 0x19, 0x13, 0xdd, 0x26, 0xbe, 0x49, + 0xdc, 0x70, 0x69, 0x81, 0xcd, 0x9b, 0xda, 0xd1, 0x61, 0xed, 0xb1, 0x56, 0x3e, 0x1a, 0x3e, 0x8e, + 0x06, 0x7a, 0x13, 0x96, 0x05, 0xf8, 0x96, 0x77, 0x77, 0x88, 0xc3, 0x22, 0xe3, 0xc0, 0x02, 0xd5, + 0x5b, 0xb9, 0x58, 0xf8, 0x18, 0x0a, 0xfa, 0x61, 0x89, 0xdb, 0x20, 0x43, 0xab, 0x08, 0xbd, 0x04, + 0xe7, 0x7a, 0xa4, 0xe7, 0xf9, 0x07, 0xab, 0x51, 0xaa, 0x04, 0xe1, 0xb5, 0x62, 0xc6, 0xdf, 0x7a, + 0x12, 0x84, 0xd3, 0xb8, 0x74, 0x8f, 0x63, 0x6c, 0xaf, 0x75, 0xe2, 0xfa, 0xa5, 0x78, 0x8f, 0x6b, + 0xa5, 0x60, 0x78, 0x08, 0x1b, 0x35, 0x60, 0x51, 0x94, 0xb5, 0xa8, 0xaa, 0x17, 0x5c, 0xf3, 0x49, + 0x74, 0x8e, 0x43, 0x95, 0xa6, 0xc5, 0x56, 0x1a, 0x88, 0x87, 0xf1, 0xe9, 0x57, 0xd0, 0x1f, 0x6a, + 0x2b, 0x26, 0xe3, 0xaf, 0xd8, 0x48, 0x82, 0x70, 0x1a, 0x37, 0xd2, 0xc5, 0x13, 0x4d, 0x28, 0xc7, + 0x5f, 0xb1, 0x91, 0x82, 0xe1, 0x21, 0x6c, 0xfd, 0x8f, 0x27, 0xe1, 0x03, 0x23, 0xec, 0x3c, 0xa8, + 0x97, 0xdd, 0xdd, 0x0f, 0x90, 0x03, 0x2b, 0x51, 0x98, 0xc0, 0xca, 0xab, 0x03, 0xc3, 0x0d, 0xed, + 0xf0, 0x60, 0xc4, 0xe1, 0xe9, 0xe7, 0x0c, 0xcf, 0xc9, 0xf9, 0x8d, 0x3a, 0x9c, 0x41, 0xde, 0x70, + 0x9e, 0x9c, 0xe5, 0xe8, 0xc3, 0xdf, 0xcb, 0x1e, 0xfe, 0x82, 0xbd, 0xfa, 0xc0, 0xe9, 0xd2, 0xcf, + 0x99, 0x2e, 0x05, 0x7b, 0x75, 0x84, 0xe9, 0xf5, 0x27, 0x93, 0xf0, 0xc1, 0x51, 0x76, 0xc1, 0x82, + 0xf3, 0x2b, 0x63, 0x9f, 0x39, 0xd5, 0xf9, 0x95, 0x17, 0x93, 0x71, 0x8a, 0xf3, 0x2b, 0x83, 0xe5, + 0x69, 0xcf, 0xaf, 0xbc, 0x5e, 0x3d, 0xad, 0xf9, 0x95, 0xd7, 0xab, 0x23, 0xcc, 0xaf, 0x3f, 0x4d, + 0xef, 0x0f, 0x72, 0xf3, 0x6b, 0xc1, 0x84, 0xd9, 0x1f, 0x14, 0x14, 0x52, 0xec, 0x04, 0xb1, 0xd1, + 0xde, 0xc4, 0x94, 0x06, 0xc2, 0x30, 0xc5, 0xe7, 0x4f, 0x41, 0x11, 0xc4, 0xe2, 0x69, 0xf8, 0x94, + 0xc4, 0x82, 0x12, 0xed, 0x2a, 0xd2, 0xdf, 0x21, 0x3d, 0xe2, 0x1b, 0x4e, 0x27, 0xf4, 0x7c, 0xa3, + 0x5b, 0x54, 0xda, 0xb0, 0xae, 0x5a, 0x4b, 0xd1, 0xc2, 0x43, 0xd4, 0x69, 0x87, 0xf4, 0x6d, 0xab, + 0xa0, 0x7c, 0x61, 0x1d, 0xd2, 0x6e, 0x35, 0x31, 0xa5, 0xa1, 0xff, 0x41, 0x05, 0x94, 0x5b, 0x36, + 0xd4, 0xd8, 0x32, 0x1c, 0xc7, 0xbb, 0xdb, 0xf6, 0xed, 0x3d, 0xdb, 0x21, 0x5d, 0x62, 0xc9, 0x6b, + 0x18, 0x81, 0x38, 0x67, 0x66, 0xda, 0xdf, 0x6a, 0x1e, 0x12, 0xce, 0xaf, 0x4f, 0x8d, 0xe9, 0x45, + 0x33, 0x7d, 0xc9, 0x70, 0x9c, 0xb3, 0xb2, 0xa1, 0x1b, 0x8b, 0x7c, 0x3d, 0x0d, 0x15, 0xe3, 0x61, + 0xb6, 0xe8, 0x4b, 0x1a, 0xf7, 0x12, 0x48, 0x97, 0xa8, 0x18, 0xb3, 0xeb, 0x0f, 0xc9, 0xd5, 0x1f, + 0xbb, 0x1b, 0x62, 0xa7, 0x6b, 0x92, 0x21, 0x35, 0xe7, 0x2e, 0xee, 0x66, 0x39, 0x37, 0xc5, 0xc8, + 0xde, 0x2e, 0xda, 0x94, 0x1c, 0x6f, 0x29, 0x3f, 0x97, 0xcd, 0x44, 0xc0, 0xd9, 0x0d, 0x91, 0xbd, + 0x24, 0xfd, 0x3d, 0x42, 0x08, 0x14, 0xee, 0xa5, 0x94, 0xe3, 0x28, 0xee, 0x25, 0x09, 0xc0, 0x49, + 0x86, 0xa8, 0x0f, 0x33, 0xbb, 0x91, 0x93, 0x4d, 0x18, 0xe5, 0x8d, 0xa2, 0xdc, 0x15, 0x4f, 0x1d, + 0x3f, 0xff, 0x95, 0x85, 0x38, 0x66, 0x82, 0x76, 0x60, 0x7a, 0x97, 0x0b, 0x22, 0x61, 0x4c, 0xaf, + 0x8e, 0xad, 0xec, 0x73, 0x9b, 0x4e, 0x14, 0xe1, 0x88, 0xbc, 0x1a, 0xff, 0x51, 0x79, 0x40, 0xd8, + 0xcf, 0xd7, 0x34, 0xb8, 0xb8, 0x47, 0xfc, 0xd0, 0x36, 0xd3, 0xae, 0xe5, 0x99, 0xe2, 0x06, 0xc9, + 0x6b, 0x59, 0x04, 0xf9, 0x34, 0xc9, 0x04, 0xe1, 0xec, 0x26, 0xe8, 0x3f, 0xd2, 0x60, 0xc8, 0x81, + 0x85, 0x7e, 0x51, 0x83, 0xd9, 0x6d, 0x62, 0x84, 0x03, 0x9f, 0x5c, 0x37, 0x42, 0x19, 0xca, 0xfa, + 0xda, 0xc3, 0xf0, 0x9b, 0xad, 0x5c, 0x53, 0x08, 0xf3, 0x73, 0x34, 0x79, 0x93, 0x5d, 0x05, 0xe1, + 0x44, 0x0b, 0x96, 0x5f, 0x86, 0xc5, 0xa1, 0x8a, 0x27, 0x3a, 0x48, 0xf9, 0x97, 0xc2, 0xff, 0x99, + 0x4e, 0x74, 0xf8, 0x26, 0x94, 0x0d, 0xcb, 0x92, 0x69, 0x94, 0x9e, 0x2f, 0x76, 0x5e, 0x6c, 0xa9, + 0x11, 0xc3, 0xec, 0x27, 0xe6, 0x64, 0xd1, 0x35, 0x40, 0x46, 0xe2, 0x50, 0x68, 0xdd, 0xb3, 0x22, + 0x2b, 0x89, 0xf9, 0xcd, 0x57, 0x87, 0xa0, 0x38, 0xa3, 0x86, 0xfe, 0x22, 0xcc, 0x27, 0xef, 0x5a, + 0x9e, 0x20, 0xf2, 0x4c, 0xff, 0x2b, 0x1a, 0xa0, 0xe1, 0xc4, 0x09, 0xc8, 0x87, 0x8a, 0xc0, 0x88, + 0x86, 0xb8, 0x90, 0x6b, 0x34, 0x1d, 0x13, 0x17, 0x87, 0x6c, 0x8b, 0x82, 0x00, 0x4b, 0x3e, 0xfa, + 0x9f, 0x69, 0x10, 0xe7, 0x69, 0x41, 0x9f, 0x80, 0xaa, 0x45, 0x02, 0xd3, 0xb7, 0xfb, 0x61, 0xfc, + 0x1d, 0xf2, 0xd2, 0x7b, 0x33, 0x06, 0x61, 0x15, 0x0f, 0xe9, 0x30, 0x15, 0x1a, 0xc1, 0x6e, 0xab, + 0x29, 0xcc, 0x45, 0xb6, 0xb9, 0xdf, 0x61, 0x25, 0x58, 0x40, 0xe2, 0x7b, 0x8b, 0x13, 0x23, 0xdc, + 0x5b, 0x44, 0xdb, 0x0f, 0xe1, 0x92, 0x26, 0x7a, 0xf0, 0x05, 0x4d, 0xfd, 0x8f, 0x4a, 0x90, 0x4c, + 0x8d, 0x53, 0xb4, 0x0b, 0x86, 0x6f, 0x95, 0x96, 0x4e, 0xed, 0x56, 0xe9, 0x47, 0x58, 0x5e, 0x39, + 0x9e, 0x08, 0x94, 0x9f, 0x32, 0xa9, 0xd9, 0xe0, 0x78, 0x1a, 0x4f, 0x89, 0x81, 0x9e, 0x67, 0x71, + 0x62, 0x61, 0x64, 0x44, 0x7f, 0x20, 0x5a, 0x16, 0x1d, 0x5a, 0x78, 0x5f, 0xdc, 0x9b, 0x95, 0xdf, + 0xcf, 0x4a, 0x31, 0xaf, 0x81, 0x3e, 0x21, 0xc2, 0x0a, 0xcb, 0x89, 0xbb, 0xbd, 0xd1, 0x85, 0xe0, + 0xc5, 0x44, 0xc5, 0x38, 0xd6, 0x50, 0xff, 0x9b, 0x1a, 0x4c, 0x8b, 0x2c, 0x18, 0x23, 0x44, 0x26, + 0x6e, 0x43, 0x99, 0x29, 0xe9, 0xe3, 0xe8, 0x2f, 0x9d, 0x1d, 0xcf, 0x0b, 0x13, 0xb9, 0x40, 0x58, + 0x38, 0x1c, 0xfb, 0x17, 0x73, 0xf2, 0xfa, 0xd7, 0x27, 0xe1, 0x8a, 0x40, 0x19, 0xda, 0x9e, 0xe5, + 0x12, 0x3c, 0x80, 0xf3, 0x62, 0x94, 0x9a, 0xbe, 0x61, 0xcb, 0x73, 0xb8, 0x62, 0x66, 0x97, 0x38, + 0xa1, 0x1d, 0x22, 0x87, 0xb3, 0x78, 0xf0, 0x5b, 0xef, 0xac, 0xf8, 0x06, 0x31, 0x9c, 0x70, 0x27, + 0xe2, 0x5d, 0x1a, 0xe7, 0xd6, 0xfb, 0x30, 0x3d, 0x9c, 0xc9, 0x85, 0x9d, 0x03, 0x0a, 0x40, 0xc3, + 0x27, 0x86, 0x7a, 0x08, 0x39, 0x46, 0xf4, 0xdc, 0x7a, 0x26, 0x45, 0x9c, 0xc3, 0x89, 0xf9, 0xaf, + 0x8c, 0x7d, 0x66, 0x0e, 0x63, 0x12, 0xfa, 0x36, 0xcb, 0xce, 0x42, 0xe7, 0x37, 0x37, 0x60, 0x93, + 0x20, 0x9c, 0xc6, 0x45, 0x2f, 0xc0, 0x3c, 0x3b, 0x57, 0x8d, 0xef, 0xaa, 0x95, 0xe3, 0xbc, 0xb0, + 0x1b, 0x09, 0x08, 0x4e, 0x61, 0xea, 0xdf, 0xd4, 0x60, 0x56, 0x9d, 0x40, 0x23, 0x44, 0x32, 0x0f, + 0x14, 0x71, 0x3d, 0x46, 0x40, 0xa8, 0xca, 0x75, 0x14, 0x89, 0x7d, 0x5f, 0x83, 0xf3, 0x19, 0x75, + 0xd8, 0x09, 0x1b, 0x49, 0x89, 0xfe, 0x71, 0x4e, 0xd8, 0x86, 0xb6, 0x11, 0x79, 0xc2, 0x96, 0x86, + 0xe0, 0x21, 0xbe, 0xe8, 0x35, 0x98, 0x30, 0x7d, 0x5b, 0x74, 0xcb, 0x73, 0x85, 0x4c, 0x12, 0xdc, + 0x8a, 0xc3, 0xc3, 0x1b, 0xb8, 0x85, 0x29, 0x41, 0xfd, 0x9f, 0x4e, 0x40, 0x55, 0x49, 0xb0, 0x83, + 0xd6, 0xc7, 0xb1, 0x68, 0x63, 0xf2, 0x91, 0x55, 0xbb, 0x0e, 0x13, 0xdd, 0xfe, 0xa0, 0xa0, 0x49, + 0x2b, 0xc9, 0x5d, 0xa7, 0xe4, 0xba, 0xfd, 0x01, 0x7a, 0x4d, 0x1a, 0xc9, 0xc5, 0xcc, 0x58, 0x19, + 0x23, 0x99, 0x32, 0x94, 0xa3, 0xb9, 0x39, 0x99, 0x3b, 0x37, 0x7b, 0x30, 0x1d, 0x08, 0x0b, 0xba, + 0x5c, 0x3c, 0xb9, 0x93, 0xd2, 0xd3, 0xc2, 0x62, 0xe6, 0xea, 0x77, 0x64, 0x50, 0x47, 0x3c, 0xa8, + 0x02, 0x30, 0x60, 0x31, 0xdd, 0xcc, 0xae, 0xa8, 0x70, 0x05, 0x60, 0x93, 0x95, 0x60, 0x01, 0xd1, + 0x7f, 0xae, 0x04, 0x68, 0x98, 0x20, 0xfa, 0x00, 0x94, 0x59, 0x68, 0xbb, 0x58, 0x68, 0x4a, 0x7e, + 0x0c, 0x23, 0x08, 0x30, 0x87, 0xa1, 0x8e, 0xb8, 0xea, 0x50, 0x6c, 0x60, 0xd8, 0xc9, 0xae, 0xe0, + 0xa7, 0xdc, 0x8b, 0x88, 0xb6, 0xa6, 0x89, 0xdc, 0xad, 0x69, 0x13, 0xa6, 0x7b, 0xb6, 0xcb, 0xa2, + 0x39, 0x8a, 0xb9, 0x08, 0xf8, 0x01, 0x14, 0x27, 0x81, 0x23, 0x5a, 0xfa, 0x9f, 0x94, 0xe8, 0x24, + 0xb6, 0xdd, 0x90, 0xb8, 0x86, 0x6b, 0x12, 0x74, 0x00, 0x60, 0x0c, 0x42, 0x8f, 0xef, 0xf0, 0x62, + 0x2e, 0xb7, 0x8a, 0x8d, 0x97, 0x24, 0xba, 0x2a, 0x09, 0xf2, 0x73, 0xa1, 0xf8, 0x37, 0x56, 0x98, + 0x51, 0xd6, 0xa1, 0xdd, 0x23, 0xaf, 0xdb, 0xae, 0xe5, 0xdd, 0x15, 0xdd, 0x3b, 0x2e, 0xeb, 0x3b, + 0x92, 0x20, 0x67, 0x1d, 0xff, 0xc6, 0x0a, 0x33, 0xf4, 0x59, 0x58, 0x62, 0xb9, 0xaa, 0x5d, 0x96, + 0xbb, 0x4c, 0xb4, 0xcd, 0x73, 0x9c, 0x68, 0xcb, 0xa9, 0xb0, 0x7c, 0x31, 0x4b, 0x8d, 0x1c, 0x1c, + 0x9c, 0x5b, 0x5b, 0xff, 0x4d, 0x0d, 0x2e, 0x66, 0x76, 0x05, 0xba, 0x0e, 0x8b, 0x71, 0x30, 0x80, + 0x2a, 0x23, 0x2b, 0x71, 0x2a, 0xbe, 0x9b, 0x69, 0x04, 0x3c, 0x5c, 0x07, 0xad, 0x4b, 0x3d, 0x41, + 0x95, 0xc1, 0x22, 0x92, 0xe0, 0x31, 0x41, 0x2a, 0x4b, 0x4c, 0xe3, 0xac, 0x7a, 0xfa, 0x4f, 0x24, + 0x1a, 0x1c, 0x77, 0x18, 0x5d, 0x1d, 0x5b, 0xa4, 0x2b, 0x83, 0xa6, 0xe5, 0xea, 0xa8, 0xd3, 0x42, + 0xcc, 0x61, 0xe8, 0x09, 0x35, 0xd0, 0x5f, 0x4a, 0xa1, 0x28, 0xd8, 0x5f, 0x0f, 0x01, 0x44, 0xcc, + 0x8d, 0xed, 0x76, 0xd1, 0x36, 0x54, 0x0c, 0x91, 0x48, 0x5d, 0x4c, 0xb5, 0x4f, 0x15, 0xb2, 0xb1, + 0x04, 0x0d, 0x1e, 0xd4, 0x17, 0xfd, 0xc2, 0x92, 0xb6, 0xfe, 0x0f, 0x34, 0xb8, 0x44, 0x05, 0x92, + 0x15, 0x5d, 0x3b, 0x94, 0x57, 0xd2, 0x47, 0xd8, 0x5a, 0x7b, 0x50, 0xf5, 0xe3, 0x6a, 0x62, 0x5e, + 0xfe, 0xb8, 0x7a, 0xdd, 0x5d, 0x79, 0x55, 0x81, 0xaa, 0x1d, 0x0d, 0xdf, 0x0b, 0xa2, 0xc1, 0x49, + 0xdf, 0x80, 0x97, 0xca, 0xbb, 0xd2, 0x12, 0xac, 0xd2, 0xd7, 0xbf, 0x5c, 0x02, 0xd8, 0x20, 0xe1, + 0x5d, 0xcf, 0xdf, 0xa5, 0x5d, 0xf4, 0xae, 0xba, 0x4d, 0xf3, 0x38, 0x4c, 0xf6, 0x3d, 0x2b, 0x10, + 0x52, 0x8a, 0xdd, 0x01, 0x63, 0xc7, 0xd9, 0xac, 0x14, 0xd5, 0xa0, 0xcc, 0x1c, 0xbf, 0x62, 0x2b, + 0x60, 0x5a, 0x2f, 0xd5, 0x74, 0x02, 0xcc, 0xcb, 0x79, 0x8a, 0x4c, 0x16, 0x6d, 0x1a, 0x08, 0x35, + 0x5e, 0xa4, 0xc8, 0xe4, 0x65, 0x58, 0x42, 0xf5, 0x2f, 0x4f, 0x42, 0xe2, 0x25, 0x80, 0xd8, 0x14, + 0xd7, 0x4e, 0xc7, 0x14, 0xff, 0x2c, 0x2c, 0x39, 0x9e, 0x61, 0xd5, 0x0d, 0x87, 0x4e, 0x7a, 0xbf, + 0xc3, 0x87, 0xc3, 0x70, 0xbb, 0x32, 0xcd, 0x3c, 0x13, 0x00, 0xb7, 0x72, 0x70, 0x70, 0x6e, 0x6d, + 0x14, 0xca, 0xf7, 0x07, 0x78, 0x6a, 0xc1, 0x5b, 0xe3, 0xbe, 0x93, 0xb0, 0xa2, 0xc6, 0x19, 0xcb, + 0x5d, 0x39, 0xf9, 0x44, 0x01, 0xfa, 0x59, 0x0d, 0x2e, 0x92, 0xfd, 0x90, 0xf8, 0xae, 0xe1, 0xdc, + 0xf1, 0x8d, 0xed, 0x6d, 0xdb, 0x14, 0x81, 0x42, 0x7c, 0x70, 0xda, 0x47, 0x87, 0xb5, 0x8b, 0x6b, + 0x59, 0x08, 0xf7, 0x0f, 0x6b, 0x1f, 0x1b, 0x7e, 0x06, 0x24, 0x0a, 0x2b, 0xce, 0xac, 0xc2, 0x26, + 0x63, 0x36, 0xbb, 0xe5, 0xe7, 0xa1, 0x7a, 0x82, 0xf8, 0xd6, 0x19, 0xd5, 0x2d, 0xf3, 0xab, 0x53, + 0xa0, 0x84, 0x74, 0x9f, 0x20, 0xa1, 0xe4, 0xdf, 0xd5, 0xe0, 0x82, 0xe9, 0xd8, 0xc4, 0x0d, 0x53, + 0xb1, 0xbb, 0x7c, 0x61, 0x6c, 0x16, 0x8a, 0x35, 0xef, 0x13, 0xb7, 0xd5, 0x6c, 0x78, 0xae, 0x4b, + 0xcc, 0xb0, 0x91, 0x41, 0x9c, 0x5b, 0x39, 0x59, 0x10, 0x9c, 0xd9, 0x18, 0xf6, 0x3d, 0xac, 0xbc, + 0xd5, 0x54, 0xef, 0x3d, 0x35, 0x44, 0x19, 0x96, 0x50, 0xf4, 0x0c, 0x54, 0xbb, 0xbe, 0x37, 0xe8, + 0x07, 0x0d, 0x16, 0xc3, 0xc4, 0x47, 0x90, 0x29, 0x12, 0xd7, 0xe3, 0x62, 0xac, 0xe2, 0xa0, 0x8f, + 0xc3, 0x2c, 0xff, 0xd9, 0xf6, 0xc9, 0xb6, 0xbd, 0x2f, 0x96, 0x1b, 0x0b, 0x8c, 0xb8, 0xae, 0x94, + 0xe3, 0x04, 0x16, 0xfa, 0x30, 0xcc, 0xd8, 0x41, 0x30, 0x20, 0xfe, 0x26, 0xbe, 0x25, 0x92, 0x3f, + 0x31, 0x87, 0x6a, 0x2b, 0x2a, 0xc4, 0x31, 0x1c, 0xfd, 0x92, 0x06, 0xf3, 0x3e, 0x79, 0x7b, 0x60, + 0xfb, 0xc4, 0x62, 0x4c, 0x03, 0x11, 0x57, 0x8f, 0xc7, 0x8b, 0xe5, 0x5f, 0xc1, 0x09, 0xa2, 0x7c, + 0x9e, 0x4b, 0x77, 0x44, 0x12, 0x88, 0x53, 0x2d, 0xa0, 0x5d, 0x15, 0xd8, 0x5d, 0xd7, 0x76, 0xbb, + 0xab, 0x4e, 0x37, 0x58, 0xaa, 0xb0, 0xa5, 0xcb, 0x75, 0xae, 0xb8, 0x18, 0xab, 0x38, 0xe8, 0x39, + 0x98, 0x1b, 0x04, 0x74, 0xe6, 0xf6, 0x08, 0xef, 0xdf, 0x99, 0x38, 0xb0, 0x70, 0x53, 0x05, 0xe0, + 0x24, 0x1e, 0x35, 0xf1, 0xa2, 0x02, 0xd1, 0xcb, 0xc0, 0x6f, 0xbf, 0xd2, 0x76, 0x6e, 0x26, 0x20, + 0x38, 0x85, 0xb9, 0xbc, 0x0a, 0xe7, 0x33, 0x3e, 0xf3, 0x44, 0xcb, 0xe3, 0x9b, 0x25, 0x78, 0xff, + 0x03, 0x67, 0x25, 0xfa, 0x3b, 0x1a, 0x54, 0xc9, 0x7e, 0xe8, 0x1b, 0x32, 0xcc, 0x91, 0x0e, 0xd1, + 0xf6, 0xa9, 0x2c, 0x81, 0x95, 0xb5, 0x98, 0x11, 0x1f, 0x36, 0xb9, 0xdd, 0x29, 0x10, 0xac, 0xb6, + 0x87, 0x6a, 0xeb, 0xfc, 0x6e, 0xb4, 0xea, 0xae, 0x13, 0x09, 0xd3, 0x05, 0x64, 0xf9, 0xd3, 0xb0, + 0x90, 0xa6, 0x7c, 0xa2, 0x9e, 0xfa, 0x27, 0x25, 0x28, 0xb7, 0x1d, 0xe3, 0x4c, 0xf2, 0x78, 0xfd, + 0xa5, 0x44, 0x12, 0x95, 0x42, 0x99, 0x69, 0x58, 0x53, 0x73, 0xd3, 0x37, 0x75, 0x53, 0xe9, 0x9b, + 0x5e, 0x2e, 0xce, 0xe2, 0xf8, 0x6c, 0x4d, 0xff, 0x46, 0x83, 0x19, 0x86, 0x77, 0x06, 0xc9, 0x3a, + 0xde, 0x4c, 0x26, 0xeb, 0x78, 0xbe, 0xf0, 0x37, 0xe5, 0xe4, 0xe6, 0xf8, 0x5e, 0xf4, 0x2d, 0x2c, + 0x15, 0xc7, 0xe7, 0xd4, 0x87, 0x22, 0xf8, 0xc7, 0x3c, 0x95, 0x95, 0xbe, 0xe8, 0x96, 0x67, 0x1a, + 0xce, 0x50, 0x0e, 0xa3, 0x63, 0x5f, 0x8b, 0xe8, 0xc1, 0x0c, 0x11, 0xf7, 0xcf, 0xa3, 0x8f, 0x29, + 0xa4, 0xd2, 0x46, 0x97, 0xd8, 0x63, 0x76, 0x51, 0x49, 0x80, 0x63, 0x0e, 0xfa, 0xbf, 0x28, 0x41, + 0x55, 0x19, 0xcb, 0x77, 0x22, 0x3b, 0xd2, 0xb5, 0xcc, 0x1c, 0xea, 0x25, 0x16, 0xc7, 0x78, 0xe9, + 0x04, 0xf9, 0xd3, 0x7d, 0xa8, 0x9a, 0x71, 0xa6, 0xcb, 0x71, 0x26, 0xb7, 0x92, 0x30, 0x53, 0x04, + 0x52, 0xc7, 0x05, 0x58, 0x65, 0xa2, 0xff, 0x6e, 0x09, 0xa6, 0xdb, 0xbe, 0x47, 0x07, 0xf8, 0x0c, + 0x44, 0x83, 0x91, 0x10, 0x0d, 0xc5, 0xd6, 0x2d, 0x6f, 0x6c, 0xae, 0x70, 0xb0, 0x53, 0xc2, 0x61, + 0x75, 0x1c, 0x26, 0xc7, 0x8b, 0x87, 0x7f, 0xa7, 0x41, 0x55, 0x60, 0x9e, 0x81, 0x80, 0xf8, 0x7c, + 0x52, 0x40, 0xbc, 0x38, 0xc6, 0x77, 0xe5, 0x88, 0x88, 0xaf, 0x69, 0x30, 0x27, 0x30, 0xd6, 0x49, + 0x6f, 0x8b, 0xf8, 0xe8, 0x1a, 0x4c, 0x07, 0x03, 0x36, 0x90, 0xe2, 0x83, 0x1e, 0x53, 0x85, 0x84, + 0xbf, 0x65, 0x98, 0xec, 0x39, 0x10, 0x8e, 0xa2, 0x64, 0x4c, 0xe3, 0x05, 0x38, 0xaa, 0x4c, 0x4d, + 0x38, 0xdf, 0x73, 0x86, 0x32, 0x06, 0x60, 0xcf, 0x21, 0x98, 0x41, 0xa8, 0xe5, 0x44, 0xff, 0x46, + 0xe7, 0x51, 0xcc, 0x72, 0xa2, 0xe0, 0x00, 0xf3, 0x72, 0xfd, 0x2b, 0x93, 0xb2, 0xb3, 0x99, 0x04, + 0xbb, 0x01, 0x33, 0xa6, 0x4f, 0x8c, 0x90, 0x58, 0xf5, 0x83, 0x51, 0x1a, 0xc7, 0xb4, 0xb8, 0x46, + 0x54, 0x03, 0xc7, 0x95, 0xa9, 0xc2, 0xa4, 0x1e, 0x31, 0x95, 0x62, 0xdd, 0x32, 0xf7, 0x78, 0xe9, + 0x53, 0x50, 0xf6, 0xee, 0xba, 0x32, 0xb6, 0xe2, 0x58, 0xc6, 0xec, 0x53, 0x6e, 0x53, 0x6c, 0xcc, + 0x2b, 0xb1, 0xac, 0x2a, 0x22, 0xa9, 0x06, 0x57, 0x64, 0xab, 0x59, 0x09, 0x35, 0x90, 0x03, 0xd3, + 0x3d, 0x36, 0x0c, 0x63, 0xe5, 0xad, 0x4a, 0x0c, 0xa8, 0x9a, 0xc8, 0x94, 0x51, 0xc6, 0x11, 0x0b, + 0xaa, 0xf8, 0x52, 0xe5, 0x2c, 0xe8, 0x1b, 0x26, 0x51, 0x15, 0xdf, 0x8d, 0xa8, 0x10, 0xc7, 0x70, + 0x74, 0x00, 0x55, 0x7e, 0xad, 0x9c, 0x4b, 0xd9, 0xe9, 0xe2, 0x3e, 0x4d, 0xd1, 0xbc, 0x3b, 0x31, + 0x35, 0xde, 0xf5, 0x4a, 0x01, 0x56, 0x79, 0xe9, 0xbf, 0x30, 0x29, 0x27, 0xa9, 0x90, 0xf8, 0xd9, + 0x4f, 0x58, 0x68, 0x85, 0x9e, 0xb0, 0xf8, 0x18, 0x94, 0xfb, 0x3b, 0x46, 0x10, 0xcd, 0xd4, 0x28, + 0xe9, 0x6e, 0xb9, 0x4d, 0x0b, 0xef, 0x1f, 0xd6, 0x66, 0x05, 0x6b, 0xf6, 0x1b, 0x73, 0x5c, 0x34, + 0x80, 0xf3, 0x41, 0x68, 0x38, 0xa4, 0x63, 0x0b, 0x6f, 0x51, 0x10, 0x1a, 0xbd, 0x7e, 0x81, 0xdc, + 0xb9, 0xec, 0x84, 0xaa, 0x33, 0x4c, 0x0a, 0x67, 0xd1, 0x47, 0x3f, 0xa3, 0xc1, 0x12, 0x2b, 0x5f, + 0x1d, 0x84, 0x1e, 0x4f, 0xe3, 0x1d, 0x33, 0x3f, 0xf9, 0xf9, 0x2c, 0xb3, 0xee, 0x3b, 0x39, 0xf4, + 0x70, 0x2e, 0x27, 0xf4, 0x05, 0xb8, 0xe8, 0x18, 0x41, 0xb8, 0x6a, 0x86, 0xf6, 0x9e, 0x1d, 0x1e, + 0xc4, 0x4d, 0x28, 0x9f, 0xb8, 0x09, 0x2c, 0x40, 0xe3, 0x56, 0x16, 0x31, 0x9c, 0xcd, 0x43, 0xff, + 0x53, 0x0d, 0xd0, 0xf0, 0x14, 0x42, 0x0e, 0x54, 0x2c, 0xb2, 0x6d, 0x0c, 0x9c, 0x30, 0x52, 0x01, + 0x0a, 0xdd, 0xae, 0x8e, 0x49, 0xc6, 0x92, 0xb9, 0x29, 0xe8, 0x62, 0xc9, 0x01, 0x79, 0x30, 0x73, + 0x77, 0xc7, 0x0e, 0x89, 0x63, 0x07, 0xa1, 0x90, 0xce, 0xe3, 0xb2, 0x93, 0x3a, 0xcf, 0xeb, 0x11, + 0x61, 0x1c, 0xf3, 0xd0, 0x7f, 0x6e, 0x02, 0x2a, 0x27, 0x78, 0x35, 0x6d, 0x00, 0x48, 0xa4, 0x55, + 0xa0, 0x8a, 0x12, 0x19, 0xc7, 0x45, 0xc6, 0xd4, 0x99, 0xc6, 0x10, 0x31, 0x9c, 0xc1, 0x00, 0x7d, + 0x01, 0x2e, 0xd8, 0xee, 0xb6, 0x6f, 0x04, 0xa1, 0x3f, 0x30, 0xc3, 0x81, 0x4f, 0xc6, 0xc9, 0xd9, + 0xcb, 0x5c, 0x0b, 0xad, 0x0c, 0x72, 0x38, 0x93, 0x09, 0x22, 0x30, 0x7d, 0xd7, 0xf3, 0x77, 0xa9, + 0xf0, 0x9c, 0x2c, 0xfe, 0xe0, 0xc2, 0xeb, 0x8c, 0x44, 0x2c, 0x35, 0xf9, 0xef, 0x00, 0x47, 0xb4, + 0xf5, 0xef, 0x68, 0x50, 0xe6, 0x37, 0xd2, 0xde, 0x13, 0x76, 0x15, 0x6b, 0x6a, 0x6e, 0x2e, 0x4a, + 0x6a, 0xee, 0x30, 0x8c, 0xf7, 0x88, 0xb9, 0xc3, 0xda, 0x9a, 0xa3, 0xcb, 0x7c, 0x67, 0x42, 0x7c, + 0x0b, 0x53, 0x16, 0x5a, 0x70, 0x5e, 0x28, 0xbd, 0xb7, 0xec, 0x6d, 0x42, 0x67, 0x57, 0xd3, 0x38, + 0x08, 0xc4, 0x55, 0x70, 0x26, 0x75, 0x1b, 0xc3, 0x60, 0x9c, 0x55, 0x07, 0xfd, 0x73, 0x8d, 0x6e, + 0xcb, 0xa1, 0x6f, 0x9b, 0x63, 0xe5, 0x55, 0x94, 0x6d, 0x5b, 0x59, 0xe7, 0xc4, 0xb8, 0xb7, 0x60, + 0x33, 0xde, 0x9f, 0x59, 0xe9, 0xfd, 0xc3, 0x5a, 0x2d, 0xc3, 0x15, 0x19, 0xb9, 0xce, 0x69, 0xc7, + 0x7e, 0xf9, 0x07, 0xc7, 0xa2, 0x30, 0x37, 0x7e, 0xd4, 0x62, 0x74, 0x03, 0xca, 0x81, 0xe9, 0xf5, + 0xc9, 0x49, 0x52, 0xd6, 0xca, 0x0e, 0xee, 0xd0, 0x9a, 0x98, 0x13, 0x58, 0x7e, 0x0b, 0x66, 0xd5, + 0x96, 0x67, 0x78, 0x23, 0x9a, 0xaa, 0x37, 0xe2, 0xc4, 0x87, 0x75, 0xaa, 0xf7, 0xe2, 0xf7, 0x4a, + 0x20, 0x5e, 0x49, 0x1a, 0xe1, 0xb0, 0xc2, 0x8e, 0xd2, 0xc7, 0x8d, 0xf1, 0x32, 0x54, 0xfa, 0x91, + 0xd6, 0xb8, 0x0f, 0xd4, 0x0c, 0x72, 0xc8, 0x85, 0x29, 0xc7, 0xd8, 0x22, 0x4e, 0xf4, 0x66, 0xce, + 0xb5, 0xe2, 0x8f, 0xba, 0xf0, 0xdc, 0xa6, 0x41, 0xca, 0xa5, 0xcd, 0x0b, 0xb1, 0xe0, 0xb2, 0xfc, + 0x3c, 0x54, 0x15, 0xb4, 0x13, 0x39, 0x80, 0xbe, 0xaa, 0xc1, 0xa5, 0x68, 0x4a, 0x24, 0xd3, 0x4e, + 0xa0, 0xa7, 0xa0, 0x62, 0xf4, 0x6d, 0xe6, 0x13, 0x55, 0xbd, 0xca, 0xab, 0xed, 0x16, 0x2b, 0xc3, + 0x12, 0x8a, 0x3e, 0x02, 0x95, 0x68, 0x9c, 0x84, 0x82, 0x24, 0x97, 0xb8, 0x3c, 0xcc, 0x91, 0x18, + 0xe8, 0x49, 0x25, 0x21, 0x5e, 0x39, 0xde, 0xd1, 0x24, 0x63, 0x7e, 0xee, 0xab, 0xff, 0xad, 0x12, + 0xcc, 0x71, 0x47, 0x42, 0xdd, 0x76, 0x2d, 0xdb, 0xed, 0x9e, 0x81, 0x28, 0x4d, 0xbc, 0x93, 0x59, + 0x7a, 0x58, 0xef, 0x64, 0xde, 0x84, 0xa9, 0xb7, 0xe9, 0xb2, 0x8e, 0xa6, 0xc3, 0x48, 0xab, 0x4b, + 0x8e, 0x35, 0x93, 0x08, 0x01, 0x16, 0x24, 0xf4, 0xff, 0xa8, 0xc1, 0x62, 0xa2, 0x5b, 0xce, 0x40, + 0x28, 0x6f, 0x27, 0x85, 0xf2, 0x6a, 0xb1, 0xe4, 0x2b, 0x4a, 0x9b, 0x73, 0x84, 0xf3, 0x6f, 0x95, + 0x60, 0xb2, 0x43, 0x88, 0x75, 0x06, 0x23, 0xfd, 0x66, 0x62, 0xd3, 0xfc, 0x54, 0xe1, 0x97, 0x90, + 0xf2, 0xdc, 0x0d, 0xdb, 0x29, 0x77, 0xc3, 0xa7, 0x0b, 0x73, 0x38, 0xde, 0xd7, 0xf0, 0x6b, 0x25, + 0x00, 0x8a, 0xc6, 0x5f, 0x2a, 0x14, 0x31, 0x87, 0xf1, 0x5b, 0xb6, 0x33, 0xef, 0x96, 0x17, 0x68, + 0x75, 0xf9, 0xca, 0xdd, 0x44, 0xec, 0xcc, 0x4e, 0xbe, 0x70, 0x97, 0x5c, 0x7d, 0x93, 0x0f, 0x69, + 0xf5, 0xe9, 0xff, 0x48, 0x03, 0x96, 0xaa, 0xbd, 0xb9, 0xd1, 0x41, 0xcf, 0xc1, 0x9c, 0xcd, 0x8f, + 0x0a, 0x9b, 0x6a, 0x92, 0x33, 0x76, 0xa0, 0xd1, 0x52, 0x01, 0x38, 0x89, 0x87, 0x7a, 0x4a, 0xbf, + 0x8e, 0xf1, 0x5e, 0xa8, 0x68, 0x87, 0x4c, 0x23, 0x3b, 0x9b, 0x3d, 0x30, 0xfa, 0x0f, 0x4a, 0x70, + 0x2e, 0x85, 0x3b, 0x82, 0x3e, 0x7f, 0x3a, 0xd2, 0x4b, 0xc9, 0x2c, 0x3b, 0x71, 0xfa, 0x99, 0x65, + 0x65, 0x92, 0xd7, 0xc9, 0xd3, 0x4d, 0xf2, 0xfa, 0x87, 0x1a, 0xb0, 0x07, 0x28, 0xcf, 0x40, 0x7a, + 0xfe, 0xc5, 0xa4, 0xf4, 0xfc, 0x64, 0xd1, 0x89, 0x93, 0x23, 0x34, 0x7f, 0xa3, 0x04, 0x2c, 0xdb, + 0xb9, 0x88, 0x8c, 0x50, 0x82, 0x0d, 0xb4, 0x9c, 0x60, 0x83, 0x2b, 0x22, 0x56, 0x21, 0xe5, 0x75, + 0x53, 0xe2, 0x15, 0x3e, 0xa2, 0x84, 0x23, 0x4c, 0x24, 0xc5, 0xc8, 0x70, 0x48, 0x02, 0xba, 0x07, + 0x73, 0xc1, 0x8e, 0xe7, 0x85, 0x91, 0x09, 0x2c, 0xc6, 0x6e, 0xb5, 0x70, 0x88, 0x70, 0xf4, 0x29, + 0x7c, 0x61, 0x76, 0x54, 0xda, 0x38, 0xc9, 0x0a, 0xad, 0x00, 0x6c, 0x39, 0x9e, 0xb9, 0xdb, 0x68, + 0x35, 0x71, 0x14, 0x48, 0xca, 0xc2, 0x99, 0xea, 0xb2, 0x14, 0x2b, 0x18, 0xfa, 0x1f, 0x68, 0xbc, + 0xb7, 0x4e, 0xb0, 0xac, 0xce, 0x50, 0x4a, 0x7e, 0x28, 0x25, 0x25, 0xf3, 0xde, 0x02, 0xfd, 0x5d, + 0xf1, 0x15, 0x32, 0xa7, 0x7d, 0x1f, 0xe6, 0x1c, 0x35, 0x09, 0xbe, 0x98, 0xc6, 0x85, 0xf2, 0xe7, + 0xcb, 0x04, 0x6d, 0x89, 0x62, 0x9c, 0x64, 0x40, 0x45, 0x69, 0xd4, 0x78, 0xfe, 0x74, 0x1f, 0x8f, + 0x05, 0x61, 0x23, 0xd6, 0x56, 0x01, 0x38, 0x89, 0xa7, 0xbf, 0x0a, 0x1f, 0xe4, 0x4d, 0x67, 0xb1, + 0xdc, 0x6b, 0xfb, 0x26, 0x09, 0x82, 0x86, 0xd1, 0x37, 0x4c, 0xaa, 0xdc, 0xb3, 0x2b, 0x90, 0xdc, + 0xe5, 0xf6, 0x74, 0x3a, 0xe1, 0xab, 0xb4, 0xb6, 0x87, 0xb2, 0xf4, 0xfc, 0x7f, 0x0d, 0x6a, 0x0a, + 0xcd, 0x44, 0x28, 0x4a, 0x34, 0x49, 0xbf, 0xae, 0x41, 0xd5, 0x70, 0x5d, 0x2f, 0x34, 0xd4, 0x13, + 0x20, 0xab, 0xf8, 0x13, 0x88, 0xb9, 0xac, 0x56, 0x56, 0x63, 0x36, 0xa9, 0xb3, 0x5e, 0x05, 0x82, + 0xd5, 0xd6, 0x2c, 0x7f, 0x1a, 0x16, 0xd2, 0xb5, 0x4e, 0xa4, 0xc6, 0xd7, 0xe1, 0xa2, 0xd2, 0x2a, + 0x71, 0x99, 0x8c, 0xea, 0xcc, 0x4f, 0xc3, 0xf4, 0x9e, 0x1d, 0xd8, 0xd1, 0xa5, 0x64, 0xa5, 0x17, + 0x5f, 0xe3, 0xc5, 0x38, 0x82, 0xeb, 0xaf, 0xc0, 0x79, 0x95, 0x06, 0x5b, 0x66, 0x1b, 0x9d, 0x93, + 0x8c, 0xc3, 0x3a, 0x5c, 0x51, 0x28, 0x64, 0xde, 0xa8, 0x3a, 0x09, 0xb9, 0x2f, 0x4d, 0x45, 0xb3, + 0x5c, 0x84, 0xfd, 0xff, 0xb6, 0x06, 0x8f, 0x92, 0xbc, 0x09, 0x23, 0xa6, 0xfc, 0x67, 0xc7, 0x1c, + 0xd1, 0xdc, 0x09, 0x29, 0xb2, 0xee, 0xe4, 0x81, 0x71, 0x7e, 0xcb, 0xd0, 0x01, 0x40, 0x20, 0x87, + 0x64, 0x9c, 0xf0, 0xcd, 0xcc, 0x31, 0x16, 0x89, 0x60, 0xe5, 0x6f, 0xac, 0x30, 0x43, 0x6f, 0x43, + 0x25, 0x10, 0x23, 0x39, 0xce, 0x85, 0xcf, 0x8c, 0x89, 0x21, 0x22, 0xd4, 0xc4, 0x2f, 0x2c, 0xd9, + 0xa0, 0x5f, 0xd7, 0xe0, 0x82, 0x93, 0xb1, 0x2e, 0xc4, 0xb6, 0xd0, 0x39, 0x85, 0x25, 0xc7, 0xdd, + 0x80, 0x59, 0x10, 0x9c, 0xd9, 0x14, 0xf4, 0xf7, 0x72, 0x6f, 0x17, 0x96, 0x8b, 0x3f, 0x02, 0xf1, + 0xa0, 0xb9, 0x5f, 0xe0, 0xa2, 0xe1, 0x57, 0xa7, 0xb9, 0x9a, 0xc2, 0xbc, 0x55, 0x5b, 0x30, 0xb5, + 0xc5, 0xd4, 0x7c, 0x31, 0xd5, 0x0b, 0xdb, 0x14, 0xdc, 0x58, 0xe0, 0x3a, 0x38, 0xff, 0x1f, 0x0b, + 0xca, 0xe8, 0x0d, 0x98, 0xb0, 0xdc, 0xe8, 0x19, 0x9f, 0x17, 0xc7, 0xd0, 0x71, 0xe3, 0x08, 0x57, + 0x3a, 0x3b, 0x28, 0x51, 0xe4, 0x42, 0xc5, 0x15, 0x3b, 0xbb, 0x98, 0x8b, 0x85, 0x5f, 0xa0, 0x95, + 0x1a, 0x82, 0xd4, 0x4b, 0xa2, 0x12, 0x2c, 0x79, 0x50, 0x7e, 0x52, 0x69, 0x9f, 0x1c, 0x8f, 0x9f, + 0xd4, 0xd8, 0x8f, 0x33, 0xa7, 0xda, 0xaa, 0xfe, 0x5d, 0x1e, 0x5d, 0xff, 0x9e, 0xcb, 0xd5, 0xbd, + 0x09, 0x4c, 0x85, 0x06, 0x0b, 0x98, 0x98, 0x2a, 0x1e, 0xb0, 0x40, 0xdb, 0x7f, 0x87, 0x52, 0x89, + 0xd5, 0x09, 0xf6, 0x33, 0xc0, 0x82, 0x38, 0x9d, 0x58, 0xfc, 0x71, 0x5c, 0x71, 0x62, 0x57, 0x78, + 0x62, 0xf1, 0x47, 0x0d, 0xf8, 0xc4, 0xe2, 0xff, 0x63, 0x41, 0x19, 0xbd, 0x45, 0x55, 0x4a, 0x2e, + 0xc7, 0x45, 0x92, 0xac, 0x57, 0xc6, 0x5c, 0x63, 0x41, 0x14, 0x23, 0xcb, 0x7f, 0x61, 0x49, 0x1f, + 0x6d, 0xc1, 0xb4, 0x30, 0xdf, 0xc4, 0x65, 0xe1, 0x17, 0xc7, 0xc8, 0x4c, 0x1d, 0xbd, 0xd3, 0xc1, + 0x2f, 0xec, 0x45, 0x84, 0xf5, 0xbf, 0x5f, 0xe1, 0x86, 0xb7, 0x38, 0x6c, 0xdc, 0x86, 0x4a, 0x44, + 0x6e, 0x9c, 0x78, 0xed, 0x28, 0xcf, 0x3e, 0xff, 0xb4, 0xe8, 0x17, 0x96, 0xb4, 0x51, 0x23, 0x2b, + 0x34, 0x3e, 0xce, 0x77, 0x38, 0x5a, 0x58, 0x7c, 0x32, 0x16, 0x66, 0xe2, 0x2c, 0x62, 0x61, 0xb2, + 0x0f, 0x63, 0x27, 0x0b, 0x1d, 0xc6, 0xbe, 0x04, 0xe7, 0xa2, 0x50, 0x15, 0x8b, 0x30, 0xa7, 0xb0, + 0x08, 0xe2, 0x64, 0xf7, 0xcf, 0x1a, 0x49, 0x10, 0x4e, 0xe3, 0xa2, 0xdf, 0xd3, 0xa0, 0x62, 0x8a, + 0x5d, 0x5a, 0xac, 0xab, 0x5b, 0xe3, 0x79, 0x67, 0x56, 0xa2, 0x4d, 0x9f, 0xab, 0x7b, 0xaf, 0x45, + 0x32, 0x22, 0x2a, 0x7e, 0x48, 0xde, 0x7a, 0xd9, 0x6a, 0xf4, 0x6f, 0xa9, 0x32, 0xeb, 0xb0, 0xec, + 0xff, 0xec, 0x3a, 0x0f, 0x8f, 0x2e, 0xbd, 0x3d, 0xe6, 0x57, 0xac, 0xc6, 0x14, 0xf9, 0x87, 0x7c, + 0x4e, 0xea, 0xad, 0x31, 0xe4, 0x21, 0x7d, 0x8b, 0xda, 0xfc, 0xe5, 0x5d, 0x98, 0x4b, 0xf4, 0xe0, + 0x69, 0x1e, 0x1a, 0x2c, 0xbb, 0xb0, 0x90, 0xfe, 0xd0, 0x53, 0x3d, 0xa4, 0xb8, 0x09, 0x33, 0x52, + 0x02, 0xa3, 0x27, 0x14, 0x46, 0xf1, 0x0e, 0x79, 0x93, 0x1c, 0x70, 0xae, 0xb5, 0x84, 0x82, 0xcf, + 0x4d, 0xf7, 0xd7, 0x68, 0x81, 0x20, 0xa8, 0x7f, 0x57, 0x18, 0x7e, 0x77, 0x48, 0xaf, 0xef, 0x18, + 0x21, 0x79, 0xef, 0x7b, 0x4a, 0xf5, 0xff, 0xae, 0x71, 0x41, 0x2a, 0x9e, 0xdb, 0x31, 0xa0, 0xda, + 0xe3, 0xf9, 0xbb, 0xd8, 0x85, 0x2e, 0xad, 0xf8, 0x55, 0xb2, 0xf5, 0x98, 0x0c, 0x56, 0x69, 0xa2, + 0xbb, 0xc3, 0x0f, 0x42, 0x5d, 0x1b, 0x6f, 0xc7, 0x1b, 0xf9, 0x5d, 0x28, 0x34, 0x5c, 0x47, 0x7d, + 0x4b, 0x47, 0x3b, 0xfe, 0x2d, 0x9d, 0x07, 0xbf, 0xb0, 0xa2, 0x7f, 0x4b, 0x83, 0xcc, 0x6c, 0xe6, + 0x48, 0x87, 0x29, 0x1e, 0xa0, 0xae, 0xbe, 0x94, 0xc5, 0xa3, 0xd7, 0xb1, 0x80, 0x20, 0x1f, 0x2e, + 0x88, 0xf0, 0xef, 0x9b, 0xe4, 0x20, 0x7e, 0xa3, 0x49, 0x0c, 0xfd, 0xe8, 0x81, 0xa0, 0x2c, 0xaf, + 0x4f, 0x27, 0x45, 0x09, 0x67, 0xd2, 0x66, 0x11, 0xc8, 0xcc, 0x88, 0x78, 0x6f, 0x9c, 0x94, 0xb3, + 0xa6, 0x9e, 0x6e, 0x04, 0x32, 0x67, 0x71, 0xbc, 0xdb, 0xff, 0x73, 0x70, 0x89, 0xa1, 0xad, 0x5a, + 0xcc, 0x6e, 0x08, 0x88, 0xb5, 0x6a, 0x59, 0xec, 0x3a, 0xd0, 0xb8, 0x4f, 0x3b, 0xb1, 0xd3, 0x7e, + 0x46, 0xfb, 0x3d, 0x72, 0xda, 0xcf, 0xda, 0x9a, 0xe3, 0x1b, 0xfd, 0x43, 0x0d, 0x16, 0x87, 0x92, + 0x0e, 0x8c, 0x74, 0x56, 0x7c, 0x66, 0x2e, 0xbf, 0x27, 0xd3, 0x4f, 0x22, 0x55, 0x33, 0x73, 0x91, + 0xbc, 0x0e, 0x73, 0x09, 0xd7, 0xa8, 0xbc, 0x70, 0xa6, 0x65, 0x5e, 0x38, 0x53, 0xef, 0x93, 0x95, + 0x8e, 0xbd, 0x4f, 0xf6, 0xcd, 0x39, 0x31, 0xdc, 0xcc, 0xc4, 0x7c, 0x13, 0xa6, 0xd8, 0xad, 0xaf, + 0xe8, 0x15, 0xb9, 0x17, 0x0a, 0xdf, 0x26, 0x0b, 0xb8, 0x84, 0xe1, 0xff, 0x63, 0x41, 0x15, 0x35, + 0x61, 0x81, 0x3d, 0xa5, 0xdf, 0xf6, 0xbd, 0x6d, 0xdb, 0x21, 0x1b, 0xb1, 0x30, 0x93, 0xd7, 0xd6, + 0x1b, 0x29, 0x38, 0x1e, 0xaa, 0x81, 0x30, 0x37, 0x52, 0xf9, 0x1a, 0x7b, 0xae, 0xe0, 0x11, 0x01, + 0x4f, 0x0c, 0x26, 0x8d, 0xd3, 0xb7, 0x01, 0x48, 0x34, 0x70, 0x51, 0x6c, 0xd0, 0x4b, 0xc5, 0x2e, + 0xe4, 0xcb, 0xe1, 0x8f, 0x84, 0x91, 0x2c, 0x0a, 0xb0, 0xc2, 0x04, 0xf9, 0x50, 0xdd, 0x89, 0x5f, + 0x8c, 0x12, 0x16, 0xe3, 0xcb, 0x63, 0xbe, 0x56, 0xc5, 0xf7, 0x3e, 0xa5, 0x00, 0xab, 0x4c, 0x90, + 0x0f, 0x10, 0xdb, 0x03, 0xe3, 0xbc, 0x30, 0x12, 0x1b, 0x1a, 0xf1, 0x77, 0xc6, 0x65, 0x58, 0xe1, + 0x42, 0x79, 0xba, 0xf2, 0xda, 0xe6, 0x38, 0x26, 0x66, 0x7c, 0xf9, 0x33, 0xe6, 0x19, 0x97, 0x61, + 0x85, 0x0b, 0xed, 0xdb, 0x5e, 0x7c, 0x55, 0x57, 0x58, 0x9c, 0x2f, 0x8f, 0x79, 0x65, 0x5a, 0xe8, + 0x15, 0x71, 0x01, 0x56, 0x99, 0x20, 0x17, 0xa0, 0x27, 0x6f, 0xf0, 0x0a, 0xcb, 0xb3, 0xd0, 0x77, + 0xc6, 0xf7, 0x80, 0xb9, 0x6f, 0x2f, 0xfe, 0x8d, 0x15, 0x0e, 0xd4, 0xa4, 0x96, 0xfe, 0x0d, 0x28, + 0xae, 0x9d, 0x8d, 0xe4, 0xdb, 0xf8, 0x44, 0xac, 0xa4, 0x54, 0xd9, 0x7a, 0x7d, 0x4c, 0x51, 0x50, + 0xee, 0x1f, 0xd6, 0x66, 0x99, 0x0c, 0x19, 0x52, 0x58, 0xe2, 0x03, 0x8d, 0xd9, 0xe3, 0x0e, 0x34, + 0xd0, 0x75, 0x58, 0x0c, 0xd4, 0x00, 0x01, 0x26, 0x18, 0xe6, 0x58, 0x15, 0x79, 0xe3, 0xbb, 0x93, + 0x46, 0xc0, 0xc3, 0x75, 0xb8, 0xe0, 0x23, 0x16, 0xab, 0x3f, 0xaf, 0x0a, 0x3e, 0x5e, 0x86, 0x25, + 0x14, 0xed, 0xa5, 0x5e, 0x1c, 0x3e, 0x37, 0xae, 0x53, 0x62, 0xc4, 0xe7, 0x87, 0xbf, 0xa0, 0xbe, + 0x76, 0xbb, 0x50, 0x3c, 0x52, 0x2c, 0xfb, 0xd6, 0xf6, 0x03, 0x5e, 0xbc, 0x1d, 0x24, 0x03, 0xb4, + 0x17, 0x1f, 0x4a, 0x50, 0xaa, 0x3c, 0xde, 0xc8, 0x0b, 0xce, 0x46, 0x0d, 0x58, 0x24, 0xfb, 0x7d, + 0x2f, 0x18, 0xf8, 0x84, 0x25, 0x8c, 0x60, 0xc3, 0x83, 0x62, 0xaf, 0xc5, 0x5a, 0x1a, 0x88, 0x87, + 0xf1, 0xf5, 0xef, 0xcc, 0x40, 0x55, 0xd1, 0x8d, 0xde, 0x89, 0x1b, 0x3d, 0x21, 0x54, 0x4d, 0xcf, + 0x0d, 0x42, 0xdf, 0x50, 0x6e, 0x31, 0x8d, 0xc9, 0x53, 0xf6, 0x5e, 0x23, 0xa6, 0x8c, 0x55, 0x36, + 0x74, 0x9d, 0x4b, 0xdf, 0xd2, 0xc4, 0x43, 0xf0, 0x2d, 0xc9, 0x75, 0x9e, 0xe1, 0x5f, 0xfa, 0x38, + 0x40, 0xb4, 0x5d, 0xc8, 0x67, 0x48, 0x65, 0xa6, 0xb9, 0x56, 0x70, 0x43, 0xc2, 0xb0, 0x82, 0x87, + 0xee, 0xc1, 0x9c, 0xa3, 0x66, 0x99, 0x12, 0x7b, 0x59, 0xa1, 0x13, 0xe0, 0x44, 0xba, 0x2a, 0x7e, + 0x9e, 0x98, 0x28, 0xc2, 0x49, 0x56, 0x74, 0x1a, 0x38, 0x51, 0x66, 0xb4, 0xb1, 0xfc, 0xa4, 0x32, + 0xbf, 0x5a, 0x3c, 0x0d, 0x64, 0x51, 0x80, 0x15, 0x26, 0x39, 0xce, 0xac, 0xe9, 0x42, 0xce, 0xac, + 0x01, 0x9c, 0xf7, 0x49, 0xe8, 0x1f, 0x34, 0x0e, 0x4c, 0xf6, 0x4a, 0xa1, 0x1f, 0xb2, 0xb4, 0x64, + 0x95, 0x62, 0x97, 0x04, 0xf0, 0x30, 0x29, 0x9c, 0x45, 0x3f, 0x21, 0x27, 0x67, 0x8e, 0x95, 0x93, + 0x9f, 0x80, 0x6a, 0x48, 0xcc, 0x1d, 0xd7, 0x36, 0x0d, 0xa7, 0xd5, 0x14, 0x17, 0x79, 0xe3, 0x25, + 0x1f, 0x83, 0xb0, 0x8a, 0x87, 0xea, 0x30, 0x31, 0xb0, 0x2d, 0xb1, 0x59, 0xfc, 0x98, 0xb4, 0x32, + 0x5a, 0xcd, 0xfb, 0x87, 0xb5, 0xf7, 0xc7, 0xde, 0x21, 0xf9, 0x55, 0x57, 0xfb, 0xbb, 0xdd, 0xab, + 0xe1, 0x41, 0x9f, 0x04, 0x2b, 0x9b, 0xad, 0x26, 0xa6, 0x95, 0xb3, 0x1c, 0x7d, 0xb3, 0x27, 0x70, + 0xf4, 0xfd, 0x8a, 0x06, 0xe7, 0x8d, 0xb4, 0x81, 0x44, 0x82, 0xa5, 0xb9, 0xe2, 0x42, 0x37, 0xdb, + 0xe8, 0x8a, 0x53, 0x89, 0xac, 0x0e, 0xb3, 0xc3, 0x59, 0x6d, 0xd0, 0xff, 0x48, 0x13, 0x0a, 0xfd, + 0x19, 0x7a, 0x72, 0x4e, 0xdb, 0xfc, 0xd5, 0x6f, 0x01, 0xc4, 0x5b, 0xc0, 0xd8, 0xbe, 0xae, 0x1f, + 0x95, 0xe1, 0xe2, 0xb8, 0x67, 0xc8, 0x2c, 0x61, 0x1a, 0x7b, 0x88, 0x62, 0x75, 0x3b, 0x24, 0xfe, + 0xed, 0xdb, 0xeb, 0x32, 0x4f, 0x7f, 0xc1, 0x8c, 0x6d, 0xf1, 0x3b, 0x26, 0x43, 0x14, 0x71, 0x0e, + 0x27, 0xb6, 0xfd, 0x89, 0xe4, 0xe1, 0xd8, 0x08, 0x49, 0x7d, 0xe0, 0x07, 0xa1, 0x08, 0x7f, 0xe5, + 0xdb, 0x5f, 0x1a, 0x88, 0x87, 0xf1, 0xd3, 0x44, 0xf8, 0xa3, 0x18, 0x93, 0xec, 0x69, 0xcf, 0x21, + 0x22, 0xfc, 0x65, 0x8c, 0x61, 0x7c, 0x95, 0x88, 0x7c, 0x0a, 0x94, 0x09, 0xeb, 0x14, 0x91, 0xf8, + 0x9d, 0xd0, 0x61, 0x7c, 0x64, 0xc1, 0xe3, 0x3e, 0x31, 0xbd, 0x5e, 0x8f, 0xb8, 0x16, 0x4f, 0xb5, + 0x69, 0xf8, 0x5d, 0xdb, 0xbd, 0xe6, 0x1b, 0x0c, 0x51, 0xbc, 0x37, 0x7a, 0xe5, 0xe8, 0xb0, 0xf6, + 0x38, 0x3e, 0x06, 0x0f, 0x1f, 0x4b, 0x05, 0xf5, 0xe0, 0xdc, 0x80, 0xa5, 0x03, 0xf2, 0x5b, 0x6e, + 0x48, 0xfc, 0x3d, 0xc3, 0x29, 0xf8, 0xd4, 0x0b, 0x13, 0x16, 0x9b, 0x49, 0x52, 0x38, 0x4d, 0x1b, + 0x1d, 0x50, 0x39, 0x2c, 0x9a, 0xa3, 0xb0, 0xac, 0x14, 0x4f, 0x29, 0x88, 0x87, 0xc9, 0xe1, 0x2c, + 0x1e, 0xfa, 0xaf, 0x68, 0x20, 0x4e, 0xcb, 0xa8, 0x55, 0xaf, 0xb8, 0x26, 0x2a, 0xef, 0xfc, 0x43, + 0xe3, 0xff, 0x5e, 0x03, 0x41, 0x81, 0x25, 0x72, 0x1b, 0x29, 0x0d, 0xd8, 0x83, 0xdf, 0x81, 0x8e, + 0x13, 0x91, 0x4d, 0xe4, 0x25, 0x22, 0x3b, 0xad, 0xac, 0x5e, 0xbf, 0xad, 0x41, 0xfa, 0x7d, 0x45, + 0xf4, 0x24, 0x4c, 0x8b, 0x4b, 0x5b, 0xe2, 0xea, 0x07, 0x8f, 0x4d, 0xe4, 0x45, 0x38, 0x82, 0x25, + 0x35, 0xf7, 0x31, 0xee, 0x78, 0x64, 0xc7, 0xdb, 0x1f, 0xaf, 0xb9, 0xeb, 0xdf, 0x9b, 0x87, 0x29, + 0x7e, 0xcd, 0x88, 0xca, 0xb4, 0x8c, 0x50, 0xa6, 0x9b, 0xc5, 0x2f, 0x32, 0x15, 0x88, 0x58, 0x4a, + 0xe4, 0x9c, 0x29, 0x1d, 0x9b, 0x73, 0x06, 0xf3, 0x24, 0x83, 0x63, 0x78, 0x6b, 0x1a, 0xb8, 0x25, + 0xf2, 0xda, 0x8b, 0x04, 0x83, 0x28, 0x4c, 0xb8, 0x31, 0x26, 0x8b, 0xa7, 0x4f, 0xe4, 0x1d, 0xa0, + 0x38, 0x33, 0xe6, 0x8f, 0x71, 0x64, 0xc4, 0xf7, 0x3a, 0xca, 0xc5, 0x4f, 0x0d, 0x44, 0x97, 0x8f, + 0x70, 0xaf, 0x43, 0x2e, 0xa4, 0xa9, 0xdc, 0x85, 0xb4, 0x0d, 0xd3, 0x62, 0x29, 0x08, 0xe1, 0xf8, + 0xe2, 0x18, 0x09, 0x04, 0x95, 0x5b, 0xc0, 0xbc, 0x00, 0x47, 0xc4, 0xe9, 0x8e, 0xdb, 0x33, 0xf6, + 0xed, 0xde, 0xa0, 0xc7, 0x24, 0x62, 0x59, 0x45, 0x65, 0xc5, 0x38, 0x82, 0x33, 0x54, 0x7e, 0xd8, + 0xc2, 0x14, 0x4b, 0x15, 0x55, 0xbc, 0xcb, 0x12, 0xc1, 0xd1, 0x1b, 0x50, 0xe9, 0x19, 0xfb, 0x9d, + 0x81, 0xdf, 0x25, 0xc2, 0x81, 0x91, 0xaf, 0xf2, 0x0c, 0x42, 0xdb, 0x59, 0xa1, 0xe6, 0x50, 0xe8, + 0xaf, 0xb4, 0xdc, 0xf0, 0xb6, 0xdf, 0x09, 0x7d, 0x99, 0xd8, 0x6c, 0x5d, 0x50, 0xc1, 0x92, 0x1e, + 0x72, 0x60, 0xbe, 0x67, 0xec, 0x6f, 0xba, 0x86, 0x7c, 0x3e, 0xa2, 0x5a, 0x90, 0x03, 0xf3, 0xe2, + 0xae, 0x27, 0x68, 0xe1, 0x14, 0xed, 0x0c, 0x87, 0xf1, 0xec, 0x69, 0x39, 0x8c, 0x57, 0x65, 0x4c, + 0x08, 0xd7, 0x63, 0x1f, 0xcd, 0x3a, 0x96, 0x39, 0x3e, 0xde, 0xe3, 0x4d, 0x19, 0xef, 0x31, 0x5f, + 0xdc, 0xcb, 0x7b, 0x4c, 0xac, 0xc7, 0x00, 0xaa, 0x54, 0xe1, 0xe4, 0xa5, 0xc1, 0xd2, 0xb9, 0xe2, + 0x5e, 0x86, 0xa6, 0x24, 0xa3, 0x24, 0x77, 0x8e, 0x49, 0x63, 0x95, 0x0f, 0xba, 0xcd, 0x9f, 0x17, + 0x70, 0x48, 0x18, 0xa3, 0x30, 0x03, 0x67, 0x81, 0x3b, 0x92, 0xa2, 0xd7, 0x00, 0x86, 0x10, 0x70, + 0x76, 0x3d, 0xaa, 0xa2, 0xf2, 0x60, 0xf4, 0xc5, 0x38, 0xf9, 0x40, 0xe2, 0xa2, 0xd7, 0x5f, 0xd3, + 0x60, 0x81, 0xbf, 0x5c, 0xd5, 0xf0, 0x7a, 0x7d, 0xcf, 0x25, 0x74, 0x58, 0x10, 0xeb, 0xd3, 0xcf, + 0x14, 0x97, 0x0d, 0x9d, 0x14, 0x45, 0x71, 0x9e, 0x96, 0x2a, 0xc5, 0x43, 0x9c, 0xd1, 0xef, 0x68, + 0xb0, 0xd4, 0xcb, 0xc9, 0x9d, 0xbc, 0x74, 0xbe, 0x78, 0x60, 0xdb, 0x83, 0xf2, 0x31, 0xf3, 0xd7, + 0xf4, 0x1e, 0x84, 0x85, 0x73, 0xdb, 0x36, 0x6e, 0xf8, 0xeb, 0x38, 0x17, 0xe0, 0x7e, 0x0a, 0x16, + 0xd2, 0x7b, 0x80, 0xfa, 0x20, 0x82, 0x76, 0xaa, 0x0f, 0x22, 0xe8, 0x2f, 0xc1, 0xa5, 0xec, 0x31, + 0xa7, 0x9a, 0x16, 0x7b, 0x59, 0x44, 0x58, 0x38, 0x71, 0x6e, 0x3e, 0x5a, 0x88, 0x39, 0xac, 0xfe, + 0xd1, 0x6f, 0xff, 0xf0, 0xf2, 0xfb, 0xbe, 0xfb, 0xc3, 0xcb, 0xef, 0xfb, 0xfe, 0x0f, 0x2f, 0xbf, + 0xef, 0x4b, 0x47, 0x97, 0xb5, 0x6f, 0x1f, 0x5d, 0xd6, 0xbe, 0x7b, 0x74, 0x59, 0xfb, 0xfe, 0xd1, + 0x65, 0xed, 0xbf, 0x1c, 0x5d, 0xd6, 0x7e, 0xf1, 0xbf, 0x5e, 0x7e, 0xdf, 0x1b, 0xd3, 0xa2, 0x45, + 0x7f, 0x1e, 0x00, 0x00, 0xff, 0xff, 0x41, 0x5c, 0xf3, 0xd2, 0x97, 0xb3, 0x00, 0x00, } func (m *Addon) Marshal() (dAtA []byte, err error) { @@ -5661,6 +5664,25 @@ func (m *ClusterAutoscaler) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.MaxNodeProvisionTime != nil { + { + size, err := m.MaxNodeProvisionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if m.Expander != nil { + i -= len(*m.Expander) + copy(dAtA[i:], *m.Expander) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Expander))) + i-- + dAtA[i] = 0x3a + } if m.ScanInterval != nil { { size, err := m.ScanInterval.MarshalToSizedBuffer(dAtA[:i]) @@ -12913,6 +12935,14 @@ func (m *ClusterAutoscaler) Size() (n int) { l = m.ScanInterval.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Expander != nil { + l = len(*m.Expander) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.MaxNodeProvisionTime != nil { + l = m.MaxNodeProvisionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -15726,6 +15756,8 @@ func (this *ClusterAutoscaler) String() string { `ScaleDownUnneededTime:` + strings.Replace(fmt.Sprintf("%v", this.ScaleDownUnneededTime), "Duration", "v11.Duration", 1) + `,`, `ScaleDownUtilizationThreshold:` + valueToStringGenerated(this.ScaleDownUtilizationThreshold) + `,`, `ScanInterval:` + strings.Replace(fmt.Sprintf("%v", this.ScanInterval), "Duration", "v11.Duration", 1) + `,`, + `Expander:` + valueToStringGenerated(this.Expander) + `,`, + `MaxNodeProvisionTime:` + strings.Replace(fmt.Sprintf("%v", this.MaxNodeProvisionTime), "Duration", "v11.Duration", 1) + `,`, `}`, }, "") return s @@ -20588,6 +20620,75 @@ func (m *ClusterAutoscaler) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Expander", 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 := ExpanderMode(dAtA[iNdEx:postIndex]) + m.Expander = &s + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxNodeProvisionTime", 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.MaxNodeProvisionTime == nil { + m.MaxNodeProvisionTime = &v11.Duration{} + } + if err := m.MaxNodeProvisionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto index e6752002f..50174abb9 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 @@ -316,7 +316,7 @@ message ClusterAutoscaler { // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration scaleDownDelayAfterAdd = 1; - // ScaleDownDelayAfterDelete how long after node deletion that scale down evaluation resumes, defaults to scanInterval (defaults to ScanInterval). + // ScaleDownDelayAfterDelete how long after node deletion that scale down evaluation resumes, defaults to scanInterval (default: 0 secs). // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration scaleDownDelayAfterDelete = 2; @@ -328,13 +328,22 @@ message ClusterAutoscaler { // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration scaleDownUnneededTime = 4; - // ScaleDownUtilizationThreshold defines the threshold in % under which a node is being removed + // ScaleDownUtilizationThreshold defines the threshold in fraction (0.0 - 1.0) under which a node is being removed (default: 0.5). // +optional optional double scaleDownUtilizationThreshold = 5; // ScanInterval how often cluster is reevaluated for scale up or down (default: 10 secs). // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration scanInterval = 6; + + // Expander defines the algorithm to use during scale up (default: least-waste). + // See: https://github.com/gardener/autoscaler/blob/machine-controller-manager-provider/cluster-autoscaler/FAQ.md#what-are-expanders. + // +optional + optional string expander = 7; + + // MaxNodeProvisionTime defines how long CA waits for node to be provisioned (default: 20 mins). + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration maxNodeProvisionTime = 8; } // ClusterInfo contains information about the Plant cluster @@ -464,11 +473,13 @@ message ControllerRegistration { message ControllerRegistrationDeployment { // Type is the deployment type. // Deprecated: Declare type via `ControllerDeployment` instead. + // ATTENTION: This field will be deleted with Gardener v1.32. // +optional optional string type = 1; // ProviderConfig contains type-specific configuration. // Deprecated: Use `DeploymentRefs` instead. + // ATTENTION: This field will be deleted with Gardener v1.32. // +optional optional k8s.io.apimachinery.pkg.runtime.RawExtension providerConfig = 2; diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go index a7c5a1e8e..afa294215 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go @@ -85,10 +85,12 @@ type DeploymentRef struct { type ControllerRegistrationDeployment struct { // Type is the deployment type. // Deprecated: Declare type via `ControllerDeployment` instead. + // ATTENTION: This field will be deleted with Gardener v1.32. // +optional Type *string `json:"type,omitempty" protobuf:"bytes,1,opt,name=type"` // ProviderConfig contains type-specific configuration. // Deprecated: Use `DeploymentRefs` instead. + // ATTENTION: This field will be deleted with Gardener v1.32. // +optional ProviderConfig *runtime.RawExtension `json:"providerConfig,omitempty" protobuf:"bytes,2,opt,name=providerConfig"` // Policy controls how the controller is deployed. It defaults to 'OnDemand'. 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 24f4d910c..5a788e436 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 @@ -121,6 +121,11 @@ type ShootSpec struct { ExposureClassName *string `json:"exposureClassName,omitempty" protobuf:"bytes,18,opt,name=exposureClassName"` } +// GetProviderType gets the type of the provider. +func (s *Shoot) GetProviderType() string { + return s.Spec.Provider.Type +} + // ShootStatus holds the most recently observed status of the Shoot cluster. type ShootStatus struct { // Conditions represents the latest available observations of a Shoots's current state. @@ -379,7 +384,7 @@ type ClusterAutoscaler struct { // ScaleDownDelayAfterAdd defines how long after scale up that scale down evaluation resumes (default: 1 hour). // +optional ScaleDownDelayAfterAdd *metav1.Duration `json:"scaleDownDelayAfterAdd,omitempty" protobuf:"bytes,1,opt,name=scaleDownDelayAfterAdd"` - // ScaleDownDelayAfterDelete how long after node deletion that scale down evaluation resumes, defaults to scanInterval (defaults to ScanInterval). + // ScaleDownDelayAfterDelete how long after node deletion that scale down evaluation resumes, defaults to scanInterval (default: 0 secs). // +optional ScaleDownDelayAfterDelete *metav1.Duration `json:"scaleDownDelayAfterDelete,omitempty" protobuf:"bytes,2,opt,name=scaleDownDelayAfterDelete"` // ScaleDownDelayAfterFailure how long after scale down failure that scale down evaluation resumes (default: 3 mins). @@ -388,14 +393,42 @@ type ClusterAutoscaler struct { // ScaleDownUnneededTime defines how long a node should be unneeded before it is eligible for scale down (default: 30 mins). // +optional ScaleDownUnneededTime *metav1.Duration `json:"scaleDownUnneededTime,omitempty" protobuf:"bytes,4,opt,name=scaleDownUnneededTime"` - // ScaleDownUtilizationThreshold defines the threshold in % under which a node is being removed + // ScaleDownUtilizationThreshold defines the threshold in fraction (0.0 - 1.0) under which a node is being removed (default: 0.5). // +optional ScaleDownUtilizationThreshold *float64 `json:"scaleDownUtilizationThreshold,omitempty" protobuf:"fixed64,5,opt,name=scaleDownUtilizationThreshold"` // ScanInterval how often cluster is reevaluated for scale up or down (default: 10 secs). // +optional ScanInterval *metav1.Duration `json:"scanInterval,omitempty" protobuf:"bytes,6,opt,name=scanInterval"` + // Expander defines the algorithm to use during scale up (default: least-waste). + // See: https://github.com/gardener/autoscaler/blob/machine-controller-manager-provider/cluster-autoscaler/FAQ.md#what-are-expanders. + // +optional + Expander *ExpanderMode `json:"expander,omitempty" protobuf:"bytes,7,opt,name=expander"` + // MaxNodeProvisionTime defines how long CA waits for node to be provisioned (default: 20 mins). + // +optional + MaxNodeProvisionTime *metav1.Duration `json:"maxNodeProvisionTime,omitempty" protobuf:"bytes,8,opt,name=maxNodeProvisionTime"` } +// ExpanderMode is type used for Expander values +type ExpanderMode string + +const ( + // ClusterAutoscalerExpanderLeastWaste selects the node group that will have the least idle CPU (if tied, unused memory) after scale-up. + // This is useful when you have different classes of nodes, for example, high CPU or high memory nodes, and + // only want to expand those when there are pending pods that need a lot of those resources. + // This is the default value. + ClusterAutoscalerExpanderLeastWaste ExpanderMode = "least-waste" + // ClusterAutoscalerExpanderMostPods selects the node group that would be able to schedule the most pods when scaling up. + // This is useful when you are using nodeSelector to make sure certain pods land on certain nodes. + // Note that this won't cause the autoscaler to select bigger nodes vs. smaller, as it can add multiple smaller nodes at once. + ClusterAutoscalerExpanderMostPods ExpanderMode = "most-pods" + // ClusterAutoscalerExpanderPriority selects the node group that has the highest priority assigned by the user. For configurations, + // See: https://github.com/gardener/autoscaler/blob/machine-controller-manager-provider/cluster-autoscaler/expander/priority/readme.md + ClusterAutoscalerExpanderPriority ExpanderMode = "priority" + // ClusterAutoscalerExpanderRandom should be used when you don't have a particular need + // for the node groups to scale differently. + ClusterAutoscalerExpanderRandom ExpanderMode = "random" +) + // VerticalPodAutoscaler contains the configuration flags for the Kubernetes vertical pod autoscaler. type VerticalPodAutoscaler struct { // Enabled specifies whether the Kubernetes VPA shall be enabled for the shoot cluster. 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 9231834f0..0c33f0819 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 @@ -1937,6 +1937,8 @@ func autoConvert_v1beta1_ClusterAutoscaler_To_core_ClusterAutoscaler(in *Cluster out.ScaleDownUnneededTime = (*metav1.Duration)(unsafe.Pointer(in.ScaleDownUnneededTime)) out.ScaleDownUtilizationThreshold = (*float64)(unsafe.Pointer(in.ScaleDownUtilizationThreshold)) out.ScanInterval = (*metav1.Duration)(unsafe.Pointer(in.ScanInterval)) + out.Expander = (*core.ExpanderMode)(unsafe.Pointer(in.Expander)) + out.MaxNodeProvisionTime = (*metav1.Duration)(unsafe.Pointer(in.MaxNodeProvisionTime)) return nil } @@ -1952,6 +1954,8 @@ func autoConvert_core_ClusterAutoscaler_To_v1beta1_ClusterAutoscaler(in *core.Cl out.ScaleDownUnneededTime = (*metav1.Duration)(unsafe.Pointer(in.ScaleDownUnneededTime)) out.ScaleDownUtilizationThreshold = (*float64)(unsafe.Pointer(in.ScaleDownUtilizationThreshold)) out.ScanInterval = (*metav1.Duration)(unsafe.Pointer(in.ScanInterval)) + out.Expander = (*ExpanderMode)(unsafe.Pointer(in.Expander)) + out.MaxNodeProvisionTime = (*metav1.Duration)(unsafe.Pointer(in.MaxNodeProvisionTime)) 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 e542e8833..0f7d650f6 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 @@ -626,6 +626,16 @@ func (in *ClusterAutoscaler) DeepCopyInto(out *ClusterAutoscaler) { *out = new(metav1.Duration) **out = **in } + if in.Expander != nil { + in, out := &in.Expander, &out.Expander + *out = new(ExpanderMode) + **out = **in + } + if in.MaxNodeProvisionTime != nil { + in, out := &in.MaxNodeProvisionTime, &out.MaxNodeProvisionTime + *out = new(metav1.Duration) + **out = **in + } 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 f53fb9316..91ff95134 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 @@ -118,6 +118,9 @@ func SetObjectDefaults_Shoot(in *Shoot) { SetDefaults_NginxIngress(in.Spec.Addons.NginxIngress) } } + if in.Spec.Kubernetes.ClusterAutoscaler != nil { + SetDefaults_ClusterAutoscaler(in.Spec.Kubernetes.ClusterAutoscaler) + } if in.Spec.Kubernetes.VerticalPodAutoscaler != nil { SetDefaults_VerticalPodAutoscaler(in.Spec.Kubernetes.VerticalPodAutoscaler) } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/validation/shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/validation/shoot.go index dca80634b..3e71744ea 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/validation/shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/validation/shoot.go @@ -71,6 +71,12 @@ var ( string(core.CRINameContainerD), string(core.CRINameDocker), ) + availableClusterAutoscalerExpanderModes = sets.NewString( + string(core.ClusterAutoscalerExpanderLeastWaste), + string(core.ClusterAutoscalerExpanderMostPods), + string(core.ClusterAutoscalerExpanderPriority), + string(core.ClusterAutoscalerExpanderRandom), + ) // assymetric algorithms from https://datatracker.ietf.org/doc/html/rfc7518#section-3.1 availableOIDCSigningAlgs = sets.NewString( @@ -793,6 +799,14 @@ func ValidateClusterAutoscaler(autoScaler core.ClusterAutoscaler, fldPath *field allErrs = append(allErrs, field.Invalid(fldPath.Child("scaleDownUtilizationThreshold"), *threshold, "can not be greater than 1.0")) } } + if maxNodeProvisionTime := autoScaler.MaxNodeProvisionTime; maxNodeProvisionTime != nil && maxNodeProvisionTime.Duration < 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("maxNodeProvisionTime"), *maxNodeProvisionTime, "can not be negative")) + } + + if expander := autoScaler.Expander; expander != nil && !availableClusterAutoscalerExpanderModes.Has(string(*expander)) { + allErrs = append(allErrs, field.NotSupported(fldPath.Child("expander"), *expander, availableClusterAutoscalerExpanderModes.List())) + } + return allErrs } @@ -972,7 +986,7 @@ const ( ) // ValidateWorker validates the worker object. -func ValidateWorker(worker core.Worker, version string, fldPath *field.Path, inTemplate bool) field.ErrorList { +func ValidateWorker(worker core.Worker, kubernetesVersion string, fldPath *field.Path, inTemplate bool) field.ErrorList { allErrs := field.ErrorList{} allErrs = append(allErrs, validateDNS1123Label(worker.Name, fldPath.Child("name"))...) @@ -1015,7 +1029,7 @@ func ValidateWorker(worker core.Worker, version string, fldPath *field.Path, inT allErrs = append(allErrs, validateTaints(worker.Taints, fldPath.Child("taints"))...) } if worker.Kubernetes != nil && worker.Kubernetes.Kubelet != nil { - allErrs = append(allErrs, ValidateKubeletConfig(*worker.Kubernetes.Kubelet, version, fldPath.Child("kubernetes", "kubelet"))...) + allErrs = append(allErrs, ValidateKubeletConfig(*worker.Kubernetes.Kubelet, kubernetesVersion, fldPath.Child("kubernetes", "kubelet"))...) } if worker.CABundle != nil { @@ -1072,7 +1086,7 @@ func ValidateWorker(worker core.Worker, version string, fldPath *field.Path, inT } if worker.CRI != nil { - allErrs = append(allErrs, ValidateCRI(worker.CRI, fldPath.Child("cri"))...) + allErrs = append(allErrs, ValidateCRI(worker.CRI, kubernetesVersion, fldPath.Child("cri"))...) } return allErrs @@ -1466,9 +1480,15 @@ func IsNotMoreThan100Percent(intOrStringValue *intstr.IntOrString, fldPath *fiel } // ValidateCRI validates container runtime interface name and its container runtimes -func ValidateCRI(CRI *core.CRI, fldPath *field.Path) field.ErrorList { +func ValidateCRI(CRI *core.CRI, kubernetesVersion string, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} + k8sVersionIs123OrGreater, _ := versionutils.CompareVersions(kubernetesVersion, ">=", "1.23") + + if k8sVersionIs123OrGreater && CRI.Name == core.CRINameDocker { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("name"), "'docker' is only allowed for kubernetes versions < 1.23")) + } + if !availableWorkerCRINames.Has(string(CRI.Name)) { allErrs = append(allErrs, field.NotSupported(fldPath.Child("name"), CRI.Name, availableWorkerCRINames.List())) } 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 ed27c72d2..11f6ba5d7 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 @@ -626,6 +626,16 @@ func (in *ClusterAutoscaler) DeepCopyInto(out *ClusterAutoscaler) { *out = new(metav1.Duration) **out = **in } + if in.Expander != nil { + in, out := &in.Expander, &out.Expander + *out = new(ExpanderMode) + **out = **in + } + if in.MaxNodeProvisionTime != nil { + in, out := &in.MaxNodeProvisionTime, &out.MaxNodeProvisionTime + *out = new(metav1.Duration) + **out = **in + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go index 735b5e5dd..847982469 100644 --- a/vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/worker.go @@ -20,33 +20,15 @@ import ( "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) -} + "github.com/gardener/gardener/pkg/logger" +) // 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 diff --git a/vendor/github.com/gardener/gardener/pkg/features/features.go b/vendor/github.com/gardener/gardener/pkg/features/features.go index 56e8f9719..e0ed47a4b 100644 --- a/vendor/github.com/gardener/gardener/pkg/features/features.go +++ b/vendor/github.com/gardener/gardener/pkg/features/features.go @@ -65,13 +65,6 @@ const ( // alpha: v1.7.0 CachedRuntimeClients featuregate.Feature = "CachedRuntimeClients" - // MountHostCADirectories enables mounting common CA certificate directories in the Shoot API server pod that might be required for webhooks or OIDC. - // owner @danielfoehrKn - // alpha: v1.11.0 - // beta: v1.26.0 - // GA: v1.27.0 - MountHostCADirectories featuregate.Feature = "MountHostCADirectories" - // SeedChange enables updating the `spec.seedName` field during shoot validation from a non-empty value // in order to trigger shoot control plane migration. // owner: @stoyanr diff --git a/vendor/github.com/gardener/gardener/pkg/logger/logrus.go b/vendor/github.com/gardener/gardener/pkg/logger/logrus.go index 523213c65..906b7edaa 100644 --- a/vendor/github.com/gardener/gardener/pkg/logger/logrus.go +++ b/vendor/github.com/gardener/gardener/pkg/logger/logrus.go @@ -83,7 +83,7 @@ func AddWriter(logger *logrus.Logger, writer io.Writer) *logrus.Logger { // and the project in the Garden cluster to the output. If an is provided it will be printed for every // log message. // Example output: time="2017-06-08T13:00:49+02:00" level=info msg="Creating namespace in seed cluster" shoot=core/crazy-botany. -func NewShootLogger(logger *logrus.Logger, shoot, project string) *logrus.Entry { +func NewShootLogger(logger logrus.FieldLogger, shoot, project string) *logrus.Entry { return logger.WithField("shoot", fmt.Sprintf("%s/%s", project, shoot)) } diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/etcd/bootstrap.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/etcd/bootstrap.go index 869b31711..c61aefc06 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/etcd/bootstrap.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/etcd/bootstrap.go @@ -22,13 +22,13 @@ import ( v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" "github.com/gardener/gardener/pkg/client/kubernetes" "github.com/gardener/gardener/pkg/operation/botanist/component" - "github.com/gardener/gardener/pkg/utils" gutil "github.com/gardener/gardener/pkg/utils/gardener" "github.com/gardener/gardener/pkg/utils/imagevector" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" "github.com/gardener/gardener/pkg/utils/managedresources" - "github.com/Masterminds/semver" druidv1alpha1 "github.com/gardener/etcd-druid/api/v1alpha1" + "github.com/gardener/gardener-resource-manager/pkg/controller/garbagecollector/references" appsv1 "k8s.io/api/apps/v1" autoscalingv1 "k8s.io/api/autoscaling/v1" coordinationv1 "k8s.io/api/coordination/v1" @@ -39,6 +39,7 @@ import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" autoscalingv1beta2 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1beta2" "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/client" @@ -48,12 +49,12 @@ const ( // Druid is a constant for the name of the etcd-druid. Druid = "etcd-druid" - druidRBACName = "gardener.cloud:system:" + Druid - druidServiceAccountName = Druid - druidVPAName = Druid + "-vpa" - druidConfigMapImageVectorOverwriteName = Druid + "-imagevector-overwrite" - druidDeploymentName = Druid - managedResourceControlName = Druid + druidRBACName = "gardener.cloud:system:" + Druid + druidServiceAccountName = Druid + druidVPAName = Druid + "-vpa" + druidConfigMapImageVectorOverwriteNamePrefix = Druid + "-imagevector-overwrite" + druidDeploymentName = Druid + managedResourceControlName = Druid druidConfigMapImageVectorOverwriteDataKey = "images_overwrite.yaml" druidDeploymentVolumeMountPathImageVectorOverwrite = "/charts_overwrite" @@ -61,18 +62,11 @@ const ( ) // NewBootstrapper creates a new instance of DeployWaiter for the etcd bootstrapper. -func NewBootstrapper( - client client.Client, - namespace string, - image string, - kubernetesVersion *semver.Version, - imageVectorOverwrite *string, -) component.DeployWaiter { +func NewBootstrapper(c client.Client, namespace string, image string, imageVectorOverwrite *string) component.DeployWaiter { return &bootstrapper{ - client: client, + client: c, namespace: namespace, image: image, - kubernetesVersion: kubernetesVersion, imageVectorOverwrite: imageVectorOverwrite, } } @@ -81,7 +75,6 @@ type bootstrapper struct { client client.Client namespace string image string - kubernetesVersion *semver.Version imageVectorOverwrite *string } @@ -174,7 +167,7 @@ func (b *bootstrapper) Deploy(ctx context.Context) error { configMapImageVectorOverwrite = &corev1.ConfigMap{ ObjectMeta: metav1.ObjectMeta{ - Name: druidConfigMapImageVectorOverwriteName, + Name: druidConfigMapImageVectorOverwriteNamePrefix, Namespace: b.namespace, Labels: labels(), }, @@ -267,15 +260,15 @@ func (b *bootstrapper) Deploy(ctx context.Context) error { if b.imageVectorOverwrite != nil { configMapImageVectorOverwrite.Data = map[string]string{druidConfigMapImageVectorOverwriteDataKey: *b.imageVectorOverwrite} + utilruntime.Must(kutil.MakeUnique(configMapImageVectorOverwrite)) resourcesToAdd = append(resourcesToAdd, configMapImageVectorOverwrite) - metav1.SetMetaDataAnnotation(&deployment.Spec.Template.ObjectMeta, "checksum/configmap-imagevector-overwrite", utils.ComputeChecksum(configMapImageVectorOverwrite.Data)) deployment.Spec.Template.Spec.Volumes = append(deployment.Spec.Template.Spec.Volumes, corev1.Volume{ Name: druidDeploymentVolumeNameImageVectorOverwrite, VolumeSource: corev1.VolumeSource{ ConfigMap: &corev1.ConfigMapVolumeSource{ LocalObjectReference: corev1.LocalObjectReference{ - Name: druidConfigMapImageVectorOverwriteName, + Name: configMapImageVectorOverwrite.Name, }, }, }, @@ -289,6 +282,8 @@ func (b *bootstrapper) Deploy(ctx context.Context) error { Name: imagevector.OverrideEnv, Value: druidDeploymentVolumeMountPathImageVectorOverwrite + "/" + druidConfigMapImageVectorOverwriteDataKey, }) + + utilruntime.Must(references.InjectAnnotations(deployment)) } resources, err := registry.AddAllAndSerialize(append(resourcesToAdd, deployment)...) diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/etcd/etcd.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/etcd/etcd.go index 845013138..23367d203 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/etcd/etcd.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/etcd/etcd.go @@ -40,6 +40,7 @@ import ( "github.com/gardener/gardener/pkg/client/kubernetes" "github.com/gardener/gardener/pkg/controllerutils" "github.com/gardener/gardener/pkg/operation/botanist/component" + "github.com/gardener/gardener/pkg/operation/botanist/component/monitoring" "github.com/gardener/gardener/pkg/utils" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" @@ -275,12 +276,7 @@ func (e *etcd) Deploy(ctx context.Context) error { }, { PodSelector: &metav1.LabelSelector{ - // TODO: Replace below map with a function call to the to-be-introduced prometheus package. - MatchLabels: map[string]string{ - v1beta1constants.DeprecatedGardenRole: "monitoring", - v1beta1constants.LabelApp: "prometheus", - v1beta1constants.LabelRole: "monitoring", - }, + MatchLabels: monitoring.GetPrometheusLabels(), }, }, }, diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/kubescheduler/kube_scheduler.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/kubescheduler/kube_scheduler.go index 36a952d9c..5d0675a61 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/kubescheduler/kube_scheduler.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/kubescheduler/kube_scheduler.go @@ -31,9 +31,11 @@ import ( "github.com/Masterminds/semver" resourcesv1alpha1 "github.com/gardener/gardener-resource-manager/api/resources/v1alpha1" + "github.com/gardener/gardener-resource-manager/pkg/controller/garbagecollector/references" appsv1 "k8s.io/api/apps/v1" autoscalingv1 "k8s.io/api/autoscaling/v1" corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" @@ -59,6 +61,7 @@ const ( portNameMetrics = "metrics" dataKeyComponentConfig = "config.yaml" + volumeNameConfig = "kube-scheduler-config" volumeMountPathKubeconfig = "/var/lib/kube-scheduler" volumeMountPathServer = "/var/lib/kube-scheduler-server" volumeMountPathConfig = "/var/lib/kube-scheduler-config" @@ -117,8 +120,21 @@ func (k *kubeScheduler) Deploy(ctx context.Context) error { return fmt.Errorf("missing server secret information") } + componentConfigYAML, err := k.computeComponentConfig() + if err != nil { + return err + } + + configMap := &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: "kube-scheduler-config", + Namespace: k.namespace, + }, + Data: map[string]string{dataKeyComponentConfig: componentConfigYAML}, + } + utilruntime.Must(kutil.MakeUnique(configMap)) + var ( - configMap = k.emptyConfigMap() vpa = k.emptyVPA() service = k.emptyService() deployment = k.emptyDeployment() @@ -131,15 +147,7 @@ func (k *kubeScheduler) Deploy(ctx context.Context) error { command = k.computeCommand(port) ) - componentConfigYAML, componentConfigChecksum, err := k.computeComponentConfig() - if err != nil { - return err - } - - if _, err := controllerutils.GetAndCreateOrMergePatch(ctx, k.client, configMap, func() error { - configMap.Data = map[string]string{dataKeyComponentConfig: componentConfigYAML} - return nil - }); err != nil { + if err := k.client.Create(ctx, configMap); err != nil && !apierrors.IsAlreadyExists(err) { return err } @@ -170,7 +178,6 @@ func (k *kubeScheduler) Deploy(ctx context.Context) error { deployment.Spec.Template = corev1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ Annotations: map[string]string{ - "checksum/configmap-componentconfig": componentConfigChecksum, "checksum/secret-" + k.secrets.Kubeconfig.Name: k.secrets.Kubeconfig.Checksum, "checksum/secret-" + k.secrets.Server.Name: k.secrets.Server.Checksum, }, @@ -232,7 +239,7 @@ func (k *kubeScheduler) Deploy(ctx context.Context) error { MountPath: volumeMountPathServer, }, { - Name: configMap.Name, + Name: volumeNameConfig, MountPath: volumeMountPathConfig, }, }, @@ -256,7 +263,7 @@ func (k *kubeScheduler) Deploy(ctx context.Context) error { }, }, { - Name: configMap.Name, + Name: volumeNameConfig, VolumeSource: corev1.VolumeSource{ ConfigMap: &corev1.ConfigMapVolumeSource{ LocalObjectReference: corev1.LocalObjectReference{ @@ -268,6 +275,8 @@ func (k *kubeScheduler) Deploy(ctx context.Context) error { }, }, } + + utilruntime.Must(references.InjectAnnotations(deployment)) return nil }); err != nil { return err @@ -298,7 +307,12 @@ func (k *kubeScheduler) Deploy(ctx context.Context) error { return err } - return k.reconcileShootResources(ctx) + if err := k.reconcileShootResources(ctx); err != nil { + return err + } + + // TODO(rfranzke): Remove in a future release. + return kutil.DeleteObject(ctx, k.client, &corev1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Name: "kube-scheduler-config", Namespace: k.namespace}}) } func getLabels() map[string]string { @@ -313,10 +327,6 @@ func (k *kubeScheduler) Wait(_ context.Context) error { return nil } func (k *kubeScheduler) WaitCleanup(_ context.Context) error { return nil } func (k *kubeScheduler) SetSecrets(secrets Secrets) { k.secrets = secrets } -func (k *kubeScheduler) emptyConfigMap() *corev1.ConfigMap { - return &corev1.ConfigMap{ObjectMeta: metav1.ObjectMeta{Name: "kube-scheduler-config", Namespace: k.namespace}} -} - func (k *kubeScheduler) emptyVPA() *autoscalingv1beta2.VerticalPodAutoscaler { return &autoscalingv1beta2.VerticalPodAutoscaler{ObjectMeta: metav1.ObjectMeta{Name: "kube-scheduler-vpa", Namespace: k.namespace}} } @@ -351,7 +361,7 @@ func (k *kubeScheduler) computeEnvironmentVariables() []corev1.EnvVar { return nil } -func (k *kubeScheduler) computeComponentConfig() (string, string, error) { +func (k *kubeScheduler) computeComponentConfig() (string, error) { var apiVersion string if versionConstraintK8sGreaterEqual119.Check(k.version) { apiVersion = "kubescheduler.config.k8s.io/v1beta1" @@ -363,10 +373,10 @@ func (k *kubeScheduler) computeComponentConfig() (string, string, error) { var componentConfigYAML bytes.Buffer if err := componentConfigTemplate.Execute(&componentConfigYAML, map[string]string{"apiVersion": apiVersion}); err != nil { - return "", "", err + return "", err } - return componentConfigYAML.String(), utils.ComputeSHA256Hex(componentConfigYAML.Bytes()), nil + return componentConfigYAML.String(), nil } func (k *kubeScheduler) computeCommand(port int32) []string { diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/monitoring/blackbox_exporter.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/monitoring/blackbox_exporter.go new file mode 100644 index 000000000..b02975c26 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/monitoring/blackbox_exporter.go @@ -0,0 +1,18 @@ +// 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 monitoring + +// BlackboxExporterPort is the port of the blackbox-exporter. +const BlackboxExporterPort = 9115 diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/monitoring/prometheus.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/monitoring/prometheus.go new file mode 100644 index 000000000..3619601bd --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/monitoring/prometheus.go @@ -0,0 +1,28 @@ +// 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 monitoring + +import ( + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" +) + +// GetPrometheusLabels returns the labels for the Prometheus. +func GetPrometheusLabels() map[string]string { + return map[string]string{ + v1beta1constants.DeprecatedGardenRole: "monitoring", + v1beta1constants.LabelApp: "prometheus", + v1beta1constants.LabelRole: "monitoring", + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/operation/common/utils.go b/vendor/github.com/gardener/gardener/pkg/operation/common/utils.go index dff5c14cd..7113e58cc 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/common/utils.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/common/utils.go @@ -37,6 +37,7 @@ import ( rbacv1 "k8s.io/api/rbac/v1" schedulingv1 "k8s.io/api/scheduling/v1" schedulingv1beta1 "k8s.io/api/scheduling/v1beta1" + apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" autoscalingv1beta2 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1beta2" @@ -54,6 +55,17 @@ func GetSecretKeysWithPrefix(kind string, m map[string]*corev1.Secret) []string return result } +// FilterEntriesByPrefix returns a list of strings which begin with the given prefix. +func FilterEntriesByPrefix(prefix string, entries []string) []string { + var result []string + for _, entry := range entries { + if strings.HasPrefix(entry, prefix) { + result = append(result, entry) + } + } + 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. @@ -106,50 +118,39 @@ func GenerateAddonConfig(values map[string]interface{}, enabled bool) map[string } // 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, v1beta1constants.GardenRoleHvpa), - } +func DeleteHvpa(ctx context.Context, c client.Client, namespace string) error { + labelSelectorHVPA := client.MatchingLabels{v1beta1constants.GardenRole: v1beta1constants.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 { + crdList := &apiextensionsv1.CustomResourceDefinitionList{} + if err := c.List(ctx, crdList, labelSelectorHVPA); 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 { + if err := c.Delete(ctx, &crd); 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 { + if err := c.DeleteAllOf(ctx, &appsv1.Deployment{}, client.InNamespace(namespace), labelSelectorHVPA, client.PropagationPolicy(metav1.DeletePropagationForeground)); 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 { + if err := c.DeleteAllOf(ctx, &rbacv1.ClusterRole{}, labelSelectorHVPA); 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 { + if err := c.DeleteAllOf(ctx, &rbacv1.ClusterRoleBinding{}, labelSelectorHVPA); 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 + return c.DeleteAllOf(ctx, &corev1.ServiceAccount{}, client.InNamespace(namespace), labelSelectorHVPA) } // DeleteVpa delete all resources required for the VPA in the given namespace. 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 c3582e9ca..6fa075972 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go @@ -179,14 +179,14 @@ func WaitUntilResourceDeletedWithDefaults(ctx context.Context, c client.Client, // 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) { +func WaitUntilLoadBalancerIsReady(ctx context.Context, c client.Client, namespace, name string, timeout time.Duration, logger logrus.FieldLogger) (string, error) { var ( loadBalancerIngress string service = &corev1.Service{ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: namespace}} ) if err := retry.UntilTimeout(ctx, 5*time.Second, timeout, func(ctx context.Context) (done bool, err error) { - loadBalancerIngress, err = GetLoadBalancerIngress(ctx, kubeClient.Client(), service) + loadBalancerIngress, err = GetLoadBalancerIngress(ctx, c, service) if err != nil { logger.Infof("Waiting until the %s service is ready...", name) // TODO(AC): This is a quite optimistic check / we should differentiate here @@ -197,7 +197,7 @@ func WaitUntilLoadBalancerIsReady(ctx context.Context, kubeClient kubernetes.Int logger.Errorf("error %v occurred while waiting for load balancer to be ready", err) // use API reader here, we don't want to cache all events - eventsErrorMessage, err2 := FetchEventMessages(ctx, kubeClient.Client().Scheme(), kubeClient.Client(), service, corev1.EventTypeWarning, 2) + eventsErrorMessage, err2 := FetchEventMessages(ctx, c.Scheme(), c, service, corev1.EventTypeWarning, 2) if err2 != nil { logger.Errorf("error %v occurred while fetching events for load balancer service", err2) return "", fmt.Errorf("'%w' occurred but could not fetch events for more information", err) 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 c84773700..4e5035dc7 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/object.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/object.go @@ -116,11 +116,11 @@ func deepCopyIntoObject(dest, src runtime.Object) { reflect.ValueOf(dest).Elem().Set(reflect.ValueOf(src.DeepCopyObject()).Elem()) } -// MakeImmutable takes either a *corev1.ConfigMap or a *corev1.Secret object and makes it immutable, i.e., it sets +// MakeUnique takes either a *corev1.ConfigMap or a *corev1.Secret object and makes it immutable, i.e., it sets // .immutable=true, computes a checksum based on .data, and appends the first 8 characters of the computed checksum // to the name of the object. Additionally, it injects the `resources.gardener.cloud/garbage-collectable-reference=true` // label. -func MakeImmutable(obj runtime.Object) error { +func MakeUnique(obj runtime.Object) error { var ( numberOfChecksumChars = 8 prependHyphen = func(name string) string { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificates.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificates.go index c99756442..1e3bedfdb 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificates.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/certificates.go @@ -32,7 +32,6 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/gardener/gardener/pkg/client/kubernetes" "github.com/gardener/gardener/pkg/utils" "github.com/gardener/gardener/pkg/utils/infodata" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" @@ -346,7 +345,7 @@ func signCertificate(certificateTemplate *x509.Certificate, privateKey *rsa.Priv return utils.EncodeCertificate(certificate), nil } -func generateCA(ctx context.Context, k8sClusterClient kubernetes.Interface, config *CertificateSecretConfig, namespace string) (*corev1.Secret, *Certificate, error) { +func generateCA(ctx context.Context, c client.Client, config *CertificateSecretConfig, namespace string) (*corev1.Secret, *Certificate, error) { certificate, err := config.GenerateCertificate() if err != nil { return nil, nil, err @@ -361,7 +360,7 @@ func generateCA(ctx context.Context, k8sClusterClient kubernetes.Interface, conf Data: certificate.SecretData(), } - if err := k8sClusterClient.Client().Create(ctx, secret); err != nil { + if err := c.Create(ctx, secret); err != nil { return nil, nil, err } return secret, certificate, nil @@ -378,7 +377,7 @@ func loadCA(name string, existingSecret *corev1.Secret) (*corev1.Secret, *Certif // GenerateCertificateAuthorities get a map of wanted certificates and check If they exist in the existingSecretsMap based on the keys in the map. If they exist it get only the certificate from the corresponding // existing secret and makes a certificate DataInterface from the existing secret. If there is no existing secret contaning the wanted certificate, we make one certificate and with it we deploy in K8s cluster // a secret with that certificate and then return the newly existing secret. The function returns a map of secrets contaning the wanted CA, a map with the wanted CA certificate and an error. -func GenerateCertificateAuthorities(ctx context.Context, k8sClusterClient kubernetes.Interface, existingSecretsMap map[string]*corev1.Secret, wantedCertificateAuthorities map[string]*CertificateSecretConfig, namespace string) (map[string]*corev1.Secret, map[string]*Certificate, error) { +func GenerateCertificateAuthorities(ctx context.Context, c client.Client, existingSecretsMap map[string]*corev1.Secret, wantedCertificateAuthorities map[string]*CertificateSecretConfig, namespace string) (map[string]*corev1.Secret, map[string]*Certificate, error) { type caOutput struct { secret *corev1.Secret certificate *Certificate @@ -399,7 +398,7 @@ func GenerateCertificateAuthorities(ctx context.Context, k8sClusterClient kubern if existingSecret, ok := existingSecretsMap[name]; !ok { go func(config *CertificateSecretConfig) { defer wg.Done() - secret, certificate, err := generateCA(ctx, k8sClusterClient, config, namespace) + secret, certificate, err := generateCA(ctx, c, config, namespace) results <- &caOutput{secret, certificate, err} }(config) } else { diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/generate.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/generate.go index d994f4709..c5e18f378 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/generate.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/generate.go @@ -19,7 +19,6 @@ import ( "fmt" "sync" - "github.com/gardener/gardener/pkg/client/kubernetes" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "sigs.k8s.io/controller-runtime/pkg/client" @@ -27,8 +26,8 @@ import ( // GenerateClusterSecrets try to deploy in the k8s cluster each secret in the wantedSecretsList. If the secret already exist it jumps to the next one. // The function returns a map with all of the successfully deployed wanted secrets plus those already deployed (only from the wantedSecretsList). -func GenerateClusterSecrets(ctx context.Context, k8sClusterClient kubernetes.Interface, existingSecretsMap map[string]*corev1.Secret, wantedSecretsList []ConfigInterface, namespace string) (map[string]*corev1.Secret, error) { - return GenerateClusterSecretsWithFunc(ctx, k8sClusterClient.Client(), existingSecretsMap, wantedSecretsList, namespace, func(s ConfigInterface) (DataInterface, error) { +func GenerateClusterSecrets(ctx context.Context, c client.Client, existingSecretsMap map[string]*corev1.Secret, wantedSecretsList []ConfigInterface, namespace string) (map[string]*corev1.Secret, error) { + return GenerateClusterSecretsWithFunc(ctx, c, existingSecretsMap, wantedSecretsList, namespace, func(s ConfigInterface) (DataInterface, error) { return s.Generate() }) } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/secrets.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/secrets.go index b69b2c553..629b1282b 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/secrets.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/secrets.go @@ -56,14 +56,14 @@ func (s *Secrets) Deploy( } // Generate CAs - _, cas, err := GenerateCertificateAuthorities(ctx, gcs, existingSecrets, s.CertificateSecretConfigs, namespace) + _, cas, err := GenerateCertificateAuthorities(ctx, gcs.Client(), existingSecrets, s.CertificateSecretConfigs, namespace) if err != nil { return nil, fmt.Errorf("could not generate CA secrets in namespace '%s': %w", namespace, err) } // Generate cluster secrets secretConfigs := s.SecretConfigsFunc(cas, namespace) - clusterSecrets, err := GenerateClusterSecrets(ctx, gcs, existingSecrets, secretConfigs, namespace) + clusterSecrets, err := GenerateClusterSecrets(ctx, gcs.Client(), existingSecrets, secretConfigs, namespace) if err != nil { return nil, fmt.Errorf("could not generate cluster secrets in namespace '%s': %w", namespace, err) } diff --git a/vendor/modules.txt b/vendor/modules.txt index 51bd4451a..3e4f840a8 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -114,7 +114,7 @@ github.com/gardener/etcd-druid/api/v1alpha1 # github.com/gardener/external-dns-management v0.7.18 github.com/gardener/external-dns-management/pkg/apis/dns github.com/gardener/external-dns-management/pkg/apis/dns/v1alpha1 -# github.com/gardener/gardener v1.29.0 +# github.com/gardener/gardener v1.30.1-0.20210827103926-aa88e5700bb0 ## explicit github.com/gardener/gardener/.github github.com/gardener/gardener/.github/ISSUE_TEMPLATE @@ -225,6 +225,7 @@ github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operati github.com/gardener/gardener/pkg/operation/botanist/component/kubecontrollermanager github.com/gardener/gardener/pkg/operation/botanist/component/kubescheduler github.com/gardener/gardener/pkg/operation/botanist/component/logging +github.com/gardener/gardener/pkg/operation/botanist/component/monitoring github.com/gardener/gardener/pkg/operation/common github.com/gardener/gardener/pkg/predicate github.com/gardener/gardener/pkg/scheduler/apis/config From fe581cc4be9037eff2c061ae6dbda5a80502dd5e Mon Sep 17 00:00:00 2001 From: Stoyan Rachev Date: Fri, 27 Aug 2021 15:18:03 +0300 Subject: [PATCH 2/2] Add infrastructure ConfigValidator for checking VPC IDs --- pkg/aws/client/client.go | 51 +++-- pkg/aws/client/mock/mocks.go | 41 ++-- pkg/aws/client/types.go | 4 +- .../infrastructure/actuator_reconcile.go | 5 +- pkg/controller/infrastructure/add.go | 3 + .../infrastructure/configvalidator.go | 112 ++++++++++ .../infrastructure/configvalidator_test.go | 195 ++++++++++++++++++ .../infrastructure_suite_test.go | 27 +++ .../infrastructure/infrastructure_test.go | 2 +- 9 files changed, 386 insertions(+), 54 deletions(-) create mode 100644 pkg/controller/infrastructure/configvalidator.go create mode 100644 pkg/controller/infrastructure/configvalidator_test.go create mode 100644 pkg/controller/infrastructure/infrastructure_suite_test.go diff --git a/pkg/aws/client/client.go b/pkg/aws/client/client.go index 8403241b4..08de94d0d 100644 --- a/pkg/aws/client/client.go +++ b/pkg/aws/client/client.go @@ -97,9 +97,9 @@ func (c *Client) GetAccountID(ctx context.Context) (string, error) { return *getCallerIdentityOutput.Account, nil } -// GetInternetGateway returns the ID of the internet gateway attached to the given VPC . +// GetVPCInternetGateway returns the ID of the internet gateway attached to the given VPC . // If there is no internet gateway attached, the returned string will be empty. -func (c *Client) GetInternetGateway(ctx context.Context, vpcID string) (string, error) { +func (c *Client) GetVPCInternetGateway(ctx context.Context, vpcID string) (string, error) { describeInternetGatewaysInput := &ec2.DescribeInternetGatewaysInput{ Filters: []*ec2.Filter{ { @@ -115,34 +115,27 @@ func (c *Client) GetInternetGateway(ctx context.Context, vpcID string) (string, return "", err } - if describeInternetGatewaysOutput.InternetGateways != nil { - if *describeInternetGatewaysOutput.InternetGateways[0].InternetGatewayId == "" { - return "", fmt.Errorf("no attached internet gateway found for vpc %s", vpcID) - } - return *describeInternetGatewaysOutput.InternetGateways[0].InternetGatewayId, nil + if len(describeInternetGatewaysOutput.InternetGateways) > 0 { + return aws.StringValue(describeInternetGatewaysOutput.InternetGateways[0].InternetGatewayId), nil } - return "", fmt.Errorf("no attached internet gateway found for vpc %s", vpcID) + return "", nil } -// VerifyVPCAttributes checks whether the VPC attributes are correct. -func (c *Client) VerifyVPCAttributes(ctx context.Context, vpcID string) error { - vpcAttribute, err := c.EC2.DescribeVpcAttributeWithContext(ctx, &ec2.DescribeVpcAttributeInput{VpcId: &vpcID, Attribute: aws.String("enableDnsSupport")}) +// GetVPCAttribute returns the value of the specified VPC attribute. +func (c *Client) GetVPCAttribute(ctx context.Context, vpcID string, attribute string) (bool, error) { + vpcAttribute, err := c.EC2.DescribeVpcAttributeWithContext(ctx, &ec2.DescribeVpcAttributeInput{VpcId: &vpcID, Attribute: aws.String(attribute)}) if err != nil { - return err - } - if vpcAttribute.EnableDnsSupport == nil || vpcAttribute.EnableDnsSupport.Value == nil || !*vpcAttribute.EnableDnsSupport.Value { - return fmt.Errorf("invalid VPC attributes: `enableDnsSupport` must be set to `true`") + return false, err } - vpcAttribute, err = c.EC2.DescribeVpcAttributeWithContext(ctx, &ec2.DescribeVpcAttributeInput{VpcId: &vpcID, Attribute: aws.String("enableDnsHostnames")}) - if err != nil { - return err - } - if vpcAttribute.EnableDnsHostnames == nil || vpcAttribute.EnableDnsHostnames.Value == nil || !*vpcAttribute.EnableDnsHostnames.Value { - return fmt.Errorf("invalid VPC attributes: `enableDnsHostnames` must be set to `true`") + switch attribute { + case "enableDnsSupport": + return vpcAttribute.EnableDnsSupport != nil && vpcAttribute.EnableDnsSupport.Value != nil && *vpcAttribute.EnableDnsSupport.Value, nil + case "enableDnsHostnames": + return vpcAttribute.EnableDnsHostnames != nil && vpcAttribute.EnableDnsHostnames.Value != nil && *vpcAttribute.EnableDnsHostnames.Value, nil + default: + return false, nil } - - return nil } // DeleteObjectsWithPrefix deletes the s3 objects with the specific from . If it does not exist, @@ -427,11 +420,15 @@ func (c *Client) DeleteSecurityGroup(ctx context.Context, id string) error { return ignoreNotFound(err) } -func ignoreNotFound(err error) error { - if err == nil { - return nil +func IsNotFoundError(err error) bool { + if aerr, ok := err.(awserr.Error); ok && (aerr.Code() == elb.ErrCodeAccessPointNotFoundException || aerr.Code() == "InvalidGroup.NotFound" || aerr.Code() == "InvalidVpcID.NotFound") { + return true } - if aerr, ok := err.(awserr.Error); ok && (aerr.Code() == elb.ErrCodeAccessPointNotFoundException || aerr.Code() == "InvalidGroup.NotFound") { + return false +} + +func ignoreNotFound(err error) error { + if err == nil || IsNotFoundError(err) { return nil } return err diff --git a/pkg/aws/client/mock/mocks.go b/pkg/aws/client/mock/mocks.go index 72c210337..76f551add 100644 --- a/pkg/aws/client/mock/mocks.go +++ b/pkg/aws/client/mock/mocks.go @@ -177,19 +177,34 @@ func (mr *MockInterfaceMockRecorder) GetDNSHostedZones(arg0 interface{}) *gomock return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDNSHostedZones", reflect.TypeOf((*MockInterface)(nil).GetDNSHostedZones), arg0) } -// GetInternetGateway mocks base method. -func (m *MockInterface) GetInternetGateway(arg0 context.Context, arg1 string) (string, error) { +// GetVPCAttribute mocks base method. +func (m *MockInterface) GetVPCAttribute(arg0 context.Context, arg1, arg2 string) (bool, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetInternetGateway", arg0, arg1) + ret := m.ctrl.Call(m, "GetVPCAttribute", arg0, arg1, arg2) + ret0, _ := ret[0].(bool) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetVPCAttribute indicates an expected call of GetVPCAttribute. +func (mr *MockInterfaceMockRecorder) GetVPCAttribute(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetVPCAttribute", reflect.TypeOf((*MockInterface)(nil).GetVPCAttribute), arg0, arg1, arg2) +} + +// GetVPCInternetGateway mocks base method. +func (m *MockInterface) GetVPCInternetGateway(arg0 context.Context, arg1 string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetVPCInternetGateway", arg0, arg1) ret0, _ := ret[0].(string) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetInternetGateway indicates an expected call of GetInternetGateway. -func (mr *MockInterfaceMockRecorder) GetInternetGateway(arg0, arg1 interface{}) *gomock.Call { +// GetVPCInternetGateway indicates an expected call of GetVPCInternetGateway. +func (mr *MockInterfaceMockRecorder) GetVPCInternetGateway(arg0, arg1 interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetInternetGateway", reflect.TypeOf((*MockInterface)(nil).GetInternetGateway), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetVPCInternetGateway", reflect.TypeOf((*MockInterface)(nil).GetVPCInternetGateway), arg0, arg1) } // ListKubernetesELBs mocks base method. @@ -237,20 +252,6 @@ func (mr *MockInterfaceMockRecorder) ListKubernetesSecurityGroups(arg0, arg1, ar return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListKubernetesSecurityGroups", reflect.TypeOf((*MockInterface)(nil).ListKubernetesSecurityGroups), arg0, arg1, arg2) } -// VerifyVPCAttributes mocks base method. -func (m *MockInterface) VerifyVPCAttributes(arg0 context.Context, arg1 string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "VerifyVPCAttributes", arg0, arg1) - ret0, _ := ret[0].(error) - return ret0 -} - -// VerifyVPCAttributes indicates an expected call of VerifyVPCAttributes. -func (mr *MockInterfaceMockRecorder) VerifyVPCAttributes(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "VerifyVPCAttributes", reflect.TypeOf((*MockInterface)(nil).VerifyVPCAttributes), arg0, arg1) -} - // MockFactory is a mock of Factory interface. type MockFactory struct { ctrl *gomock.Controller diff --git a/pkg/aws/client/types.go b/pkg/aws/client/types.go index 757fb88b6..59b30bca8 100644 --- a/pkg/aws/client/types.go +++ b/pkg/aws/client/types.go @@ -32,8 +32,8 @@ const ( // Interface is an interface which must be implemented by AWS clients. type Interface interface { GetAccountID(ctx context.Context) (string, error) - GetInternetGateway(ctx context.Context, vpcID string) (string, error) - VerifyVPCAttributes(ctx context.Context, vpcID string) error + GetVPCInternetGateway(ctx context.Context, vpcID string) (string, error) + GetVPCAttribute(ctx context.Context, vpcID string, attribute string) (bool, error) // S3 wrappers DeleteObjectsWithPrefix(ctx context.Context, bucket, prefix string) error diff --git a/pkg/controller/infrastructure/actuator_reconcile.go b/pkg/controller/infrastructure/actuator_reconcile.go index 6ba004f6c..598aa1d97 100644 --- a/pkg/controller/infrastructure/actuator_reconcile.go +++ b/pkg/controller/infrastructure/actuator_reconcile.go @@ -125,10 +125,7 @@ func generateTerraformInfraConfig(ctx context.Context, infrastructure *extension case infrastructureConfig.Networks.VPC.ID != nil: createVPC = false existingVpcID := *infrastructureConfig.Networks.VPC.ID - if err := awsClient.VerifyVPCAttributes(ctx, existingVpcID); err != nil { - return nil, err - } - existingInternetGatewayID, err := awsClient.GetInternetGateway(ctx, existingVpcID) + existingInternetGatewayID, err := awsClient.GetVPCInternetGateway(ctx, existingVpcID) if err != nil { return nil, err } diff --git a/pkg/controller/infrastructure/add.go b/pkg/controller/infrastructure/add.go index 6db5c1f19..20cb8460a 100644 --- a/pkg/controller/infrastructure/add.go +++ b/pkg/controller/infrastructure/add.go @@ -16,7 +16,9 @@ package infrastructure import ( "github.com/gardener/gardener-extension-provider-aws/pkg/aws" + awsclient "github.com/gardener/gardener-extension-provider-aws/pkg/aws/client" "github.com/gardener/gardener/extensions/pkg/controller/infrastructure" + "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/manager" @@ -40,6 +42,7 @@ type AddOptions struct { func AddToManagerWithOptions(mgr manager.Manager, opts AddOptions) error { return infrastructure.Add(mgr, infrastructure.AddArgs{ Actuator: NewActuator(), + ConfigValidator: NewConfigValidator(awsclient.FactoryFunc(awsclient.NewInterface), log.Log), ControllerOptions: opts.Controller, Predicates: infrastructure.DefaultPredicates(opts.IgnoreOperationAnnotation), Type: aws.Type, diff --git a/pkg/controller/infrastructure/configvalidator.go b/pkg/controller/infrastructure/configvalidator.go new file mode 100644 index 000000000..7b4711149 --- /dev/null +++ b/pkg/controller/infrastructure/configvalidator.go @@ -0,0 +1,112 @@ +// 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 infrastructure + +import ( + "context" + "fmt" + + "github.com/gardener/gardener-extension-provider-aws/pkg/apis/aws/helper" + "github.com/gardener/gardener-extension-provider-aws/pkg/aws" + awsclient "github.com/gardener/gardener-extension-provider-aws/pkg/aws/client" + + "github.com/gardener/gardener/extensions/pkg/controller/common" + "github.com/gardener/gardener/extensions/pkg/controller/infrastructure" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" + "github.com/go-logr/logr" + "k8s.io/apimachinery/pkg/util/validation/field" + "sigs.k8s.io/controller-runtime/pkg/client" +) + +// configValidator implements ConfigValidator for aws infrastructure resources. +type configValidator struct { + common.ClientContext + awsClientFactory awsclient.Factory + logger logr.Logger +} + +// NewConfigValidator creates a new ConfigValidator. +func NewConfigValidator(awsClientFactory awsclient.Factory, logger logr.Logger) infrastructure.ConfigValidator { + return &configValidator{ + awsClientFactory: awsClientFactory, + logger: logger.WithName("aws-infrastructure-config-validator"), + } +} + +// Validate validates the provider config of the given infrastructure resource with the cloud provider. +func (c *configValidator) Validate(ctx context.Context, infra *extensionsv1alpha1.Infrastructure) field.ErrorList { + allErrs := field.ErrorList{} + + logger := c.logger.WithValues("infrastructure", client.ObjectKeyFromObject(infra)) + + // Get provider config from the infrastructure resource + config, err := helper.InfrastructureConfigFromInfrastructure(infra) + if err != nil { + allErrs = append(allErrs, field.InternalError(nil, err)) + return allErrs + } + + // Create AWS client + credentials, err := aws.GetCredentialsFromSecretRef(ctx, c.Client(), infra.Spec.SecretRef, false) + if err != nil { + allErrs = append(allErrs, field.InternalError(nil, fmt.Errorf("could not get AWS credentials: %+v", err))) + return allErrs + } + awsClient, err := c.awsClientFactory.NewClient(string(credentials.AccessKeyID), string(credentials.SecretAccessKey), infra.Spec.Region) + if err != nil { + allErrs = append(allErrs, field.InternalError(nil, fmt.Errorf("could not create AWS client: %+v", err))) + return allErrs + } + + // Validate infrastructure config + if config.Networks.VPC.ID != nil { + logger.Info("Validating infrastructure networks.vpc.id") + allErrs = append(allErrs, c.validateVPC(ctx, awsClient, *config.Networks.VPC.ID, field.NewPath("networks", "vpc", "id"))...) + } + + return allErrs +} + +func (c *configValidator) validateVPC(ctx context.Context, awsClient awsclient.Interface, vpcID string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + // Verify that the VPC exists and the enableDnsSupport and enableDnsHostnames VPC attributes are both true + for _, attribute := range []string{"enableDnsSupport", "enableDnsHostnames"} { + value, err := awsClient.GetVPCAttribute(ctx, vpcID, attribute) + if err != nil { + if awsclient.IsNotFoundError(err) { + allErrs = append(allErrs, field.NotFound(fldPath, vpcID)) + } else { + allErrs = append(allErrs, field.InternalError(fldPath, fmt.Errorf("could not get VPC attribute %s for VPC %s: %w", attribute, vpcID, err))) + } + return allErrs + } + if !value { + allErrs = append(allErrs, field.Invalid(fldPath, vpcID, fmt.Sprintf("VPC attribute %s must be set to true", attribute))) + } + } + + // Verify that there is an internet gateway attached to the VPC + internetGatewayID, err := awsClient.GetVPCInternetGateway(ctx, vpcID) + if err != nil { + allErrs = append(allErrs, field.InternalError(fldPath, fmt.Errorf("could not get internet gateway for VPC %s: %w", vpcID, err))) + return allErrs + } + if internetGatewayID == "" { + allErrs = append(allErrs, field.Invalid(fldPath, vpcID, "no attached internet gateway found")) + } + + return allErrs +} diff --git a/pkg/controller/infrastructure/configvalidator_test.go b/pkg/controller/infrastructure/configvalidator_test.go new file mode 100644 index 000000000..21912ac75 --- /dev/null +++ b/pkg/controller/infrastructure/configvalidator_test.go @@ -0,0 +1,195 @@ +// 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 infrastructure_test + +import ( + "context" + "encoding/json" + "errors" + "fmt" + + "github.com/aws/aws-sdk-go/aws/awserr" + apisaws "github.com/gardener/gardener-extension-provider-aws/pkg/apis/aws" + "github.com/gardener/gardener-extension-provider-aws/pkg/aws" + mockawsclient "github.com/gardener/gardener-extension-provider-aws/pkg/aws/client/mock" + . "github.com/gardener/gardener-extension-provider-aws/pkg/controller/infrastructure" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + "k8s.io/utils/pointer" + "sigs.k8s.io/controller-runtime/pkg/client" + + "github.com/gardener/gardener/extensions/pkg/controller/infrastructure" + extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" + mockclient "github.com/gardener/gardener/pkg/mock/controller-runtime/client" + . "github.com/gardener/gardener/pkg/utils/test/matchers" + "github.com/go-logr/logr" + "github.com/golang/mock/gomock" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/onsi/gomega/gstruct" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/validation/field" + "sigs.k8s.io/controller-runtime/pkg/log" + "sigs.k8s.io/controller-runtime/pkg/runtime/inject" +) + +const ( + name = "infrastructure" + namespace = "shoot--foobar--aws" + region = "eu-west-1" + vpcID = "vpc-123456" + + accessKeyID = "accessKeyID" + secretAccessKey = "secretAccessKey" +) + +var _ = Describe("ConfigValidator", func() { + var ( + ctrl *gomock.Controller + c *mockclient.MockClient + awsClientFactory *mockawsclient.MockFactory + awsClient *mockawsclient.MockInterface + ctx context.Context + logger logr.Logger + cv infrastructure.ConfigValidator + infra *extensionsv1alpha1.Infrastructure + secret *corev1.Secret + ) + + BeforeEach(func() { + ctrl = gomock.NewController(GinkgoT()) + + c = mockclient.NewMockClient(ctrl) + awsClientFactory = mockawsclient.NewMockFactory(ctrl) + awsClient = mockawsclient.NewMockInterface(ctrl) + + ctx = context.TODO() + logger = log.Log.WithName("test") + + cv = NewConfigValidator(awsClientFactory, logger) + err := cv.(inject.Client).InjectClient(c) + Expect(err).NotTo(HaveOccurred()) + + infra = &extensionsv1alpha1.Infrastructure{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + Spec: extensionsv1alpha1.InfrastructureSpec{ + DefaultSpec: extensionsv1alpha1.DefaultSpec{ + Type: aws.Type, + ProviderConfig: &runtime.RawExtension{ + Raw: encode(&apisaws.InfrastructureConfig{ + Networks: apisaws.Networks{ + VPC: apisaws.VPC{ + ID: pointer.String(vpcID), + }, + }, + }), + }, + }, + Region: region, + SecretRef: corev1.SecretReference{ + Name: name, + Namespace: namespace, + }, + }, + } + secret = &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + Type: corev1.SecretTypeOpaque, + Data: map[string][]byte{ + aws.AccessKeyID: []byte(accessKeyID), + aws.SecretAccessKey: []byte(secretAccessKey), + }, + } + }) + + AfterEach(func() { + ctrl.Finish() + }) + + Describe("#Validate", func() { + BeforeEach(func() { + c.EXPECT().Get(ctx, kutil.Key(namespace, name), gomock.AssignableToTypeOf(&corev1.Secret{})).DoAndReturn( + func(_ context.Context, _ client.ObjectKey, obj *corev1.Secret) error { + *obj = *secret + return nil + }, + ) + awsClientFactory.EXPECT().NewClient(accessKeyID, secretAccessKey, region).Return(awsClient, nil) + }) + + It("should forbid VPC that doesn't exist", func() { + awsClient.EXPECT().GetVPCAttribute(ctx, vpcID, "enableDnsSupport").Return(false, awserr.New("InvalidVpcID.NotFound", "", nil)) + + errorList := cv.Validate(ctx, infra) + Expect(errorList).To(ConsistOfFields(Fields{ + "Type": Equal(field.ErrorTypeNotFound), + "Field": Equal("networks.vpc.id"), + })) + }) + + It("should forbid VPC that exists but has wrong attribute values or no attached internet gateway", func() { + awsClient.EXPECT().GetVPCAttribute(ctx, vpcID, "enableDnsSupport").Return(false, nil) + awsClient.EXPECT().GetVPCAttribute(ctx, vpcID, "enableDnsHostnames").Return(false, nil) + awsClient.EXPECT().GetVPCInternetGateway(ctx, vpcID).Return("", nil) + + errorList := cv.Validate(ctx, infra) + Expect(errorList).To(ConsistOfFields(Fields{ + "Type": Equal(field.ErrorTypeInvalid), + "Field": Equal("networks.vpc.id"), + "Detail": Equal("VPC attribute enableDnsSupport must be set to true"), + }, Fields{ + "Type": Equal(field.ErrorTypeInvalid), + "Field": Equal("networks.vpc.id"), + "Detail": Equal("VPC attribute enableDnsHostnames must be set to true"), + }, Fields{ + "Type": Equal(field.ErrorTypeInvalid), + "Field": Equal("networks.vpc.id"), + "Detail": Equal("no attached internet gateway found"), + })) + }) + + It("should allow VPC that exists and has correct attribute values and an attached internet gateway", func() { + awsClient.EXPECT().GetVPCAttribute(ctx, vpcID, "enableDnsSupport").Return(true, nil) + awsClient.EXPECT().GetVPCAttribute(ctx, vpcID, "enableDnsHostnames").Return(true, nil) + awsClient.EXPECT().GetVPCInternetGateway(ctx, vpcID).Return(vpcID, nil) + + errorList := cv.Validate(ctx, infra) + Expect(errorList).To(BeEmpty()) + }) + + It("should fail with InternalError if getting VPC attributes failed", func() { + awsClient.EXPECT().GetVPCAttribute(ctx, vpcID, "enableDnsSupport").Return(false, errors.New("test")) + + errorList := cv.Validate(ctx, infra) + Expect(errorList).To(ConsistOfFields(Fields{ + "Type": Equal(field.ErrorTypeInternal), + "Field": Equal("networks.vpc.id"), + "Detail": Equal(fmt.Sprintf("could not get VPC attribute enableDnsSupport for VPC %s: test", vpcID)), + })) + }) + }) +}) + +func encode(obj runtime.Object) []byte { + data, _ := json.Marshal(obj) + return data +} diff --git a/pkg/controller/infrastructure/infrastructure_suite_test.go b/pkg/controller/infrastructure/infrastructure_suite_test.go new file mode 100644 index 000000000..a23267e4b --- /dev/null +++ b/pkg/controller/infrastructure/infrastructure_suite_test.go @@ -0,0 +1,27 @@ +// 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 infrastructure_test + +import ( + "testing" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +func TestInfrastructure(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Infrastructure Suite") +} diff --git a/test/integration/infrastructure/infrastructure_test.go b/test/integration/infrastructure/infrastructure_test.go index cec1e4784..9d9f79cc0 100644 --- a/test/integration/infrastructure/infrastructure_test.go +++ b/test/integration/infrastructure/infrastructure_test.go @@ -223,7 +223,7 @@ var _ = Describe("Infrastructure tests", func() { Expect(err).NotTo(HaveOccurred()) Expect(infra.Status.LastError).NotTo(BeNil()) - Expect(infra.Status.LastError.Description).To(ContainSubstring("invalid VPC attributes: `enableDnsHostnames` must be set to `true`")) + Expect(infra.Status.LastError.Description).To(ContainSubstring("VPC attribute enableDnsHostnames must be set to true")) }) It("should successfully create and delete", func() {