From bafebe99ba45c1907f475a6b853ae0075d288b54 Mon Sep 17 00:00:00 2001 From: Blake Pettersson Date: Fri, 4 Nov 2022 13:59:16 +0100 Subject: [PATCH] feat: enable metadata to be set on namespaces (#10672) * namespace labels Signed-off-by: pashavictorovich * create namespace should support annotations Signed-off-by: pashavictorovich * handle also modification hook Signed-off-by: pashavictorovich * regenerate entity on modify hook Signed-off-by: pashavictorovich * manifests Signed-off-by: pashavictorovich * feat: enable metadata to be set on namespaces This builds upon the work that @pasha-codefresh did in #10288. The main differences between this PR and the previous one is that we use SSA to diff between different versions of the namespace, as well as having a slightly different API in gitops-engine for setting the namespace modifier. We now also set the ownership of the namespace in ArgoCD. Closes #4628 Closes #6215 Closes #7799 Signed-off-by: Blake Pettersson * fix: don't always track namespaces For now, only allow namespaces managed with `managedNamespaceMetadata` to have tracking set by Argo. Ideally we'd like new namespaces to also be tracked by Argo, but there's currently an issue with a failing integration test. Also wrap error message if setting the app instance errors on the namespace. Signed-off-by: Blake Pettersson * fix: always return true with `hasManagedMetadata` If `hasManagedMetadata` is set, `true` should always be returned. Signed-off-by: Blake Pettersson * docs: add clarifying docs on resource tracking Signed-off-by: Blake Pettersson * style: pr tweaks Signed-off-by: Blake Pettersson * fix: re-add label unsetting Signed-off-by: Blake Pettersson * Update gitops-engine to current master Signed-off-by: Leonardo Luz Almeida Signed-off-by: pashavictorovich Signed-off-by: Blake Pettersson Signed-off-by: Leonardo Luz Almeida Co-authored-by: pashavictorovich Co-authored-by: Leonardo Luz Almeida Signed-off-by: emirot --- assets/swagger.json | 20 + controller/sync.go | 33 +- controller/sync_namespace.go | 51 + controller/sync_namespace_test.go | 284 +++ docs/operator-manual/application.yaml | 9 + docs/user-guide/sync-options.md | 132 +- go.mod | 2 +- go.sum | 4 +- hack/generate-proto.sh | 33 +- manifests/core-install.yaml | 244 +++ manifests/crds/application-crd.yaml | 13 + manifests/crds/applicationset-crd.yaml | 231 ++ manifests/ha/install.yaml | 244 +++ manifests/install.yaml | 244 +++ pkg/apis/application/v1alpha1/generated.pb.go | 1896 +++++++++++------ pkg/apis/application/v1alpha1/generated.proto | 9 + .../application/v1alpha1/openapi_generated.go | 51 +- pkg/apis/application/v1alpha1/types.go | 7 + .../v1alpha1/zz_generated.deepcopy.go | 35 + test/e2e/app_management_ns_test.go | 312 ++- test/e2e/fixture/app/expectation.go | 30 + .../guestbook-ui-deployment.yaml | 23 + .../guestbook-ui-namespace.yaml | 9 + .../guestbook-ui-svc.yaml | 10 + .../kustomization.yaml | 7 + 25 files changed, 3198 insertions(+), 735 deletions(-) create mode 100644 controller/sync_namespace.go create mode 100644 controller/sync_namespace_test.go create mode 100644 test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-deployment.yaml create mode 100644 test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-namespace.yaml create mode 100644 test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-svc.yaml create mode 100644 test/e2e/testdata/guestbook-with-namespace-manifest/kustomization.yaml diff --git a/assets/swagger.json b/assets/swagger.json index 942efa3692423..4046f83600425 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -6544,6 +6544,23 @@ } } }, + "v1alpha1ManagedNamespaceMetadata": { + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, "v1alpha1MatrixGenerator": { "description": "MatrixGenerator generates the cartesian product of two sets of parameters. The parameters are defined by two nested\ngenerators.", "type": "object", @@ -7827,6 +7844,9 @@ "automated": { "$ref": "#/definitions/v1alpha1SyncPolicyAutomated" }, + "managedNamespaceMetadata": { + "$ref": "#/definitions/v1alpha1ManagedNamespaceMetadata" + }, "retry": { "$ref": "#/definitions/v1alpha1RetryStrategy" }, diff --git a/controller/sync.go b/controller/sync.go index 5f597495cee0a..1c592f5c0a733 100644 --- a/controller/sync.go +++ b/controller/sync.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + cdcommon "github.com/argoproj/argo-cd/v2/common" "os" "strconv" "sync/atomic" @@ -20,7 +21,6 @@ import ( "k8s.io/apimachinery/pkg/util/managedfields" "k8s.io/kubectl/pkg/util/openapi" - cdcommon "github.com/argoproj/argo-cd/v2/common" "github.com/argoproj/argo-cd/v2/controller/metrics" "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" listersv1alpha1 "github.com/argoproj/argo-cd/v2/pkg/client/listers/application/v1alpha1" @@ -212,14 +212,7 @@ func (m *appStateManager) SyncAppState(app *v1alpha1.Application, state *v1alpha } trackingMethod := argo.GetTrackingMethod(m.settingsMgr) - syncCtx, cleanup, err := sync.NewSyncContext( - compareResult.syncStatus.Revision, - reconciliationResult, - restConfig, - rawConfig, - m.kubectl, - app.Spec.Destination.Namespace, - openAPISchema, + opts := []sync.SyncOpt{ sync.WithLogr(logutils.NewLogrusLogger(logEntry)), sync.WithHealthOverride(lua.ResourceHealthOverrides(resourceOverrides)), sync.WithPermissionValidator(func(un *unstructured.Unstructured, res *v1.APIResource) error { @@ -249,13 +242,6 @@ func (m *appStateManager) SyncAppState(app *v1alpha1.Application, state *v1alpha m.isSelfReferencedObj(live, target, app.GetName(), appLabelKey, trackingMethod) }), sync.WithManifestValidation(!syncOp.SyncOptions.HasOption(common.SyncOptionsDisableValidation)), - sync.WithNamespaceCreation(syncOp.SyncOptions.HasOption("CreateNamespace=true"), func(un *unstructured.Unstructured) bool { - if un != nil && kube.GetAppInstanceLabel(un, cdcommon.LabelKeyAppInstance) != "" { - kube.UnsetLabel(un, cdcommon.LabelKeyAppInstance) - return true - } - return false - }), sync.WithSyncWaveHook(delayBetweenSyncWaves), sync.WithPruneLast(syncOp.SyncOptions.HasOption(common.SyncOptionPruneLast)), sync.WithResourceModificationChecker(syncOp.SyncOptions.HasOption("ApplyOutOfSyncOnly=true"), compareResult.diffResultList), @@ -263,6 +249,21 @@ func (m *appStateManager) SyncAppState(app *v1alpha1.Application, state *v1alpha sync.WithReplace(syncOp.SyncOptions.HasOption(common.SyncOptionReplace)), sync.WithServerSideApply(syncOp.SyncOptions.HasOption(common.SyncOptionServerSideApply)), sync.WithServerSideApplyManager(cdcommon.ArgoCDSSAManager), + } + + if syncOp.SyncOptions.HasOption("CreateNamespace=true") { + opts = append(opts, sync.WithNamespaceModifier(syncNamespace(m.resourceTracking, appLabelKey, trackingMethod, app.Name, app.Spec.SyncPolicy))) + } + + syncCtx, cleanup, err := sync.NewSyncContext( + compareResult.syncStatus.Revision, + reconciliationResult, + restConfig, + rawConfig, + m.kubectl, + app.Spec.Destination.Namespace, + openAPISchema, + opts..., ) if err != nil { diff --git a/controller/sync_namespace.go b/controller/sync_namespace.go new file mode 100644 index 0000000000000..b96dd4421b3c2 --- /dev/null +++ b/controller/sync_namespace.go @@ -0,0 +1,51 @@ +package controller + +import ( + "fmt" + cdcommon "github.com/argoproj/argo-cd/v2/common" + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v2/util/argo" + gitopscommon "github.com/argoproj/gitops-engine/pkg/sync/common" + "github.com/argoproj/gitops-engine/pkg/utils/kube" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" +) + +func syncNamespace(resourceTracking argo.ResourceTracking, appLabelKey string, trackingMethod v1alpha1.TrackingMethod, appName string, syncPolicy *v1alpha1.SyncPolicy) func(un *unstructured.Unstructured) (bool, error) { + return func(liveNs *unstructured.Unstructured) (bool, error) { + if liveNs != nil && kube.GetAppInstanceLabel(liveNs, cdcommon.LabelKeyAppInstance) != "" { + kube.UnsetLabel(liveNs, cdcommon.LabelKeyAppInstance) + return true, nil + } + + isNewNamespace := liveNs != nil && liveNs.GetUID() == "" && liveNs.GetResourceVersion() == "" + + if liveNs != nil && syncPolicy != nil { + // managedNamespaceMetadata relies on SSA, and since the diffs are computed by the k8s control plane we + // always need to call the k8s api server, so we'll always need to return true if managedNamespaceMetadata is set. + hasManagedMetadata := syncPolicy.ManagedNamespaceMetadata != nil + if hasManagedMetadata { + managedNamespaceMetadata := syncPolicy.ManagedNamespaceMetadata + liveNs.SetLabels(managedNamespaceMetadata.Labels) + liveNs.SetAnnotations(appendSSAAnnotation(managedNamespaceMetadata.Annotations)) + + err := resourceTracking.SetAppInstance(liveNs, appLabelKey, appName, "", trackingMethod) + if err != nil { + return false, fmt.Errorf("failed to set app instance tracking on the namespace %s: %s", liveNs.GetName(), err) + } + + return true, nil + } + } + + return isNewNamespace, nil + } +} + +func appendSSAAnnotation(in map[string]string) map[string]string { + r := map[string]string{} + for k, v := range in { + r[k] = v + } + r[gitopscommon.AnnotationSyncOptions] = gitopscommon.SyncOptionServerSideApply + return r +} diff --git a/controller/sync_namespace_test.go b/controller/sync_namespace_test.go new file mode 100644 index 0000000000000..9a8b7819220d7 --- /dev/null +++ b/controller/sync_namespace_test.go @@ -0,0 +1,284 @@ +package controller + +import ( + "errors" + "github.com/argoproj/argo-cd/v2/common" + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v2/util/argo" + "github.com/stretchr/testify/assert" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/types" + "testing" +) + +type fakeResourceTracking struct { +} + +func (f fakeResourceTracking) GetAppName(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) string { + panic("implement me") +} + +func (f fakeResourceTracking) GetAppInstance(un *unstructured.Unstructured, key string, trackingMethod v1alpha1.TrackingMethod) *argo.AppInstanceValue { + return nil +} + +func (f fakeResourceTracking) SetAppInstance(un *unstructured.Unstructured, key, val, namespace string, trackingMethod v1alpha1.TrackingMethod) error { + return errors.New("some error") +} + +func (f fakeResourceTracking) BuildAppInstanceValue(value argo.AppInstanceValue) string { + panic("implement me") +} + +func (f fakeResourceTracking) ParseAppInstanceValue(value string) (*argo.AppInstanceValue, error) { + panic("implement me") +} + +func (f fakeResourceTracking) Normalize(config, live *unstructured.Unstructured, labelKey, trackingMethod string) error { + panic("implement me") +} + +func createFakeNamespace(uid string, resourceVersion string, labels map[string]string, annotations map[string]string) *unstructured.Unstructured { + un := unstructured.Unstructured{} + un.SetUID(types.UID(uid)) + un.SetResourceVersion(resourceVersion) + un.SetLabels(labels) + un.SetAnnotations(annotations) + un.SetKind("Namespace") + un.SetName("some-namespace") + return &un +} + +func Test_shouldNamespaceSync(t *testing.T) { + tests := []struct { + name string + syncPolicy *v1alpha1.SyncPolicy + un *unstructured.Unstructured + expected bool + expectedLabels map[string]string + expectedAnnotations map[string]string + }{ + { + name: "un is nil and syncPolicy is nil", + expected: false, + un: nil, + syncPolicy: nil, + }, + { + name: "un is nil and syncPolicy is not nil", + expected: false, + un: nil, + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: nil, + }, + }, + { + name: "un is nil and syncPolicy has labels and annotations", + expected: false, + un: nil, + expectedLabels: map[string]string{"my-cool-label": "some-value"}, + expectedAnnotations: map[string]string{"my-cool-annotation": "some-value"}, + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: map[string]string{"my-cool-label": "some-value"}, + Annotations: map[string]string{"my-cool-annotation": "some-value"}, + }, + }, + }, + { + name: "namespace does not yet exist and managedNamespaceMetadata nil", + expected: true, + expectedLabels: map[string]string{}, + //expectedAnnotations: map[string]string{"argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace"}, + expectedAnnotations: map[string]string{}, + un: createFakeNamespace("", "", map[string]string{}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: nil, + }, + }, + { + name: "namespace does not yet exist and managedNamespaceMetadata not nil", + expected: true, + expectedAnnotations: map[string]string{"argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("", "", map[string]string{}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{}, + }, + }, + { + name: "namespace does not yet exist and managedNamespaceMetadata has empty labels map", + expected: true, + expectedLabels: map[string]string{}, + expectedAnnotations: map[string]string{"argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("", "", map[string]string{}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: map[string]string{}, + }, + }, + }, + { + name: "namespace does not yet exist and managedNamespaceMetadata has empty annotations map", + expected: true, + expectedAnnotations: map[string]string{"argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("", "", map[string]string{}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Annotations: map[string]string{}, + }, + }, + }, + { + name: "namespace does not yet exist and managedNamespaceMetadata has empty annotations and labels map", + expected: true, + expectedLabels: map[string]string{}, + expectedAnnotations: map[string]string{"argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("", "", map[string]string{}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: map[string]string{}, + Annotations: map[string]string{}, + }, + }, + }, + { + name: "namespace does not yet exist and managedNamespaceMetadata has labels", + expected: true, + expectedLabels: map[string]string{"my-cool-label": "some-value"}, + expectedAnnotations: map[string]string{"argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("", "", map[string]string{}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: map[string]string{"my-cool-label": "some-value"}, + Annotations: nil, + }, + }, + }, + { + name: "namespace does not yet exist and managedNamespaceMetadata has annotations", + expected: true, + expectedAnnotations: map[string]string{"my-cool-annotation": "some-value", "argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("", "", map[string]string{}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: nil, + Annotations: map[string]string{"my-cool-annotation": "some-value"}, + }, + }, + }, + { + name: "namespace does not yet exist and managedNamespaceMetadata has annotations and labels", + expected: true, + expectedLabels: map[string]string{"my-cool-label": "some-value"}, + expectedAnnotations: map[string]string{"my-cool-annotation": "some-value", "argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("", "", map[string]string{}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: map[string]string{"my-cool-label": "some-value"}, + Annotations: map[string]string{"my-cool-annotation": "some-value"}, + }, + }, + }, + { + name: "namespace exists with no labels or annotations and managedNamespaceMetadata has labels", + expected: true, + expectedLabels: map[string]string{"my-cool-label": "some-value"}, + expectedAnnotations: map[string]string{"argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("something", "1", map[string]string{}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: map[string]string{"my-cool-label": "some-value"}, + }, + }, + }, + { + name: "namespace exists with no labels or annotations and managedNamespaceMetadata has annotations", + expected: true, + expectedAnnotations: map[string]string{"my-cool-annotation": "some-value", "argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("something", "1", map[string]string{}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Annotations: map[string]string{"my-cool-annotation": "some-value"}, + }, + }, + }, + { + name: "namespace exists with no labels or annotations and managedNamespaceMetadata has annotations and labels", + expected: true, + expectedLabels: map[string]string{"my-cool-label": "some-value"}, + expectedAnnotations: map[string]string{"my-cool-annotation": "some-value", "argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("something", "1", map[string]string{}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: map[string]string{"my-cool-label": "some-value"}, + Annotations: map[string]string{"my-cool-annotation": "some-value"}, + }, + }, + }, + { + name: "namespace exists with labels and managedNamespaceMetadata has mismatching labels", + expected: true, + expectedAnnotations: map[string]string{"argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + expectedLabels: map[string]string{"my-cool-label": "some-value", "my-other-label": "some-other-value"}, + un: createFakeNamespace("something", "1", map[string]string{"my-cool-label": "some-value"}, map[string]string{}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: map[string]string{"my-cool-label": "some-value", "my-other-label": "some-other-value"}, + Annotations: map[string]string{}, + }, + }, + }, + { + name: "namespace exists with annotations and managedNamespaceMetadata has mismatching annotations", + expected: true, + expectedLabels: map[string]string{}, + expectedAnnotations: map[string]string{"my-cool-annotation": "some-value", "argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("something", "1", map[string]string{}, map[string]string{"my-cool-annotation": "some-value", "my-other-annotation": "some-other-value"}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: map[string]string{}, + Annotations: map[string]string{"my-cool-annotation": "some-value"}, + }, + }, + }, + { + name: "namespace exists with annotations and labels managedNamespaceMetadata has mismatching annotations and labels", + expected: true, + expectedLabels: map[string]string{"my-cool-label": "some-value", "my-other-label": "some-other-value"}, + expectedAnnotations: map[string]string{"my-cool-annotation": "some-value", "my-other-annotation": "some-other-value", "argocd.argoproj.io/tracking-id": "some-app:/Namespace:/some-namespace", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, + un: createFakeNamespace("something", "1", map[string]string{"my-cool-label": "some-value"}, map[string]string{"my-cool-annotation": "some-value"}), + syncPolicy: &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: map[string]string{"my-cool-label": "some-value", "my-other-label": "some-other-value"}, + Annotations: map[string]string{"my-cool-annotation": "some-value", "my-other-annotation": "some-other-value"}, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + actual, err := syncNamespace(argo.NewResourceTracking(), common.LabelKeyAppInstance, argo.TrackingMethodAnnotation, "some-app", tt.syncPolicy)(tt.un) + assert.NoError(t, err) + + if tt.un != nil { + assert.Equal(t, tt.expectedLabels, tt.un.GetLabels()) + assert.Equal(t, tt.expectedAnnotations, tt.un.GetAnnotations()) + } + + assert.Equalf(t, tt.expected, actual, "syncNamespace(%v)", tt.syncPolicy) + }) + } +} + +func Test_shouldNamespaceSync_Failure(t *testing.T) { + fake := fakeResourceTracking{} + _, err := syncNamespace(fake, common.LabelKeyAppInstance, argo.TrackingMethodAnnotation, "some-app", &v1alpha1.SyncPolicy{ + ManagedNamespaceMetadata: &v1alpha1.ManagedNamespaceMetadata{ + Labels: map[string]string{"my-cool-label": "some-value"}, + Annotations: map[string]string{"my-cool-annotation": "some-value"}, + }, + })(createFakeNamespace("something", "1", map[string]string{}, map[string]string{})) + assert.Error(t, err, "Expected error") + assert.Equal(t, "failed to set app instance tracking on the namespace some-namespace: some error", err.Error()) +} diff --git a/docs/operator-manual/application.yaml b/docs/operator-manual/application.yaml index 6bc0278b2ea6e..366d237716ea1 100644 --- a/docs/operator-manual/application.yaml +++ b/docs/operator-manual/application.yaml @@ -134,6 +134,15 @@ spec: - CreateNamespace=true # Namespace Auto-Creation ensures that namespace specified as the application destination exists in the destination cluster. - PrunePropagationPolicy=foreground # Supported policies are background, foreground and orphan. - PruneLast=true # Allow the ability for resource pruning to happen as a final, implicit wave of a sync operation + managedNamespaceMetadata: # Sets the metadata for the application namespace. Only valid if CreateNamespace=true (see above), otherwise it's a no-op. + labels: # The labels to set on the application namespace + any: label + you: like + annotations: # The annotations to set on the application namespace + the: same + applies: for + annotations: on-the-namespace + # The retry feature is available since v1.7 retry: limit: 5 # number of failed sync attempt retries; unlimited number of attempts if less than 0 diff --git a/docs/user-guide/sync-options.md b/docs/user-guide/sync-options.md index 387ce85341ab3..32501b27340af 100644 --- a/docs/user-guide/sync-options.md +++ b/docs/user-guide/sync-options.md @@ -268,4 +268,134 @@ spec: syncOptions: - CreateNamespace=true ``` -The example above shows how an Argo CD Application can be configured so it will create namespaces for the Application resources if the namespaces don't exist already. Without this either declared in the Application manifest or passed in the cli via `--sync-option CreateNamespace=true`, the Application will fail to sync if the resources' namespaces do not exist. +The example above shows how an Argo CD Application can be configured, so it will create namespaces for the Application resources if the namespaces don't exist already. Without this either declared in the Application manifest or passed in the cli via `--sync-option CreateNamespace=true`, the Application will fail to sync if the resources' namespaces do not exist. + +### Namespace Metadata + +We can also add labels and annotations to the namespace through `managedNamespaceMetadata`. If we extend the example above +we could potentially do something like below: + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + namespace: test +spec: + syncPolicy: + managedNamespaceMetadata: + labels: # The labels to set on the application namespace + any: label + you: like + annotations: # The annotations to set on the application namespace + the: same + applies: for + annotations: on-the-namespace + syncOptions: + - CreateNamespace=true +``` + +In order for ArgoCD to manage the labels and annotations on the namespace, `CreateNamespace=true` needs to be set as a +sync option, otherwise nothing will happen. If the namespace doesn't already exist, or if it already exists and doesn't +already have labels and/or annotations set on it, you're good to go. Using `managedNamespaceMetadata` will also set the +resource tracking label (or annotation) on the namespace, so you can easily track which namespaces are managed by ArgoCD. + +In the case you do not have any custom annotations or labels but would nonetheless want to have resource tracking set on +your namespace, that can be done by setting `managedNamespaceMetadata` with an empty `labels` and/or `annotations` map, +like the example below: + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + namespace: test +spec: + syncPolicy: + managedNamespaceMetadata: + labels: # The labels to set on the application namespace + annotations: # The annotations to set on the application namespace + syncOptions: + - CreateNamespace=true +``` + +In the case where ArgoCD is "adopting" an existing namespace which already has metadata set on it, we rely on using +Server Side Apply in order not to lose metadata which has already been set. The main implication here is that it takes +a few extra steps to get rid of an already preexisting field. + +Imagine we have a pre-existing namespace as below: + +```yaml +apiVersion: v1 +kind: Namespace +metadata: + name: foobar + annotations: + foo: bar + abc: "123" +``` + +If we want to manage the `foobar` namespace with ArgoCD and to then also remove the `foo: bar` annotation, in +`managedNamespaceMetadata` we'd need to first rename the `foo` value: + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: Application +spec: + syncPolicy: + managedNamespaceMetadata: + annotations: + abc: 123 # adding this is informational with SSA; this would be sticking around in any case until we set a new value + foo: remove-me + syncOptions: + - CreateNamespace=true +``` + +Once that has been synced, we're ok to remove `foo` + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: Application +spec: + syncPolicy: + managedNamespaceMetadata: + annotations: + abc: 123 # adding this is informational with SSA; this would be sticking around in any case until we set a new value + syncOptions: + - CreateNamespace=true +``` + +Another thing to keep mind of is that if you have a k8s manifest for the same namespace in your ArgoCD application, that +will take precedence and *overwrite whatever values that have been set in `managedNamespaceMetadata`*. In other words, if +you have an application that sets `managedNamespaceMetadata` + +```yaml +apiVersion: argoproj.io/v1alpha1 +kind: Application +spec: + syncPolicy: + managedNamespaceMetadata: + annotations: + abc: 123 + syncOptions: + - CreateNamespace=true +``` + +But you also have a k8s manifest with a matching name + +```yaml +apiVersion: v1 +kind: Namespace +metadata: + name: foobar + annotations: + foo: bar + something: completely-different +``` + +The resulting namespace will have its annotations set to + +```yaml + annotations: + foo: bar + something: completely-different +``` + diff --git a/go.mod b/go.mod index 809d6744d7e4c..b69337f56080e 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/Masterminds/semver/v3 v3.1.1 github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d github.com/alicebob/miniredis/v2 v2.14.2 - github.com/argoproj/gitops-engine v0.7.1-0.20221004132320-98ccd3d43fd9 + github.com/argoproj/gitops-engine v0.7.1-0.20221103192913-b371e3bfc5e9 github.com/argoproj/notifications-engine v0.3.1-0.20220812180936-4d8552b0775f github.com/argoproj/pkg v0.11.1-0.20211203175135-36c59d8fafe0 github.com/aws/aws-sdk-go v1.38.49 diff --git a/go.sum b/go.sum index 407357315ca57..0da05d81e462a 100644 --- a/go.sum +++ b/go.sum @@ -142,8 +142,8 @@ github.com/antonmedv/expr v1.8.9/go.mod h1:5qsM3oLGDND7sDmQGDXHkYfkjYMUX14qsgqmH github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/appscode/go v0.0.0-20190808133642-1d4ef1f1c1e0/go.mod h1:iy07dV61Z7QQdCKJCIvUoDL21u6AIceRhZzyleh2ymc= -github.com/argoproj/gitops-engine v0.7.1-0.20221004132320-98ccd3d43fd9 h1:pXN64mJfrg8qx4mgWDnJ9E2T5ikZupvVRSXYMoe39Y8= -github.com/argoproj/gitops-engine v0.7.1-0.20221004132320-98ccd3d43fd9/go.mod h1:WpA/B7tgwfz+sdNE3LqrTrb7ArEY1FOPI2pAGI0hfPc= +github.com/argoproj/gitops-engine v0.7.1-0.20221103192913-b371e3bfc5e9 h1:qk4O1fw6ZtWwm0vNM1HFACSAJYnhuKweLNP6XzDJchE= +github.com/argoproj/gitops-engine v0.7.1-0.20221103192913-b371e3bfc5e9/go.mod h1:WpA/B7tgwfz+sdNE3LqrTrb7ArEY1FOPI2pAGI0hfPc= github.com/argoproj/notifications-engine v0.3.1-0.20220812180936-4d8552b0775f h1:xTts6TJ/SBbY9zV8qpueokUd3+SlJN6Abt4W6lAjOKM= github.com/argoproj/notifications-engine v0.3.1-0.20220812180936-4d8552b0775f/go.mod h1:R3zlopt+/juYlebQc9Jarn9vBQ2xZruWOWjUNkfGY9M= github.com/argoproj/pkg v0.11.1-0.20211203175135-36c59d8fafe0 h1:Cfp7rO/HpVxnwlRqJe0jHiBbZ77ZgXhB6HWlYD02Xdc= diff --git a/hack/generate-proto.sh b/hack/generate-proto.sh index c93f8bb473c2d..3627a297fd879 100755 --- a/hack/generate-proto.sh +++ b/hack/generate-proto.sh @@ -9,7 +9,8 @@ set -o errexit set -o nounset set -o pipefail -PROJECT_ROOT=$(cd $(dirname ${BASH_SOURCE})/..; pwd) +# shellcheck disable=SC2128 +PROJECT_ROOT=$(cd "$(dirname "${BASH_SOURCE}")"/..; pwd) PATH="${PROJECT_ROOT}/dist:${PATH}" GOPATH=$(go env GOPATH) @@ -51,11 +52,11 @@ else fi go-to-protobuf \ - --go-header-file=${PROJECT_ROOT}/hack/custom-boilerplate.go.txt \ - --packages=$(IFS=, ; echo "${PACKAGES[*]}") \ - --apimachinery-packages=$(IFS=, ; echo "${APIMACHINERY_PKGS[*]}") \ + --go-header-file="${PROJECT_ROOT}"/hack/custom-boilerplate.go.txt \ + --packages="$(IFS=, ; echo "${PACKAGES[*]}")" \ + --apimachinery-packages="$(IFS=, ; echo "${APIMACHINERY_PKGS[*]}")" \ --proto-import=./vendor \ - --proto-import=${protoc_include} + --proto-import="${protoc_include}" # Either protoc-gen-go, protoc-gen-gofast, or protoc-gen-gogofast can be used to build # server/*/.pb.go from .proto files. golang/protobuf and gogo/protobuf can be used @@ -73,17 +74,17 @@ MOD_ROOT=${GOPATH}/pkg/mod grpc_gateway_version=$(go list -m github.com/grpc-ecosystem/grpc-gateway | awk '{print $NF}' | head -1) GOOGLE_PROTO_API_PATH=${MOD_ROOT}/github.com/grpc-ecosystem/grpc-gateway@${grpc_gateway_version}/third_party/googleapis GOGO_PROTOBUF_PATH=${PROJECT_ROOT}/vendor/github.com/gogo/protobuf -PROTO_FILES=$(find $PROJECT_ROOT \( -name "*.proto" -and -path '*/server/*' -or -path '*/reposerver/*' -and -name "*.proto" -or -path '*/cmpserver/*' -and -name "*.proto" \) | sort) +PROTO_FILES=$(find "$PROJECT_ROOT" \( -name "*.proto" -and -path '*/server/*' -or -path '*/reposerver/*' -and -name "*.proto" -or -path '*/cmpserver/*' -and -name "*.proto" \) | sort) for i in ${PROTO_FILES}; do protoc \ - -I${PROJECT_ROOT} \ - -I${protoc_include} \ + -I"${PROJECT_ROOT}" \ + -I"${protoc_include}" \ -I./vendor \ - -I$GOPATH/src \ - -I${GOOGLE_PROTO_API_PATH} \ - -I${GOGO_PROTOBUF_PATH} \ - --${GOPROTOBINARY}_out=plugins=grpc:$GOPATH/src \ - --grpc-gateway_out=logtostderr=true:$GOPATH/src \ + -I"$GOPATH"/src \ + -I"${GOOGLE_PROTO_API_PATH}" \ + -I"${GOGO_PROTOBUF_PATH}" \ + --${GOPROTOBINARY}_out=plugins=grpc:"$GOPATH"/src \ + --grpc-gateway_out=logtostderr=true:"$GOPATH"/src \ --swagger_out=logtostderr=true:. \ $i done @@ -94,8 +95,8 @@ collect_swagger() { SWAGGER_ROOT="$1" EXPECTED_COLLISIONS="$2" SWAGGER_OUT="${PROJECT_ROOT}/assets/swagger.json" - PRIMARY_SWAGGER=`mktemp` - COMBINED_SWAGGER=`mktemp` + PRIMARY_SWAGGER=$(mktemp) + COMBINED_SWAGGER=$(mktemp) cat < "${PRIMARY_SWAGGER}" { @@ -124,7 +125,7 @@ clean_swagger() { } echo "If additional types are added, the number of expected collisions may need to be increased" -EXPECTED_COLLISION_COUNT=90 +EXPECTED_COLLISION_COUNT=91 collect_swagger server ${EXPECTED_COLLISION_COUNT} clean_swagger server clean_swagger reposerver diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml index 959582d68c4b2..15a9666f307d4 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -740,6 +740,19 @@ spec: (default: false)' type: boolean type: object + managedNamespaceMetadata: + description: ManagedNamespaceMetadata controls metadata in the + given namespace (if CreateNamespace=true) + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: description: Retry controls failed sync retry behavior properties: @@ -2447,6 +2460,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -2734,6 +2758,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3023,6 +3058,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3288,6 +3334,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3583,6 +3640,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3870,6 +3938,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4159,6 +4238,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4424,6 +4514,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4807,6 +4908,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5237,6 +5349,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5518,6 +5641,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5813,6 +5947,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -6100,6 +6245,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -6389,6 +6545,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -6654,6 +6821,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -7037,6 +7215,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -7467,6 +7656,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -7752,6 +7952,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -8132,6 +8343,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -8562,6 +8784,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -8850,6 +9083,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml index 911fbc01e249d..175ec3ea82998 100644 --- a/manifests/crds/application-crd.yaml +++ b/manifests/crds/application-crd.yaml @@ -739,6 +739,19 @@ spec: (default: false)' type: boolean type: object + managedNamespaceMetadata: + description: ManagedNamespaceMetadata controls metadata in the + given namespace (if CreateNamespace=true) + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: description: Retry controls failed sync retry behavior properties: diff --git a/manifests/crds/applicationset-crd.yaml b/manifests/crds/applicationset-crd.yaml index 5e654ad2e7a4e..726bafc2afda5 100644 --- a/manifests/crds/applicationset-crd.yaml +++ b/manifests/crds/applicationset-crd.yaml @@ -289,6 +289,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -576,6 +587,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -865,6 +887,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -1130,6 +1163,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -1425,6 +1469,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -1712,6 +1767,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -2001,6 +2067,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -2266,6 +2343,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -2649,6 +2737,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3079,6 +3178,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3360,6 +3470,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3655,6 +3776,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3942,6 +4074,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4231,6 +4374,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4496,6 +4650,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4879,6 +5044,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5309,6 +5485,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5594,6 +5781,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5974,6 +6172,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -6404,6 +6613,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -6692,6 +6912,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index 1cdac6f264cd2..36fbf572602f2 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -740,6 +740,19 @@ spec: (default: false)' type: boolean type: object + managedNamespaceMetadata: + description: ManagedNamespaceMetadata controls metadata in the + given namespace (if CreateNamespace=true) + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: description: Retry controls failed sync retry behavior properties: @@ -2447,6 +2460,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -2734,6 +2758,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3023,6 +3058,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3288,6 +3334,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3583,6 +3640,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3870,6 +3938,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4159,6 +4238,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4424,6 +4514,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4807,6 +4908,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5237,6 +5349,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5518,6 +5641,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5813,6 +5947,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -6100,6 +6245,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -6389,6 +6545,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -6654,6 +6821,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -7037,6 +7215,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -7467,6 +7656,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -7752,6 +7952,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -8132,6 +8343,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -8562,6 +8784,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -8850,6 +9083,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: diff --git a/manifests/install.yaml b/manifests/install.yaml index 32b793b23213c..b7f51dda9fc3d 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -740,6 +740,19 @@ spec: (default: false)' type: boolean type: object + managedNamespaceMetadata: + description: ManagedNamespaceMetadata controls metadata in the + given namespace (if CreateNamespace=true) + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: description: Retry controls failed sync retry behavior properties: @@ -2447,6 +2460,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -2734,6 +2758,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3023,6 +3058,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3288,6 +3334,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3583,6 +3640,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -3870,6 +3938,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4159,6 +4238,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4424,6 +4514,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -4807,6 +4908,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5237,6 +5349,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5518,6 +5641,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -5813,6 +5947,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -6100,6 +6245,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -6389,6 +6545,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -6654,6 +6821,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -7037,6 +7215,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -7467,6 +7656,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -7752,6 +7952,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -8132,6 +8343,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -8562,6 +8784,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: @@ -8850,6 +9083,17 @@ spec: selfHeal: type: boolean type: object + managedNamespaceMetadata: + properties: + annotations: + additionalProperties: + type: string + type: object + labels: + additionalProperties: + type: string + type: object + type: object retry: properties: backoff: diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 4ea2d24f9c18f..85b3ed8504857 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -1885,10 +1885,38 @@ func (m *ListGenerator) XXX_DiscardUnknown() { var xxx_messageInfo_ListGenerator proto.InternalMessageInfo +func (m *ManagedNamespaceMetadata) Reset() { *m = ManagedNamespaceMetadata{} } +func (*ManagedNamespaceMetadata) ProtoMessage() {} +func (*ManagedNamespaceMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{66} +} +func (m *ManagedNamespaceMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ManagedNamespaceMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ManagedNamespaceMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_ManagedNamespaceMetadata.Merge(m, src) +} +func (m *ManagedNamespaceMetadata) XXX_Size() int { + return m.Size() +} +func (m *ManagedNamespaceMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_ManagedNamespaceMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_ManagedNamespaceMetadata proto.InternalMessageInfo + func (m *MatrixGenerator) Reset() { *m = MatrixGenerator{} } func (*MatrixGenerator) ProtoMessage() {} func (*MatrixGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{66} + return fileDescriptor_030104ce3b95bcac, []int{67} } func (m *MatrixGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1916,7 +1944,7 @@ var xxx_messageInfo_MatrixGenerator proto.InternalMessageInfo func (m *MergeGenerator) Reset() { *m = MergeGenerator{} } func (*MergeGenerator) ProtoMessage() {} func (*MergeGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{67} + return fileDescriptor_030104ce3b95bcac, []int{68} } func (m *MergeGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1944,7 +1972,7 @@ var xxx_messageInfo_MergeGenerator proto.InternalMessageInfo func (m *NestedMatrixGenerator) Reset() { *m = NestedMatrixGenerator{} } func (*NestedMatrixGenerator) ProtoMessage() {} func (*NestedMatrixGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{68} + return fileDescriptor_030104ce3b95bcac, []int{69} } func (m *NestedMatrixGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1972,7 +2000,7 @@ var xxx_messageInfo_NestedMatrixGenerator proto.InternalMessageInfo func (m *NestedMergeGenerator) Reset() { *m = NestedMergeGenerator{} } func (*NestedMergeGenerator) ProtoMessage() {} func (*NestedMergeGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{69} + return fileDescriptor_030104ce3b95bcac, []int{70} } func (m *NestedMergeGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2000,7 +2028,7 @@ var xxx_messageInfo_NestedMergeGenerator proto.InternalMessageInfo func (m *Operation) Reset() { *m = Operation{} } func (*Operation) ProtoMessage() {} func (*Operation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{70} + return fileDescriptor_030104ce3b95bcac, []int{71} } func (m *Operation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2028,7 +2056,7 @@ var xxx_messageInfo_Operation proto.InternalMessageInfo func (m *OperationInitiator) Reset() { *m = OperationInitiator{} } func (*OperationInitiator) ProtoMessage() {} func (*OperationInitiator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{71} + return fileDescriptor_030104ce3b95bcac, []int{72} } func (m *OperationInitiator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2056,7 +2084,7 @@ var xxx_messageInfo_OperationInitiator proto.InternalMessageInfo func (m *OperationState) Reset() { *m = OperationState{} } func (*OperationState) ProtoMessage() {} func (*OperationState) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{72} + return fileDescriptor_030104ce3b95bcac, []int{73} } func (m *OperationState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2084,7 +2112,7 @@ var xxx_messageInfo_OperationState proto.InternalMessageInfo func (m *OrphanedResourceKey) Reset() { *m = OrphanedResourceKey{} } func (*OrphanedResourceKey) ProtoMessage() {} func (*OrphanedResourceKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{73} + return fileDescriptor_030104ce3b95bcac, []int{74} } func (m *OrphanedResourceKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2112,7 +2140,7 @@ var xxx_messageInfo_OrphanedResourceKey proto.InternalMessageInfo func (m *OrphanedResourcesMonitorSettings) Reset() { *m = OrphanedResourcesMonitorSettings{} } func (*OrphanedResourcesMonitorSettings) ProtoMessage() {} func (*OrphanedResourcesMonitorSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{74} + return fileDescriptor_030104ce3b95bcac, []int{75} } func (m *OrphanedResourcesMonitorSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2140,7 +2168,7 @@ var xxx_messageInfo_OrphanedResourcesMonitorSettings proto.InternalMessageInfo func (m *OverrideIgnoreDiff) Reset() { *m = OverrideIgnoreDiff{} } func (*OverrideIgnoreDiff) ProtoMessage() {} func (*OverrideIgnoreDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{75} + return fileDescriptor_030104ce3b95bcac, []int{76} } func (m *OverrideIgnoreDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2168,7 +2196,7 @@ var xxx_messageInfo_OverrideIgnoreDiff proto.InternalMessageInfo func (m *ProjectRole) Reset() { *m = ProjectRole{} } func (*ProjectRole) ProtoMessage() {} func (*ProjectRole) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{76} + return fileDescriptor_030104ce3b95bcac, []int{77} } func (m *ProjectRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2196,7 +2224,7 @@ var xxx_messageInfo_ProjectRole proto.InternalMessageInfo func (m *PullRequestGenerator) Reset() { *m = PullRequestGenerator{} } func (*PullRequestGenerator) ProtoMessage() {} func (*PullRequestGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{77} + return fileDescriptor_030104ce3b95bcac, []int{78} } func (m *PullRequestGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2224,7 +2252,7 @@ var xxx_messageInfo_PullRequestGenerator proto.InternalMessageInfo func (m *PullRequestGeneratorBitbucketServer) Reset() { *m = PullRequestGeneratorBitbucketServer{} } func (*PullRequestGeneratorBitbucketServer) ProtoMessage() {} func (*PullRequestGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{78} + return fileDescriptor_030104ce3b95bcac, []int{79} } func (m *PullRequestGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2252,7 +2280,7 @@ var xxx_messageInfo_PullRequestGeneratorBitbucketServer proto.InternalMessageInf func (m *PullRequestGeneratorFilter) Reset() { *m = PullRequestGeneratorFilter{} } func (*PullRequestGeneratorFilter) ProtoMessage() {} func (*PullRequestGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{79} + return fileDescriptor_030104ce3b95bcac, []int{80} } func (m *PullRequestGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2280,7 +2308,7 @@ var xxx_messageInfo_PullRequestGeneratorFilter proto.InternalMessageInfo func (m *PullRequestGeneratorGitLab) Reset() { *m = PullRequestGeneratorGitLab{} } func (*PullRequestGeneratorGitLab) ProtoMessage() {} func (*PullRequestGeneratorGitLab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{80} + return fileDescriptor_030104ce3b95bcac, []int{81} } func (m *PullRequestGeneratorGitLab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2308,7 +2336,7 @@ var xxx_messageInfo_PullRequestGeneratorGitLab proto.InternalMessageInfo func (m *PullRequestGeneratorGitea) Reset() { *m = PullRequestGeneratorGitea{} } func (*PullRequestGeneratorGitea) ProtoMessage() {} func (*PullRequestGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{81} + return fileDescriptor_030104ce3b95bcac, []int{82} } func (m *PullRequestGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2336,7 +2364,7 @@ var xxx_messageInfo_PullRequestGeneratorGitea proto.InternalMessageInfo func (m *PullRequestGeneratorGithub) Reset() { *m = PullRequestGeneratorGithub{} } func (*PullRequestGeneratorGithub) ProtoMessage() {} func (*PullRequestGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{82} + return fileDescriptor_030104ce3b95bcac, []int{83} } func (m *PullRequestGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2364,7 +2392,7 @@ var xxx_messageInfo_PullRequestGeneratorGithub proto.InternalMessageInfo func (m *RepoCreds) Reset() { *m = RepoCreds{} } func (*RepoCreds) ProtoMessage() {} func (*RepoCreds) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{83} + return fileDescriptor_030104ce3b95bcac, []int{84} } func (m *RepoCreds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2392,7 +2420,7 @@ var xxx_messageInfo_RepoCreds proto.InternalMessageInfo func (m *RepoCredsList) Reset() { *m = RepoCredsList{} } func (*RepoCredsList) ProtoMessage() {} func (*RepoCredsList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{84} + return fileDescriptor_030104ce3b95bcac, []int{85} } func (m *RepoCredsList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2420,7 +2448,7 @@ var xxx_messageInfo_RepoCredsList proto.InternalMessageInfo func (m *Repository) Reset() { *m = Repository{} } func (*Repository) ProtoMessage() {} func (*Repository) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{85} + return fileDescriptor_030104ce3b95bcac, []int{86} } func (m *Repository) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2448,7 +2476,7 @@ var xxx_messageInfo_Repository proto.InternalMessageInfo func (m *RepositoryCertificate) Reset() { *m = RepositoryCertificate{} } func (*RepositoryCertificate) ProtoMessage() {} func (*RepositoryCertificate) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{86} + return fileDescriptor_030104ce3b95bcac, []int{87} } func (m *RepositoryCertificate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2476,7 +2504,7 @@ var xxx_messageInfo_RepositoryCertificate proto.InternalMessageInfo func (m *RepositoryCertificateList) Reset() { *m = RepositoryCertificateList{} } func (*RepositoryCertificateList) ProtoMessage() {} func (*RepositoryCertificateList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{87} + return fileDescriptor_030104ce3b95bcac, []int{88} } func (m *RepositoryCertificateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2504,7 +2532,7 @@ var xxx_messageInfo_RepositoryCertificateList proto.InternalMessageInfo func (m *RepositoryList) Reset() { *m = RepositoryList{} } func (*RepositoryList) ProtoMessage() {} func (*RepositoryList) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{88} + return fileDescriptor_030104ce3b95bcac, []int{89} } func (m *RepositoryList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2532,7 +2560,7 @@ var xxx_messageInfo_RepositoryList proto.InternalMessageInfo func (m *ResourceAction) Reset() { *m = ResourceAction{} } func (*ResourceAction) ProtoMessage() {} func (*ResourceAction) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{89} + return fileDescriptor_030104ce3b95bcac, []int{90} } func (m *ResourceAction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2560,7 +2588,7 @@ var xxx_messageInfo_ResourceAction proto.InternalMessageInfo func (m *ResourceActionDefinition) Reset() { *m = ResourceActionDefinition{} } func (*ResourceActionDefinition) ProtoMessage() {} func (*ResourceActionDefinition) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{90} + return fileDescriptor_030104ce3b95bcac, []int{91} } func (m *ResourceActionDefinition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2588,7 +2616,7 @@ var xxx_messageInfo_ResourceActionDefinition proto.InternalMessageInfo func (m *ResourceActionParam) Reset() { *m = ResourceActionParam{} } func (*ResourceActionParam) ProtoMessage() {} func (*ResourceActionParam) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{91} + return fileDescriptor_030104ce3b95bcac, []int{92} } func (m *ResourceActionParam) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2616,7 +2644,7 @@ var xxx_messageInfo_ResourceActionParam proto.InternalMessageInfo func (m *ResourceActions) Reset() { *m = ResourceActions{} } func (*ResourceActions) ProtoMessage() {} func (*ResourceActions) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{92} + return fileDescriptor_030104ce3b95bcac, []int{93} } func (m *ResourceActions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2644,7 +2672,7 @@ var xxx_messageInfo_ResourceActions proto.InternalMessageInfo func (m *ResourceDiff) Reset() { *m = ResourceDiff{} } func (*ResourceDiff) ProtoMessage() {} func (*ResourceDiff) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{93} + return fileDescriptor_030104ce3b95bcac, []int{94} } func (m *ResourceDiff) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2672,7 +2700,7 @@ var xxx_messageInfo_ResourceDiff proto.InternalMessageInfo func (m *ResourceIgnoreDifferences) Reset() { *m = ResourceIgnoreDifferences{} } func (*ResourceIgnoreDifferences) ProtoMessage() {} func (*ResourceIgnoreDifferences) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{94} + return fileDescriptor_030104ce3b95bcac, []int{95} } func (m *ResourceIgnoreDifferences) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2700,7 +2728,7 @@ var xxx_messageInfo_ResourceIgnoreDifferences proto.InternalMessageInfo func (m *ResourceNetworkingInfo) Reset() { *m = ResourceNetworkingInfo{} } func (*ResourceNetworkingInfo) ProtoMessage() {} func (*ResourceNetworkingInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{95} + return fileDescriptor_030104ce3b95bcac, []int{96} } func (m *ResourceNetworkingInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2728,7 +2756,7 @@ var xxx_messageInfo_ResourceNetworkingInfo proto.InternalMessageInfo func (m *ResourceNode) Reset() { *m = ResourceNode{} } func (*ResourceNode) ProtoMessage() {} func (*ResourceNode) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{96} + return fileDescriptor_030104ce3b95bcac, []int{97} } func (m *ResourceNode) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2756,7 +2784,7 @@ var xxx_messageInfo_ResourceNode proto.InternalMessageInfo func (m *ResourceOverride) Reset() { *m = ResourceOverride{} } func (*ResourceOverride) ProtoMessage() {} func (*ResourceOverride) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{97} + return fileDescriptor_030104ce3b95bcac, []int{98} } func (m *ResourceOverride) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2784,7 +2812,7 @@ var xxx_messageInfo_ResourceOverride proto.InternalMessageInfo func (m *ResourceRef) Reset() { *m = ResourceRef{} } func (*ResourceRef) ProtoMessage() {} func (*ResourceRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{98} + return fileDescriptor_030104ce3b95bcac, []int{99} } func (m *ResourceRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2812,7 +2840,7 @@ var xxx_messageInfo_ResourceRef proto.InternalMessageInfo func (m *ResourceResult) Reset() { *m = ResourceResult{} } func (*ResourceResult) ProtoMessage() {} func (*ResourceResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{99} + return fileDescriptor_030104ce3b95bcac, []int{100} } func (m *ResourceResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2840,7 +2868,7 @@ var xxx_messageInfo_ResourceResult proto.InternalMessageInfo func (m *ResourceStatus) Reset() { *m = ResourceStatus{} } func (*ResourceStatus) ProtoMessage() {} func (*ResourceStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{100} + return fileDescriptor_030104ce3b95bcac, []int{101} } func (m *ResourceStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2868,7 +2896,7 @@ var xxx_messageInfo_ResourceStatus proto.InternalMessageInfo func (m *RetryStrategy) Reset() { *m = RetryStrategy{} } func (*RetryStrategy) ProtoMessage() {} func (*RetryStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{101} + return fileDescriptor_030104ce3b95bcac, []int{102} } func (m *RetryStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2896,7 +2924,7 @@ var xxx_messageInfo_RetryStrategy proto.InternalMessageInfo func (m *RevisionHistory) Reset() { *m = RevisionHistory{} } func (*RevisionHistory) ProtoMessage() {} func (*RevisionHistory) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{102} + return fileDescriptor_030104ce3b95bcac, []int{103} } func (m *RevisionHistory) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2924,7 +2952,7 @@ var xxx_messageInfo_RevisionHistory proto.InternalMessageInfo func (m *RevisionMetadata) Reset() { *m = RevisionMetadata{} } func (*RevisionMetadata) ProtoMessage() {} func (*RevisionMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{103} + return fileDescriptor_030104ce3b95bcac, []int{104} } func (m *RevisionMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2952,7 +2980,7 @@ var xxx_messageInfo_RevisionMetadata proto.InternalMessageInfo func (m *SCMProviderGenerator) Reset() { *m = SCMProviderGenerator{} } func (*SCMProviderGenerator) ProtoMessage() {} func (*SCMProviderGenerator) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{104} + return fileDescriptor_030104ce3b95bcac, []int{105} } func (m *SCMProviderGenerator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2980,7 +3008,7 @@ var xxx_messageInfo_SCMProviderGenerator proto.InternalMessageInfo func (m *SCMProviderGeneratorAzureDevOps) Reset() { *m = SCMProviderGeneratorAzureDevOps{} } func (*SCMProviderGeneratorAzureDevOps) ProtoMessage() {} func (*SCMProviderGeneratorAzureDevOps) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{105} + return fileDescriptor_030104ce3b95bcac, []int{106} } func (m *SCMProviderGeneratorAzureDevOps) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3008,7 +3036,7 @@ var xxx_messageInfo_SCMProviderGeneratorAzureDevOps proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucket) Reset() { *m = SCMProviderGeneratorBitbucket{} } func (*SCMProviderGeneratorBitbucket) ProtoMessage() {} func (*SCMProviderGeneratorBitbucket) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{106} + return fileDescriptor_030104ce3b95bcac, []int{107} } func (m *SCMProviderGeneratorBitbucket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3036,7 +3064,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucket proto.InternalMessageInfo func (m *SCMProviderGeneratorBitbucketServer) Reset() { *m = SCMProviderGeneratorBitbucketServer{} } func (*SCMProviderGeneratorBitbucketServer) ProtoMessage() {} func (*SCMProviderGeneratorBitbucketServer) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{107} + return fileDescriptor_030104ce3b95bcac, []int{108} } func (m *SCMProviderGeneratorBitbucketServer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3064,7 +3092,7 @@ var xxx_messageInfo_SCMProviderGeneratorBitbucketServer proto.InternalMessageInf func (m *SCMProviderGeneratorFilter) Reset() { *m = SCMProviderGeneratorFilter{} } func (*SCMProviderGeneratorFilter) ProtoMessage() {} func (*SCMProviderGeneratorFilter) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{108} + return fileDescriptor_030104ce3b95bcac, []int{109} } func (m *SCMProviderGeneratorFilter) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3092,7 +3120,7 @@ var xxx_messageInfo_SCMProviderGeneratorFilter proto.InternalMessageInfo func (m *SCMProviderGeneratorGitea) Reset() { *m = SCMProviderGeneratorGitea{} } func (*SCMProviderGeneratorGitea) ProtoMessage() {} func (*SCMProviderGeneratorGitea) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{109} + return fileDescriptor_030104ce3b95bcac, []int{110} } func (m *SCMProviderGeneratorGitea) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3120,7 +3148,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitea proto.InternalMessageInfo func (m *SCMProviderGeneratorGithub) Reset() { *m = SCMProviderGeneratorGithub{} } func (*SCMProviderGeneratorGithub) ProtoMessage() {} func (*SCMProviderGeneratorGithub) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{110} + return fileDescriptor_030104ce3b95bcac, []int{111} } func (m *SCMProviderGeneratorGithub) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3148,7 +3176,7 @@ var xxx_messageInfo_SCMProviderGeneratorGithub proto.InternalMessageInfo func (m *SCMProviderGeneratorGitlab) Reset() { *m = SCMProviderGeneratorGitlab{} } func (*SCMProviderGeneratorGitlab) ProtoMessage() {} func (*SCMProviderGeneratorGitlab) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{111} + return fileDescriptor_030104ce3b95bcac, []int{112} } func (m *SCMProviderGeneratorGitlab) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3176,7 +3204,7 @@ var xxx_messageInfo_SCMProviderGeneratorGitlab proto.InternalMessageInfo func (m *SecretRef) Reset() { *m = SecretRef{} } func (*SecretRef) ProtoMessage() {} func (*SecretRef) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{112} + return fileDescriptor_030104ce3b95bcac, []int{113} } func (m *SecretRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3204,7 +3232,7 @@ var xxx_messageInfo_SecretRef proto.InternalMessageInfo func (m *SignatureKey) Reset() { *m = SignatureKey{} } func (*SignatureKey) ProtoMessage() {} func (*SignatureKey) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{113} + return fileDescriptor_030104ce3b95bcac, []int{114} } func (m *SignatureKey) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3232,7 +3260,7 @@ var xxx_messageInfo_SignatureKey proto.InternalMessageInfo func (m *SyncOperation) Reset() { *m = SyncOperation{} } func (*SyncOperation) ProtoMessage() {} func (*SyncOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{114} + return fileDescriptor_030104ce3b95bcac, []int{115} } func (m *SyncOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3260,7 +3288,7 @@ var xxx_messageInfo_SyncOperation proto.InternalMessageInfo func (m *SyncOperationResource) Reset() { *m = SyncOperationResource{} } func (*SyncOperationResource) ProtoMessage() {} func (*SyncOperationResource) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{115} + return fileDescriptor_030104ce3b95bcac, []int{116} } func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3288,7 +3316,7 @@ var xxx_messageInfo_SyncOperationResource proto.InternalMessageInfo func (m *SyncOperationResult) Reset() { *m = SyncOperationResult{} } func (*SyncOperationResult) ProtoMessage() {} func (*SyncOperationResult) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{116} + return fileDescriptor_030104ce3b95bcac, []int{117} } func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3316,7 +3344,7 @@ var xxx_messageInfo_SyncOperationResult proto.InternalMessageInfo func (m *SyncPolicy) Reset() { *m = SyncPolicy{} } func (*SyncPolicy) ProtoMessage() {} func (*SyncPolicy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{117} + return fileDescriptor_030104ce3b95bcac, []int{118} } func (m *SyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3344,7 +3372,7 @@ var xxx_messageInfo_SyncPolicy proto.InternalMessageInfo func (m *SyncPolicyAutomated) Reset() { *m = SyncPolicyAutomated{} } func (*SyncPolicyAutomated) ProtoMessage() {} func (*SyncPolicyAutomated) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{118} + return fileDescriptor_030104ce3b95bcac, []int{119} } func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3372,7 +3400,7 @@ var xxx_messageInfo_SyncPolicyAutomated proto.InternalMessageInfo func (m *SyncStatus) Reset() { *m = SyncStatus{} } func (*SyncStatus) ProtoMessage() {} func (*SyncStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{119} + return fileDescriptor_030104ce3b95bcac, []int{120} } func (m *SyncStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3400,7 +3428,7 @@ var xxx_messageInfo_SyncStatus proto.InternalMessageInfo func (m *SyncStrategy) Reset() { *m = SyncStrategy{} } func (*SyncStrategy) ProtoMessage() {} func (*SyncStrategy) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{120} + return fileDescriptor_030104ce3b95bcac, []int{121} } func (m *SyncStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3428,7 +3456,7 @@ var xxx_messageInfo_SyncStrategy proto.InternalMessageInfo func (m *SyncStrategyApply) Reset() { *m = SyncStrategyApply{} } func (*SyncStrategyApply) ProtoMessage() {} func (*SyncStrategyApply) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{121} + return fileDescriptor_030104ce3b95bcac, []int{122} } func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3456,7 +3484,7 @@ var xxx_messageInfo_SyncStrategyApply proto.InternalMessageInfo func (m *SyncStrategyHook) Reset() { *m = SyncStrategyHook{} } func (*SyncStrategyHook) ProtoMessage() {} func (*SyncStrategyHook) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{122} + return fileDescriptor_030104ce3b95bcac, []int{123} } func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3484,7 +3512,7 @@ var xxx_messageInfo_SyncStrategyHook proto.InternalMessageInfo func (m *SyncWindow) Reset() { *m = SyncWindow{} } func (*SyncWindow) ProtoMessage() {} func (*SyncWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{123} + return fileDescriptor_030104ce3b95bcac, []int{124} } func (m *SyncWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3512,7 +3540,7 @@ var xxx_messageInfo_SyncWindow proto.InternalMessageInfo func (m *TLSClientConfig) Reset() { *m = TLSClientConfig{} } func (*TLSClientConfig) ProtoMessage() {} func (*TLSClientConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{124} + return fileDescriptor_030104ce3b95bcac, []int{125} } func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3614,6 +3642,9 @@ func init() { proto.RegisterType((*KnownTypeField)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.KnownTypeField") proto.RegisterType((*KustomizeOptions)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.KustomizeOptions") proto.RegisterType((*ListGenerator)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ListGenerator") + proto.RegisterType((*ManagedNamespaceMetadata)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ManagedNamespaceMetadata") + proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ManagedNamespaceMetadata.AnnotationsEntry") + proto.RegisterMapType((map[string]string)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.ManagedNamespaceMetadata.LabelsEntry") proto.RegisterType((*MatrixGenerator)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.MatrixGenerator") proto.RegisterType((*MergeGenerator)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.MergeGenerator") proto.RegisterType((*NestedMatrixGenerator)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.NestedMatrixGenerator") @@ -3682,567 +3713,572 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 8955 bytes of a gzipped FileDescriptorProto + // 9025 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x6c, 0x24, 0xc9, - 0x75, 0xd8, 0xf5, 0x0c, 0x87, 0x9c, 0x79, 0xfc, 0xd8, 0x65, 0xed, 0xee, 0x1d, 0x6f, 0xef, 0x6e, - 0xb9, 0xe8, 0x83, 0xa5, 0x73, 0x74, 0x47, 0xe6, 0xd6, 0x27, 0xe5, 0xe2, 0xb3, 0x4f, 0xe6, 0x90, - 0xbb, 0x5c, 0xee, 0xf2, 0xeb, 0x8a, 0xdc, 0x5d, 0xeb, 0x64, 0x7d, 0x34, 0x7b, 0x6a, 0x86, 0xbd, - 0xec, 0xe9, 0x9e, 0xed, 0xee, 0xe1, 0x72, 0xce, 0x5f, 0x92, 0x6c, 0xc7, 0x0a, 0xf4, 0x19, 0x29, - 0x40, 0x64, 0x20, 0x48, 0x14, 0xd9, 0x30, 0x62, 0x24, 0x42, 0x92, 0x5f, 0xf9, 0x42, 0x7e, 0xd8, - 0xce, 0x0f, 0x05, 0x09, 0x10, 0x01, 0x31, 0x2c, 0x27, 0x4e, 0x68, 0x89, 0x41, 0xe0, 0xc4, 0x40, - 0x1c, 0xc4, 0xf1, 0x9f, 0x2c, 0xf2, 0x23, 0xa8, 0xef, 0xea, 0x9e, 0x99, 0xe5, 0xcc, 0xb2, 0xb9, - 0xbb, 0x16, 0xee, 0xdf, 0xcc, 0x7b, 0xaf, 0xdf, 0x7b, 0x5d, 0x5d, 0xf5, 0xea, 0x55, 0xbd, 0x57, + 0x75, 0x98, 0x7a, 0x86, 0x43, 0xce, 0x3c, 0x7e, 0xec, 0xb2, 0x76, 0xf7, 0x8e, 0xb7, 0x77, 0xb7, + 0x5c, 0xf4, 0xc1, 0xd2, 0x39, 0xba, 0x23, 0x73, 0xeb, 0x93, 0x72, 0xf1, 0xd9, 0x27, 0x73, 0xc8, + 0x5d, 0x2e, 0x77, 0xf9, 0x75, 0x45, 0xee, 0xae, 0x75, 0xb2, 0x3e, 0x9a, 0x3d, 0x35, 0xc3, 0x5e, + 0xf6, 0x74, 0xcf, 0x75, 0xf7, 0x70, 0x39, 0xe7, 0x2f, 0x49, 0xb6, 0x63, 0x25, 0xfa, 0x8c, 0x14, + 0x20, 0x32, 0x10, 0x38, 0x8a, 0x6c, 0x18, 0x31, 0x12, 0x21, 0xce, 0xaf, 0x7c, 0x21, 0x3f, 0x6c, + 0xe5, 0x87, 0x82, 0x04, 0x88, 0x80, 0x18, 0x96, 0x13, 0x27, 0xf4, 0x89, 0x41, 0xe0, 0xc4, 0x40, + 0x1c, 0xc4, 0xf1, 0x9f, 0x2c, 0xf2, 0xc3, 0xa8, 0xef, 0xea, 0x9e, 0x99, 0xe5, 0xcc, 0xb2, 0xb9, + 0xbb, 0x12, 0xee, 0xdf, 0xcc, 0x7b, 0xaf, 0xdf, 0x7b, 0x5d, 0x5d, 0xf5, 0xea, 0x55, 0xd5, 0x7b, 0xaf, 0x60, 0xb5, 0xe1, 0x25, 0xbb, 0xed, 0x9d, 0x39, 0x37, 0x6c, 0xce, 0x3b, 0x51, 0x23, 0x6c, - 0x45, 0xe1, 0x5d, 0xf6, 0xe3, 0x35, 0xb7, 0x36, 0xbf, 0x7f, 0x65, 0xbe, 0xb5, 0xd7, 0x98, 0x77, - 0x5a, 0x5e, 0x3c, 0xef, 0xb4, 0x5a, 0xbe, 0xe7, 0x3a, 0x89, 0x17, 0x06, 0xf3, 0xfb, 0xaf, 0x3b, - 0x7e, 0x6b, 0xd7, 0x79, 0x7d, 0xbe, 0x41, 0x02, 0x12, 0x39, 0x09, 0xa9, 0xcd, 0xb5, 0xa2, 0x30, - 0x09, 0xd1, 0x4f, 0x68, 0x6e, 0x73, 0x92, 0x1b, 0xfb, 0xf1, 0x29, 0xb7, 0x36, 0xb7, 0x7f, 0x65, - 0xae, 0xb5, 0xd7, 0x98, 0xa3, 0xdc, 0xe6, 0x0c, 0x6e, 0x73, 0x92, 0xdb, 0xc5, 0xd7, 0x0c, 0x5d, + 0x45, 0xe1, 0x5d, 0xf6, 0xe3, 0x65, 0xb7, 0x36, 0xbf, 0x7f, 0x65, 0xbe, 0xb5, 0xd7, 0x98, 0x77, + 0x5a, 0x5e, 0x3c, 0xef, 0xb4, 0x5a, 0xbe, 0xe7, 0x3a, 0x89, 0x17, 0x06, 0xf3, 0xfb, 0xaf, 0x38, + 0x7e, 0x6b, 0xd7, 0x79, 0x65, 0xbe, 0x41, 0x02, 0x12, 0x39, 0x09, 0xa9, 0xcd, 0xb5, 0xa2, 0x30, + 0x09, 0xd1, 0x4f, 0x68, 0x6e, 0x73, 0x92, 0x1b, 0xfb, 0xf1, 0x49, 0xb7, 0x36, 0xb7, 0x7f, 0x65, + 0xae, 0xb5, 0xd7, 0x98, 0xa3, 0xdc, 0xe6, 0x0c, 0x6e, 0x73, 0x92, 0xdb, 0xc5, 0x97, 0x0d, 0x5d, 0x1a, 0x61, 0x23, 0x9c, 0x67, 0x4c, 0x77, 0xda, 0x75, 0xf6, 0x8f, 0xfd, 0x61, 0xbf, 0xb8, 0xb0, - 0x8b, 0xf6, 0xde, 0x9b, 0xf1, 0x9c, 0x17, 0x52, 0xf5, 0xe6, 0xdd, 0x30, 0x22, 0xf3, 0xfb, 0x5d, - 0x0a, 0x5d, 0xbc, 0xae, 0x69, 0xc8, 0x41, 0x42, 0x82, 0xd8, 0x0b, 0x83, 0xf8, 0x35, 0xaa, 0x02, - 0x89, 0xf6, 0x49, 0x64, 0xbe, 0x9e, 0x41, 0xd0, 0x8b, 0xd3, 0x1b, 0x9a, 0x53, 0xd3, 0x71, 0x77, + 0x8b, 0xf6, 0xde, 0x6b, 0xf1, 0x9c, 0x17, 0x52, 0xf5, 0xe6, 0xdd, 0x30, 0x22, 0xf3, 0xfb, 0x5d, + 0x0a, 0x5d, 0xbc, 0xae, 0x69, 0xc8, 0x41, 0x42, 0x82, 0xd8, 0x0b, 0x83, 0xf8, 0x65, 0xaa, 0x02, + 0x89, 0xf6, 0x49, 0x64, 0xbe, 0x9e, 0x41, 0xd0, 0x8b, 0xd3, 0xab, 0x9a, 0x53, 0xd3, 0x71, 0x77, 0xbd, 0x80, 0x44, 0x1d, 0xfd, 0x78, 0x93, 0x24, 0x4e, 0xaf, 0xa7, 0xe6, 0xfb, 0x3d, 0x15, 0xb5, - 0x83, 0xc4, 0x6b, 0x92, 0xae, 0x07, 0x3e, 0x72, 0xdc, 0x03, 0xb1, 0xbb, 0x4b, 0x9a, 0x4e, 0xf6, - 0x39, 0xfb, 0x1e, 0x4c, 0x2e, 0xdc, 0xd9, 0x5a, 0x68, 0x27, 0xbb, 0x8b, 0x61, 0x50, 0xf7, 0x1a, - 0xe8, 0xc3, 0x30, 0xee, 0xfa, 0xed, 0x38, 0x21, 0xd1, 0xba, 0xd3, 0x24, 0x33, 0xd6, 0x65, 0xeb, - 0x95, 0x4a, 0xf5, 0xdc, 0x77, 0x0e, 0x67, 0x9f, 0x39, 0x3a, 0x9c, 0x1d, 0x5f, 0xd4, 0x28, 0x6c, - 0xd2, 0xa1, 0x1f, 0x85, 0xb1, 0x28, 0xf4, 0xc9, 0x02, 0x5e, 0x9f, 0x29, 0xb0, 0x47, 0xce, 0x88, - 0x47, 0xc6, 0x30, 0x07, 0x63, 0x89, 0xb7, 0x7f, 0xbf, 0x00, 0xb0, 0xd0, 0x6a, 0x6d, 0x46, 0xe1, - 0x5d, 0xe2, 0x26, 0xe8, 0xd3, 0x50, 0xa6, 0xad, 0x50, 0x73, 0x12, 0x87, 0x49, 0x1b, 0xbf, 0xf2, - 0x97, 0xe7, 0xf8, 0xcb, 0xcc, 0x99, 0x2f, 0xa3, 0xfb, 0x00, 0xa5, 0x9e, 0xdb, 0x7f, 0x7d, 0x6e, - 0x63, 0x87, 0x3e, 0xbf, 0x46, 0x12, 0xa7, 0x8a, 0x84, 0x30, 0xd0, 0x30, 0xac, 0xb8, 0xa2, 0x00, - 0x46, 0xe2, 0x16, 0x71, 0x99, 0x62, 0xe3, 0x57, 0x56, 0xe7, 0x4e, 0xd2, 0xd9, 0xe6, 0xb4, 0xe6, - 0x5b, 0x2d, 0xe2, 0x56, 0x27, 0x84, 0xe4, 0x11, 0xfa, 0x0f, 0x33, 0x39, 0x68, 0x1f, 0x46, 0xe3, - 0xc4, 0x49, 0xda, 0xf1, 0x4c, 0x91, 0x49, 0x5c, 0xcf, 0x4d, 0x22, 0xe3, 0x5a, 0x9d, 0x12, 0x32, - 0x47, 0xf9, 0x7f, 0x2c, 0xa4, 0xd9, 0xff, 0xc5, 0x82, 0x29, 0x4d, 0xbc, 0xea, 0xc5, 0x09, 0xfa, - 0x99, 0xae, 0xc6, 0x9d, 0x1b, 0xac, 0x71, 0xe9, 0xd3, 0xac, 0x69, 0xcf, 0x0a, 0x61, 0x65, 0x09, - 0x31, 0x1a, 0xb6, 0x09, 0x25, 0x2f, 0x21, 0xcd, 0x78, 0xa6, 0x70, 0xb9, 0xf8, 0xca, 0xf8, 0x95, - 0xeb, 0x79, 0xbd, 0x67, 0x75, 0x52, 0x08, 0x2d, 0xad, 0x50, 0xf6, 0x98, 0x4b, 0xb1, 0x7f, 0x6b, - 0xc2, 0x7c, 0x3f, 0xda, 0xe0, 0xe8, 0x75, 0x18, 0x8f, 0xc3, 0x76, 0xe4, 0x12, 0x4c, 0x5a, 0x61, - 0x3c, 0x63, 0x5d, 0x2e, 0xd2, 0xae, 0x47, 0x7b, 0xea, 0x96, 0x06, 0x63, 0x93, 0x06, 0x7d, 0xd9, - 0x82, 0x89, 0x1a, 0x89, 0x13, 0x2f, 0x60, 0xf2, 0xa5, 0xf2, 0xdb, 0x27, 0x56, 0x5e, 0x02, 0x97, - 0x34, 0xf3, 0xea, 0x79, 0xf1, 0x22, 0x13, 0x06, 0x30, 0xc6, 0x29, 0xf9, 0x74, 0xc4, 0xd5, 0x48, - 0xec, 0x46, 0x5e, 0x8b, 0xfe, 0x67, 0x7d, 0xc6, 0x18, 0x71, 0x4b, 0x1a, 0x85, 0x4d, 0x3a, 0x14, - 0x40, 0x89, 0x8e, 0xa8, 0x78, 0x66, 0x84, 0xe9, 0xbf, 0x72, 0x32, 0xfd, 0x45, 0xa3, 0xd2, 0xc1, - 0xaa, 0x5b, 0x9f, 0xfe, 0x8b, 0x31, 0x17, 0x83, 0xbe, 0x64, 0xc1, 0x8c, 0x18, 0xf1, 0x98, 0xf0, - 0x06, 0xbd, 0xb3, 0xeb, 0x25, 0xc4, 0xf7, 0xe2, 0x64, 0xa6, 0xc4, 0x74, 0x98, 0x1f, 0xac, 0x6f, - 0x2d, 0x47, 0x61, 0xbb, 0x75, 0xd3, 0x0b, 0x6a, 0xd5, 0xcb, 0x42, 0xd2, 0xcc, 0x62, 0x1f, 0xc6, - 0xb8, 0xaf, 0x48, 0xf4, 0x75, 0x0b, 0x2e, 0x06, 0x4e, 0x93, 0xc4, 0x2d, 0x87, 0x7e, 0x5a, 0x8e, - 0xae, 0xfa, 0x8e, 0xbb, 0xc7, 0x34, 0x1a, 0x7d, 0x34, 0x8d, 0x6c, 0xa1, 0xd1, 0xc5, 0xf5, 0xbe, - 0xac, 0xf1, 0x43, 0xc4, 0xa2, 0x5f, 0xb7, 0x60, 0x3a, 0x8c, 0x5a, 0xbb, 0x4e, 0x40, 0x6a, 0x12, - 0x1b, 0xcf, 0x8c, 0xb1, 0xa1, 0xf7, 0xc9, 0x93, 0x7d, 0xa2, 0x8d, 0x2c, 0xdb, 0xb5, 0x30, 0xf0, - 0x92, 0x30, 0xda, 0x22, 0x49, 0xe2, 0x05, 0x8d, 0xb8, 0x7a, 0xe1, 0xe8, 0x70, 0x76, 0xba, 0x8b, - 0x0a, 0x77, 0xeb, 0x83, 0x7e, 0x16, 0xc6, 0xe3, 0x4e, 0xe0, 0xde, 0xf1, 0x82, 0x5a, 0x78, 0x3f, - 0x9e, 0x29, 0xe7, 0x31, 0x7c, 0xb7, 0x14, 0x43, 0x31, 0x00, 0xb5, 0x00, 0x6c, 0x4a, 0xeb, 0xfd, - 0xe1, 0x74, 0x57, 0xaa, 0xe4, 0xfd, 0xe1, 0x74, 0x67, 0x7a, 0x88, 0x58, 0xf4, 0xab, 0x16, 0x4c, - 0xc6, 0x5e, 0x23, 0x70, 0x92, 0x76, 0x44, 0x6e, 0x92, 0x4e, 0x3c, 0x03, 0x4c, 0x91, 0x1b, 0x27, - 0x6c, 0x15, 0x83, 0x65, 0xf5, 0x82, 0xd0, 0x71, 0xd2, 0x84, 0xc6, 0x38, 0x2d, 0xb7, 0xd7, 0x40, - 0xd3, 0xdd, 0x7a, 0x3c, 0xdf, 0x81, 0xa6, 0x3b, 0x75, 0x5f, 0x91, 0xe8, 0xa7, 0xe0, 0x2c, 0x07, - 0xa9, 0x96, 0x8d, 0x67, 0x26, 0x98, 0xa1, 0x3d, 0x7f, 0x74, 0x38, 0x7b, 0x76, 0x2b, 0x83, 0xc3, - 0x5d, 0xd4, 0xe8, 0x1e, 0xcc, 0xb6, 0x48, 0xd4, 0xf4, 0x92, 0x8d, 0xc0, 0xef, 0x48, 0xf3, 0xed, - 0x86, 0x2d, 0x52, 0x13, 0xea, 0xc4, 0x33, 0x93, 0x97, 0xad, 0x57, 0xca, 0xd5, 0x0f, 0x0a, 0x35, - 0x67, 0x37, 0x1f, 0x4e, 0x8e, 0x8f, 0xe3, 0x67, 0xff, 0x9b, 0x02, 0x9c, 0xcd, 0x4e, 0x9c, 0xe8, - 0x37, 0x2d, 0x38, 0x73, 0xf7, 0x7e, 0xb2, 0x1d, 0xee, 0x91, 0x20, 0xae, 0x76, 0xa8, 0x79, 0x63, - 0x53, 0xc6, 0xf8, 0x15, 0x37, 0xdf, 0x29, 0x7a, 0xee, 0x46, 0x5a, 0xca, 0xd5, 0x20, 0x89, 0x3a, - 0xd5, 0xe7, 0xc4, 0xdb, 0x9d, 0xb9, 0x71, 0x67, 0xdb, 0xc4, 0xe2, 0xac, 0x52, 0x17, 0xbf, 0x60, - 0xc1, 0xf9, 0x5e, 0x2c, 0xd0, 0x59, 0x28, 0xee, 0x91, 0x0e, 0xf7, 0xca, 0x30, 0xfd, 0x89, 0x3e, - 0x01, 0xa5, 0x7d, 0xc7, 0x6f, 0x13, 0xe1, 0xdd, 0x2c, 0x9f, 0xec, 0x45, 0x94, 0x66, 0x98, 0x73, - 0xfd, 0xf1, 0xc2, 0x9b, 0x96, 0xfd, 0xef, 0x8b, 0x30, 0x6e, 0xcc, 0x6f, 0x8f, 0xc1, 0x63, 0x0b, - 0x53, 0x1e, 0xdb, 0x5a, 0x6e, 0x53, 0x73, 0x5f, 0x97, 0xed, 0x7e, 0xc6, 0x65, 0xdb, 0xc8, 0x4f, - 0xe4, 0x43, 0x7d, 0x36, 0x94, 0x40, 0x25, 0x6c, 0x51, 0x8f, 0x9c, 0x4e, 0xfd, 0x23, 0x79, 0x7c, - 0xc2, 0x0d, 0xc9, 0xae, 0x3a, 0x79, 0x74, 0x38, 0x5b, 0x51, 0x7f, 0xb1, 0x16, 0x64, 0x7f, 0xcf, - 0x82, 0xf3, 0x86, 0x8e, 0x8b, 0x61, 0x50, 0xf3, 0xd8, 0xa7, 0xbd, 0x0c, 0x23, 0x49, 0xa7, 0x25, - 0xdd, 0x7e, 0xd5, 0x52, 0xdb, 0x9d, 0x16, 0xc1, 0x0c, 0x43, 0x1d, 0xfd, 0x26, 0x89, 0x63, 0xa7, - 0x41, 0xb2, 0x8e, 0xfe, 0x1a, 0x07, 0x63, 0x89, 0x47, 0x11, 0x20, 0xdf, 0x89, 0x93, 0xed, 0xc8, - 0x09, 0x62, 0xc6, 0x7e, 0xdb, 0x6b, 0x12, 0xd1, 0xc0, 0x7f, 0x69, 0xb0, 0x1e, 0x43, 0x9f, 0xa8, - 0x3e, 0x7b, 0x74, 0x38, 0x8b, 0x56, 0xbb, 0x38, 0xe1, 0x1e, 0xdc, 0xed, 0xaf, 0x5b, 0xf0, 0x6c, - 0x6f, 0x5f, 0x0c, 0x7d, 0x00, 0x46, 0xf9, 0xea, 0x4d, 0xbc, 0x9d, 0xfe, 0x24, 0x0c, 0x8a, 0x05, - 0x16, 0xcd, 0x43, 0x45, 0xcd, 0x13, 0xe2, 0x1d, 0xa7, 0x05, 0x69, 0x45, 0x4f, 0x2e, 0x9a, 0x86, - 0x36, 0x1a, 0xfd, 0x23, 0x3c, 0x37, 0xd5, 0x68, 0x6c, 0x91, 0xc4, 0x30, 0xf6, 0x1f, 0x59, 0x70, - 0xc6, 0xd0, 0xea, 0x31, 0xb8, 0xe6, 0x41, 0xda, 0x35, 0x5f, 0xc9, 0xad, 0x3f, 0xf7, 0xf1, 0xcd, - 0x8f, 0x0a, 0xcc, 0x37, 0x57, 0xbd, 0x9e, 0x3c, 0x8e, 0x85, 0x5d, 0x94, 0x32, 0x13, 0x9b, 0xf9, - 0x8d, 0x59, 0xd2, 0x7f, 0x71, 0xf7, 0x5e, 0xc6, 0x52, 0xe0, 0x5c, 0xa5, 0x3e, 0x7c, 0x81, 0xf7, - 0x27, 0x05, 0x78, 0x2e, 0xfd, 0x80, 0x1e, 0xb9, 0x1f, 0x4d, 0x8d, 0xdc, 0x0f, 0x99, 0x23, 0xf7, - 0xc1, 0xe1, 0xec, 0x0b, 0x7d, 0x1e, 0xfb, 0x0b, 0x33, 0xb0, 0xd1, 0xb2, 0x6a, 0xf7, 0x11, 0xa6, - 0xdd, 0x7c, 0xba, 0x8d, 0x1e, 0x1c, 0xce, 0xbe, 0xd4, 0xe7, 0x1d, 0x33, 0x16, 0xf7, 0x03, 0x30, - 0x1a, 0x11, 0x27, 0x0e, 0x83, 0x99, 0x52, 0xda, 0x0c, 0x60, 0x06, 0xc5, 0x02, 0x6b, 0xff, 0x51, - 0x39, 0xdb, 0xd8, 0xcb, 0x7c, 0xef, 0x24, 0x8c, 0x90, 0x07, 0x23, 0xcc, 0x1b, 0xe3, 0xdd, 0xfa, - 0xe6, 0xc9, 0xba, 0x00, 0x1d, 0xbd, 0x8a, 0x75, 0xb5, 0x4c, 0xbf, 0x1a, 0x05, 0x61, 0x26, 0x02, - 0x1d, 0x40, 0xd9, 0x95, 0x4e, 0x52, 0x21, 0x8f, 0xed, 0x04, 0xe1, 0x22, 0x69, 0x89, 0x13, 0xd4, - 0x84, 0x28, 0xcf, 0x4a, 0x49, 0x43, 0x04, 0x8a, 0x0d, 0x2f, 0x11, 0x9f, 0xf5, 0x84, 0x6e, 0xf0, - 0xb2, 0x67, 0xbc, 0xe2, 0xd8, 0xd1, 0xe1, 0x6c, 0x71, 0xd9, 0x4b, 0x30, 0xe5, 0x8f, 0x7e, 0xc5, - 0x82, 0xf1, 0xd8, 0x6d, 0x6e, 0x46, 0xe1, 0xbe, 0x57, 0x23, 0x91, 0x98, 0x04, 0x4f, 0x38, 0xac, - 0xb6, 0x16, 0xd7, 0x24, 0x43, 0x2d, 0x97, 0x2f, 0x4b, 0x34, 0x06, 0x9b, 0x72, 0xa9, 0x73, 0xf8, - 0x9c, 0x78, 0xf7, 0x25, 0xe2, 0x7a, 0x31, 0x9d, 0x32, 0x85, 0x2f, 0xcc, 0x7a, 0xca, 0x89, 0x9d, - 0x82, 0xa5, 0xb6, 0xbb, 0x47, 0xc7, 0x9b, 0x56, 0xe8, 0x85, 0xa3, 0xc3, 0xd9, 0xe7, 0x16, 0x7b, - 0xcb, 0xc4, 0xfd, 0x94, 0x61, 0x0d, 0xd6, 0x6a, 0xfb, 0x3e, 0x26, 0xf7, 0xda, 0x84, 0xad, 0x74, - 0x73, 0x68, 0xb0, 0x4d, 0xcd, 0x30, 0xd3, 0x60, 0x06, 0x06, 0x9b, 0x72, 0xd1, 0x3d, 0x18, 0x6d, - 0x3a, 0x49, 0xe4, 0x1d, 0x88, 0xe5, 0xed, 0x09, 0xdd, 0xb4, 0x35, 0xc6, 0x4b, 0x0b, 0x07, 0x3a, - 0x26, 0x39, 0x10, 0x0b, 0x41, 0xa8, 0x09, 0xa5, 0x26, 0x89, 0x1a, 0x64, 0xa6, 0x9c, 0xc7, 0x56, - 0xde, 0x1a, 0x65, 0xa5, 0x05, 0x56, 0xe8, 0xa4, 0xc6, 0x60, 0x98, 0x4b, 0x41, 0x9f, 0x80, 0x72, - 0x4c, 0x7c, 0xe2, 0x26, 0x61, 0x34, 0x53, 0x61, 0x12, 0x7f, 0x6c, 0xc0, 0x29, 0xda, 0xd9, 0x21, - 0xfe, 0x96, 0x78, 0x94, 0x0f, 0x30, 0xf9, 0x0f, 0x2b, 0x96, 0xf6, 0x7f, 0xb3, 0x00, 0xa5, 0x2d, - 0xcc, 0x63, 0x70, 0x0c, 0xee, 0xa5, 0x1d, 0x83, 0xd5, 0x3c, 0xa7, 0xaf, 0x3e, 0xbe, 0xc1, 0x77, - 0xca, 0x90, 0xb1, 0xcd, 0xeb, 0x24, 0x4e, 0x48, 0xed, 0x7d, 0x7b, 0xfa, 0xbe, 0x3d, 0x7d, 0xdf, - 0x9e, 0x2a, 0x7b, 0xba, 0x93, 0xb1, 0xa7, 0x6f, 0x1b, 0xa3, 0x5e, 0xc7, 0x98, 0x3e, 0xa5, 0x82, - 0x50, 0xa6, 0x06, 0x06, 0x01, 0xb5, 0x04, 0x37, 0xb6, 0x36, 0xd6, 0x7b, 0x1a, 0xd0, 0x4f, 0xa5, - 0x0d, 0xe8, 0x49, 0x45, 0x3c, 0x76, 0x93, 0x79, 0x54, 0xcc, 0x9a, 0x4c, 0x16, 0x06, 0xb8, 0x02, - 0xd0, 0x08, 0xb7, 0x49, 0xb3, 0xe5, 0x3b, 0x09, 0x77, 0x81, 0xcb, 0x7a, 0xe9, 0xb0, 0xac, 0x30, - 0xd8, 0xa0, 0x42, 0x7f, 0xdd, 0x02, 0x68, 0xc8, 0x4f, 0x23, 0xcd, 0xe1, 0xad, 0x3c, 0xcd, 0xa1, - 0xfe, 0xf0, 0x5a, 0x17, 0x25, 0x10, 0x1b, 0xc2, 0xd1, 0xe7, 0x2c, 0x28, 0x27, 0x52, 0x7d, 0x6e, - 0x20, 0xb6, 0xf3, 0xd4, 0x44, 0xbe, 0xb4, 0x9e, 0x19, 0x54, 0x93, 0x28, 0xb9, 0xe8, 0xaf, 0x59, - 0x00, 0x71, 0x27, 0x70, 0x37, 0x43, 0xdf, 0x73, 0x3b, 0xc2, 0x6e, 0xdc, 0xce, 0x75, 0x79, 0xa3, - 0xb8, 0x57, 0xa7, 0x68, 0x6b, 0xe8, 0xff, 0xd8, 0x90, 0x6c, 0x7f, 0x2b, 0xbd, 0x3b, 0xa1, 0xd6, - 0x45, 0xec, 0x93, 0xb9, 0xd2, 0xad, 0x8f, 0xc5, 0xd6, 0x5d, 0xae, 0x9f, 0x4c, 0x2d, 0x1a, 0xf4, - 0x27, 0x53, 0xa0, 0x18, 0x1b, 0xc2, 0xed, 0xcf, 0x5a, 0x30, 0xd3, 0xef, 0xed, 0x10, 0x81, 0x17, - 0x5a, 0x11, 0x61, 0x63, 0x48, 0x6d, 0xba, 0x6f, 0x04, 0x4b, 0xc4, 0x27, 0x6c, 0x9f, 0x87, 0x77, - 0xd0, 0x97, 0x85, 0x84, 0x17, 0x36, 0xfb, 0x93, 0xe2, 0x87, 0xf1, 0xb1, 0x7f, 0xa3, 0x90, 0xda, - 0xec, 0x30, 0x3e, 0x34, 0xfa, 0x86, 0xd5, 0xe5, 0x45, 0xfc, 0xf4, 0x69, 0xf4, 0x28, 0xe6, 0x6f, - 0xa8, 0xbd, 0xf7, 0xfe, 0x34, 0x4f, 0x70, 0x73, 0xcf, 0xfe, 0x77, 0x23, 0xf0, 0x10, 0xcd, 0xd4, - 0xf6, 0x8d, 0xd5, 0x6f, 0xfb, 0x66, 0xf8, 0x1d, 0xa1, 0x2f, 0x5a, 0x30, 0xea, 0x53, 0x83, 0x16, - 0xcf, 0x14, 0x59, 0x27, 0xad, 0x9d, 0x56, 0xdb, 0x73, 0xbb, 0x19, 0xf3, 0x0d, 0x66, 0xb5, 0x94, - 0xe5, 0x40, 0x2c, 0x74, 0x40, 0xdf, 0xb4, 0x60, 0xdc, 0x09, 0x82, 0x30, 0x11, 0x11, 0x4f, 0x1e, - 0x31, 0xf4, 0x4e, 0x4d, 0xa7, 0x05, 0x2d, 0x8b, 0x2b, 0xa6, 0xa2, 0x99, 0x06, 0x06, 0x9b, 0x2a, - 0xa1, 0x39, 0x80, 0xba, 0x17, 0x38, 0xbe, 0xf7, 0x1e, 0x75, 0xcc, 0x4a, 0x2c, 0xbc, 0xc0, 0x6c, - 0xc4, 0x35, 0x05, 0xc5, 0x06, 0xc5, 0xc5, 0xbf, 0x0a, 0xe3, 0xc6, 0x9b, 0xf7, 0xd8, 0x17, 0x3f, - 0x6f, 0xee, 0x8b, 0x57, 0x8c, 0xed, 0xec, 0x8b, 0x6f, 0xc3, 0xd9, 0xac, 0x82, 0xc3, 0x3c, 0x6f, - 0xff, 0xe6, 0x28, 0xcc, 0x66, 0x5f, 0x3e, 0x6a, 0x52, 0xd5, 0xde, 0x77, 0x68, 0xdf, 0x77, 0x68, - 0xdf, 0x77, 0x68, 0xe5, 0x1f, 0xfb, 0x77, 0x4b, 0x30, 0x6d, 0x0e, 0x14, 0xae, 0xdd, 0x8f, 0xc2, - 0x58, 0x44, 0x5a, 0xe1, 0x2d, 0xbc, 0x2a, 0x2c, 0xae, 0xce, 0x14, 0xe2, 0x60, 0x2c, 0xf1, 0xd4, - 0x32, 0xb7, 0x9c, 0x64, 0x57, 0x98, 0x5c, 0x65, 0x99, 0x37, 0x9d, 0x64, 0x17, 0x33, 0x0c, 0x7a, - 0x1b, 0xa6, 0x12, 0x27, 0x6a, 0x90, 0x04, 0x93, 0x7d, 0xd6, 0x08, 0x62, 0x77, 0xf0, 0x59, 0x41, - 0x3b, 0xb5, 0x9d, 0xc2, 0xe2, 0x0c, 0x35, 0xba, 0x07, 0x23, 0xbb, 0xc4, 0x6f, 0x0a, 0x8f, 0x7b, - 0x2b, 0x3f, 0x8b, 0xc8, 0xde, 0xf5, 0x3a, 0xf1, 0x9b, 0x7c, 0xbc, 0xd2, 0x5f, 0x98, 0x89, 0xa2, - 0x5f, 0xa7, 0xb2, 0xd7, 0x8e, 0x93, 0xb0, 0xe9, 0xbd, 0x27, 0xfd, 0xf0, 0x9f, 0xce, 0x59, 0xf0, - 0x4d, 0xc9, 0x9f, 0xc7, 0x80, 0xd4, 0x5f, 0xac, 0x25, 0x33, 0x3d, 0x6a, 0x5e, 0xc4, 0xfc, 0xea, - 0xce, 0x0c, 0x9c, 0x8a, 0x1e, 0x4b, 0x92, 0x3f, 0xd7, 0x43, 0xfd, 0xc5, 0x5a, 0x32, 0xea, 0xc0, - 0x68, 0xcb, 0x6f, 0x37, 0xbc, 0x60, 0x66, 0x9c, 0xe9, 0x70, 0x2b, 0x67, 0x1d, 0x36, 0x19, 0x73, - 0xbe, 0x1a, 0xe2, 0xbf, 0xb1, 0x10, 0x88, 0x5e, 0x86, 0x92, 0xbb, 0xeb, 0x44, 0xc9, 0xcc, 0x04, - 0xeb, 0x34, 0x6a, 0xf7, 0x62, 0x91, 0x02, 0x31, 0xc7, 0xd9, 0x7f, 0xaf, 0x90, 0xf6, 0x1e, 0xd2, - 0x2f, 0xc6, 0xbb, 0xb3, 0xdb, 0x8e, 0x62, 0xb9, 0xee, 0x30, 0xba, 0x33, 0x03, 0x63, 0x89, 0x47, - 0x9f, 0xb5, 0x60, 0xec, 0x6e, 0x1c, 0x06, 0x01, 0x49, 0x84, 0xa5, 0xbe, 0x9d, 0xf3, 0xbb, 0xde, - 0xe0, 0xdc, 0xb5, 0x0e, 0x02, 0x80, 0xa5, 0x5c, 0xaa, 0x2e, 0x39, 0x70, 0xfd, 0x76, 0x4d, 0x86, - 0xab, 0x14, 0xe9, 0x55, 0x0e, 0xc6, 0x12, 0x4f, 0x49, 0xbd, 0x80, 0x93, 0x8e, 0xa4, 0x49, 0x57, - 0x02, 0x41, 0x2a, 0xf0, 0xf6, 0x3f, 0x2e, 0xc1, 0x85, 0x9e, 0xbd, 0x9f, 0xce, 0xeb, 0x6c, 0xe6, - 0xbc, 0xe6, 0xf9, 0x44, 0xe6, 0x67, 0xb1, 0x79, 0xfd, 0xb6, 0x82, 0x62, 0x83, 0x02, 0xfd, 0x22, - 0x40, 0xcb, 0x89, 0x9c, 0x26, 0x11, 0xf3, 0x59, 0xf1, 0xe4, 0xd3, 0x27, 0xd5, 0x63, 0x53, 0xf2, - 0xd4, 0x7e, 0xbd, 0x02, 0xc5, 0xd8, 0x10, 0x89, 0x3e, 0x0c, 0xe3, 0x11, 0xf1, 0x89, 0x13, 0xb3, - 0x04, 0x86, 0x6c, 0x36, 0x16, 0xd6, 0x28, 0x6c, 0xd2, 0xa1, 0x0f, 0xc0, 0x28, 0x7b, 0x0b, 0x19, - 0x9e, 0x50, 0xae, 0x18, 0x7b, 0xcf, 0x18, 0x0b, 0x2c, 0xfa, 0x8a, 0x05, 0x53, 0x75, 0xcf, 0x27, - 0x5a, 0xba, 0xc8, 0x9d, 0xda, 0x38, 0xf9, 0x4b, 0x5e, 0x33, 0xf9, 0x6a, 0x13, 0x98, 0x02, 0xc7, - 0x38, 0x23, 0x9e, 0x7e, 0xe6, 0x7d, 0x12, 0x31, 0xdb, 0x39, 0x9a, 0xfe, 0xcc, 0xb7, 0x39, 0x18, - 0x4b, 0x3c, 0x5a, 0x80, 0x33, 0x2d, 0x27, 0x8e, 0x17, 0x23, 0x52, 0x23, 0x41, 0xe2, 0x39, 0x3e, - 0xcf, 0x6c, 0x2a, 0xeb, 0xcc, 0x86, 0xcd, 0x34, 0x1a, 0x67, 0xe9, 0xd1, 0xc7, 0xe0, 0x39, 0xaf, - 0x11, 0x84, 0x11, 0x59, 0xf3, 0xe2, 0xd8, 0x0b, 0x1a, 0xba, 0x1b, 0x30, 0x53, 0x58, 0xae, 0xce, - 0x0a, 0x56, 0xcf, 0xad, 0xf4, 0x26, 0xc3, 0xfd, 0x9e, 0x47, 0xaf, 0x42, 0x39, 0xde, 0xf3, 0x5a, - 0x8b, 0x51, 0x2d, 0x66, 0x5b, 0x0f, 0x65, 0xbd, 0xda, 0xdd, 0x12, 0x70, 0xac, 0x28, 0xec, 0x5f, - 0x2b, 0xa4, 0xd7, 0x6f, 0xe6, 0xf8, 0x41, 0x31, 0x1d, 0x25, 0xc9, 0x6d, 0x27, 0x92, 0x8b, 0xcc, - 0x13, 0xe6, 0x46, 0x09, 0xbe, 0xb7, 0x9d, 0xc8, 0x1c, 0x6f, 0x4c, 0x00, 0x96, 0x92, 0xd0, 0x5d, - 0x18, 0x49, 0x7c, 0x27, 0xa7, 0x64, 0x4a, 0x43, 0xa2, 0x8e, 0xe2, 0xaf, 0x2e, 0xc4, 0x98, 0xc9, - 0x40, 0x2f, 0x52, 0xff, 0x74, 0x87, 0xaf, 0x4e, 0x2a, 0xd2, 0xa5, 0xdc, 0x89, 0x31, 0x83, 0xda, - 0xff, 0x6b, 0xb4, 0x87, 0xc9, 0x53, 0x93, 0x08, 0xba, 0x02, 0x40, 0x97, 0x3a, 0x9b, 0x11, 0xa9, - 0x7b, 0x07, 0x62, 0x12, 0x57, 0xc3, 0x6a, 0x5d, 0x61, 0xb0, 0x41, 0x25, 0x9f, 0xd9, 0x6a, 0xd7, - 0xe9, 0x33, 0x85, 0xee, 0x67, 0x38, 0x06, 0x1b, 0x54, 0xe8, 0x0d, 0x18, 0xf5, 0x9a, 0x4e, 0x83, - 0x48, 0x35, 0x5f, 0xa4, 0xe3, 0x69, 0x85, 0x41, 0x1e, 0x1c, 0xce, 0x4e, 0x29, 0x85, 0x18, 0x08, - 0x0b, 0x5a, 0xf4, 0x1b, 0x16, 0x4c, 0xb8, 0x61, 0xb3, 0x19, 0x06, 0x7c, 0x81, 0x20, 0x56, 0x3b, - 0x77, 0x4f, 0x6b, 0x8a, 0x9d, 0x5b, 0x34, 0x84, 0xf1, 0xe5, 0x8e, 0xca, 0xfa, 0x34, 0x51, 0x38, - 0xa5, 0x95, 0x39, 0xec, 0x4a, 0xc7, 0x0c, 0xbb, 0x7f, 0x66, 0xc1, 0x34, 0x7f, 0xd6, 0x58, 0xb7, - 0x88, 0x04, 0xc7, 0xf0, 0x94, 0x5f, 0xab, 0x6b, 0x29, 0xf7, 0xbc, 0x50, 0x73, 0xba, 0x0b, 0x8f, - 0xbb, 0x95, 0x44, 0xcb, 0x30, 0x5d, 0x0f, 0x23, 0x97, 0x98, 0x0d, 0x21, 0x6c, 0x86, 0x62, 0x74, - 0x2d, 0x4b, 0x80, 0xbb, 0x9f, 0x41, 0xb7, 0xe1, 0x59, 0x03, 0x68, 0xb6, 0x03, 0x37, 0x1b, 0x97, - 0x04, 0xb7, 0x67, 0xaf, 0xf5, 0xa4, 0xc2, 0x7d, 0x9e, 0xbe, 0xf8, 0x51, 0x98, 0xee, 0xfa, 0x7e, - 0x43, 0xad, 0x26, 0x97, 0xe0, 0xd9, 0xde, 0x2d, 0x35, 0xd4, 0x9a, 0xf2, 0xef, 0x58, 0xe9, 0x60, - 0xb3, 0xe1, 0xb9, 0x0c, 0xb0, 0x3f, 0xe1, 0x40, 0x91, 0x04, 0xfb, 0xc2, 0x70, 0x5c, 0x3b, 0x59, - 0x8f, 0xb8, 0x1a, 0xec, 0xf3, 0x0f, 0xcd, 0x16, 0x61, 0x57, 0x83, 0x7d, 0x4c, 0x79, 0xdb, 0x7f, - 0x73, 0x34, 0x95, 0xc1, 0xb2, 0x25, 0x93, 0xa6, 0xf8, 0xf2, 0xc7, 0xca, 0x3b, 0x69, 0x8a, 0xa7, - 0x20, 0xea, 0x3c, 0x08, 0xbe, 0xe2, 0x11, 0xe2, 0xd0, 0x17, 0x2c, 0x96, 0x32, 0x2d, 0x33, 0x7b, - 0x84, 0x33, 0x75, 0x3a, 0x19, 0xdc, 0x66, 0x22, 0xb6, 0x04, 0x62, 0x53, 0x3a, 0x1d, 0xc9, 0x2d, - 0x9e, 0xfc, 0x97, 0x75, 0xa9, 0x64, 0x52, 0xb5, 0xc4, 0xa3, 0x83, 0x1e, 0x3b, 0xac, 0x39, 0xa4, - 0xdd, 0x1e, 0xbf, 0xa7, 0x8a, 0xbe, 0x69, 0xc1, 0x34, 0x9f, 0x38, 0x97, 0xbc, 0x7a, 0x9d, 0x44, - 0x24, 0x70, 0x89, 0x74, 0x3d, 0xee, 0x9c, 0x4c, 0x03, 0xb9, 0xee, 0x5c, 0xc9, 0xb2, 0xd7, 0x43, - 0xbc, 0x0b, 0x85, 0xbb, 0x95, 0x41, 0x35, 0x18, 0xf1, 0x82, 0x7a, 0x28, 0x0c, 0x5b, 0xf5, 0x64, - 0x4a, 0xad, 0x04, 0xf5, 0x50, 0x8f, 0x15, 0xfa, 0x0f, 0x33, 0xee, 0x68, 0x15, 0xce, 0x47, 0x62, - 0xf5, 0x77, 0xdd, 0x8b, 0xa9, 0x0b, 0xbf, 0xea, 0x35, 0xbd, 0x84, 0x19, 0xa5, 0x62, 0x75, 0xe6, - 0xe8, 0x70, 0xf6, 0x3c, 0xee, 0x81, 0xc7, 0x3d, 0x9f, 0xb2, 0xff, 0xbc, 0x92, 0x5e, 0xe2, 0xf2, - 0x7d, 0xea, 0x9f, 0x87, 0x4a, 0xa4, 0x72, 0xbf, 0xad, 0x3c, 0xe2, 0xac, 0xb2, 0x8d, 0x45, 0x82, - 0x90, 0xda, 0x7d, 0xd4, 0x59, 0xde, 0x5a, 0x22, 0x75, 0x24, 0xe8, 0x97, 0x17, 0xc3, 0x22, 0x87, - 0xfe, 0x25, 0xa4, 0xea, 0xbd, 0xd5, 0x4e, 0xe0, 0x62, 0x26, 0x03, 0x45, 0x30, 0xba, 0x4b, 0x1c, - 0x3f, 0xd9, 0xcd, 0x67, 0x1b, 0xe8, 0x3a, 0xe3, 0x95, 0x4d, 0x83, 0xe2, 0x50, 0x2c, 0x24, 0xa1, - 0x03, 0x18, 0xdb, 0xe5, 0x1f, 0x41, 0xcc, 0xed, 0x6b, 0x27, 0x6d, 0xdc, 0xd4, 0x97, 0xd5, 0xe3, - 0x57, 0x00, 0xb0, 0x14, 0xc7, 0x42, 0x24, 0x46, 0x00, 0x82, 0x0f, 0x9f, 0xfc, 0x32, 0xc0, 0x06, - 0x8e, 0x3e, 0xa0, 0x4f, 0xc3, 0x44, 0x44, 0xdc, 0x30, 0x70, 0x3d, 0x9f, 0xd4, 0x16, 0xe4, 0x16, - 0xcf, 0x30, 0xb9, 0x57, 0x67, 0xa9, 0x7f, 0x82, 0x0d, 0x1e, 0x38, 0xc5, 0x11, 0x7d, 0xde, 0x82, - 0x29, 0x95, 0x30, 0x4a, 0x3f, 0x08, 0x11, 0x9b, 0x24, 0xab, 0x39, 0xa5, 0xa7, 0x32, 0x9e, 0x55, - 0x44, 0x57, 0x28, 0x69, 0x18, 0xce, 0xc8, 0x45, 0xef, 0x02, 0x84, 0x3b, 0x2c, 0x08, 0x42, 0x5f, - 0xb5, 0x3c, 0xf4, 0xab, 0x4e, 0xf1, 0x04, 0x42, 0xc9, 0x01, 0x1b, 0xdc, 0xd0, 0x4d, 0x00, 0x3e, - 0x6c, 0xb6, 0x3b, 0x2d, 0xc2, 0x96, 0x0d, 0x3a, 0x79, 0x0e, 0xb6, 0x14, 0xe6, 0xc1, 0xe1, 0x6c, - 0xf7, 0x02, 0x97, 0x25, 0xcf, 0x19, 0x8f, 0xa3, 0x9f, 0x85, 0xb1, 0xb8, 0xdd, 0x6c, 0x3a, 0x6a, - 0x3f, 0x25, 0xc7, 0x94, 0x44, 0xce, 0x57, 0xf7, 0x4d, 0x01, 0xc0, 0x52, 0x22, 0xba, 0x4b, 0x0d, - 0x5b, 0x2c, 0x56, 0xde, 0x6c, 0x14, 0xf1, 0xb9, 0x79, 0x9c, 0xbd, 0xd3, 0x47, 0xc4, 0x73, 0xe7, - 0x71, 0x0f, 0x9a, 0x07, 0x87, 0xb3, 0xcf, 0xa6, 0xe1, 0xab, 0x21, 0x17, 0x8b, 0x7b, 0xf2, 0xb4, - 0x83, 0x74, 0x14, 0x56, 0x68, 0xf0, 0x06, 0x4c, 0x90, 0x83, 0x84, 0x44, 0x81, 0xe3, 0xdf, 0xc2, - 0xab, 0x72, 0xb5, 0xcf, 0x3a, 0xda, 0x55, 0x03, 0x8e, 0x53, 0x54, 0xc8, 0x56, 0x5e, 0x7e, 0x81, - 0xd1, 0x83, 0xf6, 0xf2, 0xa5, 0x4f, 0x6f, 0xff, 0xdf, 0x42, 0xca, 0xfb, 0xd8, 0x8e, 0x08, 0x41, - 0x21, 0x94, 0x82, 0xb0, 0xa6, 0x0c, 0xec, 0x8d, 0x7c, 0x0c, 0xec, 0x7a, 0x58, 0x33, 0x0e, 0x40, - 0xd1, 0x7f, 0x31, 0xe6, 0x72, 0xd8, 0x09, 0x11, 0x79, 0x94, 0x86, 0x21, 0x84, 0xc3, 0x95, 0xa7, - 0x64, 0x75, 0x42, 0x64, 0xc3, 0x14, 0x84, 0xd3, 0x72, 0xd1, 0x1e, 0x94, 0x76, 0xc3, 0x38, 0x91, - 0xc1, 0xa5, 0x13, 0x7a, 0x7c, 0xd7, 0xc3, 0x38, 0x61, 0xd3, 0xa5, 0x7a, 0x6d, 0x0a, 0x89, 0x31, - 0x97, 0x61, 0xff, 0xb1, 0x95, 0xda, 0xdb, 0xb9, 0xe3, 0x24, 0xee, 0xee, 0xd5, 0x7d, 0x12, 0xd0, - 0xb1, 0x63, 0xa6, 0x9c, 0xfe, 0x95, 0x4c, 0xca, 0xe9, 0x07, 0xfb, 0x9d, 0x48, 0xbd, 0x4f, 0x39, - 0xcc, 0x31, 0x16, 0x46, 0xfa, 0xe9, 0x67, 0x2c, 0x18, 0x37, 0xd4, 0x13, 0x93, 0x57, 0x8e, 0x79, - 0xcb, 0x3a, 0x06, 0xa5, 0x81, 0xd8, 0x14, 0x69, 0x7f, 0xcd, 0x82, 0xb1, 0xaa, 0xe3, 0xee, 0x85, - 0xf5, 0x3a, 0x7a, 0x15, 0xca, 0xb5, 0xb6, 0x48, 0xcb, 0xe7, 0xef, 0xa7, 0x36, 0x13, 0x96, 0x04, - 0x1c, 0x2b, 0x0a, 0xda, 0x87, 0xeb, 0x0e, 0xcb, 0x79, 0x28, 0x30, 0x37, 0x82, 0xf5, 0xe1, 0x6b, - 0x0c, 0x82, 0x05, 0x06, 0x7d, 0x18, 0xc6, 0x9b, 0xce, 0x81, 0x7c, 0x38, 0xbb, 0xb1, 0xb4, 0xa6, - 0x51, 0xd8, 0xa4, 0xb3, 0xff, 0xb5, 0x05, 0x33, 0x55, 0x27, 0xf6, 0xdc, 0x85, 0x76, 0xb2, 0x5b, - 0xf5, 0x92, 0x9d, 0xb6, 0xbb, 0x47, 0x12, 0x9e, 0xb2, 0x4e, 0xb5, 0x6c, 0xc7, 0x74, 0x28, 0xa9, - 0xe5, 0x81, 0xd2, 0xf2, 0x96, 0x80, 0x63, 0x45, 0x81, 0xde, 0x83, 0xf1, 0x96, 0x13, 0xc7, 0xf7, - 0xc3, 0xa8, 0x86, 0x49, 0x3d, 0x9f, 0x03, 0x23, 0x5b, 0xc4, 0x8d, 0x48, 0x82, 0x49, 0x5d, 0xc4, - 0x02, 0x34, 0x7f, 0x6c, 0x0a, 0xb3, 0x7f, 0xbb, 0x02, 0x63, 0x22, 0x90, 0x31, 0x70, 0x22, 0xbe, - 0x5c, 0xf8, 0x14, 0xfa, 0x2e, 0x7c, 0x62, 0x18, 0x75, 0xd9, 0xb1, 0x65, 0xe1, 0x7d, 0xdc, 0xcc, - 0x25, 0xf2, 0xc5, 0x4f, 0x42, 0x6b, 0xb5, 0xf8, 0x7f, 0x2c, 0x44, 0xa1, 0xaf, 0x5a, 0x70, 0xc6, - 0x0d, 0x83, 0x80, 0xb8, 0x7a, 0x6a, 0x1c, 0xc9, 0x23, 0x96, 0xbd, 0x98, 0x66, 0xaa, 0x77, 0xd5, - 0x32, 0x08, 0x9c, 0x15, 0x8f, 0xde, 0x82, 0x49, 0xde, 0x66, 0xb7, 0x53, 0x5b, 0x0a, 0xfa, 0xbc, - 0x99, 0x89, 0xc4, 0x69, 0x5a, 0x34, 0xc7, 0xb7, 0x66, 0xc4, 0xc9, 0xae, 0x51, 0xbd, 0x45, 0x6b, - 0x9c, 0xe9, 0x32, 0x28, 0x50, 0x04, 0x28, 0x22, 0xf5, 0x88, 0xc4, 0xbb, 0x22, 0xd0, 0xc3, 0xa6, - 0xe5, 0xb1, 0x47, 0xcb, 0xfe, 0xc6, 0x5d, 0x9c, 0x70, 0x0f, 0xee, 0x68, 0x4f, 0xac, 0x0d, 0xca, - 0x79, 0x58, 0x05, 0xf1, 0x99, 0xfb, 0x2e, 0x11, 0x66, 0xa1, 0x14, 0xef, 0x3a, 0x51, 0x8d, 0xb9, - 0x03, 0x45, 0x9e, 0xe4, 0xb4, 0x45, 0x01, 0x98, 0xc3, 0xd1, 0x12, 0x9c, 0xcd, 0x9c, 0x96, 0x8b, - 0xd9, 0x84, 0x5f, 0xae, 0xce, 0x08, 0x76, 0x67, 0x33, 0xe7, 0xec, 0x62, 0xdc, 0xf5, 0x84, 0xb9, - 0x6e, 0x1c, 0x3f, 0x66, 0xdd, 0xd8, 0x51, 0xe9, 0x04, 0x13, 0xcc, 0xe2, 0xbf, 0x93, 0x4b, 0x03, - 0x0c, 0x94, 0x3b, 0xf0, 0xa5, 0x4c, 0xee, 0xc0, 0x24, 0x53, 0xe0, 0x76, 0x3e, 0x0a, 0x0c, 0x9f, - 0x28, 0xf0, 0x24, 0x03, 0xff, 0x7f, 0x6e, 0x81, 0xfc, 0xae, 0x8b, 0x8e, 0xbb, 0x4b, 0x68, 0x97, - 0x41, 0x6f, 0xc3, 0x94, 0x5a, 0x79, 0x2d, 0x86, 0xed, 0x80, 0xc7, 0xfc, 0x8b, 0x7a, 0xfb, 0x1d, - 0xa7, 0xb0, 0x38, 0x43, 0x8d, 0xe6, 0xa1, 0x42, 0xdb, 0x89, 0x3f, 0xca, 0x67, 0x0f, 0xb5, 0xba, - 0x5b, 0xd8, 0x5c, 0x11, 0x4f, 0x69, 0x1a, 0x14, 0xc2, 0xb4, 0xef, 0xc4, 0x09, 0xd3, 0x80, 0x2e, - 0xc4, 0x1e, 0xf1, 0xec, 0x05, 0x3b, 0x2c, 0xbc, 0x9a, 0x65, 0x84, 0xbb, 0x79, 0xdb, 0xdf, 0x1b, - 0x81, 0xc9, 0x94, 0x65, 0x1c, 0x72, 0xda, 0x79, 0x15, 0xca, 0x72, 0x26, 0x10, 0xa6, 0x5c, 0x51, - 0xab, 0xe9, 0x42, 0x51, 0xd0, 0x69, 0x72, 0x87, 0x38, 0x11, 0x89, 0xd8, 0x39, 0xc4, 0xec, 0x34, - 0x59, 0xd5, 0x28, 0x6c, 0xd2, 0x31, 0xa3, 0x9c, 0xf8, 0xf1, 0xa2, 0xef, 0x91, 0x20, 0xe1, 0x6a, - 0xe6, 0x63, 0x94, 0xb7, 0x57, 0xb7, 0x4c, 0xa6, 0xda, 0x28, 0x67, 0x10, 0x38, 0x2b, 0x1e, 0xfd, - 0xb2, 0x05, 0x93, 0xce, 0xfd, 0x58, 0xd7, 0xd6, 0x10, 0x59, 0x02, 0x27, 0x9c, 0xa4, 0x52, 0xe5, - 0x3a, 0xaa, 0xd3, 0xd4, 0xbc, 0xa7, 0x40, 0x38, 0x2d, 0x14, 0x7d, 0xc3, 0x02, 0x44, 0x0e, 0x88, - 0x2b, 0xf3, 0x18, 0x84, 0x2e, 0xa3, 0x79, 0x2c, 0x50, 0xae, 0x76, 0xf1, 0xe5, 0x56, 0xbd, 0x1b, - 0x8e, 0x7b, 0xe8, 0x60, 0xff, 0x8b, 0xa2, 0x1a, 0x50, 0x3a, 0x75, 0xc6, 0x31, 0x32, 0x48, 0xad, - 0x47, 0xcf, 0x20, 0xd5, 0xb1, 0x9f, 0xae, 0x2c, 0xd2, 0x74, 0xba, 0x65, 0xe1, 0x09, 0xa5, 0x5b, - 0x7e, 0xce, 0x52, 0x21, 0x43, 0xee, 0xc6, 0xbf, 0x9b, 0x6f, 0xda, 0xce, 0x1c, 0x8f, 0x3c, 0x66, - 0xac, 0x7b, 0x3a, 0x1c, 0x49, 0xad, 0xa9, 0x41, 0x36, 0x94, 0x35, 0xfc, 0x4f, 0x45, 0x18, 0x37, - 0x66, 0xd2, 0x9e, 0x6e, 0x91, 0xf5, 0x94, 0xb9, 0x45, 0x85, 0x21, 0xdc, 0xa2, 0x5f, 0x84, 0x8a, - 0x2b, 0xad, 0x7c, 0x3e, 0x85, 0x5c, 0xb2, 0x73, 0x87, 0x36, 0xf4, 0x0a, 0x84, 0xb5, 0x4c, 0xb4, - 0x0c, 0xd3, 0x06, 0x1b, 0x31, 0x43, 0x8c, 0xb0, 0x19, 0x42, 0x6d, 0xac, 0x2e, 0x64, 0x09, 0x70, - 0xf7, 0x33, 0xe8, 0x75, 0xba, 0xb2, 0xf2, 0xc4, 0x7b, 0xc9, 0xe4, 0x3a, 0xe6, 0xae, 0x2f, 0x6c, - 0xae, 0x48, 0x30, 0x36, 0x69, 0xec, 0xef, 0x59, 0xea, 0xe3, 0x3e, 0x86, 0x33, 0x29, 0x77, 0xd3, - 0x67, 0x52, 0xae, 0xe6, 0xd2, 0xcc, 0x7d, 0x0e, 0xa3, 0xac, 0xc3, 0xd8, 0x62, 0xd8, 0x6c, 0x3a, - 0x41, 0x0d, 0xfd, 0x08, 0x8c, 0xb9, 0xfc, 0xa7, 0xd8, 0xaa, 0x18, 0xa7, 0xce, 0x97, 0xc0, 0x62, - 0x89, 0x43, 0x2f, 0xc2, 0x88, 0x13, 0x35, 0xe4, 0xf6, 0x04, 0x8b, 0x95, 0x2e, 0x44, 0x8d, 0x18, - 0x33, 0xa8, 0xfd, 0xf5, 0x02, 0xc0, 0x62, 0xd8, 0x6c, 0x39, 0x11, 0xa9, 0x6d, 0x87, 0xef, 0xc7, - 0x44, 0xf8, 0xaa, 0xf5, 0x8b, 0x16, 0x20, 0xda, 0x2a, 0x61, 0x40, 0x82, 0x44, 0x25, 0x1b, 0x50, - 0x67, 0xc7, 0x95, 0x50, 0xe1, 0x39, 0xe8, 0x31, 0x20, 0x11, 0x58, 0xd3, 0x0c, 0xb0, 0x04, 0x7c, - 0x59, 0x1a, 0xa8, 0x62, 0x3a, 0x87, 0x87, 0x99, 0x35, 0x61, 0xaf, 0xec, 0xdf, 0x29, 0xc0, 0xb3, - 0x7c, 0xce, 0x59, 0x73, 0x02, 0xa7, 0x41, 0x9a, 0x54, 0xab, 0x41, 0xa3, 0x6b, 0x2e, 0x5d, 0x7b, - 0x78, 0x32, 0x65, 0xe7, 0xa4, 0x9d, 0x93, 0x77, 0x2a, 0xde, 0x8d, 0x56, 0x02, 0x2f, 0xc1, 0x8c, - 0x39, 0x8a, 0xa1, 0x2c, 0x4b, 0x73, 0x09, 0x63, 0x93, 0x93, 0x20, 0x35, 0xee, 0xc4, 0xc4, 0x40, - 0xb0, 0x12, 0x44, 0x3d, 0x33, 0x3f, 0x74, 0xf7, 0x30, 0x69, 0x85, 0xcc, 0xb0, 0x18, 0x19, 0x13, - 0xab, 0x02, 0x8e, 0x15, 0x85, 0xfd, 0x3b, 0x16, 0x64, 0x4d, 0x2e, 0x5b, 0xca, 0xf3, 0x53, 0xb9, - 0xd9, 0xa5, 0x7c, 0xfa, 0xd0, 0xed, 0x10, 0x87, 0x8b, 0x7f, 0x06, 0xc6, 0x9d, 0x84, 0xce, 0x92, - 0x7c, 0x5d, 0x59, 0x7c, 0xb4, 0xed, 0xde, 0xb5, 0xb0, 0xe6, 0xd5, 0x3d, 0xb6, 0x9e, 0x34, 0xd9, - 0xd9, 0x7f, 0x36, 0x02, 0xd3, 0x5d, 0x79, 0x96, 0xe8, 0x4d, 0x98, 0x70, 0x45, 0xf7, 0x68, 0x61, - 0x52, 0x17, 0x2f, 0x63, 0x84, 0xf1, 0x35, 0x0e, 0xa7, 0x28, 0x07, 0xe8, 0xa0, 0x2b, 0x70, 0x2e, - 0xa2, 0x2b, 0xd9, 0x36, 0x59, 0xa8, 0x27, 0x24, 0xda, 0x22, 0x6e, 0x18, 0xd4, 0xf8, 0xe9, 0xf1, - 0x62, 0xf5, 0xb9, 0xa3, 0xc3, 0xd9, 0x73, 0xb8, 0x1b, 0x8d, 0x7b, 0x3d, 0x83, 0x5a, 0x30, 0xe9, - 0x9b, 0x4e, 0x8e, 0xf0, 0x70, 0x1f, 0xc9, 0x3f, 0x52, 0x93, 0x60, 0x0a, 0x8c, 0xd3, 0x02, 0xd2, - 0x9e, 0x52, 0xe9, 0x09, 0x79, 0x4a, 0xbf, 0xa4, 0x3d, 0x25, 0x1e, 0x1b, 0xfc, 0x78, 0xce, 0x79, - 0xb6, 0xa7, 0xed, 0x2a, 0xbd, 0x03, 0x65, 0x19, 0x56, 0x1f, 0xc0, 0xde, 0xbc, 0x9c, 0xe2, 0xd3, - 0xc7, 0xa2, 0x3d, 0x28, 0x40, 0x0f, 0x2f, 0x9b, 0x8e, 0x33, 0x3d, 0xa5, 0xa5, 0xc6, 0xd9, 0x70, - 0xd3, 0x1a, 0x3a, 0xe0, 0x29, 0x05, 0xdc, 0x33, 0xfd, 0x58, 0xde, 0xab, 0x04, 0x9d, 0x65, 0x30, - 0x2e, 0xf4, 0x53, 0x99, 0x06, 0xe8, 0x0a, 0x80, 0xf6, 0x44, 0x44, 0x36, 0x9d, 0x0a, 0x87, 0x69, - 0x87, 0x05, 0x1b, 0x54, 0x74, 0xd1, 0xe8, 0x05, 0x71, 0xe2, 0xf8, 0xfe, 0x75, 0x2f, 0x48, 0xc4, - 0xee, 0x97, 0x9a, 0xa5, 0x56, 0x34, 0x0a, 0x9b, 0x74, 0x17, 0x3f, 0x62, 0x7c, 0x97, 0x61, 0xbe, - 0xe7, 0x2e, 0x3c, 0xbf, 0xec, 0x25, 0x2a, 0x07, 0x54, 0xf5, 0x23, 0xea, 0x68, 0xa8, 0xa4, 0x65, - 0xab, 0x6f, 0xd2, 0xb2, 0x91, 0x83, 0x59, 0x48, 0xa7, 0x8c, 0x66, 0x73, 0x30, 0xed, 0x37, 0xe1, - 0xfc, 0xb2, 0x97, 0x5c, 0xf3, 0x7c, 0x32, 0xa4, 0x10, 0xfb, 0xb7, 0x47, 0x60, 0xc2, 0x4c, 0xaa, - 0x1f, 0x26, 0xef, 0xfa, 0xcb, 0xd4, 0x97, 0x10, 0x6f, 0xe7, 0xa9, 0x38, 0xc7, 0x9d, 0x13, 0x67, - 0xf8, 0xf7, 0x6e, 0x31, 0xc3, 0x9d, 0xd0, 0x32, 0xb1, 0xa9, 0x00, 0xba, 0x0f, 0xa5, 0x3a, 0xcb, - 0x11, 0x2c, 0xe6, 0x11, 0x71, 0xed, 0xd5, 0xa2, 0x7a, 0x98, 0xf1, 0x2c, 0x43, 0x2e, 0x8f, 0xce, - 0x90, 0x51, 0x3a, 0xb3, 0x5c, 0x19, 0x2a, 0x95, 0x53, 0xae, 0x28, 0xfa, 0x99, 0xfa, 0xd2, 0x23, - 0x98, 0xfa, 0x94, 0xe1, 0x1d, 0x7d, 0x32, 0x86, 0xd7, 0xfe, 0x62, 0x01, 0xa6, 0x96, 0x83, 0xf6, - 0xe6, 0xf2, 0x66, 0x7b, 0xc7, 0xf7, 0xdc, 0x9b, 0xa4, 0x43, 0x8d, 0xd3, 0x1e, 0xe9, 0xac, 0x2c, - 0x89, 0x3e, 0xa4, 0x5a, 0xed, 0x26, 0x05, 0x62, 0x8e, 0xa3, 0xc3, 0xb1, 0xee, 0x05, 0x0d, 0x12, - 0xb5, 0x22, 0x4f, 0xec, 0x6a, 0x19, 0xc3, 0xf1, 0x9a, 0x46, 0x61, 0x93, 0x8e, 0xf2, 0x0e, 0xef, - 0x07, 0x24, 0xca, 0xba, 0x72, 0x1b, 0x14, 0x88, 0x39, 0x8e, 0x12, 0x25, 0x51, 0x3b, 0x4e, 0xc4, - 0xe7, 0x50, 0x44, 0xdb, 0x14, 0x88, 0x39, 0x8e, 0xf6, 0xf5, 0xb8, 0xbd, 0xc3, 0x42, 0xba, 0x99, - 0xe4, 0xba, 0x2d, 0x0e, 0xc6, 0x12, 0x4f, 0x49, 0xf7, 0x48, 0x67, 0x89, 0x2e, 0x6c, 0x32, 0xe9, - 0xaf, 0x37, 0x39, 0x18, 0x4b, 0x3c, 0x3b, 0xaf, 0x9f, 0x6e, 0x8e, 0xbf, 0x70, 0xe7, 0xf5, 0xd3, - 0xea, 0xf7, 0x59, 0x22, 0x7d, 0xcb, 0x82, 0x09, 0x33, 0x11, 0x03, 0x35, 0x32, 0x5e, 0xde, 0x46, - 0x57, 0xed, 0x95, 0x9f, 0xec, 0x55, 0x0e, 0xb8, 0xe1, 0x25, 0x61, 0x2b, 0x7e, 0x8d, 0x04, 0x0d, - 0x2f, 0x20, 0x2c, 0xf4, 0xc7, 0x13, 0x38, 0x52, 0x59, 0x1e, 0x8b, 0x61, 0x8d, 0x3c, 0x82, 0x9b, - 0x68, 0xdf, 0x81, 0xe9, 0xae, 0x9c, 0xe7, 0x01, 0x26, 0xd7, 0x63, 0x8f, 0x94, 0xd8, 0x18, 0xc6, - 0x29, 0xe3, 0x8d, 0x16, 0xcf, 0xb4, 0x58, 0x84, 0x69, 0xee, 0x00, 0x50, 0x49, 0x5b, 0xee, 0x2e, - 0x69, 0xaa, 0x3c, 0x76, 0xb6, 0x85, 0x7a, 0x3b, 0x8b, 0xc4, 0xdd, 0xf4, 0xf6, 0x97, 0x2c, 0x98, - 0x4c, 0xa5, 0xa1, 0xe7, 0xe4, 0x06, 0xb0, 0x91, 0x16, 0xb2, 0xbc, 0xa0, 0xc8, 0x0b, 0x78, 0x14, - 0xac, 0x6c, 0x8c, 0x34, 0x8d, 0xc2, 0x26, 0x9d, 0xfd, 0xb5, 0x02, 0x94, 0x65, 0xd8, 0x77, 0x00, - 0x55, 0xbe, 0x60, 0xc1, 0xa4, 0xda, 0xb6, 0x66, 0xfb, 0x21, 0xbc, 0x33, 0xae, 0x9f, 0x3c, 0xf0, - 0xac, 0x92, 0xc7, 0x82, 0x7a, 0xa8, 0x7d, 0x52, 0x6c, 0x0a, 0xc3, 0x69, 0xd9, 0xe8, 0x36, 0x40, - 0xdc, 0x89, 0x13, 0xd2, 0x34, 0x76, 0x66, 0x6c, 0x63, 0xc4, 0xcd, 0xb9, 0x61, 0x44, 0xe8, 0xf8, - 0x5a, 0x0f, 0x6b, 0x64, 0x4b, 0x51, 0x6a, 0x27, 0x42, 0xc3, 0xb0, 0xc1, 0xc9, 0xfe, 0x47, 0x05, - 0x38, 0x9b, 0x55, 0x09, 0x7d, 0x1c, 0x26, 0xa4, 0x74, 0xa3, 0x1e, 0xb2, 0x8c, 0x75, 0x4f, 0x60, - 0x03, 0xf7, 0xe0, 0x70, 0x76, 0xb6, 0xbb, 0xb4, 0xf4, 0x9c, 0x49, 0x82, 0x53, 0xcc, 0x78, 0xec, - 0x40, 0x04, 0xb9, 0xaa, 0x9d, 0x85, 0x56, 0x4b, 0x04, 0x00, 0x8c, 0xd8, 0x81, 0x89, 0xc5, 0x19, - 0x6a, 0xb4, 0x09, 0xe7, 0x0d, 0xc8, 0x3a, 0xf1, 0x1a, 0xbb, 0x3b, 0x61, 0x24, 0xd7, 0x16, 0x2f, - 0xea, 0x94, 0x8f, 0x6e, 0x1a, 0xdc, 0xf3, 0x49, 0x3a, 0xdf, 0xb9, 0x4e, 0xcb, 0x71, 0xbd, 0xa4, - 0x23, 0xb6, 0x9a, 0x94, 0x6d, 0x5a, 0x14, 0x70, 0xac, 0x28, 0xec, 0x35, 0x18, 0x19, 0xb0, 0x07, - 0x0d, 0xe4, 0xd3, 0xbe, 0x03, 0x65, 0xca, 0x4e, 0x3a, 0x38, 0x79, 0xb0, 0x0c, 0xa1, 0x2c, 0x4b, - 0x1a, 0x22, 0x1b, 0x8a, 0x9e, 0x23, 0xc3, 0x33, 0xea, 0xb5, 0x56, 0xe2, 0xb8, 0xcd, 0x96, 0x89, - 0x14, 0x89, 0x5e, 0x86, 0x22, 0x39, 0x68, 0x65, 0xe3, 0x30, 0x57, 0x0f, 0x5a, 0x5e, 0x44, 0x62, - 0x4a, 0x44, 0x0e, 0x5a, 0xe8, 0x22, 0x14, 0xbc, 0x9a, 0x98, 0xa4, 0x40, 0xd0, 0x14, 0x56, 0x96, - 0x70, 0xc1, 0xab, 0xd9, 0x07, 0x50, 0x51, 0x35, 0x14, 0xd1, 0x9e, 0xb4, 0xdd, 0x56, 0x1e, 0x79, - 0x1a, 0x92, 0x6f, 0x1f, 0xab, 0xdd, 0x06, 0xd0, 0x49, 0xff, 0x79, 0xd9, 0x97, 0xcb, 0x30, 0xe2, - 0x86, 0xe2, 0xac, 0x50, 0x59, 0xb3, 0x61, 0x46, 0x9b, 0x61, 0xec, 0x3b, 0x30, 0x75, 0x33, 0x08, - 0xef, 0xb3, 0x4a, 0x62, 0xd7, 0x3c, 0xe2, 0xd7, 0x28, 0xe3, 0x3a, 0xfd, 0x91, 0x75, 0x11, 0x18, - 0x16, 0x73, 0x9c, 0x2a, 0x34, 0x58, 0xe8, 0x57, 0x68, 0xd0, 0xfe, 0x8c, 0x05, 0x67, 0x55, 0x36, - 0xba, 0xb4, 0xc6, 0x6f, 0xc2, 0xc4, 0x4e, 0xdb, 0xf3, 0x6b, 0xe2, 0x7f, 0x76, 0xa1, 0x5e, 0x35, - 0x70, 0x38, 0x45, 0x49, 0x97, 0x15, 0x3b, 0x5e, 0xe0, 0x44, 0x9d, 0x4d, 0x6d, 0xfe, 0x95, 0x45, - 0xa8, 0x2a, 0x0c, 0x36, 0xa8, 0xec, 0xcf, 0x15, 0x60, 0x32, 0x75, 0xf8, 0x16, 0xf9, 0x50, 0x26, - 0x3e, 0xdb, 0x3e, 0x92, 0x1f, 0xf5, 0xa4, 0x25, 0x34, 0x54, 0x47, 0xbc, 0x2a, 0xf8, 0x62, 0x25, - 0xe1, 0xa9, 0x88, 0x53, 0xd8, 0x7f, 0xbf, 0x00, 0x67, 0x32, 0xb5, 0x99, 0xd0, 0x57, 0xd2, 0xb5, - 0x33, 0xac, 0x3c, 0x56, 0xe5, 0x0f, 0xad, 0x10, 0x34, 0x5c, 0x05, 0x8d, 0x27, 0xd5, 0x54, 0xbf, - 0x57, 0x80, 0xa9, 0x74, 0x51, 0xa9, 0xa7, 0xb0, 0xa5, 0x3e, 0x04, 0x15, 0x56, 0xaa, 0x85, 0xd5, - 0x38, 0xe6, 0x8b, 0x7f, 0x76, 0x38, 0x73, 0x4d, 0x02, 0xb1, 0xc6, 0x3f, 0x15, 0x85, 0x49, 0xec, - 0x7f, 0x60, 0xc1, 0x05, 0xfe, 0x96, 0xd9, 0x7e, 0xf8, 0x37, 0x7a, 0xb5, 0xee, 0x27, 0xf2, 0x55, - 0x30, 0x73, 0xb4, 0xff, 0xb8, 0xf6, 0x65, 0xb5, 0x55, 0x85, 0xb6, 0xe9, 0xae, 0xf0, 0x14, 0x2a, - 0x3b, 0x54, 0x67, 0xb0, 0x7f, 0xaf, 0x08, 0xba, 0x9c, 0x2c, 0xf2, 0x44, 0x96, 0x79, 0x2e, 0x25, - 0x0e, 0xb6, 0x3a, 0x81, 0xab, 0x0b, 0xd7, 0x96, 0x33, 0x49, 0xe6, 0xbf, 0x6a, 0xc1, 0xb8, 0x17, - 0x78, 0x89, 0xe7, 0x30, 0x77, 0x25, 0x9f, 0x7a, 0x9f, 0x4a, 0xdc, 0x0a, 0xe7, 0x1c, 0x46, 0xe6, - 0x8e, 0x91, 0x12, 0x86, 0x4d, 0xc9, 0xe8, 0xd3, 0x22, 0x0f, 0xa9, 0x98, 0xdb, 0x19, 0x85, 0x72, - 0x26, 0xf9, 0xa8, 0x05, 0xa5, 0x88, 0x24, 0x91, 0x3c, 0x1d, 0x72, 0xf3, 0xa4, 0xc9, 0xa5, 0x49, - 0xd4, 0xd9, 0x4a, 0x22, 0x27, 0x21, 0x0d, 0x63, 0xb9, 0xc7, 0xc0, 0x98, 0x0b, 0xb2, 0x63, 0x40, - 0xdd, 0x6d, 0x31, 0x64, 0x8e, 0xc7, 0x3c, 0x54, 0x9c, 0x76, 0x12, 0x36, 0x69, 0x33, 0x89, 0x4d, - 0x2d, 0x9d, 0xc5, 0x22, 0x11, 0x58, 0xd3, 0xd8, 0x5f, 0x29, 0x41, 0x26, 0xed, 0x1b, 0x1d, 0x98, - 0xa5, 0x90, 0xad, 0x7c, 0x4b, 0x21, 0x2b, 0x65, 0x7a, 0x95, 0x43, 0x46, 0x0d, 0x28, 0xb5, 0x76, - 0x9d, 0x58, 0x7a, 0x23, 0xef, 0xc8, 0x66, 0xda, 0xa4, 0xc0, 0x07, 0x87, 0xb3, 0x3f, 0x35, 0xd8, - 0xea, 0x96, 0xf6, 0xd5, 0x79, 0x7e, 0x06, 0x4e, 0x8b, 0x66, 0x3c, 0x30, 0xe7, 0x6f, 0xae, 0x6f, - 0x8b, 0xc7, 0x84, 0x41, 0x3e, 0x2b, 0xaa, 0x31, 0x61, 0x12, 0xb7, 0xfd, 0x44, 0xf4, 0x86, 0x77, - 0x72, 0x1c, 0x65, 0x9c, 0xb1, 0x3e, 0x34, 0xc4, 0xff, 0x63, 0x43, 0x28, 0xfa, 0x38, 0x54, 0xe2, - 0xc4, 0x89, 0x92, 0x47, 0x3c, 0x62, 0xa0, 0x1a, 0x7d, 0x4b, 0x32, 0xc1, 0x9a, 0x1f, 0x7a, 0x97, - 0x55, 0x7c, 0xf1, 0xe2, 0xdd, 0x47, 0x4c, 0x1f, 0x94, 0xd5, 0x61, 0x04, 0x07, 0x6c, 0x70, 0xa3, - 0xce, 0x1e, 0xeb, 0xdb, 0x3c, 0x66, 0x5e, 0x66, 0xde, 0xbc, 0x32, 0x85, 0x58, 0x61, 0xb0, 0x41, - 0x65, 0xff, 0x02, 0x9c, 0xcb, 0xde, 0x9d, 0x20, 0x36, 0xbc, 0x1a, 0x51, 0xd8, 0x6e, 0x65, 0xbd, - 0x59, 0x56, 0x5b, 0x1f, 0x73, 0x1c, 0xf5, 0x66, 0xf7, 0xbc, 0xa0, 0x96, 0xf5, 0x66, 0x6f, 0x7a, - 0x41, 0x0d, 0x33, 0xcc, 0x00, 0x35, 0xa2, 0xff, 0xa5, 0x05, 0x97, 0x8f, 0xbb, 0xe2, 0x01, 0xbd, - 0x08, 0x23, 0xf7, 0x9d, 0x48, 0x56, 0x90, 0x62, 0xb6, 0xe3, 0x8e, 0x13, 0x05, 0x98, 0x41, 0x51, - 0x07, 0x46, 0xf9, 0xb1, 0x2a, 0xb1, 0x3e, 0x7f, 0x27, 0xdf, 0x0b, 0x27, 0x6e, 0x12, 0x23, 0x3a, - 0xc2, 0x8f, 0x74, 0x61, 0x21, 0xd0, 0xfe, 0xbe, 0x05, 0x68, 0x63, 0x9f, 0x44, 0x91, 0x57, 0x33, - 0x0e, 0x82, 0xa1, 0x37, 0x60, 0xe2, 0xee, 0xd6, 0xc6, 0xfa, 0x66, 0xe8, 0x05, 0xec, 0xac, 0xbb, - 0x71, 0x24, 0xe0, 0x86, 0x01, 0xc7, 0x29, 0x2a, 0xb4, 0x08, 0xd3, 0x77, 0xef, 0x51, 0x0f, 0xfc, - 0xea, 0x41, 0x2b, 0x22, 0x71, 0xac, 0xae, 0x69, 0x11, 0x7b, 0x2e, 0x37, 0xde, 0xc9, 0x20, 0x71, - 0x37, 0x3d, 0xda, 0x80, 0x0b, 0x4d, 0x16, 0xec, 0xad, 0xb1, 0x85, 0x47, 0xcc, 0x23, 0xbf, 0x91, - 0x3c, 0x4c, 0xfc, 0xfc, 0xd1, 0xe1, 0xec, 0x85, 0xb5, 0x5e, 0x04, 0xb8, 0xf7, 0x73, 0xf6, 0xb7, - 0x0b, 0x30, 0x6e, 0x5c, 0x93, 0x32, 0xc0, 0x12, 0x2b, 0x73, 0xb3, 0x4b, 0x61, 0xc0, 0x9b, 0x5d, - 0x5e, 0x81, 0x72, 0x2b, 0xf4, 0x3d, 0xd7, 0x53, 0x27, 0x9f, 0x59, 0x05, 0x9e, 0x4d, 0x01, 0xc3, - 0x0a, 0x8b, 0xee, 0x43, 0x45, 0x5d, 0x1d, 0x20, 0xce, 0x42, 0xe5, 0xb5, 0xc8, 0x54, 0x83, 0x57, - 0x5f, 0x09, 0xa0, 0x65, 0x21, 0x1b, 0x46, 0x59, 0xcf, 0x97, 0xd9, 0x24, 0x2c, 0xe1, 0x9d, 0x0d, - 0x89, 0x18, 0x0b, 0x8c, 0xfd, 0x2b, 0x63, 0x70, 0xbe, 0x57, 0xd5, 0x18, 0xf4, 0x73, 0x30, 0xca, - 0x75, 0xcc, 0xa7, 0x30, 0x59, 0x2f, 0x19, 0xcb, 0x8c, 0xa1, 0x50, 0x8b, 0xfd, 0xc6, 0x42, 0xa6, - 0x90, 0xee, 0x3b, 0x3b, 0xc2, 0x8d, 0x38, 0x1d, 0xe9, 0xab, 0x8e, 0x96, 0xbe, 0xea, 0x70, 0xe9, - 0xbe, 0xb3, 0x83, 0x0e, 0xa0, 0xd4, 0xf0, 0x12, 0xe2, 0x08, 0x67, 0xfa, 0xce, 0xa9, 0x08, 0x27, - 0x0e, 0x4f, 0x5a, 0x66, 0x3f, 0x31, 0x17, 0x88, 0xbe, 0x69, 0xc1, 0x99, 0x9d, 0xf4, 0xf9, 0x01, - 0x31, 0xab, 0x38, 0xa7, 0x50, 0x19, 0x28, 0x2d, 0xa8, 0x7a, 0xee, 0xe8, 0x70, 0xf6, 0x4c, 0x06, - 0x88, 0xb3, 0xea, 0xa0, 0x5f, 0xb2, 0x60, 0xac, 0xee, 0xf9, 0x46, 0x55, 0x8c, 0x53, 0xf8, 0x38, - 0xd7, 0x98, 0x00, 0x3d, 0xf3, 0xf2, 0xff, 0x31, 0x96, 0x92, 0xfb, 0x45, 0x71, 0x46, 0x4f, 0x1a, - 0xc5, 0x19, 0x7b, 0x42, 0xcb, 0xa7, 0xbf, 0x55, 0x80, 0x97, 0x07, 0xf8, 0x46, 0x66, 0x3e, 0xba, - 0x75, 0x4c, 0x3e, 0xfa, 0x65, 0x18, 0x89, 0x48, 0x2b, 0xcc, 0xce, 0x77, 0x2c, 0x61, 0x84, 0x61, - 0xd0, 0x4b, 0x50, 0x74, 0x5a, 0x9e, 0x98, 0xee, 0x54, 0x90, 0x77, 0x61, 0x73, 0x05, 0x53, 0x38, - 0xfd, 0xd2, 0x95, 0x1d, 0x79, 0xaa, 0x25, 0x9f, 0x52, 0x93, 0xfd, 0x0e, 0xc9, 0xf0, 0x05, 0x8d, - 0xc2, 0x62, 0x2d, 0xd7, 0xde, 0x80, 0x8b, 0xfd, 0x7b, 0x08, 0x7a, 0x1d, 0xc6, 0x77, 0x22, 0x27, - 0x70, 0x77, 0xd7, 0x9c, 0xc4, 0x95, 0xa1, 0x56, 0x96, 0x36, 0x57, 0xd5, 0x60, 0x6c, 0xd2, 0xd8, - 0xbf, 0x5b, 0xe8, 0xcd, 0x91, 0x1b, 0x81, 0x61, 0x5a, 0x58, 0xb4, 0x5f, 0xa1, 0x4f, 0xfb, 0xdd, - 0x83, 0x72, 0xc2, 0x92, 0xa0, 0x49, 0x5d, 0x58, 0x92, 0xdc, 0xce, 0xf1, 0xb0, 0xb9, 0x66, 0x5b, - 0x30, 0xc7, 0x4a, 0x0c, 0x35, 0xf9, 0xbe, 0x2e, 0xa8, 0x21, 0x4c, 0x7e, 0xe6, 0xb0, 0xc0, 0x12, - 0x9c, 0x35, 0x0a, 0x80, 0xf1, 0x1c, 0x50, 0x1e, 0x80, 0x53, 0x07, 0x23, 0x36, 0x33, 0x78, 0xdc, - 0xf5, 0x84, 0xfd, 0xad, 0x02, 0x3c, 0xdf, 0xd7, 0xb2, 0xe9, 0x28, 0xa1, 0xf5, 0x90, 0x28, 0xe1, - 0x89, 0x3b, 0xa8, 0xd9, 0xc0, 0x23, 0x8f, 0xa7, 0x81, 0x5f, 0x85, 0xb2, 0x17, 0xc4, 0xc4, 0x6d, - 0x47, 0xbc, 0xd1, 0x8c, 0x6c, 0xac, 0x15, 0x01, 0xc7, 0x8a, 0xc2, 0xfe, 0xfd, 0xfe, 0x5d, 0x8d, - 0xce, 0x72, 0x3f, 0xb4, 0xad, 0xf4, 0x16, 0x4c, 0x3a, 0xad, 0x16, 0xa7, 0x63, 0x11, 0x99, 0xcc, - 0x51, 0xa7, 0x05, 0x13, 0x89, 0xd3, 0xb4, 0x46, 0x1f, 0x1e, 0xed, 0xd7, 0x87, 0xed, 0x3f, 0x29, - 0x41, 0x85, 0xb6, 0xc0, 0x62, 0x44, 0x6a, 0x31, 0x6d, 0x80, 0x76, 0xe4, 0x8b, 0x56, 0x54, 0x0d, - 0x70, 0x0b, 0xaf, 0x62, 0x0a, 0x4f, 0xad, 0x92, 0x0b, 0x43, 0x9d, 0x84, 0x28, 0x1e, 0x7b, 0x12, - 0xe2, 0x2d, 0x98, 0x8c, 0xe3, 0xdd, 0xcd, 0xc8, 0xdb, 0x77, 0x12, 0xea, 0x7b, 0x8b, 0x88, 0xb7, - 0xce, 0x5e, 0xde, 0xba, 0xae, 0x91, 0x38, 0x4d, 0x8b, 0x96, 0x61, 0x5a, 0x9f, 0x47, 0x20, 0x51, - 0xc2, 0x02, 0xdc, 0xbc, 0xa9, 0x54, 0xf2, 0xb0, 0x3e, 0xc1, 0x20, 0x08, 0x70, 0xf7, 0x33, 0x74, - 0x48, 0xa7, 0x80, 0x54, 0x91, 0xd1, 0xf4, 0x90, 0x4e, 0xf1, 0xa1, 0xba, 0x74, 0x3d, 0x81, 0xd6, - 0xe0, 0x1c, 0xef, 0x17, 0xec, 0xa6, 0x2c, 0xf5, 0x46, 0x63, 0x8c, 0xd1, 0x0b, 0x82, 0xd1, 0xb9, - 0xe5, 0x6e, 0x12, 0xdc, 0xeb, 0x39, 0xea, 0x58, 0x2b, 0xf0, 0xca, 0x92, 0x58, 0xe0, 0x29, 0xc7, - 0x5a, 0xb1, 0x59, 0xa9, 0x61, 0x93, 0x0e, 0x7d, 0x0c, 0x9e, 0xd3, 0x7f, 0x79, 0x1e, 0x10, 0xdf, - 0xf5, 0x58, 0x12, 0x47, 0xbd, 0x54, 0xf1, 0xa9, 0xe5, 0x9e, 0x64, 0x35, 0xdc, 0xef, 0x79, 0xb4, - 0x03, 0x17, 0x15, 0xea, 0x2a, 0x5d, 0xc5, 0xb4, 0x22, 0x2f, 0x26, 0x55, 0x27, 0x26, 0xb7, 0x22, - 0x9f, 0x1d, 0x0e, 0xab, 0xe8, 0x32, 0xb9, 0xcb, 0x5e, 0x72, 0xbd, 0x17, 0x25, 0x5e, 0xc5, 0x0f, - 0xe1, 0x82, 0xe6, 0xa1, 0x42, 0x02, 0x67, 0xc7, 0x27, 0x1b, 0x8b, 0x2b, 0xec, 0xc8, 0x98, 0xb1, - 0xc9, 0x72, 0x55, 0x22, 0xb0, 0xa6, 0x51, 0x41, 0x96, 0x89, 0xbe, 0x41, 0x96, 0x3f, 0xb4, 0x60, - 0x52, 0x75, 0xf6, 0xc7, 0x90, 0xcd, 0xe0, 0xa7, 0xb3, 0x19, 0x96, 0x4f, 0xba, 0xbb, 0x25, 0x34, - 0xef, 0x13, 0x12, 0xfb, 0xe3, 0x0a, 0x00, 0xbb, 0xf4, 0xd3, 0x63, 0xd5, 0x1b, 0xa4, 0xb9, 0xb3, - 0xfa, 0x9a, 0xbb, 0xa7, 0x76, 0x38, 0xf7, 0x3a, 0x5c, 0x51, 0x7a, 0xb2, 0x87, 0x2b, 0xb6, 0xe0, - 0x82, 0x9c, 0x8c, 0xf8, 0x82, 0xff, 0x7a, 0x18, 0x2b, 0xeb, 0x50, 0xae, 0xbe, 0x24, 0x18, 0x5d, - 0x58, 0xe9, 0x45, 0x84, 0x7b, 0x3f, 0x9b, 0x9a, 0x03, 0xc7, 0x8e, 0x9b, 0x03, 0xf5, 0x80, 0x58, - 0xad, 0xcb, 0x3a, 0x50, 0x99, 0x01, 0xb1, 0x7a, 0x6d, 0x0b, 0x6b, 0x9a, 0xde, 0x56, 0xb1, 0x92, - 0x93, 0x55, 0x84, 0xa1, 0xad, 0xa2, 0x1c, 0x9f, 0xe3, 0x7d, 0x6f, 0x5b, 0x93, 0x7b, 0x0c, 0x13, - 0x7d, 0xf7, 0x18, 0xde, 0x86, 0x29, 0x2f, 0xd8, 0x25, 0x91, 0x97, 0x90, 0x1a, 0x1b, 0x0b, 0xe2, - 0x2a, 0x45, 0x95, 0x43, 0xb0, 0x92, 0xc2, 0xe2, 0x0c, 0x75, 0xda, 0xa8, 0x4c, 0x0d, 0x60, 0x54, - 0xfa, 0x98, 0xf2, 0x33, 0xf9, 0x98, 0xf2, 0xb3, 0x27, 0x37, 0xe5, 0xd3, 0xa7, 0x6a, 0xca, 0x51, - 0x2e, 0xa6, 0xfc, 0x65, 0x28, 0xb5, 0xa2, 0xf0, 0xa0, 0x33, 0x73, 0x2e, 0xed, 0x9e, 0x6d, 0x52, - 0x20, 0xe6, 0x38, 0x73, 0xb9, 0x70, 0xfe, 0xe1, 0xcb, 0x05, 0xfb, 0xf3, 0x05, 0xb8, 0xa0, 0x2d, - 0x1d, 0xed, 0x5f, 0x5e, 0x9d, 0x8e, 0x75, 0x56, 0xac, 0x8f, 0x07, 0xa2, 0x8d, 0xf4, 0x15, 0x9d, - 0x09, 0xa3, 0x30, 0xd8, 0xa0, 0x62, 0x59, 0x20, 0x24, 0x62, 0xd5, 0x19, 0xb2, 0x66, 0x70, 0x51, - 0xc0, 0xb1, 0xa2, 0x60, 0x37, 0x86, 0x93, 0x28, 0x11, 0x99, 0x75, 0xd9, 0x13, 0x9b, 0x8b, 0x1a, - 0x85, 0x4d, 0x3a, 0xf4, 0x0a, 0x17, 0xc2, 0x86, 0x20, 0x35, 0x85, 0x13, 0xa2, 0xce, 0xb4, 0x1c, - 0x75, 0x0a, 0x2b, 0xd5, 0x61, 0xe9, 0x3e, 0xa5, 0x6e, 0x75, 0x58, 0xf0, 0x44, 0x51, 0xd8, 0xff, - 0xc7, 0x82, 0xe7, 0x7b, 0x36, 0xc5, 0x63, 0x98, 0xde, 0x0e, 0xd2, 0xd3, 0xdb, 0xd6, 0xc9, 0xa7, - 0xb7, 0xae, 0xb7, 0xe8, 0x33, 0xd5, 0xfd, 0x47, 0x0b, 0xa6, 0x34, 0xfd, 0x63, 0x78, 0x55, 0x2f, - 0xd7, 0xbb, 0xbf, 0xb5, 0xea, 0x7c, 0xe7, 0x2a, 0xf5, 0x6e, 0x7f, 0xc8, 0xde, 0x8d, 0xef, 0x41, - 0x2f, 0xb8, 0xf2, 0x9e, 0xca, 0x63, 0xf6, 0x5e, 0x3b, 0x30, 0xca, 0xaa, 0xba, 0xc6, 0xf9, 0xec, - 0x85, 0xa7, 0xe5, 0xb3, 0x3c, 0x3e, 0xbd, 0x17, 0xce, 0xfe, 0xc6, 0x58, 0x08, 0x64, 0xb5, 0x43, - 0xbc, 0x98, 0xda, 0xcb, 0x9a, 0x48, 0x9c, 0xd1, 0xb5, 0x43, 0x04, 0x1c, 0x2b, 0x0a, 0xbb, 0x09, - 0x33, 0x69, 0xe6, 0x4b, 0xa4, 0xce, 0x42, 0x8e, 0x03, 0xbd, 0xe6, 0x3c, 0x54, 0x1c, 0xf6, 0xd4, - 0x6a, 0xdb, 0xc9, 0x5e, 0x4d, 0xb0, 0x20, 0x11, 0x58, 0xd3, 0xd8, 0xbf, 0x65, 0xc1, 0xb9, 0x1e, - 0x2f, 0x93, 0x63, 0xc2, 0x50, 0xa2, 0xad, 0x40, 0x9f, 0x0b, 0x44, 0x6b, 0xa4, 0xee, 0xc8, 0xa0, - 0x96, 0x61, 0xd5, 0x96, 0x38, 0x18, 0x4b, 0xbc, 0xfd, 0x3f, 0x2d, 0x38, 0x93, 0xd6, 0x35, 0x46, - 0x37, 0x00, 0xf1, 0x97, 0x59, 0xf2, 0x62, 0x37, 0xdc, 0x27, 0x51, 0x87, 0xbe, 0x39, 0xd7, 0xfa, - 0xa2, 0xe0, 0x84, 0x16, 0xba, 0x28, 0x70, 0x8f, 0xa7, 0x58, 0x6d, 0x83, 0x9a, 0x6a, 0x6d, 0xd9, - 0x53, 0x6e, 0xe7, 0xd9, 0x53, 0xf4, 0xc7, 0x34, 0x37, 0xfe, 0x95, 0x48, 0x6c, 0xca, 0xb7, 0xbf, - 0x3f, 0x02, 0x2a, 0xa3, 0x90, 0x85, 0x4f, 0x72, 0x0a, 0x3e, 0xa5, 0xee, 0xaf, 0x28, 0x0e, 0x71, - 0xa3, 0xe9, 0xc8, 0xc3, 0x42, 0x1b, 0xbc, 0x94, 0xba, 0xb9, 0xc9, 0xa3, 0xde, 0x70, 0x5b, 0xa3, - 0xb0, 0x49, 0x47, 0x35, 0xf1, 0xbd, 0x7d, 0xc2, 0x1f, 0x1a, 0x4d, 0x6b, 0xb2, 0x2a, 0x11, 0x58, - 0xd3, 0x50, 0x4d, 0x6a, 0x5e, 0xbd, 0x2e, 0x56, 0x8a, 0x4a, 0x13, 0xda, 0x3a, 0x98, 0x61, 0x28, - 0xc5, 0x6e, 0x18, 0xee, 0x09, 0xff, 0x4f, 0x51, 0x5c, 0x0f, 0xc3, 0x3d, 0xcc, 0x30, 0xd4, 0x63, - 0x09, 0xc2, 0xa8, 0xc9, 0xae, 0x8e, 0xa8, 0x29, 0x29, 0xc2, 0xef, 0x53, 0x1e, 0xcb, 0x7a, 0x37, - 0x09, 0xee, 0xf5, 0x1c, 0xed, 0x81, 0xad, 0x88, 0xd4, 0x3c, 0x37, 0x31, 0xb9, 0x41, 0xba, 0x07, - 0x6e, 0x76, 0x51, 0xe0, 0x1e, 0x4f, 0xa1, 0x05, 0x38, 0x23, 0x33, 0x42, 0xe5, 0x89, 0x17, 0xee, - 0x0c, 0x2a, 0x3f, 0x1c, 0xa7, 0xd1, 0x38, 0x4b, 0x4f, 0xad, 0x4d, 0x53, 0x1c, 0x76, 0x63, 0x6e, - 0xa2, 0x61, 0x6d, 0xe4, 0x21, 0x38, 0xac, 0x28, 0xec, 0xcf, 0x16, 0xe9, 0xec, 0xd8, 0xa7, 0x60, - 0xe3, 0x63, 0x0b, 0x76, 0xa6, 0x7b, 0xe4, 0xc8, 0x00, 0x3d, 0xf2, 0x0d, 0x98, 0xb8, 0x1b, 0x87, - 0x81, 0x0a, 0x24, 0x96, 0xfa, 0x06, 0x12, 0x0d, 0xaa, 0xde, 0x81, 0xc4, 0xd1, 0xbc, 0x02, 0x89, - 0x63, 0x8f, 0x18, 0x48, 0xfc, 0xb7, 0x25, 0x50, 0xe5, 0xd6, 0xd6, 0x49, 0x72, 0x3f, 0x8c, 0xf6, - 0xbc, 0xa0, 0xc1, 0x32, 0x69, 0xbf, 0x69, 0xc1, 0x04, 0x1f, 0x2f, 0xa2, 0x56, 0x2e, 0xcf, 0x12, - 0xaa, 0xe7, 0x54, 0x62, 0x2c, 0x25, 0x6c, 0x6e, 0xdb, 0x10, 0x94, 0x29, 0x5c, 0x6c, 0xa2, 0x70, - 0x4a, 0x23, 0xf4, 0xf3, 0x00, 0xf2, 0x12, 0x85, 0x7a, 0x4e, 0xd7, 0x0b, 0xab, 0x2b, 0x2d, 0x48, - 0x5d, 0xfb, 0xa6, 0xdb, 0x4a, 0x08, 0x36, 0x04, 0xa2, 0xcf, 0x67, 0xaf, 0xd6, 0xf9, 0xf4, 0xa9, - 0xb4, 0xcd, 0x20, 0xa5, 0x71, 0x30, 0x8c, 0x79, 0x41, 0x83, 0xf6, 0x13, 0x11, 0x7b, 0xfd, 0x60, - 0xaf, 0x2c, 0xf4, 0xd5, 0xd0, 0xa9, 0x55, 0x1d, 0xdf, 0x09, 0x5c, 0x12, 0xad, 0x70, 0x72, 0xb3, - 0x92, 0x3e, 0x03, 0x60, 0xc9, 0xa8, 0xab, 0x86, 0x5e, 0x69, 0x90, 0x1a, 0x7a, 0x17, 0x3f, 0x0a, - 0xd3, 0x5d, 0x1f, 0x73, 0xa8, 0xd2, 0x38, 0x8f, 0x5e, 0x55, 0xc7, 0xfe, 0x57, 0xa3, 0x7a, 0xd2, - 0x5a, 0x0f, 0x6b, 0xbc, 0x92, 0x5b, 0xa4, 0xbf, 0xa8, 0xf0, 0x3d, 0x73, 0xec, 0x22, 0x46, 0x35, - 0x7e, 0x05, 0xc4, 0xa6, 0x48, 0xda, 0x47, 0x5b, 0x4e, 0x44, 0x82, 0xd3, 0xee, 0xa3, 0x9b, 0x4a, - 0x08, 0x36, 0x04, 0xa2, 0xdd, 0x54, 0x96, 0xd8, 0xb5, 0x93, 0x67, 0x89, 0xb1, 0x13, 0x6a, 0xbd, - 0x4a, 0x55, 0x7d, 0xd5, 0x82, 0xa9, 0x20, 0xd5, 0x73, 0xc5, 0x3e, 0xfc, 0xf6, 0x69, 0x8c, 0x0a, - 0x5e, 0xad, 0x33, 0x0d, 0xc3, 0x19, 0xf9, 0xbd, 0xa6, 0xb4, 0xd2, 0x90, 0x53, 0x9a, 0x2e, 0x09, - 0x39, 0xda, 0xaf, 0x24, 0x24, 0x0a, 0x54, 0xe1, 0xd9, 0xb1, 0xdc, 0x0b, 0xcf, 0x42, 0x8f, 0xa2, - 0xb3, 0x77, 0xa0, 0xe2, 0x46, 0xc4, 0x49, 0x1e, 0xb1, 0x06, 0x29, 0x0b, 0x42, 0x2e, 0x4a, 0x06, - 0x58, 0xf3, 0xb2, 0xff, 0x43, 0x11, 0xce, 0xca, 0x16, 0x91, 0x19, 0x34, 0x74, 0x7e, 0xe4, 0x72, - 0xb5, 0x73, 0xab, 0xe6, 0xc7, 0xeb, 0x12, 0x81, 0x35, 0x0d, 0xf5, 0xc7, 0xda, 0x31, 0xd9, 0x68, - 0x91, 0x60, 0xd5, 0xdb, 0x89, 0x45, 0xfc, 0x48, 0x0d, 0x94, 0x5b, 0x1a, 0x85, 0x4d, 0x3a, 0xea, - 0x8c, 0x73, 0xbf, 0x38, 0xce, 0x26, 0xa4, 0x09, 0x7f, 0x1b, 0x4b, 0x3c, 0xfa, 0xb5, 0x9e, 0x15, - 0xa4, 0xf3, 0x49, 0xc5, 0xec, 0x4a, 0x1c, 0x1a, 0xb2, 0x74, 0xf4, 0x57, 0x2c, 0x38, 0xb3, 0x97, - 0x3a, 0x85, 0x20, 0x4d, 0xf2, 0x09, 0xcf, 0xcb, 0xa5, 0x8f, 0x36, 0xe8, 0x2e, 0x9c, 0x86, 0xc7, - 0x38, 0x2b, 0xdd, 0xfe, 0xdf, 0x16, 0x98, 0xe6, 0x69, 0x30, 0xcf, 0xca, 0xb8, 0x13, 0xa0, 0x70, - 0xcc, 0x9d, 0x00, 0xd2, 0x09, 0x2b, 0x0e, 0xe6, 0xf4, 0x8f, 0x0c, 0xe1, 0xf4, 0x97, 0xfa, 0x7a, - 0x6d, 0x2f, 0x41, 0xb1, 0xed, 0xd5, 0x84, 0xdf, 0xae, 0x83, 0x61, 0x2b, 0x4b, 0x98, 0xc2, 0xed, - 0x7f, 0x5e, 0xd2, 0xeb, 0x74, 0x91, 0x41, 0xf8, 0x43, 0xf1, 0xda, 0x75, 0x75, 0xfc, 0x91, 0xbf, - 0xf9, 0x7a, 0xd7, 0xf1, 0xc7, 0x9f, 0x18, 0x3e, 0x41, 0x94, 0x37, 0x50, 0xbf, 0xd3, 0x8f, 0x63, - 0xc7, 0x64, 0x87, 0xde, 0x85, 0x32, 0x5d, 0xda, 0xb0, 0x0d, 0xb7, 0x72, 0x4a, 0xa9, 0xf2, 0x75, - 0x01, 0x7f, 0x70, 0x38, 0xfb, 0xe3, 0xc3, 0xab, 0x25, 0x9f, 0xc6, 0x8a, 0x3f, 0x8a, 0xa1, 0x42, - 0x7f, 0xb3, 0x44, 0x56, 0xb1, 0x68, 0xba, 0xa5, 0x6c, 0x91, 0x44, 0xe4, 0x92, 0x25, 0xab, 0xe5, - 0xa0, 0x00, 0x2a, 0xac, 0x7a, 0x3d, 0x13, 0xca, 0xd7, 0x56, 0x9b, 0x2a, 0x9d, 0x54, 0x22, 0x1e, - 0x1c, 0xce, 0xbe, 0x35, 0xbc, 0x50, 0xf5, 0x38, 0xd6, 0x22, 0xec, 0xaf, 0x8d, 0xe8, 0xbe, 0x2b, - 0x4e, 0xbd, 0xfe, 0x50, 0xf4, 0xdd, 0x37, 0x33, 0x7d, 0xf7, 0x72, 0x57, 0xdf, 0x9d, 0xd2, 0x15, - 0xde, 0x53, 0xbd, 0xf1, 0x71, 0x4f, 0xb0, 0xc7, 0xaf, 0xe3, 0x99, 0x67, 0x71, 0xaf, 0xed, 0x45, - 0x24, 0xde, 0x8c, 0xda, 0x81, 0x17, 0x34, 0xc4, 0x3d, 0x3f, 0x86, 0x67, 0x91, 0x42, 0xe3, 0x2c, - 0x3d, 0xbb, 0x23, 0xa8, 0x13, 0xb8, 0x77, 0x9c, 0x7d, 0xde, 0xab, 0x8c, 0x83, 0x80, 0x5b, 0x02, - 0x8e, 0x15, 0x85, 0xfd, 0x6d, 0x16, 0x1d, 0x35, 0x32, 0xe8, 0x69, 0x9f, 0xf0, 0xd9, 0x75, 0x01, - 0xfc, 0x14, 0xa1, 0xea, 0x13, 0xfc, 0x8e, 0x00, 0x8e, 0x43, 0xf7, 0x61, 0x6c, 0x87, 0x97, 0x11, - 0xce, 0xa7, 0x66, 0x90, 0xa8, 0x49, 0xcc, 0x4a, 0xeb, 0xc9, 0x02, 0xc5, 0x0f, 0xf4, 0x4f, 0x2c, - 0xa5, 0xd9, 0x7f, 0xb7, 0x08, 0x67, 0x32, 0xc5, 0xec, 0x53, 0x15, 0x0c, 0x0a, 0xc7, 0x56, 0x30, - 0xf8, 0x24, 0x40, 0x8d, 0xb4, 0xfc, 0xb0, 0xc3, 0xdc, 0x9c, 0x91, 0xa1, 0xdd, 0x1c, 0xe5, 0x19, - 0x2f, 0x29, 0x2e, 0xd8, 0xe0, 0x28, 0x8e, 0x4e, 0xf2, 0x82, 0x08, 0x99, 0xa3, 0x93, 0x46, 0xe9, - 0xac, 0xd1, 0xc7, 0x5b, 0x3a, 0xcb, 0x83, 0x33, 0x5c, 0x45, 0x95, 0xa7, 0xfe, 0x08, 0xe9, 0xe8, - 0x2c, 0xc3, 0x71, 0x29, 0xcd, 0x06, 0x67, 0xf9, 0xda, 0x5f, 0x2e, 0x50, 0x67, 0x8f, 0x37, 0xf6, - 0x9a, 0xdc, 0x4a, 0xff, 0x00, 0x8c, 0x3a, 0xed, 0x64, 0x37, 0xec, 0xaa, 0x87, 0xbc, 0xc0, 0xa0, - 0x58, 0x60, 0xd1, 0x2a, 0x8c, 0xd4, 0xf4, 0xf1, 0xb6, 0x61, 0x94, 0xd3, 0xfb, 0x66, 0x4e, 0x42, - 0x30, 0xe3, 0x82, 0x5e, 0x84, 0x91, 0xc4, 0x69, 0xa4, 0xae, 0x80, 0xda, 0x76, 0x1a, 0x31, 0x66, - 0x50, 0x73, 0x2e, 0x1a, 0x39, 0x66, 0x2e, 0x7a, 0x0b, 0x26, 0x63, 0xaf, 0x11, 0x38, 0x49, 0x3b, - 0x22, 0x46, 0x8c, 0x46, 0x07, 0xb6, 0x4d, 0x24, 0x4e, 0xd3, 0xda, 0xdf, 0xaf, 0xc0, 0xf9, 0x5e, - 0x77, 0x71, 0xe6, 0x9d, 0x24, 0xdc, 0x4b, 0xc6, 0xe3, 0x4b, 0x12, 0xee, 0x23, 0xdd, 0x37, 0x92, - 0x84, 0x7d, 0x23, 0x49, 0xf8, 0xf3, 0x16, 0x54, 0x54, 0x6e, 0xac, 0xc8, 0xef, 0xfb, 0xf8, 0x29, - 0xdc, 0x77, 0x2a, 0x45, 0x88, 0x14, 0x49, 0xf9, 0x17, 0x6b, 0xe1, 0xa7, 0x97, 0x35, 0xfc, 0x50, - 0x85, 0x86, 0xca, 0x1a, 0x56, 0x29, 0xd5, 0xa5, 0x3c, 0x52, 0xaa, 0xfb, 0x7c, 0xaa, 0x9e, 0x29, - 0xd5, 0x5f, 0xb5, 0x60, 0xdc, 0x79, 0xaf, 0x1d, 0x91, 0x25, 0xb2, 0xbf, 0xd1, 0x8a, 0x85, 0xdd, - 0xfa, 0x44, 0xfe, 0x0a, 0x2c, 0x68, 0x21, 0xa2, 0x70, 0xa3, 0x06, 0x60, 0x53, 0x85, 0x54, 0x0a, - 0xf5, 0x58, 0x1e, 0x29, 0xd4, 0xbd, 0xd4, 0x39, 0x36, 0x85, 0xfa, 0x2d, 0x98, 0x74, 0xfd, 0x30, - 0x20, 0x9b, 0x51, 0x98, 0x84, 0x6e, 0xe8, 0x0b, 0x1f, 0x55, 0x99, 0x84, 0x45, 0x13, 0x89, 0xd3, - 0xb4, 0xfd, 0xf2, 0xaf, 0x2b, 0x27, 0xcd, 0xbf, 0x86, 0x27, 0x94, 0x7f, 0xfd, 0xa7, 0x05, 0x98, - 0x3d, 0xe6, 0xa3, 0xa2, 0x37, 0x61, 0x22, 0x8c, 0x1a, 0x4e, 0xe0, 0xbd, 0xc7, 0x8f, 0xbf, 0x95, - 0xd2, 0xe7, 0xda, 0x37, 0x0c, 0x1c, 0x4e, 0x51, 0xca, 0x0c, 0xcd, 0xd1, 0x3e, 0x19, 0x9a, 0x1f, - 0x86, 0xf1, 0x84, 0x38, 0x4d, 0x91, 0x30, 0x20, 0xd6, 0x15, 0x3a, 0x4e, 0xa3, 0x51, 0xd8, 0xa4, - 0xa3, 0xdd, 0x68, 0xca, 0x71, 0x5d, 0x12, 0xc7, 0x32, 0x05, 0x53, 0xec, 0x79, 0xe4, 0x96, 0xdf, - 0xc9, 0xb6, 0x92, 0x16, 0x52, 0x22, 0x70, 0x46, 0x24, 0x55, 0xde, 0xf1, 0x7d, 0x9e, 0x6d, 0x4d, - 0xe4, 0xa5, 0x8e, 0xba, 0x44, 0xb8, 0x46, 0x61, 0x93, 0xce, 0xfe, 0xf5, 0x02, 0xbc, 0xf4, 0x50, - 0xf3, 0x32, 0x70, 0x76, 0x6c, 0x3b, 0x26, 0x51, 0x36, 0xce, 0x71, 0x2b, 0x26, 0x11, 0x66, 0x18, - 0xde, 0x4a, 0xad, 0x96, 0x71, 0xe9, 0x41, 0xde, 0xc9, 0xd8, 0xbc, 0x95, 0x52, 0x22, 0x70, 0x46, - 0x64, 0xb6, 0x95, 0x46, 0x06, 0x6c, 0xa5, 0x7f, 0x58, 0x80, 0x97, 0x07, 0x30, 0xc2, 0x39, 0x26, - 0xad, 0xa7, 0x93, 0xfe, 0x8b, 0x4f, 0x26, 0xe9, 0xff, 0x51, 0x9b, 0xeb, 0xdb, 0x05, 0xb8, 0xd8, - 0xdf, 0x16, 0xa2, 0x9f, 0xa4, 0x6b, 0x13, 0x99, 0xc3, 0x60, 0x1e, 0x18, 0x38, 0xc7, 0xd7, 0x25, - 0x29, 0x14, 0xce, 0xd2, 0xa2, 0x39, 0x80, 0x96, 0x93, 0xec, 0xc6, 0x57, 0x0f, 0xbc, 0x38, 0x11, - 0x47, 0xdd, 0xa6, 0xf8, 0x0e, 0xb3, 0x84, 0x62, 0x83, 0x82, 0x8a, 0x63, 0xff, 0x96, 0xc2, 0xf5, - 0x30, 0xe1, 0x0f, 0x71, 0x3f, 0xee, 0x1c, 0xbf, 0x85, 0x35, 0x85, 0xc2, 0x59, 0x5a, 0x2a, 0x8e, - 0xc5, 0x30, 0xb8, 0xa2, 0xe2, 0xc6, 0x5a, 0x2a, 0x6e, 0x55, 0x41, 0xb1, 0x41, 0x91, 0x3d, 0x0a, - 0x51, 0x1a, 0xe0, 0x28, 0xc4, 0x3f, 0x2d, 0xc0, 0xf3, 0x7d, 0xe7, 0xd2, 0xc1, 0x06, 0xe0, 0xd3, - 0x77, 0x06, 0xe2, 0xd1, 0xfa, 0xce, 0x90, 0x99, 0xfd, 0xff, 0xb9, 0x4f, 0x4f, 0x13, 0x99, 0xfd, - 0xd9, 0xa9, 0xc2, 0x1a, 0x76, 0xaa, 0x78, 0x8a, 0xda, 0xb3, 0x2b, 0x99, 0x7f, 0x64, 0x88, 0x64, - 0xfe, 0xcc, 0xc7, 0x28, 0x0d, 0x38, 0x90, 0xbf, 0xdb, 0xbf, 0x79, 0xa9, 0xef, 0x3d, 0xd0, 0xae, - 0xcf, 0x12, 0x9c, 0x15, 0x57, 0x5f, 0x6f, 0xb5, 0x77, 0xc4, 0x41, 0xc8, 0x42, 0xfa, 0x02, 0x90, - 0x95, 0x0c, 0x1e, 0x77, 0x3d, 0xf1, 0x14, 0x1e, 0xae, 0x78, 0xc4, 0x26, 0xfd, 0x24, 0x54, 0x14, - 0x6f, 0x9e, 0x70, 0xa8, 0x3e, 0x68, 0x57, 0xc2, 0xa1, 0xfa, 0x9a, 0x06, 0x15, 0x6d, 0x89, 0x3d, - 0xd2, 0xc9, 0xf6, 0xcc, 0x9b, 0xa4, 0xc3, 0x82, 0x8f, 0xf6, 0x8f, 0xc1, 0x84, 0x5a, 0x44, 0x0e, - 0x5a, 0x84, 0xd0, 0xfe, 0x1f, 0x23, 0x30, 0x99, 0x3a, 0xf0, 0x9e, 0xda, 0x0a, 0xb1, 0x8e, 0xdd, - 0x0a, 0x61, 0x29, 0x9a, 0xed, 0x40, 0xd6, 0xe8, 0x34, 0x52, 0x34, 0xdb, 0x01, 0xc1, 0x1c, 0x47, - 0x97, 0xee, 0xb5, 0xa8, 0x83, 0xdb, 0x81, 0x48, 0xf4, 0x52, 0x4b, 0xf7, 0x25, 0x06, 0xc5, 0x02, - 0x8b, 0x3e, 0x63, 0xc1, 0x44, 0xcc, 0xf6, 0xd9, 0xf8, 0x46, 0x92, 0xf8, 0xa0, 0x37, 0xf2, 0xb8, - 0x9b, 0x51, 0x14, 0x77, 0x60, 0x31, 0x62, 0x13, 0x82, 0x53, 0x12, 0xd1, 0x2f, 0x5b, 0xe6, 0xad, - 0x94, 0xa3, 0x79, 0x24, 0x28, 0x66, 0xeb, 0x09, 0xf0, 0x6d, 0x96, 0x87, 0x5f, 0x4e, 0x19, 0xab, - 0x5d, 0x9e, 0xb1, 0xd3, 0xd9, 0xe5, 0x81, 0x1e, 0x3b, 0x3c, 0x1f, 0x82, 0x4a, 0xd3, 0x09, 0xbc, - 0x3a, 0x89, 0x93, 0x78, 0xa6, 0x6c, 0x94, 0x39, 0x91, 0x40, 0xac, 0xf1, 0x74, 0xb2, 0x8b, 0xd9, - 0x8b, 0xf1, 0xb8, 0x58, 0x45, 0x97, 0xcb, 0xdf, 0xd2, 0x60, 0x6c, 0xd2, 0xd8, 0xff, 0xc4, 0x82, - 0x0b, 0x3d, 0x1b, 0xe3, 0xe9, 0xcd, 0xa8, 0xa1, 0x13, 0xf4, 0xb9, 0x1e, 0x05, 0x21, 0x50, 0xe7, - 0xd4, 0x2e, 0x2f, 0x15, 0x15, 0x27, 0x26, 0xfb, 0xf6, 0x8d, 0xe1, 0xf6, 0x2a, 0xf5, 0x7e, 0x61, - 0xf1, 0xb1, 0xee, 0x17, 0x52, 0x57, 0xd0, 0xb8, 0x66, 0x17, 0xfd, 0x82, 0x59, 0xfb, 0xc4, 0xca, - 0xab, 0x4e, 0x07, 0x67, 0xae, 0x6a, 0xa7, 0xf0, 0x56, 0xeb, 0x55, 0x4a, 0x25, 0xdb, 0x5f, 0x0b, - 0xc7, 0xf7, 0x57, 0xe4, 0xcb, 0x22, 0x33, 0xc5, 0xfc, 0x8b, 0xcc, 0x54, 0xba, 0x0a, 0xcc, 0xfc, - 0x6d, 0x8b, 0xf7, 0xb4, 0xcc, 0x2b, 0x69, 0x0b, 0x6b, 0x3d, 0xc4, 0xc2, 0xbe, 0xca, 0xae, 0x83, - 0xa9, 0x5f, 0x27, 0x8e, 0x2f, 0x2c, 0xb1, 0x79, 0xb3, 0x0b, 0x83, 0x63, 0x45, 0xc1, 0x8a, 0x47, - 0xfb, 0x7e, 0x78, 0xff, 0x6a, 0xb3, 0x95, 0x74, 0x84, 0x4d, 0xd6, 0xc5, 0xa3, 0x15, 0x06, 0x1b, - 0x54, 0xf6, 0x9f, 0x59, 0xfc, 0x73, 0x8a, 0xb0, 0xcf, 0x9b, 0x99, 0x62, 0xa7, 0x83, 0x47, 0x4c, - 0x7e, 0x0e, 0xc0, 0x55, 0x37, 0x41, 0xe4, 0x73, 0xfb, 0xae, 0xbe, 0x59, 0xc2, 0xbc, 0x12, 0x56, - 0xc2, 0xb0, 0x21, 0x2f, 0x35, 0x78, 0x8a, 0xc7, 0x0d, 0x1e, 0xfb, 0x4f, 0x2d, 0x48, 0x4d, 0x16, - 0xa8, 0x05, 0x25, 0xaa, 0x41, 0x27, 0x9f, 0x7b, 0x2b, 0x4c, 0xd6, 0x74, 0x60, 0x89, 0x6e, 0xc1, - 0x7e, 0x62, 0x2e, 0x08, 0xf9, 0x22, 0xe0, 0x53, 0xc8, 0xe3, 0x6e, 0x15, 0x53, 0xe0, 0xf5, 0x30, - 0xdc, 0xe3, 0x1b, 0xda, 0x3a, 0x78, 0x64, 0xbf, 0x09, 0xd3, 0x5d, 0x4a, 0xb1, 0x52, 0x85, 0xa1, - 0xbc, 0xac, 0xc3, 0xe8, 0x81, 0xac, 0x70, 0x2a, 0xe6, 0x38, 0xfb, 0xdb, 0x16, 0x9c, 0xcd, 0xb2, - 0x47, 0xdf, 0xb0, 0x60, 0x3a, 0xce, 0xf2, 0x3b, 0xad, 0xb6, 0x53, 0xc9, 0x10, 0x5d, 0x28, 0xdc, - 0xad, 0x84, 0xfd, 0xff, 0x84, 0x79, 0xba, 0xe3, 0x05, 0xb5, 0xf0, 0xbe, 0x9a, 0x5c, 0xac, 0xbe, - 0x93, 0x0b, 0x1d, 0x62, 0xee, 0x2e, 0xa9, 0xb5, 0xfd, 0xae, 0xe3, 0x1e, 0x5b, 0x02, 0x8e, 0x15, - 0x45, 0xea, 0x66, 0xcc, 0xe2, 0xb1, 0x37, 0x63, 0xbe, 0x01, 0x13, 0xe6, 0x85, 0x34, 0xe2, 0xec, - 0x38, 0xf3, 0x55, 0xcc, 0xbb, 0x6b, 0x70, 0x8a, 0x2a, 0x73, 0x25, 0x61, 0xe9, 0xd8, 0x2b, 0x09, - 0x5f, 0x81, 0xb2, 0xb8, 0x5e, 0x4f, 0xa6, 0x0c, 0xf1, 0xb3, 0x24, 0x02, 0x86, 0x15, 0x96, 0x1a, - 0x88, 0xa6, 0x13, 0xb4, 0x1d, 0x9f, 0xb6, 0x90, 0x38, 0x62, 0xa6, 0x46, 0xd6, 0x9a, 0xc2, 0x60, - 0x83, 0x8a, 0xbe, 0x71, 0xe2, 0x35, 0xc9, 0xbb, 0x61, 0x20, 0x83, 0xed, 0x7a, 0xbb, 0x4f, 0xc0, - 0xb1, 0xa2, 0xb0, 0xff, 0xbb, 0x05, 0xd9, 0xbb, 0xc1, 0x52, 0x0b, 0x40, 0xeb, 0xd8, 0x63, 0x6d, - 0xe9, 0x23, 0x3b, 0x85, 0x81, 0x8e, 0xec, 0x98, 0xa7, 0x69, 0x8a, 0x0f, 0x3d, 0x4d, 0xf3, 0x23, - 0xba, 0xe0, 0x35, 0x3f, 0x76, 0x33, 0xde, 0xab, 0xd8, 0x35, 0xb2, 0x61, 0xd4, 0x75, 0xd4, 0xa9, - 0xe1, 0x09, 0xee, 0x56, 0x2d, 0x2e, 0x30, 0x22, 0x81, 0xa9, 0xee, 0x7c, 0xe7, 0x07, 0x97, 0x9e, - 0xf9, 0xee, 0x0f, 0x2e, 0x3d, 0xf3, 0x07, 0x3f, 0xb8, 0xf4, 0xcc, 0x67, 0x8e, 0x2e, 0x59, 0xdf, - 0x39, 0xba, 0x64, 0x7d, 0xf7, 0xe8, 0x92, 0xf5, 0x07, 0x47, 0x97, 0xac, 0xef, 0x1f, 0x5d, 0xb2, - 0xbe, 0xfa, 0x5f, 0x2f, 0x3d, 0xf3, 0x6e, 0xcf, 0xe4, 0x08, 0xfa, 0xe3, 0x35, 0xb7, 0x36, 0xbf, - 0x7f, 0x85, 0xc5, 0xe7, 0xe9, 0x68, 0x98, 0x37, 0xba, 0xc0, 0xbc, 0x1c, 0x0d, 0xff, 0x3f, 0x00, - 0x00, 0xff, 0xff, 0xf8, 0x50, 0x29, 0x0f, 0x69, 0xb2, 0x00, 0x00, + 0x83, 0xc4, 0x6b, 0x92, 0xae, 0x07, 0x3e, 0x7c, 0xdc, 0x03, 0xb1, 0xbb, 0x4b, 0x9a, 0x4e, 0xf6, + 0x39, 0xfb, 0x6d, 0x98, 0x5c, 0xb8, 0xb3, 0xb5, 0xd0, 0x4e, 0x76, 0x17, 0xc3, 0xa0, 0xee, 0x35, + 0xd0, 0x87, 0x60, 0xdc, 0xf5, 0xdb, 0x71, 0x42, 0xa2, 0x75, 0xa7, 0x49, 0x66, 0xac, 0xcb, 0xd6, + 0x8b, 0x95, 0xea, 0xb9, 0xef, 0x1c, 0xce, 0xbe, 0xef, 0xe8, 0x70, 0x76, 0x7c, 0x51, 0xa3, 0xb0, + 0x49, 0x87, 0x7e, 0x14, 0xc6, 0xa2, 0xd0, 0x27, 0x0b, 0x78, 0x7d, 0xa6, 0xc0, 0x1e, 0x39, 0x23, + 0x1e, 0x19, 0xc3, 0x1c, 0x8c, 0x25, 0xde, 0xfe, 0x83, 0x02, 0xc0, 0x42, 0xab, 0xb5, 0x19, 0x85, + 0x77, 0x89, 0x9b, 0xa0, 0x4f, 0x41, 0x99, 0xb6, 0x42, 0xcd, 0x49, 0x1c, 0x26, 0x6d, 0xfc, 0xca, + 0x5f, 0x9d, 0xe3, 0x2f, 0x33, 0x67, 0xbe, 0x8c, 0xee, 0x03, 0x94, 0x7a, 0x6e, 0xff, 0x95, 0xb9, + 0x8d, 0x1d, 0xfa, 0xfc, 0x1a, 0x49, 0x9c, 0x2a, 0x12, 0xc2, 0x40, 0xc3, 0xb0, 0xe2, 0x8a, 0x02, + 0x18, 0x89, 0x5b, 0xc4, 0x65, 0x8a, 0x8d, 0x5f, 0x59, 0x9d, 0x3b, 0x49, 0x67, 0x9b, 0xd3, 0x9a, + 0x6f, 0xb5, 0x88, 0x5b, 0x9d, 0x10, 0x92, 0x47, 0xe8, 0x3f, 0xcc, 0xe4, 0xa0, 0x7d, 0x18, 0x8d, + 0x13, 0x27, 0x69, 0xc7, 0x33, 0x45, 0x26, 0x71, 0x3d, 0x37, 0x89, 0x8c, 0x6b, 0x75, 0x4a, 0xc8, + 0x1c, 0xe5, 0xff, 0xb1, 0x90, 0x66, 0xff, 0x57, 0x0b, 0xa6, 0x34, 0xf1, 0xaa, 0x17, 0x27, 0xe8, + 0x67, 0xba, 0x1a, 0x77, 0x6e, 0xb0, 0xc6, 0xa5, 0x4f, 0xb3, 0xa6, 0x3d, 0x2b, 0x84, 0x95, 0x25, + 0xc4, 0x68, 0xd8, 0x26, 0x94, 0xbc, 0x84, 0x34, 0xe3, 0x99, 0xc2, 0xe5, 0xe2, 0x8b, 0xe3, 0x57, + 0xae, 0xe7, 0xf5, 0x9e, 0xd5, 0x49, 0x21, 0xb4, 0xb4, 0x42, 0xd9, 0x63, 0x2e, 0xc5, 0xfe, 0xed, + 0x09, 0xf3, 0xfd, 0x68, 0x83, 0xa3, 0x57, 0x60, 0x3c, 0x0e, 0xdb, 0x91, 0x4b, 0x30, 0x69, 0x85, + 0xf1, 0x8c, 0x75, 0xb9, 0x48, 0xbb, 0x1e, 0xed, 0xa9, 0x5b, 0x1a, 0x8c, 0x4d, 0x1a, 0xf4, 0x25, + 0x0b, 0x26, 0x6a, 0x24, 0x4e, 0xbc, 0x80, 0xc9, 0x97, 0xca, 0x6f, 0x9f, 0x58, 0x79, 0x09, 0x5c, + 0xd2, 0xcc, 0xab, 0xe7, 0xc5, 0x8b, 0x4c, 0x18, 0xc0, 0x18, 0xa7, 0xe4, 0xd3, 0x11, 0x57, 0x23, + 0xb1, 0x1b, 0x79, 0x2d, 0xfa, 0x9f, 0xf5, 0x19, 0x63, 0xc4, 0x2d, 0x69, 0x14, 0x36, 0xe9, 0x50, + 0x00, 0x25, 0x3a, 0xa2, 0xe2, 0x99, 0x11, 0xa6, 0xff, 0xca, 0xc9, 0xf4, 0x17, 0x8d, 0x4a, 0x07, + 0xab, 0x6e, 0x7d, 0xfa, 0x2f, 0xc6, 0x5c, 0x0c, 0xfa, 0xa2, 0x05, 0x33, 0x62, 0xc4, 0x63, 0xc2, + 0x1b, 0xf4, 0xce, 0xae, 0x97, 0x10, 0xdf, 0x8b, 0x93, 0x99, 0x12, 0xd3, 0x61, 0x7e, 0xb0, 0xbe, + 0xb5, 0x1c, 0x85, 0xed, 0xd6, 0x4d, 0x2f, 0xa8, 0x55, 0x2f, 0x0b, 0x49, 0x33, 0x8b, 0x7d, 0x18, + 0xe3, 0xbe, 0x22, 0xd1, 0xd7, 0x2c, 0xb8, 0x18, 0x38, 0x4d, 0x12, 0xb7, 0x1c, 0xfa, 0x69, 0x39, + 0xba, 0xea, 0x3b, 0xee, 0x1e, 0xd3, 0x68, 0xf4, 0xe1, 0x34, 0xb2, 0x85, 0x46, 0x17, 0xd7, 0xfb, + 0xb2, 0xc6, 0x0f, 0x10, 0x8b, 0x7e, 0xc3, 0x82, 0xe9, 0x30, 0x6a, 0xed, 0x3a, 0x01, 0xa9, 0x49, + 0x6c, 0x3c, 0x33, 0xc6, 0x86, 0xde, 0x27, 0x4e, 0xf6, 0x89, 0x36, 0xb2, 0x6c, 0xd7, 0xc2, 0xc0, + 0x4b, 0xc2, 0x68, 0x8b, 0x24, 0x89, 0x17, 0x34, 0xe2, 0xea, 0x85, 0xa3, 0xc3, 0xd9, 0xe9, 0x2e, + 0x2a, 0xdc, 0xad, 0x0f, 0xfa, 0x59, 0x18, 0x8f, 0x3b, 0x81, 0x7b, 0xc7, 0x0b, 0x6a, 0xe1, 0xbd, + 0x78, 0xa6, 0x9c, 0xc7, 0xf0, 0xdd, 0x52, 0x0c, 0xc5, 0x00, 0xd4, 0x02, 0xb0, 0x29, 0xad, 0xf7, + 0x87, 0xd3, 0x5d, 0xa9, 0x92, 0xf7, 0x87, 0xd3, 0x9d, 0xe9, 0x01, 0x62, 0xd1, 0xaf, 0x5a, 0x30, + 0x19, 0x7b, 0x8d, 0xc0, 0x49, 0xda, 0x11, 0xb9, 0x49, 0x3a, 0xf1, 0x0c, 0x30, 0x45, 0x6e, 0x9c, + 0xb0, 0x55, 0x0c, 0x96, 0xd5, 0x0b, 0x42, 0xc7, 0x49, 0x13, 0x1a, 0xe3, 0xb4, 0xdc, 0x5e, 0x03, + 0x4d, 0x77, 0xeb, 0xf1, 0x7c, 0x07, 0x9a, 0xee, 0xd4, 0x7d, 0x45, 0xa2, 0x9f, 0x82, 0xb3, 0x1c, + 0xa4, 0x5a, 0x36, 0x9e, 0x99, 0x60, 0x86, 0xf6, 0xfc, 0xd1, 0xe1, 0xec, 0xd9, 0xad, 0x0c, 0x0e, + 0x77, 0x51, 0xa3, 0xb7, 0x61, 0xb6, 0x45, 0xa2, 0xa6, 0x97, 0x6c, 0x04, 0x7e, 0x47, 0x9a, 0x6f, + 0x37, 0x6c, 0x91, 0x9a, 0x50, 0x27, 0x9e, 0x99, 0xbc, 0x6c, 0xbd, 0x58, 0xae, 0x7e, 0x40, 0xa8, + 0x39, 0xbb, 0xf9, 0x60, 0x72, 0x7c, 0x1c, 0x3f, 0xfb, 0xdf, 0x16, 0xe0, 0x6c, 0x76, 0xe2, 0x44, + 0xbf, 0x65, 0xc1, 0x99, 0xbb, 0xf7, 0x92, 0xed, 0x70, 0x8f, 0x04, 0x71, 0xb5, 0x43, 0xcd, 0x1b, + 0x9b, 0x32, 0xc6, 0xaf, 0xb8, 0xf9, 0x4e, 0xd1, 0x73, 0x37, 0xd2, 0x52, 0xae, 0x06, 0x49, 0xd4, + 0xa9, 0x3e, 0x2d, 0xde, 0xee, 0xcc, 0x8d, 0x3b, 0xdb, 0x26, 0x16, 0x67, 0x95, 0xba, 0xf8, 0x79, + 0x0b, 0xce, 0xf7, 0x62, 0x81, 0xce, 0x42, 0x71, 0x8f, 0x74, 0xb8, 0x57, 0x86, 0xe9, 0x4f, 0xf4, + 0x71, 0x28, 0xed, 0x3b, 0x7e, 0x9b, 0x08, 0xef, 0x66, 0xf9, 0x64, 0x2f, 0xa2, 0x34, 0xc3, 0x9c, + 0xeb, 0x8f, 0x17, 0x5e, 0xb3, 0xec, 0xff, 0x50, 0x84, 0x71, 0x63, 0x7e, 0x7b, 0x04, 0x1e, 0x5b, + 0x98, 0xf2, 0xd8, 0xd6, 0x72, 0x9b, 0x9a, 0xfb, 0xba, 0x6c, 0xf7, 0x32, 0x2e, 0xdb, 0x46, 0x7e, + 0x22, 0x1f, 0xe8, 0xb3, 0xa1, 0x04, 0x2a, 0x61, 0x8b, 0x7a, 0xe4, 0x74, 0xea, 0x1f, 0xc9, 0xe3, + 0x13, 0x6e, 0x48, 0x76, 0xd5, 0xc9, 0xa3, 0xc3, 0xd9, 0x8a, 0xfa, 0x8b, 0xb5, 0x20, 0xfb, 0x7b, + 0x16, 0x9c, 0x37, 0x74, 0x5c, 0x0c, 0x83, 0x9a, 0xc7, 0x3e, 0xed, 0x65, 0x18, 0x49, 0x3a, 0x2d, + 0xe9, 0xf6, 0xab, 0x96, 0xda, 0xee, 0xb4, 0x08, 0x66, 0x18, 0xea, 0xe8, 0x37, 0x49, 0x1c, 0x3b, + 0x0d, 0x92, 0x75, 0xf4, 0xd7, 0x38, 0x18, 0x4b, 0x3c, 0x8a, 0x00, 0xf9, 0x4e, 0x9c, 0x6c, 0x47, + 0x4e, 0x10, 0x33, 0xf6, 0xdb, 0x5e, 0x93, 0x88, 0x06, 0xfe, 0x2b, 0x83, 0xf5, 0x18, 0xfa, 0x44, + 0xf5, 0xa9, 0xa3, 0xc3, 0x59, 0xb4, 0xda, 0xc5, 0x09, 0xf7, 0xe0, 0x6e, 0x7f, 0xcd, 0x82, 0xa7, + 0x7a, 0xfb, 0x62, 0xe8, 0xfd, 0x30, 0xca, 0x57, 0x6f, 0xe2, 0xed, 0xf4, 0x27, 0x61, 0x50, 0x2c, + 0xb0, 0x68, 0x1e, 0x2a, 0x6a, 0x9e, 0x10, 0xef, 0x38, 0x2d, 0x48, 0x2b, 0x7a, 0x72, 0xd1, 0x34, + 0xb4, 0xd1, 0xe8, 0x1f, 0xe1, 0xb9, 0xa9, 0x46, 0x63, 0x8b, 0x24, 0x86, 0xb1, 0xff, 0xd8, 0x82, + 0x33, 0x86, 0x56, 0x8f, 0xc0, 0x35, 0x0f, 0xd2, 0xae, 0xf9, 0x4a, 0x6e, 0xfd, 0xb9, 0x8f, 0x6f, + 0x7e, 0x54, 0x60, 0xbe, 0xb9, 0xea, 0xf5, 0xe4, 0x51, 0x2c, 0xec, 0xa2, 0x94, 0x99, 0xd8, 0xcc, + 0x6f, 0xcc, 0x92, 0xfe, 0x8b, 0xbb, 0x77, 0x32, 0x96, 0x02, 0xe7, 0x2a, 0xf5, 0xc1, 0x0b, 0xbc, + 0x3f, 0x2d, 0xc0, 0xd3, 0xe9, 0x07, 0xf4, 0xc8, 0xfd, 0x48, 0x6a, 0xe4, 0x7e, 0xd0, 0x1c, 0xb9, + 0xf7, 0x0f, 0x67, 0x9f, 0xed, 0xf3, 0xd8, 0x0f, 0xcc, 0xc0, 0x46, 0xcb, 0xaa, 0xdd, 0x47, 0x98, + 0x76, 0xf3, 0xe9, 0x36, 0xba, 0x7f, 0x38, 0xfb, 0x7c, 0x9f, 0x77, 0xcc, 0x58, 0xdc, 0xf7, 0xc3, + 0x68, 0x44, 0x9c, 0x38, 0x0c, 0x66, 0x4a, 0x69, 0x33, 0x80, 0x19, 0x14, 0x0b, 0xac, 0xfd, 0xc7, + 0xe5, 0x6c, 0x63, 0x2f, 0xf3, 0xbd, 0x93, 0x30, 0x42, 0x1e, 0x8c, 0x30, 0x6f, 0x8c, 0x77, 0xeb, + 0x9b, 0x27, 0xeb, 0x02, 0x74, 0xf4, 0x2a, 0xd6, 0xd5, 0x32, 0xfd, 0x6a, 0x14, 0x84, 0x99, 0x08, + 0x74, 0x00, 0x65, 0x57, 0x3a, 0x49, 0x85, 0x3c, 0xb6, 0x13, 0x84, 0x8b, 0xa4, 0x25, 0x4e, 0x50, + 0x13, 0xa2, 0x3c, 0x2b, 0x25, 0x0d, 0x11, 0x28, 0x36, 0xbc, 0x44, 0x7c, 0xd6, 0x13, 0xba, 0xc1, + 0xcb, 0x9e, 0xf1, 0x8a, 0x63, 0x47, 0x87, 0xb3, 0xc5, 0x65, 0x2f, 0xc1, 0x94, 0x3f, 0xfa, 0x15, + 0x0b, 0xc6, 0x63, 0xb7, 0xb9, 0x19, 0x85, 0xfb, 0x5e, 0x8d, 0x44, 0x62, 0x12, 0x3c, 0xe1, 0xb0, + 0xda, 0x5a, 0x5c, 0x93, 0x0c, 0xb5, 0x5c, 0xbe, 0x2c, 0xd1, 0x18, 0x6c, 0xca, 0xa5, 0xce, 0xe1, + 0xd3, 0xe2, 0xdd, 0x97, 0x88, 0xeb, 0xc5, 0x74, 0xca, 0x14, 0xbe, 0x30, 0xeb, 0x29, 0x27, 0x76, + 0x0a, 0x96, 0xda, 0xee, 0x1e, 0x1d, 0x6f, 0x5a, 0xa1, 0x67, 0x8f, 0x0e, 0x67, 0x9f, 0x5e, 0xec, + 0x2d, 0x13, 0xf7, 0x53, 0x86, 0x35, 0x58, 0xab, 0xed, 0xfb, 0x98, 0xbc, 0xdd, 0x26, 0x6c, 0xa5, + 0x9b, 0x43, 0x83, 0x6d, 0x6a, 0x86, 0x99, 0x06, 0x33, 0x30, 0xd8, 0x94, 0x8b, 0xde, 0x86, 0xd1, + 0xa6, 0x93, 0x44, 0xde, 0x81, 0x58, 0xde, 0x9e, 0xd0, 0x4d, 0x5b, 0x63, 0xbc, 0xb4, 0x70, 0xa0, + 0x63, 0x92, 0x03, 0xb1, 0x10, 0x84, 0x9a, 0x50, 0x6a, 0x92, 0xa8, 0x41, 0x66, 0xca, 0x79, 0x6c, + 0xe5, 0xad, 0x51, 0x56, 0x5a, 0x60, 0x85, 0x4e, 0x6a, 0x0c, 0x86, 0xb9, 0x14, 0xf4, 0x71, 0x28, + 0xc7, 0xc4, 0x27, 0x6e, 0x12, 0x46, 0x33, 0x15, 0x26, 0xf1, 0xc7, 0x06, 0x9c, 0xa2, 0x9d, 0x1d, + 0xe2, 0x6f, 0x89, 0x47, 0xf9, 0x00, 0x93, 0xff, 0xb0, 0x62, 0x69, 0xff, 0x77, 0x0b, 0x50, 0xda, + 0xc2, 0x3c, 0x02, 0xc7, 0xe0, 0xed, 0xb4, 0x63, 0xb0, 0x9a, 0xe7, 0xf4, 0xd5, 0xc7, 0x37, 0xf8, + 0x4e, 0x19, 0x32, 0xb6, 0x79, 0x9d, 0xc4, 0x09, 0xa9, 0xbd, 0x67, 0x4f, 0xdf, 0xb3, 0xa7, 0xef, + 0xd9, 0x53, 0x65, 0x4f, 0x77, 0x32, 0xf6, 0xf4, 0x0d, 0x63, 0xd4, 0xeb, 0x33, 0xa6, 0x4f, 0xaa, + 0x43, 0x28, 0x53, 0x03, 0x83, 0x80, 0x5a, 0x82, 0x1b, 0x5b, 0x1b, 0xeb, 0x3d, 0x0d, 0xe8, 0x27, + 0xd3, 0x06, 0xf4, 0xa4, 0x22, 0x1e, 0xb9, 0xc9, 0x3c, 0x2a, 0x66, 0x4d, 0x26, 0x3b, 0x06, 0xb8, + 0x02, 0xd0, 0x08, 0xb7, 0x49, 0xb3, 0xe5, 0x3b, 0x09, 0x77, 0x81, 0xcb, 0x7a, 0xe9, 0xb0, 0xac, + 0x30, 0xd8, 0xa0, 0x42, 0x7f, 0xd3, 0x02, 0x68, 0xc8, 0x4f, 0x23, 0xcd, 0xe1, 0xad, 0x3c, 0xcd, + 0xa1, 0xfe, 0xf0, 0x5a, 0x17, 0x25, 0x10, 0x1b, 0xc2, 0xd1, 0x67, 0x2d, 0x28, 0x27, 0x52, 0x7d, + 0x6e, 0x20, 0xb6, 0xf3, 0xd4, 0x44, 0xbe, 0xb4, 0x9e, 0x19, 0x54, 0x93, 0x28, 0xb9, 0xe8, 0x6f, + 0x58, 0x00, 0x71, 0x27, 0x70, 0x37, 0x43, 0xdf, 0x73, 0x3b, 0xc2, 0x6e, 0xdc, 0xce, 0x75, 0x79, + 0xa3, 0xb8, 0x57, 0xa7, 0x68, 0x6b, 0xe8, 0xff, 0xd8, 0x90, 0x6c, 0x7f, 0x33, 0xbd, 0x3b, 0xa1, + 0xd6, 0x45, 0xec, 0x93, 0xb9, 0xd2, 0xad, 0x8f, 0xc5, 0xd6, 0x5d, 0xae, 0x9f, 0x4c, 0x2d, 0x1a, + 0xf4, 0x27, 0x53, 0xa0, 0x18, 0x1b, 0xc2, 0xed, 0xcf, 0x58, 0x30, 0xd3, 0xef, 0xed, 0x10, 0x81, + 0x67, 0x5b, 0x11, 0x61, 0x63, 0x48, 0x6d, 0xba, 0x6f, 0x04, 0x4b, 0xc4, 0x27, 0x6c, 0x9f, 0x87, + 0x77, 0xd0, 0x17, 0x84, 0x84, 0x67, 0x37, 0xfb, 0x93, 0xe2, 0x07, 0xf1, 0xb1, 0x7f, 0xb3, 0x90, + 0xda, 0xec, 0x30, 0x3e, 0x34, 0xfa, 0xba, 0xd5, 0xe5, 0x45, 0xfc, 0xf4, 0x69, 0xf4, 0x28, 0xe6, + 0x6f, 0xa8, 0xbd, 0xf7, 0xfe, 0x34, 0x8f, 0x71, 0x73, 0xcf, 0xfe, 0xf7, 0x23, 0xf0, 0x00, 0xcd, + 0xd4, 0xf6, 0x8d, 0xd5, 0x6f, 0xfb, 0x66, 0xf8, 0x1d, 0xa1, 0x2f, 0x58, 0x30, 0xea, 0x53, 0x83, + 0x16, 0xcf, 0x14, 0x59, 0x27, 0xad, 0x9d, 0x56, 0xdb, 0x73, 0xbb, 0x19, 0xf3, 0x0d, 0x66, 0xb5, + 0x94, 0xe5, 0x40, 0x2c, 0x74, 0x40, 0xdf, 0xb0, 0x60, 0xdc, 0x09, 0x82, 0x30, 0x11, 0x27, 0x9e, + 0xfc, 0xc4, 0xd0, 0x3b, 0x35, 0x9d, 0x16, 0xb4, 0x2c, 0xae, 0x98, 0x3a, 0xcd, 0x34, 0x30, 0xd8, + 0x54, 0x09, 0xcd, 0x01, 0xd4, 0xbd, 0xc0, 0xf1, 0xbd, 0x77, 0xa8, 0x63, 0x56, 0x62, 0xc7, 0x0b, + 0xcc, 0x46, 0x5c, 0x53, 0x50, 0x6c, 0x50, 0x5c, 0xfc, 0xeb, 0x30, 0x6e, 0xbc, 0x79, 0x8f, 0x7d, + 0xf1, 0xf3, 0xe6, 0xbe, 0x78, 0xc5, 0xd8, 0xce, 0xbe, 0xf8, 0x06, 0x9c, 0xcd, 0x2a, 0x38, 0xcc, + 0xf3, 0xf6, 0x6f, 0x8d, 0xc2, 0x6c, 0xf6, 0xe5, 0xa3, 0x26, 0x55, 0xed, 0x3d, 0x87, 0xf6, 0x3d, + 0x87, 0xf6, 0x3d, 0x87, 0x56, 0xfe, 0xb1, 0xbf, 0x5d, 0x82, 0x69, 0x73, 0xa0, 0x70, 0xed, 0x7e, + 0x14, 0xc6, 0x22, 0xd2, 0x0a, 0x6f, 0xe1, 0x55, 0x61, 0x71, 0x75, 0xa4, 0x10, 0x07, 0x63, 0x89, + 0xa7, 0x96, 0xb9, 0xe5, 0x24, 0xbb, 0xc2, 0xe4, 0x2a, 0xcb, 0xbc, 0xe9, 0x24, 0xbb, 0x98, 0x61, + 0xd0, 0x1b, 0x30, 0x95, 0x38, 0x51, 0x83, 0x24, 0x98, 0xec, 0xb3, 0x46, 0x10, 0xbb, 0x83, 0x4f, + 0x09, 0xda, 0xa9, 0xed, 0x14, 0x16, 0x67, 0xa8, 0xd1, 0xdb, 0x30, 0xb2, 0x4b, 0xfc, 0xa6, 0xf0, + 0xb8, 0xb7, 0xf2, 0xb3, 0x88, 0xec, 0x5d, 0xaf, 0x13, 0xbf, 0xc9, 0xc7, 0x2b, 0xfd, 0x85, 0x99, + 0x28, 0xfa, 0x75, 0x2a, 0x7b, 0xed, 0x38, 0x09, 0x9b, 0xde, 0x3b, 0xd2, 0x0f, 0xff, 0xe9, 0x9c, + 0x05, 0xdf, 0x94, 0xfc, 0xf9, 0x19, 0x90, 0xfa, 0x8b, 0xb5, 0x64, 0xa6, 0x47, 0xcd, 0x8b, 0x98, + 0x5f, 0xdd, 0x99, 0x81, 0x53, 0xd1, 0x63, 0x49, 0xf2, 0xe7, 0x7a, 0xa8, 0xbf, 0x58, 0x4b, 0x46, + 0x1d, 0x18, 0x6d, 0xf9, 0xed, 0x86, 0x17, 0xcc, 0x8c, 0x33, 0x1d, 0x6e, 0xe5, 0xac, 0xc3, 0x26, + 0x63, 0xce, 0x57, 0x43, 0xfc, 0x37, 0x16, 0x02, 0xd1, 0x0b, 0x50, 0x72, 0x77, 0x9d, 0x28, 0x99, + 0x99, 0x60, 0x9d, 0x46, 0xed, 0x5e, 0x2c, 0x52, 0x20, 0xe6, 0x38, 0xfb, 0x1f, 0x14, 0xd2, 0xde, + 0x43, 0xfa, 0xc5, 0x78, 0x77, 0x76, 0xdb, 0x51, 0x2c, 0xd7, 0x1d, 0x46, 0x77, 0x66, 0x60, 0x2c, + 0xf1, 0xe8, 0x33, 0x16, 0x8c, 0xdd, 0x8d, 0xc3, 0x20, 0x20, 0x89, 0xb0, 0xd4, 0xb7, 0x73, 0x7e, + 0xd7, 0x1b, 0x9c, 0xbb, 0xd6, 0x41, 0x00, 0xb0, 0x94, 0x4b, 0xd5, 0x25, 0x07, 0xae, 0xdf, 0xae, + 0xc9, 0xe3, 0x2a, 0x45, 0x7a, 0x95, 0x83, 0xb1, 0xc4, 0x53, 0x52, 0x2f, 0xe0, 0xa4, 0x23, 0x69, + 0xd2, 0x95, 0x40, 0x90, 0x0a, 0xbc, 0xfd, 0x3b, 0x25, 0xb8, 0xd0, 0xb3, 0xf7, 0xd3, 0x79, 0x9d, + 0xcd, 0x9c, 0xd7, 0x3c, 0x9f, 0xc8, 0xf8, 0x2c, 0x36, 0xaf, 0xdf, 0x56, 0x50, 0x6c, 0x50, 0xa0, + 0x5f, 0x04, 0x68, 0x39, 0x91, 0xd3, 0x24, 0x62, 0x3e, 0x2b, 0x9e, 0x7c, 0xfa, 0xa4, 0x7a, 0x6c, + 0x4a, 0x9e, 0xda, 0xaf, 0x57, 0xa0, 0x18, 0x1b, 0x22, 0xd1, 0x87, 0x60, 0x3c, 0x22, 0x3e, 0x71, + 0x62, 0x16, 0xc0, 0x90, 0x8d, 0xc6, 0xc2, 0x1a, 0x85, 0x4d, 0x3a, 0xf4, 0x7e, 0x18, 0x65, 0x6f, + 0x21, 0x8f, 0x27, 0x94, 0x2b, 0xc6, 0xde, 0x33, 0xc6, 0x02, 0x8b, 0xbe, 0x6c, 0xc1, 0x54, 0xdd, + 0xf3, 0x89, 0x96, 0x2e, 0x62, 0xa7, 0x36, 0x4e, 0xfe, 0x92, 0xd7, 0x4c, 0xbe, 0xda, 0x04, 0xa6, + 0xc0, 0x31, 0xce, 0x88, 0xa7, 0x9f, 0x79, 0x9f, 0x44, 0xcc, 0x76, 0x8e, 0xa6, 0x3f, 0xf3, 0x6d, + 0x0e, 0xc6, 0x12, 0x8f, 0x16, 0xe0, 0x4c, 0xcb, 0x89, 0xe3, 0xc5, 0x88, 0xd4, 0x48, 0x90, 0x78, + 0x8e, 0xcf, 0x23, 0x9b, 0xca, 0x3a, 0xb2, 0x61, 0x33, 0x8d, 0xc6, 0x59, 0x7a, 0xf4, 0x51, 0x78, + 0xda, 0x6b, 0x04, 0x61, 0x44, 0xd6, 0xbc, 0x38, 0xf6, 0x82, 0x86, 0xee, 0x06, 0xcc, 0x14, 0x96, + 0xab, 0xb3, 0x82, 0xd5, 0xd3, 0x2b, 0xbd, 0xc9, 0x70, 0xbf, 0xe7, 0xd1, 0x4b, 0x50, 0x8e, 0xf7, + 0xbc, 0xd6, 0x62, 0x54, 0x8b, 0xd9, 0xd6, 0x43, 0x59, 0xaf, 0x76, 0xb7, 0x04, 0x1c, 0x2b, 0x0a, + 0xfb, 0xd7, 0x0a, 0xe9, 0xf5, 0x9b, 0x39, 0x7e, 0x50, 0x4c, 0x47, 0x49, 0x72, 0xdb, 0x89, 0xe4, + 0x22, 0xf3, 0x84, 0xb1, 0x51, 0x82, 0xef, 0x6d, 0x27, 0x32, 0xc7, 0x1b, 0x13, 0x80, 0xa5, 0x24, + 0x74, 0x17, 0x46, 0x12, 0xdf, 0xc9, 0x29, 0x98, 0xd2, 0x90, 0xa8, 0x4f, 0xf1, 0x57, 0x17, 0x62, + 0xcc, 0x64, 0xa0, 0xe7, 0xa8, 0x7f, 0xba, 0xc3, 0x57, 0x27, 0x15, 0xe9, 0x52, 0xee, 0xc4, 0x98, + 0x41, 0xed, 0xff, 0x3d, 0xda, 0xc3, 0xe4, 0xa9, 0x49, 0x04, 0x5d, 0x01, 0xa0, 0x4b, 0x9d, 0xcd, + 0x88, 0xd4, 0xbd, 0x03, 0x31, 0x89, 0xab, 0x61, 0xb5, 0xae, 0x30, 0xd8, 0xa0, 0x92, 0xcf, 0x6c, + 0xb5, 0xeb, 0xf4, 0x99, 0x42, 0xf7, 0x33, 0x1c, 0x83, 0x0d, 0x2a, 0xf4, 0x2a, 0x8c, 0x7a, 0x4d, + 0xa7, 0x41, 0xa4, 0x9a, 0xcf, 0xd1, 0xf1, 0xb4, 0xc2, 0x20, 0xf7, 0x0f, 0x67, 0xa7, 0x94, 0x42, + 0x0c, 0x84, 0x05, 0x2d, 0xfa, 0x4d, 0x0b, 0x26, 0xdc, 0xb0, 0xd9, 0x0c, 0x03, 0xbe, 0x40, 0x10, + 0xab, 0x9d, 0xbb, 0xa7, 0x35, 0xc5, 0xce, 0x2d, 0x1a, 0xc2, 0xf8, 0x72, 0x47, 0x45, 0x7d, 0x9a, + 0x28, 0x9c, 0xd2, 0xca, 0x1c, 0x76, 0xa5, 0x63, 0x86, 0xdd, 0x3f, 0xb7, 0x60, 0x9a, 0x3f, 0x6b, + 0xac, 0x5b, 0x44, 0x80, 0x63, 0x78, 0xca, 0xaf, 0xd5, 0xb5, 0x94, 0x7b, 0x46, 0xa8, 0x39, 0xdd, + 0x85, 0xc7, 0xdd, 0x4a, 0xa2, 0x65, 0x98, 0xae, 0x87, 0x91, 0x4b, 0xcc, 0x86, 0x10, 0x36, 0x43, + 0x31, 0xba, 0x96, 0x25, 0xc0, 0xdd, 0xcf, 0xa0, 0xdb, 0xf0, 0x94, 0x01, 0x34, 0xdb, 0x81, 0x9b, + 0x8d, 0x4b, 0x82, 0xdb, 0x53, 0xd7, 0x7a, 0x52, 0xe1, 0x3e, 0x4f, 0x5f, 0xfc, 0x08, 0x4c, 0x77, + 0x7d, 0xbf, 0xa1, 0x56, 0x93, 0x4b, 0xf0, 0x54, 0xef, 0x96, 0x1a, 0x6a, 0x4d, 0xf9, 0xeb, 0x56, + 0xfa, 0xb0, 0xd9, 0xf0, 0x5c, 0x06, 0xd8, 0x9f, 0x70, 0xa0, 0x48, 0x82, 0x7d, 0x61, 0x38, 0xae, + 0x9d, 0xac, 0x47, 0x5c, 0x0d, 0xf6, 0xf9, 0x87, 0x66, 0x8b, 0xb0, 0xab, 0xc1, 0x3e, 0xa6, 0xbc, + 0xed, 0xbf, 0x33, 0x9a, 0x8a, 0x60, 0xd9, 0x92, 0x41, 0x53, 0x7c, 0xf9, 0x63, 0xe5, 0x1d, 0x34, + 0xc5, 0x43, 0x10, 0x75, 0x1c, 0x04, 0x5f, 0xf1, 0x08, 0x71, 0xe8, 0xf3, 0x16, 0x0b, 0x99, 0x96, + 0x91, 0x3d, 0xc2, 0x99, 0x3a, 0x9d, 0x08, 0x6e, 0x33, 0x10, 0x5b, 0x02, 0xb1, 0x29, 0x9d, 0x8e, + 0xe4, 0x16, 0x0f, 0xfe, 0xcb, 0xba, 0x54, 0x32, 0xa8, 0x5a, 0xe2, 0xd1, 0x41, 0x8f, 0x1d, 0xd6, + 0x1c, 0xc2, 0x6e, 0x8f, 0xdf, 0x53, 0x45, 0xdf, 0xb0, 0x60, 0x9a, 0x4f, 0x9c, 0x4b, 0x5e, 0xbd, + 0x4e, 0x22, 0x12, 0xb8, 0x44, 0xba, 0x1e, 0x77, 0x4e, 0xa6, 0x81, 0x5c, 0x77, 0xae, 0x64, 0xd9, + 0xeb, 0x21, 0xde, 0x85, 0xc2, 0xdd, 0xca, 0xa0, 0x1a, 0x8c, 0x78, 0x41, 0x3d, 0x14, 0x86, 0xad, + 0x7a, 0x32, 0xa5, 0x56, 0x82, 0x7a, 0xa8, 0xc7, 0x0a, 0xfd, 0x87, 0x19, 0x77, 0xb4, 0x0a, 0xe7, + 0x23, 0xb1, 0xfa, 0xbb, 0xee, 0xc5, 0xd4, 0x85, 0x5f, 0xf5, 0x9a, 0x5e, 0xc2, 0x8c, 0x52, 0xb1, + 0x3a, 0x73, 0x74, 0x38, 0x7b, 0x1e, 0xf7, 0xc0, 0xe3, 0x9e, 0x4f, 0xd9, 0x7f, 0x51, 0x49, 0x2f, + 0x71, 0xf9, 0x3e, 0xf5, 0xcf, 0x43, 0x25, 0x52, 0xb1, 0xdf, 0x56, 0x1e, 0xe7, 0xac, 0xb2, 0x8d, + 0x45, 0x80, 0x90, 0xda, 0x7d, 0xd4, 0x51, 0xde, 0x5a, 0x22, 0x75, 0x24, 0xe8, 0x97, 0x17, 0xc3, + 0x22, 0x87, 0xfe, 0x25, 0xa4, 0xea, 0xbd, 0xd5, 0x4e, 0xe0, 0x62, 0x26, 0x03, 0x45, 0x30, 0xba, + 0x4b, 0x1c, 0x3f, 0xd9, 0xcd, 0x67, 0x1b, 0xe8, 0x3a, 0xe3, 0x95, 0x0d, 0x83, 0xe2, 0x50, 0x2c, + 0x24, 0xa1, 0x03, 0x18, 0xdb, 0xe5, 0x1f, 0x41, 0xcc, 0xed, 0x6b, 0x27, 0x6d, 0xdc, 0xd4, 0x97, + 0xd5, 0xe3, 0x57, 0x00, 0xb0, 0x14, 0xc7, 0x8e, 0x48, 0x8c, 0x03, 0x08, 0x3e, 0x7c, 0xf2, 0x8b, + 0x00, 0x1b, 0xf8, 0xf4, 0x01, 0x7d, 0x0a, 0x26, 0x22, 0xe2, 0x86, 0x81, 0xeb, 0xf9, 0xa4, 0xb6, + 0x20, 0xb7, 0x78, 0x86, 0x89, 0xbd, 0x3a, 0x4b, 0xfd, 0x13, 0x6c, 0xf0, 0xc0, 0x29, 0x8e, 0xe8, + 0x73, 0x16, 0x4c, 0xa9, 0x80, 0x51, 0xfa, 0x41, 0x88, 0xd8, 0x24, 0x59, 0xcd, 0x29, 0x3c, 0x95, + 0xf1, 0xac, 0x22, 0xba, 0x42, 0x49, 0xc3, 0x70, 0x46, 0x2e, 0x7a, 0x0b, 0x20, 0xdc, 0x61, 0x87, + 0x20, 0xf4, 0x55, 0xcb, 0x43, 0xbf, 0xea, 0x14, 0x0f, 0x20, 0x94, 0x1c, 0xb0, 0xc1, 0x0d, 0xdd, + 0x04, 0xe0, 0xc3, 0x66, 0xbb, 0xd3, 0x22, 0x6c, 0xd9, 0xa0, 0x83, 0xe7, 0x60, 0x4b, 0x61, 0xee, + 0x1f, 0xce, 0x76, 0x2f, 0x70, 0x59, 0xf0, 0x9c, 0xf1, 0x38, 0xfa, 0x59, 0x18, 0x8b, 0xdb, 0xcd, + 0xa6, 0xa3, 0xf6, 0x53, 0x72, 0x0c, 0x49, 0xe4, 0x7c, 0x75, 0xdf, 0x14, 0x00, 0x2c, 0x25, 0xa2, + 0xbb, 0xd4, 0xb0, 0xc5, 0x62, 0xe5, 0xcd, 0x46, 0x11, 0x9f, 0x9b, 0xc7, 0xd9, 0x3b, 0x7d, 0x58, + 0x3c, 0x77, 0x1e, 0xf7, 0xa0, 0xb9, 0x7f, 0x38, 0xfb, 0x54, 0x1a, 0xbe, 0x1a, 0x72, 0xb1, 0xb8, + 0x27, 0x4f, 0x3b, 0x48, 0x9f, 0xc2, 0x0a, 0x0d, 0x5e, 0x85, 0x09, 0x72, 0x90, 0x90, 0x28, 0x70, + 0xfc, 0x5b, 0x78, 0x55, 0xae, 0xf6, 0x59, 0x47, 0xbb, 0x6a, 0xc0, 0x71, 0x8a, 0x0a, 0xd9, 0xca, + 0xcb, 0x2f, 0x30, 0x7a, 0xd0, 0x5e, 0xbe, 0xf4, 0xe9, 0xed, 0xff, 0x57, 0x48, 0x79, 0x1f, 0xdb, + 0x11, 0x21, 0x28, 0x84, 0x52, 0x10, 0xd6, 0x94, 0x81, 0xbd, 0x91, 0x8f, 0x81, 0x5d, 0x0f, 0x6b, + 0x46, 0x02, 0x14, 0xfd, 0x17, 0x63, 0x2e, 0x87, 0x65, 0x88, 0xc8, 0x54, 0x1a, 0x86, 0x10, 0x0e, + 0x57, 0x9e, 0x92, 0x55, 0x86, 0xc8, 0x86, 0x29, 0x08, 0xa7, 0xe5, 0xa2, 0x3d, 0x28, 0xed, 0x86, + 0x71, 0x22, 0x0f, 0x97, 0x4e, 0xe8, 0xf1, 0x5d, 0x0f, 0xe3, 0x84, 0x4d, 0x97, 0xea, 0xb5, 0x29, + 0x24, 0xc6, 0x5c, 0x86, 0xfd, 0x27, 0x56, 0x6a, 0x6f, 0xe7, 0x8e, 0x93, 0xb8, 0xbb, 0x57, 0xf7, + 0x49, 0x40, 0xc7, 0x8e, 0x19, 0x72, 0xfa, 0xd7, 0x32, 0x21, 0xa7, 0x1f, 0xe8, 0x97, 0x91, 0x7a, + 0x8f, 0x72, 0x98, 0x63, 0x2c, 0x8c, 0xf0, 0xd3, 0x4f, 0x5b, 0x30, 0x6e, 0xa8, 0x27, 0x26, 0xaf, + 0x1c, 0xe3, 0x96, 0xf5, 0x19, 0x94, 0x06, 0x62, 0x53, 0xa4, 0xfd, 0x55, 0x0b, 0xc6, 0xaa, 0x8e, + 0xbb, 0x17, 0xd6, 0xeb, 0xe8, 0x25, 0x28, 0xd7, 0xda, 0x22, 0x2c, 0x9f, 0xbf, 0x9f, 0xda, 0x4c, + 0x58, 0x12, 0x70, 0xac, 0x28, 0x68, 0x1f, 0xae, 0x3b, 0x2c, 0xe6, 0xa1, 0xc0, 0xdc, 0x08, 0xd6, + 0x87, 0xaf, 0x31, 0x08, 0x16, 0x18, 0xf4, 0x21, 0x18, 0x6f, 0x3a, 0x07, 0xf2, 0xe1, 0xec, 0xc6, + 0xd2, 0x9a, 0x46, 0x61, 0x93, 0xce, 0xfe, 0x37, 0x16, 0xcc, 0x54, 0x9d, 0xd8, 0x73, 0x17, 0xda, + 0xc9, 0x6e, 0xd5, 0x4b, 0x76, 0xda, 0xee, 0x1e, 0x49, 0x78, 0xc8, 0x3a, 0xd5, 0xb2, 0x1d, 0xd3, + 0xa1, 0xa4, 0x96, 0x07, 0x4a, 0xcb, 0x5b, 0x02, 0x8e, 0x15, 0x05, 0x7a, 0x07, 0xc6, 0x5b, 0x4e, + 0x1c, 0xdf, 0x0b, 0xa3, 0x1a, 0x26, 0xf5, 0x7c, 0x12, 0x46, 0xb6, 0x88, 0x1b, 0x91, 0x04, 0x93, + 0xba, 0x38, 0x0b, 0xd0, 0xfc, 0xb1, 0x29, 0xcc, 0xfe, 0xdd, 0x0a, 0x8c, 0x89, 0x83, 0x8c, 0x81, + 0x03, 0xf1, 0xe5, 0xc2, 0xa7, 0xd0, 0x77, 0xe1, 0x13, 0xc3, 0xa8, 0xcb, 0xd2, 0x96, 0x85, 0xf7, + 0x71, 0x33, 0x97, 0x93, 0x2f, 0x9e, 0x09, 0xad, 0xd5, 0xe2, 0xff, 0xb1, 0x10, 0x85, 0xbe, 0x62, + 0xc1, 0x19, 0x37, 0x0c, 0x02, 0xe2, 0xea, 0xa9, 0x71, 0x24, 0x8f, 0xb3, 0xec, 0xc5, 0x34, 0x53, + 0xbd, 0xab, 0x96, 0x41, 0xe0, 0xac, 0x78, 0xf4, 0x3a, 0x4c, 0xf2, 0x36, 0xbb, 0x9d, 0xda, 0x52, + 0xd0, 0xf9, 0x66, 0x26, 0x12, 0xa7, 0x69, 0xd1, 0x1c, 0xdf, 0x9a, 0x11, 0x99, 0x5d, 0xa3, 0x7a, + 0x8b, 0xd6, 0xc8, 0xe9, 0x32, 0x28, 0x50, 0x04, 0x28, 0x22, 0xf5, 0x88, 0xc4, 0xbb, 0xe2, 0xa0, + 0x87, 0x4d, 0xcb, 0x63, 0x0f, 0x17, 0xfd, 0x8d, 0xbb, 0x38, 0xe1, 0x1e, 0xdc, 0xd1, 0x9e, 0x58, + 0x1b, 0x94, 0xf3, 0xb0, 0x0a, 0xe2, 0x33, 0xf7, 0x5d, 0x22, 0xcc, 0x42, 0x29, 0xde, 0x75, 0xa2, + 0x1a, 0x73, 0x07, 0x8a, 0x3c, 0xc8, 0x69, 0x8b, 0x02, 0x30, 0x87, 0xa3, 0x25, 0x38, 0x9b, 0xc9, + 0x96, 0x8b, 0xd9, 0x84, 0x5f, 0xae, 0xce, 0x08, 0x76, 0x67, 0x33, 0x79, 0x76, 0x31, 0xee, 0x7a, + 0xc2, 0x5c, 0x37, 0x8e, 0x1f, 0xb3, 0x6e, 0xec, 0xa8, 0x70, 0x82, 0x09, 0x66, 0xf1, 0xdf, 0xcc, + 0xa5, 0x01, 0x06, 0x8a, 0x1d, 0xf8, 0x62, 0x26, 0x76, 0x60, 0x92, 0x29, 0x70, 0x3b, 0x1f, 0x05, + 0x86, 0x0f, 0x14, 0x78, 0x9c, 0x07, 0xff, 0x7f, 0x61, 0x81, 0xfc, 0xae, 0x8b, 0x8e, 0xbb, 0x4b, + 0x68, 0x97, 0x41, 0x6f, 0xc0, 0x94, 0x5a, 0x79, 0x2d, 0x86, 0xed, 0x80, 0x9f, 0xf9, 0x17, 0xf5, + 0xf6, 0x3b, 0x4e, 0x61, 0x71, 0x86, 0x1a, 0xcd, 0x43, 0x85, 0xb6, 0x13, 0x7f, 0x94, 0xcf, 0x1e, + 0x6a, 0x75, 0xb7, 0xb0, 0xb9, 0x22, 0x9e, 0xd2, 0x34, 0x28, 0x84, 0x69, 0xdf, 0x89, 0x13, 0xa6, + 0x01, 0x5d, 0x88, 0x3d, 0x64, 0xee, 0x05, 0x4b, 0x16, 0x5e, 0xcd, 0x32, 0xc2, 0xdd, 0xbc, 0xed, + 0xef, 0x8d, 0xc0, 0x64, 0xca, 0x32, 0x0e, 0x39, 0xed, 0xbc, 0x04, 0x65, 0x39, 0x13, 0x08, 0x53, + 0xae, 0xa8, 0xd5, 0x74, 0xa1, 0x28, 0xe8, 0x34, 0xb9, 0x43, 0x9c, 0x88, 0x44, 0x2c, 0x0f, 0x31, + 0x3b, 0x4d, 0x56, 0x35, 0x0a, 0x9b, 0x74, 0xcc, 0x28, 0x27, 0x7e, 0xbc, 0xe8, 0x7b, 0x24, 0x48, + 0xb8, 0x9a, 0xf9, 0x18, 0xe5, 0xed, 0xd5, 0x2d, 0x93, 0xa9, 0x36, 0xca, 0x19, 0x04, 0xce, 0x8a, + 0x47, 0xbf, 0x6c, 0xc1, 0xa4, 0x73, 0x2f, 0xd6, 0xb5, 0x35, 0x44, 0x94, 0xc0, 0x09, 0x27, 0xa9, + 0x54, 0xb9, 0x8e, 0xea, 0x34, 0x35, 0xef, 0x29, 0x10, 0x4e, 0x0b, 0x45, 0x5f, 0xb7, 0x00, 0x91, + 0x03, 0xe2, 0xca, 0x38, 0x06, 0xa1, 0xcb, 0x68, 0x1e, 0x0b, 0x94, 0xab, 0x5d, 0x7c, 0xb9, 0x55, + 0xef, 0x86, 0xe3, 0x1e, 0x3a, 0xd8, 0xff, 0xb2, 0xa8, 0x06, 0x94, 0x0e, 0x9d, 0x71, 0x8c, 0x08, + 0x52, 0xeb, 0xe1, 0x23, 0x48, 0xf5, 0xd9, 0x4f, 0x57, 0x14, 0x69, 0x3a, 0xdc, 0xb2, 0xf0, 0x98, + 0xc2, 0x2d, 0x3f, 0x6b, 0xa9, 0x23, 0x43, 0xee, 0xc6, 0xbf, 0x95, 0x6f, 0xd8, 0xce, 0x1c, 0x3f, + 0x79, 0xcc, 0x58, 0xf7, 0xf4, 0x71, 0x24, 0xb5, 0xa6, 0x06, 0xd9, 0x50, 0xd6, 0xf0, 0x3f, 0x17, + 0x61, 0xdc, 0x98, 0x49, 0x7b, 0xba, 0x45, 0xd6, 0x13, 0xe6, 0x16, 0x15, 0x86, 0x70, 0x8b, 0x7e, + 0x11, 0x2a, 0xae, 0xb4, 0xf2, 0xf9, 0x14, 0x72, 0xc9, 0xce, 0x1d, 0xda, 0xd0, 0x2b, 0x10, 0xd6, + 0x32, 0xd1, 0x32, 0x4c, 0x1b, 0x6c, 0xc4, 0x0c, 0x31, 0xc2, 0x66, 0x08, 0xb5, 0xb1, 0xba, 0x90, + 0x25, 0xc0, 0xdd, 0xcf, 0xa0, 0x57, 0xe8, 0xca, 0xca, 0x13, 0xef, 0x25, 0x83, 0xeb, 0x98, 0xbb, + 0xbe, 0xb0, 0xb9, 0x22, 0xc1, 0xd8, 0xa4, 0xb1, 0xbf, 0x67, 0xa9, 0x8f, 0xfb, 0x08, 0x72, 0x52, + 0xee, 0xa6, 0x73, 0x52, 0xae, 0xe6, 0xd2, 0xcc, 0x7d, 0x92, 0x51, 0xd6, 0x61, 0x6c, 0x31, 0x6c, + 0x36, 0x9d, 0xa0, 0x86, 0x7e, 0x04, 0xc6, 0x5c, 0xfe, 0x53, 0x6c, 0x55, 0x8c, 0x53, 0xe7, 0x4b, + 0x60, 0xb1, 0xc4, 0xa1, 0xe7, 0x60, 0xc4, 0x89, 0x1a, 0x72, 0x7b, 0x82, 0x9d, 0x95, 0x2e, 0x44, + 0x8d, 0x18, 0x33, 0xa8, 0xfd, 0xb5, 0x02, 0xc0, 0x62, 0xd8, 0x6c, 0x39, 0x11, 0xa9, 0x6d, 0x87, + 0xef, 0x9d, 0x89, 0xf0, 0x55, 0xeb, 0x17, 0x2c, 0x40, 0xb4, 0x55, 0xc2, 0x80, 0x04, 0x89, 0x0a, + 0x36, 0xa0, 0xce, 0x8e, 0x2b, 0xa1, 0xc2, 0x73, 0xd0, 0x63, 0x40, 0x22, 0xb0, 0xa6, 0x19, 0x60, + 0x09, 0xf8, 0x82, 0x34, 0x50, 0xc5, 0x74, 0x0c, 0x0f, 0x33, 0x6b, 0xc2, 0x5e, 0xd9, 0xbf, 0x57, + 0x80, 0xa7, 0xf8, 0x9c, 0xb3, 0xe6, 0x04, 0x4e, 0x83, 0x34, 0xa9, 0x56, 0x83, 0x9e, 0xae, 0xb9, + 0x74, 0xed, 0xe1, 0xc9, 0x90, 0x9d, 0x93, 0x76, 0x4e, 0xde, 0xa9, 0x78, 0x37, 0x5a, 0x09, 0xbc, + 0x04, 0x33, 0xe6, 0x28, 0x86, 0xb2, 0x2c, 0xcd, 0x25, 0x8c, 0x4d, 0x4e, 0x82, 0xd4, 0xb8, 0x13, + 0x13, 0x03, 0xc1, 0x4a, 0x10, 0xf5, 0xcc, 0xfc, 0xd0, 0xdd, 0xc3, 0xa4, 0x15, 0x32, 0xc3, 0x62, + 0x44, 0x4c, 0xac, 0x0a, 0x38, 0x56, 0x14, 0xf6, 0xef, 0x59, 0x90, 0x35, 0xb9, 0x6c, 0x29, 0xcf, + 0xb3, 0x72, 0xb3, 0x4b, 0xf9, 0x74, 0xd2, 0xed, 0x10, 0xc9, 0xc5, 0x3f, 0x03, 0xe3, 0x4e, 0x42, + 0x67, 0x49, 0xbe, 0xae, 0x2c, 0x3e, 0xdc, 0x76, 0xef, 0x5a, 0x58, 0xf3, 0xea, 0x1e, 0x5b, 0x4f, + 0x9a, 0xec, 0xec, 0x3f, 0x1f, 0x81, 0xe9, 0xae, 0x38, 0x4b, 0xf4, 0x1a, 0x4c, 0xb8, 0xa2, 0x7b, + 0xb4, 0x30, 0xa9, 0x8b, 0x97, 0x31, 0x8e, 0xf1, 0x35, 0x0e, 0xa7, 0x28, 0x07, 0xe8, 0xa0, 0x2b, + 0x70, 0x2e, 0xa2, 0x2b, 0xd9, 0x36, 0x59, 0xa8, 0x27, 0x24, 0xda, 0x22, 0x6e, 0x18, 0xd4, 0x78, + 0xf6, 0x78, 0xb1, 0xfa, 0xf4, 0xd1, 0xe1, 0xec, 0x39, 0xdc, 0x8d, 0xc6, 0xbd, 0x9e, 0x41, 0x2d, + 0x98, 0xf4, 0x4d, 0x27, 0x47, 0x78, 0xb8, 0x0f, 0xe5, 0x1f, 0xa9, 0x49, 0x30, 0x05, 0xc6, 0x69, + 0x01, 0x69, 0x4f, 0xa9, 0xf4, 0x98, 0x3c, 0xa5, 0x5f, 0xd2, 0x9e, 0x12, 0x3f, 0x1b, 0xfc, 0x58, + 0xce, 0x71, 0xb6, 0xa7, 0xed, 0x2a, 0xbd, 0x09, 0x65, 0x79, 0xac, 0x3e, 0x80, 0xbd, 0x79, 0x21, + 0xc5, 0xa7, 0x8f, 0x45, 0xbb, 0x5f, 0x80, 0x1e, 0x5e, 0x36, 0x1d, 0x67, 0x7a, 0x4a, 0x4b, 0x8d, + 0xb3, 0xe1, 0xa6, 0x35, 0x74, 0xc0, 0x43, 0x0a, 0xb8, 0x67, 0xfa, 0xd1, 0xbc, 0x57, 0x09, 0x3a, + 0xca, 0x60, 0x5c, 0xe8, 0xa7, 0x22, 0x0d, 0xd0, 0x15, 0x00, 0xed, 0x89, 0x88, 0x68, 0x3a, 0x75, + 0x1c, 0xa6, 0x1d, 0x16, 0x6c, 0x50, 0xd1, 0x45, 0xa3, 0x17, 0xc4, 0x89, 0xe3, 0xfb, 0xd7, 0xbd, + 0x20, 0x11, 0xbb, 0x5f, 0x6a, 0x96, 0x5a, 0xd1, 0x28, 0x6c, 0xd2, 0x5d, 0xfc, 0xb0, 0xf1, 0x5d, + 0x86, 0xf9, 0x9e, 0xbb, 0xf0, 0xcc, 0xb2, 0x97, 0xa8, 0x18, 0x50, 0xd5, 0x8f, 0xa8, 0xa3, 0xa1, + 0x82, 0x96, 0xad, 0xbe, 0x41, 0xcb, 0x46, 0x0c, 0x66, 0x21, 0x1d, 0x32, 0x9a, 0x8d, 0xc1, 0xb4, + 0x5f, 0x83, 0xf3, 0xcb, 0x5e, 0x72, 0xcd, 0xf3, 0xc9, 0x90, 0x42, 0xec, 0xdf, 0x1d, 0x81, 0x09, + 0x33, 0xa8, 0x7e, 0x98, 0xb8, 0xeb, 0x2f, 0x51, 0x5f, 0x42, 0xbc, 0x9d, 0xa7, 0xce, 0x39, 0xee, + 0x9c, 0x38, 0xc2, 0xbf, 0x77, 0x8b, 0x19, 0xee, 0x84, 0x96, 0x89, 0x4d, 0x05, 0xd0, 0x3d, 0x28, + 0xd5, 0x59, 0x8c, 0x60, 0x31, 0x8f, 0x13, 0xd7, 0x5e, 0x2d, 0xaa, 0x87, 0x19, 0x8f, 0x32, 0xe4, + 0xf2, 0xe8, 0x0c, 0x19, 0xa5, 0x23, 0xcb, 0x95, 0xa1, 0x52, 0x31, 0xe5, 0x8a, 0xa2, 0x9f, 0xa9, + 0x2f, 0x3d, 0x84, 0xa9, 0x4f, 0x19, 0xde, 0xd1, 0xc7, 0x63, 0x78, 0xed, 0x2f, 0x14, 0x60, 0x6a, + 0x39, 0x68, 0x6f, 0x2e, 0x6f, 0xb6, 0x77, 0x7c, 0xcf, 0xbd, 0x49, 0x3a, 0xd4, 0x38, 0xed, 0x91, + 0xce, 0xca, 0x92, 0xe8, 0x43, 0xaa, 0xd5, 0x6e, 0x52, 0x20, 0xe6, 0x38, 0x3a, 0x1c, 0xeb, 0x5e, + 0xd0, 0x20, 0x51, 0x2b, 0xf2, 0xc4, 0xae, 0x96, 0x31, 0x1c, 0xaf, 0x69, 0x14, 0x36, 0xe9, 0x28, + 0xef, 0xf0, 0x5e, 0x40, 0xa2, 0xac, 0x2b, 0xb7, 0x41, 0x81, 0x98, 0xe3, 0x28, 0x51, 0x12, 0xb5, + 0xe3, 0x44, 0x7c, 0x0e, 0x45, 0xb4, 0x4d, 0x81, 0x98, 0xe3, 0x68, 0x5f, 0x8f, 0xdb, 0x3b, 0xec, + 0x48, 0x37, 0x13, 0x5c, 0xb7, 0xc5, 0xc1, 0x58, 0xe2, 0x29, 0xe9, 0x1e, 0xe9, 0x2c, 0xd1, 0x85, + 0x4d, 0x26, 0xfc, 0xf5, 0x26, 0x07, 0x63, 0x89, 0x67, 0xf9, 0xfa, 0xe9, 0xe6, 0xf8, 0x81, 0xcb, + 0xd7, 0x4f, 0xab, 0xdf, 0x67, 0x89, 0xf4, 0x4d, 0x0b, 0x26, 0xcc, 0x40, 0x0c, 0xd4, 0xc8, 0x78, + 0x79, 0x1b, 0x5d, 0xb5, 0x57, 0x7e, 0xb2, 0x57, 0x39, 0xe0, 0x86, 0x97, 0x84, 0xad, 0xf8, 0x65, + 0x12, 0x34, 0xbc, 0x80, 0xb0, 0xa3, 0x3f, 0x1e, 0xc0, 0x91, 0x8a, 0xf2, 0x58, 0x0c, 0x6b, 0xe4, + 0x21, 0xdc, 0x44, 0xfb, 0x0e, 0x4c, 0x77, 0xc5, 0x3c, 0x0f, 0x30, 0xb9, 0x1e, 0x9b, 0x52, 0x62, + 0x63, 0x18, 0xa7, 0x8c, 0x37, 0x5a, 0x3c, 0xd2, 0x62, 0x11, 0xa6, 0xb9, 0x03, 0x40, 0x25, 0x6d, + 0xb9, 0xbb, 0xa4, 0xa9, 0xe2, 0xd8, 0xd9, 0x16, 0xea, 0xed, 0x2c, 0x12, 0x77, 0xd3, 0xdb, 0x5f, + 0xb4, 0x60, 0x32, 0x15, 0x86, 0x9e, 0x93, 0x1b, 0xc0, 0x46, 0x5a, 0xc8, 0xe2, 0x82, 0x22, 0x2f, + 0xe0, 0xa7, 0x60, 0x65, 0x63, 0xa4, 0x69, 0x14, 0x36, 0xe9, 0xec, 0xaf, 0x16, 0xa0, 0x2c, 0x8f, + 0x7d, 0x07, 0x50, 0xe5, 0xf3, 0x16, 0x4c, 0xaa, 0x6d, 0x6b, 0xb6, 0x1f, 0xc2, 0x3b, 0xe3, 0xfa, + 0xc9, 0x0f, 0x9e, 0x55, 0xf0, 0x58, 0x50, 0x0f, 0xb5, 0x4f, 0x8a, 0x4d, 0x61, 0x38, 0x2d, 0x1b, + 0xdd, 0x06, 0x88, 0x3b, 0x71, 0x42, 0x9a, 0xc6, 0xce, 0x8c, 0x6d, 0x8c, 0xb8, 0x39, 0x37, 0x8c, + 0x08, 0x1d, 0x5f, 0xeb, 0x61, 0x8d, 0x6c, 0x29, 0x4a, 0xed, 0x44, 0x68, 0x18, 0x36, 0x38, 0xd9, + 0xff, 0xa4, 0x00, 0x67, 0xb3, 0x2a, 0xa1, 0x8f, 0xc1, 0x84, 0x94, 0x6e, 0xd4, 0x43, 0x96, 0x67, + 0xdd, 0x13, 0xd8, 0xc0, 0xdd, 0x3f, 0x9c, 0x9d, 0xed, 0x2e, 0x2d, 0x3d, 0x67, 0x92, 0xe0, 0x14, + 0x33, 0x7e, 0x76, 0x20, 0x0e, 0xb9, 0xaa, 0x9d, 0x85, 0x56, 0x4b, 0x1c, 0x00, 0x18, 0x67, 0x07, + 0x26, 0x16, 0x67, 0xa8, 0xd1, 0x26, 0x9c, 0x37, 0x20, 0xeb, 0xc4, 0x6b, 0xec, 0xee, 0x84, 0x91, + 0x5c, 0x5b, 0x3c, 0xa7, 0x43, 0x3e, 0xba, 0x69, 0x70, 0xcf, 0x27, 0xe9, 0x7c, 0xe7, 0x3a, 0x2d, + 0xc7, 0xf5, 0x92, 0x8e, 0xd8, 0x6a, 0x52, 0xb6, 0x69, 0x51, 0xc0, 0xb1, 0xa2, 0xb0, 0xd7, 0x60, + 0x64, 0xc0, 0x1e, 0x34, 0x90, 0x4f, 0xfb, 0x26, 0x94, 0x29, 0x3b, 0xe9, 0xe0, 0xe4, 0xc1, 0x32, + 0x84, 0xb2, 0x2c, 0x69, 0x88, 0x6c, 0x28, 0x7a, 0x8e, 0x3c, 0x9e, 0x51, 0xaf, 0xb5, 0x12, 0xc7, + 0x6d, 0xb6, 0x4c, 0xa4, 0x48, 0xf4, 0x02, 0x14, 0xc9, 0x41, 0x2b, 0x7b, 0x0e, 0x73, 0xf5, 0xa0, + 0xe5, 0x45, 0x24, 0xa6, 0x44, 0xe4, 0xa0, 0x85, 0x2e, 0x42, 0xc1, 0xab, 0x89, 0x49, 0x0a, 0x04, + 0x4d, 0x61, 0x65, 0x09, 0x17, 0xbc, 0x9a, 0x7d, 0x00, 0x15, 0x55, 0x43, 0x11, 0xed, 0x49, 0xdb, + 0x6d, 0xe5, 0x11, 0xa7, 0x21, 0xf9, 0xf6, 0xb1, 0xda, 0x6d, 0x00, 0x1d, 0xf4, 0x9f, 0x97, 0x7d, + 0xb9, 0x0c, 0x23, 0x6e, 0x28, 0x72, 0x85, 0xca, 0x9a, 0x0d, 0x33, 0xda, 0x0c, 0x63, 0xdf, 0x81, + 0xa9, 0x9b, 0x41, 0x78, 0x8f, 0x55, 0x12, 0xbb, 0xe6, 0x11, 0xbf, 0x46, 0x19, 0xd7, 0xe9, 0x8f, + 0xac, 0x8b, 0xc0, 0xb0, 0x98, 0xe3, 0x54, 0xa1, 0xc1, 0x42, 0xbf, 0x42, 0x83, 0xf6, 0xa7, 0x2d, + 0x38, 0xab, 0xa2, 0xd1, 0xa5, 0x35, 0x7e, 0x0d, 0x26, 0x76, 0xda, 0x9e, 0x5f, 0x13, 0xff, 0xb3, + 0x0b, 0xf5, 0xaa, 0x81, 0xc3, 0x29, 0x4a, 0xba, 0xac, 0xd8, 0xf1, 0x02, 0x27, 0xea, 0x6c, 0x6a, + 0xf3, 0xaf, 0x2c, 0x42, 0x55, 0x61, 0xb0, 0x41, 0x65, 0x7f, 0xb6, 0x00, 0x93, 0xa9, 0xe4, 0x5b, + 0xe4, 0x43, 0x99, 0xf8, 0x6c, 0xfb, 0x48, 0x7e, 0xd4, 0x93, 0x96, 0xd0, 0x50, 0x1d, 0xf1, 0xaa, + 0xe0, 0x8b, 0x95, 0x84, 0x27, 0xe2, 0x9c, 0xc2, 0xfe, 0x76, 0x11, 0x66, 0xf8, 0xae, 0x59, 0x4d, + 0x05, 0x04, 0xac, 0x49, 0xef, 0xe4, 0x6f, 0xe9, 0x44, 0x77, 0xde, 0x1c, 0x3b, 0x27, 0x2d, 0x02, + 0xd5, 0x5b, 0xd0, 0x40, 0x47, 0xd5, 0xbf, 0x9e, 0x39, 0xaa, 0xe6, 0x93, 0x54, 0xe3, 0x94, 0x34, + 0xfa, 0xc1, 0x3a, 0xbb, 0xfe, 0x87, 0x05, 0x38, 0x93, 0xa9, 0xb0, 0x85, 0xbe, 0x9c, 0xae, 0x80, + 0x62, 0xe5, 0xb1, 0xb7, 0xf2, 0xc0, 0x3a, 0x4f, 0xc3, 0xd5, 0x41, 0x79, 0x5c, 0x1d, 0xfe, 0xf7, + 0x0b, 0x30, 0x95, 0x2e, 0x0d, 0xf6, 0x04, 0xb6, 0xd4, 0x07, 0xa1, 0xc2, 0x0a, 0xee, 0xb0, 0x4a, + 0xd5, 0x7c, 0x0b, 0x87, 0xa5, 0xd8, 0xae, 0x49, 0x20, 0xd6, 0xf8, 0x27, 0xa2, 0xbc, 0x8c, 0xfd, + 0x8f, 0x2c, 0xb8, 0xc0, 0xdf, 0x32, 0xdb, 0x0f, 0xff, 0x76, 0xaf, 0xd6, 0xfd, 0x78, 0xbe, 0x0a, + 0x66, 0x0a, 0x34, 0x1c, 0xd7, 0xbe, 0xac, 0x42, 0xae, 0xd0, 0x36, 0xdd, 0x15, 0x9e, 0x40, 0x65, + 0x87, 0xea, 0x0c, 0xf6, 0xef, 0x17, 0x41, 0x17, 0x05, 0x46, 0x9e, 0xc8, 0x15, 0xc8, 0xa5, 0x50, + 0xc5, 0x56, 0x27, 0x70, 0x75, 0xf9, 0xe1, 0x72, 0x26, 0x55, 0xe0, 0x57, 0x2d, 0x18, 0xf7, 0x02, + 0x2f, 0xf1, 0x1c, 0xe6, 0x74, 0xe6, 0x53, 0xb5, 0x55, 0x89, 0x5b, 0xe1, 0x9c, 0xc3, 0xc8, 0xdc, + 0xf7, 0x53, 0xc2, 0xb0, 0x29, 0x19, 0x7d, 0x4a, 0x44, 0x93, 0x15, 0x73, 0xcb, 0x34, 0x29, 0x67, + 0x42, 0xc8, 0x5a, 0x50, 0x8a, 0x48, 0x12, 0xc9, 0x1c, 0x9f, 0x9b, 0x27, 0x0d, 0x11, 0x4e, 0xa2, + 0xce, 0x56, 0x12, 0x39, 0x09, 0x69, 0x18, 0x8b, 0x76, 0x06, 0xc6, 0x5c, 0x90, 0x1d, 0x03, 0xea, + 0x6e, 0x8b, 0x21, 0x23, 0x75, 0xe6, 0xa1, 0xe2, 0xb4, 0x93, 0xb0, 0x49, 0x9b, 0x49, 0x6c, 0x4d, + 0xea, 0x58, 0x24, 0x89, 0xc0, 0x9a, 0xc6, 0xfe, 0x72, 0x09, 0x32, 0xc1, 0xfb, 0xe8, 0xc0, 0x2c, + 0x68, 0x6d, 0xe5, 0x5b, 0xd0, 0x5a, 0x29, 0xd3, 0xab, 0xa8, 0x35, 0x6a, 0x40, 0xa9, 0xb5, 0xeb, + 0xc4, 0xd2, 0xa7, 0x7c, 0x53, 0x36, 0xd3, 0x26, 0x05, 0xde, 0x3f, 0x9c, 0xfd, 0xa9, 0xc1, 0xf6, + 0x28, 0x68, 0x5f, 0x9d, 0xe7, 0x99, 0x8c, 0x5a, 0x34, 0xe3, 0x81, 0x39, 0x7f, 0x73, 0x97, 0xa2, + 0x78, 0xcc, 0x61, 0xd6, 0x67, 0x44, 0x4d, 0x2d, 0x4c, 0xe2, 0xb6, 0x9f, 0x88, 0xde, 0xf0, 0x66, + 0x8e, 0xa3, 0x8c, 0x33, 0xd6, 0xa9, 0x5f, 0xfc, 0x3f, 0x36, 0x84, 0xa2, 0x8f, 0x41, 0x25, 0x4e, + 0x9c, 0x28, 0x79, 0xc8, 0x44, 0x11, 0xd5, 0xe8, 0x5b, 0x92, 0x09, 0xd6, 0xfc, 0xd0, 0x5b, 0xac, + 0x6e, 0x8f, 0x17, 0xef, 0x3e, 0x64, 0x10, 0xa8, 0xac, 0xf1, 0x23, 0x38, 0x60, 0x83, 0x1b, 0x75, + 0xd9, 0x59, 0xdf, 0xe6, 0x91, 0x0f, 0x65, 0xb6, 0x26, 0x53, 0xa6, 0x10, 0x2b, 0x0c, 0x36, 0xa8, + 0xec, 0x5f, 0x80, 0x73, 0xd9, 0x1b, 0x30, 0xc4, 0xb6, 0x65, 0x23, 0x0a, 0xdb, 0xad, 0xec, 0x9a, + 0x84, 0xdd, 0x90, 0x80, 0x39, 0x8e, 0xae, 0x49, 0xf6, 0xbc, 0xa0, 0x96, 0x5d, 0x93, 0xdc, 0xf4, + 0x82, 0x1a, 0x66, 0x98, 0x01, 0x2a, 0x7d, 0xff, 0x2b, 0x0b, 0x2e, 0x1f, 0x77, 0x51, 0x07, 0x7a, + 0x0e, 0x46, 0xee, 0x39, 0x91, 0xac, 0x03, 0xc6, 0x6c, 0xc7, 0x1d, 0x27, 0x0a, 0x30, 0x83, 0xa2, + 0x0e, 0x8c, 0xf2, 0xe4, 0x38, 0xe1, 0xc0, 0xbe, 0x99, 0xef, 0xb5, 0x21, 0x37, 0x89, 0xe1, 0x41, + 0xf3, 0xc4, 0x3c, 0x2c, 0x04, 0xda, 0xef, 0x5a, 0x80, 0x36, 0xf6, 0x49, 0x14, 0x79, 0x35, 0x23, + 0x9d, 0x0f, 0xbd, 0x0a, 0x13, 0x77, 0xb7, 0x36, 0xd6, 0x37, 0x43, 0x2f, 0x60, 0x15, 0x0b, 0x8c, + 0xc4, 0x8e, 0x1b, 0x06, 0x1c, 0xa7, 0xa8, 0xd0, 0x22, 0x4c, 0xdf, 0x7d, 0x9b, 0xae, 0xa3, 0xae, + 0x1e, 0xb4, 0x22, 0x12, 0xc7, 0xca, 0x27, 0x17, 0x3b, 0x67, 0x37, 0xde, 0xcc, 0x20, 0x71, 0x37, + 0x3d, 0xda, 0x80, 0x0b, 0x4d, 0xee, 0x81, 0xb3, 0xe5, 0x63, 0xcc, 0xdd, 0xf1, 0x48, 0xa6, 0x84, + 0x3f, 0x73, 0x74, 0x38, 0x7b, 0x61, 0xad, 0x17, 0x01, 0xee, 0xfd, 0x9c, 0xfd, 0xad, 0x02, 0x8c, + 0x1b, 0x97, 0xdd, 0x0c, 0xb0, 0x50, 0xce, 0xdc, 0xcf, 0x53, 0x18, 0xf0, 0x7e, 0x9e, 0x17, 0xa1, + 0xdc, 0x0a, 0x7d, 0xcf, 0xf5, 0x54, 0xfe, 0x3a, 0xab, 0xa3, 0xb4, 0x29, 0x60, 0x58, 0x61, 0xd1, + 0x3d, 0xa8, 0xa8, 0x0b, 0x20, 0x44, 0x46, 0x5b, 0x5e, 0x5b, 0x05, 0x6a, 0xf0, 0xea, 0x8b, 0x1d, + 0xb4, 0x2c, 0x64, 0xc3, 0x28, 0xeb, 0xf9, 0x32, 0x26, 0x88, 0xa5, 0x2d, 0xb0, 0x21, 0x11, 0x63, + 0x81, 0xb1, 0x7f, 0x65, 0x0c, 0xce, 0xf7, 0xaa, 0xfd, 0x83, 0x7e, 0x0e, 0x46, 0xb9, 0x8e, 0xf9, + 0x94, 0x97, 0xeb, 0x25, 0x63, 0x99, 0x31, 0x14, 0x6a, 0xb1, 0xdf, 0x58, 0xc8, 0x14, 0xd2, 0x7d, + 0x67, 0x47, 0xb8, 0x11, 0xa7, 0x23, 0x7d, 0xd5, 0xd1, 0xd2, 0x57, 0x1d, 0x2e, 0xdd, 0x77, 0x76, + 0xd0, 0x01, 0x94, 0x1a, 0x5e, 0x42, 0x1c, 0xe1, 0x4c, 0xdf, 0x39, 0x15, 0xe1, 0xc4, 0xe1, 0xa1, + 0xe7, 0xec, 0x27, 0xe6, 0x02, 0xd1, 0x37, 0x2c, 0x38, 0xb3, 0x93, 0xce, 0x02, 0x11, 0xb3, 0x8a, + 0x73, 0x0a, 0xf5, 0x9d, 0xd2, 0x82, 0xaa, 0xe7, 0x8e, 0x0e, 0x67, 0xcf, 0x64, 0x80, 0x38, 0xab, + 0x0e, 0xfa, 0x25, 0x0b, 0xc6, 0xea, 0x9e, 0x6f, 0xd4, 0x36, 0x39, 0x85, 0x8f, 0x73, 0x8d, 0x09, + 0xd0, 0x33, 0x2f, 0xff, 0x1f, 0x63, 0x29, 0xb9, 0xdf, 0x59, 0xdc, 0xe8, 0x49, 0xcf, 0xe2, 0xc6, + 0x1e, 0xd3, 0xf2, 0xe9, 0xef, 0x16, 0xe0, 0x85, 0x01, 0xbe, 0x91, 0x99, 0x55, 0x60, 0x1d, 0x93, + 0x55, 0x70, 0x19, 0x46, 0x22, 0xd2, 0x0a, 0xb3, 0xf3, 0x1d, 0x0b, 0xfb, 0x61, 0x18, 0xf4, 0x3c, + 0x14, 0x9d, 0x96, 0x27, 0xa6, 0x3b, 0x75, 0x54, 0xbf, 0xb0, 0xb9, 0x82, 0x29, 0x9c, 0x7e, 0xe9, + 0xca, 0x8e, 0xcc, 0x4d, 0xca, 0xa7, 0x60, 0x68, 0xbf, 0x54, 0x27, 0xbe, 0xa0, 0x51, 0x58, 0xac, + 0xe5, 0xda, 0x1b, 0x70, 0xb1, 0x7f, 0x0f, 0x41, 0xaf, 0xc0, 0xf8, 0x4e, 0xe4, 0x04, 0xee, 0xee, + 0x9a, 0x93, 0xb8, 0xf2, 0xc0, 0x9c, 0x05, 0x3f, 0x56, 0x35, 0x18, 0x9b, 0x34, 0xf6, 0xb7, 0x0b, + 0xbd, 0x39, 0x72, 0x23, 0x30, 0x4c, 0x0b, 0x8b, 0xf6, 0x2b, 0xf4, 0x69, 0xbf, 0xb7, 0xa1, 0x9c, + 0xb0, 0x50, 0x76, 0x52, 0x17, 0x96, 0x24, 0xb7, 0x6c, 0x2c, 0x36, 0xd7, 0x6c, 0x0b, 0xe6, 0x58, + 0x89, 0xa1, 0x26, 0xdf, 0xd7, 0x65, 0x51, 0x84, 0xc9, 0xcf, 0xec, 0xa3, 0x2d, 0xc1, 0x59, 0xa3, + 0x8c, 0x1b, 0x8f, 0xe4, 0xe5, 0xc7, 0xa8, 0x2a, 0xbd, 0x65, 0x33, 0x83, 0xc7, 0x5d, 0x4f, 0xd8, + 0xdf, 0x2c, 0xc0, 0x33, 0x7d, 0x2d, 0x9b, 0x3e, 0xeb, 0xb5, 0x1e, 0x70, 0xd6, 0x7b, 0xe2, 0x0e, + 0x6a, 0x36, 0xf0, 0xc8, 0xa3, 0x69, 0xe0, 0x97, 0xa0, 0xec, 0x05, 0x31, 0x71, 0xdb, 0x11, 0x6f, + 0x34, 0x23, 0xa6, 0x6e, 0x45, 0xc0, 0xb1, 0xa2, 0xb0, 0xff, 0xa0, 0x7f, 0x57, 0xa3, 0xb3, 0xdc, + 0x0f, 0x6d, 0x2b, 0xbd, 0x0e, 0x93, 0x4e, 0xab, 0xc5, 0xe9, 0xd8, 0xb9, 0x5a, 0x26, 0x61, 0x6d, + 0xc1, 0x44, 0xe2, 0x34, 0xad, 0xd1, 0x87, 0x47, 0xfb, 0xf5, 0x61, 0xfb, 0x4f, 0x4b, 0x50, 0xa1, + 0x2d, 0xb0, 0x18, 0x91, 0x5a, 0x4c, 0x1b, 0xa0, 0x1d, 0xf9, 0xa2, 0x15, 0x55, 0x03, 0xdc, 0xc2, + 0xab, 0x98, 0xc2, 0x53, 0xab, 0xe4, 0xc2, 0x50, 0xf9, 0x2c, 0xc5, 0x63, 0xf3, 0x59, 0x5e, 0x87, + 0xc9, 0x38, 0xde, 0xdd, 0x8c, 0xbc, 0x7d, 0x27, 0xa1, 0xbe, 0xb7, 0x88, 0x5b, 0xd0, 0x31, 0xe8, + 0x5b, 0xd7, 0x35, 0x12, 0xa7, 0x69, 0xd1, 0x32, 0x4c, 0xeb, 0xac, 0x12, 0x12, 0x25, 0x2c, 0x4c, + 0x81, 0x37, 0x95, 0x0a, 0x01, 0xd7, 0x79, 0x28, 0x82, 0x00, 0x77, 0x3f, 0x43, 0x87, 0x74, 0x0a, + 0x48, 0x15, 0x19, 0x4d, 0x0f, 0xe9, 0x14, 0x1f, 0xaa, 0x4b, 0xd7, 0x13, 0x68, 0x0d, 0xce, 0xf1, + 0x7e, 0xc1, 0xee, 0x3b, 0x53, 0x6f, 0x34, 0xc6, 0x18, 0x3d, 0x2b, 0x18, 0x9d, 0x5b, 0xee, 0x26, + 0xc1, 0xbd, 0x9e, 0xa3, 0x8e, 0xb5, 0x02, 0xaf, 0x2c, 0x89, 0x05, 0x9e, 0x72, 0xac, 0x15, 0x9b, + 0x95, 0x1a, 0x36, 0xe9, 0xd0, 0x47, 0xe1, 0x69, 0xfd, 0x97, 0x47, 0x73, 0xf1, 0x5d, 0x8f, 0x25, + 0x91, 0xb0, 0xa7, 0x4a, 0x88, 0x2d, 0xf7, 0x24, 0xab, 0xe1, 0x7e, 0xcf, 0xa3, 0x1d, 0xb8, 0xa8, + 0x50, 0x57, 0xe9, 0x2a, 0xa6, 0x15, 0x79, 0x31, 0xa9, 0x3a, 0x31, 0xb9, 0x15, 0xf9, 0x2c, 0xc5, + 0xaf, 0xa2, 0x8b, 0x1d, 0x2f, 0x7b, 0xc9, 0xf5, 0x5e, 0x94, 0x78, 0x15, 0x3f, 0x80, 0x0b, 0x9a, + 0x87, 0x0a, 0x09, 0x9c, 0x1d, 0x9f, 0x6c, 0x2c, 0xae, 0xb0, 0xc4, 0x3f, 0x63, 0x93, 0xe5, 0xaa, + 0x44, 0x60, 0x4d, 0xa3, 0x8e, 0xca, 0x26, 0xfa, 0x1e, 0x95, 0xfd, 0x91, 0x05, 0x93, 0xaa, 0xb3, + 0x3f, 0x82, 0x98, 0x14, 0x3f, 0x1d, 0x93, 0xb2, 0x7c, 0xd2, 0xdd, 0x2d, 0xa1, 0x79, 0x9f, 0x83, + 0xcd, 0x3f, 0xa9, 0x00, 0xb0, 0xab, 0x5b, 0x3d, 0x56, 0x83, 0x43, 0x9a, 0x3b, 0xab, 0xaf, 0xb9, + 0x7b, 0x62, 0x87, 0x73, 0xaf, 0x14, 0x99, 0xd2, 0xe3, 0x4d, 0x91, 0xd9, 0x82, 0x0b, 0x72, 0x32, + 0xe2, 0x0b, 0xfe, 0xeb, 0x61, 0xac, 0xac, 0x43, 0xb9, 0xfa, 0xbc, 0x60, 0x74, 0x61, 0xa5, 0x17, + 0x11, 0xee, 0xfd, 0x6c, 0x6a, 0x0e, 0x1c, 0x3b, 0x6e, 0x0e, 0xd4, 0x03, 0x62, 0xb5, 0x2e, 0xab, + 0x79, 0x65, 0x06, 0xc4, 0xea, 0xb5, 0x2d, 0xac, 0x69, 0x7a, 0x5b, 0xc5, 0x4a, 0x4e, 0x56, 0x11, + 0x86, 0xb6, 0x8a, 0x72, 0x7c, 0x8e, 0xf7, 0xbd, 0x33, 0x4f, 0xee, 0x31, 0x4c, 0xf4, 0xdd, 0x63, + 0x78, 0x03, 0xa6, 0xbc, 0x60, 0x97, 0x44, 0x5e, 0x42, 0x6a, 0x6c, 0x2c, 0x88, 0x0b, 0x31, 0x55, + 0x24, 0xc8, 0x4a, 0x0a, 0x8b, 0x33, 0xd4, 0x69, 0xa3, 0x32, 0x35, 0x80, 0x51, 0xe9, 0x63, 0xca, + 0xcf, 0xe4, 0x63, 0xca, 0xcf, 0x9e, 0xdc, 0x94, 0x4f, 0x9f, 0xaa, 0x29, 0x47, 0xb9, 0x98, 0xf2, + 0x17, 0xa0, 0xd4, 0x8a, 0xc2, 0x83, 0xce, 0xcc, 0xb9, 0xb4, 0x7b, 0xb6, 0x49, 0x81, 0x98, 0xe3, + 0xcc, 0xe5, 0xc2, 0xf9, 0x07, 0x2f, 0x17, 0xec, 0xcf, 0x15, 0xe0, 0x82, 0xb6, 0x74, 0xb4, 0x7f, + 0x79, 0x75, 0x3a, 0xd6, 0x59, 0xc9, 0x45, 0x1e, 0x4e, 0x60, 0x04, 0x21, 0xe9, 0x78, 0x26, 0x85, + 0xc1, 0x06, 0x15, 0x8b, 0xe5, 0x21, 0x11, 0xab, 0xb1, 0x91, 0x35, 0x83, 0x8b, 0x02, 0x8e, 0x15, + 0x05, 0xbb, 0xf7, 0x9d, 0x44, 0x89, 0x88, 0x8f, 0xcc, 0xe6, 0xdd, 0x2e, 0x6a, 0x14, 0x36, 0xe9, + 0xd0, 0x8b, 0x5c, 0x08, 0x1b, 0x82, 0xd4, 0x14, 0x4e, 0x88, 0x6a, 0xe1, 0x72, 0xd4, 0x29, 0xac, + 0x54, 0x87, 0x05, 0x6d, 0x95, 0xba, 0xd5, 0x61, 0x87, 0x27, 0x8a, 0xc2, 0xfe, 0xbf, 0x16, 0x3c, + 0xd3, 0xb3, 0x29, 0x1e, 0xc1, 0xf4, 0x76, 0x90, 0x9e, 0xde, 0xb6, 0x4e, 0x3e, 0xbd, 0x75, 0xbd, + 0x45, 0x9f, 0xa9, 0xee, 0x3f, 0x59, 0x30, 0xa5, 0xe9, 0x1f, 0xc1, 0xab, 0x7a, 0xb9, 0xde, 0xe0, + 0xae, 0x55, 0xe7, 0x3b, 0x57, 0xa9, 0x77, 0xfb, 0x23, 0xf6, 0x6e, 0x7c, 0x0f, 0x7a, 0xc1, 0x95, + 0xb7, 0x8d, 0x1e, 0xb3, 0xf7, 0xda, 0x81, 0x51, 0x56, 0x9b, 0x37, 0xce, 0x67, 0x2f, 0x3c, 0x2d, + 0x9f, 0x45, 0x63, 0xea, 0xbd, 0x70, 0xf6, 0x37, 0xc6, 0x42, 0x20, 0xab, 0x00, 0xe3, 0xc5, 0xd4, + 0x5e, 0xd6, 0x44, 0xf8, 0x93, 0xae, 0x00, 0x23, 0xe0, 0x58, 0x51, 0xd8, 0x4d, 0x98, 0x49, 0x33, + 0x5f, 0x22, 0x75, 0x76, 0xe4, 0x38, 0xd0, 0x6b, 0xce, 0x43, 0xc5, 0x61, 0x4f, 0xad, 0xb6, 0x9d, + 0xec, 0x05, 0x13, 0x0b, 0x12, 0x81, 0x35, 0x8d, 0xfd, 0xdb, 0x16, 0x9c, 0xeb, 0xf1, 0x32, 0x39, + 0x86, 0x7d, 0x25, 0xda, 0x0a, 0xf4, 0xb9, 0x06, 0xb6, 0x46, 0xea, 0x8e, 0x3c, 0xd4, 0x32, 0xac, + 0xda, 0x12, 0x07, 0x63, 0x89, 0xb7, 0xff, 0x97, 0x05, 0x67, 0xd2, 0xba, 0xc6, 0xe8, 0x06, 0x20, + 0xfe, 0x32, 0x4b, 0x5e, 0xec, 0x86, 0xfb, 0x24, 0xea, 0xd0, 0x37, 0xe7, 0x5a, 0x5f, 0x14, 0x9c, + 0xd0, 0x42, 0x17, 0x05, 0xee, 0xf1, 0x14, 0xab, 0x50, 0x51, 0x53, 0xad, 0x2d, 0x7b, 0xca, 0xed, + 0x3c, 0x7b, 0x8a, 0xfe, 0x98, 0xe6, 0xc6, 0xbf, 0x12, 0x89, 0x4d, 0xf9, 0xf6, 0xbb, 0x23, 0xa0, + 0xe2, 0x42, 0xd9, 0xf1, 0x49, 0x4e, 0x87, 0x4f, 0xa9, 0x5b, 0x48, 0x8a, 0x43, 0xdc, 0x4b, 0x3b, + 0xf2, 0xa0, 0xa3, 0x0d, 0x5e, 0x10, 0xdf, 0xdc, 0xe4, 0x51, 0x6f, 0xb8, 0xad, 0x51, 0xd8, 0xa4, + 0xa3, 0x9a, 0xf8, 0xde, 0x3e, 0xe1, 0x0f, 0x8d, 0xa6, 0x35, 0x59, 0x95, 0x08, 0xac, 0x69, 0xa8, + 0x26, 0x35, 0xaf, 0x5e, 0x17, 0x2b, 0x45, 0xa5, 0x09, 0x6d, 0x1d, 0xcc, 0x30, 0x94, 0x62, 0x37, + 0x0c, 0xf7, 0x84, 0xff, 0xa7, 0x28, 0xae, 0x87, 0xe1, 0x1e, 0x66, 0x18, 0xea, 0xb1, 0x04, 0x61, + 0xd4, 0x64, 0x17, 0x80, 0xd4, 0x94, 0x14, 0xe1, 0xf7, 0x29, 0x8f, 0x65, 0xbd, 0x9b, 0x04, 0xf7, + 0x7a, 0x8e, 0xf6, 0xc0, 0x56, 0x44, 0x6a, 0x9e, 0x9b, 0x98, 0xdc, 0x20, 0xdd, 0x03, 0x37, 0xbb, + 0x28, 0x70, 0x8f, 0xa7, 0xd0, 0x02, 0x9c, 0x91, 0x71, 0xbd, 0x32, 0x6f, 0x89, 0x3b, 0x83, 0xca, + 0x0f, 0xc7, 0x69, 0x34, 0xce, 0xd2, 0x53, 0x6b, 0xd3, 0x14, 0x29, 0x8b, 0xcc, 0x4d, 0x34, 0xac, + 0x8d, 0x4c, 0x65, 0xc4, 0x8a, 0xc2, 0xfe, 0x4c, 0x91, 0xce, 0x8e, 0x7d, 0xca, 0x6e, 0x3e, 0xb2, + 0xc3, 0xce, 0x74, 0x8f, 0x1c, 0x19, 0xa0, 0x47, 0xbe, 0x0a, 0x13, 0x77, 0xe3, 0x30, 0x50, 0x07, + 0x89, 0xa5, 0xbe, 0x07, 0x89, 0x06, 0x55, 0xef, 0x83, 0xc4, 0xd1, 0xbc, 0x0e, 0x12, 0xc7, 0x1e, + 0xf2, 0x20, 0xf1, 0xdf, 0x95, 0x40, 0x15, 0xcd, 0x5b, 0x27, 0xc9, 0xbd, 0x30, 0xda, 0xf3, 0x82, + 0x06, 0x8b, 0x87, 0xfe, 0x86, 0x05, 0x13, 0x7c, 0xbc, 0xac, 0x9a, 0xb1, 0x91, 0xf5, 0x9c, 0x0a, + 0xc5, 0xa5, 0x84, 0xcd, 0x6d, 0x1b, 0x82, 0x32, 0xe5, 0xa7, 0x4d, 0x14, 0x4e, 0x69, 0x84, 0x7e, + 0x1e, 0x40, 0x5e, 0x85, 0x51, 0xcf, 0xe9, 0x92, 0x68, 0x75, 0x31, 0x09, 0xa9, 0x6b, 0xdf, 0x74, + 0x5b, 0x09, 0xc1, 0x86, 0x40, 0xf4, 0xb9, 0xec, 0x05, 0x49, 0x9f, 0x3a, 0x95, 0xb6, 0x19, 0x24, + 0x6a, 0x14, 0xc3, 0x98, 0x17, 0x34, 0x68, 0x3f, 0x11, 0x67, 0xaf, 0x1f, 0xe8, 0x95, 0x4b, 0xb0, + 0x1a, 0x3a, 0xb5, 0xaa, 0xe3, 0x3b, 0x81, 0x4b, 0xa2, 0x15, 0x4e, 0x6e, 0xde, 0x87, 0xc0, 0x00, + 0x58, 0x32, 0xea, 0xaa, 0x84, 0x58, 0x1a, 0xa4, 0x12, 0xe2, 0xc5, 0x8f, 0xc0, 0x74, 0xd7, 0xc7, + 0x1c, 0x2a, 0x48, 0xf4, 0xe1, 0xe3, 0x4b, 0xed, 0x7f, 0x3d, 0xaa, 0x27, 0xad, 0xf5, 0xb0, 0xc6, + 0xeb, 0xf1, 0x45, 0xfa, 0x8b, 0x0a, 0xdf, 0x33, 0xc7, 0x2e, 0x62, 0xdc, 0xa9, 0xa0, 0x80, 0xd8, + 0x14, 0x49, 0xfb, 0x68, 0xcb, 0x89, 0x48, 0x70, 0xda, 0x7d, 0x74, 0x53, 0x09, 0xc1, 0x86, 0x40, + 0xb4, 0x9b, 0x8a, 0x12, 0xbb, 0x76, 0xf2, 0x28, 0x31, 0x96, 0x67, 0xd8, 0xab, 0xe0, 0xd8, 0x57, + 0x2c, 0x98, 0x0a, 0x52, 0x3d, 0x57, 0xec, 0xc3, 0x6f, 0x9f, 0xc6, 0xa8, 0xe0, 0x35, 0x57, 0xd3, + 0x30, 0x9c, 0x91, 0xdf, 0x6b, 0x4a, 0x2b, 0x0d, 0x39, 0xa5, 0xe9, 0xc2, 0x9e, 0xa3, 0xfd, 0x0a, + 0x7b, 0xa2, 0x40, 0x95, 0x0f, 0x1e, 0xcb, 0xbd, 0x7c, 0x30, 0xf4, 0x28, 0x1d, 0x7c, 0x07, 0x2a, + 0x6e, 0x44, 0x9c, 0xe4, 0x21, 0x2b, 0xc9, 0xb2, 0x43, 0xc8, 0x45, 0xc9, 0x00, 0x6b, 0x5e, 0xf6, + 0x7f, 0x2c, 0xc2, 0x59, 0xd9, 0x22, 0x32, 0x82, 0x86, 0xce, 0x8f, 0x5c, 0xae, 0x76, 0x6e, 0xd5, + 0xfc, 0x78, 0x5d, 0x22, 0xb0, 0xa6, 0xa1, 0xfe, 0x58, 0x3b, 0x26, 0x1b, 0x2d, 0x12, 0xac, 0x7a, + 0x3b, 0xb1, 0x38, 0x3f, 0x52, 0x03, 0xe5, 0x96, 0x46, 0x61, 0x93, 0x8e, 0x3a, 0xe3, 0xdc, 0x2f, + 0x8e, 0xb3, 0x01, 0x69, 0xc2, 0xdf, 0xc6, 0x12, 0x8f, 0x7e, 0xad, 0x67, 0x1d, 0xf0, 0x7c, 0x42, + 0x31, 0xbb, 0x02, 0x87, 0x86, 0x2c, 0x00, 0xfe, 0x65, 0x0b, 0xce, 0xec, 0xa5, 0x72, 0x49, 0xa4, + 0x49, 0x3e, 0x61, 0xd6, 0x63, 0x3a, 0x41, 0x45, 0x77, 0xe1, 0x34, 0x3c, 0xc6, 0x59, 0xe9, 0xf6, + 0xff, 0xb1, 0xc0, 0x34, 0x4f, 0x83, 0x79, 0x56, 0xc6, 0xcd, 0x0e, 0x85, 0x63, 0x6e, 0x76, 0x90, + 0x4e, 0x58, 0x71, 0x30, 0xa7, 0x7f, 0x64, 0x08, 0xa7, 0xbf, 0xd4, 0xd7, 0x6b, 0x7b, 0x1e, 0x8a, + 0x6d, 0xaf, 0x26, 0xfc, 0x76, 0x7d, 0x18, 0xb6, 0xb2, 0x84, 0x29, 0xdc, 0xfe, 0x17, 0x25, 0xbd, + 0x4e, 0x17, 0x11, 0x84, 0x3f, 0x14, 0xaf, 0x5d, 0x57, 0x49, 0xac, 0xfc, 0xcd, 0xd7, 0xbb, 0x92, + 0x58, 0x7f, 0x62, 0xf8, 0x00, 0x51, 0xde, 0x40, 0xfd, 0x72, 0x58, 0xc7, 0x8e, 0x89, 0x0e, 0xbd, + 0x0b, 0x65, 0xba, 0xb4, 0x61, 0x1b, 0x6e, 0xe5, 0x94, 0x52, 0xe5, 0xeb, 0x02, 0x7e, 0xff, 0x70, + 0xf6, 0xc7, 0x87, 0x57, 0x4b, 0x3e, 0x8d, 0x15, 0x7f, 0x14, 0x43, 0x85, 0xfe, 0x66, 0x81, 0xac, + 0x62, 0xd1, 0x74, 0x4b, 0xd9, 0x22, 0x89, 0xc8, 0x25, 0x4a, 0x56, 0xcb, 0x41, 0x01, 0x54, 0xd8, + 0x1d, 0x04, 0x4c, 0x28, 0x5f, 0x5b, 0x6d, 0xaa, 0x70, 0x52, 0x89, 0xb8, 0x7f, 0x38, 0xfb, 0xfa, + 0xf0, 0x42, 0xd5, 0xe3, 0x58, 0x8b, 0xb0, 0xbf, 0x3a, 0xa2, 0xfb, 0xae, 0xc8, 0x5d, 0xfe, 0xa1, + 0xe8, 0xbb, 0xaf, 0x65, 0xfa, 0xee, 0xe5, 0xae, 0xbe, 0x3b, 0xa5, 0xeb, 0xf4, 0xa7, 0x7a, 0xe3, + 0xa3, 0x9e, 0x60, 0x8f, 0x5f, 0xc7, 0x33, 0xcf, 0xe2, 0xed, 0xb6, 0x17, 0x91, 0x78, 0x33, 0x6a, + 0x07, 0x5e, 0xd0, 0x10, 0xb7, 0x35, 0x19, 0x9e, 0x45, 0x0a, 0x8d, 0xb3, 0xf4, 0xec, 0xa6, 0xa7, + 0x4e, 0xe0, 0xde, 0x71, 0xf6, 0x79, 0xaf, 0x32, 0xd2, 0x39, 0xb7, 0x04, 0x1c, 0x2b, 0x0a, 0xfb, + 0x5b, 0xec, 0x74, 0xd4, 0x88, 0xa0, 0xa7, 0x7d, 0xc2, 0x67, 0x97, 0x3e, 0xf0, 0x5c, 0x50, 0xd5, + 0x27, 0xf8, 0x4d, 0x0f, 0x1c, 0x87, 0xee, 0xc1, 0xd8, 0x0e, 0x2f, 0x06, 0x9d, 0x4f, 0xe5, 0x27, + 0x51, 0x59, 0x9a, 0x15, 0x48, 0x94, 0x65, 0xa6, 0xef, 0xeb, 0x9f, 0x58, 0x4a, 0xb3, 0xff, 0x7e, + 0x11, 0xce, 0x64, 0xae, 0x24, 0x48, 0xd5, 0xa1, 0x28, 0x1c, 0x5b, 0x87, 0xe2, 0x13, 0x00, 0x35, + 0xd2, 0xf2, 0xc3, 0x0e, 0x73, 0x73, 0x46, 0x86, 0x76, 0x73, 0x94, 0x67, 0xbc, 0xa4, 0xb8, 0x60, + 0x83, 0xa3, 0x48, 0x80, 0xe5, 0x65, 0x2d, 0x32, 0x09, 0xb0, 0x46, 0x01, 0xb4, 0xd1, 0x47, 0x5b, + 0x00, 0xcd, 0x83, 0x33, 0x5c, 0x45, 0x15, 0xa7, 0xfe, 0x10, 0xe1, 0xe8, 0x2c, 0xc2, 0x71, 0x29, + 0xcd, 0x06, 0x67, 0xf9, 0xda, 0x5f, 0x2a, 0x50, 0x67, 0x8f, 0x37, 0xb6, 0x4a, 0x85, 0x7c, 0x3f, + 0x8c, 0x3a, 0xed, 0x64, 0x37, 0xec, 0xaa, 0x6a, 0xbd, 0xc0, 0xa0, 0x58, 0x60, 0xd1, 0x2a, 0x8c, + 0xd4, 0x74, 0x7a, 0xdb, 0x30, 0xca, 0xe9, 0x7d, 0x33, 0x27, 0x21, 0x98, 0x71, 0x41, 0xcf, 0xc1, + 0x48, 0xe2, 0x34, 0x52, 0x17, 0x79, 0x6d, 0x3b, 0x8d, 0x18, 0x33, 0xa8, 0x39, 0x17, 0x8d, 0x1c, + 0x33, 0x17, 0xbd, 0x0e, 0x93, 0xb1, 0xd7, 0x08, 0x9c, 0xa4, 0x1d, 0x11, 0xe3, 0x8c, 0x46, 0x1f, + 0x6c, 0x9b, 0x48, 0x9c, 0xa6, 0xb5, 0xdf, 0xad, 0xc0, 0xf9, 0x5e, 0x37, 0xaa, 0xe6, 0x1d, 0x24, + 0xdc, 0x4b, 0xc6, 0xa3, 0x0b, 0x12, 0xee, 0x23, 0xdd, 0x37, 0x82, 0x84, 0x7d, 0x23, 0x48, 0xf8, + 0x73, 0x16, 0x54, 0x54, 0x6c, 0xac, 0x88, 0xef, 0xfb, 0xd8, 0x29, 0xdc, 0x5a, 0x2b, 0x45, 0x88, + 0x10, 0x49, 0xf9, 0x17, 0x6b, 0xe1, 0xa7, 0x17, 0x35, 0xfc, 0x40, 0x85, 0x86, 0x8a, 0x1a, 0x56, + 0x21, 0xd5, 0xa5, 0x3c, 0x42, 0xaa, 0xfb, 0x7c, 0xaa, 0x9e, 0x21, 0xd5, 0x5f, 0xb1, 0x60, 0xdc, + 0x79, 0xa7, 0x1d, 0x91, 0x25, 0xb2, 0xbf, 0xd1, 0x8a, 0x85, 0xdd, 0xfa, 0x78, 0xfe, 0x0a, 0x2c, + 0x68, 0x21, 0xa2, 0xfc, 0xa6, 0x06, 0x60, 0x53, 0x85, 0x54, 0x08, 0xf5, 0x58, 0x1e, 0x21, 0xd4, + 0xbd, 0xd4, 0x39, 0x36, 0x84, 0xfa, 0x75, 0x98, 0x74, 0xfd, 0x30, 0x20, 0x9b, 0x51, 0x98, 0x84, + 0x6e, 0xe8, 0x0b, 0x1f, 0x55, 0x99, 0x84, 0x45, 0x13, 0x89, 0xd3, 0xb4, 0xfd, 0xe2, 0xaf, 0x2b, + 0x27, 0x8d, 0xbf, 0x86, 0xc7, 0x14, 0x7f, 0xfd, 0x67, 0x05, 0x98, 0x3d, 0xe6, 0xa3, 0xa2, 0xd7, + 0x60, 0x22, 0x8c, 0x1a, 0x4e, 0xe0, 0xbd, 0xc3, 0xd3, 0xdf, 0x4a, 0xe9, 0xea, 0x04, 0x1b, 0x06, + 0x0e, 0xa7, 0x28, 0x65, 0x84, 0xe6, 0x68, 0x9f, 0x08, 0xcd, 0x0f, 0xc1, 0x78, 0x42, 0x9c, 0xa6, + 0x08, 0x18, 0x10, 0xeb, 0x0a, 0x7d, 0x4e, 0xa3, 0x51, 0xd8, 0xa4, 0xa3, 0xdd, 0x68, 0xca, 0x71, + 0x5d, 0x12, 0xc7, 0x32, 0x04, 0x53, 0xec, 0x79, 0xe4, 0x16, 0xdf, 0xc9, 0xb6, 0x92, 0x16, 0x52, + 0x22, 0x70, 0x46, 0x24, 0x55, 0xde, 0xf1, 0x7d, 0x1e, 0x6d, 0x4d, 0xe4, 0xd5, 0x9c, 0x3a, 0x59, + 0x5e, 0xa3, 0xb0, 0x49, 0x67, 0xff, 0x46, 0x01, 0x9e, 0x7f, 0xa0, 0x79, 0x19, 0x38, 0x3a, 0xb6, + 0x1d, 0x93, 0x28, 0x7b, 0xce, 0x71, 0x2b, 0x26, 0x11, 0x66, 0x18, 0xde, 0x4a, 0xad, 0x96, 0x71, + 0x75, 0x45, 0xde, 0xc1, 0xd8, 0xbc, 0x95, 0x52, 0x22, 0x70, 0x46, 0x64, 0xb6, 0x95, 0x46, 0x06, + 0x6c, 0xa5, 0x7f, 0x5c, 0x80, 0x17, 0x06, 0x30, 0xc2, 0x39, 0x06, 0xad, 0xa7, 0x83, 0xfe, 0x8b, + 0x8f, 0x27, 0xe8, 0xff, 0x61, 0x9b, 0xeb, 0x5b, 0x05, 0xb8, 0xd8, 0xdf, 0x16, 0xa2, 0x9f, 0xa4, + 0x6b, 0x13, 0x19, 0xc3, 0x60, 0x26, 0x0c, 0x9c, 0xe3, 0xeb, 0x92, 0x14, 0x0a, 0x67, 0x69, 0xd1, + 0x1c, 0x40, 0xcb, 0x49, 0x76, 0xe3, 0xab, 0x07, 0x5e, 0x9c, 0x88, 0x54, 0xb7, 0x29, 0xbe, 0xc3, + 0x2c, 0xa1, 0xd8, 0xa0, 0xa0, 0xe2, 0xd8, 0xbf, 0xa5, 0x70, 0x3d, 0x4c, 0xf8, 0x43, 0xdc, 0x8f, + 0x3b, 0xc7, 0xef, 0xd2, 0x4d, 0xa1, 0x70, 0x96, 0x96, 0x8a, 0x63, 0x67, 0x18, 0x5c, 0x51, 0x71, + 0xef, 0x30, 0x15, 0xb7, 0xaa, 0xa0, 0xd8, 0xa0, 0xc8, 0xa6, 0x42, 0x94, 0x06, 0x48, 0x85, 0xf8, + 0x67, 0x05, 0x78, 0xa6, 0xef, 0x5c, 0x3a, 0xd8, 0x00, 0x7c, 0xf2, 0x72, 0x20, 0x1e, 0xae, 0xef, + 0x0c, 0x19, 0xd9, 0xff, 0x5f, 0xfa, 0xf4, 0x34, 0x11, 0xd9, 0x9f, 0x9d, 0x2a, 0xac, 0x61, 0xa7, + 0x8a, 0x27, 0xa8, 0x3d, 0xbb, 0x82, 0xf9, 0x47, 0x86, 0x08, 0xe6, 0xcf, 0x7c, 0x8c, 0xd2, 0x80, + 0x03, 0xf9, 0xbb, 0xfd, 0x9b, 0x97, 0xfa, 0xde, 0x03, 0xed, 0xfa, 0x2c, 0xc1, 0x59, 0x71, 0x81, + 0xf9, 0x56, 0x7b, 0x47, 0x24, 0x42, 0x16, 0xd2, 0xd7, 0xb8, 0xac, 0x64, 0xf0, 0xb8, 0xeb, 0x89, + 0x27, 0x30, 0xb9, 0xe2, 0x21, 0x9b, 0xf4, 0x13, 0x50, 0x51, 0xbc, 0x79, 0xc0, 0xa1, 0xfa, 0xa0, + 0x5d, 0x01, 0x87, 0xea, 0x6b, 0x1a, 0x54, 0xb4, 0x25, 0xf6, 0x48, 0x27, 0xdb, 0x33, 0x6f, 0x92, + 0x0e, 0x3b, 0x7c, 0xb4, 0x7f, 0x0c, 0x26, 0xd4, 0x22, 0x72, 0xd0, 0x52, 0x92, 0xf6, 0xff, 0x1c, + 0x81, 0xc9, 0x54, 0xc2, 0x7b, 0x6a, 0x2b, 0xc4, 0x3a, 0x76, 0x2b, 0x84, 0x85, 0x68, 0xb6, 0x03, + 0x59, 0x69, 0xd5, 0x08, 0xd1, 0x6c, 0x07, 0x04, 0x73, 0x1c, 0x5d, 0xba, 0xd7, 0xa2, 0x0e, 0x6e, + 0x07, 0x22, 0xd0, 0x4b, 0x2d, 0xdd, 0x97, 0x18, 0x14, 0x0b, 0x2c, 0xfa, 0xb4, 0x05, 0x13, 0x31, + 0xdb, 0x67, 0xe3, 0x1b, 0x49, 0xe2, 0x83, 0xde, 0xc8, 0xe3, 0x86, 0x4d, 0x51, 0xdc, 0x81, 0x9d, + 0x11, 0x9b, 0x10, 0x9c, 0x92, 0x88, 0x7e, 0xd9, 0x32, 0xef, 0x16, 0x1d, 0xcd, 0x23, 0x40, 0x31, + 0x5b, 0x4f, 0x80, 0x6f, 0xb3, 0x3c, 0xf8, 0x8a, 0xd1, 0x58, 0xed, 0xf2, 0x8c, 0x9d, 0xce, 0x2e, + 0x0f, 0xf4, 0xd8, 0xe1, 0xf9, 0x20, 0x54, 0x9a, 0x4e, 0xe0, 0xd5, 0x49, 0x9c, 0xc4, 0x33, 0x65, + 0xa3, 0xcc, 0x89, 0x04, 0x62, 0x8d, 0xa7, 0x93, 0x5d, 0xcc, 0x5e, 0x8c, 0x9f, 0x8b, 0x55, 0xf4, + 0xa5, 0x07, 0x5b, 0x1a, 0x8c, 0x4d, 0x1a, 0xfb, 0x9f, 0x5a, 0x70, 0xa1, 0x67, 0x63, 0x3c, 0xb9, + 0x11, 0x35, 0x74, 0x82, 0x3e, 0xd7, 0xa3, 0x20, 0x04, 0xea, 0x9c, 0xda, 0x15, 0xb4, 0xa2, 0xe2, + 0xc4, 0x64, 0xdf, 0xbe, 0x31, 0xdc, 0x5e, 0xa5, 0xde, 0x2f, 0x2c, 0x3e, 0xd2, 0xfd, 0x42, 0xfb, + 0xdd, 0x22, 0x18, 0x97, 0x25, 0xa3, 0x5f, 0x30, 0x6b, 0x9f, 0x58, 0x79, 0xd5, 0xe9, 0xe0, 0xcc, + 0x55, 0xed, 0x14, 0xde, 0x6a, 0xbd, 0x4a, 0xa9, 0x64, 0xfb, 0x6b, 0xe1, 0xf8, 0xfe, 0x8a, 0x7c, + 0x59, 0x64, 0xa6, 0x98, 0x7f, 0x91, 0x99, 0x4a, 0xb6, 0xc0, 0x0c, 0xfa, 0x1d, 0x0b, 0x66, 0x9a, + 0x7d, 0x8a, 0xa1, 0xe5, 0x93, 0xfb, 0xdb, 0xaf, 0xd4, 0x1a, 0xbb, 0xf8, 0xbf, 0x6f, 0x0d, 0x3a, + 0xdc, 0x57, 0x2b, 0xfb, 0xef, 0x59, 0x7c, 0x70, 0x64, 0xbe, 0x82, 0x9e, 0x14, 0xac, 0x07, 0x4c, + 0x0a, 0x2f, 0xb1, 0x7b, 0x88, 0xea, 0xd7, 0x89, 0xe3, 0x8b, 0xc9, 0xc3, 0xbc, 0x52, 0x88, 0xc1, + 0xb1, 0xa2, 0x60, 0x55, 0xcb, 0x7d, 0x3f, 0xbc, 0x77, 0xb5, 0xd9, 0x4a, 0x3a, 0x62, 0x1a, 0xd1, + 0x55, 0xcb, 0x15, 0x06, 0x1b, 0x54, 0xf6, 0x9f, 0x5b, 0xbc, 0x07, 0x8a, 0x93, 0xaa, 0xd7, 0x32, + 0x55, 0x76, 0x07, 0x3f, 0xe4, 0xf9, 0x39, 0x00, 0x57, 0x5d, 0x41, 0x92, 0xcf, 0xb5, 0xcf, 0xfa, + 0x4a, 0x13, 0xf3, 0x2e, 0x62, 0x09, 0xc3, 0x86, 0xbc, 0xd4, 0x78, 0x2f, 0x1e, 0x37, 0xde, 0xed, + 0x3f, 0xb3, 0x20, 0x35, 0xbf, 0xa1, 0x16, 0x94, 0xa8, 0x06, 0x9d, 0x7c, 0x2e, 0x4c, 0x31, 0x59, + 0x53, 0x5b, 0x20, 0x7a, 0x32, 0xfb, 0x89, 0xb9, 0x20, 0xe4, 0x8b, 0x33, 0xaa, 0x42, 0x1e, 0x97, + 0xfa, 0x98, 0x02, 0xaf, 0x87, 0xe1, 0x1e, 0xdf, 0x83, 0xd7, 0xe7, 0x5d, 0xf6, 0x6b, 0x30, 0xdd, + 0xa5, 0x14, 0xab, 0x91, 0x19, 0xca, 0x5b, 0x62, 0x8c, 0x1e, 0xc8, 0x2a, 0xf6, 0x62, 0x8e, 0xb3, + 0xbf, 0x65, 0xc1, 0xd9, 0x2c, 0x7b, 0xf4, 0x75, 0x0b, 0xa6, 0xe3, 0x2c, 0xbf, 0xd3, 0x6a, 0x3b, + 0x15, 0xbf, 0xd1, 0x85, 0xc2, 0xdd, 0x4a, 0xd8, 0xff, 0xbf, 0xc0, 0xfb, 0xf3, 0x1d, 0x2f, 0xa8, + 0x85, 0xf7, 0xd4, 0x7c, 0x68, 0xf5, 0x9d, 0x0f, 0xe9, 0x10, 0x73, 0x77, 0x49, 0xad, 0xed, 0x77, + 0x65, 0xa8, 0x6c, 0x09, 0x38, 0x56, 0x14, 0xa9, 0x2b, 0x59, 0x8b, 0xc7, 0x5e, 0xc9, 0xfa, 0x2a, + 0x4c, 0x98, 0x37, 0x21, 0x89, 0x74, 0x77, 0xe6, 0x5e, 0x99, 0x97, 0x26, 0xe1, 0x14, 0x55, 0xe6, + 0x2e, 0xcc, 0xd2, 0xb1, 0x77, 0x61, 0xbe, 0x08, 0x65, 0x71, 0xaf, 0xa3, 0x8c, 0x72, 0xe2, 0xe9, + 0x2f, 0x02, 0x86, 0x15, 0x96, 0x1a, 0x88, 0xa6, 0x13, 0xb4, 0x1d, 0x9f, 0xb6, 0x90, 0xc8, 0x8a, + 0x53, 0x23, 0x6b, 0x4d, 0x61, 0xb0, 0x41, 0x45, 0xdf, 0x38, 0xf1, 0x9a, 0xe4, 0xad, 0x30, 0x90, + 0xf1, 0x01, 0x7a, 0x87, 0x52, 0xc0, 0xb1, 0xa2, 0xb0, 0xff, 0x87, 0x05, 0xd9, 0x4b, 0xe9, 0x52, + 0x6b, 0x56, 0xeb, 0xd8, 0x4c, 0xbc, 0x74, 0x96, 0x51, 0x61, 0xa0, 0x2c, 0x23, 0x33, 0x01, 0xa8, + 0xf8, 0xc0, 0x04, 0xa0, 0x1f, 0xd1, 0x95, 0xd6, 0x79, 0xa6, 0xd0, 0x78, 0xaf, 0x2a, 0xeb, 0xc8, + 0x86, 0x51, 0xd7, 0x51, 0x89, 0xce, 0x13, 0xdc, 0x13, 0x5c, 0x5c, 0x60, 0x44, 0x02, 0x53, 0xdd, + 0xf9, 0xce, 0xf7, 0x2f, 0xbd, 0xef, 0xbb, 0xdf, 0xbf, 0xf4, 0xbe, 0x3f, 0xfc, 0xfe, 0xa5, 0xf7, + 0x7d, 0xfa, 0xe8, 0x92, 0xf5, 0x9d, 0xa3, 0x4b, 0xd6, 0x77, 0x8f, 0x2e, 0x59, 0x7f, 0x78, 0x74, + 0xc9, 0x7a, 0xf7, 0xe8, 0x92, 0xf5, 0x95, 0xff, 0x76, 0xe9, 0x7d, 0x6f, 0xf5, 0x8c, 0xe7, 0xa0, + 0x3f, 0x5e, 0x76, 0x6b, 0xf3, 0xfb, 0x57, 0x58, 0x48, 0x01, 0x1d, 0x0d, 0xf3, 0x46, 0x17, 0x98, + 0x97, 0xa3, 0xe1, 0x2f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x82, 0xa3, 0x6a, 0x27, 0xe2, 0xb4, 0x00, + 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -8105,7 +8141,7 @@ func (m *ListGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MatrixGenerator) Marshal() (dAtA []byte, err error) { +func (m *ManagedNamespaceMetadata) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -8115,36 +8151,60 @@ func (m *MatrixGenerator) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MatrixGenerator) MarshalTo(dAtA []byte) (int, error) { +func (m *ManagedNamespaceMetadata) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MatrixGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ManagedNamespaceMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - { - size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err + if len(m.Annotations) > 0 { + keysForAnnotations := make([]string, 0, len(m.Annotations)) + for k := range m.Annotations { + keysForAnnotations = append(keysForAnnotations, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + for iNdEx := len(keysForAnnotations) - 1; iNdEx >= 0; iNdEx-- { + v := m.Annotations[string(keysForAnnotations[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForAnnotations[iNdEx]) + copy(dAtA[i:], keysForAnnotations[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForAnnotations[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) } - i-- - dAtA[i] = 0x12 - if len(m.Generators) > 0 { - for iNdEx := len(m.Generators) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Generators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } + if len(m.Labels) > 0 { + keysForLabels := make([]string, 0, len(m.Labels)) + for k := range m.Labels { + keysForLabels = append(keysForLabels, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) + for iNdEx := len(keysForLabels) - 1; iNdEx >= 0; iNdEx-- { + v := m.Labels[string(keysForLabels[iNdEx])] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintGenerated(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(keysForLabels[iNdEx]) + copy(dAtA[i:], keysForLabels[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(keysForLabels[iNdEx]))) + i-- + dAtA[i] = 0xa + i = encodeVarintGenerated(dAtA, i, uint64(baseI-i)) i-- dAtA[i] = 0xa } @@ -8152,7 +8212,7 @@ func (m *MatrixGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *MergeGenerator) Marshal() (dAtA []byte, err error) { +func (m *MatrixGenerator) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -8162,12 +8222,12 @@ func (m *MergeGenerator) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *MergeGenerator) MarshalTo(dAtA []byte) (int, error) { +func (m *MatrixGenerator) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *MergeGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MatrixGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -8181,16 +8241,7 @@ func (m *MergeGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a - if len(m.MergeKeys) > 0 { - for iNdEx := len(m.MergeKeys) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.MergeKeys[iNdEx]) - copy(dAtA[i:], m.MergeKeys[iNdEx]) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.MergeKeys[iNdEx]))) - i-- - dAtA[i] = 0x12 - } - } + dAtA[i] = 0x12 if len(m.Generators) > 0 { for iNdEx := len(m.Generators) - 1; iNdEx >= 0; iNdEx-- { { @@ -8208,7 +8259,7 @@ func (m *MergeGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *NestedMatrixGenerator) Marshal() (dAtA []byte, err error) { +func (m *MergeGenerator) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -8218,53 +8269,109 @@ func (m *NestedMatrixGenerator) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *NestedMatrixGenerator) MarshalTo(dAtA []byte) (int, error) { +func (m *MergeGenerator) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *NestedMatrixGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *MergeGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l - if len(m.Generators) > 0 { - for iNdEx := len(m.Generators) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Generators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa + { + size, err := m.Template.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) } - return len(dAtA) - i, nil -} - -func (m *NestedMergeGenerator) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *NestedMergeGenerator) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *NestedMergeGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l + i-- + dAtA[i] = 0x1a + if len(m.MergeKeys) > 0 { + for iNdEx := len(m.MergeKeys) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.MergeKeys[iNdEx]) + copy(dAtA[i:], m.MergeKeys[iNdEx]) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.MergeKeys[iNdEx]))) + i-- + dAtA[i] = 0x12 + } + } + if len(m.Generators) > 0 { + for iNdEx := len(m.Generators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Generators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *NestedMatrixGenerator) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NestedMatrixGenerator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NestedMatrixGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Generators) > 0 { + for iNdEx := len(m.Generators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Generators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *NestedMergeGenerator) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NestedMergeGenerator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NestedMergeGenerator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l if len(m.MergeKeys) > 0 { for iNdEx := len(m.MergeKeys) - 1; iNdEx >= 0; iNdEx-- { i -= len(m.MergeKeys[iNdEx]) @@ -11249,6 +11356,18 @@ func (m *SyncPolicy) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.ManagedNamespaceMetadata != nil { + { + size, err := m.ManagedNamespaceMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } if m.Retry != nil { { size, err := m.Retry.MarshalToSizedBuffer(dAtA[:i]) @@ -13050,6 +13169,31 @@ func (m *ListGenerator) Size() (n int) { return n } +func (m *ManagedNamespaceMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Labels) > 0 { + for k, v := range m.Labels { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Annotations) > 0 { + for k, v := range m.Annotations { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + func (m *MatrixGenerator) Size() (n int) { if m == nil { return 0 @@ -14248,6 +14392,10 @@ func (m *SyncPolicy) Size() (n int) { l = m.Retry.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.ManagedNamespaceMetadata != nil { + l = m.ManagedNamespaceMetadata.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -15493,6 +15641,37 @@ func (this *ListGenerator) String() string { }, "") return s } +func (this *ManagedNamespaceMetadata) String() string { + if this == nil { + return "nil" + } + keysForLabels := make([]string, 0, len(this.Labels)) + for k := range this.Labels { + keysForLabels = append(keysForLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) + mapStringForLabels := "map[string]string{" + for _, k := range keysForLabels { + mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) + } + mapStringForLabels += "}" + keysForAnnotations := make([]string, 0, len(this.Annotations)) + for k := range this.Annotations { + keysForAnnotations = append(keysForAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + mapStringForAnnotations := "map[string]string{" + for _, k := range keysForAnnotations { + mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) + } + mapStringForAnnotations += "}" + s := strings.Join([]string{`&ManagedNamespaceMetadata{`, + `Labels:` + mapStringForLabels + `,`, + `Annotations:` + mapStringForAnnotations + `,`, + `}`, + }, "") + return s +} func (this *MatrixGenerator) String() string { if this == nil { return "nil" @@ -16337,6 +16516,7 @@ func (this *SyncPolicy) String() string { `Automated:` + strings.Replace(this.Automated.String(), "SyncPolicyAutomated", "SyncPolicyAutomated", 1) + `,`, `SyncOptions:` + fmt.Sprintf("%v", this.SyncOptions) + `,`, `Retry:` + strings.Replace(this.Retry.String(), "RetryStrategy", "RetryStrategy", 1) + `,`, + `ManagedNamespaceMetadata:` + strings.Replace(this.ManagedNamespaceMetadata.String(), "ManagedNamespaceMetadata", "ManagedNamespaceMetadata", 1) + `,`, `}`, }, "") return s @@ -28701,6 +28881,310 @@ func (m *ListGenerator) Unmarshal(dAtA []byte) error { } return nil } +func (m *ManagedNamespaceMetadata) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ManagedNamespaceMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ManagedNamespaceMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Labels", 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.Labels == nil { + m.Labels = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Labels[mapkey] = mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Annotations", 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.Annotations == nil { + m.Annotations = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Annotations[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *MatrixGenerator) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -39401,6 +39885,42 @@ func (m *SyncPolicy) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ManagedNamespaceMetadata", 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.ManagedNamespaceMetadata == nil { + m.ManagedNamespaceMetadata = &ManagedNamespaceMetadata{} + } + if err := m.ManagedNamespaceMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 323e52cd48abd..20b1b9866ed12 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -926,6 +926,12 @@ message ListGenerator { optional ApplicationSetTemplate template = 2; } +message ManagedNamespaceMetadata { + map labels = 1; + + map annotations = 2; +} + // MatrixGenerator generates the cartesian product of two sets of parameters. The parameters are defined by two nested // generators. message MatrixGenerator { @@ -1802,6 +1808,9 @@ message SyncPolicy { // Retry controls failed sync retry behavior optional RetryStrategy retry = 3; + + // ManagedNamespaceMetadata controls metadata in the given namespace (if CreateNamespace=true) + optional ManagedNamespaceMetadata managedNamespaceMetadata = 4; } // SyncPolicyAutomated controls the behavior of an automated sync diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index c67b64eea2eb0..fdd836709feae 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -80,6 +80,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.KnownTypeField": schema_pkg_apis_application_v1alpha1_KnownTypeField(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.KustomizeOptions": schema_pkg_apis_application_v1alpha1_KustomizeOptions(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ListGenerator": schema_pkg_apis_application_v1alpha1_ListGenerator(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ManagedNamespaceMetadata": schema_pkg_apis_application_v1alpha1_ManagedNamespaceMetadata(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.MatrixGenerator": schema_pkg_apis_application_v1alpha1_MatrixGenerator(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.MergeGenerator": schema_pkg_apis_application_v1alpha1_MergeGenerator(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.NestedMatrixGenerator": schema_pkg_apis_application_v1alpha1_NestedMatrixGenerator(ref), @@ -3282,6 +3283,48 @@ func schema_pkg_apis_application_v1alpha1_ListGenerator(ref common.ReferenceCall } } +func schema_pkg_apis_application_v1alpha1_ManagedNamespaceMetadata(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "labels": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + "annotations": { + SchemaProps: spec.SchemaProps{ + Type: []string{"object"}, + AdditionalProperties: &spec.SchemaOrBool{ + Allows: true, + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + }, + }, + }, + } +} + func schema_pkg_apis_application_v1alpha1_MatrixGenerator(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -6111,11 +6154,17 @@ func schema_pkg_apis_application_v1alpha1_SyncPolicy(ref common.ReferenceCallbac Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.RetryStrategy"), }, }, + "managedNamespaceMetadata": { + SchemaProps: spec.SchemaProps{ + Description: "ManagedNamespaceMetadata controls metadata in the given namespace (if CreateNamespace=true)", + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ManagedNamespaceMetadata"), + }, + }, }, }, }, Dependencies: []string{ - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.RetryStrategy", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncPolicyAutomated"}, + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ManagedNamespaceMetadata", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.RetryStrategy", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncPolicyAutomated"}, } } diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index b1b5a71c6f47b..29821ab9407e7 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -698,6 +698,11 @@ func (o SyncOptions) HasOption(option string) bool { return false } +type ManagedNamespaceMetadata struct { + Labels map[string]string `json:"labels,omitempty" protobuf:"bytes,1,opt,name=labels"` + Annotations map[string]string `json:"annotations,omitempty" protobuf:"bytes,2,opt,name=annotations"` +} + // SyncPolicy controls when a sync will be performed in response to updates in git type SyncPolicy struct { // Automated will keep an application synced to the target revision @@ -706,6 +711,8 @@ type SyncPolicy struct { SyncOptions SyncOptions `json:"syncOptions,omitempty" protobuf:"bytes,2,opt,name=syncOptions"` // Retry controls failed sync retry behavior Retry *RetryStrategy `json:"retry,omitempty" protobuf:"bytes,3,opt,name=retry"` + // ManagedNamespaceMetadata controls metadata in the given namespace (if CreateNamespace=true) + ManagedNamespaceMetadata *ManagedNamespaceMetadata `json:"managedNamespaceMetadata,omitempty" protobuf:"bytes,4,opt,name=managedNamespaceMetadata"` } // IsZero returns true if the sync policy is empty diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index ef7b43bf4869d..379167df25754 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -1837,6 +1837,36 @@ func (in *ListGenerator) DeepCopy() *ListGenerator { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ManagedNamespaceMetadata) DeepCopyInto(out *ManagedNamespaceMetadata) { + *out = *in + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManagedNamespaceMetadata. +func (in *ManagedNamespaceMetadata) DeepCopy() *ManagedNamespaceMetadata { + if in == nil { + return nil + } + out := new(ManagedNamespaceMetadata) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *MatrixGenerator) DeepCopyInto(out *MatrixGenerator) { *out = *in @@ -3223,6 +3253,11 @@ func (in *SyncPolicy) DeepCopyInto(out *SyncPolicy) { *out = new(RetryStrategy) (*in).DeepCopyInto(*out) } + if in.ManagedNamespaceMetadata != nil { + in, out := &in.ManagedNamespaceMetadata, &out.ManagedNamespaceMetadata + *out = new(ManagedNamespaceMetadata) + (*in).DeepCopyInto(*out) + } return } diff --git a/test/e2e/app_management_ns_test.go b/test/e2e/app_management_ns_test.go index 414b7679fd017..50319b5a331ca 100644 --- a/test/e2e/app_management_ns_test.go +++ b/test/e2e/app_management_ns_test.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "math/rand" + "os" "path" "reflect" "strings" @@ -1816,12 +1817,12 @@ func TestNamespacedListResource(t *testing.T) { // Given application is set with --sync-option CreateNamespace=true // -// application --dest-namespace does not exist +// application --dest-namespace does not exist // -// Verity application --dest-namespace is created +// Verify application --dest-namespace is created // -// application sync successful -// when application is deleted, --dest-namespace is not deleted +// application sync successful +// when application is deleted, --dest-namespace is not deleted func TestNamespacedNamespaceAutoCreation(t *testing.T) { SkipOnEnv(t, "OPENSHIFT") updatedNamespace := getNewNamespace(t) @@ -1839,12 +1840,7 @@ func TestNamespacedNamespaceAutoCreation(t *testing.T) { When(). CreateApp("--sync-option", "CreateNamespace=true"). Then(). - And(func(app *Application) { - //Make sure the namespace we are about to update to does not exist - _, err := Run("", "kubectl", "get", "namespace", updatedNamespace) - assert.Error(t, err) - assert.Contains(t, err.Error(), "not found") - }). + Expect(NoNamespace(updatedNamespace)). When(). AppSet("--dest-namespace", updatedNamespace). Sync(). @@ -1866,6 +1862,302 @@ func TestNamespacedNamespaceAutoCreation(t *testing.T) { }) } +// Given application is set with --sync-option CreateNamespace=true +// +// application --dest-namespace does not exist +// +// Verify application --dest-namespace is created with managedNamespaceMetadata +func TestNamespacedNamespaceAutoCreationWithMetadata(t *testing.T) { + SkipOnEnv(t, "OPENSHIFT") + updatedNamespace := getNewNamespace(t) + defer func() { + if !t.Skipped() { + _, err := Run("", "kubectl", "delete", "namespace", updatedNamespace) + assert.NoError(t, err) + } + }() + ctx := Given(t) + ctx. + SetAppNamespace(AppNamespace()). + SetTrackingMethod("annotation"). + Timeout(30). + Path("guestbook"). + When(). + CreateFromFile(func(app *Application) { + app.Spec.SyncPolicy = &SyncPolicy{ + SyncOptions: SyncOptions{"CreateNamespace=true"}, + ManagedNamespaceMetadata: &ManagedNamespaceMetadata{ + Labels: map[string]string{"foo": "bar"}, + Annotations: map[string]string{"bar": "bat"}, + }} + }). + Then(). + Expect(NoNamespace(updatedNamespace)). + When(). + AppSet("--dest-namespace", updatedNamespace). + Sync(). + Then(). + Expect(Success("")). + Expect(Namespace(updatedNamespace, func(app *Application, ns *v1.Namespace) { + assert.Empty(t, app.Status.Conditions) + + trackingId := ns.Annotations["argocd.argoproj.io/tracking-id"] + + delete(ns.Labels, "kubernetes.io/metadata.name") + delete(ns.Labels, "argocd.argoproj.io/tracking-id") + delete(ns.Annotations, "argocd.argoproj.io/tracking-id") + delete(ns.Annotations, "kubectl.kubernetes.io/last-applied-configuration") + + assert.Equal(t, fmt.Sprintf("%s:/Namespace:/%s", app.Name, updatedNamespace), trackingId) + + assert.Equal(t, map[string]string{"foo": "bar"}, ns.Labels) + assert.Equal(t, map[string]string{"bar": "bat", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, ns.Annotations) + assert.Equal(t, map[string]string{"foo": "bar"}, app.Spec.SyncPolicy.ManagedNamespaceMetadata.Labels) + assert.Equal(t, map[string]string{"bar": "bat"}, app.Spec.SyncPolicy.ManagedNamespaceMetadata.Annotations) + })). + Expect(OperationPhaseIs(OperationSucceeded)).Expect(ResourceHealthWithNamespaceIs("Deployment", "guestbook-ui", updatedNamespace, health.HealthStatusHealthy)). + Expect(ResourceHealthWithNamespaceIs("Deployment", "guestbook-ui", updatedNamespace, health.HealthStatusHealthy)). + Expect(ResourceSyncStatusWithNamespaceIs("Deployment", "guestbook-ui", updatedNamespace, SyncStatusCodeSynced)). + When(). + And(func() { + FailOnErr(AppClientset.ArgoprojV1alpha1().Applications(AppNamespace()).Patch(context.Background(), + ctx.GetName(), types.JSONPatchType, []byte(`[{ "op": "replace", "path": "/spec/syncPolicy/managedNamespaceMetadata/labels", "value": {"new":"label"} }]`), metav1.PatchOptions{})) + }). + Sync(). + Then(). + Expect(Success("")). + Expect(Namespace(updatedNamespace, func(app *Application, ns *v1.Namespace) { + trackingId := ns.Annotations["argocd.argoproj.io/tracking-id"] + + delete(ns.Labels, "kubernetes.io/metadata.name") + delete(ns.Labels, "argocd.argoproj.io/tracking-id") + delete(ns.Annotations, "kubectl.kubernetes.io/last-applied-configuration") + delete(ns.Annotations, "argocd.argoproj.io/tracking-id") + + assert.Equal(t, fmt.Sprintf("%s:/Namespace:/%s", app.Name, updatedNamespace), trackingId) + + assert.Equal(t, map[string]string{"new": "label"}, ns.Labels) + assert.Equal(t, map[string]string{"bar": "bat", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, ns.Annotations) + assert.Equal(t, map[string]string{"new": "label"}, app.Spec.SyncPolicy.ManagedNamespaceMetadata.Labels) + assert.Equal(t, map[string]string{"bar": "bat"}, app.Spec.SyncPolicy.ManagedNamespaceMetadata.Annotations) + })). + When(). + And(func() { + FailOnErr(AppClientset.ArgoprojV1alpha1().Applications(AppNamespace()).Patch(context.Background(), + ctx.GetName(), types.JSONPatchType, []byte(`[{ "op": "replace", "path": "/spec/syncPolicy/managedNamespaceMetadata/annotations", "value": {"new":"custom-annotation"} }]`), metav1.PatchOptions{})) + }). + Sync(). + Then(). + Expect(Success("")). + Expect(Namespace(updatedNamespace, func(app *Application, ns *v1.Namespace) { + trackingId := ns.Annotations["argocd.argoproj.io/tracking-id"] + + delete(ns.Labels, "kubernetes.io/metadata.name") + delete(ns.Labels, "argocd.argoproj.io/tracking-id") + delete(ns.Annotations, "argocd.argoproj.io/tracking-id") + delete(ns.Annotations, "kubectl.kubernetes.io/last-applied-configuration") + + assert.Equal(t, fmt.Sprintf("%s:/Namespace:/%s", app.Name, updatedNamespace), trackingId) + + assert.Equal(t, map[string]string{"new": "label"}, ns.Labels) + assert.Equal(t, map[string]string{"new": "custom-annotation", "argocd.argoproj.io/sync-options": "ServerSideApply=true"}, ns.Annotations) + assert.Equal(t, map[string]string{"new": "label"}, app.Spec.SyncPolicy.ManagedNamespaceMetadata.Labels) + assert.Equal(t, map[string]string{"new": "custom-annotation"}, app.Spec.SyncPolicy.ManagedNamespaceMetadata.Annotations) + })) +} + +// Given application is set with --sync-option CreateNamespace=true +// +// application --dest-namespace does not exist +// +// Verify application namespace manifest takes precedence over managedNamespaceMetadata +func TestNamespacedNamespaceAutoCreationWithMetadataAndNsManifest(t *testing.T) { + SkipOnEnv(t, "OPENSHIFT") + namespace := "guestbook-ui-with-namespace-manifest" + defer func() { + if !t.Skipped() { + _, err := Run("", "kubectl", "delete", "namespace", namespace) + assert.NoError(t, err) + } + }() + + ctx := Given(t) + ctx. + SetAppNamespace(AppNamespace()). + SetTrackingMethod("annotation"). + Timeout(30). + Path("guestbook-with-namespace-manifest"). + When(). + CreateFromFile(func(app *Application) { + app.Spec.SyncPolicy = &SyncPolicy{ + SyncOptions: SyncOptions{"CreateNamespace=true"}, + ManagedNamespaceMetadata: &ManagedNamespaceMetadata{ + Labels: map[string]string{"foo": "bar", "abc": "123"}, + Annotations: map[string]string{"bar": "bat"}, + }} + }). + Then(). + Expect(NoNamespace(namespace)). + When(). + AppSet("--dest-namespace", namespace). + Sync(). + Then(). + Expect(Success("")). + Expect(Namespace(namespace, func(app *Application, ns *v1.Namespace) { + //assert.NotEmpty(t, app.Status.Conditions) + + //trackingId := ns.Annotations["argocd.argoproj.io/tracking-id"] + + delete(ns.Labels, "kubernetes.io/metadata.name") + delete(ns.Labels, "argocd.argoproj.io/tracking-id") + delete(ns.Labels, "kubectl.kubernetes.io/last-applied-configuration") + delete(ns.Annotations, "argocd.argoproj.io/tracking-id") + delete(ns.Annotations, "kubectl.kubernetes.io/last-applied-configuration") + + //assert.Equal(t, fmt.Sprintf("%s:/Namespace:/%s/%s", AppNamespace(), namespace, namespace), trackingId) + + // The application namespace manifest takes precedence over what is in managedNamespaceMetadata + assert.Equal(t, map[string]string{"test": "true"}, ns.Labels) + assert.Equal(t, map[string]string{"foo": "bar", "something": "else"}, ns.Annotations) + })). + Expect(OperationPhaseIs(OperationSucceeded)).Expect(ResourceHealthWithNamespaceIs("Deployment", "guestbook-ui", namespace, health.HealthStatusHealthy)). + Expect(ResourceHealthWithNamespaceIs("Deployment", "guestbook-ui", namespace, health.HealthStatusHealthy)). + Expect(ResourceSyncStatusWithNamespaceIs("Deployment", "guestbook-ui", namespace, SyncStatusCodeSynced)) +} + +// Given application is set with --sync-option CreateNamespace=true +// +// application --dest-namespace exists +// +// Verify application --dest-namespace is updated with managedNamespaceMetadata labels and annotations +func TestNamespacedNamespaceAutoCreationWithPreexistingNs(t *testing.T) { + SkipOnEnv(t, "OPENSHIFT") + updatedNamespace := getNewNamespace(t) + defer func() { + if !t.Skipped() { + _, err := Run("", "kubectl", "delete", "namespace", updatedNamespace) + assert.NoError(t, err) + } + }() + + existingNs := ` +apiVersion: v1 +kind: Namespace +metadata: + name: %s + labels: + test: "true" + annotations: + something: "whatevs" +` + s := fmt.Sprintf(existingNs, updatedNamespace) + + tmpFile, err := os.CreateTemp("", "") + errors.CheckError(err) + _, err = tmpFile.Write([]byte(s)) + errors.CheckError(err) + + _, err = Run("", "kubectl", "apply", "-f", tmpFile.Name()) + assert.NoError(t, err) + + ctx := Given(t) + ctx. + SetAppNamespace(AppNamespace()). + SetTrackingMethod("annotation"). + Timeout(30). + Path("guestbook"). + When(). + CreateFromFile(func(app *Application) { + app.Spec.SyncPolicy = &SyncPolicy{ + SyncOptions: SyncOptions{"CreateNamespace=true"}, + ManagedNamespaceMetadata: &ManagedNamespaceMetadata{ + Labels: map[string]string{"foo": "bar"}, + Annotations: map[string]string{"bar": "bat"}, + }} + }). + Then(). + Expect(Namespace(updatedNamespace, func(app *Application, ns *v1.Namespace) { + assert.Empty(t, app.Status.Conditions) + + delete(ns.Labels, "kubernetes.io/metadata.name") + delete(ns.Annotations, "kubectl.kubernetes.io/last-applied-configuration") + + assert.Equal(t, map[string]string{"test": "true"}, ns.Labels) + assert.Equal(t, map[string]string{"something": "whatevs"}, ns.Annotations) + })). + When(). + AppSet("--dest-namespace", updatedNamespace). + Sync(). + Then(). + Expect(Success("")). + Expect(Namespace(updatedNamespace, func(app *Application, ns *v1.Namespace) { + trackingId := ns.Annotations["argocd.argoproj.io/tracking-id"] + + assert.Empty(t, app.Status.Conditions) + + delete(ns.Labels, "kubernetes.io/metadata.name") + delete(ns.Labels, "argocd.argoproj.io/tracking-id") + delete(ns.Annotations, "argocd.argoproj.io/tracking-id") + delete(ns.Annotations, "kubectl.kubernetes.io/last-applied-configuration") + + assert.Equal(t, fmt.Sprintf("%s:/Namespace:/%s", app.Name, updatedNamespace), trackingId) + + assert.Equal(t, map[string]string{"test": "true", "foo": "bar"}, ns.Labels) + assert.Equal(t, map[string]string{"argocd.argoproj.io/sync-options": "ServerSideApply=true", "something": "whatevs", "bar": "bat"}, ns.Annotations) + })). + When(). + And(func() { + FailOnErr(AppClientset.ArgoprojV1alpha1().Applications(AppNamespace()).Patch(context.Background(), + ctx.GetName(), types.JSONPatchType, []byte(`[{ "op": "add", "path": "/spec/syncPolicy/managedNamespaceMetadata/annotations/something", "value": "hmm" }]`), metav1.PatchOptions{})) + }). + Sync(). + Then(). + Expect(Success("")). + Expect(Namespace(updatedNamespace, func(app *Application, ns *v1.Namespace) { + trackingId := ns.Annotations["argocd.argoproj.io/tracking-id"] + + assert.Empty(t, app.Status.Conditions) + + delete(ns.Labels, "kubernetes.io/metadata.name") + delete(ns.Labels, "argocd.argoproj.io/tracking-id") + delete(ns.Annotations, "kubectl.kubernetes.io/last-applied-configuration") + delete(ns.Annotations, "argocd.argoproj.io/tracking-id") + + assert.Equal(t, fmt.Sprintf("%s:/Namespace:/%s", app.Name, updatedNamespace), trackingId) + + assert.Equal(t, map[string]string{"test": "true", "foo": "bar"}, ns.Labels) + assert.Equal(t, map[string]string{"argocd.argoproj.io/sync-options": "ServerSideApply=true", "something": "hmm", "bar": "bat"}, ns.Annotations) + assert.Equal(t, map[string]string{"something": "hmm", "bar": "bat"}, app.Spec.SyncPolicy.ManagedNamespaceMetadata.Annotations) + })). + When(). + And(func() { + FailOnErr(AppClientset.ArgoprojV1alpha1().Applications(AppNamespace()).Patch(context.Background(), + ctx.GetName(), types.JSONPatchType, []byte(`[{ "op": "remove", "path": "/spec/syncPolicy/managedNamespaceMetadata/annotations/something" }]`), metav1.PatchOptions{})) + }). + Sync(). + Then(). + Expect(Success("")). + Expect(Namespace(updatedNamespace, func(app *Application, ns *v1.Namespace) { + trackingId := ns.Annotations["argocd.argoproj.io/tracking-id"] + + assert.Empty(t, app.Status.Conditions) + + delete(ns.Labels, "kubernetes.io/metadata.name") + delete(ns.Labels, "argocd.argoproj.io/tracking-id") + delete(ns.Annotations, "kubectl.kubernetes.io/last-applied-configuration") + delete(ns.Annotations, "argocd.argoproj.io/tracking-id") + + assert.Equal(t, fmt.Sprintf("%s:/Namespace:/%s", app.Name, updatedNamespace), trackingId) + + assert.Equal(t, map[string]string{"test": "true", "foo": "bar"}, ns.Labels) + assert.Equal(t, map[string]string{"argocd.argoproj.io/sync-options": "ServerSideApply=true", "bar": "bat"}, ns.Annotations) + assert.Equal(t, map[string]string{"bar": "bat"}, app.Spec.SyncPolicy.ManagedNamespaceMetadata.Annotations) + })). + Expect(OperationPhaseIs(OperationSucceeded)).Expect(ResourceHealthWithNamespaceIs("Deployment", "guestbook-ui", updatedNamespace, health.HealthStatusHealthy)). + Expect(ResourceHealthWithNamespaceIs("Deployment", "guestbook-ui", updatedNamespace, health.HealthStatusHealthy)). + Expect(ResourceSyncStatusWithNamespaceIs("Deployment", "guestbook-ui", updatedNamespace, SyncStatusCodeSynced)) +} + func TestNamespacedFailedSyncWithRetry(t *testing.T) { Given(t). SetAppNamespace(AppNamespace()). diff --git a/test/e2e/fixture/app/expectation.go b/test/e2e/fixture/app/expectation.go index e06d2462461e7..14f978c84a402 100644 --- a/test/e2e/fixture/app/expectation.go +++ b/test/e2e/fixture/app/expectation.go @@ -87,6 +87,19 @@ func NoConditions() Expectation { } } +func Namespace(name string, block func(app *Application, ns *v1.Namespace)) Expectation { + return func(c *Consequences) (state, string) { + ns, err := namespace(name) + + if err != nil { + return failed, fmt.Sprintf("namespace not found %s", err.Error()) + } + + block(c.app(), ns) + return succeeded, fmt.Sprintf("namespace %s assertions passed", name) + } +} + func HealthIs(expected health.HealthStatusCode) Expectation { return func(c *Consequences) (state, string) { actual := c.app().Status.Health.Status @@ -218,6 +231,23 @@ func pods() (*v1.PodList, error) { return pods, err } +func NoNamespace(name string) Expectation { + return func(c *Consequences) (state, string) { + _, err := namespace(name) + + if err != nil { + return succeeded, "namespace not found" + } + + return failed, fmt.Sprintf("found namespace %s", name) + } +} + +func namespace(name string) (*v1.Namespace, error) { + fixture.KubeClientset.CoreV1() + return fixture.KubeClientset.CoreV1().Namespaces().Get(context.Background(), name, metav1.GetOptions{}) +} + func event(namespace string, reason string, message string) Expectation { return func(c *Consequences) (state, string) { list, err := fixture.KubeClientset.CoreV1().Events(namespace).List(context.Background(), metav1.ListOptions{ diff --git a/test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-deployment.yaml b/test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-deployment.yaml new file mode 100644 index 0000000000000..bf3375672f70c --- /dev/null +++ b/test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-deployment.yaml @@ -0,0 +1,23 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: guestbook-ui + labels: + test: "true" +spec: + replicas: 0 + revisionHistoryLimit: 3 + selector: + matchLabels: + app: guestbook-ui + template: + metadata: + labels: + app: guestbook-ui + spec: + containers: + - image: quay.io/argoprojlabs/argocd-e2e-container:0.2 + imagePullPolicy: IfNotPresent + name: guestbook-ui + ports: + - containerPort: 80 diff --git a/test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-namespace.yaml b/test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-namespace.yaml new file mode 100644 index 0000000000000..ceda849716ccb --- /dev/null +++ b/test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-namespace.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: guestbook-ui-with-namespace-manifest + labels: + test: "true" + annotations: + foo: bar + something: else diff --git a/test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-svc.yaml b/test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-svc.yaml new file mode 100644 index 0000000000000..e8a4a27fbae40 --- /dev/null +++ b/test/e2e/testdata/guestbook-with-namespace-manifest/guestbook-ui-svc.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Service +metadata: + name: guestbook-ui +spec: + ports: + - port: 80 + targetPort: 80 + selector: + app: guestbook-ui diff --git a/test/e2e/testdata/guestbook-with-namespace-manifest/kustomization.yaml b/test/e2e/testdata/guestbook-with-namespace-manifest/kustomization.yaml new file mode 100644 index 0000000000000..2fc095b980adb --- /dev/null +++ b/test/e2e/testdata/guestbook-with-namespace-manifest/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - ./guestbook-ui-namespace.yaml + - ./guestbook-ui-deployment.yaml + - ./guestbook-ui-svc.yaml