diff --git a/USERS.md b/USERS.md index 92a2fe7c1a9aa..66385e9a3013c 100644 --- a/USERS.md +++ b/USERS.md @@ -201,3 +201,4 @@ Currently, the following organizations are **officially** using Argo CD: 1. [Yubo](https://www.yubo.live/) 1. [Zimpler](https://www.zimpler.com/) 1. [ZOZO](https://corp.zozo.com/) +1. [Renault Group](https://www.renaultgroup.com/) diff --git a/assets/swagger.json b/assets/swagger.json index a2e071ae0626c..83518c0f0af3c 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -4130,6 +4130,17 @@ } } }, + "runtimeRawExtension": { + "description": "RawExtension is used to hold extensions in external versions.\n\nTo use this, make a field which has RawExtension as its type in your external, versioned\nstruct, and Object in your internal struct. You also need to register your\nvarious plugin types.\n\n// Internal package:\ntype MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.Object `json:\"myPlugin\"`\n}\ntype PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// External package:\ntype MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.RawExtension `json:\"myPlugin\"`\n}\ntype PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// On the wire, the JSON will look something like this:\n{\n\t\"kind\":\"MyAPIObject\",\n\t\"apiVersion\":\"v1\",\n\t\"myPlugin\": {\n\t\t\"kind\":\"PluginA\",\n\t\t\"aOption\":\"foo\",\n\t},\n}\n\nSo what happens? Decode first uses json or yaml to unmarshal the serialized data into\nyour external MyAPIObject. That causes the raw JSON to be stored, but not unpacked.\nThe next step is to copy (using pkg/conversion) into the internal struct. The runtime\npackage's DefaultScheme has conversion functions installed which will unpack the\nJSON stored in RawExtension, turning it into the correct object type, and storing it\nin the Object. (TODO: In the case where the object is of an unknown type, a\nruntime.Unknown object will be created and stored.)\n\n+k8s:deepcopy-gen=true\n+protobuf=true\n+k8s:openapi-gen=true", + "type": "object", + "properties": { + "raw": { + "description": "Raw is the underlying serialization of this object.\n\nTODO: Determine how to detect ContentType and ContentEncoding of 'Raw' data.", + "type": "string", + "format": "byte" + } + } + }, "runtimeStreamError": { "type": "object", "properties": { @@ -4946,8 +4957,7 @@ } }, "values": { - "type": "string", - "title": "Values specifies Helm values to be passed to helm template, typically defined as a block" + "$ref": "#/definitions/v1alpha1StringOrObject" }, "version": { "type": "string", @@ -6459,6 +6469,19 @@ } } }, + "v1alpha1StringOrObject": { + "type": "object", + "title": "+patchStrategy=replace\n+protobuf.options.(gogoproto.goproto_stringer)=false\n+kubebuilder:validation:Type=\"\"", + "properties": { + "raw": { + "$ref": "#/definitions/runtimeRawExtension" + }, + "values": { + "type": "string", + "title": "Values as string if Raw == nil" + } + } + }, "v1alpha1SyncOperation": { "description": "SyncOperation contains details about a sync operation.", "type": "object", diff --git a/cmd/argocd/commands/app.go b/cmd/argocd/commands/app.go index 04712c78d761c..8e7cac7caeb08 100644 --- a/cmd/argocd/commands/app.go +++ b/cmd/argocd/commands/app.go @@ -576,6 +576,7 @@ func NewApplicationUnsetCommand(clientOpts *argocdclient.ClientOptions) *cobra.C kustomizeImages []string pluginEnvs []string appOpts cmdutil.AppOptions + valuesRawLiteral bool ) var command = &cobra.Command{ Use: "unset APPNAME parameters", @@ -632,7 +633,7 @@ func NewApplicationUnsetCommand(clientOpts *argocdclient.ClientOptions) *cobra.C } } if app.Spec.Source.Helm != nil { - if len(parameters) == 0 && len(valuesFiles) == 0 && !valuesLiteral && !ignoreMissingValueFiles { + if len(parameters) == 0 && len(valuesFiles) == 0 && !valuesLiteral && !valuesRawLiteral && !ignoreMissingValueFiles { c.HelpFunc()(c, args) os.Exit(1) } @@ -647,7 +648,13 @@ func NewApplicationUnsetCommand(clientOpts *argocdclient.ClientOptions) *cobra.C } } if valuesLiteral { - app.Spec.Source.Helm.Values = "" + app.Spec.Source.Helm.Values.Values = "" + updated = true + } + if valuesRawLiteral { + app.Spec.Source.Helm.Values = argoappv1.StringOrObject{ + Raw: nil, + } updated = true } for _, valuesFile := range valuesFiles { @@ -705,6 +712,7 @@ func NewApplicationUnsetCommand(clientOpts *argocdclient.ClientOptions) *cobra.C command.Flags().BoolVar(&kustomizeVersion, "kustomize-version", false, "Kustomize version") command.Flags().StringArrayVar(&kustomizeImages, "kustomize-image", []string{}, "Kustomize images name (e.g. --kustomize-image node --kustomize-image mysql)") command.Flags().StringArrayVar(&pluginEnvs, "plugin-env", []string{}, "Unset plugin env variables (e.g --plugin-env name)") + command.Flags().BoolVar(&valuesRawLiteral, "values-raw-literal", false, "Unset literal Helm values raw") return command } diff --git a/cmd/util/app.go b/cmd/util/app.go index 20f851005881d..8011f48e3ea41 100644 --- a/cmd/util/app.go +++ b/cmd/util/app.go @@ -10,11 +10,13 @@ import ( "time" "github.com/argoproj/gitops-engine/pkg/utils/kube" + "sigs.k8s.io/yaml" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" "github.com/spf13/pflag" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/utils/pointer" "github.com/argoproj/argo-cd/v2/pkg/apis/application" @@ -74,6 +76,7 @@ type AppOptions struct { retryBackoffDuration time.Duration retryBackoffMaxDuration time.Duration retryBackoffFactor int64 + valuesRaw string } func AddAppFlags(command *cobra.Command, opts *AppOptions) { @@ -126,6 +129,7 @@ func AddAppFlags(command *cobra.Command, opts *AppOptions) { command.Flags().DurationVar(&opts.retryBackoffDuration, "sync-retry-backoff-duration", argoappv1.DefaultSyncRetryDuration, "Sync retry backoff base duration. Input needs to be a duration (e.g. 2m, 1h)") command.Flags().DurationVar(&opts.retryBackoffMaxDuration, "sync-retry-backoff-max-duration", argoappv1.DefaultSyncRetryMaxDuration, "Max sync retry backoff duration. Input needs to be a duration (e.g. 2m, 1h)") command.Flags().Int64Var(&opts.retryBackoffFactor, "sync-retry-backoff-factor", argoappv1.DefaultSyncRetryFactor, "Factor multiplies the base duration after each failed sync retry") + command.Flags().StringVar(&opts.valuesRaw, "values-raw-literal-file", "", "Filename or URL to import as a literal Helm values raw object") } func SetAppSpecOptions(flags *pflag.FlagSet, spec *argoappv1.ApplicationSpec, appOpts *AppOptions) int { @@ -151,6 +155,18 @@ func SetAppSpecOptions(flags *pflag.FlagSet, spec *argoappv1.ApplicationSpec, ap setHelmOpt(&spec.Source, helmOpts{valueFiles: appOpts.valuesFiles}) case "ignore-missing-value-files": setHelmOpt(&spec.Source, helmOpts{ignoreMissingValueFiles: appOpts.ignoreMissingValueFiles}) + case "values-raw-literal-file": + var data []byte + + // read uri + parsedURL, err := url.ParseRequestURI(appOpts.valuesRaw) + if err != nil || !(parsedURL.Scheme == "http" || parsedURL.Scheme == "https") { + data, err = ioutil.ReadFile(appOpts.valuesRaw) + } else { + data, err = config.ReadRemoteFile(appOpts.valuesRaw) + } + errors.CheckError(err) + setHelmOpt(&spec.Source, helmOpts{valuesRaw: data}) case "values-literal-file": var data []byte @@ -385,6 +401,7 @@ type helmOpts struct { helmSetFiles []string passCredentials bool skipCrds bool + valuesRaw []byte } func setHelmOpt(src *argoappv1.ApplicationSource, opts helmOpts) { @@ -398,7 +415,14 @@ func setHelmOpt(src *argoappv1.ApplicationSource, opts helmOpts) { src.Helm.IgnoreMissingValueFiles = opts.ignoreMissingValueFiles } if len(opts.values) > 0 { - src.Helm.Values = opts.values + src.Helm.Values.Values = opts.values + } + if len(opts.valuesRaw) > 0 { + data, err := yaml.YAMLToJSON(opts.valuesRaw) + if err != nil { + log.Fatal(err) + } + src.Helm.Values.Raw = &runtime.RawExtension{Raw: data} } if opts.releaseName != "" { src.Helm.ReleaseName = opts.releaseName diff --git a/docs/user-guide/commands/argocd_admin_app_generate-spec.md b/docs/user-guide/commands/argocd_admin_app_generate-spec.md index c85735e6f9fe1..49d1105a7dfad 100644 --- a/docs/user-guide/commands/argocd_admin_app_generate-spec.md +++ b/docs/user-guide/commands/argocd_admin_app_generate-spec.md @@ -89,6 +89,7 @@ argocd admin app generate-spec APPNAME [flags] --validate Validation of repo and cluster (default true) --values stringArray Helm values file(s) to use --values-literal-file string Filename or URL to import as a literal Helm values block + --values-raw-literal-file string Filename or URL to import as a literal Helm values raw object ``` ### Options inherited from parent commands diff --git a/docs/user-guide/commands/argocd_app_create.md b/docs/user-guide/commands/argocd_app_create.md index 96173c570787a..173ab58ddfb72 100644 --- a/docs/user-guide/commands/argocd_app_create.md +++ b/docs/user-guide/commands/argocd_app_create.md @@ -88,6 +88,7 @@ argocd app create APPNAME [flags] --validate Validation of repo and cluster (default true) --values stringArray Helm values file(s) to use --values-literal-file string Filename or URL to import as a literal Helm values block + --values-raw-literal-file string Filename or URL to import as a literal Helm values raw object ``` ### Options inherited from parent commands diff --git a/docs/user-guide/commands/argocd_app_set.md b/docs/user-guide/commands/argocd_app_set.md index 14b89ac0de3cc..827a5aaa8e7c6 100644 --- a/docs/user-guide/commands/argocd_app_set.md +++ b/docs/user-guide/commands/argocd_app_set.md @@ -59,6 +59,7 @@ argocd app set APPNAME [flags] --validate Validation of repo and cluster (default true) --values stringArray Helm values file(s) to use --values-literal-file string Filename or URL to import as a literal Helm values block + --values-raw-literal-file string Filename or URL to import as a literal Helm values raw object ``` ### Options inherited from parent commands diff --git a/docs/user-guide/commands/argocd_app_unset.md b/docs/user-guide/commands/argocd_app_unset.md index cb94e2343e393..62656a05afd50 100644 --- a/docs/user-guide/commands/argocd_app_unset.md +++ b/docs/user-guide/commands/argocd_app_unset.md @@ -32,6 +32,7 @@ argocd app unset APPNAME parameters [flags] --plugin-env stringArray Unset plugin env variables (e.g --plugin-env name) --values stringArray Unset one or more Helm values files --values-literal Unset literal Helm values block + --values-raw-literal Unset literal Helm values raw ``` ### Options inherited from parent commands diff --git a/hack/generate-proto.sh b/hack/generate-proto.sh index 232ef126dcf42..2253eb0cc34e2 100755 --- a/hack/generate-proto.sh +++ b/hack/generate-proto.sh @@ -121,7 +121,7 @@ clean_swagger() { } echo "If additional types are added, the number of expected collisions may need to be increased" -EXPECTED_COLLISION_COUNT=62 +EXPECTED_COLLISION_COUNT=64 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 18457ee3bd83d..90aefbe2cb7e2 100644 --- a/manifests/core-install.yaml +++ b/manifests/core-install.yaml @@ -280,7 +280,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -627,7 +627,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -981,7 +981,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -1352,7 +1352,7 @@ spec: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -1697,7 +1697,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -2031,7 +2031,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -2374,7 +2374,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -2661,7 +2661,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -2950,7 +2950,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3215,7 +3215,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3510,7 +3510,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3797,7 +3797,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4086,7 +4086,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4351,7 +4351,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4644,7 +4644,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4989,7 +4989,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5247,7 +5247,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5542,7 +5542,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5829,7 +5829,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -6118,7 +6118,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -6383,7 +6383,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -6676,7 +6676,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7021,7 +7021,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7283,7 +7283,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7573,7 +7573,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7918,7 +7918,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -8181,7 +8181,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml index 7a894b84f22e4..7e37e96268b2e 100644 --- a/manifests/crds/application-crd.yaml +++ b/manifests/crds/application-crd.yaml @@ -279,7 +279,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -626,7 +626,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -980,7 +980,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -1351,7 +1351,7 @@ spec: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -1696,7 +1696,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -2030,7 +2030,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") diff --git a/manifests/crds/applicationset-crd.yaml b/manifests/crds/applicationset-crd.yaml index 065976751dfa5..b138200e3cd77 100644 --- a/manifests/crds/applicationset-crd.yaml +++ b/manifests/crds/applicationset-crd.yaml @@ -222,7 +222,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -509,7 +509,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -798,7 +798,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -1063,7 +1063,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -1358,7 +1358,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -1645,7 +1645,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -1934,7 +1934,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -2199,7 +2199,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -2492,7 +2492,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -2837,7 +2837,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3095,7 +3095,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3390,7 +3390,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3677,7 +3677,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3966,7 +3966,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4231,7 +4231,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4524,7 +4524,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4869,7 +4869,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5131,7 +5131,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5421,7 +5421,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5766,7 +5766,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -6029,7 +6029,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml index fc8ca277254c5..e384764b05957 100644 --- a/manifests/ha/install.yaml +++ b/manifests/ha/install.yaml @@ -280,7 +280,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -627,7 +627,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -981,7 +981,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -1352,7 +1352,7 @@ spec: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -1697,7 +1697,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -2031,7 +2031,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -2374,7 +2374,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -2661,7 +2661,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -2950,7 +2950,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3215,7 +3215,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3510,7 +3510,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3797,7 +3797,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4086,7 +4086,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4351,7 +4351,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4644,7 +4644,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4989,7 +4989,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5247,7 +5247,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5542,7 +5542,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5829,7 +5829,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -6118,7 +6118,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -6383,7 +6383,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -6676,7 +6676,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7021,7 +7021,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7283,7 +7283,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7573,7 +7573,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7918,7 +7918,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -8181,7 +8181,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object diff --git a/manifests/install.yaml b/manifests/install.yaml index fc5c4562dab97..8f724a9fb7db3 100644 --- a/manifests/install.yaml +++ b/manifests/install.yaml @@ -280,7 +280,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -627,7 +627,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -981,7 +981,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -1352,7 +1352,7 @@ spec: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -1697,7 +1697,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -2031,7 +2031,7 @@ spec: values: description: Values specifies Helm values to be passed to helm template, typically defined as a block - type: string + x-kubernetes-preserve-unknown-fields: true version: description: Version is the Helm version to use for templating (either "2" or "3") @@ -2374,7 +2374,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -2661,7 +2661,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -2950,7 +2950,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3215,7 +3215,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3510,7 +3510,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -3797,7 +3797,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4086,7 +4086,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4351,7 +4351,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4644,7 +4644,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -4989,7 +4989,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5247,7 +5247,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5542,7 +5542,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -5829,7 +5829,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -6118,7 +6118,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -6383,7 +6383,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -6676,7 +6676,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7021,7 +7021,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7283,7 +7283,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7573,7 +7573,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -7918,7 +7918,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object @@ -8181,7 +8181,7 @@ spec: type: string type: array values: - type: string + x-kubernetes-preserve-unknown-fields: true version: type: string type: object diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 705cbf1eaa56f..f8ab5847bc188 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -16,6 +16,7 @@ import ( k8s_io_api_core_v1 "k8s.io/api/core/v1" v11 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" math "math" math_bits "math/bits" @@ -2192,10 +2193,38 @@ func (m *SignatureKey) XXX_DiscardUnknown() { var xxx_messageInfo_SignatureKey proto.InternalMessageInfo +func (m *StringOrObject) Reset() { *m = StringOrObject{} } +func (*StringOrObject) ProtoMessage() {} +func (*StringOrObject) Descriptor() ([]byte, []int) { + return fileDescriptor_030104ce3b95bcac, []int{77} +} +func (m *StringOrObject) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StringOrObject) 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 *StringOrObject) XXX_Merge(src proto.Message) { + xxx_messageInfo_StringOrObject.Merge(m, src) +} +func (m *StringOrObject) XXX_Size() int { + return m.Size() +} +func (m *StringOrObject) XXX_DiscardUnknown() { + xxx_messageInfo_StringOrObject.DiscardUnknown(m) +} + +var xxx_messageInfo_StringOrObject proto.InternalMessageInfo + func (m *SyncOperation) Reset() { *m = SyncOperation{} } func (*SyncOperation) ProtoMessage() {} func (*SyncOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_030104ce3b95bcac, []int{77} + return fileDescriptor_030104ce3b95bcac, []int{78} } func (m *SyncOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2223,7 +2252,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{78} + return fileDescriptor_030104ce3b95bcac, []int{79} } func (m *SyncOperationResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2251,7 +2280,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{79} + return fileDescriptor_030104ce3b95bcac, []int{80} } func (m *SyncOperationResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2279,7 +2308,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{80} + return fileDescriptor_030104ce3b95bcac, []int{81} } func (m *SyncPolicy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2307,7 +2336,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{81} + return fileDescriptor_030104ce3b95bcac, []int{82} } func (m *SyncPolicyAutomated) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2335,7 +2364,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{82} + return fileDescriptor_030104ce3b95bcac, []int{83} } func (m *SyncStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2363,7 +2392,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{83} + return fileDescriptor_030104ce3b95bcac, []int{84} } func (m *SyncStrategy) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2391,7 +2420,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{84} + return fileDescriptor_030104ce3b95bcac, []int{85} } func (m *SyncStrategyApply) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2419,7 +2448,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{85} + return fileDescriptor_030104ce3b95bcac, []int{86} } func (m *SyncStrategyHook) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2447,7 +2476,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{86} + return fileDescriptor_030104ce3b95bcac, []int{87} } func (m *SyncWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2475,7 +2504,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{87} + return fileDescriptor_030104ce3b95bcac, []int{88} } func (m *TLSClientConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2586,6 +2615,7 @@ func init() { proto.RegisterType((*RevisionHistory)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.RevisionHistory") proto.RegisterType((*RevisionMetadata)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.RevisionMetadata") proto.RegisterType((*SignatureKey)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SignatureKey") + proto.RegisterType((*StringOrObject)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.StringOrObject") proto.RegisterType((*SyncOperation)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncOperation") proto.RegisterType((*SyncOperationResource)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncOperationResource") proto.RegisterType((*SyncOperationResult)(nil), "github.com.argoproj.argo_cd.v2.pkg.apis.application.v1alpha1.SyncOperationResult") @@ -2604,433 +2634,438 @@ func init() { } var fileDescriptor_030104ce3b95bcac = []byte{ - // 6807 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5d, 0x8c, 0x24, 0xc9, - 0x51, 0xf0, 0x55, 0xf7, 0xfc, 0x74, 0xc7, 0xfc, 0xec, 0x4e, 0xee, 0xcf, 0x8d, 0xe7, 0x3b, 0xef, - 0xac, 0xea, 0x64, 0xfb, 0xbe, 0xcf, 0xf6, 0xcc, 0x77, 0xcb, 0xd9, 0x1c, 0x3e, 0x73, 0x66, 0x7a, - 0x66, 0x7f, 0x66, 0x77, 0xfe, 0x36, 0x66, 0x76, 0x17, 0x9f, 0x8d, 0xb9, 0x9a, 0xea, 0xec, 0xee, - 0xda, 0xe9, 0xae, 0xea, 0xab, 0xaa, 0x9e, 0x9d, 0xb6, 0xf1, 0x9f, 0x64, 0xf0, 0x49, 0xfe, 0x95, - 0xcd, 0x83, 0x2d, 0x21, 0x30, 0x3f, 0x42, 0xe2, 0xc1, 0x02, 0x9e, 0x00, 0x21, 0x1e, 0x30, 0x2f, - 0x46, 0x3c, 0x60, 0x09, 0x84, 0x0d, 0x16, 0x83, 0xbd, 0x80, 0x0c, 0x48, 0x80, 0x00, 0xbf, 0xb0, - 0xe2, 0x01, 0xe5, 0x4f, 0x65, 0x66, 0x55, 0x77, 0xef, 0xcc, 0x6c, 0xd7, 0x2e, 0x96, 0xc5, 0xdb, - 0x74, 0x44, 0x64, 0x44, 0x64, 0x56, 0x66, 0x64, 0x44, 0x64, 0x64, 0x0e, 0xac, 0xd5, 0xbd, 0xb8, - 0xd1, 0xd9, 0x5d, 0x70, 0x83, 0xd6, 0xa2, 0x13, 0xd6, 0x83, 0x76, 0x18, 0xdc, 0xe5, 0x7f, 0xbc, - 0xdd, 0xad, 0x2e, 0xee, 0x5f, 0x5a, 0x6c, 0xef, 0xd5, 0x17, 0x9d, 0xb6, 0x17, 0x2d, 0x3a, 0xed, - 0x76, 0xd3, 0x73, 0x9d, 0xd8, 0x0b, 0xfc, 0xc5, 0xfd, 0xe7, 0x9d, 0x66, 0xbb, 0xe1, 0x3c, 0xbf, - 0x58, 0xa7, 0x3e, 0x0d, 0x9d, 0x98, 0x56, 0x17, 0xda, 0x61, 0x10, 0x07, 0xe4, 0xdd, 0x9a, 0xdb, - 0x42, 0xc2, 0x8d, 0xff, 0xf1, 0xd3, 0x6e, 0x75, 0x61, 0xff, 0xd2, 0x42, 0x7b, 0xaf, 0xbe, 0xc0, - 0xb8, 0x2d, 0x18, 0xdc, 0x16, 0x12, 0x6e, 0x73, 0x6f, 0x37, 0x74, 0xa9, 0x07, 0xf5, 0x60, 0x91, - 0x33, 0xdd, 0xed, 0xd4, 0xf8, 0x2f, 0xfe, 0x83, 0xff, 0x25, 0x84, 0xcd, 0xd9, 0x7b, 0x2f, 0x46, - 0x0b, 0x5e, 0xc0, 0xd4, 0x5b, 0x74, 0x83, 0x90, 0x2e, 0xee, 0xf7, 0x28, 0x34, 0xf7, 0x82, 0xa6, - 0x69, 0x39, 0x6e, 0xc3, 0xf3, 0x69, 0xd8, 0xd5, 0x7d, 0x6a, 0xd1, 0xd8, 0xe9, 0xd7, 0x6a, 0x71, - 0x50, 0xab, 0xb0, 0xe3, 0xc7, 0x5e, 0x8b, 0xf6, 0x34, 0x78, 0xe7, 0x51, 0x0d, 0x22, 0xb7, 0x41, - 0x5b, 0x4e, 0xb6, 0x9d, 0xfd, 0x1a, 0x4c, 0x2d, 0xdd, 0xd9, 0x5e, 0xea, 0xc4, 0x8d, 0xe5, 0xc0, - 0xaf, 0x79, 0x75, 0xf2, 0x0e, 0x98, 0x70, 0x9b, 0x9d, 0x28, 0xa6, 0xe1, 0x86, 0xd3, 0xa2, 0xb3, - 0xd6, 0x45, 0xeb, 0xb9, 0x72, 0xe5, 0xcc, 0xd7, 0x0f, 0xe7, 0x9f, 0xba, 0x7f, 0x38, 0x3f, 0xb1, - 0xac, 0x51, 0x68, 0xd2, 0x91, 0xff, 0x0b, 0xe3, 0x61, 0xd0, 0xa4, 0x4b, 0xb8, 0x31, 0x5b, 0xe0, - 0x4d, 0x4e, 0xc9, 0x26, 0xe3, 0x28, 0xc0, 0x98, 0xe0, 0xed, 0xbf, 0x28, 0x00, 0x2c, 0xb5, 0xdb, - 0x5b, 0x61, 0x70, 0x97, 0xba, 0x31, 0x79, 0x15, 0x4a, 0x6c, 0x14, 0xaa, 0x4e, 0xec, 0x70, 0x69, - 0x13, 0x97, 0xfe, 0xff, 0x82, 0xe8, 0xcc, 0x82, 0xd9, 0x19, 0xfd, 0xe5, 0x18, 0xf5, 0xc2, 0xfe, - 0xf3, 0x0b, 0x9b, 0xbb, 0xac, 0xfd, 0x3a, 0x8d, 0x9d, 0x0a, 0x91, 0xc2, 0x40, 0xc3, 0x50, 0x71, - 0x25, 0x3e, 0x8c, 0x44, 0x6d, 0xea, 0x72, 0xc5, 0x26, 0x2e, 0xad, 0x2d, 0x0c, 0x33, 0x45, 0x16, - 0xb4, 0xe6, 0xdb, 0x6d, 0xea, 0x56, 0x26, 0xa5, 0xe4, 0x11, 0xf6, 0x0b, 0xb9, 0x1c, 0xb2, 0x0f, - 0x63, 0x51, 0xec, 0xc4, 0x9d, 0x68, 0xb6, 0xc8, 0x25, 0x6e, 0xe4, 0x26, 0x91, 0x73, 0xad, 0x4c, - 0x4b, 0x99, 0x63, 0xe2, 0x37, 0x4a, 0x69, 0xf6, 0x5f, 0x5b, 0x30, 0xad, 0x89, 0xd7, 0xbc, 0x28, - 0x26, 0xef, 0xef, 0x19, 0xdc, 0x85, 0xe3, 0x0d, 0x2e, 0x6b, 0xcd, 0x87, 0xf6, 0xb4, 0x14, 0x56, - 0x4a, 0x20, 0xc6, 0xc0, 0xb6, 0x60, 0xd4, 0x8b, 0x69, 0x2b, 0x9a, 0x2d, 0x5c, 0x2c, 0x3e, 0x37, - 0x71, 0xe9, 0x5a, 0x5e, 0xfd, 0xac, 0x4c, 0x49, 0xa1, 0xa3, 0xab, 0x8c, 0x3d, 0x0a, 0x29, 0xf6, - 0xf7, 0xc1, 0xec, 0x1f, 0x1b, 0x70, 0xf2, 0x3c, 0x4c, 0x44, 0x41, 0x27, 0x74, 0x29, 0xd2, 0x76, - 0x10, 0xcd, 0x5a, 0x17, 0x8b, 0x6c, 0xea, 0xb1, 0x99, 0xba, 0xad, 0xc1, 0x68, 0xd2, 0x90, 0xcf, - 0x5a, 0x30, 0x59, 0xa5, 0x51, 0xec, 0xf9, 0x5c, 0x7e, 0xa2, 0xfc, 0xce, 0xd0, 0xca, 0x27, 0xc0, - 0x15, 0xcd, 0xbc, 0x72, 0x56, 0x76, 0x64, 0xd2, 0x00, 0x46, 0x98, 0x92, 0xcf, 0x56, 0x5c, 0x95, - 0x46, 0x6e, 0xe8, 0xb5, 0xd9, 0x6f, 0x3e, 0x67, 0x8c, 0x15, 0xb7, 0xa2, 0x51, 0x68, 0xd2, 0x11, - 0x1f, 0x46, 0xd9, 0x8a, 0x8a, 0x66, 0x47, 0xb8, 0xfe, 0xab, 0xc3, 0xe9, 0x2f, 0x07, 0x95, 0x2d, - 0x56, 0x3d, 0xfa, 0xec, 0x57, 0x84, 0x42, 0x0c, 0xf9, 0x8c, 0x05, 0xb3, 0x72, 0xc5, 0x23, 0x15, - 0x03, 0x7a, 0xa7, 0xe1, 0xc5, 0xb4, 0xe9, 0x45, 0xf1, 0xec, 0x28, 0xd7, 0x61, 0xf1, 0x78, 0x73, - 0xeb, 0x6a, 0x18, 0x74, 0xda, 0x37, 0x3c, 0xbf, 0x5a, 0xb9, 0x28, 0x25, 0xcd, 0x2e, 0x0f, 0x60, - 0x8c, 0x03, 0x45, 0x92, 0x2f, 0x5a, 0x30, 0xe7, 0x3b, 0x2d, 0x1a, 0xb5, 0x1d, 0xf6, 0x69, 0x05, - 0xba, 0xd2, 0x74, 0xdc, 0x3d, 0xae, 0xd1, 0xd8, 0xa3, 0x69, 0x64, 0x4b, 0x8d, 0xe6, 0x36, 0x06, - 0xb2, 0xc6, 0x87, 0x88, 0x25, 0xbf, 0x6a, 0xc1, 0x4c, 0x10, 0xb6, 0x1b, 0x8e, 0x4f, 0xab, 0x09, - 0x36, 0x9a, 0x1d, 0xe7, 0x4b, 0xef, 0x03, 0xc3, 0x7d, 0xa2, 0xcd, 0x2c, 0xdb, 0xf5, 0xc0, 0xf7, - 0xe2, 0x20, 0xdc, 0xa6, 0x71, 0xec, 0xf9, 0xf5, 0xa8, 0x72, 0xee, 0xfe, 0xe1, 0xfc, 0x4c, 0x0f, - 0x15, 0xf6, 0xea, 0x43, 0x3e, 0x04, 0x13, 0x51, 0xd7, 0x77, 0xef, 0x78, 0x7e, 0x35, 0xb8, 0x17, - 0xcd, 0x96, 0xf2, 0x58, 0xbe, 0xdb, 0x8a, 0xa1, 0x5c, 0x80, 0x5a, 0x00, 0x9a, 0xd2, 0xfa, 0x7f, - 0x38, 0x3d, 0x95, 0xca, 0x79, 0x7f, 0x38, 0x3d, 0x99, 0x1e, 0x22, 0x96, 0x7c, 0xd2, 0x82, 0xa9, - 0xc8, 0xab, 0xfb, 0x4e, 0xdc, 0x09, 0xe9, 0x0d, 0xda, 0x8d, 0x66, 0x81, 0x2b, 0x72, 0x7d, 0xc8, - 0x51, 0x31, 0x58, 0x56, 0xce, 0x49, 0x1d, 0xa7, 0x4c, 0x68, 0x84, 0x69, 0xb9, 0xfd, 0x16, 0x9a, - 0x9e, 0xd6, 0x13, 0xf9, 0x2e, 0x34, 0x3d, 0xa9, 0x07, 0x8a, 0xb4, 0xff, 0xb8, 0x00, 0xa7, 0xb3, - 0x7b, 0x10, 0xf9, 0x75, 0x0b, 0x4e, 0xdd, 0xbd, 0x17, 0xef, 0x04, 0x7b, 0xd4, 0x8f, 0x2a, 0x5d, - 0x66, 0x29, 0xb8, 0xf5, 0x9d, 0xb8, 0xe4, 0xe6, 0xbb, 0xdb, 0x2d, 0x5c, 0x4f, 0x4b, 0xb9, 0xec, - 0xc7, 0x61, 0xb7, 0xf2, 0xb4, 0xec, 0xcf, 0xa9, 0xeb, 0x77, 0x76, 0x4c, 0x2c, 0x66, 0x95, 0x9a, - 0xfb, 0x94, 0x05, 0x67, 0xfb, 0xb1, 0x20, 0xa7, 0xa1, 0xb8, 0x47, 0xbb, 0xc2, 0xc1, 0x41, 0xf6, - 0x27, 0xf9, 0x29, 0x18, 0xdd, 0x77, 0x9a, 0x1d, 0x2a, 0x1d, 0x85, 0xab, 0xc3, 0x75, 0x44, 0x69, - 0x86, 0x82, 0xeb, 0xbb, 0x0a, 0x2f, 0x5a, 0xf6, 0x9f, 0x16, 0x61, 0xc2, 0xd8, 0x2a, 0x9e, 0x80, - 0xf3, 0x13, 0xa4, 0x9c, 0x9f, 0xf5, 0xdc, 0x76, 0xb9, 0x81, 0xde, 0xcf, 0xbd, 0x8c, 0xf7, 0xb3, - 0x99, 0x9f, 0xc8, 0x87, 0xba, 0x3f, 0x24, 0x86, 0x72, 0xd0, 0x66, 0xce, 0x2d, 0xdb, 0x45, 0x47, - 0xf2, 0xf8, 0x84, 0x9b, 0x09, 0xbb, 0xca, 0xd4, 0xfd, 0xc3, 0xf9, 0xb2, 0xfa, 0x89, 0x5a, 0x90, - 0xfd, 0x4d, 0x0b, 0xce, 0x1a, 0x3a, 0x2e, 0x07, 0x7e, 0xd5, 0xe3, 0x9f, 0xf6, 0x22, 0x8c, 0xc4, - 0xdd, 0x76, 0xe2, 0x41, 0xab, 0x91, 0xda, 0xe9, 0xb6, 0x29, 0x72, 0x0c, 0xf3, 0x99, 0x5b, 0x34, - 0x8a, 0x9c, 0x3a, 0xcd, 0xfa, 0xcc, 0xeb, 0x02, 0x8c, 0x09, 0x9e, 0x84, 0x40, 0x9a, 0x4e, 0x14, - 0xef, 0x84, 0x8e, 0x1f, 0x71, 0xf6, 0x3b, 0x5e, 0x8b, 0xca, 0x01, 0xfe, 0x7f, 0xc7, 0x9b, 0x31, - 0xac, 0x45, 0xe5, 0xfc, 0xfd, 0xc3, 0x79, 0xb2, 0xd6, 0xc3, 0x09, 0xfb, 0x70, 0xb7, 0xbf, 0x68, - 0xc1, 0xf9, 0xfe, 0x6e, 0x0d, 0x79, 0x33, 0x8c, 0x45, 0x34, 0xdc, 0xa7, 0xa1, 0xec, 0x9d, 0xfe, - 0x24, 0x1c, 0x8a, 0x12, 0x4b, 0x16, 0xa1, 0xac, 0x4c, 0xae, 0xec, 0xe3, 0x8c, 0x24, 0x2d, 0x6b, - 0x3b, 0xad, 0x69, 0xd8, 0xa0, 0xb1, 0x1f, 0xd2, 0x09, 0x52, 0x83, 0xc6, 0xe3, 0x0d, 0x8e, 0xb1, - 0xff, 0xc6, 0x82, 0x53, 0x86, 0x56, 0x4f, 0xc0, 0xcb, 0xf5, 0xd3, 0x5e, 0xee, 0x6a, 0x6e, 0xf3, - 0x79, 0x80, 0x9b, 0xfb, 0x47, 0xa3, 0x30, 0x63, 0xce, 0x7a, 0x6e, 0x8e, 0x79, 0x80, 0x45, 0xdb, - 0xc1, 0x2d, 0x5c, 0x93, 0x63, 0xae, 0x03, 0x2c, 0x01, 0xc6, 0x04, 0xcf, 0x06, 0xb1, 0xed, 0xc4, - 0x0d, 0x39, 0xe0, 0x6a, 0x10, 0xb7, 0x9c, 0xb8, 0x81, 0x1c, 0x43, 0x5e, 0x86, 0xe9, 0xd8, 0x09, - 0xeb, 0x34, 0x46, 0xba, 0xef, 0x45, 0xc9, 0x7a, 0x29, 0x57, 0xce, 0x4b, 0xda, 0xe9, 0x9d, 0x14, - 0x16, 0x33, 0xd4, 0xe4, 0x35, 0x18, 0x69, 0xd0, 0x66, 0x4b, 0xfa, 0x35, 0xdb, 0xf9, 0xad, 0x70, - 0xde, 0xd7, 0x6b, 0xb4, 0xd9, 0xaa, 0x94, 0x98, 0xca, 0xec, 0x2f, 0xe4, 0xa2, 0xc8, 0xcf, 0x5a, - 0x50, 0xde, 0xeb, 0x44, 0x71, 0xd0, 0xf2, 0x3e, 0x48, 0x67, 0x4b, 0x5c, 0xf0, 0x4f, 0xe6, 0x2c, - 0xf8, 0x46, 0xc2, 0x5f, 0xac, 0x77, 0xf5, 0x13, 0xb5, 0x64, 0xae, 0x47, 0xd5, 0x0b, 0xa9, 0x1b, - 0x07, 0x61, 0x77, 0x16, 0x1e, 0x8b, 0x1e, 0x2b, 0x09, 0x7f, 0xa1, 0x87, 0xfa, 0x89, 0x5a, 0x32, - 0xe9, 0xc2, 0x58, 0xbb, 0xd9, 0xa9, 0x7b, 0xfe, 0xec, 0x04, 0xd7, 0xe1, 0x56, 0xce, 0x3a, 0x6c, - 0x71, 0xe6, 0x15, 0x60, 0xab, 0x5a, 0xfc, 0x8d, 0x52, 0x20, 0x79, 0x16, 0x46, 0xdd, 0x86, 0x13, - 0xc6, 0xb3, 0x93, 0x7c, 0xd2, 0xa8, 0x59, 0xbc, 0xcc, 0x80, 0x28, 0x70, 0xf6, 0x2f, 0x17, 0x60, - 0x6e, 0x70, 0xc7, 0xc4, 0x74, 0x76, 0x3b, 0x61, 0x24, 0x0c, 0x64, 0xc9, 0x9c, 0xce, 0x1c, 0x8c, - 0x09, 0x9e, 0x7c, 0xdc, 0x82, 0xf1, 0xbb, 0x51, 0xe0, 0xfb, 0x34, 0x96, 0xbb, 0xd8, 0xed, 0x9c, - 0xfb, 0x7a, 0x5d, 0x70, 0xd7, 0x3a, 0x48, 0x00, 0x26, 0x72, 0x99, 0xba, 0xf4, 0xc0, 0x6d, 0x76, - 0xaa, 0x89, 0x69, 0x52, 0xa4, 0x97, 0x05, 0x18, 0x13, 0x3c, 0x23, 0xf5, 0x7c, 0x41, 0x3a, 0x92, - 0x26, 0x5d, 0xf5, 0x25, 0xa9, 0xc4, 0xdb, 0xbf, 0x35, 0x0a, 0xe7, 0xfa, 0xce, 0x7e, 0xb2, 0x00, - 0xc0, 0x9d, 0x86, 0x2b, 0x1e, 0x8b, 0xf0, 0x44, 0x58, 0x3b, 0xcd, 0xf6, 0xf8, 0xdb, 0x0a, 0x8a, - 0x06, 0x05, 0xf9, 0x28, 0x40, 0xdb, 0x09, 0x9d, 0x16, 0x8d, 0x69, 0x98, 0x18, 0xaa, 0x1b, 0xc3, - 0x8d, 0x12, 0xd3, 0x63, 0x2b, 0xe1, 0xa9, 0x9d, 0x0c, 0x05, 0x8a, 0xd0, 0x10, 0xc9, 0x82, 0xd8, - 0x90, 0x36, 0xa9, 0x13, 0xd1, 0x0d, 0x6d, 0xbf, 0x55, 0x10, 0x8b, 0x1a, 0x85, 0x26, 0x1d, 0xdb, - 0x48, 0x78, 0x2f, 0x22, 0x39, 0x56, 0x6a, 0x23, 0xe1, 0xfd, 0x8c, 0x50, 0x62, 0xc9, 0xe7, 0x2c, - 0x98, 0xae, 0x79, 0x4d, 0xaa, 0xa5, 0xcb, 0x90, 0x73, 0x73, 0xf8, 0x4e, 0x5e, 0x31, 0xf9, 0x6a, - 0x13, 0x98, 0x02, 0x47, 0x98, 0x11, 0xcf, 0x3e, 0xf3, 0x3e, 0x0d, 0xb9, 0xed, 0x1c, 0x4b, 0x7f, - 0xe6, 0xdb, 0x02, 0x8c, 0x09, 0x9e, 0x2c, 0xc1, 0xa9, 0xb6, 0x13, 0x45, 0xcb, 0x21, 0xad, 0x52, - 0x3f, 0xf6, 0x9c, 0xa6, 0x08, 0x08, 0x4b, 0xda, 0x8b, 0xdd, 0x4a, 0xa3, 0x31, 0x4b, 0x4f, 0xde, - 0x0b, 0x4f, 0x7b, 0x75, 0x3f, 0x08, 0xe9, 0xba, 0x17, 0x45, 0x9e, 0x5f, 0xd7, 0xd3, 0x80, 0x9b, - 0xc2, 0x52, 0x65, 0x5e, 0xb2, 0x7a, 0x7a, 0xb5, 0x3f, 0x19, 0x0e, 0x6a, 0x4f, 0xde, 0x06, 0xa5, - 0x68, 0xcf, 0x6b, 0x2f, 0x87, 0xd5, 0x68, 0xb6, 0xcc, 0x79, 0xa9, 0xcd, 0x70, 0x5b, 0xc2, 0x51, - 0x51, 0xd8, 0x5f, 0x2e, 0xc0, 0xec, 0xa0, 0xf5, 0x43, 0x22, 0xb6, 0x4a, 0xe2, 0xdb, 0x4e, 0x18, - 0xc9, 0x58, 0x60, 0xc8, 0x90, 0x52, 0xf2, 0xbd, 0xed, 0x84, 0xe6, 0x7a, 0xe3, 0x02, 0x30, 0x91, - 0x44, 0xee, 0xc2, 0x48, 0xdc, 0x74, 0x72, 0xca, 0x41, 0x19, 0x12, 0xb5, 0xc7, 0xb6, 0xb6, 0x14, - 0x21, 0x97, 0x41, 0x9e, 0x81, 0x91, 0xa6, 0xb7, 0xcb, 0x3c, 0x5b, 0xb6, 0x20, 0xf9, 0x16, 0xb5, - 0xe6, 0xed, 0x46, 0xc8, 0xa1, 0xf6, 0xbf, 0x8e, 0xf5, 0x31, 0x79, 0x6a, 0x13, 0x21, 0x97, 0x00, - 0x98, 0x07, 0xb3, 0x15, 0xd2, 0x9a, 0x77, 0x20, 0x37, 0x71, 0xb5, 0xac, 0x36, 0x14, 0x06, 0x0d, - 0xaa, 0xa4, 0xcd, 0x76, 0xa7, 0xc6, 0xda, 0x14, 0x7a, 0xdb, 0x08, 0x0c, 0x1a, 0x54, 0xe4, 0x05, - 0x18, 0xf3, 0x5a, 0x4e, 0x9d, 0x26, 0x6a, 0x3e, 0xc3, 0xd6, 0xd3, 0x2a, 0x87, 0x3c, 0x38, 0x9c, - 0x9f, 0x56, 0x0a, 0x71, 0x10, 0x4a, 0x5a, 0xf2, 0x6b, 0x16, 0x4c, 0xba, 0x41, 0xab, 0x15, 0xf8, - 0x6b, 0xce, 0x2e, 0x6d, 0x26, 0x69, 0xa5, 0xbb, 0x8f, 0x6b, 0x8b, 0x5d, 0x58, 0x36, 0x84, 0x89, - 0xa0, 0x4e, 0x25, 0xcb, 0x4c, 0x14, 0xa6, 0xb4, 0x32, 0x97, 0xdd, 0xe8, 0x11, 0xcb, 0xee, 0x77, - 0x2d, 0x98, 0x11, 0x6d, 0x97, 0x7c, 0x3f, 0x88, 0x65, 0xb6, 0x4f, 0xe4, 0x85, 0x82, 0xc7, 0xdc, - 0x2d, 0x43, 0xa2, 0xe8, 0xdb, 0x1b, 0xa4, 0x9a, 0x33, 0x3d, 0x78, 0xec, 0x55, 0x92, 0x5c, 0x85, - 0x99, 0x5a, 0x10, 0xba, 0xd4, 0x1c, 0x08, 0x69, 0x33, 0x14, 0xa3, 0x2b, 0x59, 0x02, 0xec, 0x6d, - 0x43, 0x6e, 0xc3, 0x79, 0x03, 0x68, 0x8e, 0x83, 0x30, 0x1b, 0x17, 0x24, 0xb7, 0xf3, 0x57, 0xfa, - 0x52, 0xe1, 0x80, 0xd6, 0x73, 0xef, 0x81, 0x99, 0x9e, 0xef, 0xd7, 0x27, 0xa2, 0x3e, 0x6b, 0x46, - 0xd4, 0x65, 0x23, 0x10, 0x9e, 0x5b, 0x81, 0xf3, 0xfd, 0x47, 0xea, 0x24, 0x5c, 0xec, 0x5f, 0xb4, - 0xe0, 0xe9, 0x01, 0x9e, 0x8b, 0x0a, 0x25, 0xac, 0x41, 0xa1, 0x04, 0x71, 0xa0, 0x48, 0xfd, 0x7d, - 0x69, 0x38, 0xae, 0x0c, 0x37, 0x23, 0x2e, 0xfb, 0xfb, 0xe2, 0x43, 0x8f, 0xdf, 0x3f, 0x9c, 0x2f, - 0x5e, 0xf6, 0xf7, 0x91, 0xf1, 0xb6, 0x7f, 0x7e, 0x2c, 0x15, 0xad, 0x6c, 0x27, 0x01, 0x32, 0x57, - 0x54, 0xc6, 0x2a, 0x9b, 0x39, 0xcf, 0x45, 0x23, 0x1a, 0x13, 0x69, 0x6f, 0x29, 0x8e, 0x7c, 0xca, - 0xe2, 0x99, 0xe6, 0x24, 0x8a, 0x93, 0xce, 0xd4, 0xe3, 0x49, 0x7c, 0x9b, 0xf9, 0xeb, 0x04, 0x88, - 0xa6, 0x74, 0xb6, 0x92, 0xdb, 0x22, 0xd1, 0x93, 0x75, 0xa9, 0x92, 0x5c, 0x74, 0x82, 0x27, 0x07, - 0x00, 0x51, 0xd7, 0x77, 0xb7, 0x82, 0xa6, 0xe7, 0x76, 0x65, 0x68, 0x9f, 0x43, 0xb6, 0x52, 0xf0, - 0x13, 0x7e, 0x95, 0xfe, 0x8d, 0x86, 0x2c, 0xf2, 0x15, 0x0b, 0x66, 0xc4, 0xc6, 0xb9, 0xe2, 0xd5, - 0x6a, 0x34, 0xa4, 0xbe, 0x4b, 0x13, 0xd7, 0xe3, 0xce, 0x70, 0x1a, 0x24, 0x89, 0xb6, 0xd5, 0x2c, - 0x7b, 0xbd, 0xc4, 0x7b, 0x50, 0xd8, 0xab, 0x0c, 0xa9, 0xc2, 0x88, 0xe7, 0xd7, 0x02, 0x69, 0xd8, - 0x2a, 0xc3, 0x29, 0xb5, 0xea, 0xd7, 0x02, 0xbd, 0x56, 0xd8, 0x2f, 0xe4, 0xdc, 0xc9, 0x1a, 0x9c, - 0x0d, 0x65, 0xf4, 0x77, 0xcd, 0x8b, 0x98, 0x0b, 0xbf, 0xe6, 0xb5, 0xbc, 0x98, 0x1b, 0xa5, 0x62, - 0x65, 0xf6, 0xfe, 0xe1, 0xfc, 0x59, 0xec, 0x83, 0xc7, 0xbe, 0xad, 0xec, 0xd7, 0xcb, 0xe9, 0x10, - 0x57, 0x24, 0x70, 0x3e, 0x0c, 0xe5, 0x50, 0xa5, 0xcc, 0x85, 0x03, 0xb1, 0x96, 0xcf, 0x18, 0xcb, - 0xcc, 0x91, 0xca, 0x3d, 0xe8, 0xe4, 0xb8, 0x96, 0xc8, 0x1c, 0x09, 0xf6, 0xe5, 0xe5, 0xb2, 0xc8, - 0x61, 0x7e, 0x49, 0xa9, 0x3a, 0x49, 0xd6, 0xf5, 0x5d, 0xe4, 0x32, 0x48, 0x08, 0x63, 0x0d, 0xea, - 0x34, 0xe3, 0x86, 0xcc, 0xe1, 0x5c, 0x1f, 0xd6, 0x8d, 0x65, 0xbc, 0xb2, 0xf9, 0x31, 0x01, 0x45, - 0x29, 0x89, 0x1c, 0xc0, 0x78, 0x43, 0x7c, 0x04, 0xb9, 0xb7, 0xaf, 0x0f, 0x3b, 0xb8, 0xa9, 0x2f, - 0xab, 0xd7, 0xaf, 0x04, 0x60, 0x22, 0x8e, 0xfc, 0x9c, 0x05, 0xe0, 0x26, 0x89, 0xb1, 0x64, 0xf9, - 0x60, 0x6e, 0x76, 0x47, 0xe5, 0xdc, 0xb4, 0x6b, 0xa4, 0x40, 0x11, 0x1a, 0x92, 0xc9, 0xab, 0x30, - 0x19, 0x52, 0x37, 0xf0, 0x5d, 0xaf, 0x49, 0xab, 0x4b, 0x31, 0xf7, 0xdc, 0x4f, 0x96, 0x40, 0x3b, - 0xcd, 0xfc, 0x13, 0x34, 0x78, 0x60, 0x8a, 0x23, 0x79, 0xdd, 0x82, 0x69, 0x95, 0x1c, 0x64, 0x1f, - 0x84, 0xca, 0x24, 0xc9, 0x5a, 0x4e, 0xa9, 0x48, 0xce, 0xb3, 0x42, 0x58, 0x84, 0x92, 0x86, 0x61, - 0x46, 0x2e, 0x79, 0x05, 0x20, 0xd8, 0xe5, 0x89, 0x38, 0xd6, 0xd5, 0xd2, 0x89, 0xbb, 0x3a, 0x2d, - 0x72, 0xca, 0x09, 0x07, 0x34, 0xb8, 0x91, 0x1b, 0x00, 0x62, 0xd9, 0xec, 0x74, 0xdb, 0x94, 0x87, - 0x0d, 0xe5, 0xca, 0x5b, 0x93, 0xc1, 0xdf, 0x56, 0x98, 0x07, 0x87, 0xf3, 0xbd, 0x01, 0x2e, 0xcf, - 0x80, 0x1a, 0xcd, 0xc9, 0x87, 0x60, 0x3c, 0xea, 0xb4, 0x5a, 0x8e, 0xca, 0xa7, 0x6c, 0xe5, 0xb7, - 0x23, 0x0a, 0xbe, 0x7a, 0x6e, 0x4a, 0x00, 0x26, 0x12, 0x6d, 0x1f, 0x48, 0x2f, 0x3d, 0x79, 0x01, - 0x26, 0xe9, 0x41, 0x4c, 0x43, 0xdf, 0x69, 0xde, 0xc2, 0xb5, 0x24, 0x02, 0xe7, 0x1f, 0xff, 0xb2, - 0x01, 0xc7, 0x14, 0x15, 0xb1, 0x95, 0xe7, 0x5d, 0xe0, 0xf4, 0xa0, 0x3d, 0xef, 0xc4, 0xcf, 0xb6, - 0xff, 0xb3, 0x90, 0xf2, 0x08, 0x76, 0x42, 0x4a, 0x49, 0x00, 0xa3, 0x7e, 0x50, 0x55, 0x46, 0xef, - 0x7a, 0x3e, 0x46, 0x6f, 0x23, 0xa8, 0x1a, 0x67, 0xb9, 0xec, 0x57, 0x84, 0x42, 0x0e, 0x3f, 0xec, - 0x4a, 0x4e, 0x05, 0x39, 0x42, 0x3a, 0x41, 0x79, 0x4a, 0x56, 0x87, 0x5d, 0x9b, 0xa6, 0x20, 0x4c, - 0xcb, 0x25, 0x7b, 0x30, 0xda, 0x08, 0xa2, 0x58, 0xc4, 0x2a, 0x43, 0x7b, 0x61, 0xd7, 0x82, 0x28, - 0xe6, 0x5b, 0x98, 0xea, 0x36, 0x83, 0x44, 0x28, 0x64, 0xd8, 0xdf, 0xb3, 0x52, 0xf9, 0x96, 0x3b, - 0x4e, 0xec, 0x36, 0x2e, 0xef, 0x53, 0x9f, 0xcd, 0x67, 0x33, 0x59, 0xff, 0xa3, 0x66, 0xb2, 0xfe, - 0xc1, 0xe1, 0xfc, 0x5b, 0x06, 0x15, 0xd7, 0xdc, 0x63, 0x1c, 0x16, 0x38, 0x0b, 0x23, 0xaf, 0xff, - 0x31, 0x0b, 0x26, 0x0c, 0xf5, 0xe4, 0x86, 0x92, 0x63, 0xde, 0x58, 0x39, 0x57, 0x06, 0x10, 0x4d, - 0x91, 0xf6, 0x17, 0x2c, 0x18, 0xaf, 0x38, 0xee, 0x5e, 0x50, 0xab, 0xb1, 0x00, 0xbf, 0xda, 0x91, - 0xc7, 0x22, 0xa2, 0x7f, 0x2a, 0xc0, 0x5f, 0x91, 0x70, 0x54, 0x14, 0x6c, 0x0e, 0xd7, 0x1c, 0x37, - 0x0e, 0x42, 0xae, 0x76, 0x51, 0xcc, 0xe1, 0x2b, 0x1c, 0x82, 0x12, 0x43, 0xde, 0x01, 0x13, 0x2d, - 0xe7, 0x20, 0x69, 0x9c, 0x4d, 0xf6, 0xac, 0x6b, 0x14, 0x9a, 0x74, 0xf6, 0x1f, 0x96, 0x61, 0x5c, - 0x9e, 0x3f, 0x1e, 0xfb, 0x04, 0x21, 0xf1, 0xe2, 0x0b, 0x03, 0xbd, 0xf8, 0x08, 0xc6, 0x5c, 0x5e, - 0xba, 0x24, 0xb7, 0xd2, 0x21, 0xd3, 0x5e, 0x52, 0x41, 0x51, 0x0d, 0xa5, 0xd5, 0x12, 0xbf, 0x51, - 0x8a, 0x22, 0x9f, 0xb7, 0xe0, 0x94, 0x1b, 0xf8, 0x3e, 0x75, 0xb5, 0x9d, 0x1f, 0xc9, 0xe3, 0x84, - 0x6d, 0x39, 0xcd, 0x54, 0xa7, 0x88, 0x32, 0x08, 0xcc, 0x8a, 0x27, 0x2f, 0xc1, 0x94, 0x18, 0xb3, - 0xdb, 0xa9, 0xf8, 0x58, 0x9f, 0x39, 0x9b, 0x48, 0x4c, 0xd3, 0x92, 0x05, 0x91, 0x67, 0xe0, 0x87, - 0x30, 0x22, 0x46, 0x96, 0xf9, 0x46, 0x75, 0x4a, 0x13, 0xa1, 0x41, 0x41, 0x42, 0x20, 0x21, 0xad, - 0x85, 0x34, 0x6a, 0x20, 0x7d, 0xad, 0x43, 0xa3, 0x98, 0xef, 0x31, 0xe3, 0x8f, 0x76, 0x1e, 0x85, - 0x3d, 0x9c, 0xb0, 0x0f, 0x77, 0xb2, 0x27, 0x1d, 0xdd, 0x52, 0x1e, 0xcb, 0x49, 0x7e, 0xe6, 0x81, - 0xfe, 0xee, 0x3c, 0x8c, 0x46, 0x0d, 0x27, 0xac, 0xf2, 0xbd, 0xad, 0x58, 0x29, 0x33, 0x5b, 0xb2, - 0xcd, 0x00, 0x28, 0xe0, 0x64, 0x05, 0x4e, 0x67, 0x4e, 0xcc, 0x23, 0xbe, 0x7b, 0x95, 0x2a, 0xb3, - 0x92, 0xdd, 0xe9, 0xcc, 0x59, 0x7b, 0x84, 0x3d, 0x2d, 0xcc, 0x20, 0x68, 0xe2, 0x88, 0x20, 0xa8, - 0x0b, 0x63, 0x4d, 0x91, 0x08, 0x98, 0xe4, 0xa6, 0xf2, 0x66, 0x2e, 0x03, 0xb0, 0x60, 0x26, 0x60, - 0xd4, 0x6c, 0x97, 0x09, 0x05, 0x29, 0x90, 0x7c, 0x86, 0x19, 0x34, 0x23, 0x77, 0x30, 0xc5, 0x15, - 0xb8, 0x9d, 0x8f, 0x02, 0x3d, 0xa9, 0x12, 0x6d, 0xdd, 0x8c, 0x44, 0x84, 0x29, 0x7f, 0xee, 0xc7, - 0x60, 0xe2, 0x51, 0xf3, 0x0e, 0x2f, 0xc3, 0xe9, 0xa1, 0x32, 0x0e, 0xdf, 0xb7, 0x20, 0xf9, 0xae, - 0xcb, 0x8e, 0xdb, 0xa0, 0x6c, 0xca, 0x90, 0x97, 0x61, 0x5a, 0x85, 0x11, 0xcb, 0x41, 0xc7, 0x8f, - 0x39, 0xaf, 0xa2, 0xce, 0x25, 0x63, 0x0a, 0x8b, 0x19, 0x6a, 0xb2, 0x08, 0x65, 0x36, 0x4e, 0xa2, - 0xa9, 0x30, 0xbb, 0x2a, 0x54, 0x59, 0xda, 0x5a, 0x95, 0xad, 0x34, 0x0d, 0x09, 0x60, 0xa6, 0xe9, - 0x44, 0x31, 0xd7, 0x80, 0x45, 0x15, 0x8f, 0x78, 0x1a, 0xcc, 0x0b, 0x86, 0xd6, 0xb2, 0x8c, 0xb0, + // 6883 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x8c, 0x24, 0xc9, + 0x55, 0xe8, 0x66, 0x55, 0x3f, 0xaa, 0x4e, 0x3f, 0x66, 0x3a, 0xe6, 0xb1, 0xed, 0xb9, 0xeb, 0xe9, + 0x51, 0xae, 0x6c, 0xef, 0xbd, 0xf6, 0x76, 0xdf, 0x9d, 0xbb, 0xf6, 0x5d, 0xbc, 0x66, 0x4d, 0x57, + 0xf7, 0x3c, 0x7a, 0xa6, 0x5f, 0x7b, 0xba, 0x67, 0x06, 0xaf, 0x8d, 0xd9, 0xec, 0xac, 0xa8, 0xaa, + 0x9c, 0xae, 0xca, 0xac, 0xcd, 0xcc, 0xea, 0xee, 0xb2, 0xb1, 0xbd, 0x96, 0x0c, 0x5e, 0xc9, 0x4f, + 0xd9, 0x7c, 0xd8, 0x12, 0x02, 0xf3, 0x10, 0x12, 0x1f, 0x16, 0xe2, 0x0b, 0x10, 0xe2, 0x03, 0xf3, + 0x63, 0xc4, 0x07, 0x96, 0x40, 0xd8, 0x60, 0x68, 0xec, 0x01, 0x64, 0x40, 0x02, 0x04, 0xf8, 0x87, + 0x11, 0x42, 0x28, 0x1e, 0x19, 0x11, 0x99, 0x55, 0x35, 0xdd, 0x3d, 0x95, 0x33, 0x58, 0x16, 0x7f, + 0x5d, 0xe7, 0x9c, 0x38, 0xe7, 0x44, 0x64, 0xc4, 0x89, 0x73, 0x4e, 0x9c, 0x88, 0x86, 0xd5, 0xba, + 0x17, 0x37, 0x3a, 0x3b, 0xf3, 0x6e, 0xd0, 0x5a, 0x70, 0xc2, 0x7a, 0xd0, 0x0e, 0x83, 0xbb, 0xfc, + 0x8f, 0x67, 0xdd, 0xea, 0xc2, 0xde, 0xe5, 0x85, 0xf6, 0x6e, 0x7d, 0xc1, 0x69, 0x7b, 0xd1, 0x82, + 0xd3, 0x6e, 0x37, 0x3d, 0xd7, 0x89, 0xbd, 0xc0, 0x5f, 0xd8, 0x7b, 0xce, 0x69, 0xb6, 0x1b, 0xce, + 0x73, 0x0b, 0x75, 0xea, 0xd3, 0xd0, 0x89, 0x69, 0x75, 0xbe, 0x1d, 0x06, 0x71, 0x40, 0xde, 0xa3, + 0xb9, 0xcd, 0x27, 0xdc, 0xf8, 0x1f, 0x3f, 0xe9, 0x56, 0xe7, 0xf7, 0x2e, 0xcf, 0xb7, 0x77, 0xeb, + 0xf3, 0x8c, 0xdb, 0xbc, 0xc1, 0x6d, 0x3e, 0xe1, 0x76, 0xe1, 0x59, 0x43, 0x97, 0x7a, 0x50, 0x0f, + 0x16, 0x38, 0xd3, 0x9d, 0x4e, 0x8d, 0xff, 0xe2, 0x3f, 0xf8, 0x5f, 0x42, 0xd8, 0x05, 0x7b, 0xf7, + 0x85, 0x68, 0xde, 0x0b, 0x98, 0x7a, 0x0b, 0x6e, 0x10, 0xd2, 0x85, 0xbd, 0x1e, 0x85, 0x2e, 0x3c, + 0xaf, 0x69, 0x5a, 0x8e, 0xdb, 0xf0, 0x7c, 0x1a, 0x76, 0x75, 0x9f, 0x5a, 0x34, 0x76, 0xfa, 0xb5, + 0x5a, 0x18, 0xd4, 0x2a, 0xec, 0xf8, 0xb1, 0xd7, 0xa2, 0x3d, 0x0d, 0xde, 0x75, 0x54, 0x83, 0xc8, + 0x6d, 0xd0, 0x96, 0x93, 0x6d, 0x67, 0xbf, 0x06, 0x53, 0x8b, 0x77, 0xb6, 0x16, 0x3b, 0x71, 0x63, + 0x29, 0xf0, 0x6b, 0x5e, 0x9d, 0xbc, 0x13, 0x26, 0xdc, 0x66, 0x27, 0x8a, 0x69, 0xb8, 0xee, 0xb4, + 0xe8, 0xac, 0x75, 0xc9, 0x7a, 0xa6, 0x5c, 0x39, 0xf3, 0xf5, 0xc3, 0xb9, 0x27, 0xee, 0x1d, 0xce, + 0x4d, 0x2c, 0x69, 0x14, 0x9a, 0x74, 0xe4, 0x7f, 0xc3, 0x78, 0x18, 0x34, 0xe9, 0x22, 0xae, 0xcf, + 0x16, 0x78, 0x93, 0x53, 0xb2, 0xc9, 0x38, 0x0a, 0x30, 0x26, 0x78, 0xfb, 0x4f, 0x0b, 0x00, 0x8b, + 0xed, 0xf6, 0x66, 0x18, 0xdc, 0xa5, 0x6e, 0x4c, 0x5e, 0x85, 0x12, 0x1b, 0x85, 0xaa, 0x13, 0x3b, + 0x5c, 0xda, 0xc4, 0xe5, 0xff, 0x3b, 0x2f, 0x3a, 0x33, 0x6f, 0x76, 0x46, 0x7f, 0x39, 0x46, 0x3d, + 0xbf, 0xf7, 0xdc, 0xfc, 0xc6, 0x0e, 0x6b, 0xbf, 0x46, 0x63, 0xa7, 0x42, 0xa4, 0x30, 0xd0, 0x30, + 0x54, 0x5c, 0x89, 0x0f, 0x23, 0x51, 0x9b, 0xba, 0x5c, 0xb1, 0x89, 0xcb, 0xab, 0xf3, 0xc3, 0x4c, + 0x91, 0x79, 0xad, 0xf9, 0x56, 0x9b, 0xba, 0x95, 0x49, 0x29, 0x79, 0x84, 0xfd, 0x42, 0x2e, 0x87, + 0xec, 0xc1, 0x58, 0x14, 0x3b, 0x71, 0x27, 0x9a, 0x2d, 0x72, 0x89, 0xeb, 0xb9, 0x49, 0xe4, 0x5c, + 0x2b, 0xd3, 0x52, 0xe6, 0x98, 0xf8, 0x8d, 0x52, 0x9a, 0xfd, 0x97, 0x16, 0x4c, 0x6b, 0xe2, 0x55, + 0x2f, 0x8a, 0xc9, 0x07, 0x7a, 0x06, 0x77, 0xfe, 0x78, 0x83, 0xcb, 0x5a, 0xf3, 0xa1, 0x3d, 0x2d, + 0x85, 0x95, 0x12, 0x88, 0x31, 0xb0, 0x2d, 0x18, 0xf5, 0x62, 0xda, 0x8a, 0x66, 0x0b, 0x97, 0x8a, + 0xcf, 0x4c, 0x5c, 0xbe, 0x9e, 0x57, 0x3f, 0x2b, 0x53, 0x52, 0xe8, 0xe8, 0x0a, 0x63, 0x8f, 0x42, + 0x8a, 0xfd, 0x7d, 0x30, 0xfb, 0xc7, 0x06, 0x9c, 0x3c, 0x07, 0x13, 0x51, 0xd0, 0x09, 0x5d, 0x8a, + 0xb4, 0x1d, 0x44, 0xb3, 0xd6, 0xa5, 0x22, 0x9b, 0x7a, 0x6c, 0xa6, 0x6e, 0x69, 0x30, 0x9a, 0x34, + 0xe4, 0xb3, 0x16, 0x4c, 0x56, 0x69, 0x14, 0x7b, 0x3e, 0x97, 0x9f, 0x28, 0xbf, 0x3d, 0xb4, 0xf2, + 0x09, 0x70, 0x59, 0x33, 0xaf, 0x9c, 0x95, 0x1d, 0x99, 0x34, 0x80, 0x11, 0xa6, 0xe4, 0xb3, 0x15, + 0x57, 0xa5, 0x91, 0x1b, 0x7a, 0x6d, 0xf6, 0x9b, 0xcf, 0x19, 0x63, 0xc5, 0x2d, 0x6b, 0x14, 0x9a, + 0x74, 0xc4, 0x87, 0x51, 0xb6, 0xa2, 0xa2, 0xd9, 0x11, 0xae, 0xff, 0xca, 0x70, 0xfa, 0xcb, 0x41, + 0x65, 0x8b, 0x55, 0x8f, 0x3e, 0xfb, 0x15, 0xa1, 0x10, 0x43, 0x3e, 0x63, 0xc1, 0xac, 0x5c, 0xf1, + 0x48, 0xc5, 0x80, 0xde, 0x69, 0x78, 0x31, 0x6d, 0x7a, 0x51, 0x3c, 0x3b, 0xca, 0x75, 0x58, 0x38, + 0xde, 0xdc, 0xba, 0x16, 0x06, 0x9d, 0xf6, 0x4d, 0xcf, 0xaf, 0x56, 0x2e, 0x49, 0x49, 0xb3, 0x4b, + 0x03, 0x18, 0xe3, 0x40, 0x91, 0xe4, 0x8b, 0x16, 0x5c, 0xf0, 0x9d, 0x16, 0x8d, 0xda, 0x0e, 0xfb, + 0xb4, 0x02, 0x5d, 0x69, 0x3a, 0xee, 0x2e, 0xd7, 0x68, 0xec, 0xe1, 0x34, 0xb2, 0xa5, 0x46, 0x17, + 0xd6, 0x07, 0xb2, 0xc6, 0x07, 0x88, 0x25, 0xbf, 0x6c, 0xc1, 0x4c, 0x10, 0xb6, 0x1b, 0x8e, 0x4f, + 0xab, 0x09, 0x36, 0x9a, 0x1d, 0xe7, 0x4b, 0xef, 0x83, 0xc3, 0x7d, 0xa2, 0x8d, 0x2c, 0xdb, 0xb5, + 0xc0, 0xf7, 0xe2, 0x20, 0xdc, 0xa2, 0x71, 0xec, 0xf9, 0xf5, 0xa8, 0x72, 0xee, 0xde, 0xe1, 0xdc, + 0x4c, 0x0f, 0x15, 0xf6, 0xea, 0x43, 0x3e, 0x0c, 0x13, 0x51, 0xd7, 0x77, 0xef, 0x78, 0x7e, 0x35, + 0xd8, 0x8f, 0x66, 0x4b, 0x79, 0x2c, 0xdf, 0x2d, 0xc5, 0x50, 0x2e, 0x40, 0x2d, 0x00, 0x4d, 0x69, + 0xfd, 0x3f, 0x9c, 0x9e, 0x4a, 0xe5, 0xbc, 0x3f, 0x9c, 0x9e, 0x4c, 0x0f, 0x10, 0x4b, 0x3e, 0x69, + 0xc1, 0x54, 0xe4, 0xd5, 0x7d, 0x27, 0xee, 0x84, 0xf4, 0x26, 0xed, 0x46, 0xb3, 0xc0, 0x15, 0xb9, + 0x31, 0xe4, 0xa8, 0x18, 0x2c, 0x2b, 0xe7, 0xa4, 0x8e, 0x53, 0x26, 0x34, 0xc2, 0xb4, 0xdc, 0x7e, + 0x0b, 0x4d, 0x4f, 0xeb, 0x89, 0x7c, 0x17, 0x9a, 0x9e, 0xd4, 0x03, 0x45, 0xda, 0x7f, 0x50, 0x80, + 0xd3, 0xd9, 0x3d, 0x88, 0xfc, 0xaa, 0x05, 0xa7, 0xee, 0xee, 0xc7, 0xdb, 0xc1, 0x2e, 0xf5, 0xa3, + 0x4a, 0x97, 0x59, 0x0a, 0x6e, 0x7d, 0x27, 0x2e, 0xbb, 0xf9, 0xee, 0x76, 0xf3, 0x37, 0xd2, 0x52, + 0xae, 0xf8, 0x71, 0xd8, 0xad, 0x3c, 0x29, 0xfb, 0x73, 0xea, 0xc6, 0x9d, 0x6d, 0x13, 0x8b, 0x59, + 0xa5, 0x2e, 0x7c, 0xca, 0x82, 0xb3, 0xfd, 0x58, 0x90, 0xd3, 0x50, 0xdc, 0xa5, 0x5d, 0xe1, 0xe0, + 0x20, 0xfb, 0x93, 0xfc, 0x04, 0x8c, 0xee, 0x39, 0xcd, 0x0e, 0x95, 0x8e, 0xc2, 0xb5, 0xe1, 0x3a, + 0xa2, 0x34, 0x43, 0xc1, 0xf5, 0xdd, 0x85, 0x17, 0x2c, 0xfb, 0x8f, 0x8a, 0x30, 0x61, 0x6c, 0x15, + 0x8f, 0xc1, 0xf9, 0x09, 0x52, 0xce, 0xcf, 0x5a, 0x6e, 0xbb, 0xdc, 0x40, 0xef, 0x67, 0x3f, 0xe3, + 0xfd, 0x6c, 0xe4, 0x27, 0xf2, 0x81, 0xee, 0x0f, 0x89, 0xa1, 0x1c, 0xb4, 0x99, 0x73, 0xcb, 0x76, + 0xd1, 0x91, 0x3c, 0x3e, 0xe1, 0x46, 0xc2, 0xae, 0x32, 0x75, 0xef, 0x70, 0xae, 0xac, 0x7e, 0xa2, + 0x16, 0x64, 0x7f, 0xd3, 0x82, 0xb3, 0x86, 0x8e, 0x4b, 0x81, 0x5f, 0xf5, 0xf8, 0xa7, 0xbd, 0x04, + 0x23, 0x71, 0xb7, 0x9d, 0x78, 0xd0, 0x6a, 0xa4, 0xb6, 0xbb, 0x6d, 0x8a, 0x1c, 0xc3, 0x7c, 0xe6, + 0x16, 0x8d, 0x22, 0xa7, 0x4e, 0xb3, 0x3e, 0xf3, 0x9a, 0x00, 0x63, 0x82, 0x27, 0x21, 0x90, 0xa6, + 0x13, 0xc5, 0xdb, 0xa1, 0xe3, 0x47, 0x9c, 0xfd, 0xb6, 0xd7, 0xa2, 0x72, 0x80, 0xff, 0xcf, 0xf1, + 0x66, 0x0c, 0x6b, 0x51, 0x39, 0x7f, 0xef, 0x70, 0x8e, 0xac, 0xf6, 0x70, 0xc2, 0x3e, 0xdc, 0xed, + 0x2f, 0x5a, 0x70, 0xbe, 0xbf, 0x5b, 0x43, 0xde, 0x0a, 0x63, 0x11, 0x0d, 0xf7, 0x68, 0x28, 0x7b, + 0xa7, 0x3f, 0x09, 0x87, 0xa2, 0xc4, 0x92, 0x05, 0x28, 0x2b, 0x93, 0x2b, 0xfb, 0x38, 0x23, 0x49, + 0xcb, 0xda, 0x4e, 0x6b, 0x1a, 0x36, 0x68, 0xec, 0x87, 0x74, 0x82, 0xd4, 0xa0, 0xf1, 0x78, 0x83, + 0x63, 0xec, 0xbf, 0xb2, 0xe0, 0x94, 0xa1, 0xd5, 0x63, 0xf0, 0x72, 0xfd, 0xb4, 0x97, 0xbb, 0x92, + 0xdb, 0x7c, 0x1e, 0xe0, 0xe6, 0xfe, 0xfe, 0x28, 0xcc, 0x98, 0xb3, 0x9e, 0x9b, 0x63, 0x1e, 0x60, + 0xd1, 0x76, 0x70, 0x0b, 0x57, 0xe5, 0x98, 0xeb, 0x00, 0x4b, 0x80, 0x31, 0xc1, 0xb3, 0x41, 0x6c, + 0x3b, 0x71, 0x43, 0x0e, 0xb8, 0x1a, 0xc4, 0x4d, 0x27, 0x6e, 0x20, 0xc7, 0x90, 0x97, 0x60, 0x3a, + 0x76, 0xc2, 0x3a, 0x8d, 0x91, 0xee, 0x79, 0x51, 0xb2, 0x5e, 0xca, 0x95, 0xf3, 0x92, 0x76, 0x7a, + 0x3b, 0x85, 0xc5, 0x0c, 0x35, 0x79, 0x0d, 0x46, 0x1a, 0xb4, 0xd9, 0x92, 0x7e, 0xcd, 0x56, 0x7e, + 0x2b, 0x9c, 0xf7, 0xf5, 0x3a, 0x6d, 0xb6, 0x2a, 0x25, 0xa6, 0x32, 0xfb, 0x0b, 0xb9, 0x28, 0xf2, + 0xd3, 0x16, 0x94, 0x77, 0x3b, 0x51, 0x1c, 0xb4, 0xbc, 0x0f, 0xd1, 0xd9, 0x12, 0x17, 0xfc, 0xe3, + 0x39, 0x0b, 0xbe, 0x99, 0xf0, 0x17, 0xeb, 0x5d, 0xfd, 0x44, 0x2d, 0x99, 0xeb, 0x51, 0xf5, 0x42, + 0xea, 0xc6, 0x41, 0xd8, 0x9d, 0x85, 0x47, 0xa2, 0xc7, 0x72, 0xc2, 0x5f, 0xe8, 0xa1, 0x7e, 0xa2, + 0x96, 0x4c, 0xba, 0x30, 0xd6, 0x6e, 0x76, 0xea, 0x9e, 0x3f, 0x3b, 0xc1, 0x75, 0xb8, 0x95, 0xb3, + 0x0e, 0x9b, 0x9c, 0x79, 0x05, 0xd8, 0xaa, 0x16, 0x7f, 0xa3, 0x14, 0x48, 0x9e, 0x86, 0x51, 0xb7, + 0xe1, 0x84, 0xf1, 0xec, 0x24, 0x9f, 0x34, 0x6a, 0x16, 0x2f, 0x31, 0x20, 0x0a, 0x9c, 0xfd, 0x8b, + 0x05, 0xb8, 0x30, 0xb8, 0x63, 0x62, 0x3a, 0xbb, 0x9d, 0x30, 0x12, 0x06, 0xb2, 0x64, 0x4e, 0x67, + 0x0e, 0xc6, 0x04, 0x4f, 0x3e, 0x6e, 0xc1, 0xf8, 0xdd, 0x28, 0xf0, 0x7d, 0x1a, 0xcb, 0x5d, 0xec, + 0x76, 0xce, 0x7d, 0xbd, 0x21, 0xb8, 0x6b, 0x1d, 0x24, 0x00, 0x13, 0xb9, 0x4c, 0x5d, 0x7a, 0xe0, + 0x36, 0x3b, 0xd5, 0xc4, 0x34, 0x29, 0xd2, 0x2b, 0x02, 0x8c, 0x09, 0x9e, 0x91, 0x7a, 0xbe, 0x20, + 0x1d, 0x49, 0x93, 0xae, 0xf8, 0x92, 0x54, 0xe2, 0xed, 0xff, 0x1c, 0x85, 0x73, 0x7d, 0x67, 0x3f, + 0x99, 0x07, 0xe0, 0x4e, 0xc3, 0x55, 0x8f, 0x45, 0x78, 0x22, 0xac, 0x9d, 0x66, 0x7b, 0xfc, 0x6d, + 0x05, 0x45, 0x83, 0x82, 0x7c, 0x0c, 0xa0, 0xed, 0x84, 0x4e, 0x8b, 0xc6, 0x34, 0x4c, 0x0c, 0xd5, + 0xcd, 0xe1, 0x46, 0x89, 0xe9, 0xb1, 0x99, 0xf0, 0xd4, 0x4e, 0x86, 0x02, 0x45, 0x68, 0x88, 0x64, + 0x41, 0x6c, 0x48, 0x9b, 0xd4, 0x89, 0xe8, 0xba, 0xb6, 0xdf, 0x2a, 0x88, 0x45, 0x8d, 0x42, 0x93, + 0x8e, 0xc4, 0x30, 0xc6, 0x7b, 0x11, 0xc9, 0x0d, 0x7b, 0xc8, 0xe4, 0xcc, 0x56, 0x1c, 0x7a, 0x7e, + 0x7d, 0x23, 0x14, 0x9e, 0x90, 0xde, 0x96, 0xf8, 0xa8, 0x45, 0x28, 0x65, 0x91, 0xcf, 0x59, 0x30, + 0x5d, 0xf3, 0x9a, 0x54, 0xf7, 0x45, 0x06, 0xb0, 0x1b, 0xc3, 0x0f, 0xd9, 0x55, 0x93, 0xaf, 0x36, + 0xa8, 0x29, 0x70, 0x84, 0x19, 0xf1, 0x6c, 0xd2, 0xec, 0xd1, 0x90, 0x5b, 0xe2, 0xb1, 0xf4, 0xa4, + 0xb9, 0x2d, 0xc0, 0x98, 0xe0, 0xc9, 0x22, 0x9c, 0x6a, 0x3b, 0x51, 0xb4, 0x14, 0xd2, 0x2a, 0xf5, + 0x63, 0xcf, 0x69, 0x8a, 0xf0, 0xb2, 0xa4, 0x7d, 0xe2, 0xcd, 0x34, 0x1a, 0xb3, 0xf4, 0xe4, 0x7d, + 0xf0, 0xa4, 0x57, 0xf7, 0x83, 0x90, 0xae, 0x79, 0x51, 0xe4, 0xf9, 0x75, 0x3d, 0xa9, 0xb8, 0x61, + 0x2d, 0x55, 0xe6, 0x24, 0xab, 0x27, 0x57, 0xfa, 0x93, 0xe1, 0xa0, 0xf6, 0xe4, 0x1d, 0x50, 0x8a, + 0x76, 0xbd, 0xf6, 0x52, 0x58, 0x8d, 0x66, 0xcb, 0x9c, 0x97, 0xda, 0x5a, 0xb7, 0x24, 0x1c, 0x15, + 0x85, 0xfd, 0xe5, 0x02, 0xcc, 0x0e, 0x5a, 0x8d, 0x24, 0x62, 0x6b, 0x2e, 0xbe, 0xed, 0x84, 0x91, + 0x8c, 0x2c, 0x86, 0x0c, 0x50, 0x25, 0xdf, 0xdb, 0x4e, 0x68, 0xae, 0x5e, 0x2e, 0x00, 0x13, 0x49, + 0xe4, 0x2e, 0x8c, 0xc4, 0x4d, 0x27, 0xa7, 0x8c, 0x96, 0x21, 0x51, 0xfb, 0x7f, 0xab, 0x8b, 0x11, + 0x72, 0x19, 0xe4, 0x29, 0x18, 0x69, 0x7a, 0x3b, 0xcc, 0x4f, 0x66, 0xcb, 0x9b, 0x6f, 0x78, 0xab, + 0xde, 0x4e, 0x84, 0x1c, 0x6a, 0xff, 0xf3, 0x58, 0x1f, 0x03, 0xaa, 0xb6, 0x24, 0x72, 0x19, 0x80, + 0xf9, 0x43, 0x9b, 0x21, 0xad, 0x79, 0x07, 0xd2, 0x25, 0x50, 0x8b, 0x74, 0x5d, 0x61, 0xd0, 0xa0, + 0x4a, 0xda, 0x6c, 0x75, 0x6a, 0xac, 0x4d, 0xa1, 0xb7, 0x8d, 0xc0, 0xa0, 0x41, 0x45, 0x9e, 0x87, + 0x31, 0xaf, 0xe5, 0xd4, 0x69, 0xa2, 0xe6, 0x53, 0x6c, 0x3d, 0xad, 0x70, 0xc8, 0xfd, 0xc3, 0xb9, + 0x69, 0xa5, 0x10, 0x07, 0xa1, 0xa4, 0x25, 0xbf, 0x62, 0xc1, 0xa4, 0x1b, 0xb4, 0x5a, 0x81, 0xbf, + 0xea, 0xec, 0xd0, 0x66, 0x92, 0xa4, 0xba, 0xfb, 0xa8, 0x36, 0xec, 0xf9, 0x25, 0x43, 0x98, 0x08, + 0x11, 0x55, 0xea, 0xcd, 0x44, 0x61, 0x4a, 0x2b, 0x73, 0xd9, 0x8d, 0x1e, 0xb1, 0xec, 0x7e, 0xcb, + 0x82, 0x19, 0xd1, 0x76, 0xd1, 0xf7, 0x83, 0x58, 0xe6, 0x0e, 0x45, 0x96, 0x29, 0x78, 0xc4, 0xdd, + 0x32, 0x24, 0x8a, 0xbe, 0xbd, 0x49, 0xaa, 0x39, 0xd3, 0x83, 0xc7, 0x5e, 0x25, 0xc9, 0x35, 0x98, + 0xa9, 0x05, 0xa1, 0x4b, 0xcd, 0x81, 0x90, 0x36, 0x43, 0x31, 0xba, 0x9a, 0x25, 0xc0, 0xde, 0x36, + 0xe4, 0x36, 0x9c, 0x37, 0x80, 0xe6, 0x38, 0x08, 0xb3, 0x71, 0x51, 0x72, 0x3b, 0x7f, 0xb5, 0x2f, + 0x15, 0x0e, 0x68, 0x7d, 0xe1, 0xbd, 0x30, 0xd3, 0xf3, 0xfd, 0xfa, 0xc4, 0xe7, 0x67, 0xcd, 0xf8, + 0xbc, 0x6c, 0x84, 0xd5, 0x17, 0x96, 0xe1, 0x7c, 0xff, 0x91, 0x3a, 0x09, 0x17, 0xfb, 0xe7, 0x2d, + 0x78, 0x72, 0x80, 0x1f, 0xa4, 0x02, 0x13, 0x6b, 0x50, 0x60, 0x42, 0x1c, 0x28, 0x52, 0x7f, 0x4f, + 0x1a, 0x8e, 0xab, 0xc3, 0xcd, 0x88, 0x2b, 0xfe, 0x9e, 0xf8, 0xd0, 0xe3, 0xf7, 0x0e, 0xe7, 0x8a, + 0x57, 0xfc, 0x3d, 0x64, 0xbc, 0xed, 0x9f, 0x1d, 0x4b, 0xc5, 0x3e, 0x5b, 0x49, 0xb8, 0xcd, 0x15, + 0x95, 0x91, 0xcf, 0x46, 0xce, 0x73, 0xd1, 0x88, 0xed, 0x44, 0x12, 0x5d, 0x8a, 0x23, 0x9f, 0xb2, + 0x78, 0xde, 0x3a, 0x89, 0x09, 0xa5, 0x6b, 0xf6, 0x68, 0xd2, 0xe8, 0x66, 0x36, 0x3c, 0x01, 0xa2, + 0x29, 0x9d, 0xad, 0xe4, 0xb6, 0x48, 0x1b, 0x65, 0x1d, 0xb4, 0x24, 0xb3, 0x9d, 0xe0, 0xc9, 0x01, + 0x40, 0xd4, 0xf5, 0xdd, 0xcd, 0xa0, 0xe9, 0xb9, 0x5d, 0xe9, 0x77, 0xe4, 0x90, 0xfb, 0x14, 0xfc, + 0x84, 0x97, 0xa6, 0x7f, 0xa3, 0x21, 0x8b, 0x7c, 0xc5, 0x82, 0x19, 0xb1, 0x71, 0x2e, 0x7b, 0xb5, + 0x1a, 0x0d, 0xa9, 0xef, 0xd2, 0xc4, 0xf5, 0xb8, 0x33, 0x9c, 0x06, 0x49, 0xda, 0x6e, 0x25, 0xcb, + 0x5e, 0x2f, 0xf1, 0x1e, 0x14, 0xf6, 0x2a, 0x43, 0xaa, 0x30, 0xe2, 0xf9, 0xb5, 0x40, 0x1a, 0xb6, + 0xca, 0x70, 0x4a, 0xad, 0xf8, 0xb5, 0x40, 0xaf, 0x15, 0xf6, 0x0b, 0x39, 0x77, 0xb2, 0x0a, 0x67, + 0x43, 0x19, 0x4b, 0x5e, 0xf7, 0x22, 0x16, 0x10, 0xac, 0x7a, 0x2d, 0x2f, 0xe6, 0x46, 0xa9, 0x58, + 0x99, 0xbd, 0x77, 0x38, 0x77, 0x16, 0xfb, 0xe0, 0xb1, 0x6f, 0x2b, 0xfb, 0x8d, 0x72, 0x3a, 0x60, + 0x16, 0xe9, 0xa0, 0x8f, 0x40, 0x39, 0x54, 0x09, 0x78, 0xe1, 0x40, 0xac, 0xe6, 0x33, 0xc6, 0x32, + 0x0f, 0xa5, 0x32, 0x19, 0x3a, 0xd5, 0xae, 0x25, 0x32, 0x47, 0x82, 0x7d, 0x79, 0xb9, 0x2c, 0x72, + 0x98, 0x5f, 0x52, 0xaa, 0x4e, 0xb9, 0x75, 0x7d, 0x17, 0xb9, 0x0c, 0x12, 0xc2, 0x58, 0x83, 0x3a, + 0xcd, 0xb8, 0x21, 0x33, 0x42, 0x37, 0x86, 0x75, 0x63, 0x19, 0xaf, 0x6c, 0xb6, 0x4d, 0x40, 0x51, + 0x4a, 0x22, 0x07, 0x30, 0xde, 0x10, 0x1f, 0x41, 0xee, 0xed, 0x6b, 0xc3, 0x0e, 0x6e, 0xea, 0xcb, + 0xea, 0xf5, 0x2b, 0x01, 0x98, 0x88, 0x23, 0x3f, 0x63, 0x01, 0xb8, 0x49, 0x9a, 0x2d, 0x59, 0x3e, + 0x98, 0x9b, 0xdd, 0x51, 0x19, 0x3c, 0xed, 0x1a, 0x29, 0x50, 0x84, 0x86, 0x64, 0xf2, 0x2a, 0x4c, + 0x86, 0xd4, 0x0d, 0x7c, 0xd7, 0x6b, 0xd2, 0xea, 0x62, 0xcc, 0x3d, 0xf7, 0x93, 0xa5, 0xe3, 0x4e, + 0x33, 0xff, 0x04, 0x0d, 0x1e, 0x98, 0xe2, 0x48, 0xde, 0xb0, 0x60, 0x5a, 0xa5, 0x1a, 0xd9, 0x07, + 0xa1, 0x32, 0xe5, 0xb2, 0x9a, 0x53, 0x62, 0x93, 0xf3, 0xac, 0x10, 0x16, 0xa1, 0xa4, 0x61, 0x98, + 0x91, 0x4b, 0x5e, 0x01, 0x08, 0x76, 0x78, 0x5a, 0x8f, 0x75, 0xb5, 0x74, 0xe2, 0xae, 0x4e, 0x8b, + 0x0c, 0x75, 0xc2, 0x01, 0x0d, 0x6e, 0xe4, 0x26, 0x80, 0x58, 0x36, 0xdb, 0xdd, 0x36, 0xe5, 0x61, + 0x43, 0xb9, 0xf2, 0xf6, 0x64, 0xf0, 0xb7, 0x14, 0xe6, 0xfe, 0xe1, 0x5c, 0x6f, 0xb8, 0xcc, 0xf3, + 0xa9, 0x46, 0x73, 0xf2, 0x61, 0x18, 0x8f, 0x3a, 0xad, 0x96, 0xa3, 0xb2, 0x33, 0x9b, 0xf9, 0xed, + 0x88, 0x82, 0xaf, 0x9e, 0x9b, 0x12, 0x80, 0x89, 0x44, 0xdb, 0x07, 0xd2, 0x4b, 0x4f, 0x9e, 0x87, + 0x49, 0x7a, 0x10, 0xd3, 0xd0, 0x77, 0x9a, 0xb7, 0x70, 0x35, 0x89, 0xe7, 0xf9, 0xc7, 0xbf, 0x62, + 0xc0, 0x31, 0x45, 0x45, 0x6c, 0xe5, 0x79, 0x17, 0x38, 0x3d, 0x68, 0xcf, 0x3b, 0xf1, 0xb3, 0xed, + 0x7f, 0x2f, 0xa4, 0x3c, 0x82, 0xed, 0x90, 0x52, 0x12, 0xc0, 0xa8, 0x1f, 0x54, 0x95, 0xd1, 0xbb, + 0x91, 0x8f, 0xd1, 0x5b, 0x0f, 0xaa, 0xc6, 0xc9, 0x30, 0xfb, 0x15, 0xa1, 0x90, 0xc3, 0x8f, 0xce, + 0x92, 0x33, 0x46, 0x8e, 0x90, 0x4e, 0x50, 0x9e, 0x92, 0xd5, 0xd1, 0xd9, 0x86, 0x29, 0x08, 0xd3, + 0x72, 0xc9, 0x2e, 0x8c, 0x36, 0x82, 0x28, 0x16, 0xb1, 0xca, 0xd0, 0x5e, 0xd8, 0xf5, 0x20, 0x8a, + 0xf9, 0x16, 0xa6, 0xba, 0xcd, 0x20, 0x11, 0x0a, 0x19, 0xf6, 0xf7, 0xac, 0x54, 0xf6, 0xe6, 0x8e, + 0x13, 0xbb, 0x8d, 0x2b, 0x7b, 0xd4, 0x67, 0xf3, 0xd9, 0x4c, 0xfd, 0xff, 0x7f, 0x33, 0xf5, 0x7f, + 0xff, 0x70, 0xee, 0x6d, 0x83, 0x4a, 0x75, 0xf6, 0x19, 0x87, 0x79, 0xce, 0xc2, 0x38, 0x25, 0x78, + 0xdd, 0x82, 0x09, 0x43, 0x3d, 0xb9, 0xa1, 0xe4, 0x98, 0x85, 0x56, 0xce, 0x95, 0x01, 0x44, 0x53, + 0xa4, 0xfd, 0x05, 0x0b, 0xc6, 0x2b, 0x8e, 0xbb, 0x1b, 0xd4, 0x6a, 0x2c, 0xc0, 0xaf, 0x76, 0xe4, + 0x21, 0x8b, 0xe8, 0x9f, 0x0a, 0xf0, 0x97, 0x25, 0x1c, 0x15, 0x05, 0x9b, 0xc3, 0x35, 0xc7, 0x8d, + 0x83, 0x90, 0xab, 0x5d, 0x14, 0x73, 0xf8, 0x2a, 0x87, 0xa0, 0xc4, 0x90, 0x77, 0xc2, 0x44, 0xcb, + 0x39, 0x48, 0x1a, 0x67, 0x53, 0x47, 0x6b, 0x1a, 0x85, 0x26, 0x9d, 0xfd, 0x7b, 0x65, 0x18, 0x97, + 0xa7, 0x99, 0xc7, 0x3e, 0x8f, 0x48, 0xbc, 0xf8, 0xc2, 0x40, 0x2f, 0x3e, 0x82, 0x31, 0x97, 0x17, + 0x42, 0xc9, 0xad, 0x74, 0xc8, 0x24, 0x9a, 0x54, 0x50, 0xd4, 0x56, 0x69, 0xb5, 0xc4, 0x6f, 0x94, + 0xa2, 0xc8, 0xe7, 0x2d, 0x38, 0xe5, 0x06, 0xbe, 0x4f, 0x5d, 0x6d, 0xe7, 0x47, 0xf2, 0x38, 0xaf, + 0x5b, 0x4a, 0x33, 0xd5, 0x29, 0xa2, 0x0c, 0x02, 0xb3, 0xe2, 0xc9, 0x8b, 0x30, 0x25, 0xc6, 0xec, + 0x76, 0x2a, 0x3e, 0xd6, 0x27, 0xd8, 0x26, 0x12, 0xd3, 0xb4, 0x64, 0x5e, 0xe4, 0x19, 0xf8, 0x91, + 0x8e, 0x88, 0x91, 0x65, 0xf6, 0x52, 0x9d, 0xf9, 0x44, 0x68, 0x50, 0x90, 0x10, 0x48, 0x48, 0x6b, + 0x21, 0x8d, 0x1a, 0x48, 0x5f, 0xeb, 0xd0, 0x28, 0xe6, 0x7b, 0xcc, 0xf8, 0xc3, 0x9d, 0x6e, 0x61, + 0x0f, 0x27, 0xec, 0xc3, 0x9d, 0xec, 0x4a, 0x47, 0xb7, 0x94, 0xc7, 0x72, 0x92, 0x9f, 0x79, 0xa0, + 0xbf, 0x3b, 0x07, 0xa3, 0x51, 0xc3, 0x09, 0xab, 0x7c, 0x6f, 0x2b, 0x56, 0xca, 0xcc, 0x96, 0x6c, + 0x31, 0x00, 0x0a, 0x38, 0x59, 0x86, 0xd3, 0x99, 0xf3, 0xf7, 0x88, 0xef, 0x5e, 0xa5, 0xca, 0xac, + 0x64, 0x77, 0x3a, 0x73, 0x72, 0x1f, 0x61, 0x4f, 0x0b, 0x33, 0x08, 0x9a, 0x38, 0x22, 0x08, 0xea, + 0xc2, 0x58, 0x53, 0x24, 0x02, 0x26, 0xb9, 0xa9, 0x7c, 0x39, 0x97, 0x01, 0x98, 0x37, 0x13, 0x30, + 0x6a, 0xb6, 0xcb, 0x84, 0x82, 0x14, 0x48, 0x3e, 0xc3, 0x0c, 0x9a, 0x91, 0x3b, 0x98, 0xe2, 0x0a, + 0xdc, 0xce, 0x47, 0x81, 0x9e, 0x54, 0x89, 0xb6, 0x6e, 0x46, 0x22, 0xc2, 0x94, 0x7f, 0xe1, 0x47, + 0x60, 0xe2, 0x61, 0xf3, 0x0e, 0x2f, 0xc1, 0xe9, 0xa1, 0x32, 0x0e, 0xdf, 0xb7, 0x20, 0xf9, 0xae, + 0x4b, 0x8e, 0xdb, 0xa0, 0x6c, 0xca, 0x90, 0x97, 0x60, 0x5a, 0x85, 0x11, 0x4b, 0x41, 0xc7, 0x8f, + 0x39, 0xaf, 0xa2, 0xce, 0x25, 0x63, 0x0a, 0x8b, 0x19, 0x6a, 0xb2, 0x00, 0x65, 0x36, 0x4e, 0xa2, + 0xa9, 0x30, 0xbb, 0x2a, 0x54, 0x59, 0xdc, 0x5c, 0x91, 0xad, 0x34, 0x0d, 0x09, 0x60, 0xa6, 0xe9, + 0x44, 0x31, 0xd7, 0x80, 0x45, 0x15, 0x0f, 0x79, 0xb6, 0xcc, 0xcb, 0x8f, 0x56, 0xb3, 0x8c, 0xb0, 0x97, 0xb7, 0xfd, 0xcd, 0x11, 0x98, 0x4a, 0x59, 0x46, 0xb6, 0xab, 0x74, 0x22, 0xe6, 0xfa, 0xa8, - 0x14, 0x8b, 0xda, 0x55, 0x6e, 0x49, 0x38, 0x2a, 0x0a, 0x46, 0xdd, 0x76, 0xa2, 0xe8, 0x5e, 0x10, - 0x56, 0xa5, 0x29, 0x57, 0xd4, 0x5b, 0x12, 0x8e, 0x8a, 0x82, 0xed, 0x2f, 0xbb, 0xd4, 0x09, 0x69, - 0xc8, 0x0b, 0x28, 0xb2, 0xfb, 0x4b, 0x45, 0xa3, 0xd0, 0xa4, 0xe3, 0x46, 0x39, 0x6e, 0x46, 0xcb, - 0x4d, 0x8f, 0xfa, 0xb1, 0x50, 0x33, 0x1f, 0xa3, 0xbc, 0xb3, 0xb6, 0x6d, 0x32, 0xd5, 0x46, 0x39, - 0x83, 0xc0, 0xac, 0x78, 0xf2, 0x09, 0x0b, 0xa6, 0x9c, 0x7b, 0x91, 0xae, 0xaf, 0xe5, 0x56, 0x79, - 0xe8, 0x4d, 0x2a, 0x55, 0xb2, 0x5b, 0x99, 0x61, 0xe6, 0x3d, 0x05, 0xc2, 0xb4, 0x50, 0xf2, 0x25, - 0x0b, 0x08, 0x3d, 0xa0, 0xee, 0x56, 0x18, 0xec, 0x7b, 0xd5, 0xe4, 0x1b, 0xca, 0xf0, 0x67, 0x48, - 0x6f, 0xfb, 0x72, 0x0f, 0x5f, 0x61, 0xd5, 0x7b, 0xe1, 0xd8, 0x47, 0x07, 0xfb, 0xaf, 0x8a, 0x30, - 0x61, 0x18, 0xe3, 0xbe, 0x3b, 0xab, 0xf5, 0x03, 0xb6, 0xb3, 0x16, 0x4e, 0xb0, 0xb3, 0x7e, 0x14, - 0xca, 0x6e, 0x62, 0x28, 0xf2, 0xa9, 0x07, 0xce, 0x9a, 0x1f, 0x6d, 0x2b, 0x14, 0x08, 0xb5, 0x4c, - 0x72, 0x15, 0x66, 0x0c, 0x36, 0xd2, 0xc8, 0x8c, 0x70, 0x23, 0xa3, 0x12, 0x4d, 0x4b, 0x59, 0x02, - 0xec, 0x6d, 0x43, 0x9e, 0x67, 0x5e, 0xad, 0x27, 0xfb, 0x25, 0xa2, 0x78, 0x59, 0x6b, 0xbb, 0xb4, - 0xb5, 0x9a, 0x80, 0xd1, 0xa4, 0xb1, 0xbf, 0x69, 0xa9, 0x8f, 0xfb, 0x04, 0x0a, 0x35, 0xee, 0xa6, - 0x0b, 0x35, 0x2e, 0xe7, 0x32, 0xcc, 0x03, 0x8a, 0x34, 0x36, 0x60, 0x7c, 0x39, 0x68, 0xb5, 0x1c, - 0xbf, 0x4a, 0xde, 0x04, 0xe3, 0xae, 0xf8, 0x53, 0x86, 0x89, 0x13, 0x6c, 0xff, 0x96, 0x58, 0x4c, - 0x70, 0xe4, 0x19, 0x18, 0x71, 0xc2, 0x7a, 0x12, 0x1a, 0xf2, 0xb3, 0xa3, 0xa5, 0xb0, 0x1e, 0x21, - 0x87, 0xda, 0x5f, 0x2c, 0x00, 0x2c, 0x07, 0xad, 0xb6, 0x13, 0xd2, 0xea, 0x4e, 0xf0, 0xbf, 0x39, - 0x62, 0x11, 0x31, 0x7c, 0xda, 0x02, 0xc2, 0x46, 0x25, 0xf0, 0xa9, 0x1f, 0xab, 0xc3, 0x57, 0xb6, - 0x5f, 0xba, 0x09, 0x54, 0x6e, 0x3e, 0x7a, 0x0d, 0x24, 0x08, 0xd4, 0x34, 0xc7, 0x88, 0x22, 0x9e, - 0x4d, 0x76, 0xfc, 0x62, 0xba, 0xa6, 0x81, 0x1f, 0x94, 0x4a, 0x07, 0xc0, 0xfe, 0x5a, 0x01, 0xce, - 0x0b, 0xb3, 0xb5, 0xee, 0xf8, 0x4e, 0x9d, 0xb6, 0x98, 0x56, 0xc7, 0x3d, 0x6d, 0x70, 0x99, 0xfb, - 0xea, 0x25, 0x25, 0x0c, 0xc3, 0x4e, 0x4e, 0x31, 0xa9, 0xc4, 0x34, 0x5a, 0xf5, 0xbd, 0x18, 0x39, - 0x73, 0x12, 0x41, 0x29, 0xb9, 0xe1, 0x21, 0x8d, 0x4d, 0x4e, 0x82, 0xd4, 0xba, 0xbb, 0x2a, 0xd9, - 0xa3, 0x12, 0xc4, 0x36, 0xf7, 0x66, 0xe0, 0xee, 0x21, 0x6d, 0x07, 0xdc, 0xb0, 0x18, 0x27, 0xc8, - 0x6b, 0x12, 0x8e, 0x8a, 0xc2, 0xfe, 0x9a, 0x05, 0x59, 0x93, 0xcb, 0xa3, 0x41, 0x51, 0x33, 0x98, - 0x8d, 0x06, 0xd3, 0x25, 0x7e, 0x27, 0xa8, 0x98, 0x7b, 0x3f, 0x4c, 0x38, 0x71, 0x4c, 0x5b, 0x6d, - 0x11, 0x9a, 0x14, 0x1f, 0x2d, 0xfd, 0xb5, 0x1e, 0x54, 0xbd, 0x9a, 0xc7, 0x43, 0x12, 0x93, 0x9d, - 0x7d, 0x13, 0x4a, 0xc9, 0x89, 0xcf, 0x31, 0x3e, 0xfd, 0xb3, 0x29, 0x77, 0x72, 0xc0, 0xe4, 0x7a, - 0x50, 0x80, 0x3e, 0x7b, 0x26, 0xeb, 0xb2, 0xb6, 0x2e, 0xa9, 0x2e, 0x9f, 0xcc, 0xc2, 0x90, 0x03, - 0x71, 0xda, 0x25, 0xf2, 0x2c, 0xef, 0xcd, 0x7b, 0xcf, 0xd7, 0x07, 0x60, 0x13, 0x52, 0x3f, 0x75, - 0x08, 0x46, 0x2e, 0x01, 0xe8, 0x4d, 0x41, 0x16, 0x7a, 0xa8, 0x4c, 0xad, 0xde, 0x3b, 0xd0, 0xa0, - 0x62, 0x2e, 0xa0, 0xe7, 0x47, 0xb1, 0xd3, 0x6c, 0x5e, 0xf3, 0xfc, 0x58, 0xc6, 0xb2, 0xca, 0x60, - 0xac, 0x6a, 0x14, 0x9a, 0x74, 0x73, 0xef, 0x34, 0xbe, 0xcb, 0x49, 0xdc, 0xfa, 0x4f, 0x17, 0x60, - 0xfa, 0xaa, 0xdf, 0xd9, 0xba, 0xba, 0xd5, 0xd9, 0x6d, 0x7a, 0xee, 0x0d, 0xda, 0x65, 0x1f, 0x6d, - 0x8f, 0x76, 0x57, 0x57, 0xe4, 0xb0, 0xab, 0x8f, 0x76, 0x83, 0x01, 0x51, 0xe0, 0x98, 0x9a, 0x35, - 0xcf, 0xaf, 0xd3, 0xb0, 0x1d, 0x7a, 0xd2, 0x77, 0x37, 0xd4, 0xbc, 0xa2, 0x51, 0x68, 0xd2, 0x31, - 0xde, 0xc1, 0x3d, 0x9f, 0x86, 0x59, 0x6b, 0xb3, 0xc9, 0x80, 0x28, 0x70, 0x8c, 0x28, 0x0e, 0x3b, - 0x51, 0x2c, 0x47, 0x4c, 0x11, 0xed, 0x30, 0x20, 0x0a, 0x1c, 0x9b, 0x1e, 0x51, 0x67, 0x97, 0x67, - 0x61, 0x33, 0xe7, 0xe1, 0xdb, 0x02, 0x8c, 0x09, 0x9e, 0x91, 0xee, 0xd1, 0xee, 0x0a, 0xdb, 0x7b, - 0x33, 0x15, 0x2b, 0x37, 0x04, 0x18, 0x13, 0xbc, 0xfd, 0xf7, 0x16, 0x90, 0xf4, 0x70, 0x3c, 0x81, - 0xed, 0xfb, 0xb5, 0xf4, 0xf6, 0x3d, 0x64, 0xc2, 0x3c, 0xad, 0xfe, 0x80, 0x5d, 0xfc, 0x57, 0x2c, - 0x98, 0x34, 0xcf, 0x4e, 0x48, 0x3d, 0x63, 0x88, 0x36, 0xd3, 0x86, 0xe8, 0xc1, 0xe1, 0xfc, 0x8f, - 0xf7, 0xbb, 0xae, 0x58, 0xf7, 0xe2, 0xa0, 0x1d, 0xbd, 0x9d, 0xfa, 0x75, 0xcf, 0xa7, 0x3c, 0x33, - 0x28, 0xce, 0x5c, 0x52, 0x07, 0x33, 0xcb, 0x41, 0x95, 0x3e, 0x82, 0x25, 0xb3, 0xef, 0xc0, 0x4c, - 0x4f, 0x99, 0xd2, 0x31, 0x8c, 0xce, 0x91, 0x55, 0xa0, 0x36, 0xc2, 0x04, 0x63, 0xbc, 0xd9, 0x16, - 0x87, 0x23, 0xcb, 0x30, 0x23, 0xaa, 0xad, 0x98, 0xa4, 0x6d, 0xb7, 0x41, 0x5b, 0xaa, 0xf4, 0x8c, - 0x07, 0x8a, 0xb7, 0xb3, 0x48, 0xec, 0xa5, 0xb7, 0x3f, 0x63, 0xc1, 0x54, 0xaa, 0x72, 0x2c, 0x27, - 0xf3, 0xc8, 0x57, 0x5a, 0xc0, 0x8f, 0xf2, 0x42, 0xcf, 0x17, 0xb9, 0xbe, 0x92, 0xb1, 0xd2, 0x34, - 0x0a, 0x4d, 0x3a, 0xfb, 0x0b, 0x05, 0x28, 0x25, 0x59, 0xe1, 0x63, 0xa8, 0xf2, 0x29, 0x0b, 0xa6, - 0x54, 0x70, 0xce, 0x5d, 0x76, 0x31, 0x19, 0x37, 0x86, 0xcf, 0x4b, 0xab, 0xf3, 0x5e, 0xe6, 0xb2, - 0xab, 0xd8, 0x01, 0x4d, 0x61, 0x98, 0x96, 0x4d, 0x6e, 0x03, 0x44, 0xdd, 0x28, 0xa6, 0x2d, 0x23, - 0x78, 0xb0, 0x8d, 0x15, 0xb7, 0xe0, 0x06, 0x21, 0x65, 0xeb, 0x6b, 0x23, 0xa8, 0xd2, 0x6d, 0x45, - 0xa9, 0x8d, 0xab, 0x86, 0xa1, 0xc1, 0xc9, 0xfe, 0xcd, 0x02, 0x9c, 0xce, 0xaa, 0x44, 0xde, 0x07, - 0x93, 0x89, 0x74, 0xe3, 0xe6, 0x67, 0x92, 0x0a, 0x9f, 0x44, 0x03, 0xf7, 0xe0, 0x70, 0x7e, 0xbe, - 0xf7, 0xea, 0xeb, 0x82, 0x49, 0x82, 0x29, 0x66, 0x22, 0x43, 0x22, 0x53, 0x79, 0x95, 0xee, 0x52, - 0xbb, 0x2d, 0xd3, 0x1c, 0x46, 0x86, 0xc4, 0xc4, 0x62, 0x86, 0x9a, 0x6c, 0xc1, 0x59, 0x03, 0xb2, - 0x41, 0xbd, 0x7a, 0x63, 0x37, 0x08, 0xc5, 0x15, 0x83, 0x62, 0xe5, 0x19, 0xc9, 0xe5, 0x2c, 0xf6, - 0xa1, 0xc1, 0xbe, 0x2d, 0x99, 0xd3, 0xe2, 0x3a, 0x6d, 0xc7, 0xf5, 0xe2, 0xae, 0x8c, 0x86, 0x94, - 0x6d, 0x5a, 0x96, 0x70, 0x54, 0x14, 0xf6, 0x3a, 0x8c, 0x1c, 0x73, 0x06, 0x1d, 0x6b, 0xaf, 0xbf, - 0x09, 0x25, 0xc6, 0x8e, 0xd9, 0xa2, 0xbc, 0x58, 0x06, 0x50, 0x4a, 0x6e, 0x9c, 0x10, 0x1b, 0x8a, - 0x9e, 0x93, 0x24, 0xa1, 0x54, 0xb7, 0x56, 0xa3, 0xa8, 0xc3, 0x3d, 0x19, 0x86, 0x24, 0xcf, 0x42, - 0x91, 0x1e, 0xb4, 0xb3, 0xd9, 0xa6, 0xcb, 0x07, 0x6d, 0x2f, 0xa4, 0x11, 0x23, 0xa2, 0x07, 0x6d, - 0x32, 0x07, 0x05, 0xaf, 0x2a, 0x37, 0x29, 0x90, 0x34, 0x85, 0xd5, 0x15, 0x2c, 0x78, 0x55, 0xfb, - 0x00, 0xca, 0xea, 0x8a, 0x0b, 0xd9, 0x4b, 0x6c, 0xb7, 0x95, 0xc7, 0x31, 0x4e, 0xc2, 0x77, 0x80, - 0xd5, 0xee, 0x00, 0xe8, 0x3a, 0xbd, 0xbc, 0xec, 0xcb, 0x45, 0x18, 0x71, 0x03, 0x59, 0xde, 0x5b, - 0xd2, 0x6c, 0xb8, 0xd1, 0xe6, 0x18, 0xfb, 0x0e, 0x4c, 0xdf, 0xf0, 0x83, 0x7b, 0x3e, 0xdb, 0x4c, - 0xaf, 0x78, 0xb4, 0x59, 0x65, 0x8c, 0x6b, 0xec, 0x8f, 0xac, 0x8b, 0xc0, 0xb1, 0x28, 0x70, 0xea, - 0x1e, 0x48, 0x61, 0xd0, 0x3d, 0x10, 0xfb, 0x63, 0x16, 0x9c, 0x56, 0x05, 0x64, 0x89, 0x35, 0x7e, - 0x11, 0x26, 0x77, 0x3b, 0x5e, 0xb3, 0x2a, 0x7f, 0x4b, 0x11, 0xaa, 0x44, 0xae, 0x62, 0xe0, 0x30, - 0x45, 0xc9, 0xdc, 0xad, 0x5d, 0xcf, 0x77, 0xc2, 0xee, 0x96, 0x36, 0xff, 0xca, 0x22, 0x54, 0x14, - 0x06, 0x0d, 0x2a, 0xfb, 0xcf, 0x8b, 0xa0, 0xaf, 0xb7, 0x10, 0x4f, 0x56, 0x42, 0x58, 0x79, 0xe4, - 0xaa, 0xb6, 0xbb, 0xbe, 0xab, 0x2f, 0xd2, 0x94, 0x32, 0x85, 0x10, 0x9f, 0xb4, 0x98, 0xa3, 0xe7, - 0xc5, 0x9e, 0xc3, 0xd7, 0xa7, 0x8c, 0x8e, 0xb6, 0x72, 0x3a, 0x2c, 0x5f, 0x15, 0x9c, 0x83, 0xd0, - 0x74, 0x1d, 0x95, 0x30, 0x34, 0x25, 0x93, 0x57, 0xe5, 0xf1, 0x42, 0x31, 0xb7, 0x3a, 0x9a, 0x52, - 0xe6, 0x4c, 0xa1, 0x0d, 0xa3, 0x21, 0x8d, 0xc3, 0xa4, 0x82, 0xe9, 0xc6, 0xb0, 0x87, 0xad, 0x71, - 0xd8, 0xdd, 0x8e, 0x59, 0x04, 0x56, 0x37, 0xfc, 0x1b, 0x0e, 0x46, 0x21, 0xc8, 0x8e, 0x80, 0xf4, - 0x8e, 0xc5, 0x09, 0x53, 0xb7, 0x8b, 0x50, 0x76, 0x3a, 0x71, 0xd0, 0x62, 0xc3, 0xc4, 0x3f, 0x4f, - 0xc9, 0x48, 0x4e, 0x27, 0x08, 0xd4, 0x34, 0xf6, 0xe7, 0x46, 0x21, 0x53, 0x9a, 0x40, 0x0e, 0xcc, - 0xab, 0x59, 0x56, 0xbe, 0x57, 0xb3, 0x94, 0x32, 0xfd, 0xae, 0x67, 0x91, 0x3a, 0x8c, 0xb6, 0x1b, - 0x4e, 0x94, 0x2c, 0xbf, 0x9b, 0xc9, 0x30, 0x6d, 0x31, 0xe0, 0x83, 0xc3, 0xf9, 0x9f, 0x38, 0x9e, - 0x3b, 0xc7, 0xe6, 0xea, 0xa2, 0xa8, 0xd3, 0xd4, 0xa2, 0x39, 0x0f, 0x14, 0xfc, 0x4d, 0x87, 0xae, - 0x78, 0x44, 0x68, 0xfa, 0x71, 0x4b, 0xd4, 0xb3, 0x21, 0x8d, 0x3a, 0xcd, 0x58, 0xce, 0x86, 0x9b, - 0x39, 0xae, 0x32, 0xc1, 0x58, 0x17, 0xb6, 0x89, 0xdf, 0x68, 0x08, 0x25, 0xef, 0x83, 0x72, 0x14, - 0x3b, 0x61, 0xfc, 0x88, 0x65, 0x30, 0x6a, 0xd0, 0xb7, 0x13, 0x26, 0xa8, 0xf9, 0x91, 0x57, 0x00, - 0x6a, 0x9e, 0xef, 0x45, 0x8d, 0x47, 0x3c, 0x15, 0xe4, 0x8a, 0x5f, 0x51, 0x1c, 0xd0, 0xe0, 0xc6, + 0x14, 0x8b, 0xda, 0x55, 0x6e, 0x49, 0x38, 0x2a, 0x0a, 0x46, 0xdd, 0x76, 0xa2, 0x68, 0x3f, 0x08, + 0xab, 0xd2, 0x94, 0x2b, 0xea, 0x4d, 0x09, 0x47, 0x45, 0xc1, 0xf6, 0x97, 0x1d, 0xea, 0x84, 0x34, + 0xe4, 0xe5, 0x18, 0xd9, 0xfd, 0xa5, 0xa2, 0x51, 0x68, 0xd2, 0x71, 0xa3, 0x1c, 0x37, 0xa3, 0xa5, + 0xa6, 0x47, 0xfd, 0x58, 0xa8, 0x99, 0x8f, 0x51, 0xde, 0x5e, 0xdd, 0x32, 0x99, 0x6a, 0xa3, 0x9c, + 0x41, 0x60, 0x56, 0x3c, 0xf9, 0x84, 0x05, 0x53, 0xce, 0x7e, 0xa4, 0xab, 0x75, 0xb9, 0x55, 0x1e, + 0x7a, 0x93, 0x4a, 0x15, 0x00, 0x57, 0x66, 0x98, 0x79, 0x4f, 0x81, 0x30, 0x2d, 0x94, 0x7c, 0xc9, + 0x02, 0x42, 0x0f, 0xa8, 0xbb, 0x19, 0x06, 0x7b, 0x5e, 0x35, 0xf9, 0x86, 0x32, 0xfc, 0x19, 0xd2, + 0xdb, 0xbe, 0xd2, 0xc3, 0x57, 0x58, 0xf5, 0x5e, 0x38, 0xf6, 0xd1, 0xc1, 0xfe, 0xf3, 0x22, 0x4c, + 0x18, 0xc6, 0xb8, 0xef, 0xce, 0x6a, 0xfd, 0x80, 0xed, 0xac, 0x85, 0x13, 0xec, 0xac, 0x1f, 0x83, + 0xb2, 0x9b, 0x18, 0x8a, 0x7c, 0xaa, 0x8b, 0xb3, 0xe6, 0x47, 0xdb, 0x0a, 0x05, 0x42, 0x2d, 0x93, + 0x5c, 0x83, 0x19, 0x83, 0x8d, 0x34, 0x32, 0x23, 0xdc, 0xc8, 0xa8, 0x44, 0xd3, 0x62, 0x96, 0x00, + 0x7b, 0xdb, 0x90, 0xe7, 0x98, 0x57, 0xeb, 0xc9, 0x7e, 0x89, 0x28, 0x5e, 0x56, 0xee, 0x2e, 0x6e, + 0xae, 0x24, 0x60, 0x34, 0x69, 0xec, 0x6f, 0x5a, 0xea, 0xe3, 0x3e, 0x86, 0xb2, 0x8f, 0xbb, 0xe9, + 0xb2, 0x8f, 0x2b, 0xb9, 0x0c, 0xf3, 0x80, 0x92, 0x8f, 0x75, 0x18, 0x5f, 0x0a, 0x5a, 0x2d, 0xc7, + 0xaf, 0x92, 0xb7, 0xc0, 0xb8, 0x2b, 0xfe, 0x94, 0x61, 0xe2, 0x04, 0xdb, 0xbf, 0x25, 0x16, 0x13, + 0x1c, 0x79, 0x0a, 0x46, 0x9c, 0xb0, 0x9e, 0x84, 0x86, 0xfc, 0xec, 0x68, 0x31, 0xac, 0x47, 0xc8, + 0xa1, 0xf6, 0x17, 0x0b, 0x00, 0x4b, 0x41, 0xab, 0xed, 0x84, 0xb4, 0xba, 0x1d, 0xfc, 0x4f, 0x8e, + 0x58, 0x44, 0x0c, 0x9f, 0xb6, 0x80, 0xb0, 0x51, 0x09, 0x7c, 0xea, 0xc7, 0xea, 0xf0, 0x95, 0xed, + 0x97, 0x6e, 0x02, 0x95, 0x9b, 0x8f, 0x5e, 0x03, 0x09, 0x02, 0x35, 0xcd, 0x31, 0xa2, 0x88, 0xa7, + 0x93, 0x1d, 0xbf, 0x98, 0xae, 0x90, 0xe0, 0x07, 0xa5, 0xd2, 0x01, 0xb0, 0xbf, 0x56, 0x80, 0xf3, + 0xc2, 0x6c, 0xad, 0x39, 0xbe, 0x53, 0xa7, 0x2d, 0xa6, 0xd5, 0x71, 0x4f, 0x1b, 0x5c, 0xe6, 0xbe, + 0x7a, 0x49, 0x41, 0xc4, 0xb0, 0x93, 0x53, 0x4c, 0x2a, 0x31, 0x8d, 0x56, 0x7c, 0x2f, 0x46, 0xce, + 0x9c, 0x44, 0x50, 0x4a, 0xee, 0x8b, 0x48, 0x63, 0x93, 0x93, 0x20, 0xb5, 0xee, 0xae, 0x49, 0xf6, + 0xa8, 0x04, 0xb1, 0xcd, 0xbd, 0x19, 0xb8, 0xbb, 0x48, 0xdb, 0x01, 0x37, 0x2c, 0xc6, 0x09, 0xf2, + 0xaa, 0x84, 0xa3, 0xa2, 0xb0, 0xbf, 0x66, 0x41, 0xd6, 0xe4, 0xf2, 0x68, 0x50, 0x54, 0x20, 0x66, + 0xa3, 0xc1, 0x74, 0xc1, 0xe0, 0x09, 0xea, 0xef, 0x3e, 0x00, 0x13, 0x4e, 0x1c, 0xd3, 0x56, 0x5b, + 0x84, 0x26, 0xc5, 0x87, 0x4b, 0x7f, 0xad, 0x05, 0x55, 0xaf, 0xe6, 0xf1, 0x90, 0xc4, 0x64, 0x67, + 0xbf, 0x0c, 0xa5, 0xe4, 0xc4, 0xe7, 0x18, 0x9f, 0xfe, 0xe9, 0x94, 0x3b, 0x39, 0x60, 0x72, 0xdd, + 0x2f, 0x40, 0x9f, 0x3d, 0x93, 0x75, 0x59, 0x5b, 0x97, 0x54, 0x97, 0x4f, 0x66, 0x61, 0xc8, 0x81, + 0x38, 0xed, 0x12, 0x79, 0x96, 0xf7, 0xe5, 0xbd, 0xe7, 0xeb, 0x03, 0xb0, 0x09, 0xa9, 0x9f, 0x3a, + 0x04, 0x23, 0x97, 0x01, 0xf4, 0xa6, 0x20, 0x4b, 0x6c, 0x54, 0xa6, 0x56, 0xef, 0x1d, 0x68, 0x50, + 0x31, 0x17, 0xd0, 0xf3, 0xa3, 0xd8, 0x69, 0x36, 0xaf, 0x7b, 0x7e, 0x2c, 0x63, 0x59, 0x65, 0x30, + 0x56, 0x34, 0x0a, 0x4d, 0xba, 0x0b, 0xef, 0x32, 0xbe, 0xcb, 0x49, 0xdc, 0xfa, 0x4f, 0x17, 0x60, + 0xfa, 0x9a, 0xdf, 0xd9, 0xbc, 0xb6, 0xd9, 0xd9, 0x69, 0x7a, 0xee, 0x4d, 0xda, 0x65, 0x1f, 0x6d, + 0x97, 0x76, 0x57, 0x96, 0xe5, 0xb0, 0xab, 0x8f, 0x76, 0x93, 0x01, 0x51, 0xe0, 0x98, 0x9a, 0x35, + 0xcf, 0xaf, 0xd3, 0xb0, 0x1d, 0x7a, 0xd2, 0x77, 0x37, 0xd4, 0xbc, 0xaa, 0x51, 0x68, 0xd2, 0x31, + 0xde, 0xc1, 0xbe, 0x4f, 0xc3, 0xac, 0xb5, 0xd9, 0x60, 0x40, 0x14, 0x38, 0x46, 0x14, 0x87, 0x9d, + 0x28, 0x96, 0x23, 0xa6, 0x88, 0xb6, 0x19, 0x10, 0x05, 0x8e, 0x4d, 0x8f, 0xa8, 0xb3, 0xc3, 0xb3, + 0xb0, 0x99, 0xf3, 0xf0, 0x2d, 0x01, 0xc6, 0x04, 0xcf, 0x48, 0x77, 0x69, 0x77, 0x99, 0xed, 0xbd, + 0x99, 0x8a, 0x95, 0x9b, 0x02, 0x8c, 0x09, 0xde, 0xfe, 0x5b, 0x0b, 0x48, 0x7a, 0x38, 0x1e, 0xc3, + 0xf6, 0xfd, 0x5a, 0x7a, 0xfb, 0x1e, 0x32, 0x61, 0x9e, 0x56, 0x7f, 0xc0, 0x2e, 0xfe, 0x4b, 0x16, + 0x4c, 0x9a, 0x67, 0x27, 0xa4, 0x9e, 0x31, 0x44, 0x1b, 0x69, 0x43, 0x74, 0xff, 0x70, 0xee, 0x47, + 0xfb, 0x5d, 0x7e, 0xac, 0x7b, 0x71, 0xd0, 0x8e, 0x9e, 0xa5, 0x7e, 0xdd, 0xf3, 0x29, 0xcf, 0x0c, + 0x8a, 0x33, 0x97, 0xd4, 0xc1, 0xcc, 0x52, 0x50, 0xa5, 0x0f, 0x61, 0xc9, 0xec, 0x3b, 0x30, 0xd3, + 0x53, 0xa6, 0x74, 0x0c, 0xa3, 0x73, 0x64, 0x4d, 0xa9, 0x8d, 0x30, 0xc1, 0x18, 0x6f, 0xb4, 0xc5, + 0xe1, 0xc8, 0x12, 0xcc, 0x88, 0x6a, 0x2b, 0x26, 0x69, 0xcb, 0x6d, 0xd0, 0x96, 0x2a, 0x64, 0xe3, + 0x81, 0xe2, 0xed, 0x2c, 0x12, 0x7b, 0xe9, 0xed, 0xcf, 0x58, 0x30, 0x95, 0xaa, 0x43, 0xcb, 0xc9, + 0x3c, 0xf2, 0x95, 0x16, 0xf0, 0xa3, 0xbc, 0xd0, 0xf3, 0x45, 0xae, 0xaf, 0x64, 0xac, 0x34, 0x8d, + 0x42, 0x93, 0xce, 0xfe, 0x42, 0x01, 0x4a, 0x49, 0x56, 0xf8, 0x18, 0xaa, 0x7c, 0xca, 0x82, 0x29, + 0x15, 0x9c, 0x73, 0x97, 0x5d, 0x4c, 0xc6, 0xf5, 0xe1, 0xf3, 0xd2, 0xea, 0xbc, 0x97, 0xb9, 0xec, + 0x2a, 0x76, 0x40, 0x53, 0x18, 0xa6, 0x65, 0x93, 0xdb, 0x00, 0x51, 0x37, 0x8a, 0x69, 0xcb, 0x08, + 0x1e, 0x6c, 0x63, 0xc5, 0xcd, 0xbb, 0x41, 0x48, 0xd9, 0xfa, 0x5a, 0x0f, 0xaa, 0x74, 0x4b, 0x51, + 0x6a, 0xe3, 0xaa, 0x61, 0x68, 0x70, 0xb2, 0x7f, 0xbd, 0x00, 0xa7, 0xb3, 0x2a, 0x91, 0xf7, 0xc3, + 0x64, 0x22, 0xdd, 0xb8, 0x47, 0x9a, 0xa4, 0xc2, 0x27, 0xd1, 0xc0, 0xdd, 0x3f, 0x9c, 0x9b, 0xeb, + 0xbd, 0x48, 0x3b, 0x6f, 0x92, 0x60, 0x8a, 0x99, 0xc8, 0x90, 0xc8, 0x54, 0x5e, 0xa5, 0xbb, 0xd8, + 0x6e, 0xcb, 0x34, 0x87, 0x91, 0x21, 0x31, 0xb1, 0x98, 0xa1, 0x26, 0x9b, 0x70, 0xd6, 0x80, 0xac, + 0x53, 0xaf, 0xde, 0xd8, 0x09, 0x42, 0x71, 0x61, 0xa1, 0x58, 0x79, 0x4a, 0x72, 0x39, 0x8b, 0x7d, + 0x68, 0xb0, 0x6f, 0x4b, 0xe6, 0xb4, 0xb8, 0x4e, 0xdb, 0x71, 0xbd, 0xb8, 0x2b, 0xa3, 0x21, 0x65, + 0x9b, 0x96, 0x24, 0x1c, 0x15, 0x85, 0xbd, 0x06, 0x23, 0xc7, 0x9c, 0x41, 0xc7, 0xda, 0xeb, 0x5f, + 0x86, 0x12, 0x63, 0xc7, 0x6c, 0x51, 0x5e, 0x2c, 0x03, 0x28, 0x25, 0xf7, 0x57, 0x88, 0x0d, 0x45, + 0xcf, 0x49, 0x92, 0x50, 0xaa, 0x5b, 0x2b, 0x51, 0xd4, 0xe1, 0x9e, 0x0c, 0x43, 0x92, 0xa7, 0xa1, + 0x48, 0x0f, 0xda, 0xd9, 0x6c, 0xd3, 0x95, 0x83, 0xb6, 0x17, 0xd2, 0x88, 0x11, 0xd1, 0x83, 0x36, + 0xb9, 0x00, 0x05, 0xaf, 0x2a, 0x37, 0x29, 0x90, 0x34, 0x85, 0x95, 0x65, 0x2c, 0x78, 0x55, 0xfb, + 0x00, 0xca, 0xea, 0xc2, 0x0c, 0xd9, 0x4d, 0x6c, 0xb7, 0x95, 0xc7, 0x31, 0x4e, 0xc2, 0x77, 0x80, + 0xd5, 0xee, 0x00, 0xe8, 0x3a, 0xbd, 0xbc, 0xec, 0xcb, 0x25, 0x18, 0x71, 0x03, 0x59, 0x2c, 0x5c, + 0xd2, 0x6c, 0xb8, 0xd1, 0xe6, 0x18, 0xfb, 0x0e, 0x4c, 0xdf, 0xf4, 0x83, 0x7d, 0x9f, 0x6d, 0xa6, + 0x57, 0x3d, 0xda, 0xac, 0x32, 0xc6, 0x35, 0xf6, 0x47, 0xd6, 0x45, 0xe0, 0x58, 0x14, 0x38, 0x75, + 0xab, 0xa4, 0x30, 0xe8, 0x56, 0x89, 0xfd, 0xba, 0x05, 0xa7, 0x55, 0x01, 0x59, 0x62, 0x8d, 0x5f, + 0x80, 0xc9, 0x9d, 0x8e, 0xd7, 0xac, 0xca, 0xdf, 0x52, 0x84, 0x2a, 0x91, 0xab, 0x18, 0x38, 0x4c, + 0x51, 0x32, 0x77, 0x6b, 0xc7, 0xf3, 0x9d, 0xb0, 0xbb, 0xa9, 0xcd, 0xbf, 0xb2, 0x08, 0x15, 0x85, + 0x41, 0x83, 0xca, 0xfe, 0x93, 0x22, 0xe8, 0xcb, 0x32, 0xc4, 0x93, 0x95, 0x10, 0x56, 0x1e, 0xb9, + 0xaa, 0xad, 0xae, 0xef, 0xea, 0x6b, 0x39, 0xa5, 0x4c, 0x21, 0xc4, 0x27, 0x2d, 0xe6, 0xe8, 0x79, + 0xb1, 0xe7, 0xf0, 0xf5, 0x29, 0xa3, 0xa3, 0xcd, 0x9c, 0x0e, 0xcb, 0x57, 0x04, 0xe7, 0x20, 0x34, + 0x5d, 0x47, 0x25, 0x0c, 0x4d, 0xc9, 0xe4, 0x55, 0x79, 0xbc, 0x50, 0xcc, 0xad, 0x8e, 0xa6, 0x94, + 0x39, 0x53, 0x68, 0xc3, 0x68, 0x48, 0xe3, 0x30, 0xa9, 0x60, 0xba, 0x39, 0xec, 0x61, 0x6b, 0x1c, + 0x76, 0xb7, 0x62, 0x16, 0x81, 0xd5, 0x0d, 0xff, 0x86, 0x83, 0x51, 0x08, 0xb2, 0x23, 0x20, 0xbd, + 0x63, 0x71, 0xc2, 0xd4, 0xed, 0x02, 0x94, 0x9d, 0x4e, 0x1c, 0xb4, 0xd8, 0x30, 0xf1, 0xcf, 0x53, + 0x32, 0x92, 0xd3, 0x09, 0x02, 0x35, 0x8d, 0xfd, 0xb9, 0x51, 0xc8, 0x94, 0x26, 0x90, 0x03, 0xf3, + 0xa2, 0x97, 0x95, 0xef, 0x45, 0x2f, 0xa5, 0x4c, 0xbf, 0xcb, 0x5e, 0xa4, 0x0e, 0xa3, 0xed, 0x86, + 0x13, 0x25, 0xcb, 0xef, 0xe5, 0x64, 0x98, 0x36, 0x19, 0xf0, 0xfe, 0xe1, 0xdc, 0x8f, 0x1d, 0xcf, + 0x9d, 0x63, 0x73, 0x75, 0x41, 0xd4, 0x69, 0x6a, 0xd1, 0x9c, 0x07, 0x0a, 0xfe, 0xa6, 0x43, 0x57, + 0x3c, 0x22, 0x34, 0xfd, 0xb8, 0x25, 0xea, 0xd9, 0x90, 0x46, 0x9d, 0x66, 0x2c, 0x67, 0xc3, 0xcb, + 0x39, 0xae, 0x32, 0xc1, 0x58, 0x17, 0xb6, 0x89, 0xdf, 0x68, 0x08, 0x25, 0xef, 0x87, 0x72, 0x14, + 0x3b, 0x61, 0xfc, 0x90, 0x65, 0x30, 0x6a, 0xd0, 0xb7, 0x12, 0x26, 0xa8, 0xf9, 0x91, 0x57, 0x00, + 0x6a, 0x9e, 0xef, 0x45, 0x8d, 0x87, 0x3c, 0x15, 0xe4, 0x8a, 0x5f, 0x55, 0x1c, 0xd0, 0xe0, 0xc6, 0xac, 0x1b, 0x9f, 0xdb, 0x22, 0x8f, 0x59, 0xe2, 0xdb, 0x97, 0xb2, 0x6e, 0xa8, 0x30, 0x68, 0x50, - 0xd9, 0x1f, 0x81, 0x33, 0xd9, 0x6b, 0xd1, 0x32, 0xc2, 0xab, 0x87, 0x41, 0xa7, 0x9d, 0x35, 0xdf, - 0xfc, 0xda, 0x2c, 0x0a, 0x1c, 0x33, 0xdf, 0x7b, 0x9e, 0x5f, 0xcd, 0x9a, 0xef, 0x1b, 0x9e, 0x5f, - 0x45, 0x8e, 0x39, 0xc6, 0x9d, 0xb5, 0xdf, 0xb7, 0xe0, 0xe2, 0x51, 0xb7, 0xb7, 0x59, 0xf4, 0x7e, - 0xcf, 0x09, 0x7d, 0x79, 0x1d, 0x86, 0xdb, 0x8e, 0x3b, 0x4e, 0xe8, 0x23, 0x87, 0x92, 0x2e, 0x8c, - 0x89, 0xd2, 0x3f, 0xe9, 0x90, 0xde, 0xcc, 0xf7, 0x2e, 0x39, 0x0b, 0x91, 0x54, 0xd2, 0x45, 0x94, - 0x1d, 0xa2, 0x14, 0x68, 0x7f, 0xc7, 0x02, 0xb2, 0xb9, 0x4f, 0xc3, 0xd0, 0xab, 0x1a, 0xc5, 0x8a, - 0xe4, 0x05, 0x98, 0xbc, 0xbb, 0xbd, 0xb9, 0xb1, 0x15, 0x78, 0x3e, 0xbf, 0x8f, 0x61, 0x94, 0xc8, - 0x5c, 0x37, 0xe0, 0x98, 0xa2, 0x62, 0x41, 0xc6, 0xdd, 0xd7, 0xd8, 0x96, 0x73, 0xf9, 0xa0, 0x1d, - 0xd2, 0x28, 0x52, 0x2f, 0x30, 0xc8, 0x20, 0xe3, 0xfa, 0xcd, 0x0c, 0x12, 0x7b, 0xe9, 0xc9, 0x26, - 0x9c, 0x6b, 0xf1, 0x04, 0x5c, 0x95, 0xef, 0xb4, 0x91, 0xc8, 0xc6, 0x85, 0x49, 0xc1, 0xfb, 0x1b, - 0xee, 0x1f, 0xce, 0x9f, 0x5b, 0xef, 0x47, 0x80, 0xfd, 0xdb, 0xd9, 0x5f, 0x2d, 0xc0, 0x84, 0xf1, - 0x02, 0xc2, 0x31, 0x7c, 0x8a, 0xcc, 0xa3, 0x0d, 0x85, 0x63, 0x3e, 0xda, 0xf0, 0x1c, 0x94, 0xda, - 0x41, 0xd3, 0x73, 0x3d, 0x55, 0x9d, 0x3f, 0xc9, 0xcf, 0xc0, 0x24, 0x0c, 0x15, 0x96, 0xdc, 0x83, - 0xb2, 0xba, 0xca, 0x2c, 0xeb, 0xf5, 0xf2, 0xf2, 0xaa, 0xd4, 0xe2, 0xd5, 0x57, 0x94, 0xb5, 0x2c, + 0xd9, 0x1f, 0x85, 0x33, 0xd9, 0x4b, 0xd6, 0x32, 0xc2, 0xab, 0x87, 0x41, 0xa7, 0x9d, 0x35, 0xdf, + 0xfc, 0x12, 0x2e, 0x0a, 0x1c, 0x33, 0xdf, 0xbb, 0x9e, 0x5f, 0xcd, 0x9a, 0xef, 0x9b, 0x9e, 0x5f, + 0x45, 0x8e, 0x39, 0xc6, 0x0d, 0xb8, 0xdf, 0xb1, 0xe0, 0xd2, 0x51, 0x77, 0xc1, 0x59, 0xf4, 0xbe, + 0xef, 0x84, 0xbe, 0xbc, 0x5c, 0xc3, 0x6d, 0xc7, 0x1d, 0x27, 0xf4, 0x91, 0x43, 0x49, 0x17, 0xc6, + 0x44, 0xe9, 0x9f, 0x74, 0x48, 0x5f, 0xce, 0xf7, 0x66, 0x3a, 0x0b, 0x91, 0x54, 0xd2, 0x45, 0x94, + 0x1d, 0xa2, 0x14, 0x68, 0x7f, 0xc7, 0x02, 0xb2, 0xb1, 0x47, 0xc3, 0xd0, 0xab, 0x1a, 0xc5, 0x8a, + 0xe4, 0x79, 0x98, 0xbc, 0xbb, 0xb5, 0xb1, 0xbe, 0x19, 0x78, 0x3e, 0xbf, 0x8f, 0x61, 0x94, 0xc8, + 0xdc, 0x30, 0xe0, 0x98, 0xa2, 0x62, 0x41, 0xc6, 0xdd, 0xd7, 0xd8, 0x96, 0x73, 0xe5, 0xa0, 0x1d, + 0xd2, 0x28, 0x52, 0xef, 0x39, 0xc8, 0x20, 0xe3, 0xc6, 0xcb, 0x19, 0x24, 0xf6, 0xd2, 0x93, 0x0d, + 0x38, 0xd7, 0xe2, 0x09, 0xb8, 0x2a, 0xdf, 0x69, 0x23, 0x91, 0x8d, 0x0b, 0x93, 0x82, 0xf7, 0x37, + 0xdd, 0x3b, 0x9c, 0x3b, 0xb7, 0xd6, 0x8f, 0x00, 0xfb, 0xb7, 0xb3, 0xbf, 0x5a, 0x80, 0x09, 0xe3, + 0x3d, 0x85, 0x63, 0xf8, 0x14, 0x99, 0x27, 0x20, 0x0a, 0xc7, 0x7c, 0x02, 0xe2, 0x19, 0x28, 0xb5, + 0x83, 0xa6, 0xe7, 0x7a, 0xaa, 0x3a, 0x7f, 0x92, 0x9f, 0x81, 0x49, 0x18, 0x2a, 0x2c, 0xd9, 0x87, + 0xb2, 0xba, 0x18, 0x2d, 0xeb, 0xf5, 0xf2, 0xf2, 0xaa, 0xd4, 0xe2, 0xd5, 0x17, 0x9e, 0xb5, 0x2c, 0x62, 0xc3, 0x18, 0x9f, 0xf9, 0x49, 0x86, 0x9f, 0x17, 0x80, 0xf0, 0x25, 0x11, 0xa1, 0xc4, 0xd8, - 0xff, 0x34, 0x0a, 0x65, 0xa4, 0xed, 0x60, 0x39, 0xa4, 0xd5, 0x88, 0xbc, 0x11, 0x8a, 0x9d, 0xb0, - 0x29, 0x07, 0x4b, 0xa5, 0x7f, 0x6e, 0xe1, 0x1a, 0x32, 0x78, 0x6a, 0xbb, 0x29, 0x9c, 0xe8, 0xa4, - 0xb0, 0x78, 0xe4, 0x49, 0xe1, 0x4b, 0x30, 0x15, 0x45, 0x8d, 0xad, 0xd0, 0xdb, 0x77, 0x62, 0x36, - 0x89, 0x65, 0xae, 0x44, 0x1f, 0xcd, 0x6c, 0x5f, 0xd3, 0x48, 0x4c, 0xd3, 0x92, 0xab, 0x30, 0xa3, + 0xff, 0x30, 0x0a, 0x65, 0xa4, 0xed, 0x60, 0x29, 0xa4, 0xd5, 0x88, 0xbc, 0x19, 0x8a, 0x9d, 0xb0, + 0x29, 0x07, 0x4b, 0xa5, 0x7f, 0x6e, 0xe1, 0x2a, 0x32, 0x78, 0x6a, 0xbb, 0x29, 0x9c, 0xe8, 0xa4, + 0xb0, 0x78, 0xe4, 0x49, 0xe1, 0x8b, 0x30, 0x15, 0x45, 0x8d, 0xcd, 0xd0, 0xdb, 0x73, 0x62, 0x36, + 0x89, 0x65, 0xae, 0x44, 0x1f, 0xcd, 0x6c, 0x5d, 0xd7, 0x48, 0x4c, 0xd3, 0x92, 0x6b, 0x30, 0xa3, 0xcf, 0xeb, 0x68, 0x18, 0xf3, 0xd4, 0x88, 0xc8, 0xa2, 0xa8, 0x93, 0x11, 0x7d, 0xc2, 0x27, 0x09, - 0xb0, 0xb7, 0x0d, 0x59, 0x81, 0xd3, 0x29, 0x20, 0x53, 0x44, 0xa4, 0x58, 0x54, 0x2d, 0x40, 0x8a, - 0x0f, 0xd3, 0xa5, 0xa7, 0x05, 0x59, 0x87, 0x33, 0xe2, 0xfb, 0xf2, 0x2b, 0xf0, 0xaa, 0x47, 0xe3, - 0x9c, 0xd1, 0xff, 0x91, 0x8c, 0xce, 0x5c, 0xed, 0x25, 0xc1, 0x7e, 0xed, 0xd8, 0x0c, 0x55, 0xe0, - 0xd5, 0x15, 0x69, 0x29, 0xd5, 0x0c, 0x55, 0x6c, 0x56, 0xab, 0x68, 0xd2, 0x91, 0xf7, 0xc2, 0xd3, - 0xfa, 0xa7, 0xc8, 0xac, 0x09, 0xf7, 0x61, 0x45, 0x96, 0x42, 0xa8, 0x9b, 0x46, 0x57, 0xfb, 0x92, - 0x55, 0x71, 0x50, 0x7b, 0xb2, 0x0b, 0x73, 0x0a, 0x75, 0x99, 0x99, 0x83, 0x76, 0xe8, 0x45, 0xb4, - 0xe2, 0x44, 0xf4, 0x56, 0xd8, 0xe4, 0xc5, 0x13, 0x65, 0xfd, 0x8c, 0xc3, 0x55, 0x2f, 0xbe, 0xd6, - 0x8f, 0x12, 0xd7, 0xf0, 0x21, 0x5c, 0x98, 0xb7, 0x42, 0x7d, 0x67, 0xb7, 0x49, 0x37, 0x97, 0x57, - 0x79, 0x49, 0x85, 0xe1, 0xad, 0x5c, 0x4e, 0x10, 0xa8, 0x69, 0x94, 0x7b, 0x3e, 0x39, 0xd0, 0x3d, - 0xff, 0xb6, 0x05, 0x53, 0x6a, 0xb2, 0x3f, 0x81, 0x3c, 0x58, 0x33, 0x9d, 0x07, 0xbb, 0x3a, 0xac, - 0x9b, 0x28, 0x35, 0x1f, 0x10, 0x4c, 0x7d, 0xaf, 0x0c, 0xc0, 0x1f, 0xc6, 0xf1, 0x78, 0xa9, 0xee, - 0x45, 0x18, 0x09, 0x69, 0x3b, 0xc8, 0x5a, 0x3e, 0x9e, 0xc3, 0xe7, 0x98, 0x1f, 0xdc, 0xe5, 0xdc, - 0xef, 0xe4, 0x78, 0xf4, 0x7f, 0xf6, 0xe4, 0x78, 0x1b, 0xce, 0x79, 0x7e, 0x44, 0xdd, 0x4e, 0x28, - 0x77, 0xce, 0x6b, 0x41, 0xa4, 0xac, 0x43, 0xa9, 0xf2, 0x46, 0xc9, 0xe8, 0xdc, 0x6a, 0x3f, 0x22, - 0xec, 0xdf, 0x96, 0x0d, 0x69, 0x82, 0x90, 0x77, 0x82, 0x74, 0x88, 0x2f, 0xe1, 0xa8, 0x28, 0xf4, - 0x82, 0x58, 0xab, 0x25, 0x97, 0x7e, 0x32, 0x0b, 0x62, 0xed, 0xca, 0x36, 0x6a, 0x9a, 0xfe, 0x56, - 0xb1, 0x9c, 0x93, 0x55, 0x84, 0x13, 0x5b, 0xc5, 0x64, 0x7d, 0x4e, 0x0c, 0x7c, 0x46, 0x21, 0xd9, - 0xac, 0x27, 0x07, 0x6e, 0xd6, 0x2f, 0xc3, 0xb4, 0xe7, 0x37, 0x68, 0xe8, 0xc5, 0xb4, 0xca, 0xd7, - 0xc2, 0xec, 0x14, 0x1f, 0x08, 0x95, 0x7d, 0x5a, 0x4d, 0x61, 0x31, 0x43, 0x9d, 0x36, 0x2a, 0xd3, - 0xc7, 0x30, 0x2a, 0x03, 0x4c, 0xf9, 0xa9, 0x7c, 0x4c, 0xf9, 0xe9, 0xe1, 0x4d, 0xf9, 0xcc, 0x63, - 0x35, 0xe5, 0x24, 0x17, 0x53, 0xfe, 0x2c, 0x8c, 0xb6, 0xc3, 0xe0, 0xa0, 0x3b, 0x7b, 0x26, 0xed, - 0x9e, 0x6f, 0x31, 0x20, 0x0a, 0x9c, 0x59, 0x40, 0x77, 0xf6, 0xe1, 0x05, 0x74, 0xf6, 0xeb, 0x05, - 0x38, 0xa7, 0x2d, 0x1d, 0x9b, 0x5f, 0x5e, 0x8d, 0xad, 0x75, 0x7e, 0x33, 0x53, 0x14, 0x6d, 0x18, - 0x89, 0x4f, 0x9d, 0x43, 0x55, 0x18, 0x34, 0xa8, 0x78, 0xfe, 0x90, 0x86, 0xbc, 0xec, 0x37, 0x6b, - 0x06, 0x97, 0x25, 0x1c, 0x15, 0x05, 0x7f, 0x55, 0x8f, 0x86, 0xb1, 0x3c, 0x93, 0xc9, 0x56, 0x34, - 0x2d, 0x6b, 0x14, 0x9a, 0x74, 0xcc, 0x5d, 0x74, 0x93, 0x25, 0xc8, 0x4c, 0xe1, 0xa4, 0x70, 0x17, - 0xd5, 0xaa, 0x53, 0xd8, 0x44, 0x1d, 0x9e, 0x28, 0x1e, 0xed, 0x55, 0x87, 0x67, 0x21, 0x14, 0x85, - 0xfd, 0x1f, 0x16, 0xbc, 0xa1, 0xef, 0x50, 0x3c, 0x81, 0xed, 0xed, 0x20, 0xbd, 0xbd, 0x6d, 0x0f, - 0xbf, 0xbd, 0xf5, 0xf4, 0x62, 0xc0, 0x56, 0xf7, 0x97, 0x16, 0x4c, 0x6b, 0xfa, 0x27, 0xd0, 0x55, - 0x2f, 0xd7, 0xf7, 0xf1, 0xb4, 0xea, 0xa2, 0x1c, 0x35, 0xd5, 0xb7, 0x6f, 0xf3, 0xbe, 0x89, 0x60, - 0x6e, 0xc9, 0x4d, 0x1e, 0xa0, 0x39, 0x22, 0x88, 0xe9, 0xc2, 0x18, 0xbf, 0xc2, 0x1f, 0xe5, 0x13, - 0x54, 0xa6, 0xe5, 0xf3, 0x13, 0x20, 0x1d, 0x54, 0xf2, 0x9f, 0x11, 0x4a, 0x81, 0xbc, 0x28, 0xdd, - 0x8b, 0x98, 0xbd, 0xac, 0xca, 0x94, 0xab, 0x2e, 0x4a, 0x97, 0x70, 0x54, 0x14, 0x76, 0x0b, 0x66, - 0xd3, 0xcc, 0x57, 0x68, 0x8d, 0xe7, 0xee, 0x8e, 0xd5, 0xcd, 0x45, 0x28, 0x3b, 0xbc, 0xd5, 0x5a, - 0xc7, 0xc9, 0xbe, 0x42, 0xb3, 0x94, 0x20, 0x50, 0xd3, 0xd8, 0xbf, 0x61, 0xc1, 0x99, 0x3e, 0x9d, - 0xc9, 0x31, 0xd5, 0x1c, 0x6b, 0x2b, 0x30, 0xe0, 0x65, 0xa0, 0x2a, 0xad, 0x39, 0x49, 0x76, 0xc8, - 0xb0, 0x6a, 0x2b, 0x02, 0x8c, 0x09, 0xde, 0xfe, 0x67, 0x0b, 0x4e, 0xa5, 0x75, 0x8d, 0xc8, 0x75, - 0x20, 0xa2, 0x33, 0x2b, 0x5e, 0xe4, 0x06, 0xfb, 0x34, 0xec, 0xb2, 0x9e, 0x0b, 0xad, 0xe7, 0x24, - 0x27, 0xb2, 0xd4, 0x43, 0x81, 0x7d, 0x5a, 0xf1, 0xda, 0xdf, 0xaa, 0x1a, 0xed, 0x64, 0xa6, 0xdc, - 0xce, 0x73, 0xa6, 0xe8, 0x8f, 0x69, 0x46, 0xd0, 0x4a, 0x24, 0x9a, 0xf2, 0xed, 0xef, 0x8c, 0x80, - 0x3a, 0x8b, 0xe2, 0x79, 0x88, 0x9c, 0xb2, 0x38, 0xa9, 0xa7, 0x8a, 0x8a, 0x27, 0x78, 0xaa, 0x68, - 0xe4, 0x61, 0x39, 0x02, 0xf1, 0x6e, 0x8e, 0xf6, 0x45, 0x0d, 0xa3, 0xbf, 0xa3, 0x51, 0x68, 0xd2, - 0x31, 0x4d, 0x9a, 0xde, 0x3e, 0x15, 0x8d, 0xc6, 0xd2, 0x9a, 0xac, 0x25, 0x08, 0xd4, 0x34, 0x4c, - 0x93, 0xaa, 0x57, 0xab, 0xc9, 0x48, 0x51, 0x69, 0xc2, 0x46, 0x07, 0x39, 0x86, 0x51, 0x34, 0x82, - 0x60, 0x4f, 0xfa, 0x7f, 0x8a, 0xe2, 0x5a, 0x10, 0xec, 0x21, 0xc7, 0x30, 0x8f, 0xc5, 0x0f, 0xc2, - 0x96, 0xd3, 0xf4, 0x3e, 0x48, 0xab, 0x4a, 0x8a, 0xf4, 0xfb, 0x94, 0xc7, 0xb2, 0xd1, 0x4b, 0x82, - 0xfd, 0xda, 0xb1, 0x19, 0xd8, 0x0e, 0x69, 0xd5, 0x73, 0x63, 0x93, 0x1b, 0xa4, 0x67, 0xe0, 0x56, - 0x0f, 0x05, 0xf6, 0x69, 0x45, 0x96, 0xe0, 0x54, 0x72, 0x96, 0x98, 0xd4, 0x90, 0x08, 0x67, 0x50, - 0xf9, 0xe1, 0x98, 0x46, 0x63, 0x96, 0x9e, 0x59, 0x9b, 0x96, 0xac, 0xe4, 0xe1, 0x6e, 0xa2, 0x61, - 0x6d, 0x92, 0x0a, 0x1f, 0x54, 0x14, 0xf6, 0xc7, 0x8b, 0x6c, 0x77, 0x1c, 0x70, 0x3b, 0xf7, 0x89, - 0x65, 0x0d, 0xd3, 0x33, 0x72, 0xe4, 0x18, 0x33, 0xf2, 0x05, 0x98, 0xbc, 0x1b, 0x05, 0xbe, 0xca, - 0xc8, 0x8d, 0x0e, 0xcc, 0xc8, 0x19, 0x54, 0xfd, 0x33, 0x72, 0x63, 0x79, 0x65, 0xe4, 0xc6, 0x1f, - 0x31, 0x23, 0xf7, 0x27, 0xa3, 0x70, 0x5e, 0x9d, 0x27, 0xd3, 0xf8, 0x5e, 0x10, 0xee, 0x79, 0x7e, - 0x9d, 0x9f, 0xc1, 0x7e, 0xc5, 0x82, 0x49, 0xb1, 0x5e, 0xe4, 0xc3, 0x08, 0xe2, 0xcc, 0xb1, 0x96, - 0xd3, 0xdd, 0xb5, 0x94, 0xb0, 0x85, 0x1d, 0x43, 0x50, 0xe6, 0x95, 0x0a, 0x13, 0x85, 0x29, 0x8d, - 0xc8, 0x87, 0x01, 0x92, 0x17, 0xb3, 0x6a, 0x39, 0xbd, 0x1b, 0x96, 0xe8, 0x87, 0xb4, 0xa6, 0x7d, - 0xd3, 0x1d, 0x25, 0x04, 0x0d, 0x81, 0xe4, 0x75, 0x4b, 0xdd, 0x15, 0x11, 0xa7, 0x59, 0xaf, 0x3e, - 0x96, 0xb1, 0x39, 0xce, 0xd5, 0x11, 0x84, 0x71, 0xcf, 0xaf, 0xb3, 0x79, 0x22, 0x93, 0x98, 0x6f, - 0xe9, 0x57, 0xbf, 0xb0, 0x16, 0x38, 0xd5, 0x8a, 0xd3, 0x74, 0x7c, 0x97, 0x86, 0xab, 0x82, 0xdc, - 0x7c, 0x36, 0x89, 0x03, 0x30, 0x61, 0xd4, 0x73, 0x39, 0x73, 0xf4, 0x38, 0x97, 0x33, 0xe7, 0xde, - 0x03, 0x33, 0x3d, 0x1f, 0xf3, 0x44, 0x57, 0x47, 0x1e, 0xfd, 0xd6, 0x89, 0xfd, 0x07, 0x63, 0x7a, - 0xd3, 0xda, 0x08, 0xaa, 0xe2, 0x8a, 0x60, 0xa8, 0xbf, 0xa8, 0xf4, 0x3d, 0x73, 0x9c, 0x22, 0xc6, - 0xd3, 0x4b, 0x0a, 0x88, 0xa6, 0x48, 0x36, 0x47, 0xdb, 0x4e, 0x48, 0xfd, 0xc7, 0x3d, 0x47, 0xb7, - 0x94, 0x10, 0x34, 0x04, 0x92, 0x46, 0xea, 0xb8, 0xf5, 0xca, 0xf0, 0xc7, 0xad, 0xcc, 0x1d, 0xee, - 0x7b, 0x95, 0xeb, 0xf3, 0x16, 0x4c, 0xfb, 0xa9, 0x99, 0x2b, 0x8f, 0xdc, 0x76, 0x1e, 0xc7, 0xaa, - 0x10, 0x57, 0xb3, 0xd3, 0x30, 0xcc, 0xc8, 0xef, 0xb7, 0xa5, 0x8d, 0x9e, 0x70, 0x4b, 0xd3, 0x77, - 0x8d, 0xc7, 0x06, 0xdd, 0x35, 0x26, 0xbe, 0x7a, 0x65, 0x60, 0x3c, 0xf7, 0x57, 0x06, 0xa0, 0xcf, - 0x0b, 0x03, 0x77, 0xa0, 0xec, 0x86, 0xd4, 0x89, 0x1f, 0xf1, 0xc2, 0x39, 0x7f, 0xec, 0x6e, 0x39, - 0x61, 0x80, 0x9a, 0x97, 0xfd, 0x67, 0x45, 0x38, 0x9d, 0x8c, 0x48, 0x72, 0x14, 0xc5, 0xf6, 0x47, - 0x21, 0x57, 0x3b, 0xb7, 0x6a, 0x7f, 0xbc, 0x96, 0x20, 0x50, 0xd3, 0x30, 0x7f, 0xac, 0x13, 0xd1, - 0xcd, 0x36, 0xf5, 0xd7, 0xbc, 0xdd, 0x88, 0x8f, 0xb8, 0x51, 0x42, 0x76, 0x4b, 0xa3, 0xd0, 0xa4, - 0x63, 0xce, 0xb8, 0xf0, 0x8b, 0xa3, 0xec, 0xc9, 0xae, 0xf4, 0xb7, 0x31, 0xc1, 0x93, 0x2f, 0xf7, - 0x7d, 0x2e, 0x24, 0x9f, 0x9a, 0x86, 0x9e, 0x13, 0xb8, 0x13, 0xbe, 0x13, 0xf2, 0x39, 0x0b, 0x4e, - 0xed, 0xa5, 0xea, 0x57, 0x12, 0x93, 0x3c, 0x64, 0xa5, 0x65, 0xba, 0x28, 0x46, 0x4f, 0xe1, 0x34, - 0x3c, 0xc2, 0xac, 0x74, 0xfb, 0xdf, 0x2c, 0x30, 0xcd, 0xd3, 0xf1, 0x3c, 0x2b, 0xe3, 0x01, 0xa8, - 0xc2, 0x11, 0x0f, 0x40, 0x25, 0x4e, 0x58, 0xf1, 0x78, 0x4e, 0xff, 0xc8, 0x09, 0x9c, 0xfe, 0xd1, - 0x81, 0x5e, 0xdb, 0x1b, 0xa1, 0xd8, 0xf1, 0xaa, 0xd2, 0x6f, 0xd7, 0x87, 0x61, 0xab, 0x2b, 0xc8, - 0xe0, 0xf6, 0xef, 0x8d, 0xea, 0x38, 0x5d, 0x1e, 0xc5, 0xff, 0x50, 0x74, 0xbb, 0xa6, 0x0a, 0x67, - 0x45, 0xcf, 0x37, 0x7a, 0x0a, 0x67, 0xdf, 0x7d, 0xf2, 0x4a, 0x0b, 0x31, 0x40, 0x83, 0xea, 0x66, - 0xc7, 0x8f, 0x28, 0xb3, 0xb8, 0x0b, 0x25, 0x16, 0xda, 0xf0, 0x84, 0x5b, 0x29, 0xa5, 0x54, 0xe9, - 0x9a, 0x84, 0x3f, 0x38, 0x9c, 0x7f, 0xd7, 0xc9, 0xd5, 0x4a, 0x5a, 0xa3, 0xe2, 0x4f, 0x22, 0x28, - 0xb3, 0xbf, 0x79, 0x45, 0x88, 0x0c, 0x9a, 0x6e, 0x29, 0x5b, 0x94, 0x20, 0x72, 0x29, 0x37, 0xd1, - 0x72, 0x88, 0x0f, 0x65, 0xfe, 0x54, 0x11, 0x17, 0x2a, 0x62, 0xab, 0x2d, 0x55, 0x97, 0x91, 0x20, - 0x1e, 0x1c, 0xce, 0xbf, 0x74, 0x72, 0xa1, 0xaa, 0x39, 0x6a, 0x11, 0xf6, 0xdf, 0x15, 0xf5, 0xdc, - 0x95, 0xf5, 0xd2, 0x3f, 0x14, 0x73, 0xf7, 0xc5, 0xcc, 0xdc, 0xbd, 0xd8, 0x33, 0x77, 0xa7, 0xf5, - 0x73, 0x3e, 0xa9, 0xd9, 0xf8, 0xa4, 0x37, 0xd8, 0xa3, 0xe3, 0x78, 0xee, 0x59, 0xbc, 0xd6, 0xf1, - 0x42, 0x1a, 0x6d, 0x85, 0x1d, 0xdf, 0xf3, 0xeb, 0xf2, 0x51, 0x47, 0xc3, 0xb3, 0x48, 0xa1, 0x31, - 0x4b, 0x6f, 0x7f, 0x95, 0x9f, 0x77, 0x1a, 0xc5, 0x65, 0xec, 0x2b, 0x37, 0xf9, 0x6b, 0x4f, 0xa2, - 0xa2, 0x54, 0x7d, 0x65, 0xf1, 0xc4, 0x93, 0xc0, 0x91, 0x7b, 0x30, 0xbe, 0x2b, 0x5e, 0x9c, 0xc8, - 0xe7, 0x8a, 0x93, 0x7c, 0xbe, 0x82, 0x5f, 0x26, 0x4d, 0xde, 0xb2, 0x78, 0xa0, 0xff, 0xc4, 0x44, - 0x9a, 0xfd, 0x4b, 0x45, 0x38, 0x95, 0x79, 0x8b, 0x88, 0x05, 0xfc, 0xc9, 0xc3, 0x53, 0xd9, 0xec, - 0xbc, 0x7a, 0xd4, 0x58, 0x51, 0x90, 0x0f, 0x00, 0x54, 0x69, 0xbb, 0x19, 0x74, 0xb9, 0xe3, 0x32, - 0x72, 0x62, 0xc7, 0x45, 0xf9, 0xba, 0x2b, 0x8a, 0x0b, 0x1a, 0x1c, 0x65, 0x19, 0xed, 0xa8, 0x78, - 0x4f, 0x23, 0x5d, 0x46, 0x6b, 0xdc, 0xf4, 0x1b, 0x7b, 0xb2, 0x37, 0xfd, 0x3c, 0x38, 0x25, 0x54, - 0x54, 0x25, 0x5c, 0x8f, 0x50, 0xa9, 0x75, 0x86, 0xcd, 0xa8, 0x95, 0x34, 0x1b, 0xcc, 0xf2, 0xb5, - 0x3f, 0x5b, 0x60, 0xee, 0x9b, 0x18, 0xec, 0xf5, 0x24, 0x39, 0xfe, 0x66, 0x18, 0x73, 0x3a, 0x71, - 0x23, 0xe8, 0x79, 0x01, 0x64, 0x89, 0x43, 0x51, 0x62, 0xc9, 0x1a, 0x8c, 0x54, 0x9d, 0x38, 0x79, - 0x94, 0xff, 0x24, 0xca, 0xe9, 0x4c, 0x98, 0x13, 0x53, 0xe4, 0x5c, 0xc8, 0x33, 0x30, 0x12, 0x3b, - 0xf5, 0xd4, 0x0b, 0x9e, 0x3b, 0x4e, 0x3d, 0x42, 0x0e, 0x35, 0x77, 0x97, 0x91, 0x23, 0x76, 0x97, - 0x97, 0x8c, 0x7f, 0x17, 0x61, 0x9c, 0xba, 0xf4, 0xfe, 0x8b, 0x07, 0x51, 0xd8, 0x9f, 0xa2, 0xb5, - 0x7f, 0x04, 0x26, 0xcd, 0x7f, 0x01, 0x71, 0xac, 0xbb, 0x46, 0xf6, 0x3f, 0x8e, 0xc0, 0x54, 0xaa, - 0xcc, 0x2f, 0x35, 0xcb, 0xad, 0x23, 0x67, 0x39, 0x3f, 0x4f, 0xeb, 0xf8, 0x54, 0x16, 0x71, 0x1a, - 0xe7, 0x69, 0x1d, 0x9f, 0xa2, 0xc0, 0xb1, 0xaf, 0x52, 0x0d, 0xbb, 0xd8, 0xf1, 0x65, 0x56, 0x5e, - 0x7d, 0x95, 0x15, 0x0e, 0x45, 0x89, 0x65, 0x01, 0xec, 0x64, 0xc4, 0x8d, 0xa2, 0xb0, 0x11, 0x72, - 0xd5, 0x5c, 0xcf, 0xe3, 0xd5, 0x34, 0x59, 0xd2, 0xca, 0x03, 0x7a, 0x13, 0x82, 0x29, 0x89, 0xe4, - 0x13, 0x96, 0xf9, 0x5e, 0xdc, 0x58, 0x1e, 0xa7, 0x49, 0xd9, 0x2a, 0x4a, 0xb1, 0x82, 0x1e, 0xfe, - 0x6c, 0x5c, 0xa4, 0x16, 0xf0, 0xf8, 0xe3, 0x59, 0xc0, 0xd0, 0x67, 0xf1, 0xbe, 0x15, 0xca, 0x2d, - 0xc7, 0xf7, 0x6a, 0x34, 0x8a, 0xc5, 0xbf, 0x6f, 0x29, 0x8b, 0xe8, 0x69, 0x3d, 0x01, 0xa2, 0xc6, - 0xf3, 0x7f, 0x92, 0xc4, 0x3b, 0x26, 0x82, 0x98, 0xb2, 0xf1, 0x4f, 0x92, 0x34, 0x18, 0x4d, 0x1a, - 0xfb, 0xb7, 0x2d, 0x38, 0xd7, 0x77, 0x30, 0x7e, 0x70, 0xd3, 0x9f, 0xf6, 0xef, 0x14, 0xe0, 0x4c, - 0x9f, 0x32, 0x58, 0xd2, 0x7d, 0x6c, 0xcf, 0x0a, 0xca, 0x3a, 0xdb, 0xa9, 0x81, 0x73, 0xe3, 0x64, - 0xdb, 0x90, 0xde, 0x0a, 0x8a, 0x4f, 0x74, 0x2b, 0xb0, 0xbf, 0x5a, 0x00, 0xe3, 0x01, 0x4c, 0xf2, - 0x11, 0xb3, 0xe2, 0xdb, 0xca, 0xab, 0x3a, 0x59, 0x30, 0x57, 0x15, 0xe3, 0x62, 0xd4, 0xfa, 0x15, - 0x90, 0x67, 0xe7, 0x6b, 0xe1, 0xe8, 0xf9, 0x4a, 0x9a, 0x49, 0x69, 0x7d, 0x31, 0xff, 0xd2, 0xfa, - 0x72, 0x4f, 0x59, 0xfd, 0x2f, 0x58, 0x62, 0xa6, 0x65, 0xba, 0xa4, 0x2d, 0xac, 0xf5, 0x10, 0x0b, - 0xfb, 0x36, 0x28, 0x45, 0xb4, 0x59, 0x63, 0x9e, 0x9d, 0xb4, 0xc4, 0xfa, 0xbd, 0x6d, 0x09, 0x47, - 0x45, 0xc1, 0xef, 0xce, 0x36, 0x9b, 0xc1, 0xbd, 0xcb, 0xad, 0x76, 0xdc, 0x95, 0x36, 0x59, 0xdf, - 0x9d, 0x55, 0x18, 0x34, 0xa8, 0xec, 0x7f, 0xb7, 0xc4, 0xe7, 0x94, 0x3e, 0xfa, 0x8b, 0x99, 0x3b, - 0x8d, 0xc7, 0x77, 0x6f, 0x7f, 0x06, 0xc0, 0x55, 0x6f, 0x12, 0xe4, 0xf3, 0x2e, 0xa6, 0x7e, 0xe3, - 0xc0, 0x7c, 0xac, 0x31, 0x81, 0xa1, 0x21, 0x2f, 0xb5, 0x78, 0x8a, 0x47, 0x2d, 0x1e, 0xfb, 0x5f, - 0x2c, 0x48, 0x6d, 0x16, 0xa4, 0x0d, 0xa3, 0x4c, 0x83, 0x6e, 0x3e, 0x2f, 0x28, 0x98, 0xac, 0xd9, - 0xc2, 0x92, 0xd3, 0x82, 0xff, 0x89, 0x42, 0x10, 0x69, 0x4a, 0xef, 0xbc, 0x90, 0xc7, 0x2b, 0x1f, - 0xa6, 0x40, 0xe6, 0xdf, 0xcb, 0x7f, 0x88, 0xa1, 0x3c, 0x7d, 0xfb, 0x45, 0x98, 0xe9, 0x51, 0x8a, - 0xdf, 0x48, 0x0a, 0x92, 0x67, 0x23, 0x8c, 0x19, 0xc8, 0xef, 0x47, 0xa2, 0xc0, 0x31, 0x07, 0xff, - 0x74, 0x96, 0x3d, 0xf9, 0x92, 0x05, 0x33, 0x51, 0x96, 0xdf, 0xe3, 0x1a, 0x3b, 0x95, 0xb9, 0xea, - 0x41, 0x61, 0xaf, 0x12, 0xf6, 0x7f, 0x49, 0xf3, 0x24, 0xfe, 0x81, 0x98, 0xda, 0x5c, 0xac, 0x81, - 0x9b, 0x0b, 0x5b, 0x62, 0x6e, 0x83, 0x56, 0x3b, 0xcd, 0x9e, 0xda, 0x9c, 0x6d, 0x09, 0x47, 0x45, - 0x91, 0x7a, 0x1f, 0xaf, 0x78, 0xe4, 0xfb, 0x78, 0x2f, 0xc0, 0xa4, 0xf9, 0x34, 0x0a, 0x4f, 0xa1, - 0xc9, 0xc3, 0x07, 0xf3, 0x15, 0x15, 0x4c, 0x51, 0x65, 0xde, 0x57, 0x1b, 0x3d, 0xf2, 0x7d, 0xb5, - 0xe7, 0xa0, 0x24, 0xdf, 0x0a, 0x4b, 0xf2, 0xbb, 0xa2, 0xf0, 0x47, 0xc2, 0x50, 0x61, 0x99, 0x81, - 0x68, 0x39, 0x7e, 0xc7, 0x69, 0xb2, 0x11, 0x92, 0xf5, 0x80, 0x6a, 0x65, 0xad, 0x2b, 0x0c, 0x1a, - 0x54, 0xac, 0xc7, 0xb1, 0xd7, 0xa2, 0xaf, 0x04, 0x7e, 0x92, 0x19, 0x51, 0x3d, 0xde, 0x91, 0x70, - 0x54, 0x14, 0xf6, 0x3f, 0x58, 0x90, 0x7d, 0xe8, 0x28, 0x55, 0x83, 0x68, 0x1d, 0x59, 0x83, 0x98, - 0xae, 0xaf, 0x2a, 0x1c, 0xab, 0xbe, 0xca, 0x2c, 0x7d, 0x2a, 0x3e, 0xb4, 0xf4, 0xe9, 0x4d, 0xfa, - 0x5e, 0xbb, 0xa8, 0x91, 0x9a, 0xe8, 0x77, 0xa7, 0x9d, 0xd8, 0x30, 0xe6, 0x3a, 0xaa, 0xc4, 0x7b, - 0x52, 0xb8, 0x55, 0xcb, 0x4b, 0x9c, 0x48, 0x62, 0x2a, 0x0b, 0x5f, 0xff, 0xee, 0x85, 0xa7, 0xbe, - 0xf1, 0xdd, 0x0b, 0x4f, 0x7d, 0xeb, 0xbb, 0x17, 0x9e, 0xfa, 0xd8, 0xfd, 0x0b, 0xd6, 0xd7, 0xef, - 0x5f, 0xb0, 0xbe, 0x71, 0xff, 0x82, 0xf5, 0xad, 0xfb, 0x17, 0xac, 0xef, 0xdc, 0xbf, 0x60, 0x7d, - 0xfe, 0x6f, 0x2f, 0x3c, 0xf5, 0x4a, 0x29, 0x99, 0xd9, 0xff, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x0b, - 0x6f, 0x9f, 0x87, 0xbc, 0x76, 0x00, 0x00, + 0xb0, 0xb7, 0x0d, 0x59, 0x86, 0xd3, 0x29, 0x20, 0x53, 0x44, 0xa4, 0x58, 0x54, 0x2d, 0x40, 0x8a, + 0x0f, 0xd3, 0xa5, 0xa7, 0x05, 0x59, 0x83, 0x33, 0xe2, 0xfb, 0xf2, 0x0b, 0xf5, 0xaa, 0x47, 0xe3, + 0x9c, 0xd1, 0xff, 0x92, 0x8c, 0xce, 0x5c, 0xeb, 0x25, 0xc1, 0x7e, 0xed, 0xd8, 0x0c, 0x55, 0xe0, + 0x95, 0x65, 0x69, 0x29, 0xd5, 0x0c, 0x55, 0x6c, 0x56, 0xaa, 0x68, 0xd2, 0x91, 0xf7, 0xc1, 0x93, + 0xfa, 0xa7, 0xc8, 0xac, 0x09, 0xf7, 0x61, 0x59, 0x96, 0x42, 0xa8, 0x9b, 0x46, 0xd7, 0xfa, 0x92, + 0x55, 0x71, 0x50, 0x7b, 0xb2, 0x03, 0x17, 0x14, 0xea, 0x0a, 0x33, 0x07, 0xed, 0xd0, 0x8b, 0x68, + 0xc5, 0x89, 0xe8, 0xad, 0xb0, 0xc9, 0x8b, 0x27, 0xca, 0xfa, 0x51, 0x88, 0x6b, 0x5e, 0x7c, 0xbd, + 0x1f, 0x25, 0xae, 0xe2, 0x03, 0xb8, 0x30, 0x6f, 0x85, 0xfa, 0xce, 0x4e, 0x93, 0x6e, 0x2c, 0xad, + 0xf0, 0x92, 0x0a, 0xc3, 0x5b, 0xb9, 0x92, 0x20, 0x50, 0xd3, 0x28, 0xf7, 0x7c, 0x72, 0xa0, 0x7b, + 0xfe, 0x6d, 0x0b, 0xa6, 0xd4, 0x64, 0x7f, 0x0c, 0x79, 0xb0, 0x66, 0x3a, 0x0f, 0x76, 0x6d, 0x58, + 0x37, 0x51, 0x6a, 0x3e, 0x20, 0x98, 0xfa, 0x5e, 0x19, 0x80, 0x3f, 0xb3, 0xe3, 0xf1, 0x52, 0xdd, + 0x4b, 0x30, 0x12, 0xd2, 0x76, 0x90, 0xb5, 0x7c, 0x3c, 0x87, 0xcf, 0x31, 0x3f, 0xb8, 0xcb, 0xb9, + 0xdf, 0xc9, 0xf1, 0xe8, 0x7f, 0xef, 0xc9, 0xf1, 0x16, 0x9c, 0xf3, 0xfc, 0x88, 0xba, 0x9d, 0x50, + 0xee, 0x9c, 0xd7, 0x83, 0x48, 0x59, 0x87, 0x52, 0xe5, 0xcd, 0x92, 0xd1, 0xb9, 0x95, 0x7e, 0x44, + 0xd8, 0xbf, 0x2d, 0x1b, 0xd2, 0x04, 0x21, 0xef, 0x04, 0xe9, 0x10, 0x5f, 0xc2, 0x51, 0x51, 0xe8, + 0x05, 0xb1, 0x5a, 0x4b, 0x2e, 0xfd, 0x64, 0x16, 0xc4, 0xea, 0xd5, 0x2d, 0xd4, 0x34, 0xfd, 0xad, + 0x62, 0x39, 0x27, 0xab, 0x08, 0x27, 0xb6, 0x8a, 0xc9, 0xfa, 0x9c, 0x18, 0xf8, 0x28, 0x43, 0xb2, + 0x59, 0x4f, 0x0e, 0xdc, 0xac, 0x5f, 0x82, 0x69, 0xcf, 0x6f, 0xd0, 0xd0, 0x8b, 0x69, 0x95, 0xaf, + 0x85, 0xd9, 0x29, 0x3e, 0x10, 0x2a, 0xfb, 0xb4, 0x92, 0xc2, 0x62, 0x86, 0x3a, 0x6d, 0x54, 0xa6, + 0x8f, 0x61, 0x54, 0x06, 0x98, 0xf2, 0x53, 0xf9, 0x98, 0xf2, 0xd3, 0xc3, 0x9b, 0xf2, 0x99, 0x47, + 0x6a, 0xca, 0x49, 0x2e, 0xa6, 0xfc, 0x69, 0x18, 0x6d, 0x87, 0xc1, 0x41, 0x77, 0xf6, 0x4c, 0xda, + 0x3d, 0xdf, 0x64, 0x40, 0x14, 0x38, 0xb3, 0x80, 0xee, 0xec, 0x83, 0x0b, 0xe8, 0xec, 0x37, 0x0a, + 0x70, 0x4e, 0x5b, 0x3a, 0x36, 0xbf, 0xbc, 0x1a, 0x5b, 0xeb, 0xfc, 0x66, 0xa6, 0x28, 0xda, 0x30, + 0x12, 0x9f, 0x3a, 0x87, 0xaa, 0x30, 0x68, 0x50, 0xf1, 0xfc, 0x21, 0x0d, 0x79, 0xd9, 0x6f, 0xd6, + 0x0c, 0x2e, 0x49, 0x38, 0x2a, 0x0a, 0xfe, 0x46, 0x1f, 0x0d, 0x63, 0x79, 0x26, 0x93, 0xad, 0x68, + 0x5a, 0xd2, 0x28, 0x34, 0xe9, 0x98, 0xbb, 0xe8, 0x26, 0x4b, 0x90, 0x99, 0xc2, 0x49, 0xe1, 0x2e, + 0xaa, 0x55, 0xa7, 0xb0, 0x89, 0x3a, 0x3c, 0x51, 0x3c, 0xda, 0xab, 0x0e, 0xcf, 0x42, 0x28, 0x0a, + 0xfb, 0xdf, 0x2c, 0x78, 0x53, 0xdf, 0xa1, 0x78, 0x0c, 0xdb, 0xdb, 0x41, 0x7a, 0x7b, 0xdb, 0x1a, + 0x7e, 0x7b, 0xeb, 0xe9, 0xc5, 0x80, 0xad, 0xee, 0xcf, 0x2c, 0x98, 0xd6, 0xf4, 0x8f, 0xa1, 0xab, + 0x5e, 0xae, 0xaf, 0xed, 0x69, 0xd5, 0x45, 0x39, 0x6a, 0xaa, 0x6f, 0xdf, 0xe6, 0x7d, 0x13, 0xc1, + 0xdc, 0xa2, 0x9b, 0x3c, 0x67, 0x73, 0x44, 0x10, 0xd3, 0x85, 0x31, 0xfe, 0x20, 0x40, 0x94, 0x4f, + 0x50, 0x99, 0x96, 0xcf, 0x4f, 0x80, 0x74, 0x50, 0xc9, 0x7f, 0x46, 0x28, 0x05, 0xf2, 0xa2, 0x74, + 0x2f, 0x62, 0xf6, 0xb2, 0x2a, 0x53, 0xae, 0xba, 0x28, 0x5d, 0xc2, 0x51, 0x51, 0xd8, 0x2d, 0x98, + 0x4d, 0x33, 0x5f, 0xa6, 0x35, 0x9e, 0xbb, 0x3b, 0x56, 0x37, 0x17, 0xa0, 0xec, 0xf0, 0x56, 0xab, + 0x1d, 0x27, 0xfb, 0xa6, 0xcd, 0x62, 0x82, 0x40, 0x4d, 0x63, 0xff, 0x9a, 0x05, 0x67, 0xfa, 0x74, + 0x26, 0xc7, 0x54, 0x73, 0xac, 0xad, 0xc0, 0x80, 0x77, 0x86, 0xaa, 0xb4, 0xe6, 0x24, 0xd9, 0x21, + 0xc3, 0xaa, 0x2d, 0x0b, 0x30, 0x26, 0x78, 0xfb, 0x1f, 0x2d, 0x38, 0x95, 0xd6, 0x35, 0x22, 0x37, + 0x80, 0x88, 0xce, 0x2c, 0x7b, 0x91, 0x1b, 0xec, 0xd1, 0xb0, 0xcb, 0x7a, 0x2e, 0xb4, 0xbe, 0x20, + 0x39, 0x91, 0xc5, 0x1e, 0x0a, 0xec, 0xd3, 0x8a, 0xd7, 0xfe, 0x56, 0xd5, 0x68, 0x27, 0x33, 0xe5, + 0x76, 0x9e, 0x33, 0x45, 0x7f, 0x4c, 0x33, 0x82, 0x56, 0x22, 0xd1, 0x94, 0x6f, 0x7f, 0x67, 0x04, + 0xd4, 0x59, 0x14, 0xcf, 0x43, 0xe4, 0x94, 0xc5, 0x49, 0x3d, 0x7c, 0x54, 0x3c, 0xc1, 0xc3, 0x47, + 0x23, 0x0f, 0xca, 0x11, 0x88, 0x57, 0x78, 0xb4, 0x2f, 0x6a, 0x18, 0xfd, 0x6d, 0x8d, 0x42, 0x93, + 0x8e, 0x69, 0xd2, 0xf4, 0xf6, 0xa8, 0x68, 0x34, 0x96, 0xd6, 0x64, 0x35, 0x41, 0xa0, 0xa6, 0x61, + 0x9a, 0x54, 0xbd, 0x5a, 0x4d, 0x46, 0x8a, 0x4a, 0x13, 0x36, 0x3a, 0xc8, 0x31, 0x8c, 0xa2, 0x11, + 0x04, 0xbb, 0xd2, 0xff, 0x53, 0x14, 0xd7, 0x83, 0x60, 0x17, 0x39, 0x86, 0x79, 0x2c, 0x7e, 0x10, + 0xb6, 0x9c, 0xa6, 0xf7, 0x21, 0x5a, 0x55, 0x52, 0xa4, 0xdf, 0xa7, 0x3c, 0x96, 0xf5, 0x5e, 0x12, + 0xec, 0xd7, 0x8e, 0xcd, 0xc0, 0x76, 0x48, 0xab, 0x9e, 0x1b, 0x9b, 0xdc, 0x20, 0x3d, 0x03, 0x37, + 0x7b, 0x28, 0xb0, 0x4f, 0x2b, 0xb2, 0x08, 0xa7, 0x92, 0xb3, 0xc4, 0xa4, 0x86, 0x44, 0x38, 0x83, + 0xca, 0x0f, 0xc7, 0x34, 0x1a, 0xb3, 0xf4, 0xcc, 0xda, 0xb4, 0x64, 0x25, 0x0f, 0x77, 0x13, 0x0d, + 0x6b, 0x93, 0x54, 0xf8, 0xa0, 0xa2, 0xb0, 0x3f, 0x5e, 0x64, 0xbb, 0xe3, 0x80, 0xdb, 0xb9, 0x8f, + 0x2d, 0x6b, 0x98, 0x9e, 0x91, 0x23, 0xc7, 0x98, 0x91, 0xcf, 0xc3, 0xe4, 0xdd, 0x28, 0xf0, 0x55, + 0x46, 0x6e, 0x74, 0x60, 0x46, 0xce, 0xa0, 0xea, 0x9f, 0x91, 0x1b, 0xcb, 0x2b, 0x23, 0x37, 0xfe, + 0x90, 0x19, 0xb9, 0x3f, 0x1c, 0x85, 0xf3, 0xea, 0x3c, 0x99, 0xc6, 0xfb, 0x41, 0xb8, 0xeb, 0xf9, + 0x75, 0x7e, 0x06, 0xfb, 0x15, 0x0b, 0x26, 0xc5, 0x7a, 0x91, 0x0f, 0x23, 0x88, 0x33, 0xc7, 0x5a, + 0x4e, 0x77, 0xd7, 0x52, 0xc2, 0xe6, 0xb7, 0x0d, 0x41, 0x99, 0x57, 0x2a, 0x4c, 0x14, 0xa6, 0x34, + 0x22, 0x1f, 0x01, 0x48, 0xde, 0xdf, 0xaa, 0xe5, 0xf4, 0x0a, 0x59, 0xa2, 0x1f, 0xd2, 0x9a, 0xf6, + 0x4d, 0xb7, 0x95, 0x10, 0x34, 0x04, 0x92, 0x37, 0x2c, 0x75, 0x57, 0x44, 0x9c, 0x66, 0xbd, 0xfa, + 0x48, 0xc6, 0xe6, 0x38, 0x57, 0x47, 0x10, 0xc6, 0x3d, 0xbf, 0xce, 0xe6, 0x89, 0x4c, 0x62, 0xbe, + 0xad, 0x5f, 0xfd, 0xc2, 0x6a, 0xe0, 0x54, 0x2b, 0x4e, 0xd3, 0xf1, 0x5d, 0x1a, 0xae, 0x08, 0x72, + 0xf3, 0x11, 0x26, 0x0e, 0xc0, 0x84, 0x51, 0xcf, 0xe5, 0xcc, 0xd1, 0xe3, 0x5c, 0xce, 0xbc, 0xf0, + 0x5e, 0x98, 0xe9, 0xf9, 0x98, 0x27, 0xba, 0x3a, 0xf2, 0xf0, 0xb7, 0x4e, 0xec, 0xdf, 0x1d, 0xd3, + 0x9b, 0xd6, 0x7a, 0x50, 0x15, 0x57, 0x04, 0x43, 0xfd, 0x45, 0xa5, 0xef, 0x99, 0xe3, 0x14, 0x31, + 0x1e, 0x72, 0x52, 0x40, 0x34, 0x45, 0xb2, 0x39, 0xda, 0x76, 0x42, 0xea, 0x3f, 0xea, 0x39, 0xba, + 0xa9, 0x84, 0xa0, 0x21, 0x90, 0x34, 0x52, 0xc7, 0xad, 0x57, 0x87, 0x3f, 0x6e, 0x65, 0xee, 0x70, + 0xdf, 0xab, 0x5c, 0x9f, 0xb7, 0x60, 0xda, 0x4f, 0xcd, 0x5c, 0x79, 0xe4, 0xb6, 0xfd, 0x28, 0x56, + 0x85, 0xb8, 0x9a, 0x9d, 0x86, 0x61, 0x46, 0x7e, 0xbf, 0x2d, 0x6d, 0xf4, 0x84, 0x5b, 0x9a, 0xbe, + 0x6b, 0x3c, 0x36, 0xe8, 0xae, 0x31, 0xf1, 0xd5, 0x2b, 0x03, 0xe3, 0xb9, 0xbf, 0x32, 0x00, 0x7d, + 0x5e, 0x18, 0xb8, 0x03, 0x65, 0x37, 0xa4, 0x4e, 0xfc, 0x90, 0x17, 0xce, 0xf9, 0xd3, 0x79, 0x4b, + 0x09, 0x03, 0xd4, 0xbc, 0xec, 0x3f, 0x2e, 0xc2, 0xe9, 0x64, 0x44, 0x92, 0xa3, 0x28, 0xb6, 0x3f, + 0x0a, 0xb9, 0xda, 0xb9, 0x55, 0xfb, 0xe3, 0xf5, 0x04, 0x81, 0x9a, 0x86, 0xf9, 0x63, 0x9d, 0x88, + 0x6e, 0xb4, 0xa9, 0xbf, 0xea, 0xed, 0x44, 0x7c, 0xc4, 0x8d, 0x12, 0xb2, 0x5b, 0x1a, 0x85, 0x26, + 0x1d, 0x73, 0xc6, 0x85, 0x5f, 0x1c, 0x65, 0x4f, 0x76, 0xa5, 0xbf, 0x8d, 0x09, 0x9e, 0x7c, 0xb9, + 0xef, 0x73, 0x21, 0xf9, 0xd4, 0x34, 0xf4, 0x9c, 0xc0, 0x9d, 0xf0, 0x9d, 0x90, 0xcf, 0x59, 0x70, + 0x6a, 0x37, 0x55, 0xbf, 0x92, 0x98, 0xe4, 0x21, 0x2b, 0x2d, 0xd3, 0x45, 0x31, 0x7a, 0x0a, 0xa7, + 0xe1, 0x11, 0x66, 0xa5, 0xdb, 0xff, 0x62, 0x81, 0x69, 0x9e, 0x8e, 0xe7, 0x59, 0x19, 0x0f, 0x40, + 0x15, 0x8e, 0x78, 0x00, 0x2a, 0x71, 0xc2, 0x8a, 0xc7, 0x73, 0xfa, 0x47, 0x4e, 0xe0, 0xf4, 0x8f, + 0x0e, 0xf4, 0xda, 0xde, 0x0c, 0xc5, 0x8e, 0x57, 0x95, 0x7e, 0xbb, 0x3e, 0x0c, 0x5b, 0x59, 0x46, + 0x06, 0xb7, 0x7f, 0x7b, 0x54, 0xc7, 0xe9, 0xf2, 0x28, 0xfe, 0x87, 0xa2, 0xdb, 0x35, 0x55, 0x38, + 0x2b, 0x7a, 0xbe, 0xde, 0x53, 0x38, 0xfb, 0x9e, 0x93, 0x57, 0x5a, 0x88, 0x01, 0x1a, 0x54, 0x37, + 0x3b, 0x7e, 0x44, 0x99, 0xc5, 0x5d, 0x28, 0xb1, 0xd0, 0x86, 0x27, 0xdc, 0x4a, 0x29, 0xa5, 0x4a, + 0xd7, 0x25, 0xfc, 0xfe, 0xe1, 0xdc, 0xbb, 0x4f, 0xae, 0x56, 0xd2, 0x1a, 0x15, 0x7f, 0x12, 0x41, + 0x99, 0xfd, 0xcd, 0x2b, 0x42, 0x64, 0xd0, 0x74, 0x4b, 0xd9, 0xa2, 0x04, 0x91, 0x4b, 0xb9, 0x89, + 0x96, 0x43, 0x7c, 0x28, 0xf3, 0xa7, 0x8a, 0xb8, 0x50, 0x11, 0x5b, 0x6d, 0xaa, 0xba, 0x8c, 0x04, + 0x71, 0xff, 0x70, 0xee, 0xc5, 0x93, 0x0b, 0x55, 0xcd, 0x51, 0x8b, 0xb0, 0xff, 0xa6, 0xa8, 0xe7, + 0xae, 0xac, 0x97, 0xfe, 0xa1, 0x98, 0xbb, 0x2f, 0x64, 0xe6, 0xee, 0xa5, 0x9e, 0xb9, 0x3b, 0xad, + 0x9f, 0xf3, 0x49, 0xcd, 0xc6, 0xc7, 0xbd, 0xc1, 0x1e, 0x1d, 0xc7, 0x73, 0xcf, 0xe2, 0xb5, 0x8e, + 0x17, 0xd2, 0x68, 0x33, 0xec, 0xf8, 0x9e, 0x5f, 0x97, 0x8f, 0x3a, 0x1a, 0x9e, 0x45, 0x0a, 0x8d, + 0x59, 0x7a, 0xfb, 0xab, 0xfc, 0xbc, 0xd3, 0x28, 0x2e, 0x63, 0x5f, 0xb9, 0xc9, 0x5f, 0x7b, 0x12, + 0x15, 0xa5, 0xea, 0x2b, 0x8b, 0x27, 0x9e, 0x04, 0x8e, 0xec, 0xc3, 0xf8, 0x8e, 0x78, 0x71, 0x22, + 0x9f, 0x2b, 0x4e, 0xf2, 0xf9, 0x0a, 0x7e, 0x99, 0x34, 0x79, 0xcb, 0xe2, 0xbe, 0xfe, 0x13, 0x13, + 0x69, 0xf6, 0x2f, 0x14, 0xe1, 0x54, 0xe6, 0x2d, 0x22, 0x16, 0xf0, 0x27, 0x0f, 0x4f, 0x65, 0xb3, + 0xf3, 0xea, 0x89, 0x64, 0x45, 0x41, 0x3e, 0x08, 0x50, 0xa5, 0xed, 0x66, 0xd0, 0xe5, 0x8e, 0xcb, + 0xc8, 0x89, 0x1d, 0x17, 0xe5, 0xeb, 0x2e, 0x2b, 0x2e, 0x68, 0x70, 0x94, 0x65, 0xb4, 0xa3, 0xe2, + 0x3d, 0x8d, 0x74, 0x19, 0xad, 0x71, 0xd3, 0x6f, 0xec, 0xf1, 0xde, 0xf4, 0xf3, 0xe0, 0x94, 0x50, + 0x51, 0x95, 0x70, 0x3d, 0x44, 0xa5, 0xd6, 0x19, 0x36, 0xa3, 0x96, 0xd3, 0x6c, 0x30, 0xcb, 0xd7, + 0xfe, 0x6c, 0x81, 0xb9, 0x6f, 0x62, 0xb0, 0xd7, 0x92, 0xe4, 0xf8, 0x5b, 0x61, 0xcc, 0xe9, 0xc4, + 0x8d, 0xa0, 0xe7, 0x05, 0x90, 0x45, 0x0e, 0x45, 0x89, 0x25, 0xab, 0x30, 0x52, 0x75, 0xe2, 0xe4, + 0x89, 0xff, 0x93, 0x28, 0xa7, 0x33, 0x61, 0x4e, 0x4c, 0x91, 0x73, 0x21, 0x4f, 0xc1, 0x48, 0xec, + 0xd4, 0x53, 0x2f, 0x78, 0x6e, 0x3b, 0xf5, 0x08, 0x39, 0xd4, 0xdc, 0x5d, 0x46, 0x8e, 0xd8, 0x5d, + 0x5e, 0x34, 0xfe, 0xf9, 0x84, 0x71, 0xea, 0xd2, 0xfb, 0x0f, 0x23, 0x44, 0x61, 0x7f, 0x8a, 0xd6, + 0xfe, 0x7f, 0x30, 0x69, 0xfe, 0x43, 0x89, 0x63, 0xdd, 0x35, 0xb2, 0x3f, 0x6d, 0xc1, 0x74, 0xfa, + 0xb9, 0x5c, 0x36, 0x86, 0xf2, 0x31, 0xde, 0xcc, 0x18, 0x66, 0x9e, 0xcf, 0xbd, 0x0e, 0xc5, 0xd0, + 0xd9, 0x97, 0x43, 0xf8, 0xec, 0xc0, 0x21, 0x94, 0xff, 0x79, 0x6a, 0x1e, 0x9d, 0x7d, 0x16, 0x48, + 0xfb, 0xec, 0x7b, 0x89, 0x07, 0x0d, 0xd1, 0xd9, 0x47, 0xc6, 0xe2, 0xdd, 0xa5, 0x2f, 0x7d, 0x65, + 0xee, 0x89, 0xd7, 0xff, 0xe2, 0xd2, 0x13, 0xf6, 0xdf, 0x8f, 0xc0, 0x54, 0xaa, 0xea, 0x30, 0xb5, + 0xe8, 0xac, 0x23, 0x17, 0x1d, 0x3f, 0xde, 0xeb, 0xf8, 0x54, 0xd6, 0x94, 0x1a, 0xc7, 0x7b, 0x1d, + 0x9f, 0xa2, 0xc0, 0xb1, 0x0e, 0x56, 0xc3, 0x2e, 0x76, 0x7c, 0x79, 0x48, 0xa0, 0x3a, 0xb8, 0xcc, + 0xa1, 0x28, 0xb1, 0x2c, 0x9e, 0x9e, 0x8c, 0xb8, 0x8d, 0x16, 0x26, 0x4b, 0x2e, 0xe2, 0x1b, 0x79, + 0x3c, 0xe2, 0x26, 0x2b, 0x6c, 0x79, 0x7e, 0xc1, 0x84, 0x60, 0x4a, 0x22, 0xf9, 0x84, 0x65, 0x3e, + 0x5f, 0x37, 0x96, 0xc7, 0xe1, 0x56, 0xb6, 0xa8, 0x53, 0x2c, 0xe8, 0x07, 0xbf, 0x62, 0x17, 0x29, + 0x7b, 0x32, 0xfe, 0x68, 0xec, 0x09, 0xf4, 0xb1, 0x25, 0x6f, 0x87, 0x72, 0xcb, 0xf1, 0xbd, 0x1a, + 0x8d, 0x62, 0xf1, 0xbf, 0x69, 0xca, 0x22, 0x98, 0x5b, 0x4b, 0x80, 0xa8, 0xf1, 0xfc, 0x3f, 0x40, + 0xf1, 0x8e, 0x89, 0x98, 0xaa, 0x6c, 0xfc, 0x07, 0x28, 0x0d, 0x46, 0x93, 0xc6, 0xfe, 0x0d, 0x0b, + 0xce, 0xf5, 0x1d, 0x8c, 0x1f, 0xdc, 0x6c, 0xac, 0xfd, 0x9b, 0x05, 0x38, 0xd3, 0xa7, 0x2a, 0x97, + 0x74, 0x1f, 0xd9, 0x2b, 0x87, 0xb2, 0xec, 0x77, 0x6a, 0xe0, 0xdc, 0x38, 0xd9, 0xae, 0xa8, 0x77, + 0xa6, 0xe2, 0x63, 0xdd, 0x99, 0xec, 0xaf, 0x16, 0xc0, 0x78, 0x8f, 0x93, 0x7c, 0xd4, 0x2c, 0x40, + 0xb7, 0xf2, 0x2a, 0x96, 0x16, 0xcc, 0x55, 0x01, 0xbb, 0x18, 0xb5, 0x7e, 0xf5, 0xec, 0xd9, 0xf9, + 0x5a, 0x38, 0x7a, 0xbe, 0x92, 0x66, 0x52, 0xe9, 0x5f, 0xcc, 0xbf, 0xd2, 0xbf, 0xdc, 0x53, 0xe5, + 0xff, 0x73, 0x96, 0x98, 0x69, 0x99, 0x2e, 0x69, 0x0b, 0x6b, 0x3d, 0xc0, 0xc2, 0xbe, 0x03, 0x4a, + 0x11, 0x6d, 0xd6, 0x98, 0xa3, 0x29, 0x2d, 0xb1, 0x7e, 0xfe, 0x5b, 0xc2, 0x51, 0x51, 0xf0, 0xab, + 0xbc, 0xcd, 0x66, 0xb0, 0x7f, 0xa5, 0xd5, 0x8e, 0xbb, 0xd2, 0x26, 0xeb, 0xab, 0xbc, 0x0a, 0x83, + 0x06, 0x95, 0xfd, 0xaf, 0x96, 0xf8, 0x9c, 0x32, 0x64, 0x78, 0x21, 0x73, 0xc5, 0xf2, 0xf8, 0xde, + 0xf6, 0x4f, 0x01, 0xb8, 0xea, 0x89, 0x84, 0x7c, 0x9e, 0xe9, 0xd4, 0x4f, 0x2e, 0x98, 0x6f, 0x47, + 0x26, 0x30, 0x34, 0xe4, 0xa5, 0x16, 0x4f, 0xf1, 0xa8, 0xc5, 0x63, 0xff, 0x93, 0x05, 0xa9, 0xcd, + 0x82, 0xb4, 0x61, 0x94, 0x69, 0xd0, 0xcd, 0xe7, 0x41, 0x07, 0x93, 0x35, 0x5b, 0x58, 0x72, 0x5a, + 0xf0, 0x3f, 0x51, 0x08, 0x22, 0x4d, 0x19, 0x2c, 0x14, 0xf2, 0x78, 0x74, 0xc4, 0x14, 0xc8, 0xc2, + 0x0d, 0xf9, 0xdf, 0x3e, 0x54, 0xe0, 0x61, 0xbf, 0x00, 0x33, 0x3d, 0x4a, 0xf1, 0x0b, 0x52, 0x41, + 0xf2, 0x8a, 0x85, 0x31, 0x03, 0xf9, 0x75, 0x4d, 0x14, 0x38, 0x16, 0x6f, 0x9c, 0xce, 0xb2, 0x27, + 0x5f, 0xb2, 0x60, 0x26, 0xca, 0xf2, 0x7b, 0x54, 0x63, 0xa7, 0x12, 0x69, 0x3d, 0x28, 0xec, 0x55, + 0xc2, 0xfe, 0x0f, 0x69, 0x9e, 0xc4, 0x7f, 0x47, 0x53, 0x9b, 0x8b, 0x35, 0x70, 0x73, 0x61, 0x4b, + 0xcc, 0x6d, 0xd0, 0x6a, 0xa7, 0xd9, 0x53, 0x2a, 0xb4, 0x25, 0xe1, 0xa8, 0x28, 0x52, 0xcf, 0xf5, + 0x15, 0x8f, 0x7c, 0xae, 0xef, 0x79, 0x98, 0x34, 0x5f, 0x6a, 0xe1, 0x19, 0x3d, 0x79, 0x16, 0x62, + 0x3e, 0xea, 0x82, 0x29, 0xaa, 0xcc, 0x73, 0x6f, 0xa3, 0x47, 0x3e, 0xf7, 0xf6, 0x0c, 0x94, 0xe4, + 0xd3, 0x65, 0x49, 0xba, 0x59, 0xd4, 0x21, 0x49, 0x18, 0x2a, 0x2c, 0x33, 0x10, 0x2d, 0xc7, 0xef, + 0x38, 0x4d, 0x36, 0x42, 0xb2, 0x3c, 0x51, 0xad, 0xac, 0x35, 0x85, 0x41, 0x83, 0x8a, 0xf5, 0x98, + 0xb9, 0x9d, 0xaf, 0x04, 0x7e, 0x92, 0xa8, 0x51, 0x3d, 0xde, 0x96, 0x70, 0x54, 0x14, 0xf6, 0xdf, + 0x59, 0x90, 0x7d, 0x77, 0x29, 0x55, 0x12, 0x69, 0x1d, 0x59, 0x12, 0x99, 0x2e, 0xf7, 0x2a, 0x1c, + 0xab, 0xdc, 0xcb, 0xac, 0xc4, 0x2a, 0x3e, 0xb0, 0x12, 0xeb, 0x2d, 0xfa, 0x9a, 0xbd, 0x28, 0xd9, + 0x9a, 0xe8, 0x77, 0xc5, 0x9e, 0xd8, 0x30, 0xe6, 0x3a, 0xaa, 0xe2, 0x7c, 0x52, 0xb8, 0x55, 0x4b, + 0x8b, 0x9c, 0x48, 0x62, 0x2a, 0xf3, 0x5f, 0xff, 0xee, 0xc5, 0x27, 0xbe, 0xf1, 0xdd, 0x8b, 0x4f, + 0x7c, 0xeb, 0xbb, 0x17, 0x9f, 0x78, 0xfd, 0xde, 0x45, 0xeb, 0xeb, 0xf7, 0x2e, 0x5a, 0xdf, 0xb8, + 0x77, 0xd1, 0xfa, 0xd6, 0xbd, 0x8b, 0xd6, 0x77, 0xee, 0x5d, 0xb4, 0x3e, 0xff, 0xd7, 0x17, 0x9f, + 0x78, 0xa5, 0x94, 0xcc, 0xec, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xfa, 0x84, 0x65, 0x8e, 0x99, + 0x77, 0x00, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -3779,9 +3814,14 @@ func (m *ApplicationSourceHelm) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x2a } } - i -= len(m.Values) - copy(dAtA[i:], m.Values) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Values))) + { + size, err := m.Values.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x22 i -= len(m.ReleaseName) @@ -7526,6 +7566,46 @@ func (m *SignatureKey) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *StringOrObject) 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 *StringOrObject) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StringOrObject) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Raw != nil { + { + size, err := m.Raw.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Values) + copy(dAtA[i:], m.Values) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Values))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *SyncOperation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -8393,7 +8473,7 @@ func (m *ApplicationSourceHelm) Size() (n int) { } l = len(m.ReleaseName) n += 1 + l + sovGenerated(uint64(l)) - l = len(m.Values) + l = m.Values.Size() n += 1 + l + sovGenerated(uint64(l)) if len(m.FileParameters) > 0 { for _, e := range m.FileParameters { @@ -9808,6 +9888,21 @@ func (m *SignatureKey) Size() (n int) { return n } +func (m *StringOrObject) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Values) + n += 1 + l + sovGenerated(uint64(l)) + if m.Raw != nil { + l = m.Raw.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *SyncOperation) Size() (n int) { if m == nil { return 0 @@ -10257,7 +10352,7 @@ func (this *ApplicationSourceHelm) String() string { `ValueFiles:` + fmt.Sprintf("%v", this.ValueFiles) + `,`, `Parameters:` + repeatedStringForParameters + `,`, `ReleaseName:` + fmt.Sprintf("%v", this.ReleaseName) + `,`, - `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `Values:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Values), "StringOrObject", "StringOrObject", 1), `&`, ``, 1) + `,`, `FileParameters:` + repeatedStringForFileParameters + `,`, `Version:` + fmt.Sprintf("%v", this.Version) + `,`, `PassCredentials:` + fmt.Sprintf("%v", this.PassCredentials) + `,`, @@ -13702,7 +13797,7 @@ func (m *ApplicationSourceHelm) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -13712,23 +13807,24 @@ func (m *ApplicationSourceHelm) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthGenerated } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthGenerated } if postIndex > l { return io.ErrUnexpectedEOF } - m.Values = string(dAtA[iNdEx:postIndex]) + if err := m.Values.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 5: if wireType != 2 { @@ -26543,6 +26639,124 @@ func (m *SignatureKey) Unmarshal(dAtA []byte) error { } return nil } +func (m *StringOrObject) 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: StringOrObject: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StringOrObject: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Values = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Raw", 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.Raw == nil { + m.Raw = &runtime.RawExtension{} + } + if err := m.Raw.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *SyncOperation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 6cd24cf78f3d5..ac14a5621c442 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -197,7 +197,9 @@ message ApplicationSourceHelm { optional string releaseName = 3; // Values specifies Helm values to be passed to helm template, typically defined as a block - optional string values = 4; + // +kubebuilder:pruning:PreserveUnknownFields + // +patchStrategy=replace + optional StringOrObject values = 4; // FileParameters are file parameters to the helm template repeated HelmFileParameter fileParameters = 5; @@ -1198,6 +1200,17 @@ message SignatureKey { optional string keyID = 1; } +// +patchStrategy=replace +// +protobuf.options.(gogoproto.goproto_stringer)=false +// +kubebuilder:validation:Type="" +message StringOrObject { + // Values as string if Raw == nil + optional string values = 1; + + // Raw is Values in raw format if Raw != nil + optional k8s.io.apimachinery.pkg.runtime.RawExtension raw = 2; +} + // SyncOperation contains details about a sync operation. message SyncOperation { // Revision is the revision (Git) or chart version (Helm) which to sync the application to diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go index 8f42cefe89513..894d265a17750 100644 --- a/pkg/apis/application/v1alpha1/openapi_generated.go +++ b/pkg/apis/application/v1alpha1/openapi_generated.go @@ -91,6 +91,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.RevisionHistory": schema_pkg_apis_application_v1alpha1_RevisionHistory(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.RevisionMetadata": schema_pkg_apis_application_v1alpha1_RevisionMetadata(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SignatureKey": schema_pkg_apis_application_v1alpha1_SignatureKey(ref), + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.StringOrObject": schema_pkg_apis_application_v1alpha1_StringOrObject(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncOperation": schema_pkg_apis_application_v1alpha1_SyncOperation(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncOperationResource": schema_pkg_apis_application_v1alpha1_SyncOperationResource(ref), "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.SyncOperationResult": schema_pkg_apis_application_v1alpha1_SyncOperationResult(ref), @@ -745,10 +746,15 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSourceHelm(ref common.Refer }, }, "values": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-patch-strategy": "replace", + }, + }, SchemaProps: spec.SchemaProps{ Description: "Values specifies Helm values to be passed to helm template, typically defined as a block", - Type: []string{"string"}, - Format: "", + Default: map[string]interface{}{}, + Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.StringOrObject"), }, }, "fileParameters": { @@ -797,7 +803,7 @@ func schema_pkg_apis_application_v1alpha1_ApplicationSourceHelm(ref common.Refer }, }, Dependencies: []string{ - "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmFileParameter", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmParameter"}, + "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmFileParameter", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.HelmParameter", "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.StringOrObject"}, } } @@ -4100,6 +4106,17 @@ func schema_pkg_apis_application_v1alpha1_SignatureKey(ref common.ReferenceCallb } } +func schema_pkg_apis_application_v1alpha1_StringOrObject(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Type: StringOrObject{}.OpenAPISchemaType(), + Format: StringOrObject{}.OpenAPISchemaFormat(), + }, + }, + } +} + func schema_pkg_apis_application_v1alpha1_SyncOperation(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/pkg/apis/application/v1alpha1/stringorobject_types.go b/pkg/apis/application/v1alpha1/stringorobject_types.go new file mode 100644 index 0000000000000..b09e7f6c00d98 --- /dev/null +++ b/pkg/apis/application/v1alpha1/stringorobject_types.go @@ -0,0 +1,102 @@ +package v1alpha1 + +import ( + "encoding/json" + "strconv" + + "k8s.io/apimachinery/pkg/runtime" + "sigs.k8s.io/yaml" +) + +// +patchStrategy=replace +// +protobuf.options.(gogoproto.goproto_stringer)=false +// +kubebuilder:validation:Type="" +type StringOrObject struct { + // Values as string if Raw == nil + Values string `json:"-" protobuf:"bytes,1,opt,name=values"` + // Raw is Values in raw format if Raw != nil + Raw *runtime.RawExtension `json:"-" protobuf:"bytes,2,opt,name=raw"` +} + +// IsEmpty returns true if the Object is empty +func (o StringOrObject) IsEmpty() bool { + return o.Raw == nil && o.Values == "" +} + +// Value returns either the value in Raw or Values +func (o StringOrObject) Value() []byte { + if o.Raw != nil { + b, err := yaml.JSONToYAML(o.Raw.Raw) + if err != nil { + return []byte{} + } + return b + } + return []byte(o.Values) +} + +// MarshalJSON implements the json.Marshaller interface. +func (o StringOrObject) MarshalJSON() ([]byte, error) { + if o.Raw == nil { + if o.Values != "" { + return json.Marshal(o.Values) + } + return []byte("null"), nil + } + return o.Raw.MarshalJSON() +} + +// UnmarshalJSON implements the json.Unmarshaller interface. +func (o *StringOrObject) UnmarshalJSON(value []byte) error { + var v interface{} + if err := json.Unmarshal(value, &v); err != nil { + // handle error + return err + } + switch v.(type) { + case map[string]interface{}: + // it's an object + o.Raw = &runtime.RawExtension{} + return o.Raw.UnmarshalJSON(value) + default: + // default to string + s, err := strconv.Unquote(string(value)) + if err != nil { + return err + } + o.Values = s + } + + return nil +} + +// String formats the Object as a string +func (o *StringOrObject) String() string { + if o == nil { + return "" + } + if o.Raw == nil { + return o.Values + } + + b, err := yaml.JSONToYAML(o.Raw.Raw) + if err != nil { + return "" + } + return string(b) +} + +// ToUnstructured implements the value.UnstructuredConverter interface. +func (o StringOrObject) ToUnstructured() interface{} { + return o.String() +} + +// OpenAPISchemaType is used by the kube-openapi generator when constructing +// the OpenAPI spec of this type. +// +// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators +func (_ StringOrObject) OpenAPISchemaType() []string { return []string{"string"} } + +// OpenAPISchemaFormat is used by the kube-openapi generator when constructing +// the OpenAPI spec of this type. +func (_ StringOrObject) OpenAPISchemaFormat() string { return "" } diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go index 4095e7964bd2b..473708e61cc67 100644 --- a/pkg/apis/application/v1alpha1/types.go +++ b/pkg/apis/application/v1alpha1/types.go @@ -234,7 +234,9 @@ type ApplicationSourceHelm struct { // ReleaseName is the Helm release name to use. If omitted it will use the application name ReleaseName string `json:"releaseName,omitempty" protobuf:"bytes,3,opt,name=releaseName"` // Values specifies Helm values to be passed to helm template, typically defined as a block - Values string `json:"values,omitempty" protobuf:"bytes,4,opt,name=values"` + // +kubebuilder:pruning:PreserveUnknownFields + // +patchStrategy=replace + Values StringOrObject `json:"values,omitempty" patchStrategy:"replace" protobuf:"bytes,4,opt,name=values"` // FileParameters are file parameters to the helm template FileParameters []HelmFileParameter `json:"fileParameters,omitempty" protobuf:"bytes,5,opt,name=fileParameters"` // Version is the Helm version to use for templating (either "2" or "3") @@ -326,7 +328,7 @@ func (in *ApplicationSourceHelm) AddFileParameter(p HelmFileParameter) { // IsZero Returns true if the Helm options in an application source are considered zero func (h *ApplicationSourceHelm) IsZero() bool { - return h == nil || (h.Version == "") && (h.ReleaseName == "") && len(h.ValueFiles) == 0 && len(h.Parameters) == 0 && len(h.FileParameters) == 0 && h.Values == "" && !h.PassCredentials && !h.IgnoreMissingValueFiles && !h.SkipCrds + return h == nil || (h.Version == "") && (h.ReleaseName == "") && len(h.ValueFiles) == 0 && len(h.Parameters) == 0 && len(h.FileParameters) == 0 && h.Values.IsEmpty() && !h.PassCredentials && !h.IgnoreMissingValueFiles && !h.SkipCrds } // KustomizeImage represents a Kustomize image definition in the format [old_image_name=]: diff --git a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go index c3a2dfddfb197..547b6f66b986f 100644 --- a/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/application/v1alpha1/zz_generated.deepcopy.go @@ -353,6 +353,7 @@ func (in *ApplicationSourceHelm) DeepCopyInto(out *ApplicationSourceHelm) { *out = make([]HelmParameter, len(*in)) copy(*out, *in) } + in.Values.DeepCopyInto(&out.Values) if in.FileParameters != nil { in, out := &in.FileParameters, &out.FileParameters *out = make([]HelmFileParameter, len(*in)) @@ -2006,6 +2007,27 @@ func (in *SignatureKey) DeepCopy() *SignatureKey { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StringOrObject) DeepCopyInto(out *StringOrObject) { + *out = *in + if in.Raw != nil { + in, out := &in.Raw, &out.Raw + *out = new(runtime.RawExtension) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StringOrObject. +func (in *StringOrObject) DeepCopy() *StringOrObject { + if in == nil { + return nil + } + out := new(StringOrObject) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SyncOperation) DeepCopyInto(out *SyncOperation) { *out = *in diff --git a/reposerver/repository/repository.go b/reposerver/repository/repository.go index f6fc8aa859c6c..b287a358ef7a5 100644 --- a/reposerver/repository/repository.go +++ b/reposerver/repository/repository.go @@ -727,14 +727,14 @@ func helmTemplate(appPath string, repoRoot string, env *v1alpha1.Env, q *apiclie templateOpts.Values = append(templateOpts.Values, path) } - if appHelm.Values != "" { + if !appHelm.Values.IsEmpty() { rand, err := uuid.NewRandom() if err != nil { return nil, err } p := path.Join(os.TempDir(), rand.String()) defer func() { _ = os.RemoveAll(p) }() - err = ioutil.WriteFile(p, []byte(appHelm.Values), 0644) + err = ioutil.WriteFile(p, appHelm.Values.Value(), 0644) if err != nil { return nil, err } diff --git a/reposerver/repository/repository_test.go b/reposerver/repository/repository_test.go index 6c2a96a6782b1..c18768038c4ac 100644 --- a/reposerver/repository/repository_test.go +++ b/reposerver/repository/repository_test.go @@ -641,7 +641,42 @@ func TestGenerateHelmWithValues(t *testing.T) { Path: "./util/helm/testdata/redis", Helm: &argoappv1.ApplicationSourceHelm{ ValueFiles: []string{"values-production.yaml"}, - Values: `cluster: {slaveCount: 2}`, + Values: argoappv1.StringOrObject{Values: `cluster: {slaveCount: 2}`}, + }, + }, + }) + + assert.NoError(t, err) + + replicasVerified := false + for _, src := range res.Manifests { + obj := unstructured.Unstructured{} + err = json.Unmarshal([]byte(src), &obj) + assert.NoError(t, err) + + if obj.GetKind() == "Deployment" && obj.GetName() == "test-redis-slave" { + var dep v1.Deployment + err := runtime.DefaultUnstructuredConverter.FromUnstructured(obj.Object, &dep) + assert.NoError(t, err) + assert.Equal(t, int32(2), *dep.Spec.Replicas) + replicasVerified = true + } + } + assert.True(t, replicasVerified) + +} + +func TestGenerateHelmWithRawValues(t *testing.T) { + service := newService("../..") + + res, err := service.GenerateManifest(context.Background(), &apiclient.ManifestRequest{ + Repo: &argoappv1.Repository{}, + AppName: "test", + ApplicationSource: &argoappv1.ApplicationSource{ + Path: "./util/helm/testdata/redis", + Helm: &argoappv1.ApplicationSourceHelm{ + ValueFiles: []string{"values-production.yaml"}, + Values: argoappv1.StringOrObject{Raw: &runtime.RawExtension{Raw: []byte(`cluster: {slaveCount: 2}`)}}, }, }, }) @@ -703,7 +738,7 @@ func TestGenerateHelmWithValuesDirectoryTraversal(t *testing.T) { Path: "./util/helm/testdata/redis", Helm: &argoappv1.ApplicationSourceHelm{ ValueFiles: []string{"../minio/values.yaml"}, - Values: `cluster: {slaveCount: 2}`, + Values: argoappv1.StringOrObject{Values: `cluster: {slaveCount: 2}`}, }, }, }) @@ -801,7 +836,7 @@ func TestGenerateHelmWithURL(t *testing.T) { Path: "./util/helm/testdata/redis", Helm: &argoappv1.ApplicationSourceHelm{ ValueFiles: []string{"https://raw.githubusercontent.com/argoproj/argocd-example-apps/master/helm-guestbook/values.yaml"}, - Values: `cluster: {slaveCount: 2}`, + Values: argoappv1.StringOrObject{Values: `cluster: {slaveCount: 2}`}, }, }, HelmOptions: &argoappv1.HelmOptions{ValuesFileSchemes: []string{"https"}}, @@ -821,7 +856,7 @@ func TestGenerateHelmWithValuesDirectoryTraversalOutsideRepo(t *testing.T) { Path: "./util/helm/testdata/redis", Helm: &argoappv1.ApplicationSourceHelm{ ValueFiles: []string{"../../../../../minio/values.yaml"}, - Values: `cluster: {slaveCount: 2}`, + Values: argoappv1.StringOrObject{Values: `cluster: {slaveCount: 2}`}, }, }, }) @@ -838,7 +873,7 @@ func TestGenerateHelmWithValuesDirectoryTraversalOutsideRepo(t *testing.T) { Path: ".", Helm: &argoappv1.ApplicationSourceHelm{ ValueFiles: []string{"../my-chart/my-chart-values.yaml"}, - Values: `cluster: {slaveCount: 2}`, + Values: argoappv1.StringOrObject{Values: `cluster: {slaveCount: 2}`}, }, }, }) @@ -854,7 +889,7 @@ func TestGenerateHelmWithValuesDirectoryTraversalOutsideRepo(t *testing.T) { Path: ".", Helm: &argoappv1.ApplicationSourceHelm{ ValueFiles: []string{"/my-chart-values.yaml"}, - Values: `cluster: {slaveCount: 2}`, + Values: argoappv1.StringOrObject{Values: `cluster: {slaveCount: 2}`}, }, }, }) @@ -870,7 +905,7 @@ func TestGenerateHelmWithValuesDirectoryTraversalOutsideRepo(t *testing.T) { Path: ".", Helm: &argoappv1.ApplicationSourceHelm{ ValueFiles: []string{"/../../../my-chart-values.yaml"}, - Values: `cluster: {slaveCount: 2}`, + Values: argoappv1.StringOrObject{Values: `cluster: {slaveCount: 2}`}, }, }, }) @@ -887,7 +922,7 @@ func TestGenerateHelmWithValuesDirectoryTraversalOutsideRepo(t *testing.T) { Path: ".", Helm: &argoappv1.ApplicationSourceHelm{ ValueFiles: []string{"file://../../../../my-chart-values.yaml"}, - Values: `cluster: {slaveCount: 2}`, + Values: argoappv1.StringOrObject{Values: `cluster: {slaveCount: 2}`}, }, }, }) @@ -934,11 +969,13 @@ func TestGenerateHelmWithAbsoluteFileParameter(t *testing.T) { Path: "./util/helm/testdata/redis", Helm: &argoappv1.ApplicationSourceHelm{ ValueFiles: []string{"values-production.yaml"}, - Values: `cluster: {slaveCount: 2}`, - FileParameters: []argoappv1.HelmFileParameter{{ - Name: "passwordContent", - Path: externalSecretPath, - }}, + Values: argoappv1.StringOrObject{Values: `cluster: {slaveCount: 2}`}, + FileParameters: []argoappv1.HelmFileParameter{ + argoappv1.HelmFileParameter{ + Name: "passwordContent", + Path: externalSecretPath, + }, + }, }, }, }) @@ -959,7 +996,7 @@ func TestGenerateHelmWithFileParameter(t *testing.T) { Path: "./util/helm/testdata/redis", Helm: &argoappv1.ApplicationSourceHelm{ ValueFiles: []string{"values-production.yaml"}, - Values: `cluster: {slaveCount: 2}`, + Values: argoappv1.StringOrObject{Values: `cluster: {slaveCount: 2}`}, FileParameters: []argoappv1.HelmFileParameter{ argoappv1.HelmFileParameter{ Name: "passwordContent", diff --git a/test/e2e/helm_test.go b/test/e2e/helm_test.go index a1850e06eab74..e506aa560c245 100644 --- a/test/e2e/helm_test.go +++ b/test/e2e/helm_test.go @@ -16,6 +16,7 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/yaml" . "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" "github.com/argoproj/argo-cd/v2/test/e2e/fixture" @@ -202,7 +203,7 @@ func TestHelmValuesLiteralFileLocal(t *testing.T) { if err != nil { panic(err) } - assert.Equal(t, string(data), app.Spec.Source.Helm.Values) + assert.Equal(t, string(data), app.Spec.Source.Helm.Values.Values) }). When(). AppUnSet("--values-literal"). @@ -212,6 +213,32 @@ func TestHelmValuesLiteralFileLocal(t *testing.T) { }) } +func TestHelmValuesLiteralFileLocalRawObject(t *testing.T) { + Given(t). + Path("helm"). + When(). + CreateApp(). + AppSet("--values-raw-literal-file", "testdata/helm/baz.yaml"). + Then(). + And(func(app *Application) { + data, err := ioutil.ReadFile("testdata/helm/baz.yaml") + if err != nil { + panic(err) + } + data, err = yaml.YAMLToJSON(data) + if err != nil { + panic(err) + } + assert.Equal(t, data, app.Spec.Source.Helm.Values.Raw.Raw) + }). + When(). + AppUnSet("--values-raw-literal"). + Then(). + And(func(app *Application) { + assert.Nil(t, app.Spec.Source.Helm) + }) +} + func TestHelmValuesLiteralFileRemote(t *testing.T) { sentinel := "a: b" serve := func(c chan<- string) { @@ -244,7 +271,7 @@ func TestHelmValuesLiteralFileRemote(t *testing.T) { AppSet("--values-literal-file", "http://"+address). Then(). And(func(app *Application) { - assert.Equal(t, "a: b", app.Spec.Source.Helm.Values) + assert.Equal(t, "a: b", app.Spec.Source.Helm.Values.Values) }). When(). AppUnSet("--values-literal"). diff --git a/ui/src/app/applications/components/application-parameters/application-parameters.tsx b/ui/src/app/applications/components/application-parameters/application-parameters.tsx index 972783777f682..11b31827880f3 100644 --- a/ui/src/app/applications/components/application-parameters/application-parameters.tsx +++ b/ui/src/app/applications/components/application-parameters/application-parameters.tsx @@ -9,6 +9,9 @@ import {services} from '../../../shared/services'; import {ImageTagFieldEditor} from './kustomize'; import * as kustomize from './kustomize-image'; import {VarsInputField} from './vars-input-field'; +import * as jsYaml from 'js-yaml'; + +let isValuesRaw = false; const TextWithMetadataField = ReactFormField((props: {metadata: {value: string}; fieldApi: FieldApi; className: string}) => { const { @@ -115,6 +118,13 @@ export const ApplicationParameters = (props: { const app = props.application; const source = props.application.spec.source; const [removedOverrides, setRemovedOverrides] = React.useState(new Array()); + /* tslint:disable:prettier*/ + let appValues : string; + if (app && app.spec && app.spec.source && app.spec.source.helm && app.spec.source.helm.values) { + isValuesRaw = typeof(app.spec.source.helm.values) !== 'string'; // nolint + appValues = isValuesRaw ? jsYaml.safeDump(app.spec.source.helm.values) : app.spec.source.helm.values; + app.spec.source.helm.values = isValuesRaw ? jsYaml.safeDump(app.spec.source.helm.values) : app.spec.source.helm.values; + } let attributes: EditablePanelItem[] = []; @@ -192,28 +202,37 @@ export const ApplicationParameters = (props: { /> ) }); - attributes.push({ + attributes.push({ title: 'VALUES', view: app.spec.source.helm && ( -
{app.spec.source.helm.values}
+
{appValues}
), - edit: (formApi: FormApi) => ( -
-
-                        
-                    
- {props.details.helm.values && ( -
- - -
{props.details.helm.values}
-
-
- )} -
- ) + edit: (formApi: FormApi) => { + if (app && app.spec && app.spec.source && app.spec.source.helm && app.spec.source.helm.values) { + if (isValuesRaw && typeof(app.spec.source.helm.values) !== 'string') { + app.spec.source.helm.values = jsYaml.safeDump(app.spec.source.helm.values); // set values to string + } else if (isValuesRaw && typeof(app.spec.source.helm.values) === 'string') { + app.spec.source.helm.values = jsYaml.safeLoad(app.spec.source.helm.values); // load values as json + } + } + return ( +
+
+                            
+                        
+ {appValues && ( +
+ + +
{appValues}
+
+
+ )} +
+ ) + } }); const paramsByName = new Map(); (props.details.helm.parameters || []).forEach(param => paramsByName.set(param.name, param)); @@ -304,7 +323,11 @@ export const ApplicationParameters = (props: { edit: (formApi: FormApi) => }); } - + if (app && app.spec && app.spec.source && app.spec.source.helm && app.spec.source.helm.values) { + if (isValuesRaw && typeof(app.spec.source.helm.values) === 'string' ) { + app.spec.source.helm.values = jsYaml.safeLoad(app.spec.source.helm.values) // Load values as json + } + } return ( ()); })