From 70f2a89705fa5adb8209d03610766a5230a7a4f7 Mon Sep 17 00:00:00 2001
From: Michael Crenshaw
Date: Wed, 17 Aug 2022 13:30:32 -0700
Subject: [PATCH 01/15] fix: missing actions (#10327) (#10359)
Signed-off-by: CI
Signed-off-by: CI
Signed-off-by: Yi Cai
---
ui/src/app/applications/components/utils.tsx | 60 +++++++++++---------
1 file changed, 33 insertions(+), 27 deletions(-)
diff --git a/ui/src/app/applications/components/utils.tsx b/ui/src/app/applications/components/utils.tsx
index 40bfc310bf1da..2e8b2fdde5a46 100644
--- a/ui/src/app/applications/components/utils.tsx
+++ b/ui/src/app/applications/components/utils.tsx
@@ -5,8 +5,8 @@ import * as React from 'react';
import * as ReactForm from 'react-form';
import {FormApi, Text} from 'react-form';
import * as moment from 'moment';
-import {BehaviorSubject, from, fromEvent, merge, Observable, Observer, Subscription} from 'rxjs';
-import {debounceTime} from 'rxjs/operators';
+import {BehaviorSubject, combineLatest, concat, from, fromEvent, Observable, Observer, Subscription} from 'rxjs';
+import {debounceTime, map} from 'rxjs/operators';
import {AppContext, Context, ContextApis} from '../../shared/context';
import {ResourceTreeNode} from './application-resource-tree/application-resource-tree';
@@ -396,7 +396,6 @@ function getActionItems(
appChanged: BehaviorSubject,
isQuickStart: boolean
): Observable {
- let menuItems: Observable;
const isRoot = resource.root && nodeKey(resource.root) === nodeKey(resource);
const items: MenuItem[] = [
...((isRoot && [
@@ -440,44 +439,51 @@ function getActionItems(
.then(async settings => {
const execAllowed = await services.accounts.canI('exec', 'create', application.spec.project + '/' + application.metadata.name);
if (resource.kind === 'Pod' && settings.execEnabled && execAllowed) {
- return items.concat([
+ return [
{
title: 'Exec',
iconClassName: 'fa fa-terminal',
action: async () => appContext.apis.navigation.goto('.', {node: nodeKey(resource), tab: 'exec'}, {replace: true})
- }
- ]);
+ } as MenuItem
+ ];
}
- return items;
+ return [] as MenuItem[];
})
- .catch(() => items);
+ .catch(() => [] as MenuItem[]);
const resourceActions = services.applications
.getResourceActions(application.metadata.name, application.metadata.namespace, resource)
.then(actions => {
- return items.concat(
- actions.map(action => ({
- title: action.name,
- disabled: !!action.disabled,
- action: async () => {
- try {
- const confirmed = await appContext.apis.popup.confirm(`Execute '${action.name}' action?`, `Are you sure you want to execute '${action.name}' action?`);
- if (confirmed) {
- await services.applications.runResourceAction(application.metadata.name, application.metadata.namespace, resource, action.name);
+ return actions.map(
+ action =>
+ ({
+ title: action.name,
+ disabled: !!action.disabled,
+ action: async () => {
+ try {
+ const confirmed = await appContext.apis.popup.confirm(
+ `Execute '${action.name}' action?`,
+ `Are you sure you want to execute '${action.name}' action?`
+ );
+ if (confirmed) {
+ await services.applications.runResourceAction(application.metadata.name, application.metadata.namespace, resource, action.name);
+ }
+ } catch (e) {
+ appContext.apis.notifications.show({
+ content: ,
+ type: NotificationType.Error
+ });
}
- } catch (e) {
- appContext.apis.notifications.show({
- content: ,
- type: NotificationType.Error
- });
}
- }
- }))
+ } as MenuItem)
);
})
- .catch(() => items);
- menuItems = merge(from([items]), from(resourceActions), from(execAction));
- return menuItems;
+ .catch(() => [] as MenuItem[]);
+ return combineLatest(
+ from([items]), // this resolves immediately
+ concat([[] as MenuItem[]], resourceActions), // this resolves at first to [] and then whatever the API returns
+ concat([[] as MenuItem[]], execAction) // this resolves at first to [] and then whatever the API returns
+ ).pipe(map(res => ([] as MenuItem[]).concat(...res)));
}
export function renderResourceMenu(
From 551ad34df238c042696bb7b4b5a6d10d69f6c43e Mon Sep 17 00:00:00 2001
From: Alexander Matyushentsev
Date: Wed, 17 Aug 2022 14:03:24 -0700
Subject: [PATCH 02/15] chore: infer managed resources health from redis
instead of storing it in CRD (#10191)
* chore: infer managed resources health from redis instead of storing it in CRD
Signed-off-by: Alexander Matyushentsev
* apply reviewer notes
Signed-off-by: Alexander Matyushentsev
Signed-off-by: Alexander Matyushentsev
Signed-off-by: Yi Cai
---
assets/swagger.json | 4 +
.../commands/argocd_application_controller.go | 3 +
cmd/argocd/commands/admin/app.go | 2 +-
controller/appcontroller.go | 3 +-
controller/appcontroller_test.go | 1 +
controller/health.go | 15 +-
controller/health_test.go | 32 +-
controller/state.go | 53 +-
.../operator-manual/argocd-cmd-params-cm.yaml | 5 +
.../argocd-application-controller.md | 1 +
...cd-application-controller-statefulset.yaml | 6 +
manifests/core-install.yaml | 10 +
manifests/crds/application-crd.yaml | 4 +
manifests/ha/install.yaml | 10 +
manifests/ha/namespace-install.yaml | 6 +
manifests/install.yaml | 10 +
manifests/namespace-install.yaml | 6 +
pkg/apis/application/v1alpha1/generated.pb.go | 899 +++++++++---------
pkg/apis/application/v1alpha1/generated.proto | 3 +
.../application/v1alpha1/openapi_generated.go | 7 +
pkg/apis/application/v1alpha1/types.go | 9 +
server/application/application.go | 54 +-
server/application/application_test.go | 44 +
23 files changed, 707 insertions(+), 480 deletions(-)
diff --git a/assets/swagger.json b/assets/swagger.json
index 3c0bff6cb237b..3704908992a9f 100644
--- a/assets/swagger.json
+++ b/assets/swagger.json
@@ -5306,6 +5306,10 @@
"reconciledAt": {
"$ref": "#/definitions/v1Time"
},
+ "resourceHealthSource": {
+ "type": "string",
+ "title": "ResourceHealthSource indicates where the resource health status is stored: inline if not set or appTree"
+ },
"resources": {
"type": "array",
"title": "Resources is a list of Kubernetes resources managed by this application",
diff --git a/cmd/argocd-application-controller/commands/argocd_application_controller.go b/cmd/argocd-application-controller/commands/argocd_application_controller.go
index 2e91d659fe164..1d94fa64d42d2 100644
--- a/cmd/argocd-application-controller/commands/argocd_application_controller.go
+++ b/cmd/argocd-application-controller/commands/argocd_application_controller.go
@@ -61,6 +61,7 @@ func NewCommand() *cobra.Command {
repoServerStrictTLS bool
otlpAddress string
applicationNamespaces []string
+ persistResourceHealth bool
)
var command = cobra.Command{
Use: cliName,
@@ -149,6 +150,7 @@ func NewCommand() *cobra.Command {
metricsCacheExpiration,
metricsAplicationLabels,
kubectlParallelismLimit,
+ persistResourceHealth,
clusterFilter,
applicationNamespaces)
errors.CheckError(err)
@@ -192,6 +194,7 @@ func NewCommand() *cobra.Command {
command.Flags().StringSliceVar(&metricsAplicationLabels, "metrics-application-labels", []string{}, "List of Application labels that will be added to the argocd_application_labels metric")
command.Flags().StringVar(&otlpAddress, "otlp-address", env.StringFromEnv("ARGOCD_APPLICATION_CONTROLLER_OTLP_ADDRESS", ""), "OpenTelemetry collector address to send traces to")
command.Flags().StringSliceVar(&applicationNamespaces, "application-namespaces", env.StringsFromEnv("ARGOCD_APPLICATION_NAMESPACES", []string{}, ","), "List of additional namespaces that applications are allowed to be reconciled from")
+ command.Flags().BoolVar(&persistResourceHealth, "persist-resource-health", env.ParseBoolFromEnv("ARGOCD_APPLICATION_CONTROLLER_PERSIST_RESOURCE_HEALTH", true), "Enables storing the managed resources health in the Application CRD")
cacheSrc = appstatecache.AddCacheFlagsToCmd(&command, func(client *redis.Client) {
redisClient = client
})
diff --git a/cmd/argocd/commands/admin/app.go b/cmd/argocd/commands/admin/app.go
index 99a798976fc02..0fa8d3631fee8 100644
--- a/cmd/argocd/commands/admin/app.go
+++ b/cmd/argocd/commands/admin/app.go
@@ -371,7 +371,7 @@ func reconcileApplications(
)
appStateManager := controller.NewAppStateManager(
- argoDB, appClientset, repoServerClient, namespace, kubeutil.NewKubectl(), settingsMgr, stateCache, projInformer, server, cache, time.Second, argo.NewResourceTracking())
+ argoDB, appClientset, repoServerClient, namespace, kubeutil.NewKubectl(), settingsMgr, stateCache, projInformer, server, cache, time.Second, argo.NewResourceTracking(), false)
appsList, err := appClientset.ArgoprojV1alpha1().Applications(namespace).List(ctx, v1.ListOptions{LabelSelector: selector})
if err != nil {
diff --git a/controller/appcontroller.go b/controller/appcontroller.go
index eb3c3d166b1b4..8319cdd4311cd 100644
--- a/controller/appcontroller.go
+++ b/controller/appcontroller.go
@@ -132,6 +132,7 @@ func NewApplicationController(
metricsCacheExpiration time.Duration,
metricsApplicationLabels []string,
kubectlParallelismLimit int64,
+ persistResourceHealth bool,
clusterFilter func(cluster *appv1.Cluster) bool,
applicationNamespaces []string,
) (*ApplicationController, error) {
@@ -209,7 +210,7 @@ func NewApplicationController(
}
}
stateCache := statecache.NewLiveStateCache(db, appInformer, ctrl.settingsMgr, kubectl, ctrl.metricsServer, ctrl.handleObjectUpdated, clusterFilter, argo.NewResourceTracking())
- appStateManager := NewAppStateManager(db, applicationClientset, repoClientset, namespace, kubectl, ctrl.settingsMgr, stateCache, projInformer, ctrl.metricsServer, argoCache, ctrl.statusRefreshTimeout, argo.NewResourceTracking())
+ appStateManager := NewAppStateManager(db, applicationClientset, repoClientset, namespace, kubectl, ctrl.settingsMgr, stateCache, projInformer, ctrl.metricsServer, argoCache, ctrl.statusRefreshTimeout, argo.NewResourceTracking(), persistResourceHealth)
ctrl.appInformer = appInformer
ctrl.appLister = appLister
ctrl.projInformer = projInformer
diff --git a/controller/appcontroller_test.go b/controller/appcontroller_test.go
index 282cb9a3e3eef..df88357502838 100644
--- a/controller/appcontroller_test.go
+++ b/controller/appcontroller_test.go
@@ -109,6 +109,7 @@ func newFakeController(data *fakeData) *ApplicationController {
data.metricsCacheExpiration,
[]string{},
0,
+ true,
nil,
[]string{},
)
diff --git a/controller/health.go b/controller/health.go
index a5e242ca30596..ddd57e6fbb9f7 100644
--- a/controller/health.go
+++ b/controller/health.go
@@ -13,7 +13,7 @@ import (
)
// setApplicationHealth updates the health statuses of all resources performed in the comparison
-func setApplicationHealth(resources []managedResource, statuses []appv1.ResourceStatus, resourceOverrides map[string]appv1.ResourceOverride, app *appv1.Application) (*appv1.HealthStatus, error) {
+func setApplicationHealth(resources []managedResource, statuses []appv1.ResourceStatus, resourceOverrides map[string]appv1.ResourceOverride, app *appv1.Application, persistResourceHealth bool) (*appv1.HealthStatus, error) {
var savedErr error
appHealth := appv1.HealthStatus{Status: health.HealthStatusHealthy}
for i, res := range resources {
@@ -42,8 +42,12 @@ func setApplicationHealth(resources []managedResource, statuses []appv1.Resource
}
}
if healthStatus != nil {
- resHealth := appv1.HealthStatus{Status: healthStatus.Status, Message: healthStatus.Message}
- statuses[i].Health = &resHealth
+ if persistResourceHealth {
+ resHealth := appv1.HealthStatus{Status: healthStatus.Status, Message: healthStatus.Message}
+ statuses[i].Health = &resHealth
+ } else {
+ statuses[i].Health = nil
+ }
// Is health status is missing but resource has not built-in/custom health check then it should not affect parent app health
if _, hasOverride := healthOverrides[lua.GetConfigMapKey(gvk)]; healthStatus.Status == health.HealthStatusMissing && !hasOverride && health.GetHealthCheckFunc(gvk) == nil {
@@ -60,5 +64,10 @@ func setApplicationHealth(resources []managedResource, statuses []appv1.Resource
}
}
}
+ if persistResourceHealth {
+ app.Status.ResourceHealthSource = appv1.ResourceHealthLocationInline
+ } else {
+ app.Status.ResourceHealthSource = appv1.ResourceHealthLocationAppTree
+ }
return &appHealth, savedErr
}
diff --git a/controller/health_test.go b/controller/health_test.go
index 0547dadc95990..ed5cfad25b02e 100644
--- a/controller/health_test.go
+++ b/controller/health_test.go
@@ -51,17 +51,35 @@ func TestSetApplicationHealth(t *testing.T) {
}}
resourceStatuses := initStatuses(resources)
- healthStatus, err := setApplicationHealth(resources, resourceStatuses, lua.ResourceHealthOverrides{}, app)
+ healthStatus, err := setApplicationHealth(resources, resourceStatuses, lua.ResourceHealthOverrides{}, app, true)
assert.NoError(t, err)
assert.Equal(t, health.HealthStatusDegraded, healthStatus.Status)
+ assert.Equal(t, resourceStatuses[0].Health.Status, health.HealthStatusHealthy)
+ assert.Equal(t, resourceStatuses[1].Health.Status, health.HealthStatusDegraded)
+
// now mark the job as a hook and retry. it should ignore the hook and consider the app healthy
failedJob.SetAnnotations(map[string]string{synccommon.AnnotationKeyHook: "PreSync"})
- healthStatus, err = setApplicationHealth(resources, resourceStatuses, nil, app)
+ healthStatus, err = setApplicationHealth(resources, resourceStatuses, nil, app, true)
assert.NoError(t, err)
assert.Equal(t, health.HealthStatusHealthy, healthStatus.Status)
}
+func TestSetApplicationHealth_ResourceHealthNotPersisted(t *testing.T) {
+ failedJob := resourceFromFile("./testdata/job-failed.yaml")
+
+ resources := []managedResource{{
+ Group: "batch", Version: "v1", Kind: "Job", Live: &failedJob,
+ }}
+ resourceStatuses := initStatuses(resources)
+
+ healthStatus, err := setApplicationHealth(resources, resourceStatuses, lua.ResourceHealthOverrides{}, app, false)
+ assert.NoError(t, err)
+ assert.Equal(t, health.HealthStatusDegraded, healthStatus.Status)
+
+ assert.Nil(t, resourceStatuses[0].Health)
+}
+
func TestSetApplicationHealth_MissingResource(t *testing.T) {
pod := resourceFromFile("./testdata/pod-running-restart-always.yaml")
@@ -69,7 +87,7 @@ func TestSetApplicationHealth_MissingResource(t *testing.T) {
Group: "", Version: "v1", Kind: "Pod", Target: &pod}, {}}
resourceStatuses := initStatuses(resources)
- healthStatus, err := setApplicationHealth(resources, resourceStatuses, lua.ResourceHealthOverrides{}, app)
+ healthStatus, err := setApplicationHealth(resources, resourceStatuses, lua.ResourceHealthOverrides{}, app, true)
assert.NoError(t, err)
assert.Equal(t, health.HealthStatusMissing, healthStatus.Status)
}
@@ -82,7 +100,7 @@ func TestSetApplicationHealth_MissingResourceNoBuiltHealthCheck(t *testing.T) {
resourceStatuses := initStatuses(resources)
t.Run("NoOverride", func(t *testing.T) {
- healthStatus, err := setApplicationHealth(resources, resourceStatuses, lua.ResourceHealthOverrides{}, app)
+ healthStatus, err := setApplicationHealth(resources, resourceStatuses, lua.ResourceHealthOverrides{}, app, true)
assert.NoError(t, err)
assert.Equal(t, health.HealthStatusHealthy, healthStatus.Status)
assert.Equal(t, resourceStatuses[0].Health.Status, health.HealthStatusMissing)
@@ -93,7 +111,7 @@ func TestSetApplicationHealth_MissingResourceNoBuiltHealthCheck(t *testing.T) {
lua.GetConfigMapKey(schema.GroupVersionKind{Version: "v1", Kind: "ConfigMap"}): appv1.ResourceOverride{
HealthLua: "some health check",
},
- }, app)
+ }, app, true)
assert.NoError(t, err)
assert.Equal(t, health.HealthStatusMissing, healthStatus.Status)
})
@@ -143,7 +161,7 @@ return hs`,
Group: application.Group, Version: "v1alpha1", Kind: application.ApplicationKind, Live: degradedApp}, {}}
resourceStatuses := initStatuses(resources)
- healthStatus, err := setApplicationHealth(resources, resourceStatuses, overrides, app)
+ healthStatus, err := setApplicationHealth(resources, resourceStatuses, overrides, app, true)
assert.NoError(t, err)
assert.Equal(t, health.HealthStatusDegraded, healthStatus.Status)
})
@@ -154,7 +172,7 @@ return hs`,
Group: application.Group, Version: "v1alpha1", Kind: application.ApplicationKind, Live: degradedApp}, {}}
resourceStatuses := initStatuses(resources)
- healthStatus, err := setApplicationHealth(resources, resourceStatuses, overrides, app)
+ healthStatus, err := setApplicationHealth(resources, resourceStatuses, overrides, app, true)
assert.NoError(t, err)
assert.Equal(t, health.HealthStatusHealthy, healthStatus.Status)
})
diff --git a/controller/state.go b/controller/state.go
index 7a2c606ede0da..decd7218017dd 100644
--- a/controller/state.go
+++ b/controller/state.go
@@ -89,18 +89,19 @@ func (res *comparisonResult) GetHealthStatus() *v1alpha1.HealthStatus {
// appStateManager allows to compare applications to git
type appStateManager struct {
- metricsServer *metrics.MetricsServer
- db db.ArgoDB
- settingsMgr *settings.SettingsManager
- appclientset appclientset.Interface
- projInformer cache.SharedIndexInformer
- kubectl kubeutil.Kubectl
- repoClientset apiclient.Clientset
- liveStateCache statecache.LiveStateCache
- cache *appstatecache.Cache
- namespace string
- statusRefreshTimeout time.Duration
- resourceTracking argo.ResourceTracking
+ metricsServer *metrics.MetricsServer
+ db db.ArgoDB
+ settingsMgr *settings.SettingsManager
+ appclientset appclientset.Interface
+ projInformer cache.SharedIndexInformer
+ kubectl kubeutil.Kubectl
+ repoClientset apiclient.Clientset
+ liveStateCache statecache.LiveStateCache
+ cache *appstatecache.Cache
+ namespace string
+ statusRefreshTimeout time.Duration
+ resourceTracking argo.ResourceTracking
+ persistResourceHealth bool
}
func (m *appStateManager) getRepoObjs(app *v1alpha1.Application, source v1alpha1.ApplicationSource, appLabelKey, revision string, noCache, noRevisionCache, verifySignature bool, proj *v1alpha1.AppProject) ([]*unstructured.Unstructured, *apiclient.ManifestResponse, error) {
@@ -588,7 +589,7 @@ func (m *appStateManager) CompareAppState(app *v1alpha1.Application, project *ap
}
ts.AddCheckpoint("sync_ms")
- healthStatus, err := setApplicationHealth(managedResources, resourceSummaries, resourceOverrides, app)
+ healthStatus, err := setApplicationHealth(managedResources, resourceSummaries, resourceOverrides, app, m.persistResourceHealth)
if err != nil {
conditions = append(conditions, appv1.ApplicationCondition{Type: v1alpha1.ApplicationConditionComparisonError, Message: err.Error(), LastTransitionTime: &now})
}
@@ -664,20 +665,22 @@ func NewAppStateManager(
cache *appstatecache.Cache,
statusRefreshTimeout time.Duration,
resourceTracking argo.ResourceTracking,
+ persistResourceHealth bool,
) AppStateManager {
return &appStateManager{
- liveStateCache: liveStateCache,
- cache: cache,
- db: db,
- appclientset: appclientset,
- kubectl: kubectl,
- repoClientset: repoClientset,
- namespace: namespace,
- settingsMgr: settingsMgr,
- projInformer: projInformer,
- metricsServer: metricsServer,
- statusRefreshTimeout: statusRefreshTimeout,
- resourceTracking: resourceTracking,
+ liveStateCache: liveStateCache,
+ cache: cache,
+ db: db,
+ appclientset: appclientset,
+ kubectl: kubectl,
+ repoClientset: repoClientset,
+ namespace: namespace,
+ settingsMgr: settingsMgr,
+ projInformer: projInformer,
+ metricsServer: metricsServer,
+ statusRefreshTimeout: statusRefreshTimeout,
+ resourceTracking: resourceTracking,
+ persistResourceHealth: persistResourceHealth,
}
}
diff --git a/docs/operator-manual/argocd-cmd-params-cm.yaml b/docs/operator-manual/argocd-cmd-params-cm.yaml
index 704ade13e1bd3..32388ee65d0be 100644
--- a/docs/operator-manual/argocd-cmd-params-cm.yaml
+++ b/docs/operator-manual/argocd-cmd-params-cm.yaml
@@ -50,6 +50,11 @@ data:
controller.self.heal.timeout.seconds: "5"
# Cache expiration for app state (default 1h0m0s)
controller.app.state.cache.expiration: "1h0m0s"
+ # Specifies if resource health should be persisted in app CRD (default true)
+ # Changing this to `false` significantly reduce number of Application CRD updates and improves controller performance.
+ # However, disabling resource health by default might affect applications that communicate with Applications CRD directly
+ # so we have to defer switching this to `false` by default till v3.0 release.
+ controller.resource.health.persist: "true"
# Cache expiration default (default 24h0m0s)
controller.default.cache.expiration: "24h0m0s"
diff --git a/docs/operator-manual/server-commands/argocd-application-controller.md b/docs/operator-manual/server-commands/argocd-application-controller.md
index baaff476fee10..85145b5540ef2 100644
--- a/docs/operator-manual/server-commands/argocd-application-controller.md
+++ b/docs/operator-manual/server-commands/argocd-application-controller.md
@@ -40,6 +40,7 @@ argocd-application-controller [flags]
--operation-processors int Number of application operation processors (default 10)
--otlp-address string OpenTelemetry collector address to send traces to
--password string Password for basic authentication to the API server
+ --persist-resource-health Enables storing the managed resources health in the Application CRD (default true)
--proxy-url string If provided, this URL will be used to connect via proxy
--redis string Redis server hostname and port (e.g. argocd-redis:6379).
--redis-ca-certificate string Path to Redis server CA certificate (e.g. /etc/certs/redis/ca.crt). If not specified, system trusted CAs will be used for server certificate validation.
diff --git a/manifests/base/application-controller/argocd-application-controller-statefulset.yaml b/manifests/base/application-controller/argocd-application-controller-statefulset.yaml
index f8ebbdd0a8a06..d0c9ed68d7f1a 100644
--- a/manifests/base/application-controller/argocd-application-controller-statefulset.yaml
+++ b/manifests/base/application-controller/argocd-application-controller-statefulset.yaml
@@ -95,6 +95,12 @@ spec:
name: argocd-cmd-params-cm
key: controller.repo.server.strict.tls
optional: true
+ - name: ARGOCD_APPLICATION_CONTROLLER_PERSIST_RESOURCE_HEALTH
+ valueFrom:
+ configMapKeyRef:
+ name: argocd-cmd-params-cm
+ key: controller.resource.health.persist
+ optional: true
- name: ARGOCD_APP_STATE_CACHE_EXPIRATION
valueFrom:
configMapKeyRef:
diff --git a/manifests/core-install.yaml b/manifests/core-install.yaml
index 275538f77008c..5543bc9d10705 100644
--- a/manifests/core-install.yaml
+++ b/manifests/core-install.yaml
@@ -1806,6 +1806,10 @@ spec:
reconciled using the latest git version
format: date-time
type: string
+ resourceHealthSource:
+ description: 'ResourceHealthSource indicates where the resource health
+ status is stored: inline if not set or appTree'
+ type: string
resources:
description: Resources is a list of Kubernetes resources managed by
this application
@@ -10080,6 +10084,12 @@ spec:
key: controller.repo.server.strict.tls
name: argocd-cmd-params-cm
optional: true
+ - name: ARGOCD_APPLICATION_CONTROLLER_PERSIST_RESOURCE_HEALTH
+ valueFrom:
+ configMapKeyRef:
+ key: controller.resource.health.persist
+ name: argocd-cmd-params-cm
+ optional: true
- name: ARGOCD_APP_STATE_CACHE_EXPIRATION
valueFrom:
configMapKeyRef:
diff --git a/manifests/crds/application-crd.yaml b/manifests/crds/application-crd.yaml
index f71b1366966ac..522aabc0d3345 100644
--- a/manifests/crds/application-crd.yaml
+++ b/manifests/crds/application-crd.yaml
@@ -1805,6 +1805,10 @@ spec:
reconciled using the latest git version
format: date-time
type: string
+ resourceHealthSource:
+ description: 'ResourceHealthSource indicates where the resource health
+ status is stored: inline if not set or appTree'
+ type: string
resources:
description: Resources is a list of Kubernetes resources managed by
this application
diff --git a/manifests/ha/install.yaml b/manifests/ha/install.yaml
index f6584b21ed466..84392fe8a6437 100644
--- a/manifests/ha/install.yaml
+++ b/manifests/ha/install.yaml
@@ -1806,6 +1806,10 @@ spec:
reconciled using the latest git version
format: date-time
type: string
+ resourceHealthSource:
+ description: 'ResourceHealthSource indicates where the resource health
+ status is stored: inline if not set or appTree'
+ type: string
resources:
description: Resources is a list of Kubernetes resources managed by
this application
@@ -11835,6 +11839,12 @@ spec:
key: controller.repo.server.strict.tls
name: argocd-cmd-params-cm
optional: true
+ - name: ARGOCD_APPLICATION_CONTROLLER_PERSIST_RESOURCE_HEALTH
+ valueFrom:
+ configMapKeyRef:
+ key: controller.resource.health.persist
+ name: argocd-cmd-params-cm
+ optional: true
- name: ARGOCD_APP_STATE_CACHE_EXPIRATION
valueFrom:
configMapKeyRef:
diff --git a/manifests/ha/namespace-install.yaml b/manifests/ha/namespace-install.yaml
index 398c6e5417478..93c3f88461733 100644
--- a/manifests/ha/namespace-install.yaml
+++ b/manifests/ha/namespace-install.yaml
@@ -2524,6 +2524,12 @@ spec:
key: controller.repo.server.strict.tls
name: argocd-cmd-params-cm
optional: true
+ - name: ARGOCD_APPLICATION_CONTROLLER_PERSIST_RESOURCE_HEALTH
+ valueFrom:
+ configMapKeyRef:
+ key: controller.resource.health.persist
+ name: argocd-cmd-params-cm
+ optional: true
- name: ARGOCD_APP_STATE_CACHE_EXPIRATION
valueFrom:
configMapKeyRef:
diff --git a/manifests/install.yaml b/manifests/install.yaml
index d726e78d7aa59..2ed7eee23e824 100644
--- a/manifests/install.yaml
+++ b/manifests/install.yaml
@@ -1806,6 +1806,10 @@ spec:
reconciled using the latest git version
format: date-time
type: string
+ resourceHealthSource:
+ description: 'ResourceHealthSource indicates where the resource health
+ status is stored: inline if not set or appTree'
+ type: string
resources:
description: Resources is a list of Kubernetes resources managed by
this application
@@ -10852,6 +10856,12 @@ spec:
key: controller.repo.server.strict.tls
name: argocd-cmd-params-cm
optional: true
+ - name: ARGOCD_APPLICATION_CONTROLLER_PERSIST_RESOURCE_HEALTH
+ valueFrom:
+ configMapKeyRef:
+ key: controller.resource.health.persist
+ name: argocd-cmd-params-cm
+ optional: true
- name: ARGOCD_APP_STATE_CACHE_EXPIRATION
valueFrom:
configMapKeyRef:
diff --git a/manifests/namespace-install.yaml b/manifests/namespace-install.yaml
index 070894c4a23e1..13e0b10772ed7 100644
--- a/manifests/namespace-install.yaml
+++ b/manifests/namespace-install.yaml
@@ -1541,6 +1541,12 @@ spec:
key: controller.repo.server.strict.tls
name: argocd-cmd-params-cm
optional: true
+ - name: ARGOCD_APPLICATION_CONTROLLER_PERSIST_RESOURCE_HEALTH
+ valueFrom:
+ configMapKeyRef:
+ key: controller.resource.health.persist
+ name: argocd-cmd-params-cm
+ optional: true
- name: ARGOCD_APP_STATE_CACHE_EXPIRATION
valueFrom:
configMapKeyRef:
diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go
index 79b6a6cb4ffe6..f9dd67a2a542f 100644
--- a/pkg/apis/application/v1alpha1/generated.pb.go
+++ b/pkg/apis/application/v1alpha1/generated.pb.go
@@ -2604,434 +2604,437 @@ func init() {
}
var fileDescriptor_030104ce3b95bcac = []byte{
- // 6831 bytes of a gzipped FileDescriptorProto
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x59, 0x6c, 0x24, 0xc9,
- 0x71, 0xe8, 0x56, 0x37, 0x8f, 0xee, 0xe0, 0x31, 0x64, 0xce, 0xb1, 0x14, 0xdf, 0x6a, 0x38, 0xa8,
- 0x85, 0xa4, 0x7d, 0x4f, 0x12, 0xf9, 0x76, 0xde, 0x4a, 0x6f, 0xad, 0x95, 0x57, 0x62, 0x93, 0x73,
- 0x70, 0x86, 0x1c, 0x72, 0x82, 0x9c, 0x19, 0x6b, 0x25, 0xcb, 0x5b, 0xac, 0xce, 0xee, 0xae, 0x61,
- 0x77, 0x55, 0x6f, 0x55, 0x35, 0x87, 0x2d, 0x59, 0x17, 0x20, 0x5b, 0x0b, 0xe8, 0x84, 0xe4, 0x0f,
- 0x09, 0x30, 0x6c, 0xf9, 0x80, 0x01, 0x7f, 0x08, 0xb6, 0x7f, 0x7c, 0xc0, 0xf0, 0x87, 0xe5, 0x1f,
- 0x19, 0xfe, 0xb0, 0x00, 0x1b, 0x96, 0x6c, 0xc1, 0xb4, 0x34, 0xb6, 0x21, 0xdb, 0x80, 0x6d, 0xf8,
- 0xf8, 0xf1, 0xc0, 0x1f, 0x46, 0x1e, 0x95, 0x99, 0x55, 0xdd, 0x3d, 0x24, 0xa7, 0x6b, 0xc6, 0x82,
- 0xe0, 0x3f, 0x76, 0x44, 0x64, 0x44, 0x64, 0x56, 0x66, 0x64, 0x44, 0x64, 0x64, 0x12, 0xd6, 0xeb,
- 0x5e, 0xdc, 0xe8, 0xec, 0x2e, 0xba, 0x41, 0x6b, 0xc9, 0x09, 0xeb, 0x41, 0x3b, 0x0c, 0xee, 0xf2,
- 0x3f, 0xde, 0xee, 0x56, 0x97, 0xf6, 0x2f, 0x2e, 0xb5, 0xf7, 0xea, 0x4b, 0x4e, 0xdb, 0x8b, 0x96,
- 0x9c, 0x76, 0xbb, 0xe9, 0xb9, 0x4e, 0xec, 0x05, 0xfe, 0xd2, 0xfe, 0xf3, 0x4e, 0xb3, 0xdd, 0x70,
- 0x9e, 0x5f, 0xaa, 0x53, 0x9f, 0x86, 0x4e, 0x4c, 0xab, 0x8b, 0xed, 0x30, 0x88, 0x03, 0xf2, 0x6e,
- 0xcd, 0x6d, 0x31, 0xe1, 0xc6, 0xff, 0xf8, 0x09, 0xb7, 0xba, 0xb8, 0x7f, 0x71, 0xb1, 0xbd, 0x57,
- 0x5f, 0x64, 0xdc, 0x16, 0x0d, 0x6e, 0x8b, 0x09, 0xb7, 0xf9, 0xb7, 0x1b, 0xba, 0xd4, 0x83, 0x7a,
- 0xb0, 0xc4, 0x99, 0xee, 0x76, 0x6a, 0xfc, 0x17, 0xff, 0xc1, 0xff, 0x12, 0xc2, 0xe6, 0xed, 0xbd,
- 0x17, 0xa3, 0x45, 0x2f, 0x60, 0xea, 0x2d, 0xb9, 0x41, 0x48, 0x97, 0xf6, 0x7b, 0x14, 0x9a, 0x7f,
- 0x41, 0xd3, 0xb4, 0x1c, 0xb7, 0xe1, 0xf9, 0x34, 0xec, 0xea, 0x3e, 0xb5, 0x68, 0xec, 0xf4, 0x6b,
- 0xb5, 0x34, 0xa8, 0x55, 0xd8, 0xf1, 0x63, 0xaf, 0x45, 0x7b, 0x1a, 0xbc, 0xf3, 0xa8, 0x06, 0x91,
- 0xdb, 0xa0, 0x2d, 0x27, 0xdb, 0xce, 0x7e, 0x0d, 0xa6, 0x96, 0xef, 0x6c, 0x2f, 0x77, 0xe2, 0xc6,
- 0x4a, 0xe0, 0xd7, 0xbc, 0x3a, 0x79, 0x07, 0x4c, 0xb8, 0xcd, 0x4e, 0x14, 0xd3, 0xf0, 0x86, 0xd3,
- 0xa2, 0x73, 0xd6, 0x05, 0xeb, 0xb9, 0x72, 0xe5, 0xf4, 0x37, 0x0e, 0x17, 0x9e, 0xba, 0x7f, 0xb8,
- 0x30, 0xb1, 0xa2, 0x51, 0x68, 0xd2, 0x91, 0xff, 0x0d, 0xe3, 0x61, 0xd0, 0xa4, 0xcb, 0x78, 0x63,
- 0xae, 0xc0, 0x9b, 0x9c, 0x92, 0x4d, 0xc6, 0x51, 0x80, 0x31, 0xc1, 0xdb, 0x7f, 0x56, 0x00, 0x58,
- 0x6e, 0xb7, 0xb7, 0xc2, 0xe0, 0x2e, 0x75, 0x63, 0xf2, 0x2a, 0x94, 0xd8, 0x28, 0x54, 0x9d, 0xd8,
- 0xe1, 0xd2, 0x26, 0x2e, 0xfe, 0xdf, 0x45, 0xd1, 0x99, 0x45, 0xb3, 0x33, 0xfa, 0xcb, 0x31, 0xea,
- 0xc5, 0xfd, 0xe7, 0x17, 0x37, 0x77, 0x59, 0xfb, 0x0d, 0x1a, 0x3b, 0x15, 0x22, 0x85, 0x81, 0x86,
- 0xa1, 0xe2, 0x4a, 0x7c, 0x18, 0x89, 0xda, 0xd4, 0xe5, 0x8a, 0x4d, 0x5c, 0x5c, 0x5f, 0x1c, 0x66,
- 0x8a, 0x2c, 0x6a, 0xcd, 0xb7, 0xdb, 0xd4, 0xad, 0x4c, 0x4a, 0xc9, 0x23, 0xec, 0x17, 0x72, 0x39,
- 0x64, 0x1f, 0xc6, 0xa2, 0xd8, 0x89, 0x3b, 0xd1, 0x5c, 0x91, 0x4b, 0xbc, 0x91, 0x9b, 0x44, 0xce,
- 0xb5, 0x32, 0x2d, 0x65, 0x8e, 0x89, 0xdf, 0x28, 0xa5, 0xd9, 0x7f, 0x69, 0xc1, 0xb4, 0x26, 0x5e,
- 0xf7, 0xa2, 0x98, 0x7c, 0xa0, 0x67, 0x70, 0x17, 0x8f, 0x37, 0xb8, 0xac, 0x35, 0x1f, 0xda, 0x19,
- 0x29, 0xac, 0x94, 0x40, 0x8c, 0x81, 0x6d, 0xc1, 0xa8, 0x17, 0xd3, 0x56, 0x34, 0x57, 0xb8, 0x50,
- 0x7c, 0x6e, 0xe2, 0xe2, 0xd5, 0xbc, 0xfa, 0x59, 0x99, 0x92, 0x42, 0x47, 0xd7, 0x18, 0x7b, 0x14,
- 0x52, 0xec, 0xdf, 0x9c, 0x30, 0xfb, 0xc7, 0x06, 0x9c, 0x3c, 0x0f, 0x13, 0x51, 0xd0, 0x09, 0x5d,
- 0x8a, 0xb4, 0x1d, 0x44, 0x73, 0xd6, 0x85, 0x22, 0x9b, 0x7a, 0x6c, 0xa6, 0x6e, 0x6b, 0x30, 0x9a,
- 0x34, 0xe4, 0x73, 0x16, 0x4c, 0x56, 0x69, 0x14, 0x7b, 0x3e, 0x97, 0x9f, 0x28, 0xbf, 0x33, 0xb4,
- 0xf2, 0x09, 0x70, 0x55, 0x33, 0xaf, 0x9c, 0x91, 0x1d, 0x99, 0x34, 0x80, 0x11, 0xa6, 0xe4, 0xb3,
- 0x15, 0x57, 0xa5, 0x91, 0x1b, 0x7a, 0x6d, 0xf6, 0x9b, 0xcf, 0x19, 0x63, 0xc5, 0xad, 0x6a, 0x14,
- 0x9a, 0x74, 0xc4, 0x87, 0x51, 0xb6, 0xa2, 0xa2, 0xb9, 0x11, 0xae, 0xff, 0xda, 0x70, 0xfa, 0xcb,
- 0x41, 0x65, 0x8b, 0x55, 0x8f, 0x3e, 0xfb, 0x15, 0xa1, 0x10, 0x43, 0x3e, 0x6b, 0xc1, 0x9c, 0x5c,
- 0xf1, 0x48, 0xc5, 0x80, 0xde, 0x69, 0x78, 0x31, 0x6d, 0x7a, 0x51, 0x3c, 0x37, 0xca, 0x75, 0x58,
- 0x3a, 0xde, 0xdc, 0xba, 0x12, 0x06, 0x9d, 0xf6, 0x75, 0xcf, 0xaf, 0x56, 0x2e, 0x48, 0x49, 0x73,
- 0x2b, 0x03, 0x18, 0xe3, 0x40, 0x91, 0xe4, 0x4b, 0x16, 0xcc, 0xfb, 0x4e, 0x8b, 0x46, 0x6d, 0x87,
- 0x7d, 0x5a, 0x81, 0xae, 0x34, 0x1d, 0x77, 0x8f, 0x6b, 0x34, 0xf6, 0x68, 0x1a, 0xd9, 0x52, 0xa3,
- 0xf9, 0x1b, 0x03, 0x59, 0xe3, 0x43, 0xc4, 0x92, 0x5f, 0xb2, 0x60, 0x36, 0x08, 0xdb, 0x0d, 0xc7,
- 0xa7, 0xd5, 0x04, 0x1b, 0xcd, 0x8d, 0xf3, 0xa5, 0xf7, 0xc1, 0xe1, 0x3e, 0xd1, 0x66, 0x96, 0xed,
- 0x46, 0xe0, 0x7b, 0x71, 0x10, 0x6e, 0xd3, 0x38, 0xf6, 0xfc, 0x7a, 0x54, 0x39, 0x7b, 0xff, 0x70,
- 0x61, 0xb6, 0x87, 0x0a, 0x7b, 0xf5, 0x21, 0x1f, 0x86, 0x89, 0xa8, 0xeb, 0xbb, 0x77, 0x3c, 0xbf,
- 0x1a, 0xdc, 0x8b, 0xe6, 0x4a, 0x79, 0x2c, 0xdf, 0x6d, 0xc5, 0x50, 0x2e, 0x40, 0x2d, 0x00, 0x4d,
- 0x69, 0xfd, 0x3f, 0x9c, 0x9e, 0x4a, 0xe5, 0xbc, 0x3f, 0x9c, 0x9e, 0x4c, 0x0f, 0x11, 0x4b, 0x3e,
- 0x65, 0xc1, 0x54, 0xe4, 0xd5, 0x7d, 0x27, 0xee, 0x84, 0xf4, 0x3a, 0xed, 0x46, 0x73, 0xc0, 0x15,
- 0xb9, 0x36, 0xe4, 0xa8, 0x18, 0x2c, 0x2b, 0x67, 0xa5, 0x8e, 0x53, 0x26, 0x34, 0xc2, 0xb4, 0xdc,
- 0x7e, 0x0b, 0x4d, 0x4f, 0xeb, 0x89, 0x7c, 0x17, 0x9a, 0x9e, 0xd4, 0x03, 0x45, 0x92, 0xf7, 0xc2,
- 0x8c, 0x00, 0xa9, 0x91, 0x8d, 0xe6, 0x26, 0xb9, 0xa1, 0x3d, 0x73, 0xff, 0x70, 0x61, 0x66, 0x3b,
- 0x83, 0xc3, 0x1e, 0x6a, 0xfb, 0x0f, 0x0b, 0x30, 0x93, 0xdd, 0xc5, 0xc8, 0xaf, 0x58, 0x70, 0xea,
- 0xee, 0xbd, 0x78, 0x27, 0xd8, 0xa3, 0x7e, 0x54, 0xe9, 0x32, 0x5b, 0xc3, 0xed, 0xf7, 0xc4, 0x45,
- 0x37, 0xdf, 0xfd, 0x72, 0xf1, 0x5a, 0x5a, 0xca, 0x25, 0x3f, 0x0e, 0xbb, 0x95, 0xa7, 0xe5, 0x88,
- 0x9c, 0xba, 0x76, 0x67, 0xc7, 0xc4, 0x62, 0x56, 0xa9, 0xf9, 0x4f, 0x5b, 0x70, 0xa6, 0x1f, 0x0b,
- 0x32, 0x03, 0xc5, 0x3d, 0xda, 0x15, 0x2e, 0x12, 0xb2, 0x3f, 0xc9, 0x8f, 0xc3, 0xe8, 0xbe, 0xd3,
- 0xec, 0x50, 0xe9, 0x6a, 0x5c, 0x19, 0xae, 0x23, 0x4a, 0x33, 0x14, 0x5c, 0xdf, 0x55, 0x78, 0xd1,
- 0xb2, 0xff, 0xb8, 0x08, 0x13, 0xc6, 0x66, 0xf3, 0x04, 0xdc, 0xa7, 0x20, 0xe5, 0x3e, 0x6d, 0xe4,
- 0xb6, 0x4f, 0x0e, 0xf4, 0x9f, 0xee, 0x65, 0xfc, 0xa7, 0xcd, 0xfc, 0x44, 0x3e, 0xd4, 0x81, 0x22,
- 0x31, 0x94, 0x83, 0x36, 0x73, 0x8f, 0xd9, 0x3e, 0x3c, 0x92, 0xc7, 0x27, 0xdc, 0x4c, 0xd8, 0x55,
- 0xa6, 0xee, 0x1f, 0x2e, 0x94, 0xd5, 0x4f, 0xd4, 0x82, 0xec, 0x6f, 0x59, 0x70, 0xc6, 0xd0, 0x71,
- 0x25, 0xf0, 0xab, 0x1e, 0xff, 0xb4, 0x17, 0x60, 0x24, 0xee, 0xb6, 0x13, 0x1f, 0x5c, 0x8d, 0xd4,
- 0x4e, 0xb7, 0x4d, 0x91, 0x63, 0x98, 0xd7, 0xdd, 0xa2, 0x51, 0xe4, 0xd4, 0x69, 0xd6, 0xeb, 0xde,
- 0x10, 0x60, 0x4c, 0xf0, 0x24, 0x04, 0xd2, 0x74, 0xa2, 0x78, 0x27, 0x74, 0xfc, 0x88, 0xb3, 0xdf,
- 0xf1, 0x5a, 0x54, 0x0e, 0xf0, 0xff, 0x39, 0xde, 0x8c, 0x61, 0x2d, 0x2a, 0xe7, 0xee, 0x1f, 0x2e,
- 0x90, 0xf5, 0x1e, 0x4e, 0xd8, 0x87, 0xbb, 0xfd, 0x25, 0x0b, 0xce, 0xf5, 0x77, 0x8c, 0xc8, 0x9b,
- 0x61, 0x2c, 0xa2, 0xe1, 0x3e, 0x0d, 0x65, 0xef, 0xf4, 0x27, 0xe1, 0x50, 0x94, 0x58, 0xb2, 0x04,
- 0x65, 0x65, 0xb4, 0x65, 0x1f, 0x67, 0x25, 0x69, 0x59, 0x5b, 0x7a, 0x4d, 0xc3, 0x06, 0x8d, 0xfd,
- 0x90, 0x6e, 0x94, 0x1a, 0x34, 0x1e, 0xb1, 0x70, 0x8c, 0xfd, 0x57, 0x16, 0x9c, 0x32, 0xb4, 0x7a,
- 0x02, 0x7e, 0xb2, 0x9f, 0xf6, 0x93, 0xd7, 0x72, 0x9b, 0xcf, 0x03, 0x1c, 0xe5, 0x3f, 0x18, 0x85,
- 0x59, 0x73, 0xd6, 0x73, 0x7b, 0xcc, 0x43, 0x34, 0xda, 0x0e, 0x6e, 0xe1, 0xba, 0x1c, 0x73, 0x1d,
- 0xa2, 0x09, 0x30, 0x26, 0x78, 0x36, 0x88, 0x6d, 0x27, 0x6e, 0xc8, 0x01, 0x57, 0x83, 0xb8, 0xe5,
- 0xc4, 0x0d, 0xe4, 0x18, 0xf2, 0x32, 0x4c, 0xc7, 0x4e, 0x58, 0xa7, 0x31, 0xd2, 0x7d, 0x2f, 0x4a,
- 0xd6, 0x4b, 0xb9, 0x72, 0x4e, 0xd2, 0x4e, 0xef, 0xa4, 0xb0, 0x98, 0xa1, 0x26, 0xaf, 0xc1, 0x48,
- 0x83, 0x36, 0x5b, 0xd2, 0x33, 0xda, 0xce, 0x6f, 0x85, 0xf3, 0xbe, 0x5e, 0xa5, 0xcd, 0x56, 0xa5,
- 0xc4, 0x54, 0x66, 0x7f, 0x21, 0x17, 0x45, 0x7e, 0xca, 0x82, 0xf2, 0x5e, 0x27, 0x8a, 0x83, 0x96,
- 0xf7, 0x21, 0x3a, 0x57, 0xe2, 0x82, 0x7f, 0x2c, 0x67, 0xc1, 0xd7, 0x13, 0xfe, 0x62, 0xbd, 0xab,
- 0x9f, 0xa8, 0x25, 0x73, 0x3d, 0xaa, 0x5e, 0x48, 0xdd, 0x38, 0x08, 0xbb, 0x73, 0xf0, 0x58, 0xf4,
- 0x58, 0x4d, 0xf8, 0x0b, 0x3d, 0xd4, 0x4f, 0xd4, 0x92, 0x49, 0x17, 0xc6, 0xda, 0xcd, 0x4e, 0xdd,
- 0xf3, 0xe7, 0x26, 0xb8, 0x0e, 0xb7, 0x72, 0xd6, 0x61, 0x8b, 0x33, 0xaf, 0x00, 0x5b, 0xd5, 0xe2,
- 0x6f, 0x94, 0x02, 0xc9, 0xb3, 0x30, 0xea, 0x36, 0x9c, 0x30, 0x9e, 0x9b, 0xe4, 0x93, 0x46, 0xcd,
- 0xe2, 0x15, 0x06, 0x44, 0x81, 0xb3, 0x7f, 0xa1, 0x00, 0xf3, 0x83, 0x3b, 0x26, 0xa6, 0xb3, 0xdb,
- 0x09, 0x23, 0x61, 0x20, 0x4b, 0xe6, 0x74, 0xe6, 0x60, 0x4c, 0xf0, 0xe4, 0x13, 0x16, 0x8c, 0xdf,
- 0x8d, 0x02, 0xdf, 0xa7, 0xb1, 0xdc, 0xc5, 0x6e, 0xe7, 0xdc, 0xd7, 0x6b, 0x82, 0xbb, 0xd6, 0x41,
- 0x02, 0x30, 0x91, 0xcb, 0xd4, 0xa5, 0x07, 0x6e, 0xb3, 0x53, 0x4d, 0x4c, 0x93, 0x22, 0xbd, 0x24,
- 0xc0, 0x98, 0xe0, 0x19, 0xa9, 0xe7, 0x0b, 0xd2, 0x91, 0x34, 0xe9, 0x9a, 0x2f, 0x49, 0x25, 0xde,
- 0xfe, 0xf5, 0x51, 0x38, 0xdb, 0x77, 0xf6, 0x93, 0x45, 0x00, 0xee, 0x34, 0x5c, 0xf6, 0x58, 0x8c,
- 0x28, 0x02, 0xe3, 0x69, 0xb6, 0xc7, 0xdf, 0x56, 0x50, 0x34, 0x28, 0xc8, 0xc7, 0x00, 0xda, 0x4e,
- 0xe8, 0xb4, 0x68, 0x4c, 0xc3, 0xc4, 0x50, 0x5d, 0x1f, 0x6e, 0x94, 0x98, 0x1e, 0x5b, 0x09, 0x4f,
- 0xed, 0x64, 0x28, 0x50, 0x84, 0x86, 0x48, 0x16, 0x06, 0x87, 0xb4, 0x49, 0x9d, 0x88, 0x7b, 0x8e,
- 0xd9, 0x30, 0x18, 0x35, 0x0a, 0x4d, 0x3a, 0xb6, 0x91, 0xf0, 0x5e, 0x44, 0x72, 0xac, 0xd4, 0x46,
- 0xc2, 0xfb, 0x19, 0xa1, 0xc4, 0x92, 0xcf, 0x5b, 0x30, 0x5d, 0xf3, 0x9a, 0x54, 0x4b, 0x97, 0x41,
- 0xeb, 0xe6, 0xf0, 0x9d, 0xbc, 0x6c, 0xf2, 0xd5, 0x26, 0x30, 0x05, 0x8e, 0x30, 0x23, 0x9e, 0x7d,
- 0xe6, 0x7d, 0x1a, 0x72, 0xdb, 0x39, 0x96, 0xfe, 0xcc, 0xb7, 0x05, 0x18, 0x13, 0x3c, 0x59, 0x86,
- 0x53, 0x6d, 0x27, 0x8a, 0x56, 0x42, 0x5a, 0xa5, 0x7e, 0xec, 0x39, 0x4d, 0x11, 0x52, 0x96, 0xb4,
- 0x17, 0xbb, 0x95, 0x46, 0x63, 0x96, 0x9e, 0xbc, 0x0f, 0x9e, 0xf6, 0xea, 0x7e, 0x10, 0xd2, 0x0d,
- 0x2f, 0x8a, 0x3c, 0xbf, 0xae, 0xa7, 0x01, 0x37, 0x85, 0xa5, 0xca, 0x82, 0x64, 0xf5, 0xf4, 0x5a,
- 0x7f, 0x32, 0x1c, 0xd4, 0x9e, 0xbc, 0x0d, 0x4a, 0xd1, 0x9e, 0xd7, 0x5e, 0x09, 0xab, 0xd1, 0x5c,
- 0x99, 0xf3, 0x52, 0x9b, 0xe1, 0xb6, 0x84, 0xa3, 0xa2, 0xb0, 0xbf, 0x52, 0x80, 0xb9, 0x41, 0xeb,
- 0x87, 0x44, 0x6c, 0x95, 0xc4, 0xb7, 0x9d, 0x30, 0x92, 0xb1, 0xc0, 0x90, 0x41, 0xa9, 0xe4, 0x7b,
- 0xdb, 0x09, 0xcd, 0xf5, 0xc6, 0x05, 0x60, 0x22, 0x89, 0xdc, 0x85, 0x91, 0xb8, 0xe9, 0xe4, 0x94,
- 0xc5, 0x32, 0x24, 0x6a, 0x8f, 0x6d, 0x7d, 0x39, 0x42, 0x2e, 0x83, 0x3c, 0x03, 0x23, 0x4d, 0x6f,
- 0x97, 0x79, 0xb6, 0x6c, 0x41, 0xf2, 0x2d, 0x6a, 0xdd, 0xdb, 0x8d, 0x90, 0x43, 0xed, 0x7f, 0x1e,
- 0xeb, 0x63, 0xf2, 0xd4, 0x26, 0x42, 0x2e, 0x02, 0x30, 0x0f, 0x66, 0x2b, 0xa4, 0x35, 0xef, 0x40,
- 0x6e, 0xe2, 0x6a, 0x59, 0xdd, 0x50, 0x18, 0x34, 0xa8, 0x92, 0x36, 0xdb, 0x9d, 0x1a, 0x6b, 0x53,
- 0xe8, 0x6d, 0x23, 0x30, 0x68, 0x50, 0x91, 0x17, 0x60, 0xcc, 0x6b, 0x39, 0x75, 0x9a, 0xa8, 0xf9,
- 0x0c, 0x5b, 0x4f, 0x6b, 0x1c, 0xf2, 0xe0, 0x70, 0x61, 0x5a, 0x29, 0xc4, 0x41, 0x28, 0x69, 0xc9,
- 0x2f, 0x5b, 0x30, 0xe9, 0x06, 0xad, 0x56, 0xe0, 0xaf, 0x3b, 0xbb, 0xb4, 0x99, 0x24, 0xa6, 0xee,
- 0x3e, 0xae, 0x2d, 0x76, 0x71, 0xc5, 0x10, 0x26, 0x82, 0x3a, 0x95, 0x6e, 0x33, 0x51, 0x98, 0xd2,
- 0xca, 0x5c, 0x76, 0xa3, 0x47, 0x2c, 0xbb, 0xdf, 0xb6, 0x60, 0x56, 0xb4, 0x5d, 0xf6, 0xfd, 0x20,
- 0x96, 0xf9, 0x42, 0x91, 0x59, 0x0a, 0x1e, 0x73, 0xb7, 0x0c, 0x89, 0xa2, 0x6f, 0x6f, 0x90, 0x6a,
- 0xce, 0xf6, 0xe0, 0xb1, 0x57, 0x49, 0x72, 0x05, 0x66, 0x6b, 0x41, 0xe8, 0x52, 0x73, 0x20, 0xa4,
- 0xcd, 0x50, 0x8c, 0x2e, 0x67, 0x09, 0xb0, 0xb7, 0x0d, 0xb9, 0x0d, 0xe7, 0x0c, 0xa0, 0x39, 0x0e,
- 0xc2, 0x6c, 0x9c, 0x97, 0xdc, 0xce, 0x5d, 0xee, 0x4b, 0x85, 0x03, 0x5a, 0xcf, 0xbf, 0x07, 0x66,
- 0x7b, 0xbe, 0x5f, 0x9f, 0x88, 0xfa, 0x8c, 0x19, 0x51, 0x97, 0x8d, 0x40, 0x78, 0x7e, 0x15, 0xce,
- 0xf5, 0x1f, 0xa9, 0x93, 0x70, 0xb1, 0x7f, 0xce, 0x82, 0xa7, 0x07, 0x78, 0x2e, 0x2a, 0x94, 0xb0,
- 0x06, 0x85, 0x12, 0xc4, 0x81, 0x22, 0xf5, 0xf7, 0xa5, 0xe1, 0xb8, 0x3c, 0xdc, 0x8c, 0xb8, 0xe4,
- 0xef, 0x8b, 0x0f, 0x3d, 0x7e, 0xff, 0x70, 0xa1, 0x78, 0xc9, 0xdf, 0x47, 0xc6, 0xdb, 0xfe, 0x99,
- 0xb1, 0x54, 0xb4, 0xb2, 0x9d, 0x04, 0xc8, 0x5c, 0x51, 0x19, 0xab, 0x6c, 0xe6, 0x3c, 0x17, 0x8d,
- 0x68, 0x4c, 0x24, 0xce, 0xa5, 0x38, 0xf2, 0x69, 0x8b, 0xe7, 0xaa, 0x93, 0x28, 0x4e, 0x3a, 0x53,
- 0x8f, 0x27, 0x75, 0x6e, 0x66, 0xc0, 0x13, 0x20, 0x9a, 0xd2, 0xd9, 0x4a, 0x6e, 0x8b, 0x44, 0x4f,
- 0xd6, 0xa5, 0x4a, 0xb2, 0xd9, 0x09, 0x9e, 0x1c, 0x00, 0x44, 0x5d, 0xdf, 0xdd, 0x0a, 0x9a, 0x9e,
- 0xdb, 0x95, 0xa1, 0x7d, 0x0e, 0xf9, 0x4e, 0xc1, 0x4f, 0xf8, 0x55, 0xfa, 0x37, 0x1a, 0xb2, 0xc8,
- 0x57, 0x2d, 0x98, 0x15, 0x1b, 0xe7, 0xaa, 0x57, 0xab, 0xd1, 0x90, 0xfa, 0x2e, 0x4d, 0x5c, 0x8f,
- 0x3b, 0xc3, 0x69, 0x90, 0xa4, 0xea, 0xd6, 0xb2, 0xec, 0xf5, 0x12, 0xef, 0x41, 0x61, 0xaf, 0x32,
- 0xa4, 0x0a, 0x23, 0x9e, 0x5f, 0x0b, 0xa4, 0x61, 0xab, 0x0c, 0xa7, 0xd4, 0x9a, 0x5f, 0x0b, 0xf4,
- 0x5a, 0x61, 0xbf, 0x90, 0x73, 0x27, 0xeb, 0x70, 0x26, 0x94, 0xd1, 0xdf, 0x55, 0x2f, 0x62, 0x2e,
- 0xfc, 0xba, 0xd7, 0xf2, 0x62, 0x6e, 0x94, 0x8a, 0x95, 0xb9, 0xfb, 0x87, 0x0b, 0x67, 0xb0, 0x0f,
- 0x1e, 0xfb, 0xb6, 0xb2, 0x5f, 0x2f, 0xa7, 0x43, 0x5c, 0x91, 0xc0, 0xf9, 0x08, 0x94, 0x43, 0x95,
- 0x74, 0x17, 0x0e, 0xc4, 0x7a, 0x3e, 0x63, 0x2c, 0x33, 0x47, 0x2a, 0xf7, 0xa0, 0xd3, 0xeb, 0x5a,
- 0x22, 0x73, 0x24, 0xd8, 0x97, 0x97, 0xcb, 0x22, 0x87, 0xf9, 0x25, 0xa5, 0xea, 0x24, 0x59, 0xd7,
- 0x77, 0x91, 0xcb, 0x20, 0x21, 0x8c, 0x35, 0xa8, 0xd3, 0x8c, 0x1b, 0x32, 0x87, 0x73, 0x6d, 0x58,
- 0x37, 0x96, 0xf1, 0xca, 0xe6, 0xc7, 0x04, 0x14, 0xa5, 0x24, 0x72, 0x00, 0xe3, 0x0d, 0xf1, 0x11,
- 0xe4, 0xde, 0xbe, 0x31, 0xec, 0xe0, 0xa6, 0xbe, 0xac, 0x5e, 0xbf, 0x12, 0x80, 0x89, 0x38, 0xf2,
- 0xd3, 0x16, 0x80, 0x9b, 0x24, 0xc6, 0x92, 0xe5, 0x83, 0xb9, 0xd9, 0x1d, 0x95, 0x73, 0xd3, 0xae,
- 0x91, 0x02, 0x45, 0x68, 0x48, 0x26, 0xaf, 0xc2, 0x64, 0x48, 0xdd, 0xc0, 0x77, 0xbd, 0x26, 0xad,
- 0x2e, 0xc7, 0xdc, 0x73, 0x3f, 0x59, 0x02, 0x6d, 0x86, 0xf9, 0x27, 0x68, 0xf0, 0xc0, 0x14, 0x47,
- 0xf2, 0xba, 0x05, 0xd3, 0x2a, 0x39, 0xc8, 0x3e, 0x08, 0x95, 0x49, 0x92, 0xf5, 0x9c, 0x52, 0x91,
- 0x9c, 0x67, 0x85, 0xb0, 0x08, 0x25, 0x0d, 0xc3, 0x8c, 0x5c, 0xf2, 0x0a, 0x40, 0xb0, 0xcb, 0x13,
- 0x71, 0xac, 0xab, 0xa5, 0x13, 0x77, 0x75, 0x5a, 0xe4, 0x94, 0x13, 0x0e, 0x68, 0x70, 0x23, 0xd7,
- 0x01, 0xc4, 0xb2, 0xd9, 0xe9, 0xb6, 0x29, 0x0f, 0x1b, 0xca, 0x95, 0xb7, 0x26, 0x83, 0xbf, 0xad,
- 0x30, 0x0f, 0x0e, 0x17, 0x7a, 0x03, 0x5c, 0x9e, 0x01, 0x35, 0x9a, 0x93, 0x0f, 0xc3, 0x78, 0xd4,
- 0x69, 0xb5, 0x1c, 0x95, 0x4f, 0xd9, 0xca, 0x6f, 0x47, 0x14, 0x7c, 0xf5, 0xdc, 0x94, 0x00, 0x4c,
- 0x24, 0xda, 0x3e, 0x90, 0x5e, 0x7a, 0xf2, 0x02, 0x4c, 0xd2, 0x83, 0x98, 0x86, 0xbe, 0xd3, 0xbc,
- 0x85, 0xeb, 0x49, 0x04, 0xce, 0x3f, 0xfe, 0x25, 0x03, 0x8e, 0x29, 0x2a, 0x62, 0x2b, 0xcf, 0xbb,
- 0xc0, 0xe9, 0x41, 0x7b, 0xde, 0x89, 0x9f, 0x6d, 0xff, 0x47, 0x21, 0xe5, 0x11, 0xec, 0x84, 0x94,
- 0x92, 0x00, 0x46, 0xfd, 0xa0, 0xaa, 0x8c, 0xde, 0xb5, 0x7c, 0x8c, 0xde, 0x8d, 0xa0, 0x6a, 0x9c,
- 0x06, 0xb3, 0x5f, 0x11, 0x0a, 0x39, 0xfc, 0xb8, 0x2c, 0x39, 0x57, 0xe4, 0x08, 0xe9, 0x04, 0xe5,
- 0x29, 0x59, 0x1d, 0x97, 0x6d, 0x9a, 0x82, 0x30, 0x2d, 0x97, 0xec, 0xc1, 0x68, 0x23, 0x88, 0x62,
- 0x11, 0xab, 0x0c, 0xed, 0x85, 0x5d, 0x0d, 0xa2, 0x98, 0x6f, 0x61, 0xaa, 0xdb, 0x0c, 0x12, 0xa1,
- 0x90, 0x61, 0x7f, 0xdf, 0x4a, 0xe5, 0x5b, 0xee, 0x38, 0xb1, 0xdb, 0xb8, 0xb4, 0x4f, 0x7d, 0x36,
- 0x9f, 0xcd, 0x64, 0xfd, 0xff, 0x37, 0x93, 0xf5, 0x0f, 0x0e, 0x17, 0xde, 0x32, 0xa8, 0x3c, 0xe7,
- 0x1e, 0xe3, 0xb0, 0xc8, 0x59, 0x18, 0x79, 0xfd, 0x8f, 0x5b, 0x30, 0x61, 0xa8, 0x27, 0x37, 0x94,
- 0x1c, 0xf3, 0xc6, 0xca, 0xb9, 0x32, 0x80, 0x68, 0x8a, 0xb4, 0xbf, 0x68, 0xc1, 0x78, 0xc5, 0x71,
- 0xf7, 0x82, 0x5a, 0x8d, 0x05, 0xf8, 0xd5, 0x8e, 0x3c, 0x16, 0x11, 0xfd, 0x53, 0x01, 0xfe, 0xaa,
- 0x84, 0xa3, 0xa2, 0x60, 0x73, 0xb8, 0xe6, 0xb8, 0x71, 0x10, 0x72, 0xb5, 0x8b, 0x62, 0x0e, 0x5f,
- 0xe6, 0x10, 0x94, 0x18, 0xf2, 0x0e, 0x98, 0x68, 0x39, 0x07, 0x49, 0xe3, 0x6c, 0xb2, 0x67, 0x43,
- 0xa3, 0xd0, 0xa4, 0xb3, 0x7f, 0xbf, 0x0c, 0xe3, 0xf2, 0x04, 0xf3, 0xd8, 0x27, 0x08, 0x89, 0x17,
- 0x5f, 0x18, 0xe8, 0xc5, 0x47, 0x30, 0xe6, 0xf2, 0xe2, 0x27, 0xb9, 0x95, 0x0e, 0x99, 0xf6, 0x92,
- 0x0a, 0x8a, 0x7a, 0x2a, 0xad, 0x96, 0xf8, 0x8d, 0x52, 0x14, 0xf9, 0x82, 0x05, 0xa7, 0xdc, 0xc0,
- 0xf7, 0xa9, 0xab, 0xed, 0xfc, 0x48, 0x1e, 0x27, 0x6c, 0x2b, 0x69, 0xa6, 0x3a, 0x45, 0x94, 0x41,
- 0x60, 0x56, 0x3c, 0x79, 0x09, 0xa6, 0xc4, 0x98, 0xdd, 0x4e, 0xc5, 0xc7, 0xfa, 0xd4, 0xda, 0x44,
- 0x62, 0x9a, 0x96, 0x2c, 0x8a, 0x3c, 0x83, 0x3c, 0x1f, 0x1e, 0xd3, 0xf9, 0x46, 0xe3, 0x64, 0xd8,
- 0xa0, 0x20, 0x21, 0x90, 0x90, 0xd6, 0x42, 0x1a, 0x35, 0x90, 0xbe, 0xd6, 0xa1, 0x51, 0xcc, 0xf7,
- 0x98, 0xf1, 0x47, 0x3b, 0x8f, 0xc2, 0x1e, 0x4e, 0xd8, 0x87, 0x3b, 0xd9, 0x93, 0x8e, 0x6e, 0x29,
- 0x8f, 0xe5, 0x24, 0x3f, 0xf3, 0x40, 0x7f, 0x77, 0x01, 0x46, 0xa3, 0x86, 0x13, 0x56, 0xf9, 0xde,
- 0x56, 0xac, 0x94, 0x99, 0x2d, 0xd9, 0x66, 0x00, 0x14, 0x70, 0xb2, 0x0a, 0x33, 0x99, 0x33, 0xf7,
- 0x88, 0xef, 0x5e, 0xa5, 0xca, 0x9c, 0x64, 0x37, 0x93, 0x39, 0xad, 0x8f, 0xb0, 0xa7, 0x85, 0x19,
- 0x04, 0x4d, 0x1c, 0x11, 0x04, 0x75, 0x61, 0xac, 0x29, 0x12, 0x01, 0x93, 0xdc, 0x54, 0xde, 0xcc,
- 0x65, 0x00, 0x16, 0xcd, 0x04, 0x8c, 0x9a, 0xed, 0x32, 0xa1, 0x20, 0x05, 0x92, 0xcf, 0x32, 0x83,
- 0x66, 0xe4, 0x0e, 0xa6, 0xb8, 0x02, 0xb7, 0xf3, 0x51, 0xa0, 0x27, 0x55, 0xa2, 0xad, 0x9b, 0x91,
- 0x88, 0x30, 0xe5, 0xcf, 0xff, 0x08, 0x4c, 0x3c, 0x6a, 0xde, 0xe1, 0x65, 0x98, 0x19, 0x2a, 0xe3,
- 0xf0, 0xef, 0x16, 0x24, 0xdf, 0x75, 0xc5, 0x71, 0x1b, 0x94, 0x4d, 0x19, 0xf2, 0x32, 0x4c, 0xab,
- 0x30, 0x62, 0x25, 0xe8, 0xf8, 0x31, 0xe7, 0x55, 0xd4, 0xb9, 0x64, 0x4c, 0x61, 0x31, 0x43, 0x4d,
- 0x96, 0xa0, 0xcc, 0xc6, 0x49, 0x34, 0x15, 0x66, 0x57, 0x85, 0x2a, 0xcb, 0x5b, 0x6b, 0xb2, 0x95,
- 0xa6, 0x21, 0x01, 0xcc, 0x36, 0x9d, 0x28, 0xe6, 0x1a, 0xb0, 0xa8, 0xe2, 0x11, 0x4f, 0x83, 0x79,
- 0xc9, 0xd1, 0x7a, 0x96, 0x11, 0xf6, 0xf2, 0xb6, 0xbf, 0x35, 0x02, 0x53, 0x29, 0xcb, 0xc8, 0x76,
- 0x95, 0x4e, 0xc4, 0x5c, 0x1f, 0x95, 0x62, 0x51, 0xbb, 0xca, 0x2d, 0x09, 0x47, 0x45, 0xc1, 0xa8,
- 0xdb, 0x4e, 0x14, 0xdd, 0x0b, 0xc2, 0xaa, 0x34, 0xe5, 0x8a, 0x7a, 0x4b, 0xc2, 0x51, 0x51, 0xb0,
- 0xfd, 0x65, 0x97, 0x3a, 0x21, 0x0d, 0x79, 0x01, 0x45, 0x76, 0x7f, 0xa9, 0x68, 0x14, 0x9a, 0x74,
- 0xdc, 0x28, 0xc7, 0xcd, 0x68, 0xa5, 0xe9, 0x51, 0x3f, 0x16, 0x6a, 0xe6, 0x63, 0x94, 0x77, 0xd6,
- 0xb7, 0x4d, 0xa6, 0xda, 0x28, 0x67, 0x10, 0x98, 0x15, 0x4f, 0x3e, 0x69, 0xc1, 0x94, 0x73, 0x2f,
- 0xd2, 0x15, 0xba, 0xdc, 0x2a, 0x0f, 0xbd, 0x49, 0xa5, 0x8a, 0x7e, 0x2b, 0xb3, 0xcc, 0xbc, 0xa7,
- 0x40, 0x98, 0x16, 0x4a, 0xbe, 0x6c, 0x01, 0xa1, 0x07, 0xd4, 0xdd, 0x0a, 0x83, 0x7d, 0xaf, 0x9a,
- 0x7c, 0x43, 0x19, 0xfe, 0x0c, 0xe9, 0x6d, 0x5f, 0xea, 0xe1, 0x2b, 0xac, 0x7a, 0x2f, 0x1c, 0xfb,
- 0xe8, 0x60, 0xff, 0x45, 0x11, 0x26, 0x0c, 0x63, 0xdc, 0x77, 0x67, 0xb5, 0x7e, 0xc0, 0x76, 0xd6,
- 0xc2, 0x09, 0x76, 0xd6, 0x8f, 0x41, 0xd9, 0x4d, 0x0c, 0x45, 0x3e, 0x15, 0xc5, 0x59, 0xf3, 0xa3,
- 0x6d, 0x85, 0x02, 0xa1, 0x96, 0x49, 0xae, 0xc0, 0xac, 0xc1, 0x46, 0x1a, 0x99, 0x11, 0x6e, 0x64,
- 0x54, 0xa2, 0x69, 0x39, 0x4b, 0x80, 0xbd, 0x6d, 0xc8, 0xf3, 0xcc, 0xab, 0xf5, 0x64, 0xbf, 0x44,
- 0x14, 0x2f, 0xab, 0x75, 0x97, 0xb7, 0xd6, 0x12, 0x30, 0x9a, 0x34, 0xf6, 0xb7, 0x2c, 0xf5, 0x71,
- 0x9f, 0x40, 0xa1, 0xc6, 0xdd, 0x74, 0xa1, 0xc6, 0xa5, 0x5c, 0x86, 0x79, 0x40, 0x91, 0xc6, 0x0d,
- 0x18, 0x5f, 0x09, 0x5a, 0x2d, 0xc7, 0xaf, 0x92, 0x37, 0xc1, 0xb8, 0x2b, 0xfe, 0x94, 0x61, 0xe2,
- 0x04, 0xdb, 0xbf, 0x25, 0x16, 0x13, 0x1c, 0x79, 0x06, 0x46, 0x9c, 0xb0, 0x9e, 0x84, 0x86, 0xfc,
- 0xec, 0x68, 0x39, 0xac, 0x47, 0xc8, 0xa1, 0xf6, 0x97, 0x0a, 0x00, 0x2b, 0x41, 0xab, 0xed, 0x84,
- 0xb4, 0xba, 0x13, 0xfc, 0x4f, 0x8e, 0x58, 0x44, 0x0c, 0x9f, 0xb1, 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, 0x67, 0x93, 0x1d, 0xbf, 0x98, 0xae, 0x69, 0xe0, 0x07, 0xa5, 0xd2,
- 0x01, 0xb0, 0xbf, 0x5e, 0x80, 0x73, 0xc2, 0x6c, 0x6d, 0x38, 0xbe, 0x53, 0xa7, 0x2d, 0xa6, 0xd5,
- 0x71, 0x4f, 0x1b, 0x5c, 0xe6, 0xbe, 0x7a, 0x49, 0x09, 0xc3, 0xb0, 0x93, 0x53, 0x4c, 0x2a, 0x31,
- 0x8d, 0xd6, 0x7c, 0x2f, 0x46, 0xce, 0x9c, 0x44, 0x50, 0x4a, 0xee, 0x88, 0x48, 0x63, 0x93, 0x93,
- 0x20, 0xb5, 0xee, 0xae, 0x48, 0xf6, 0xa8, 0x04, 0xb1, 0xcd, 0xbd, 0x19, 0xb8, 0x7b, 0x48, 0xdb,
- 0x01, 0x37, 0x2c, 0xc6, 0x09, 0xf2, 0xba, 0x84, 0xa3, 0xa2, 0xb0, 0xbf, 0x6e, 0x41, 0xd6, 0xe4,
- 0xf2, 0x68, 0x50, 0xd4, 0x0c, 0x66, 0xa3, 0xc1, 0x74, 0x89, 0xdf, 0x09, 0x2a, 0xe6, 0x3e, 0x00,
- 0x13, 0x4e, 0x1c, 0xd3, 0x56, 0x5b, 0x84, 0x26, 0xc5, 0x47, 0x4b, 0x7f, 0x6d, 0x04, 0x55, 0xaf,
- 0xe6, 0xf1, 0x90, 0xc4, 0x64, 0x67, 0xdf, 0x84, 0x52, 0x72, 0xe2, 0x73, 0x8c, 0x4f, 0xff, 0x6c,
- 0xca, 0x9d, 0x1c, 0x30, 0xb9, 0x1e, 0x14, 0xa0, 0xcf, 0x9e, 0xc9, 0xba, 0xac, 0xad, 0x4b, 0xaa,
- 0xcb, 0x27, 0xb3, 0x30, 0xe4, 0x40, 0x9c, 0x76, 0x89, 0x3c, 0xcb, 0xfb, 0xf2, 0xde, 0xf3, 0xf5,
- 0x01, 0xd8, 0x84, 0xd4, 0x4f, 0x1d, 0x82, 0x91, 0x8b, 0x00, 0x7a, 0x53, 0x90, 0x85, 0x1e, 0x2a,
- 0x53, 0xab, 0xf7, 0x0e, 0x34, 0xa8, 0x98, 0x0b, 0xe8, 0xf9, 0x51, 0xec, 0x34, 0x9b, 0x57, 0x3d,
- 0x3f, 0x96, 0xb1, 0xac, 0x32, 0x18, 0x6b, 0x1a, 0x85, 0x26, 0xdd, 0xfc, 0x3b, 0x8d, 0xef, 0x72,
- 0x12, 0xb7, 0xfe, 0x33, 0x05, 0x98, 0xbe, 0xe2, 0x77, 0xb6, 0xae, 0x6c, 0x75, 0x76, 0x9b, 0x9e,
- 0x7b, 0x9d, 0x76, 0xd9, 0x47, 0xdb, 0xa3, 0xdd, 0xb5, 0x55, 0x39, 0xec, 0xea, 0xa3, 0x5d, 0x67,
- 0x40, 0x14, 0x38, 0xa6, 0x66, 0xcd, 0xf3, 0xeb, 0x34, 0x6c, 0x87, 0x9e, 0xf4, 0xdd, 0x0d, 0x35,
- 0x2f, 0x6b, 0x14, 0x9a, 0x74, 0x8c, 0x77, 0x70, 0xcf, 0xa7, 0x61, 0xd6, 0xda, 0x6c, 0x32, 0x20,
- 0x0a, 0x1c, 0x23, 0x8a, 0xc3, 0x4e, 0x14, 0xcb, 0x11, 0x53, 0x44, 0x3b, 0x0c, 0x88, 0x02, 0xc7,
- 0xa6, 0x47, 0xd4, 0xd9, 0xe5, 0x59, 0xd8, 0xcc, 0x79, 0xf8, 0xb6, 0x00, 0x63, 0x82, 0x67, 0xa4,
- 0x7b, 0xb4, 0xbb, 0xca, 0xf6, 0xde, 0x4c, 0xc5, 0xca, 0x75, 0x01, 0xc6, 0x04, 0x6f, 0xff, 0xad,
- 0x05, 0x24, 0x3d, 0x1c, 0x4f, 0x60, 0xfb, 0x7e, 0x2d, 0xbd, 0x7d, 0x0f, 0x99, 0x30, 0x4f, 0xab,
- 0x3f, 0x60, 0x17, 0xff, 0x45, 0x0b, 0x26, 0xcd, 0xb3, 0x13, 0x52, 0xcf, 0x18, 0xa2, 0xcd, 0xb4,
- 0x21, 0x7a, 0x70, 0xb8, 0xf0, 0xa3, 0xfd, 0x2e, 0x3c, 0xd6, 0xbd, 0x38, 0x68, 0x47, 0x6f, 0xa7,
- 0x7e, 0xdd, 0xf3, 0x29, 0xcf, 0x0c, 0x8a, 0x33, 0x97, 0xd4, 0xc1, 0xcc, 0x4a, 0x50, 0xa5, 0x8f,
- 0x60, 0xc9, 0xec, 0x3b, 0x30, 0xdb, 0x53, 0xa6, 0x74, 0x0c, 0xa3, 0x73, 0x64, 0x15, 0xa8, 0x8d,
- 0x30, 0xc1, 0x18, 0x6f, 0xb6, 0xc5, 0xe1, 0xc8, 0x0a, 0xcc, 0x8a, 0x6a, 0x2b, 0x26, 0x69, 0xdb,
- 0x6d, 0xd0, 0x96, 0x2a, 0x3d, 0xe3, 0x81, 0xe2, 0xed, 0x2c, 0x12, 0x7b, 0xe9, 0xed, 0xcf, 0x5a,
- 0x30, 0x95, 0xaa, 0x1c, 0xcb, 0xc9, 0x3c, 0xf2, 0x95, 0x16, 0xf0, 0xa3, 0xbc, 0xd0, 0xf3, 0x45,
- 0xae, 0xaf, 0x64, 0xac, 0x34, 0x8d, 0x42, 0x93, 0xce, 0xfe, 0x62, 0x01, 0x4a, 0x49, 0x56, 0xf8,
- 0x18, 0xaa, 0x7c, 0xda, 0x82, 0x29, 0x15, 0x9c, 0x73, 0x97, 0x5d, 0x4c, 0xc6, 0x1b, 0xc3, 0xe7,
- 0xa5, 0xd5, 0x79, 0x2f, 0x73, 0xd9, 0x55, 0xec, 0x80, 0xa6, 0x30, 0x4c, 0xcb, 0x26, 0xb7, 0x01,
- 0xa2, 0x6e, 0x14, 0xd3, 0x96, 0x11, 0x3c, 0xd8, 0xc6, 0x8a, 0x5b, 0x74, 0x83, 0x90, 0xb2, 0xf5,
- 0x75, 0x23, 0xa8, 0xd2, 0x6d, 0x45, 0xa9, 0x8d, 0xab, 0x86, 0xa1, 0xc1, 0xc9, 0xfe, 0xb5, 0x02,
- 0xcc, 0x64, 0x55, 0x22, 0xef, 0x87, 0xc9, 0x44, 0xba, 0x71, 0x77, 0x34, 0x49, 0x85, 0x4f, 0xa2,
- 0x81, 0x7b, 0x70, 0xb8, 0xb0, 0xd0, 0x7b, 0x79, 0x76, 0xd1, 0x24, 0xc1, 0x14, 0x33, 0x91, 0x21,
- 0x91, 0xa9, 0xbc, 0x4a, 0x77, 0xb9, 0xdd, 0x96, 0x69, 0x0e, 0x23, 0x43, 0x62, 0x62, 0x31, 0x43,
- 0x4d, 0xb6, 0xe0, 0x8c, 0x01, 0xb9, 0x41, 0xbd, 0x7a, 0x63, 0x37, 0x08, 0xc5, 0x15, 0x83, 0x62,
- 0xe5, 0x19, 0xc9, 0xe5, 0x0c, 0xf6, 0xa1, 0xc1, 0xbe, 0x2d, 0x99, 0xd3, 0xe2, 0x3a, 0x6d, 0xc7,
- 0xf5, 0xe2, 0xae, 0x8c, 0x86, 0x94, 0x6d, 0x5a, 0x91, 0x70, 0x54, 0x14, 0xf6, 0x06, 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, 0xd6, 0xa2, 0xa8, 0xc3,
- 0x3d, 0x19, 0x86, 0x24, 0xcf, 0x42, 0x91, 0x1e, 0xb4, 0xb3, 0xd9, 0xa6, 0x4b, 0x07, 0x6d, 0x2f,
- 0xa4, 0x11, 0x23, 0xa2, 0x07, 0x6d, 0x32, 0x0f, 0x05, 0xaf, 0x2a, 0x37, 0x29, 0x90, 0x34, 0x85,
- 0xb5, 0x55, 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, 0x05,
- 0x18, 0x71, 0x03, 0x59, 0xde, 0x5b, 0xd2, 0x6c, 0xb8, 0xd1, 0xe6, 0x18, 0xfb, 0x0e, 0x4c, 0x5f,
- 0xf7, 0x83, 0x7b, 0x3e, 0xdb, 0x4c, 0x2f, 0x7b, 0xb4, 0x59, 0x65, 0x8c, 0x6b, 0xec, 0x8f, 0xac,
- 0x8b, 0xc0, 0xb1, 0x28, 0x70, 0xea, 0x1e, 0x48, 0x61, 0xd0, 0x3d, 0x10, 0xfb, 0xe3, 0x16, 0xcc,
- 0xa8, 0x02, 0xb2, 0xc4, 0x1a, 0xbf, 0x08, 0x93, 0xbb, 0x1d, 0xaf, 0x59, 0x95, 0xbf, 0xa5, 0x08,
- 0x55, 0x22, 0x57, 0x31, 0x70, 0x98, 0xa2, 0x64, 0xee, 0xd6, 0xae, 0xe7, 0x3b, 0x61, 0x77, 0x4b,
- 0x9b, 0x7f, 0x65, 0x11, 0x2a, 0x0a, 0x83, 0x06, 0x95, 0xfd, 0xa7, 0x45, 0xd0, 0xd7, 0x5b, 0x88,
- 0x27, 0x2b, 0x21, 0xac, 0x3c, 0x72, 0x55, 0xdb, 0x5d, 0xdf, 0xd5, 0x17, 0x69, 0x4a, 0x99, 0x42,
- 0x88, 0x4f, 0x59, 0xcc, 0xd1, 0xf3, 0x62, 0xcf, 0xe1, 0xeb, 0x53, 0x46, 0x47, 0x5b, 0x39, 0x1d,
- 0x96, 0xaf, 0x09, 0xce, 0x41, 0x68, 0xba, 0x8e, 0x4a, 0x18, 0x9a, 0x92, 0xc9, 0xab, 0xf2, 0x78,
- 0xa1, 0x98, 0x5b, 0x1d, 0x4d, 0x29, 0x73, 0xa6, 0xd0, 0x86, 0xd1, 0x90, 0xc6, 0x61, 0x52, 0xc1,
- 0x74, 0x7d, 0xd8, 0xc3, 0xd6, 0x38, 0xec, 0x6e, 0xc7, 0x2c, 0x02, 0xab, 0x1b, 0xfe, 0x0d, 0x07,
- 0xa3, 0x10, 0x64, 0x47, 0x40, 0x7a, 0xc7, 0xe2, 0x84, 0xa9, 0xdb, 0x25, 0x28, 0x3b, 0x9d, 0x38,
- 0x68, 0xb1, 0x61, 0xe2, 0x9f, 0xa7, 0x64, 0x24, 0xa7, 0x13, 0x04, 0x6a, 0x1a, 0xfb, 0xf3, 0xa3,
- 0x90, 0x29, 0x4d, 0x20, 0x07, 0xe6, 0xd5, 0x2c, 0x2b, 0xdf, 0xab, 0x59, 0x4a, 0x99, 0x7e, 0xd7,
- 0xb3, 0x48, 0x1d, 0x46, 0xdb, 0x0d, 0x27, 0x4a, 0x96, 0xdf, 0xcd, 0x64, 0x98, 0xb6, 0x18, 0xf0,
- 0xc1, 0xe1, 0xc2, 0x7b, 0x8f, 0xe7, 0xce, 0xb1, 0xb9, 0xba, 0x24, 0xea, 0x34, 0xb5, 0x68, 0xce,
- 0x03, 0x05, 0x7f, 0xd3, 0xa1, 0x2b, 0x1e, 0x11, 0x9a, 0x7e, 0xc2, 0x12, 0xf5, 0x6c, 0x48, 0xa3,
- 0x4e, 0x33, 0x96, 0xb3, 0xe1, 0x66, 0x8e, 0xab, 0x4c, 0x30, 0xd6, 0x85, 0x6d, 0xe2, 0x37, 0x1a,
- 0x42, 0xc9, 0xfb, 0xa1, 0x1c, 0xc5, 0x4e, 0x18, 0x3f, 0x62, 0x19, 0x8c, 0x1a, 0xf4, 0xed, 0x84,
- 0x09, 0x6a, 0x7e, 0xe4, 0x15, 0x80, 0x9a, 0xe7, 0x7b, 0x51, 0xe3, 0x11, 0x4f, 0x05, 0xb9, 0xe2,
- 0x97, 0x15, 0x07, 0x34, 0xb8, 0x31, 0xeb, 0xc6, 0xe7, 0xb6, 0xc8, 0x63, 0x96, 0xf8, 0xf6, 0xa5,
- 0xac, 0x1b, 0x2a, 0x0c, 0x1a, 0x54, 0xf6, 0x47, 0xe1, 0x74, 0xf6, 0x62, 0xb5, 0x8c, 0xf0, 0xea,
- 0x61, 0xd0, 0x69, 0x67, 0xcd, 0x37, 0xbf, 0x78, 0x8b, 0x02, 0xc7, 0xcc, 0xf7, 0x9e, 0xe7, 0x57,
- 0xb3, 0xe6, 0xfb, 0xba, 0xe7, 0x57, 0x91, 0x63, 0x8e, 0x71, 0x67, 0xed, 0x77, 0x2d, 0xb8, 0x70,
- 0xd4, 0xfd, 0x6f, 0x16, 0xbd, 0xdf, 0x73, 0x42, 0x5f, 0x5e, 0x87, 0xe1, 0xb6, 0xe3, 0x8e, 0x13,
- 0xfa, 0xc8, 0xa1, 0xa4, 0x0b, 0x63, 0xa2, 0xf4, 0x4f, 0x3a, 0xa4, 0x37, 0xf3, 0xbd, 0x8d, 0xce,
- 0x42, 0x24, 0x95, 0x74, 0x11, 0x65, 0x87, 0x28, 0x05, 0xda, 0xdf, 0xb5, 0x80, 0x6c, 0xee, 0xd3,
- 0x30, 0xf4, 0xaa, 0x46, 0xb1, 0x22, 0x79, 0x01, 0x26, 0xef, 0x6e, 0x6f, 0xde, 0xd8, 0x0a, 0x3c,
- 0x9f, 0xdf, 0xc7, 0x30, 0x4a, 0x64, 0xae, 0x19, 0x70, 0x4c, 0x51, 0xb1, 0x20, 0xe3, 0xee, 0x6b,
- 0x6c, 0xcb, 0xb9, 0x74, 0xd0, 0x0e, 0x69, 0x14, 0xa9, 0x37, 0x1c, 0x64, 0x90, 0x71, 0xed, 0x66,
- 0x06, 0x89, 0xbd, 0xf4, 0x64, 0x13, 0xce, 0xb6, 0x78, 0x02, 0xae, 0xca, 0x77, 0xda, 0x48, 0x64,
- 0xe3, 0xc2, 0xa4, 0xe0, 0xfd, 0x0d, 0xf7, 0x0f, 0x17, 0xce, 0x6e, 0xf4, 0x23, 0xc0, 0xfe, 0xed,
- 0xec, 0xaf, 0x15, 0x60, 0xc2, 0x78, 0x43, 0xe1, 0x18, 0x3e, 0x45, 0xe6, 0xd9, 0x87, 0xc2, 0x31,
- 0x9f, 0x7d, 0x78, 0x0e, 0x4a, 0xed, 0xa0, 0xe9, 0xb9, 0x9e, 0xaa, 0xce, 0x9f, 0xe4, 0x67, 0x60,
- 0x12, 0x86, 0x0a, 0x4b, 0xee, 0x41, 0x59, 0x5d, 0x65, 0x96, 0xf5, 0x7a, 0x79, 0x79, 0x55, 0x6a,
- 0xf1, 0xea, 0x2b, 0xca, 0x5a, 0x16, 0xb1, 0x61, 0x8c, 0xcf, 0xfc, 0x24, 0xc3, 0xcf, 0x0b, 0x40,
- 0xf8, 0x92, 0x88, 0x50, 0x62, 0xec, 0x7f, 0x18, 0x85, 0x32, 0xd2, 0x76, 0xb0, 0x12, 0xd2, 0x6a,
- 0x44, 0xde, 0x08, 0xc5, 0x4e, 0xd8, 0x94, 0x83, 0xa5, 0xd2, 0x3f, 0xb7, 0x70, 0x1d, 0x19, 0x3c,
- 0xb5, 0xdd, 0x14, 0x4e, 0x74, 0x52, 0x58, 0x3c, 0xf2, 0xa4, 0xf0, 0x25, 0x98, 0x8a, 0xa2, 0xc6,
- 0x56, 0xe8, 0xed, 0x3b, 0x31, 0x9b, 0xc4, 0x32, 0x57, 0xa2, 0x8f, 0x66, 0xb6, 0xaf, 0x6a, 0x24,
- 0xa6, 0x69, 0xc9, 0x15, 0x98, 0xd5, 0xe7, 0x75, 0x34, 0x8c, 0x79, 0x6a, 0x44, 0x64, 0x51, 0xd4,
- 0xc9, 0x88, 0x3e, 0xe1, 0x93, 0x04, 0xd8, 0xdb, 0x86, 0xac, 0xc2, 0x4c, 0x0a, 0xc8, 0x14, 0x11,
- 0x29, 0x16, 0x55, 0x0b, 0x90, 0xe2, 0xc3, 0x74, 0xe9, 0x69, 0x41, 0x36, 0xe0, 0xb4, 0xf8, 0xbe,
- 0xfc, 0x0a, 0xbc, 0xea, 0xd1, 0x38, 0x67, 0xf4, 0xbf, 0x24, 0xa3, 0xd3, 0x57, 0x7a, 0x49, 0xb0,
- 0x5f, 0x3b, 0x36, 0x43, 0x15, 0x78, 0x6d, 0x55, 0x5a, 0x4a, 0x35, 0x43, 0x15, 0x9b, 0xb5, 0x2a,
- 0x9a, 0x74, 0xe4, 0x7d, 0xf0, 0xb4, 0xfe, 0x29, 0x32, 0x6b, 0xc2, 0x7d, 0x58, 0x95, 0xa5, 0x10,
- 0xea, 0xa6, 0xd1, 0x95, 0xbe, 0x64, 0x55, 0x1c, 0xd4, 0x9e, 0xec, 0xc2, 0xbc, 0x42, 0x5d, 0x62,
- 0xe6, 0xa0, 0x1d, 0x7a, 0x11, 0xad, 0x38, 0x11, 0xbd, 0x15, 0x36, 0x79, 0xf1, 0x44, 0x59, 0x3f,
- 0x04, 0x71, 0xc5, 0x8b, 0xaf, 0xf6, 0xa3, 0xc4, 0x75, 0x7c, 0x08, 0x17, 0xe6, 0xad, 0x50, 0xdf,
- 0xd9, 0x6d, 0xd2, 0xcd, 0x95, 0x35, 0x5e, 0x52, 0x61, 0x78, 0x2b, 0x97, 0x12, 0x04, 0x6a, 0x1a,
- 0xe5, 0x9e, 0x4f, 0x0e, 0x74, 0xcf, 0xbf, 0x63, 0xc1, 0x94, 0x9a, 0xec, 0x4f, 0x20, 0x0f, 0xd6,
- 0x4c, 0xe7, 0xc1, 0xae, 0x0c, 0xeb, 0x26, 0x4a, 0xcd, 0x07, 0x04, 0x53, 0xdf, 0x2f, 0x03, 0xf0,
- 0xa7, 0x75, 0x3c, 0x5e, 0xaa, 0x7b, 0x01, 0x46, 0x42, 0xda, 0x0e, 0xb2, 0x96, 0x8f, 0xe7, 0xf0,
- 0x39, 0xe6, 0x07, 0x77, 0x39, 0xf7, 0x3b, 0x39, 0x1e, 0xfd, 0xef, 0x3d, 0x39, 0xde, 0x86, 0xb3,
- 0x9e, 0x1f, 0x51, 0xb7, 0x13, 0xca, 0x9d, 0xf3, 0x6a, 0x10, 0x29, 0xeb, 0x50, 0xaa, 0xbc, 0x51,
- 0x32, 0x3a, 0xbb, 0xd6, 0x8f, 0x08, 0xfb, 0xb7, 0x65, 0x43, 0x9a, 0x20, 0xe4, 0x9d, 0x20, 0x1d,
- 0xe2, 0x4b, 0x38, 0x2a, 0x0a, 0xbd, 0x20, 0xd6, 0x6b, 0xc9, 0xa5, 0x9f, 0xcc, 0x82, 0x58, 0xbf,
- 0xbc, 0x8d, 0x9a, 0xa6, 0xbf, 0x55, 0x2c, 0xe7, 0x64, 0x15, 0xe1, 0xc4, 0x56, 0x31, 0x59, 0x9f,
- 0x13, 0x03, 0x9f, 0x51, 0x48, 0x36, 0xeb, 0xc9, 0x81, 0x9b, 0xf5, 0xcb, 0x30, 0xed, 0xf9, 0x0d,
- 0x1a, 0x7a, 0x31, 0xad, 0xf2, 0xb5, 0x30, 0x37, 0xc5, 0x07, 0x42, 0x65, 0x9f, 0xd6, 0x52, 0x58,
- 0xcc, 0x50, 0xa7, 0x8d, 0xca, 0xf4, 0x31, 0x8c, 0xca, 0x00, 0x53, 0x7e, 0x2a, 0x1f, 0x53, 0x3e,
- 0x33, 0xbc, 0x29, 0x9f, 0x7d, 0xac, 0xa6, 0x9c, 0xe4, 0x62, 0xca, 0x9f, 0x85, 0xd1, 0x76, 0x18,
- 0x1c, 0x74, 0xe7, 0x4e, 0xa7, 0xdd, 0xf3, 0x2d, 0x06, 0x44, 0x81, 0x33, 0x0b, 0xe8, 0xce, 0x3c,
- 0xbc, 0x80, 0xce, 0x7e, 0xbd, 0x00, 0x67, 0xb5, 0xa5, 0x63, 0xf3, 0xcb, 0xab, 0xb1, 0xb5, 0xce,
- 0x6f, 0x66, 0x8a, 0xa2, 0x0d, 0x23, 0xf1, 0xa9, 0x73, 0xa8, 0x0a, 0x83, 0x06, 0x15, 0xcf, 0x1f,
- 0xd2, 0x90, 0x97, 0xfd, 0x66, 0xcd, 0xe0, 0x8a, 0x84, 0xa3, 0xa2, 0xe0, 0xef, 0xf2, 0xd1, 0x30,
- 0x96, 0x67, 0x32, 0xd9, 0x8a, 0xa6, 0x15, 0x8d, 0x42, 0x93, 0x8e, 0xb9, 0x8b, 0x6e, 0xb2, 0x04,
- 0x99, 0x29, 0x9c, 0x14, 0xee, 0xa2, 0x5a, 0x75, 0x0a, 0x9b, 0xa8, 0xc3, 0x13, 0xc5, 0xa3, 0xbd,
- 0xea, 0xf0, 0x2c, 0x84, 0xa2, 0xb0, 0xff, 0xcd, 0x82, 0x37, 0xf4, 0x1d, 0x8a, 0x27, 0xb0, 0xbd,
- 0x1d, 0xa4, 0xb7, 0xb7, 0xed, 0xe1, 0xb7, 0xb7, 0x9e, 0x5e, 0x0c, 0xd8, 0xea, 0xfe, 0xdc, 0x82,
- 0x69, 0x4d, 0xff, 0x04, 0xba, 0xea, 0xe5, 0xfa, 0xc2, 0x9e, 0x56, 0x5d, 0x94, 0xa3, 0xa6, 0xfa,
- 0xf6, 0x1d, 0xde, 0x37, 0x11, 0xcc, 0x2d, 0xbb, 0xc9, 0x03, 0x34, 0x47, 0x04, 0x31, 0x5d, 0x18,
- 0xe3, 0x57, 0xf8, 0xa3, 0x7c, 0x82, 0xca, 0xb4, 0x7c, 0x7e, 0x02, 0xa4, 0x83, 0x4a, 0xfe, 0x33,
- 0x42, 0x29, 0x90, 0x17, 0xa5, 0x7b, 0x11, 0xb3, 0x97, 0x55, 0x99, 0x72, 0xd5, 0x45, 0xe9, 0x12,
- 0x8e, 0x8a, 0xc2, 0x6e, 0xc1, 0x5c, 0x9a, 0xf9, 0x2a, 0xad, 0xf1, 0xdc, 0xdd, 0xb1, 0xba, 0xb9,
- 0x04, 0x65, 0x87, 0xb7, 0x5a, 0xef, 0x38, 0xd9, 0x57, 0x68, 0x96, 0x13, 0x04, 0x6a, 0x1a, 0xfb,
- 0x57, 0x2d, 0x38, 0xdd, 0xa7, 0x33, 0x39, 0xa6, 0x9a, 0x63, 0x6d, 0x05, 0x06, 0xbc, 0x0c, 0x54,
- 0xa5, 0x35, 0x27, 0xc9, 0x0e, 0x19, 0x56, 0x6d, 0x55, 0x80, 0x31, 0xc1, 0xdb, 0xff, 0x68, 0xc1,
- 0xa9, 0xb4, 0xae, 0x11, 0xb9, 0x06, 0x44, 0x74, 0x66, 0xd5, 0x8b, 0xdc, 0x60, 0x9f, 0x86, 0x5d,
- 0xd6, 0x73, 0xa1, 0xf5, 0xbc, 0xe4, 0x44, 0x96, 0x7b, 0x28, 0xb0, 0x4f, 0x2b, 0x5e, 0xfb, 0x5b,
- 0x55, 0xa3, 0x9d, 0xcc, 0x94, 0xdb, 0x79, 0xce, 0x14, 0xfd, 0x31, 0xcd, 0x08, 0x5a, 0x89, 0x44,
- 0x53, 0xbe, 0xfd, 0xdd, 0x11, 0x50, 0x67, 0x51, 0x3c, 0x0f, 0x91, 0x53, 0x16, 0x27, 0xf5, 0x54,
- 0x51, 0xf1, 0x04, 0x4f, 0x15, 0x8d, 0x3c, 0x2c, 0x47, 0x20, 0xde, 0xcd, 0xd1, 0xbe, 0xa8, 0x61,
- 0xf4, 0x77, 0x34, 0x0a, 0x4d, 0x3a, 0xa6, 0x49, 0xd3, 0xdb, 0xa7, 0xa2, 0xd1, 0x58, 0x5a, 0x93,
- 0xf5, 0x04, 0x81, 0x9a, 0x86, 0x69, 0x52, 0xf5, 0x6a, 0x35, 0x19, 0x29, 0x2a, 0x4d, 0xd8, 0xe8,
- 0x20, 0xc7, 0x30, 0x8a, 0x46, 0x10, 0xec, 0x49, 0xff, 0x4f, 0x51, 0x5c, 0x0d, 0x82, 0x3d, 0xe4,
- 0x18, 0xe6, 0xb1, 0xf8, 0x41, 0xd8, 0x72, 0x9a, 0xde, 0x87, 0x68, 0x55, 0x49, 0x91, 0x7e, 0x9f,
- 0xf2, 0x58, 0x6e, 0xf4, 0x92, 0x60, 0xbf, 0x76, 0x6c, 0x06, 0xb6, 0x43, 0x5a, 0xf5, 0xdc, 0xd8,
- 0xe4, 0x06, 0xe9, 0x19, 0xb8, 0xd5, 0x43, 0x81, 0x7d, 0x5a, 0x91, 0x65, 0x38, 0x95, 0x9c, 0x25,
- 0x26, 0x35, 0x24, 0xc2, 0x19, 0x54, 0x7e, 0x38, 0xa6, 0xd1, 0x98, 0xa5, 0x67, 0xd6, 0xa6, 0x25,
- 0x2b, 0x79, 0xb8, 0x9b, 0x68, 0x58, 0x9b, 0xa4, 0xc2, 0x07, 0x15, 0x85, 0xfd, 0x89, 0x22, 0xdb,
- 0x1d, 0x07, 0xdc, 0xce, 0x7d, 0x62, 0x59, 0xc3, 0xf4, 0x8c, 0x1c, 0x39, 0xc6, 0x8c, 0x7c, 0x01,
- 0x26, 0xef, 0x46, 0x81, 0xaf, 0x32, 0x72, 0xa3, 0x03, 0x33, 0x72, 0x06, 0x55, 0xff, 0x8c, 0xdc,
- 0x58, 0x5e, 0x19, 0xb9, 0xf1, 0x47, 0xcc, 0xc8, 0xfd, 0xd1, 0x28, 0x9c, 0x53, 0xe7, 0xc9, 0x34,
- 0xbe, 0x17, 0x84, 0x7b, 0x9e, 0x5f, 0xe7, 0x67, 0xb0, 0x5f, 0xb5, 0x60, 0x52, 0xac, 0x17, 0xf9,
- 0x30, 0x82, 0x38, 0x73, 0xac, 0xe5, 0x74, 0x77, 0x2d, 0x25, 0x6c, 0x71, 0xc7, 0x10, 0x94, 0x79,
- 0xa5, 0xc2, 0x44, 0x61, 0x4a, 0x23, 0xf2, 0x11, 0x80, 0xe4, 0xc5, 0xac, 0x5a, 0x4e, 0xef, 0x86,
- 0x25, 0xfa, 0x21, 0xad, 0x69, 0xdf, 0x74, 0x47, 0x09, 0x41, 0x43, 0x20, 0x79, 0xdd, 0x52, 0x77,
- 0x45, 0xc4, 0x69, 0xd6, 0xab, 0x8f, 0x65, 0x6c, 0x8e, 0x73, 0x75, 0x04, 0x61, 0xdc, 0xf3, 0xeb,
- 0x6c, 0x9e, 0xc8, 0x24, 0xe6, 0x5b, 0xfa, 0xd5, 0x2f, 0xac, 0x07, 0x4e, 0xb5, 0xe2, 0x34, 0x1d,
- 0xdf, 0xa5, 0xe1, 0x9a, 0x20, 0x37, 0x9f, 0x4d, 0xe2, 0x00, 0x4c, 0x18, 0xf5, 0x5c, 0xce, 0x1c,
- 0x3d, 0xce, 0xe5, 0xcc, 0xf9, 0xf7, 0xc0, 0x6c, 0xcf, 0xc7, 0x3c, 0xd1, 0xd5, 0x91, 0x47, 0xbf,
- 0x75, 0x62, 0xff, 0xde, 0x98, 0xde, 0xb4, 0x6e, 0x04, 0x55, 0x71, 0x45, 0x30, 0xd4, 0x5f, 0x54,
- 0xfa, 0x9e, 0x39, 0x4e, 0x11, 0xe3, 0xe9, 0x25, 0x05, 0x44, 0x53, 0x24, 0x9b, 0xa3, 0x6d, 0x27,
- 0xa4, 0xfe, 0xe3, 0x9e, 0xa3, 0x5b, 0x4a, 0x08, 0x1a, 0x02, 0x49, 0x23, 0x75, 0xdc, 0x7a, 0x79,
- 0xf8, 0xe3, 0x56, 0xe6, 0x0e, 0xf7, 0xbd, 0xca, 0xf5, 0x05, 0x0b, 0xa6, 0xfd, 0xd4, 0xcc, 0x95,
- 0x47, 0x6e, 0x3b, 0x8f, 0x63, 0x55, 0x88, 0xab, 0xd9, 0x69, 0x18, 0x66, 0xe4, 0xf7, 0xdb, 0xd2,
- 0x46, 0x4f, 0xb8, 0xa5, 0xe9, 0xbb, 0xc6, 0x63, 0x83, 0xee, 0x1a, 0x13, 0x5f, 0xbd, 0x32, 0x30,
- 0x9e, 0xfb, 0x2b, 0x03, 0xd0, 0xe7, 0x85, 0x81, 0x3b, 0x50, 0x76, 0x43, 0xea, 0xc4, 0x8f, 0x78,
- 0xe1, 0x9c, 0x3f, 0x76, 0xb7, 0x92, 0x30, 0x40, 0xcd, 0xcb, 0xfe, 0x93, 0x22, 0xcc, 0x24, 0x23,
- 0x92, 0x1c, 0x45, 0xb1, 0xfd, 0x51, 0xc8, 0xd5, 0xce, 0xad, 0xda, 0x1f, 0xaf, 0x26, 0x08, 0xd4,
- 0x34, 0xcc, 0x1f, 0xeb, 0x44, 0x74, 0xb3, 0x4d, 0xfd, 0x75, 0x6f, 0x37, 0xe2, 0x23, 0x6e, 0x94,
- 0x90, 0xdd, 0xd2, 0x28, 0x34, 0xe9, 0x98, 0x33, 0x2e, 0xfc, 0xe2, 0x28, 0x7b, 0xb2, 0x2b, 0xfd,
- 0x6d, 0x4c, 0xf0, 0xe4, 0x2b, 0x7d, 0x9f, 0x0b, 0xc9, 0xa7, 0xa6, 0xa1, 0xe7, 0x04, 0xee, 0x84,
- 0xef, 0x84, 0x7c, 0xde, 0x82, 0x53, 0x7b, 0xa9, 0xfa, 0x95, 0xc4, 0x24, 0x0f, 0x59, 0x69, 0x99,
- 0x2e, 0x8a, 0xd1, 0x53, 0x38, 0x0d, 0x8f, 0x30, 0x2b, 0xdd, 0xfe, 0x17, 0x0b, 0x4c, 0xf3, 0x74,
- 0x3c, 0xcf, 0xca, 0x78, 0x00, 0xaa, 0x70, 0xc4, 0x03, 0x50, 0x89, 0x13, 0x56, 0x3c, 0x9e, 0xd3,
- 0x3f, 0x72, 0x02, 0xa7, 0x7f, 0x74, 0xa0, 0xd7, 0xf6, 0x46, 0x28, 0x76, 0xbc, 0xaa, 0xf4, 0xdb,
- 0xf5, 0x61, 0xd8, 0xda, 0x2a, 0x32, 0xb8, 0xfd, 0x3b, 0xa3, 0x3a, 0x4e, 0x97, 0x47, 0xf1, 0x3f,
- 0x14, 0xdd, 0xae, 0xa9, 0xc2, 0x59, 0xd1, 0xf3, 0x1b, 0x3d, 0x85, 0xb3, 0xef, 0x3e, 0x79, 0xa5,
- 0x85, 0x18, 0xa0, 0x41, 0x75, 0xb3, 0xe3, 0x47, 0x94, 0x59, 0xdc, 0x85, 0x12, 0x0b, 0x6d, 0x78,
- 0xc2, 0xad, 0x94, 0x52, 0xaa, 0x74, 0x55, 0xc2, 0x1f, 0x1c, 0x2e, 0xbc, 0xeb, 0xe4, 0x6a, 0x25,
- 0xad, 0x51, 0xf1, 0x27, 0x11, 0x94, 0xd9, 0xdf, 0xbc, 0x22, 0x44, 0x06, 0x4d, 0xb7, 0x94, 0x2d,
- 0x4a, 0x10, 0xb9, 0x94, 0x9b, 0x68, 0x39, 0xc4, 0x87, 0x32, 0x7f, 0xaa, 0x88, 0x0b, 0x15, 0xb1,
- 0xd5, 0x96, 0xaa, 0xcb, 0x48, 0x10, 0x0f, 0x0e, 0x17, 0x5e, 0x3a, 0xb9, 0x50, 0xd5, 0x1c, 0xb5,
- 0x08, 0xfb, 0x6f, 0x8a, 0x7a, 0xee, 0xca, 0x7a, 0xe9, 0x1f, 0x8a, 0xb9, 0xfb, 0x62, 0x66, 0xee,
- 0x5e, 0xe8, 0x99, 0xbb, 0xd3, 0xfa, 0x39, 0x9f, 0xd4, 0x6c, 0x7c, 0xd2, 0x1b, 0xec, 0xd1, 0x71,
- 0x3c, 0xf7, 0x2c, 0x5e, 0xeb, 0x78, 0x21, 0x8d, 0xb6, 0xc2, 0x8e, 0xef, 0xf9, 0x75, 0xf9, 0xa8,
- 0xa3, 0xe1, 0x59, 0xa4, 0xd0, 0x98, 0xa5, 0xb7, 0xbf, 0xc6, 0xcf, 0x3b, 0x8d, 0xe2, 0x32, 0xf6,
- 0x95, 0x9b, 0xfc, 0xb5, 0x27, 0x51, 0x51, 0xaa, 0xbe, 0xb2, 0x78, 0xe2, 0x49, 0xe0, 0xc8, 0x3d,
- 0x18, 0xdf, 0x15, 0x2f, 0x4e, 0xe4, 0x73, 0xc5, 0x49, 0x3e, 0x5f, 0xc1, 0x2f, 0x93, 0x26, 0x6f,
- 0x59, 0x3c, 0xd0, 0x7f, 0x62, 0x22, 0xcd, 0xfe, 0xf9, 0x22, 0x9c, 0xca, 0xbc, 0x45, 0xc4, 0x02,
- 0xfe, 0xe4, 0xe1, 0xa9, 0x6c, 0x76, 0x5e, 0x3d, 0x6a, 0xac, 0x28, 0xc8, 0x07, 0x01, 0xaa, 0xb4,
- 0xdd, 0x0c, 0xba, 0xdc, 0x71, 0x19, 0x39, 0xb1, 0xe3, 0xa2, 0x7c, 0xdd, 0x55, 0xc5, 0x05, 0x0d,
- 0x8e, 0xb2, 0x8c, 0x76, 0x54, 0xbc, 0xa7, 0x91, 0x2e, 0xa3, 0x35, 0x6e, 0xfa, 0x8d, 0x3d, 0xd9,
- 0x9b, 0x7e, 0x1e, 0x9c, 0x12, 0x2a, 0xaa, 0x12, 0xae, 0x47, 0xa8, 0xd4, 0x3a, 0xcd, 0x66, 0xd4,
- 0x6a, 0x9a, 0x0d, 0x66, 0xf9, 0xda, 0x9f, 0x2b, 0x30, 0xf7, 0x4d, 0x0c, 0xf6, 0x46, 0x92, 0x1c,
- 0x7f, 0x33, 0x8c, 0x39, 0x9d, 0xb8, 0x11, 0xf4, 0xbc, 0x00, 0xb2, 0xcc, 0xa1, 0x28, 0xb1, 0x64,
- 0x1d, 0x46, 0xaa, 0x4e, 0x9c, 0x3c, 0xca, 0x7f, 0x12, 0xe5, 0x74, 0x26, 0xcc, 0x89, 0x29, 0x72,
- 0x2e, 0xe4, 0x19, 0x18, 0x89, 0x9d, 0x7a, 0xea, 0x05, 0xcf, 0x1d, 0xa7, 0x1e, 0x21, 0x87, 0x9a,
- 0xbb, 0xcb, 0xc8, 0x11, 0xbb, 0xcb, 0x4b, 0xc6, 0x3f, 0x9c, 0x30, 0x4e, 0x5d, 0x7a, 0xff, 0x49,
- 0x84, 0x28, 0xec, 0x4f, 0xd1, 0xda, 0xff, 0x0f, 0x26, 0xcd, 0x7f, 0x22, 0x71, 0xac, 0xbb, 0x46,
- 0xf6, 0xdf, 0x8f, 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, 0x55, 0x0e, 0x45, 0x89, 0x65, 0x01, 0xec, 0x64,
- 0xc4, 0x8d, 0xa2, 0xb0, 0x11, 0x72, 0xd5, 0x5c, 0xcb, 0xe3, 0xd5, 0x34, 0x59, 0xd2, 0xca, 0x03,
- 0x7a, 0x13, 0x82, 0x29, 0x89, 0xe4, 0x93, 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, 0x3f, 0x80, 0x29, 0x8b,
- 0xe8, 0x69, 0x23, 0x01, 0xa2, 0xc6, 0xf3, 0x7f, 0xb3, 0xc4, 0x3b, 0x26, 0x82, 0x98, 0xb2, 0xf1,
- 0x6f, 0x96, 0x34, 0x18, 0x4d, 0x1a, 0xfb, 0x37, 0x2c, 0x38, 0xdb, 0x77, 0x30, 0x7e, 0x70, 0xd3,
- 0x9f, 0xf6, 0x6f, 0x15, 0xe0, 0x74, 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,
- 0x56, 0x00, 0xe3, 0x01, 0x4c, 0xf2, 0x51, 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, 0xcf, 0x5a, 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, 0x4b, 0xad,
- 0x76, 0xdc, 0x95, 0x36, 0x59, 0xdf, 0x9d, 0x55, 0x18, 0x34, 0xa8, 0xec, 0x7f, 0xb5, 0xc4, 0xe7,
- 0x94, 0x3e, 0xfa, 0x8b, 0x99, 0x3b, 0x8d, 0xc7, 0x77, 0x6f, 0x7f, 0x12, 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, 0x9f, 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, 0xed, 0x51, 0x8a, 0xdf, 0x48, 0x0a, 0x92, 0x67, 0x23, 0x8c, 0x19, 0xc8, 0xef,
- 0x47, 0xa2, 0xc0, 0x31, 0x07, 0x7f, 0x26, 0xcb, 0x9e, 0x7c, 0xd9, 0x82, 0xd9, 0x28, 0xcb, 0xef,
- 0x71, 0x8d, 0x9d, 0xca, 0x5c, 0xf5, 0xa0, 0xb0, 0x57, 0x09, 0xfb, 0x3f, 0xa5, 0x79, 0x12, 0xff,
- 0x82, 0x4c, 0x6d, 0x2e, 0xd6, 0xc0, 0xcd, 0x85, 0x2d, 0x31, 0xb7, 0x41, 0xab, 0x9d, 0x66, 0x4f,
- 0x6d, 0xce, 0xb6, 0x84, 0xa3, 0xa2, 0x48, 0xbd, 0x8f, 0x57, 0x3c, 0xf2, 0x7d, 0xbc, 0x17, 0x60,
- 0xd2, 0x7c, 0x1a, 0x85, 0xa7, 0xd0, 0xe4, 0xe1, 0x83, 0xf9, 0x8a, 0x0a, 0xa6, 0xa8, 0x32, 0xef,
- 0xab, 0x8d, 0x1e, 0xf9, 0xbe, 0xda, 0x73, 0x50, 0x92, 0x6f, 0x85, 0x25, 0xf9, 0x5d, 0x51, 0xf8,
- 0x23, 0x61, 0xa8, 0xb0, 0xcc, 0x40, 0xb4, 0x1c, 0xbf, 0xe3, 0x34, 0xd9, 0x08, 0xc9, 0x7a, 0x40,
- 0xb5, 0xb2, 0x36, 0x14, 0x06, 0x0d, 0x2a, 0xd6, 0xe3, 0xd8, 0x6b, 0xd1, 0x57, 0x02, 0x3f, 0xc9,
- 0x8c, 0xa8, 0x1e, 0xef, 0x48, 0x38, 0x2a, 0x0a, 0xfb, 0xef, 0x2c, 0xc8, 0x3e, 0x74, 0x94, 0xaa,
- 0x41, 0xb4, 0x8e, 0xac, 0x41, 0x4c, 0xd7, 0x57, 0x15, 0x8e, 0x55, 0x5f, 0x65, 0x96, 0x3e, 0x15,
- 0x1f, 0x5a, 0xfa, 0xf4, 0x26, 0x7d, 0xaf, 0x5d, 0xd4, 0x48, 0x4d, 0xf4, 0xbb, 0xd3, 0x4e, 0x6c,
- 0x18, 0x73, 0x1d, 0x55, 0xe2, 0x3d, 0x29, 0xdc, 0xaa, 0x95, 0x65, 0x4e, 0x24, 0x31, 0x95, 0xdd,
- 0x6f, 0x7c, 0xef, 0xfc, 0x53, 0xdf, 0xfc, 0xde, 0xf9, 0xa7, 0xbe, 0xfd, 0xbd, 0xf3, 0x4f, 0x7d,
- 0xfc, 0xfe, 0x79, 0xeb, 0x1b, 0xf7, 0xcf, 0x5b, 0xdf, 0xbc, 0x7f, 0xde, 0xfa, 0xf6, 0xfd, 0xf3,
- 0xd6, 0x77, 0xef, 0x9f, 0xb7, 0xbe, 0xf0, 0xd7, 0xe7, 0x9f, 0x7a, 0xe5, 0xdd, 0xc3, 0xfc, 0xcf,
- 0xdb, 0xff, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x8e, 0x56, 0xe9, 0x32, 0x77, 0x00, 0x00,
+ // 6868 bytes of a gzipped FileDescriptorProto
+ 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x5b, 0x6c, 0x24, 0xc9,
+ 0x71, 0xe0, 0x56, 0x37, 0x1f, 0xdd, 0xc1, 0xc7, 0x90, 0x39, 0x8f, 0xa5, 0x78, 0xab, 0xe1, 0xa0,
+ 0x16, 0x92, 0xf6, 0x4e, 0x12, 0x79, 0x3b, 0xb7, 0xd2, 0xed, 0x69, 0x75, 0x2b, 0xb1, 0xc9, 0x79,
+ 0x70, 0x86, 0xaf, 0x0d, 0x72, 0x66, 0x4e, 0x2b, 0x9d, 0x6e, 0x8b, 0xd5, 0xd9, 0xdd, 0x35, 0xec,
+ 0xae, 0xea, 0xad, 0xaa, 0xe6, 0xb0, 0xa5, 0xd3, 0x0b, 0x90, 0x2d, 0x01, 0x7a, 0x42, 0xf2, 0x87,
+ 0x04, 0x18, 0xb6, 0xfc, 0x80, 0x01, 0x7f, 0x08, 0xb6, 0x7f, 0xfc, 0x80, 0xe1, 0x0f, 0xcb, 0x3f,
+ 0x32, 0xfc, 0x61, 0x01, 0x36, 0x2c, 0xd9, 0x82, 0x69, 0x69, 0x6c, 0x43, 0xb6, 0x01, 0xdb, 0xb0,
+ 0xad, 0x1f, 0x0f, 0xfc, 0x61, 0xe4, 0xa3, 0x32, 0xb3, 0xaa, 0xbb, 0x87, 0xe4, 0x74, 0xcd, 0x58,
+ 0x10, 0xfc, 0xc7, 0x8e, 0x88, 0x8c, 0x88, 0xcc, 0xca, 0x8c, 0x8c, 0x88, 0x8c, 0x4c, 0xc2, 0x7a,
+ 0xdd, 0x8b, 0x1b, 0x9d, 0xbd, 0x45, 0x37, 0x68, 0x2d, 0x39, 0x61, 0x3d, 0x68, 0x87, 0xc1, 0x5d,
+ 0xfe, 0xc7, 0xdb, 0xdd, 0xea, 0xd2, 0xc1, 0xe5, 0xa5, 0xf6, 0x7e, 0x7d, 0xc9, 0x69, 0x7b, 0xd1,
+ 0x92, 0xd3, 0x6e, 0x37, 0x3d, 0xd7, 0x89, 0xbd, 0xc0, 0x5f, 0x3a, 0x78, 0xde, 0x69, 0xb6, 0x1b,
+ 0xce, 0xf3, 0x4b, 0x75, 0xea, 0xd3, 0xd0, 0x89, 0x69, 0x75, 0xb1, 0x1d, 0x06, 0x71, 0x40, 0xde,
+ 0xad, 0xb9, 0x2d, 0x26, 0xdc, 0xf8, 0x1f, 0xff, 0xcf, 0xad, 0x2e, 0x1e, 0x5c, 0x5e, 0x6c, 0xef,
+ 0xd7, 0x17, 0x19, 0xb7, 0x45, 0x83, 0xdb, 0x62, 0xc2, 0x6d, 0xfe, 0xed, 0x86, 0x2e, 0xf5, 0xa0,
+ 0x1e, 0x2c, 0x71, 0xa6, 0x7b, 0x9d, 0x1a, 0xff, 0xc5, 0x7f, 0xf0, 0xbf, 0x84, 0xb0, 0x79, 0x7b,
+ 0xff, 0xc5, 0x68, 0xd1, 0x0b, 0x98, 0x7a, 0x4b, 0x6e, 0x10, 0xd2, 0xa5, 0x83, 0x1e, 0x85, 0xe6,
+ 0x5f, 0xd0, 0x34, 0x2d, 0xc7, 0x6d, 0x78, 0x3e, 0x0d, 0xbb, 0xba, 0x4f, 0x2d, 0x1a, 0x3b, 0xfd,
+ 0x5a, 0x2d, 0x0d, 0x6a, 0x15, 0x76, 0xfc, 0xd8, 0x6b, 0xd1, 0x9e, 0x06, 0xef, 0x3c, 0xae, 0x41,
+ 0xe4, 0x36, 0x68, 0xcb, 0xc9, 0xb6, 0xb3, 0x5f, 0x87, 0xa9, 0xe5, 0x3b, 0x3b, 0xcb, 0x9d, 0xb8,
+ 0xb1, 0x12, 0xf8, 0x35, 0xaf, 0x4e, 0xde, 0x01, 0x13, 0x6e, 0xb3, 0x13, 0xc5, 0x34, 0xdc, 0x74,
+ 0x5a, 0x74, 0xce, 0xba, 0x64, 0x3d, 0x57, 0xae, 0x9c, 0xfd, 0xe6, 0xd1, 0xc2, 0x53, 0xf7, 0x8f,
+ 0x16, 0x26, 0x56, 0x34, 0x0a, 0x4d, 0x3a, 0xf2, 0x5f, 0x61, 0x3c, 0x0c, 0x9a, 0x74, 0x19, 0x37,
+ 0xe7, 0x0a, 0xbc, 0xc9, 0x19, 0xd9, 0x64, 0x1c, 0x05, 0x18, 0x13, 0xbc, 0xfd, 0x27, 0x05, 0x80,
+ 0xe5, 0x76, 0x7b, 0x3b, 0x0c, 0xee, 0x52, 0x37, 0x26, 0xaf, 0x41, 0x89, 0x8d, 0x42, 0xd5, 0x89,
+ 0x1d, 0x2e, 0x6d, 0xe2, 0xf2, 0x7f, 0x5f, 0x14, 0x9d, 0x59, 0x34, 0x3b, 0xa3, 0xbf, 0x1c, 0xa3,
+ 0x5e, 0x3c, 0x78, 0x7e, 0x71, 0x6b, 0x8f, 0xb5, 0xdf, 0xa0, 0xb1, 0x53, 0x21, 0x52, 0x18, 0x68,
+ 0x18, 0x2a, 0xae, 0xc4, 0x87, 0x91, 0xa8, 0x4d, 0x5d, 0xae, 0xd8, 0xc4, 0xe5, 0xf5, 0xc5, 0x61,
+ 0xa6, 0xc8, 0xa2, 0xd6, 0x7c, 0xa7, 0x4d, 0xdd, 0xca, 0xa4, 0x94, 0x3c, 0xc2, 0x7e, 0x21, 0x97,
+ 0x43, 0x0e, 0x60, 0x2c, 0x8a, 0x9d, 0xb8, 0x13, 0xcd, 0x15, 0xb9, 0xc4, 0xcd, 0xdc, 0x24, 0x72,
+ 0xae, 0x95, 0x69, 0x29, 0x73, 0x4c, 0xfc, 0x46, 0x29, 0xcd, 0xfe, 0x73, 0x0b, 0xa6, 0x35, 0xf1,
+ 0xba, 0x17, 0xc5, 0xe4, 0x03, 0x3d, 0x83, 0xbb, 0x78, 0xb2, 0xc1, 0x65, 0xad, 0xf9, 0xd0, 0xce,
+ 0x48, 0x61, 0xa5, 0x04, 0x62, 0x0c, 0x6c, 0x0b, 0x46, 0xbd, 0x98, 0xb6, 0xa2, 0xb9, 0xc2, 0xa5,
+ 0xe2, 0x73, 0x13, 0x97, 0xaf, 0xe7, 0xd5, 0xcf, 0xca, 0x94, 0x14, 0x3a, 0xba, 0xc6, 0xd8, 0xa3,
+ 0x90, 0x62, 0xff, 0xfa, 0x84, 0xd9, 0x3f, 0x36, 0xe0, 0xe4, 0x79, 0x98, 0x88, 0x82, 0x4e, 0xe8,
+ 0x52, 0xa4, 0xed, 0x20, 0x9a, 0xb3, 0x2e, 0x15, 0xd9, 0xd4, 0x63, 0x33, 0x75, 0x47, 0x83, 0xd1,
+ 0xa4, 0x21, 0x9f, 0xb7, 0x60, 0xb2, 0x4a, 0xa3, 0xd8, 0xf3, 0xb9, 0xfc, 0x44, 0xf9, 0xdd, 0xa1,
+ 0x95, 0x4f, 0x80, 0xab, 0x9a, 0x79, 0xe5, 0x9c, 0xec, 0xc8, 0xa4, 0x01, 0x8c, 0x30, 0x25, 0x9f,
+ 0xad, 0xb8, 0x2a, 0x8d, 0xdc, 0xd0, 0x6b, 0xb3, 0xdf, 0x7c, 0xce, 0x18, 0x2b, 0x6e, 0x55, 0xa3,
+ 0xd0, 0xa4, 0x23, 0x3e, 0x8c, 0xb2, 0x15, 0x15, 0xcd, 0x8d, 0x70, 0xfd, 0xd7, 0x86, 0xd3, 0x5f,
+ 0x0e, 0x2a, 0x5b, 0xac, 0x7a, 0xf4, 0xd9, 0xaf, 0x08, 0x85, 0x18, 0xf2, 0x39, 0x0b, 0xe6, 0xe4,
+ 0x8a, 0x47, 0x2a, 0x06, 0xf4, 0x4e, 0xc3, 0x8b, 0x69, 0xd3, 0x8b, 0xe2, 0xb9, 0x51, 0xae, 0xc3,
+ 0xd2, 0xc9, 0xe6, 0xd6, 0xb5, 0x30, 0xe8, 0xb4, 0x6f, 0x7a, 0x7e, 0xb5, 0x72, 0x49, 0x4a, 0x9a,
+ 0x5b, 0x19, 0xc0, 0x18, 0x07, 0x8a, 0x24, 0x5f, 0xb6, 0x60, 0xde, 0x77, 0x5a, 0x34, 0x6a, 0x3b,
+ 0xec, 0xd3, 0x0a, 0x74, 0xa5, 0xe9, 0xb8, 0xfb, 0x5c, 0xa3, 0xb1, 0x47, 0xd3, 0xc8, 0x96, 0x1a,
+ 0xcd, 0x6f, 0x0e, 0x64, 0x8d, 0x0f, 0x11, 0x4b, 0x7e, 0xc1, 0x82, 0xd9, 0x20, 0x6c, 0x37, 0x1c,
+ 0x9f, 0x56, 0x13, 0x6c, 0x34, 0x37, 0xce, 0x97, 0xde, 0x07, 0x87, 0xfb, 0x44, 0x5b, 0x59, 0xb6,
+ 0x1b, 0x81, 0xef, 0xc5, 0x41, 0xb8, 0x43, 0xe3, 0xd8, 0xf3, 0xeb, 0x51, 0xe5, 0xfc, 0xfd, 0xa3,
+ 0x85, 0xd9, 0x1e, 0x2a, 0xec, 0xd5, 0x87, 0x7c, 0x18, 0x26, 0xa2, 0xae, 0xef, 0xde, 0xf1, 0xfc,
+ 0x6a, 0x70, 0x2f, 0x9a, 0x2b, 0xe5, 0xb1, 0x7c, 0x77, 0x14, 0x43, 0xb9, 0x00, 0xb5, 0x00, 0x34,
+ 0xa5, 0xf5, 0xff, 0x70, 0x7a, 0x2a, 0x95, 0xf3, 0xfe, 0x70, 0x7a, 0x32, 0x3d, 0x44, 0x2c, 0xf9,
+ 0x94, 0x05, 0x53, 0x91, 0x57, 0xf7, 0x9d, 0xb8, 0x13, 0xd2, 0x9b, 0xb4, 0x1b, 0xcd, 0x01, 0x57,
+ 0xe4, 0xc6, 0x90, 0xa3, 0x62, 0xb0, 0xac, 0x9c, 0x97, 0x3a, 0x4e, 0x99, 0xd0, 0x08, 0xd3, 0x72,
+ 0xfb, 0x2d, 0x34, 0x3d, 0xad, 0x27, 0xf2, 0x5d, 0x68, 0x7a, 0x52, 0x0f, 0x14, 0x49, 0xde, 0x0b,
+ 0x33, 0x02, 0xa4, 0x46, 0x36, 0x9a, 0x9b, 0xe4, 0x86, 0xf6, 0xdc, 0xfd, 0xa3, 0x85, 0x99, 0x9d,
+ 0x0c, 0x0e, 0x7b, 0xa8, 0xed, 0xdf, 0x2f, 0xc0, 0x4c, 0x76, 0x17, 0x23, 0xbf, 0x64, 0xc1, 0x99,
+ 0xbb, 0xf7, 0xe2, 0xdd, 0x60, 0x9f, 0xfa, 0x51, 0xa5, 0xcb, 0x6c, 0x0d, 0xb7, 0xdf, 0x13, 0x97,
+ 0xdd, 0x7c, 0xf7, 0xcb, 0xc5, 0x1b, 0x69, 0x29, 0x57, 0xfc, 0x38, 0xec, 0x56, 0x9e, 0x96, 0x23,
+ 0x72, 0xe6, 0xc6, 0x9d, 0x5d, 0x13, 0x8b, 0x59, 0xa5, 0xe6, 0x3f, 0x63, 0xc1, 0xb9, 0x7e, 0x2c,
+ 0xc8, 0x0c, 0x14, 0xf7, 0x69, 0x57, 0xb8, 0x48, 0xc8, 0xfe, 0x24, 0xff, 0x17, 0x46, 0x0f, 0x9c,
+ 0x66, 0x87, 0x4a, 0x57, 0xe3, 0xda, 0x70, 0x1d, 0x51, 0x9a, 0xa1, 0xe0, 0xfa, 0xae, 0xc2, 0x8b,
+ 0x96, 0xfd, 0x87, 0x45, 0x98, 0x30, 0x36, 0x9b, 0x27, 0xe0, 0x3e, 0x05, 0x29, 0xf7, 0x69, 0x23,
+ 0xb7, 0x7d, 0x72, 0xa0, 0xff, 0x74, 0x2f, 0xe3, 0x3f, 0x6d, 0xe5, 0x27, 0xf2, 0xa1, 0x0e, 0x14,
+ 0x89, 0xa1, 0x1c, 0xb4, 0x99, 0x7b, 0xcc, 0xf6, 0xe1, 0x91, 0x3c, 0x3e, 0xe1, 0x56, 0xc2, 0xae,
+ 0x32, 0x75, 0xff, 0x68, 0xa1, 0xac, 0x7e, 0xa2, 0x16, 0x64, 0x7f, 0xdb, 0x82, 0x73, 0x86, 0x8e,
+ 0x2b, 0x81, 0x5f, 0xf5, 0xf8, 0xa7, 0xbd, 0x04, 0x23, 0x71, 0xb7, 0x9d, 0xf8, 0xe0, 0x6a, 0xa4,
+ 0x76, 0xbb, 0x6d, 0x8a, 0x1c, 0xc3, 0xbc, 0xee, 0x16, 0x8d, 0x22, 0xa7, 0x4e, 0xb3, 0x5e, 0xf7,
+ 0x86, 0x00, 0x63, 0x82, 0x27, 0x21, 0x90, 0xa6, 0x13, 0xc5, 0xbb, 0xa1, 0xe3, 0x47, 0x9c, 0xfd,
+ 0xae, 0xd7, 0xa2, 0x72, 0x80, 0xff, 0xdb, 0xc9, 0x66, 0x0c, 0x6b, 0x51, 0xb9, 0x70, 0xff, 0x68,
+ 0x81, 0xac, 0xf7, 0x70, 0xc2, 0x3e, 0xdc, 0xed, 0x2f, 0x5b, 0x70, 0xa1, 0xbf, 0x63, 0x44, 0xde,
+ 0x0c, 0x63, 0x11, 0x0d, 0x0f, 0x68, 0x28, 0x7b, 0xa7, 0x3f, 0x09, 0x87, 0xa2, 0xc4, 0x92, 0x25,
+ 0x28, 0x2b, 0xa3, 0x2d, 0xfb, 0x38, 0x2b, 0x49, 0xcb, 0xda, 0xd2, 0x6b, 0x1a, 0x36, 0x68, 0xec,
+ 0x87, 0x74, 0xa3, 0xd4, 0xa0, 0xf1, 0x88, 0x85, 0x63, 0xec, 0xbf, 0xb0, 0xe0, 0x8c, 0xa1, 0xd5,
+ 0x13, 0xf0, 0x93, 0xfd, 0xb4, 0x9f, 0xbc, 0x96, 0xdb, 0x7c, 0x1e, 0xe0, 0x28, 0xff, 0xde, 0x28,
+ 0xcc, 0x9a, 0xb3, 0x9e, 0xdb, 0x63, 0x1e, 0xa2, 0xd1, 0x76, 0x70, 0x0b, 0xd7, 0xe5, 0x98, 0xeb,
+ 0x10, 0x4d, 0x80, 0x31, 0xc1, 0xb3, 0x41, 0x6c, 0x3b, 0x71, 0x43, 0x0e, 0xb8, 0x1a, 0xc4, 0x6d,
+ 0x27, 0x6e, 0x20, 0xc7, 0x90, 0x97, 0x61, 0x3a, 0x76, 0xc2, 0x3a, 0x8d, 0x91, 0x1e, 0x78, 0x51,
+ 0xb2, 0x5e, 0xca, 0x95, 0x0b, 0x92, 0x76, 0x7a, 0x37, 0x85, 0xc5, 0x0c, 0x35, 0x79, 0x1d, 0x46,
+ 0x1a, 0xb4, 0xd9, 0x92, 0x9e, 0xd1, 0x4e, 0x7e, 0x2b, 0x9c, 0xf7, 0xf5, 0x3a, 0x6d, 0xb6, 0x2a,
+ 0x25, 0xa6, 0x32, 0xfb, 0x0b, 0xb9, 0x28, 0xf2, 0x13, 0x16, 0x94, 0xf7, 0x3b, 0x51, 0x1c, 0xb4,
+ 0xbc, 0x0f, 0xd1, 0xb9, 0x12, 0x17, 0xfc, 0x7f, 0x72, 0x16, 0x7c, 0x33, 0xe1, 0x2f, 0xd6, 0xbb,
+ 0xfa, 0x89, 0x5a, 0x32, 0xd7, 0xa3, 0xea, 0x85, 0xd4, 0x8d, 0x83, 0xb0, 0x3b, 0x07, 0x8f, 0x45,
+ 0x8f, 0xd5, 0x84, 0xbf, 0xd0, 0x43, 0xfd, 0x44, 0x2d, 0x99, 0x74, 0x61, 0xac, 0xdd, 0xec, 0xd4,
+ 0x3d, 0x7f, 0x6e, 0x82, 0xeb, 0x70, 0x2b, 0x67, 0x1d, 0xb6, 0x39, 0xf3, 0x0a, 0xb0, 0x55, 0x2d,
+ 0xfe, 0x46, 0x29, 0x90, 0x3c, 0x0b, 0xa3, 0x6e, 0xc3, 0x09, 0xe3, 0xb9, 0x49, 0x3e, 0x69, 0xd4,
+ 0x2c, 0x5e, 0x61, 0x40, 0x14, 0x38, 0xfb, 0xe7, 0x0a, 0x30, 0x3f, 0xb8, 0x63, 0x62, 0x3a, 0xbb,
+ 0x9d, 0x30, 0x12, 0x06, 0xb2, 0x64, 0x4e, 0x67, 0x0e, 0xc6, 0x04, 0x4f, 0x3e, 0x61, 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, 0xe8, 0x36, 0x3b, 0xd5, 0xc4, 0x34, 0x29, 0xd2, 0x2b,
+ 0x02, 0x8c, 0x09, 0x9e, 0x91, 0x7a, 0xbe, 0x20, 0x1d, 0x49, 0x93, 0xae, 0xf9, 0x92, 0x54, 0xe2,
+ 0xed, 0x5f, 0x1d, 0x85, 0xf3, 0x7d, 0x67, 0x3f, 0x59, 0x04, 0xe0, 0x4e, 0xc3, 0x55, 0x8f, 0xc5,
+ 0x88, 0x22, 0x30, 0x9e, 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, 0x9d, 0xf0,
+ 0xd4, 0x4e, 0x86, 0x02, 0x45, 0x68, 0x88, 0x64, 0x61, 0x70, 0x48, 0x9b, 0xd4, 0x89, 0xb8, 0xe7,
+ 0x98, 0x0d, 0x83, 0x51, 0xa3, 0xd0, 0xa4, 0x63, 0x1b, 0x09, 0xef, 0x45, 0x24, 0xc7, 0x4a, 0x6d,
+ 0x24, 0xbc, 0x9f, 0x11, 0x4a, 0x2c, 0xf9, 0x82, 0x05, 0xd3, 0x35, 0xaf, 0x49, 0xb5, 0x74, 0x19,
+ 0xb4, 0x6e, 0x0d, 0xdf, 0xc9, 0xab, 0x26, 0x5f, 0x6d, 0x02, 0x53, 0xe0, 0x08, 0x33, 0xe2, 0xd9,
+ 0x67, 0x3e, 0xa0, 0x21, 0xb7, 0x9d, 0x63, 0xe9, 0xcf, 0x7c, 0x5b, 0x80, 0x31, 0xc1, 0x93, 0x65,
+ 0x38, 0xd3, 0x76, 0xa2, 0x68, 0x25, 0xa4, 0x55, 0xea, 0xc7, 0x9e, 0xd3, 0x14, 0x21, 0x65, 0x49,
+ 0x7b, 0xb1, 0xdb, 0x69, 0x34, 0x66, 0xe9, 0xc9, 0xfb, 0xe0, 0x69, 0xaf, 0xee, 0x07, 0x21, 0xdd,
+ 0xf0, 0xa2, 0xc8, 0xf3, 0xeb, 0x7a, 0x1a, 0x70, 0x53, 0x58, 0xaa, 0x2c, 0x48, 0x56, 0x4f, 0xaf,
+ 0xf5, 0x27, 0xc3, 0x41, 0xed, 0xc9, 0xdb, 0xa0, 0x14, 0xed, 0x7b, 0xed, 0x95, 0xb0, 0x1a, 0xcd,
+ 0x95, 0x39, 0x2f, 0xb5, 0x19, 0xee, 0x48, 0x38, 0x2a, 0x0a, 0xfb, 0xab, 0x05, 0x98, 0x1b, 0xb4,
+ 0x7e, 0x48, 0xc4, 0x56, 0x49, 0x7c, 0xdb, 0x09, 0x23, 0x19, 0x0b, 0x0c, 0x19, 0x94, 0x4a, 0xbe,
+ 0xb7, 0x9d, 0xd0, 0x5c, 0x6f, 0x5c, 0x00, 0x26, 0x92, 0xc8, 0x5d, 0x18, 0x89, 0x9b, 0x4e, 0x4e,
+ 0x59, 0x2c, 0x43, 0xa2, 0xf6, 0xd8, 0xd6, 0x97, 0x23, 0xe4, 0x32, 0xc8, 0x33, 0x30, 0xd2, 0xf4,
+ 0xf6, 0x98, 0x67, 0xcb, 0x16, 0x24, 0xdf, 0xa2, 0xd6, 0xbd, 0xbd, 0x08, 0x39, 0xd4, 0xfe, 0xc7,
+ 0xb1, 0x3e, 0x26, 0x4f, 0x6d, 0x22, 0xe4, 0x32, 0x00, 0xf3, 0x60, 0xb6, 0x43, 0x5a, 0xf3, 0x0e,
+ 0xe5, 0x26, 0xae, 0x96, 0xd5, 0xa6, 0xc2, 0xa0, 0x41, 0x95, 0xb4, 0xd9, 0xe9, 0xd4, 0x58, 0x9b,
+ 0x42, 0x6f, 0x1b, 0x81, 0x41, 0x83, 0x8a, 0xbc, 0x00, 0x63, 0x5e, 0xcb, 0xa9, 0xd3, 0x44, 0xcd,
+ 0x67, 0xd8, 0x7a, 0x5a, 0xe3, 0x90, 0x07, 0x47, 0x0b, 0xd3, 0x4a, 0x21, 0x0e, 0x42, 0x49, 0x4b,
+ 0x7e, 0xd1, 0x82, 0x49, 0x37, 0x68, 0xb5, 0x02, 0x7f, 0xdd, 0xd9, 0xa3, 0xcd, 0x24, 0x31, 0x75,
+ 0xf7, 0x71, 0x6d, 0xb1, 0x8b, 0x2b, 0x86, 0x30, 0x11, 0xd4, 0xa9, 0x74, 0x9b, 0x89, 0xc2, 0x94,
+ 0x56, 0xe6, 0xb2, 0x1b, 0x3d, 0x66, 0xd9, 0xfd, 0xa6, 0x05, 0xb3, 0xa2, 0xed, 0xb2, 0xef, 0x07,
+ 0xb1, 0xcc, 0x17, 0x8a, 0xcc, 0x52, 0xf0, 0x98, 0xbb, 0x65, 0x48, 0x14, 0x7d, 0x7b, 0x83, 0x54,
+ 0x73, 0xb6, 0x07, 0x8f, 0xbd, 0x4a, 0x92, 0x6b, 0x30, 0x5b, 0x0b, 0x42, 0x97, 0x9a, 0x03, 0x21,
+ 0x6d, 0x86, 0x62, 0x74, 0x35, 0x4b, 0x80, 0xbd, 0x6d, 0xc8, 0x6d, 0xb8, 0x60, 0x00, 0xcd, 0x71,
+ 0x10, 0x66, 0xe3, 0xa2, 0xe4, 0x76, 0xe1, 0x6a, 0x5f, 0x2a, 0x1c, 0xd0, 0x7a, 0xfe, 0x3d, 0x30,
+ 0xdb, 0xf3, 0xfd, 0xfa, 0x44, 0xd4, 0xe7, 0xcc, 0x88, 0xba, 0x6c, 0x04, 0xc2, 0xf3, 0xab, 0x70,
+ 0xa1, 0xff, 0x48, 0x9d, 0x86, 0x8b, 0xfd, 0x33, 0x16, 0x3c, 0x3d, 0xc0, 0x73, 0x51, 0xa1, 0x84,
+ 0x35, 0x28, 0x94, 0x20, 0x0e, 0x14, 0xa9, 0x7f, 0x20, 0x0d, 0xc7, 0xd5, 0xe1, 0x66, 0xc4, 0x15,
+ 0xff, 0x40, 0x7c, 0xe8, 0xf1, 0xfb, 0x47, 0x0b, 0xc5, 0x2b, 0xfe, 0x01, 0x32, 0xde, 0xf6, 0x4f,
+ 0x8d, 0xa5, 0xa2, 0x95, 0x9d, 0x24, 0x40, 0xe6, 0x8a, 0xca, 0x58, 0x65, 0x2b, 0xe7, 0xb9, 0x68,
+ 0x44, 0x63, 0x22, 0x71, 0x2e, 0xc5, 0x91, 0xcf, 0x58, 0x3c, 0x57, 0x9d, 0x44, 0x71, 0xd2, 0x99,
+ 0x7a, 0x3c, 0xa9, 0x73, 0x33, 0x03, 0x9e, 0x00, 0xd1, 0x94, 0xce, 0x56, 0x72, 0x5b, 0x24, 0x7a,
+ 0xb2, 0x2e, 0x55, 0x92, 0xcd, 0x4e, 0xf0, 0xe4, 0x10, 0x20, 0xea, 0xfa, 0xee, 0x76, 0xd0, 0xf4,
+ 0xdc, 0xae, 0x0c, 0xed, 0x73, 0xc8, 0x77, 0x0a, 0x7e, 0xc2, 0xaf, 0xd2, 0xbf, 0xd1, 0x90, 0x45,
+ 0xbe, 0x66, 0xc1, 0xac, 0xd8, 0x38, 0x57, 0xbd, 0x5a, 0x8d, 0x86, 0xd4, 0x77, 0x69, 0xe2, 0x7a,
+ 0xdc, 0x19, 0x4e, 0x83, 0x24, 0x55, 0xb7, 0x96, 0x65, 0xaf, 0x97, 0x78, 0x0f, 0x0a, 0x7b, 0x95,
+ 0x21, 0x55, 0x18, 0xf1, 0xfc, 0x5a, 0x20, 0x0d, 0x5b, 0x65, 0x38, 0xa5, 0xd6, 0xfc, 0x5a, 0xa0,
+ 0xd7, 0x0a, 0xfb, 0x85, 0x9c, 0x3b, 0x59, 0x87, 0x73, 0xa1, 0x8c, 0xfe, 0xae, 0x7b, 0x11, 0x73,
+ 0xe1, 0xd7, 0xbd, 0x96, 0x17, 0x73, 0xa3, 0x54, 0xac, 0xcc, 0xdd, 0x3f, 0x5a, 0x38, 0x87, 0x7d,
+ 0xf0, 0xd8, 0xb7, 0x95, 0xfd, 0xc3, 0x72, 0x3a, 0xc4, 0x15, 0x09, 0x9c, 0x8f, 0x40, 0x39, 0x54,
+ 0x49, 0x77, 0xe1, 0x40, 0xac, 0xe7, 0x33, 0xc6, 0x32, 0x73, 0xa4, 0x72, 0x0f, 0x3a, 0xbd, 0xae,
+ 0x25, 0x32, 0x47, 0x82, 0x7d, 0x79, 0xb9, 0x2c, 0x72, 0x98, 0x5f, 0x52, 0xaa, 0x4e, 0x92, 0x75,
+ 0x7d, 0x17, 0xb9, 0x0c, 0x12, 0xc2, 0x58, 0x83, 0x3a, 0xcd, 0xb8, 0x21, 0x73, 0x38, 0x37, 0x86,
+ 0x75, 0x63, 0x19, 0xaf, 0x6c, 0x7e, 0x4c, 0x40, 0x51, 0x4a, 0x22, 0x87, 0x30, 0xde, 0x10, 0x1f,
+ 0x41, 0xee, 0xed, 0x1b, 0xc3, 0x0e, 0x6e, 0xea, 0xcb, 0xea, 0xf5, 0x2b, 0x01, 0x98, 0x88, 0x23,
+ 0x3f, 0x69, 0x01, 0xb8, 0x49, 0x62, 0x2c, 0x59, 0x3e, 0x98, 0x9b, 0xdd, 0x51, 0x39, 0x37, 0xed,
+ 0x1a, 0x29, 0x50, 0x84, 0x86, 0x64, 0xf2, 0x1a, 0x4c, 0x86, 0xd4, 0x0d, 0x7c, 0xd7, 0x6b, 0xd2,
+ 0xea, 0x72, 0xcc, 0x3d, 0xf7, 0xd3, 0x25, 0xd0, 0x66, 0x98, 0x7f, 0x82, 0x06, 0x0f, 0x4c, 0x71,
+ 0x24, 0x9f, 0xb6, 0x60, 0x5a, 0x25, 0x07, 0xd9, 0x07, 0xa1, 0x32, 0x49, 0xb2, 0x9e, 0x53, 0x2a,
+ 0x92, 0xf3, 0xac, 0x10, 0x16, 0xa1, 0xa4, 0x61, 0x98, 0x91, 0x4b, 0x5e, 0x05, 0x08, 0xf6, 0x78,
+ 0x22, 0x8e, 0x75, 0xb5, 0x74, 0xea, 0xae, 0x4e, 0x8b, 0x9c, 0x72, 0xc2, 0x01, 0x0d, 0x6e, 0xe4,
+ 0x26, 0x80, 0x58, 0x36, 0xbb, 0xdd, 0x36, 0xe5, 0x61, 0x43, 0xb9, 0xf2, 0xd6, 0x64, 0xf0, 0x77,
+ 0x14, 0xe6, 0xc1, 0xd1, 0x42, 0x6f, 0x80, 0xcb, 0x33, 0xa0, 0x46, 0x73, 0xf2, 0x61, 0x18, 0x8f,
+ 0x3a, 0xad, 0x96, 0xa3, 0xf2, 0x29, 0xdb, 0xf9, 0xed, 0x88, 0x82, 0xaf, 0x9e, 0x9b, 0x12, 0x80,
+ 0x89, 0x44, 0x72, 0x97, 0x19, 0xb6, 0x48, 0x46, 0xde, 0x7c, 0x15, 0x89, 0xbd, 0x79, 0x82, 0xf7,
+ 0xe9, 0x9d, 0xb2, 0xdd, 0x39, 0xec, 0x43, 0xf3, 0xe0, 0x68, 0xe1, 0x42, 0x1a, 0xbe, 0x1e, 0x08,
+ 0xb1, 0xd8, 0x97, 0xa7, 0xed, 0x03, 0xe9, 0xd5, 0x8d, 0xbc, 0x00, 0x93, 0xf4, 0x30, 0xa6, 0xa1,
+ 0xef, 0x34, 0x6f, 0xe1, 0x7a, 0x12, 0xed, 0xf3, 0x89, 0x76, 0xc5, 0x80, 0x63, 0x8a, 0x8a, 0xd8,
+ 0xca, 0xcb, 0x2f, 0x70, 0x7a, 0xd0, 0x5e, 0x7e, 0xe2, 0xd3, 0xdb, 0xff, 0x5a, 0x48, 0x79, 0x1f,
+ 0xbb, 0x21, 0xa5, 0x24, 0x80, 0x51, 0x3f, 0xa8, 0x2a, 0x03, 0x7b, 0x23, 0x1f, 0x03, 0xbb, 0x19,
+ 0x54, 0x8d, 0x93, 0x67, 0xf6, 0x2b, 0x42, 0x21, 0x87, 0x1f, 0xcd, 0x25, 0x67, 0x98, 0x1c, 0x21,
+ 0x1d, 0xae, 0x3c, 0x25, 0xab, 0xa3, 0xb9, 0x2d, 0x53, 0x10, 0xa6, 0xe5, 0x92, 0x7d, 0x18, 0x6d,
+ 0x04, 0x51, 0x2c, 0xe2, 0xa2, 0xa1, 0x3d, 0xbe, 0xeb, 0x41, 0x14, 0xf3, 0xed, 0x52, 0x75, 0x9b,
+ 0x41, 0x22, 0x14, 0x32, 0xec, 0x1f, 0x58, 0xa9, 0xdc, 0xce, 0x1d, 0x27, 0x76, 0x1b, 0x57, 0x0e,
+ 0xa8, 0xcf, 0xd6, 0x8e, 0x79, 0x30, 0xf0, 0x3f, 0xcd, 0x83, 0x81, 0x07, 0x47, 0x0b, 0x6f, 0x19,
+ 0x54, 0x0a, 0x74, 0x8f, 0x71, 0x58, 0xe4, 0x2c, 0x8c, 0x33, 0x84, 0x8f, 0x5b, 0x30, 0x61, 0xa8,
+ 0x27, 0x37, 0xaf, 0x1c, 0x73, 0xd4, 0xca, 0x91, 0x33, 0x80, 0x68, 0x8a, 0xb4, 0xbf, 0x64, 0xc1,
+ 0x78, 0xc5, 0x71, 0xf7, 0x83, 0x5a, 0x8d, 0xbc, 0x0d, 0x4a, 0xd5, 0x8e, 0x3c, 0x82, 0x11, 0xfd,
+ 0x53, 0xc9, 0x84, 0x55, 0x09, 0x47, 0x45, 0xc1, 0xe6, 0x70, 0xcd, 0x71, 0xe3, 0x20, 0xe4, 0x6a,
+ 0x17, 0xc5, 0x1c, 0xbe, 0xca, 0x21, 0x28, 0x31, 0xe4, 0x1d, 0x30, 0xd1, 0x72, 0x0e, 0x93, 0xc6,
+ 0xd9, 0xc4, 0xd2, 0x86, 0x46, 0xa1, 0x49, 0x67, 0xff, 0x6e, 0x19, 0xc6, 0xe5, 0x69, 0xe9, 0x89,
+ 0x4f, 0x2b, 0x92, 0x88, 0xa1, 0x30, 0x30, 0x62, 0x88, 0x60, 0xcc, 0xe5, 0x85, 0x56, 0x72, 0xdb,
+ 0x1e, 0x32, 0xc5, 0x26, 0x15, 0x14, 0xb5, 0x5b, 0x5a, 0x2d, 0xf1, 0x1b, 0xa5, 0x28, 0xf2, 0x45,
+ 0x0b, 0xce, 0xb8, 0x81, 0xef, 0x53, 0x57, 0xef, 0x29, 0x23, 0x79, 0x9c, 0xe6, 0xad, 0xa4, 0x99,
+ 0xea, 0x74, 0x54, 0x06, 0x81, 0x59, 0xf1, 0xe4, 0x25, 0x98, 0x12, 0x63, 0x76, 0x3b, 0x15, 0x8b,
+ 0xeb, 0x13, 0x72, 0x13, 0x89, 0x69, 0x5a, 0xb2, 0x28, 0x72, 0x1a, 0xf2, 0x2c, 0x7a, 0x4c, 0xe7,
+ 0x36, 0x8d, 0x53, 0x68, 0x83, 0x82, 0x84, 0x40, 0x42, 0x5a, 0x0b, 0x69, 0xd4, 0x40, 0xfa, 0x7a,
+ 0x87, 0x46, 0x31, 0xdf, 0xcf, 0xc6, 0x1f, 0xed, 0xec, 0x0b, 0x7b, 0x38, 0x61, 0x1f, 0xee, 0x64,
+ 0x5f, 0x3a, 0xd5, 0xa5, 0x3c, 0x96, 0x93, 0xfc, 0xcc, 0x03, 0x7d, 0xeb, 0x05, 0x18, 0x8d, 0x1a,
+ 0x4e, 0x58, 0xe5, 0xfb, 0x68, 0xb1, 0x52, 0x66, 0xb6, 0x64, 0x87, 0x01, 0x50, 0xc0, 0xc9, 0x2a,
+ 0xcc, 0x64, 0xce, 0xf7, 0x23, 0xbe, 0x53, 0x96, 0x2a, 0x73, 0x92, 0xdd, 0x4c, 0xa6, 0x32, 0x20,
+ 0xc2, 0x9e, 0x16, 0x66, 0xc0, 0x35, 0x71, 0x4c, 0xc0, 0xd5, 0x85, 0xb1, 0xa6, 0x48, 0x3a, 0x4c,
+ 0x72, 0x53, 0xf9, 0x4a, 0x2e, 0x03, 0xb0, 0x68, 0x26, 0x7b, 0xd4, 0x6c, 0x97, 0xc9, 0x0b, 0x29,
+ 0x90, 0x7c, 0x8e, 0x19, 0x34, 0x23, 0x4f, 0x31, 0xc5, 0x15, 0xb8, 0x9d, 0x8f, 0x02, 0x3d, 0x69,
+ 0x19, 0x6d, 0xdd, 0x8c, 0xa4, 0x87, 0x29, 0x7f, 0xfe, 0x7f, 0xc1, 0xc4, 0xa3, 0xe6, 0x38, 0x5e,
+ 0x86, 0x99, 0xa1, 0xb2, 0x1b, 0x3f, 0xb4, 0x20, 0xf9, 0xae, 0x2b, 0x8e, 0xdb, 0xa0, 0x6c, 0xca,
+ 0x90, 0x97, 0x61, 0x5a, 0x85, 0x2c, 0x2b, 0x41, 0xc7, 0x8f, 0x39, 0xaf, 0xa2, 0xce, 0x5b, 0x63,
+ 0x0a, 0x8b, 0x19, 0x6a, 0xb2, 0x04, 0x65, 0x36, 0x4e, 0xa2, 0xa9, 0x30, 0xbb, 0x2a, 0x2c, 0x5a,
+ 0xde, 0x5e, 0x93, 0xad, 0x34, 0x0d, 0x09, 0x60, 0xb6, 0xe9, 0x44, 0x31, 0xd7, 0x80, 0x45, 0x30,
+ 0x8f, 0x78, 0xf2, 0xcc, 0xcb, 0x9b, 0xd6, 0xb3, 0x8c, 0xb0, 0x97, 0xb7, 0xfd, 0xed, 0x11, 0x98,
+ 0x4a, 0x59, 0x46, 0xb6, 0xab, 0x74, 0x22, 0xe6, 0xfa, 0xa8, 0x74, 0x8e, 0xda, 0x55, 0x6e, 0x49,
+ 0x38, 0x2a, 0x0a, 0x46, 0xdd, 0x76, 0xa2, 0xe8, 0x5e, 0x10, 0x56, 0xa5, 0x29, 0x57, 0xd4, 0xdb,
+ 0x12, 0x8e, 0x8a, 0x82, 0xed, 0x2f, 0x7b, 0xd4, 0x09, 0x69, 0xc8, 0x8b, 0x35, 0xb2, 0xfb, 0x4b,
+ 0x45, 0xa3, 0xd0, 0xa4, 0xe3, 0x46, 0x39, 0x6e, 0x46, 0x2b, 0x4d, 0x8f, 0xfa, 0xb1, 0x50, 0x33,
+ 0x1f, 0xa3, 0xbc, 0xbb, 0xbe, 0x63, 0x32, 0xd5, 0x46, 0x39, 0x83, 0xc0, 0xac, 0x78, 0xf2, 0x49,
+ 0x0b, 0xa6, 0x9c, 0x7b, 0x91, 0xae, 0x06, 0xe6, 0x56, 0x79, 0xe8, 0x4d, 0x2a, 0x55, 0x60, 0x5c,
+ 0x99, 0x65, 0xe6, 0x3d, 0x05, 0xc2, 0xb4, 0x50, 0xf2, 0x15, 0x0b, 0x08, 0x3d, 0xa4, 0xee, 0x76,
+ 0x18, 0x1c, 0x78, 0xd5, 0xe4, 0x1b, 0xca, 0x50, 0x6b, 0x48, 0xcf, 0xfe, 0x4a, 0x0f, 0x5f, 0x61,
+ 0xd5, 0x7b, 0xe1, 0xd8, 0x47, 0x07, 0xfb, 0xcf, 0x8a, 0x30, 0x61, 0x18, 0xe3, 0xbe, 0x3b, 0xab,
+ 0xf5, 0x23, 0xb6, 0xb3, 0x16, 0x4e, 0xb1, 0xb3, 0x7e, 0x0c, 0xca, 0x6e, 0x62, 0x28, 0xf2, 0xa9,
+ 0x5e, 0xce, 0x9a, 0x1f, 0x6d, 0x2b, 0x14, 0x08, 0xb5, 0x4c, 0x72, 0x0d, 0x66, 0x0d, 0x36, 0xd2,
+ 0xc8, 0x8c, 0x70, 0x23, 0xa3, 0x92, 0x5a, 0xcb, 0x59, 0x02, 0xec, 0x6d, 0x43, 0x9e, 0x67, 0x5e,
+ 0xad, 0x27, 0xfb, 0x25, 0x32, 0x06, 0xb2, 0x32, 0x78, 0x79, 0x7b, 0x2d, 0x01, 0xa3, 0x49, 0x63,
+ 0x7f, 0xdb, 0x52, 0x1f, 0xf7, 0x09, 0x14, 0x85, 0xdc, 0x4d, 0x17, 0x85, 0x5c, 0xc9, 0x65, 0x98,
+ 0x07, 0x14, 0x84, 0x6c, 0xc2, 0xf8, 0x4a, 0xd0, 0x6a, 0x39, 0x7e, 0x95, 0xbc, 0x09, 0xc6, 0x5d,
+ 0xf1, 0xa7, 0x0c, 0x13, 0x27, 0xd8, 0xfe, 0x2d, 0xb1, 0x98, 0xe0, 0xc8, 0x33, 0x30, 0xe2, 0x84,
+ 0xf5, 0x24, 0x34, 0xe4, 0xe7, 0x54, 0xcb, 0x61, 0x3d, 0x42, 0x0e, 0xb5, 0xbf, 0x5c, 0x00, 0x58,
+ 0x09, 0x5a, 0x6d, 0x27, 0xa4, 0xd5, 0xdd, 0xe0, 0x3f, 0xf3, 0xd1, 0x22, 0x62, 0xf8, 0xac, 0x05,
+ 0x84, 0x8d, 0x4a, 0xe0, 0x53, 0x3f, 0x56, 0x07, 0xbd, 0x6c, 0xbf, 0x74, 0x13, 0xa8, 0xdc, 0x7c,
+ 0xf4, 0x1a, 0x48, 0x10, 0xa8, 0x69, 0x4e, 0x10, 0x45, 0x3c, 0x9b, 0xec, 0xf8, 0xc5, 0x74, 0xfd,
+ 0x04, 0x3f, 0x94, 0x95, 0x0e, 0x80, 0xfd, 0x8d, 0x02, 0x5c, 0x10, 0x66, 0x6b, 0xc3, 0xf1, 0x9d,
+ 0x3a, 0x6d, 0x31, 0xad, 0x4e, 0x7a, 0xb2, 0xe1, 0x32, 0xf7, 0xd5, 0x4b, 0xca, 0x25, 0x86, 0x9d,
+ 0x9c, 0x62, 0x52, 0x89, 0x69, 0xb4, 0xe6, 0x7b, 0x31, 0x72, 0xe6, 0x24, 0x82, 0x52, 0x72, 0x1f,
+ 0x45, 0x1a, 0x9b, 0x9c, 0x04, 0xa9, 0x75, 0x77, 0x4d, 0xb2, 0x47, 0x25, 0x88, 0x6d, 0xee, 0xcd,
+ 0xc0, 0xdd, 0x47, 0xda, 0x0e, 0xb8, 0x61, 0x31, 0x4e, 0xab, 0xd7, 0x25, 0x1c, 0x15, 0x85, 0xfd,
+ 0x0d, 0x0b, 0xb2, 0x26, 0x97, 0x47, 0x83, 0xa2, 0x3e, 0x31, 0x1b, 0x0d, 0xa6, 0xcb, 0x09, 0x4f,
+ 0x51, 0x9d, 0xf7, 0x01, 0x98, 0x70, 0xe2, 0x98, 0xb6, 0xda, 0x22, 0x34, 0x29, 0x3e, 0x5a, 0xaa,
+ 0x6d, 0x23, 0xa8, 0x7a, 0x35, 0x8f, 0x87, 0x24, 0x26, 0x3b, 0xfb, 0x15, 0x28, 0x25, 0xa7, 0x4b,
+ 0x27, 0xf8, 0xf4, 0xcf, 0xa6, 0xdc, 0xc9, 0x01, 0x93, 0xeb, 0x41, 0x01, 0xfa, 0xec, 0x99, 0xac,
+ 0xcb, 0xda, 0xba, 0xa4, 0xba, 0x7c, 0x3a, 0x0b, 0x43, 0x0e, 0xc5, 0xc9, 0x9a, 0xc8, 0xb3, 0xbc,
+ 0x2f, 0xef, 0x3d, 0x5f, 0x1f, 0xb6, 0x4d, 0x48, 0xfd, 0xd4, 0x81, 0x1b, 0xb9, 0x0c, 0xa0, 0x37,
+ 0x05, 0x59, 0x54, 0xa2, 0xb2, 0xc2, 0x7a, 0xef, 0x40, 0x83, 0x8a, 0xb9, 0x80, 0x9e, 0x1f, 0xc5,
+ 0x4e, 0xb3, 0x79, 0xdd, 0xf3, 0x63, 0x19, 0xcb, 0x2a, 0x83, 0xb1, 0xa6, 0x51, 0x68, 0xd2, 0xcd,
+ 0xbf, 0xd3, 0xf8, 0x2e, 0xa7, 0x71, 0xeb, 0x3f, 0x5b, 0x80, 0xe9, 0x6b, 0x7e, 0x67, 0xfb, 0xda,
+ 0x76, 0x67, 0xaf, 0xe9, 0xb9, 0x37, 0x69, 0x97, 0x7d, 0xb4, 0x7d, 0xda, 0x5d, 0x5b, 0x95, 0xc3,
+ 0xae, 0x3e, 0xda, 0x4d, 0x06, 0x44, 0x81, 0x63, 0x6a, 0xd6, 0x3c, 0xbf, 0x4e, 0xc3, 0x76, 0xe8,
+ 0x49, 0xdf, 0xdd, 0x50, 0xf3, 0xaa, 0x46, 0xa1, 0x49, 0xc7, 0x78, 0x07, 0xf7, 0x7c, 0x1a, 0x66,
+ 0xad, 0xcd, 0x16, 0x03, 0xa2, 0xc0, 0x31, 0xa2, 0x38, 0xec, 0x44, 0xb1, 0x1c, 0x31, 0x45, 0xb4,
+ 0xcb, 0x80, 0x28, 0x70, 0x6c, 0x7a, 0x44, 0x9d, 0x3d, 0x9e, 0xf1, 0xcd, 0x9c, 0xbd, 0xef, 0x08,
+ 0x30, 0x26, 0x78, 0x46, 0xba, 0x4f, 0xbb, 0xab, 0x6c, 0xef, 0xcd, 0x54, 0xc7, 0xdc, 0x14, 0x60,
+ 0x4c, 0xf0, 0xf6, 0x5f, 0x5b, 0x40, 0xd2, 0xc3, 0xf1, 0x04, 0xb6, 0xef, 0xd7, 0xd3, 0xdb, 0xf7,
+ 0x90, 0xc9, 0xf9, 0xb4, 0xfa, 0x03, 0x76, 0xf1, 0x9f, 0xb7, 0x60, 0xd2, 0x3c, 0xa7, 0x21, 0xf5,
+ 0x8c, 0x21, 0xda, 0x4a, 0x1b, 0xa2, 0x07, 0x47, 0x0b, 0xff, 0xbb, 0xdf, 0xe5, 0xca, 0xba, 0x17,
+ 0x07, 0xed, 0xe8, 0xed, 0xd4, 0xaf, 0x7b, 0x3e, 0xe5, 0x99, 0x41, 0x71, 0xbe, 0x93, 0x3a, 0x04,
+ 0x5a, 0x09, 0xaa, 0xf4, 0x11, 0x2c, 0x99, 0x7d, 0x07, 0x66, 0x7b, 0x4a, 0xa2, 0x4e, 0x60, 0x74,
+ 0x8e, 0xad, 0x38, 0xb5, 0x11, 0x26, 0x18, 0xe3, 0xad, 0xb6, 0x38, 0x88, 0x59, 0x81, 0x59, 0x51,
+ 0xd9, 0xc5, 0x24, 0xed, 0xb8, 0x0d, 0xda, 0x52, 0x65, 0x6e, 0x3c, 0x50, 0xbc, 0x9d, 0x45, 0x62,
+ 0x2f, 0xbd, 0xfd, 0x39, 0x0b, 0xa6, 0x52, 0x55, 0x6a, 0x39, 0x99, 0x47, 0xbe, 0xd2, 0x02, 0x7e,
+ 0x6c, 0x18, 0x7a, 0xbe, 0xc8, 0xf5, 0x95, 0x8c, 0x95, 0xa6, 0x51, 0x68, 0xd2, 0xd9, 0x5f, 0x2a,
+ 0x40, 0x29, 0xc9, 0x0a, 0x9f, 0x40, 0x95, 0xcf, 0x58, 0x30, 0xa5, 0x82, 0x73, 0xee, 0xb2, 0x8b,
+ 0xc9, 0xb8, 0x39, 0x7c, 0x5e, 0x5a, 0x9d, 0x2d, 0x33, 0x97, 0x5d, 0xc5, 0x0e, 0x68, 0x0a, 0xc3,
+ 0xb4, 0x6c, 0x72, 0x1b, 0x20, 0xea, 0x46, 0x31, 0x6d, 0x19, 0xc1, 0x83, 0x6d, 0xac, 0xb8, 0x45,
+ 0x37, 0x08, 0x29, 0x5b, 0x5f, 0x9b, 0x41, 0x95, 0xee, 0x28, 0x4a, 0x6d, 0x5c, 0x35, 0x0c, 0x0d,
+ 0x4e, 0xf6, 0xaf, 0x14, 0x60, 0x26, 0xab, 0x12, 0x79, 0x3f, 0x4c, 0x26, 0xd2, 0x8d, 0x7b, 0xaa,
+ 0x49, 0x2a, 0x7c, 0x12, 0x0d, 0xdc, 0x83, 0xa3, 0x85, 0x85, 0xde, 0x8b, 0xba, 0x8b, 0x26, 0x09,
+ 0xa6, 0x98, 0x89, 0x0c, 0x89, 0x4c, 0xe5, 0x55, 0xba, 0xcb, 0xed, 0xb6, 0x4c, 0x73, 0x18, 0x19,
+ 0x12, 0x13, 0x8b, 0x19, 0x6a, 0xb2, 0x0d, 0xe7, 0x0c, 0xc8, 0x26, 0xf5, 0xea, 0x8d, 0xbd, 0x20,
+ 0x14, 0xd7, 0x19, 0x8a, 0x95, 0x67, 0xf4, 0x89, 0x50, 0x2f, 0x0d, 0xf6, 0x6d, 0xc9, 0x9c, 0x16,
+ 0xd7, 0x69, 0x3b, 0xae, 0x17, 0x77, 0x65, 0x34, 0xa4, 0x6c, 0xd3, 0x8a, 0x84, 0xa3, 0xa2, 0xb0,
+ 0x37, 0x60, 0xe4, 0x84, 0x33, 0xe8, 0x44, 0x7b, 0xfd, 0x2b, 0x50, 0x62, 0xec, 0x98, 0x2d, 0xca,
+ 0x8b, 0x65, 0x00, 0xa5, 0xe4, 0x76, 0x0b, 0xb1, 0xa1, 0xe8, 0x39, 0x49, 0x12, 0x4a, 0x75, 0x6b,
+ 0x2d, 0x8a, 0x3a, 0xdc, 0x93, 0x61, 0x48, 0xf2, 0x2c, 0x14, 0xe9, 0x61, 0x3b, 0x9b, 0x6d, 0xba,
+ 0x72, 0xd8, 0xf6, 0x42, 0x1a, 0x31, 0x22, 0x7a, 0xd8, 0x26, 0xf3, 0x50, 0xf0, 0xaa, 0x72, 0x93,
+ 0x02, 0x49, 0x53, 0x58, 0x5b, 0xc5, 0x82, 0x57, 0xb5, 0x0f, 0xa1, 0xac, 0xae, 0xd3, 0x90, 0xfd,
+ 0xc4, 0x76, 0x5b, 0x79, 0x1c, 0xe3, 0x24, 0x7c, 0x07, 0x58, 0xed, 0x0e, 0x80, 0xae, 0x09, 0xcc,
+ 0xcb, 0xbe, 0x5c, 0x82, 0x11, 0x37, 0x90, 0xa5, 0xc4, 0x25, 0xcd, 0x86, 0x1b, 0x6d, 0x8e, 0xb1,
+ 0xef, 0xc0, 0xf4, 0x4d, 0x3f, 0xb8, 0xe7, 0xb3, 0xcd, 0xf4, 0xaa, 0x47, 0x9b, 0x55, 0xc6, 0xb8,
+ 0xc6, 0xfe, 0xc8, 0xba, 0x08, 0x1c, 0x8b, 0x02, 0xa7, 0xee, 0x9c, 0x14, 0x06, 0xdd, 0x39, 0xb1,
+ 0x3f, 0x6e, 0xc1, 0x8c, 0x2a, 0x56, 0x4b, 0xac, 0xf1, 0x8b, 0x30, 0xb9, 0xd7, 0xf1, 0x9a, 0x55,
+ 0xf9, 0x5b, 0x8a, 0x50, 0xe5, 0x78, 0x15, 0x03, 0x87, 0x29, 0x4a, 0xe6, 0x6e, 0xed, 0x79, 0xbe,
+ 0x13, 0x76, 0xb7, 0xb5, 0xf9, 0x57, 0x16, 0xa1, 0xa2, 0x30, 0x68, 0x50, 0xd9, 0x7f, 0x5c, 0x04,
+ 0x7d, 0x95, 0x86, 0x78, 0xb2, 0xea, 0xc2, 0xca, 0x23, 0x57, 0xb5, 0xd3, 0xf5, 0x5d, 0x7d, 0x69,
+ 0xa7, 0x94, 0x29, 0xba, 0xf8, 0x94, 0xc5, 0x1c, 0x3d, 0x2f, 0xf6, 0x1c, 0xbe, 0x3e, 0x65, 0x74,
+ 0xb4, 0x9d, 0xd3, 0xc1, 0xfc, 0x9a, 0xe0, 0x1c, 0x84, 0xa6, 0xeb, 0xa8, 0x84, 0xa1, 0x29, 0x99,
+ 0xbc, 0x26, 0x8f, 0x17, 0x8a, 0xb9, 0xd5, 0xec, 0x94, 0x32, 0x67, 0x0a, 0x6d, 0x18, 0x0d, 0x69,
+ 0x1c, 0x26, 0xd5, 0x52, 0x37, 0x87, 0x3d, 0x6c, 0x8d, 0xc3, 0xee, 0x4e, 0xcc, 0x22, 0xb0, 0xba,
+ 0xe1, 0xdf, 0x70, 0x30, 0x0a, 0x41, 0x76, 0x04, 0xa4, 0x77, 0x2c, 0x4e, 0x99, 0xba, 0x5d, 0x82,
+ 0xb2, 0xd3, 0x89, 0x83, 0x16, 0x1b, 0x26, 0xfe, 0x79, 0x4a, 0x46, 0x72, 0x3a, 0x41, 0xa0, 0xa6,
+ 0xb1, 0xbf, 0x30, 0x0a, 0x99, 0x32, 0x08, 0x72, 0x68, 0x5e, 0x03, 0xb3, 0xf2, 0xbd, 0x06, 0xa6,
+ 0x94, 0xe9, 0x77, 0x15, 0x8c, 0xd4, 0x61, 0xb4, 0xdd, 0x70, 0xa2, 0x64, 0xf9, 0xbd, 0x92, 0x0c,
+ 0xd3, 0x36, 0x03, 0x3e, 0x38, 0x5a, 0x78, 0xef, 0xc9, 0xdc, 0x39, 0x36, 0x57, 0x97, 0x44, 0x4d,
+ 0xa8, 0x16, 0xcd, 0x79, 0xa0, 0xe0, 0x6f, 0x3a, 0x74, 0xc5, 0x63, 0x42, 0xd3, 0x4f, 0x58, 0xa2,
+ 0x76, 0x0e, 0x69, 0xd4, 0x69, 0xc6, 0x72, 0x36, 0xbc, 0x92, 0xe3, 0x2a, 0x13, 0x8c, 0x75, 0x11,
+ 0x9d, 0xf8, 0x8d, 0x86, 0x50, 0xf2, 0x7e, 0x28, 0x47, 0xb1, 0x13, 0xc6, 0x8f, 0x58, 0x72, 0xa3,
+ 0x06, 0x7d, 0x27, 0x61, 0x82, 0x9a, 0x1f, 0x79, 0x15, 0xa0, 0xe6, 0xf9, 0x5e, 0xd4, 0x78, 0xc4,
+ 0x53, 0x41, 0xae, 0xf8, 0x55, 0xc5, 0x01, 0x0d, 0x6e, 0xcc, 0xba, 0xf1, 0xb9, 0x2d, 0xf2, 0x98,
+ 0x25, 0xbe, 0x7d, 0x29, 0xeb, 0x86, 0x0a, 0x83, 0x06, 0x95, 0xfd, 0x51, 0x38, 0x9b, 0xbd, 0xc4,
+ 0x2d, 0x23, 0xbc, 0x7a, 0x18, 0x74, 0xda, 0x59, 0xf3, 0xcd, 0x2f, 0xf9, 0xa2, 0xc0, 0x31, 0xf3,
+ 0xbd, 0xef, 0xf9, 0xd5, 0xac, 0xf9, 0xbe, 0xe9, 0xf9, 0x55, 0xe4, 0x98, 0x13, 0xdc, 0x8f, 0xfb,
+ 0x6d, 0x0b, 0x2e, 0x1d, 0x77, 0xd7, 0x9c, 0x45, 0xef, 0xf7, 0x9c, 0xd0, 0x97, 0x57, 0x6f, 0xb8,
+ 0xed, 0xb8, 0xe3, 0x84, 0x3e, 0x72, 0x28, 0xe9, 0xc2, 0x98, 0x28, 0x33, 0x94, 0x0e, 0xe9, 0x2b,
+ 0xf9, 0xde, 0x7c, 0x67, 0x21, 0x92, 0x4a, 0xba, 0x88, 0x12, 0x47, 0x94, 0x02, 0xed, 0xef, 0x59,
+ 0x40, 0xb6, 0x0e, 0x68, 0x18, 0x7a, 0x55, 0xa3, 0x30, 0x92, 0xbc, 0x00, 0x93, 0x77, 0x77, 0xb6,
+ 0x36, 0xb7, 0x03, 0xcf, 0xe7, 0x77, 0x3f, 0x8c, 0x12, 0x99, 0x1b, 0x06, 0x1c, 0x53, 0x54, 0x2c,
+ 0xc8, 0xb8, 0xfb, 0x3a, 0xdb, 0x72, 0xae, 0x1c, 0xb6, 0x43, 0x1a, 0x45, 0xea, 0xbd, 0x08, 0x19,
+ 0x64, 0xdc, 0x78, 0x25, 0x83, 0xc4, 0x5e, 0x7a, 0xb2, 0x05, 0xe7, 0x5b, 0x3c, 0x01, 0x57, 0xe5,
+ 0x3b, 0x6d, 0x24, 0xb2, 0x71, 0x61, 0x52, 0x5c, 0xff, 0x86, 0xfb, 0x47, 0x0b, 0xe7, 0x37, 0xfa,
+ 0x11, 0x60, 0xff, 0x76, 0xf6, 0xd7, 0x0b, 0x30, 0x61, 0xbc, 0xd7, 0x70, 0x02, 0x9f, 0x22, 0xf3,
+ 0xc4, 0x44, 0xe1, 0x84, 0x4f, 0x4c, 0x3c, 0x07, 0xa5, 0x76, 0xd0, 0xf4, 0x5c, 0x4f, 0xdd, 0x04,
+ 0x98, 0xe4, 0x67, 0x60, 0x12, 0x86, 0x0a, 0x4b, 0xee, 0x41, 0x59, 0x5d, 0x9b, 0x96, 0xb5, 0x81,
+ 0x79, 0x79, 0x55, 0x6a, 0xf1, 0xea, 0xeb, 0xd0, 0x5a, 0x16, 0xb1, 0x61, 0x8c, 0xcf, 0xfc, 0x24,
+ 0xc3, 0xcf, 0x0b, 0x40, 0xf8, 0x92, 0x88, 0x50, 0x62, 0xec, 0xbf, 0x1b, 0x85, 0x32, 0xd2, 0x76,
+ 0xb0, 0x12, 0xd2, 0x6a, 0x44, 0xde, 0x08, 0xc5, 0x4e, 0xd8, 0x94, 0x83, 0xa5, 0xd2, 0x3f, 0xb7,
+ 0x70, 0x1d, 0x19, 0x3c, 0xb5, 0xdd, 0x14, 0x4e, 0x75, 0x52, 0x58, 0x3c, 0xf6, 0xa4, 0xf0, 0x25,
+ 0x98, 0x8a, 0xa2, 0xc6, 0x76, 0xe8, 0x1d, 0x38, 0x31, 0x9b, 0xc4, 0x32, 0x57, 0xa2, 0x8f, 0x66,
+ 0x76, 0xae, 0x6b, 0x24, 0xa6, 0x69, 0xc9, 0x35, 0x98, 0xd5, 0xe7, 0x75, 0x34, 0x8c, 0x79, 0x6a,
+ 0x44, 0x64, 0x51, 0xd4, 0xc9, 0x88, 0x3e, 0xe1, 0x93, 0x04, 0xd8, 0xdb, 0x86, 0xac, 0xc2, 0x4c,
+ 0x0a, 0xc8, 0x14, 0x11, 0x29, 0x16, 0x55, 0x0b, 0x90, 0xe2, 0xc3, 0x74, 0xe9, 0x69, 0x41, 0x36,
+ 0xe0, 0xac, 0xf8, 0xbe, 0xfc, 0xba, 0xbd, 0xea, 0xd1, 0x38, 0x67, 0xf4, 0x5f, 0x24, 0xa3, 0xb3,
+ 0xd7, 0x7a, 0x49, 0xb0, 0x5f, 0x3b, 0x36, 0x43, 0x15, 0x78, 0x6d, 0x55, 0x5a, 0x4a, 0x35, 0x43,
+ 0x15, 0x9b, 0xb5, 0x2a, 0x9a, 0x74, 0xe4, 0x7d, 0xf0, 0xb4, 0xfe, 0x29, 0x32, 0x6b, 0xc2, 0x7d,
+ 0x58, 0x95, 0xa5, 0x10, 0xea, 0x56, 0xd3, 0xb5, 0xbe, 0x64, 0x55, 0x1c, 0xd4, 0x9e, 0xec, 0xc1,
+ 0xbc, 0x42, 0x5d, 0x61, 0xe6, 0xa0, 0x1d, 0x7a, 0x11, 0xad, 0x38, 0x11, 0xbd, 0x15, 0x36, 0x79,
+ 0xf1, 0x44, 0x59, 0x3f, 0x3a, 0x71, 0xcd, 0x8b, 0xaf, 0xf7, 0xa3, 0xc4, 0x75, 0x7c, 0x08, 0x17,
+ 0xe6, 0xad, 0x50, 0xdf, 0xd9, 0x6b, 0xd2, 0xad, 0x95, 0x35, 0x5e, 0x52, 0x61, 0x78, 0x2b, 0x57,
+ 0x12, 0x04, 0x6a, 0x1a, 0xe5, 0x9e, 0x4f, 0x0e, 0x74, 0xcf, 0xbf, 0x6b, 0xc1, 0x94, 0x9a, 0xec,
+ 0x4f, 0x20, 0x0f, 0xd6, 0x4c, 0xe7, 0xc1, 0xae, 0x0d, 0xeb, 0x26, 0x4a, 0xcd, 0x07, 0x04, 0x53,
+ 0x3f, 0x28, 0x03, 0xf0, 0x67, 0x7c, 0x3c, 0x5e, 0x16, 0x7c, 0x09, 0x46, 0x42, 0xda, 0x0e, 0xb2,
+ 0x96, 0x8f, 0xe7, 0xf0, 0x39, 0xe6, 0x47, 0x77, 0x39, 0xf7, 0x3b, 0x39, 0x1e, 0xfd, 0x8f, 0x3d,
+ 0x39, 0xde, 0x81, 0xf3, 0x9e, 0x1f, 0x51, 0xb7, 0x13, 0xca, 0x9d, 0xf3, 0x7a, 0x10, 0x29, 0xeb,
+ 0x50, 0xaa, 0xbc, 0x51, 0x32, 0x3a, 0xbf, 0xd6, 0x8f, 0x08, 0xfb, 0xb7, 0x65, 0x43, 0x9a, 0x20,
+ 0xe4, 0xfd, 0x23, 0x1d, 0xe2, 0x4b, 0x38, 0x2a, 0x0a, 0xbd, 0x20, 0xd6, 0x6b, 0xc9, 0x05, 0xa3,
+ 0xcc, 0x82, 0x58, 0xbf, 0xba, 0x83, 0x9a, 0xa6, 0xbf, 0x55, 0x2c, 0xe7, 0x64, 0x15, 0xe1, 0xd4,
+ 0x56, 0x31, 0x59, 0x9f, 0x13, 0x03, 0x9f, 0x6c, 0x48, 0x36, 0xeb, 0xc9, 0x81, 0x9b, 0xf5, 0xcb,
+ 0x30, 0xed, 0xf9, 0x0d, 0x1a, 0x7a, 0x31, 0xad, 0xf2, 0xb5, 0x30, 0x37, 0xc5, 0x07, 0x42, 0x65,
+ 0x9f, 0xd6, 0x52, 0x58, 0xcc, 0x50, 0xa7, 0x8d, 0xca, 0xf4, 0x09, 0x8c, 0xca, 0x00, 0x53, 0x7e,
+ 0x26, 0x1f, 0x53, 0x3e, 0x33, 0xbc, 0x29, 0x9f, 0x7d, 0xac, 0xa6, 0x9c, 0xe4, 0x62, 0xca, 0x9f,
+ 0x85, 0xd1, 0x76, 0x18, 0x1c, 0x76, 0xe7, 0xce, 0xa6, 0xdd, 0xf3, 0x6d, 0x06, 0x44, 0x81, 0x33,
+ 0x0b, 0xe8, 0xce, 0x3d, 0xbc, 0x80, 0xce, 0xfe, 0x74, 0x01, 0xce, 0x6b, 0x4b, 0xc7, 0xe6, 0x97,
+ 0x57, 0x63, 0x6b, 0x9d, 0xdf, 0x02, 0x15, 0x45, 0x1b, 0x46, 0xe2, 0x53, 0xe7, 0x50, 0x15, 0x06,
+ 0x0d, 0x2a, 0x9e, 0x3f, 0xa4, 0x21, 0x2f, 0xfb, 0xcd, 0x9a, 0xc1, 0x15, 0x09, 0x47, 0x45, 0xc1,
+ 0xdf, 0x00, 0xa4, 0x61, 0x2c, 0xcf, 0x64, 0xb2, 0x15, 0x4d, 0x2b, 0x1a, 0x85, 0x26, 0x1d, 0x73,
+ 0x17, 0xdd, 0x64, 0x09, 0x32, 0x53, 0x38, 0x29, 0xdc, 0x45, 0xb5, 0xea, 0x14, 0x36, 0x51, 0x87,
+ 0x27, 0x8a, 0x47, 0x7b, 0xd5, 0xe1, 0x59, 0x08, 0x45, 0x61, 0xff, 0x8b, 0x05, 0x6f, 0xe8, 0x3b,
+ 0x14, 0x4f, 0x60, 0x7b, 0x3b, 0x4c, 0x6f, 0x6f, 0x3b, 0xc3, 0x6f, 0x6f, 0x3d, 0xbd, 0x18, 0xb0,
+ 0xd5, 0xfd, 0xa9, 0x05, 0xd3, 0x9a, 0xfe, 0x09, 0x74, 0xd5, 0xcb, 0xf5, 0x35, 0x3f, 0xad, 0xba,
+ 0x28, 0x47, 0x4d, 0xf5, 0xed, 0xbb, 0xbc, 0x6f, 0x22, 0x98, 0x5b, 0x76, 0x93, 0xc7, 0x6e, 0x8e,
+ 0x09, 0x62, 0xba, 0x30, 0xc6, 0x9f, 0x0b, 0x88, 0xf2, 0x09, 0x2a, 0xd3, 0xf2, 0xf9, 0x09, 0x90,
+ 0x0e, 0x2a, 0xf9, 0xcf, 0x08, 0xa5, 0x40, 0x5e, 0x94, 0xee, 0x45, 0xcc, 0x5e, 0x56, 0x65, 0xca,
+ 0x55, 0x17, 0xa5, 0x4b, 0x38, 0x2a, 0x0a, 0xbb, 0x05, 0x73, 0x69, 0xe6, 0xab, 0xb4, 0xc6, 0x73,
+ 0x77, 0x27, 0xea, 0xe6, 0x12, 0x94, 0x1d, 0xde, 0x6a, 0xbd, 0xe3, 0x64, 0x5f, 0xbc, 0x59, 0x4e,
+ 0x10, 0xa8, 0x69, 0xec, 0x5f, 0xb6, 0xe0, 0x6c, 0x9f, 0xce, 0xe4, 0x98, 0x6a, 0x8e, 0xb5, 0x15,
+ 0x18, 0xf0, 0x0a, 0x51, 0x95, 0xd6, 0x9c, 0x24, 0x3b, 0x64, 0x58, 0xb5, 0x55, 0x01, 0xc6, 0x04,
+ 0x6f, 0xff, 0xbd, 0x05, 0x67, 0xd2, 0xba, 0x46, 0xe4, 0x06, 0x10, 0xd1, 0x99, 0x55, 0x2f, 0x72,
+ 0x83, 0x03, 0x1a, 0x76, 0x59, 0xcf, 0x85, 0xd6, 0xf3, 0x92, 0x13, 0x59, 0xee, 0xa1, 0xc0, 0x3e,
+ 0xad, 0x78, 0xed, 0x6f, 0x55, 0x8d, 0x76, 0x32, 0x53, 0x6e, 0xe7, 0x39, 0x53, 0xf4, 0xc7, 0x34,
+ 0x23, 0x68, 0x25, 0x12, 0x4d, 0xf9, 0xf6, 0xf7, 0x46, 0x40, 0x9d, 0x45, 0xf1, 0x3c, 0x44, 0x4e,
+ 0x59, 0x9c, 0xd4, 0xb3, 0x48, 0xc5, 0x53, 0x3c, 0x8b, 0x34, 0xf2, 0xb0, 0x1c, 0x81, 0x78, 0xa3,
+ 0x47, 0xfb, 0xa2, 0x86, 0xd1, 0xdf, 0xd5, 0x28, 0x34, 0xe9, 0x98, 0x26, 0x4d, 0xef, 0x80, 0x8a,
+ 0x46, 0x63, 0x69, 0x4d, 0xd6, 0x13, 0x04, 0x6a, 0x1a, 0xa6, 0x49, 0xd5, 0xab, 0xd5, 0x64, 0xa4,
+ 0xa8, 0x34, 0x61, 0xa3, 0x83, 0x1c, 0xc3, 0x28, 0x1a, 0x41, 0xb0, 0x2f, 0xfd, 0x3f, 0x45, 0x71,
+ 0x3d, 0x08, 0xf6, 0x91, 0x63, 0x98, 0xc7, 0xe2, 0x07, 0x61, 0xcb, 0x69, 0x7a, 0x1f, 0xa2, 0x55,
+ 0x25, 0x45, 0xfa, 0x7d, 0xca, 0x63, 0xd9, 0xec, 0x25, 0xc1, 0x7e, 0xed, 0xd8, 0x0c, 0x6c, 0x87,
+ 0xb4, 0xea, 0xb9, 0xb1, 0xc9, 0x0d, 0xd2, 0x33, 0x70, 0xbb, 0x87, 0x02, 0xfb, 0xb4, 0x22, 0xcb,
+ 0x70, 0x26, 0x39, 0x4b, 0x4c, 0x6a, 0x48, 0x84, 0x33, 0xa8, 0xfc, 0x70, 0x4c, 0xa3, 0x31, 0x4b,
+ 0xcf, 0xac, 0x4d, 0x4b, 0x56, 0xf2, 0x70, 0x37, 0xd1, 0xb0, 0x36, 0x49, 0x85, 0x0f, 0x2a, 0x0a,
+ 0xfb, 0x13, 0x45, 0xb6, 0x3b, 0x0e, 0xb8, 0x09, 0xfc, 0xc4, 0xb2, 0x86, 0xe9, 0x19, 0x39, 0x72,
+ 0x82, 0x19, 0xf9, 0x02, 0x4c, 0xde, 0x8d, 0x02, 0x5f, 0x65, 0xe4, 0x46, 0x07, 0x66, 0xe4, 0x0c,
+ 0xaa, 0xfe, 0x19, 0xb9, 0xb1, 0xbc, 0x32, 0x72, 0xe3, 0x8f, 0x98, 0x91, 0xfb, 0x83, 0x51, 0x50,
+ 0xf7, 0xf8, 0x36, 0x69, 0x7c, 0x2f, 0x08, 0xf7, 0x3d, 0xbf, 0xce, 0xcf, 0x60, 0xbf, 0x66, 0xc1,
+ 0xa4, 0x58, 0x2f, 0xf2, 0x11, 0x06, 0x71, 0xe6, 0x58, 0xcb, 0xe9, 0xee, 0x5a, 0x4a, 0xd8, 0xe2,
+ 0xae, 0x21, 0x28, 0xf3, 0x22, 0x86, 0x89, 0xc2, 0x94, 0x46, 0xe4, 0x23, 0x00, 0xc9, 0xeb, 0x5c,
+ 0xb5, 0x9c, 0xde, 0x28, 0x4b, 0xf4, 0x43, 0x5a, 0xd3, 0xbe, 0xe9, 0xae, 0x12, 0x82, 0x86, 0x40,
+ 0xf2, 0x69, 0x4b, 0xdd, 0x15, 0x11, 0xa7, 0x59, 0xaf, 0x3d, 0x96, 0xb1, 0x39, 0xc9, 0xd5, 0x11,
+ 0x84, 0x71, 0xcf, 0xaf, 0xb3, 0x79, 0x22, 0x93, 0x98, 0x6f, 0xe9, 0x57, 0xbf, 0xb0, 0x1e, 0x38,
+ 0xd5, 0x8a, 0xd3, 0x74, 0x7c, 0x97, 0x86, 0x6b, 0x82, 0xdc, 0x7c, 0xa2, 0x89, 0x03, 0x30, 0x61,
+ 0xd4, 0x73, 0x39, 0x73, 0xf4, 0x24, 0x97, 0x33, 0xe7, 0xdf, 0x03, 0xb3, 0x3d, 0x1f, 0xf3, 0x54,
+ 0x57, 0x47, 0x1e, 0xfd, 0xd6, 0x89, 0xfd, 0x3b, 0x63, 0x7a, 0xd3, 0xda, 0x0c, 0xaa, 0xe2, 0x8a,
+ 0x60, 0xa8, 0xbf, 0xa8, 0xf4, 0x3d, 0x73, 0x9c, 0x22, 0xc6, 0x33, 0x4f, 0x0a, 0x88, 0xa6, 0x48,
+ 0x36, 0x47, 0xdb, 0x4e, 0x48, 0xfd, 0xc7, 0x3d, 0x47, 0xb7, 0x95, 0x10, 0x34, 0x04, 0x92, 0x46,
+ 0xea, 0xb8, 0xf5, 0xea, 0xf0, 0xc7, 0xad, 0xcc, 0x1d, 0xee, 0x7b, 0x95, 0xeb, 0x8b, 0x16, 0x4c,
+ 0xfb, 0xa9, 0x99, 0x2b, 0x8f, 0xdc, 0x76, 0x1f, 0xc7, 0xaa, 0x10, 0xd7, 0xc0, 0xd3, 0x30, 0xcc,
+ 0xc8, 0xef, 0xb7, 0xa5, 0x8d, 0x9e, 0x72, 0x4b, 0xd3, 0x77, 0x8d, 0xc7, 0x06, 0xdd, 0x35, 0x26,
+ 0xbe, 0x7a, 0xd1, 0x60, 0x3c, 0xf7, 0x17, 0x0d, 0xa0, 0xcf, 0x6b, 0x06, 0x77, 0xa0, 0xec, 0x86,
+ 0xd4, 0x89, 0x1f, 0xf1, 0x72, 0x3b, 0x7f, 0x58, 0x6f, 0x25, 0x61, 0x80, 0x9a, 0x97, 0xfd, 0x47,
+ 0x45, 0x98, 0x49, 0x46, 0x24, 0x39, 0x8a, 0x62, 0xfb, 0xa3, 0x90, 0xab, 0x9d, 0x5b, 0xb5, 0x3f,
+ 0x5e, 0x4f, 0x10, 0xa8, 0x69, 0x98, 0x3f, 0xd6, 0x89, 0xe8, 0x56, 0x9b, 0xfa, 0xeb, 0xde, 0x5e,
+ 0xc4, 0x47, 0xdc, 0x28, 0x21, 0xbb, 0xa5, 0x51, 0x68, 0xd2, 0x31, 0x67, 0x5c, 0xf8, 0xc5, 0x51,
+ 0xf6, 0x64, 0x57, 0xfa, 0xdb, 0x98, 0xe0, 0xc9, 0x57, 0xfb, 0x3e, 0x4d, 0x92, 0x4f, 0x4d, 0x43,
+ 0xcf, 0x09, 0xdc, 0x29, 0xdf, 0x24, 0xf9, 0x82, 0x05, 0x67, 0xf6, 0x53, 0xf5, 0x2b, 0x89, 0x49,
+ 0x1e, 0xb2, 0xd2, 0x32, 0x5d, 0x14, 0xa3, 0xa7, 0x70, 0x1a, 0x1e, 0x61, 0x56, 0xba, 0xfd, 0x4f,
+ 0x16, 0x98, 0xe6, 0xe9, 0x64, 0x9e, 0x95, 0xf1, 0xd8, 0x54, 0xe1, 0x98, 0xc7, 0xa6, 0x12, 0x27,
+ 0xac, 0x78, 0x32, 0xa7, 0x7f, 0xe4, 0x14, 0x4e, 0xff, 0xe8, 0x40, 0xaf, 0xed, 0x8d, 0x50, 0xec,
+ 0x78, 0x55, 0xe9, 0xb7, 0xeb, 0xc3, 0xb0, 0xb5, 0x55, 0x64, 0x70, 0xfb, 0xb7, 0x46, 0x75, 0x9c,
+ 0x2e, 0x8f, 0xe2, 0x7f, 0x2c, 0xba, 0x5d, 0x53, 0x85, 0xb3, 0xa2, 0xe7, 0x9b, 0x3d, 0x85, 0xb3,
+ 0xef, 0x3e, 0x7d, 0xa5, 0x85, 0x18, 0xa0, 0x41, 0x75, 0xb3, 0xe3, 0xc7, 0x94, 0x59, 0xdc, 0x85,
+ 0x12, 0x0b, 0x6d, 0x78, 0xc2, 0xad, 0x94, 0x52, 0xaa, 0x74, 0x5d, 0xc2, 0x1f, 0x1c, 0x2d, 0xbc,
+ 0xeb, 0xf4, 0x6a, 0x25, 0xad, 0x51, 0xf1, 0x27, 0x11, 0x94, 0xd9, 0xdf, 0xbc, 0x22, 0x44, 0x06,
+ 0x4d, 0xb7, 0x94, 0x2d, 0x4a, 0x10, 0xb9, 0x94, 0x9b, 0x68, 0x39, 0xc4, 0x87, 0x32, 0x7f, 0x16,
+ 0x89, 0x0b, 0x15, 0xb1, 0xd5, 0xb6, 0xaa, 0xcb, 0x48, 0x10, 0x0f, 0x8e, 0x16, 0x5e, 0x3a, 0xbd,
+ 0x50, 0xd5, 0x1c, 0xb5, 0x08, 0xfb, 0xaf, 0x8a, 0x7a, 0xee, 0xca, 0x7a, 0xe9, 0x1f, 0x8b, 0xb9,
+ 0xfb, 0x62, 0x66, 0xee, 0x5e, 0xea, 0x99, 0xbb, 0xd3, 0xfa, 0xe9, 0xa0, 0xd4, 0x6c, 0x7c, 0xd2,
+ 0x1b, 0xec, 0xf1, 0x71, 0x3c, 0xf7, 0x2c, 0x5e, 0xef, 0x78, 0x21, 0x8d, 0xb6, 0xc3, 0x8e, 0xef,
+ 0xf9, 0x75, 0xf9, 0x80, 0xa4, 0xe1, 0x59, 0xa4, 0xd0, 0x98, 0xa5, 0xb7, 0xbf, 0xce, 0xcf, 0x3b,
+ 0x8d, 0xe2, 0x32, 0xf6, 0x95, 0x9b, 0xfc, 0x65, 0x29, 0x51, 0x51, 0xaa, 0xbe, 0xb2, 0x78, 0x4e,
+ 0x4a, 0xe0, 0xc8, 0x3d, 0x18, 0xdf, 0x13, 0x2f, 0x4e, 0xe4, 0x73, 0xc5, 0x49, 0x3e, 0x5f, 0xc1,
+ 0x2f, 0x93, 0x26, 0x6f, 0x59, 0x3c, 0xd0, 0x7f, 0x62, 0x22, 0xcd, 0xfe, 0xd9, 0x22, 0x9c, 0xc9,
+ 0xbc, 0x7b, 0xc4, 0x02, 0xfe, 0xe4, 0x91, 0xab, 0x6c, 0x76, 0x5e, 0x3d, 0xa0, 0xac, 0x28, 0xc8,
+ 0x07, 0x01, 0xaa, 0xb4, 0xdd, 0x0c, 0xba, 0xdc, 0x71, 0x19, 0x39, 0xb5, 0xe3, 0xa2, 0x7c, 0xdd,
+ 0x55, 0xc5, 0x05, 0x0d, 0x8e, 0xb2, 0x8c, 0x76, 0x54, 0xbc, 0xa7, 0x91, 0x2e, 0xa3, 0x35, 0x6e,
+ 0xfa, 0x8d, 0x3d, 0xd9, 0x9b, 0x7e, 0x1e, 0x9c, 0x11, 0x2a, 0xaa, 0x12, 0xae, 0x47, 0xa8, 0xd4,
+ 0x3a, 0xcb, 0x66, 0xd4, 0x6a, 0x9a, 0x0d, 0x66, 0xf9, 0xda, 0x9f, 0x2f, 0x30, 0xf7, 0x4d, 0x0c,
+ 0xf6, 0x46, 0x92, 0x1c, 0x7f, 0x33, 0x8c, 0x39, 0x9d, 0xb8, 0x11, 0xf4, 0xbc, 0x00, 0xb2, 0xcc,
+ 0xa1, 0x28, 0xb1, 0x64, 0x1d, 0x46, 0xaa, 0x4e, 0x9c, 0xfc, 0x03, 0x80, 0xd3, 0x28, 0xa7, 0x33,
+ 0x61, 0x4e, 0x4c, 0x91, 0x73, 0x21, 0xcf, 0xc0, 0x48, 0xec, 0xd4, 0x53, 0xaf, 0x85, 0xee, 0x3a,
+ 0xf5, 0x08, 0x39, 0xd4, 0xdc, 0x5d, 0x46, 0x8e, 0xd9, 0x5d, 0x5e, 0x32, 0xfe, 0xb9, 0x85, 0x71,
+ 0xea, 0xd2, 0xfb, 0x0f, 0x29, 0x44, 0x61, 0x7f, 0x8a, 0xd6, 0xfe, 0x1f, 0x30, 0x69, 0xfe, 0xc3,
+ 0x8a, 0x13, 0xdd, 0x35, 0xb2, 0xff, 0x76, 0x04, 0xa6, 0x52, 0x65, 0x7e, 0xa9, 0x59, 0x6e, 0x1d,
+ 0x3b, 0xcb, 0xf9, 0x79, 0x5a, 0xc7, 0xa7, 0xb2, 0x88, 0xd3, 0x38, 0x4f, 0xeb, 0xf8, 0x14, 0x05,
+ 0x8e, 0x7d, 0x95, 0x6a, 0xd8, 0xc5, 0x8e, 0x2f, 0xb3, 0xf2, 0xea, 0xab, 0xac, 0x72, 0x28, 0x4a,
+ 0x2c, 0x0b, 0x60, 0x27, 0x23, 0x6e, 0x14, 0x85, 0x8d, 0x90, 0xab, 0xe6, 0x46, 0x1e, 0x2f, 0xb4,
+ 0xc9, 0x92, 0x56, 0x1e, 0xd0, 0x9b, 0x10, 0x4c, 0x49, 0x24, 0x9f, 0xb4, 0xcc, 0xb7, 0xe9, 0xc6,
+ 0xf2, 0x38, 0x4d, 0xca, 0x56, 0x51, 0x8a, 0x15, 0xf4, 0xf0, 0x27, 0xea, 0x22, 0xb5, 0x80, 0xc7,
+ 0x1f, 0xcf, 0x02, 0x86, 0x3e, 0x8b, 0xf7, 0xad, 0x50, 0x6e, 0x39, 0xbe, 0x57, 0xa3, 0x51, 0x2c,
+ 0xfe, 0xd9, 0x4c, 0x59, 0x44, 0x4f, 0x1b, 0x09, 0x10, 0x35, 0x9e, 0xff, 0x4b, 0x27, 0xde, 0x31,
+ 0x11, 0xc4, 0x94, 0x8d, 0x7f, 0xe9, 0xa4, 0xc1, 0x68, 0xd2, 0xd8, 0xbf, 0x66, 0xc1, 0xf9, 0xbe,
+ 0x83, 0xf1, 0xa3, 0x9b, 0xfe, 0xb4, 0x7f, 0xa3, 0x00, 0x67, 0xfb, 0x94, 0xc1, 0x92, 0xee, 0x63,
+ 0x7b, 0xc2, 0x50, 0xd6, 0xd9, 0x4e, 0x0d, 0x9c, 0x1b, 0xa7, 0xdb, 0x86, 0xf4, 0x56, 0x50, 0x7c,
+ 0xa2, 0x5b, 0x81, 0xfd, 0xf5, 0x02, 0x18, 0x8f, 0x6d, 0x92, 0x8f, 0x9a, 0x15, 0xdf, 0x56, 0x5e,
+ 0xd5, 0xc9, 0x82, 0xb9, 0xaa, 0x18, 0x17, 0xa3, 0xd6, 0xaf, 0x80, 0x3c, 0x3b, 0x5f, 0x0b, 0xc7,
+ 0xcf, 0x57, 0xd2, 0x4c, 0x4a, 0xeb, 0x8b, 0xf9, 0x97, 0xd6, 0x97, 0x7b, 0xca, 0xea, 0x7f, 0xda,
+ 0x12, 0x33, 0x2d, 0xd3, 0x25, 0x6d, 0x61, 0xad, 0x87, 0x58, 0xd8, 0xb7, 0x41, 0x29, 0xa2, 0xcd,
+ 0x1a, 0xf3, 0xec, 0xa4, 0x25, 0xd6, 0x6f, 0x7b, 0x4b, 0x38, 0x2a, 0x0a, 0x7e, 0x77, 0xb6, 0xd9,
+ 0x0c, 0xee, 0x5d, 0x69, 0xb5, 0xe3, 0xae, 0xb4, 0xc9, 0xfa, 0xee, 0xac, 0xc2, 0xa0, 0x41, 0x65,
+ 0xff, 0xb3, 0x25, 0x3e, 0xa7, 0xf4, 0xd1, 0x5f, 0xcc, 0xdc, 0x69, 0x3c, 0xb9, 0x7b, 0xfb, 0xff,
+ 0x01, 0x5c, 0xf5, 0x26, 0x41, 0x3e, 0x6f, 0x70, 0xea, 0x37, 0x0e, 0xcc, 0x87, 0x21, 0x13, 0x18,
+ 0x1a, 0xf2, 0x52, 0x8b, 0xa7, 0x78, 0xdc, 0xe2, 0xb1, 0xff, 0xc1, 0x82, 0xd4, 0x66, 0x41, 0xda,
+ 0x30, 0xca, 0x34, 0xe8, 0xe6, 0xf3, 0x82, 0x82, 0xc9, 0x9a, 0x2d, 0x2c, 0x39, 0x2d, 0xf8, 0x9f,
+ 0x28, 0x04, 0x91, 0xa6, 0xf4, 0xce, 0x0b, 0x79, 0xbc, 0xf2, 0x61, 0x0a, 0x64, 0xfe, 0xbd, 0xfc,
+ 0xe7, 0x1b, 0xca, 0xd3, 0xb7, 0x5f, 0x84, 0xd9, 0x1e, 0xa5, 0xf8, 0x8d, 0xa4, 0x20, 0x79, 0x36,
+ 0xc2, 0x98, 0x81, 0xfc, 0x7e, 0x24, 0x0a, 0x1c, 0x73, 0xf0, 0x67, 0xb2, 0xec, 0xc9, 0x57, 0x2c,
+ 0x98, 0x8d, 0xb2, 0xfc, 0x1e, 0xd7, 0xd8, 0xa9, 0xcc, 0x55, 0x0f, 0x0a, 0x7b, 0x95, 0xb0, 0xff,
+ 0x4d, 0x9a, 0x27, 0xf1, 0xef, 0xce, 0xd4, 0xe6, 0x62, 0x0d, 0xdc, 0x5c, 0xd8, 0x12, 0x73, 0x1b,
+ 0xb4, 0xda, 0x69, 0xf6, 0xd4, 0xe6, 0xec, 0x48, 0x38, 0x2a, 0x8a, 0xd4, 0xfb, 0x78, 0xc5, 0x63,
+ 0xdf, 0xc7, 0x7b, 0x01, 0x26, 0xcd, 0xa7, 0x51, 0x78, 0x0a, 0x4d, 0x1e, 0x3e, 0x98, 0xaf, 0xa8,
+ 0x60, 0x8a, 0x2a, 0xf3, 0xbe, 0xda, 0xe8, 0xb1, 0xef, 0xab, 0x3d, 0x07, 0x25, 0xf9, 0x56, 0x58,
+ 0x92, 0xdf, 0x15, 0x85, 0x3f, 0x12, 0x86, 0x0a, 0xcb, 0x0c, 0x44, 0xcb, 0xf1, 0x3b, 0x4e, 0x93,
+ 0x8d, 0x90, 0xac, 0x07, 0x54, 0x2b, 0x6b, 0x43, 0x61, 0xd0, 0xa0, 0x62, 0x3d, 0x8e, 0xbd, 0x16,
+ 0x7d, 0x35, 0xf0, 0x93, 0xcc, 0x88, 0xea, 0xf1, 0xae, 0x84, 0xa3, 0xa2, 0xb0, 0xff, 0xc6, 0x82,
+ 0xec, 0x43, 0x47, 0xa9, 0x1a, 0x44, 0xeb, 0xd8, 0x1a, 0xc4, 0x74, 0x7d, 0x55, 0xe1, 0x44, 0xf5,
+ 0x55, 0x66, 0xe9, 0x53, 0xf1, 0xa1, 0xa5, 0x4f, 0x6f, 0xd2, 0xf7, 0xda, 0x45, 0x8d, 0xd4, 0x44,
+ 0xbf, 0x3b, 0xed, 0xc4, 0x86, 0x31, 0xd7, 0x51, 0x25, 0xde, 0x93, 0xc2, 0xad, 0x5a, 0x59, 0xe6,
+ 0x44, 0x12, 0x53, 0xd9, 0xfb, 0xe6, 0xf7, 0x2f, 0x3e, 0xf5, 0xad, 0xef, 0x5f, 0x7c, 0xea, 0x3b,
+ 0xdf, 0xbf, 0xf8, 0xd4, 0xc7, 0xef, 0x5f, 0xb4, 0xbe, 0x79, 0xff, 0xa2, 0xf5, 0xad, 0xfb, 0x17,
+ 0xad, 0xef, 0xdc, 0xbf, 0x68, 0x7d, 0xef, 0xfe, 0x45, 0xeb, 0x8b, 0x7f, 0x79, 0xf1, 0xa9, 0x57,
+ 0xdf, 0x3d, 0xcc, 0xff, 0xd7, 0xfd, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x19, 0xab, 0xb5, 0x8b,
+ 0x9e, 0x77, 0x00, 0x00,
}
func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) {
@@ -4151,6 +4154,11 @@ func (m *ApplicationStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
+ i -= len(m.ResourceHealthSource)
+ copy(dAtA[i:], m.ResourceHealthSource)
+ i = encodeVarintGenerated(dAtA, i, uint64(len(m.ResourceHealthSource)))
+ i--
+ dAtA[i] = 0x5a
{
size, err := m.Summary.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
@@ -8586,6 +8594,8 @@ func (m *ApplicationStatus) Size() (n int) {
n += 1 + l + sovGenerated(uint64(l))
l = m.Summary.Size()
n += 1 + l + sovGenerated(uint64(l))
+ l = len(m.ResourceHealthSource)
+ n += 1 + l + sovGenerated(uint64(l))
return n
}
@@ -10415,6 +10425,7 @@ func (this *ApplicationStatus) String() string {
`ObservedAt:` + strings.Replace(fmt.Sprintf("%v", this.ObservedAt), "Time", "v1.Time", 1) + `,`,
`SourceType:` + fmt.Sprintf("%v", this.SourceType) + `,`,
`Summary:` + strings.Replace(strings.Replace(this.Summary.String(), "ApplicationSummary", "ApplicationSummary", 1), `&`, ``, 1) + `,`,
+ `ResourceHealthSource:` + fmt.Sprintf("%v", this.ResourceHealthSource) + `,`,
`}`,
}, "")
return s
@@ -15306,6 +15317,38 @@ func (m *ApplicationStatus) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
+ case 11:
+ if wireType != 2 {
+ return fmt.Errorf("proto: wrong wireType = %d for field ResourceHealthSource", 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.ResourceHealthSource = ResourceHealthLocation(dAtA[iNdEx:postIndex])
+ iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])
diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto
index ed4f358da3e3a..28077aa59f926 100644
--- a/pkg/apis/application/v1alpha1/generated.proto
+++ b/pkg/apis/application/v1alpha1/generated.proto
@@ -325,6 +325,9 @@ message ApplicationStatus {
// Summary contains a list of URLs and container images used by this application
optional ApplicationSummary summary = 10;
+
+ // ResourceHealthSource indicates where the resource health status is stored: inline if not set or appTree
+ optional string resourceHealthSource = 11;
}
// ApplicationSummary contains information about URLs and container images used by an application
diff --git a/pkg/apis/application/v1alpha1/openapi_generated.go b/pkg/apis/application/v1alpha1/openapi_generated.go
index 25fd3a7ccc43a..721d744f3b26e 100644
--- a/pkg/apis/application/v1alpha1/openapi_generated.go
+++ b/pkg/apis/application/v1alpha1/openapi_generated.go
@@ -1176,6 +1176,13 @@ func schema_pkg_apis_application_v1alpha1_ApplicationStatus(ref common.Reference
Ref: ref("github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1.ApplicationSummary"),
},
},
+ "resourceHealthSource": {
+ SchemaProps: spec.SchemaProps{
+ Description: "ResourceHealthSource indicates where the resource health status is stored: inline if not set or appTree",
+ Type: []string{"string"},
+ Format: "",
+ },
+ },
},
},
},
diff --git a/pkg/apis/application/v1alpha1/types.go b/pkg/apis/application/v1alpha1/types.go
index 2b33d7a9e6fba..23b77d1134628 100644
--- a/pkg/apis/application/v1alpha1/types.go
+++ b/pkg/apis/application/v1alpha1/types.go
@@ -514,6 +514,13 @@ type ApplicationDestination struct {
isServerInferred bool `json:"-"`
}
+type ResourceHealthLocation string
+
+var (
+ ResourceHealthLocationInline ResourceHealthLocation = ""
+ ResourceHealthLocationAppTree ResourceHealthLocation = "appTree"
+)
+
// ApplicationStatus contains status information for the application
type ApplicationStatus struct {
// Resources is a list of Kubernetes resources managed by this application
@@ -537,6 +544,8 @@ type ApplicationStatus struct {
SourceType ApplicationSourceType `json:"sourceType,omitempty" protobuf:"bytes,9,opt,name=sourceType"`
// Summary contains a list of URLs and container images used by this application
Summary ApplicationSummary `json:"summary,omitempty" protobuf:"bytes,10,opt,name=summary"`
+ // ResourceHealthSource indicates where the resource health status is stored: inline if not set or appTree
+ ResourceHealthSource ResourceHealthLocation `json:"resourceHealthSource,omitempty" protobuf:"bytes,11,opt,name=resourceHealthSource"`
}
// JWTTokens represents a list of JWT tokens
diff --git a/server/application/application.go b/server/application/application.go
index e6b9acbef39f5..f10dfc5e38002 100644
--- a/server/application/application.go
+++ b/server/application/application.go
@@ -218,7 +218,7 @@ func (s *Server) Create(ctx context.Context, q *application.ApplicationCreateReq
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -337,7 +337,7 @@ func (s *Server) GetManifests(ctx context.Context, q *application.ApplicationMan
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -562,10 +562,12 @@ func (s *Server) Get(ctx context.Context, q *application.ApplicationQuery) (*app
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
+ s.inferResourcesStatusHealth(a)
+
if q.Refresh == nil {
return a, nil
}
@@ -654,7 +656,7 @@ func (s *Server) ListResourceEvents(ctx context.Context, q *application.Applicat
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -809,6 +811,7 @@ func (s *Server) updateApp(app *appv1.Application, newApp *appv1.Application, ct
if err != nil {
return nil, fmt.Errorf("error getting application: %w", err)
}
+ s.inferResourcesStatusHealth(app)
}
return nil, status.Errorf(codes.Internal, "Failed to update application. Too many conflicts")
}
@@ -826,7 +829,7 @@ func (s *Server) Update(ctx context.Context, q *application.ApplicationUpdateReq
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -855,7 +858,7 @@ func (s *Server) UpdateSpec(ctx context.Context, q *application.ApplicationUpdat
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -887,7 +890,7 @@ func (s *Server) Patch(ctx context.Context, q *application.ApplicationPatchReque
if app.Spec.Source.Plugin != nil && app.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": app.Name,
- "plugin": app.Spec.Source.Plugin.Name,
+ "plugin": app.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -944,7 +947,7 @@ func (s *Server) Delete(ctx context.Context, q *application.ApplicationDeleteReq
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -1038,6 +1041,7 @@ func (s *Server) Watch(q *application.ApplicationQuery, ws application.Applicati
// do not emit apps user does not have accessing
return
}
+ s.inferResourcesStatusHealth(&a)
err := ws.Send(&appv1.ApplicationWatchEvent{
Type: eventType,
Application: a,
@@ -1356,7 +1360,7 @@ func (s *Server) ResourceTree(ctx context.Context, q *application.ResourcesQuery
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -1399,7 +1403,7 @@ func (s *Server) RevisionMetadata(ctx context.Context, q *application.RevisionMe
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -1446,7 +1450,7 @@ func (s *Server) ManagedResources(ctx context.Context, q *application.ResourcesQ
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -1516,7 +1520,7 @@ func (s *Server) PodLogs(q *application.ApplicationPodLogsQuery, ws application.
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -1724,6 +1728,8 @@ func (s *Server) Sync(ctx context.Context, syncReq *application.ApplicationSyncR
return a, fmt.Errorf("error getting app project: %w", err)
}
+ s.inferResourcesStatusHealth(a)
+
if !proj.Spec.SyncWindows.Matches(a).CanSync(true) {
return a, status.Errorf(codes.PermissionDenied, "cannot sync: blocked by sync window")
}
@@ -1735,7 +1741,7 @@ func (s *Server) Sync(ctx context.Context, syncReq *application.ApplicationSyncR
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -1834,10 +1840,12 @@ func (s *Server) Rollback(ctx context.Context, rollbackReq *application.Applicat
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
+ s.inferResourcesStatusHealth(a)
+
if a.DeletionTimestamp != nil {
return nil, status.Errorf(codes.FailedPrecondition, "application is deleting")
}
@@ -2180,7 +2188,7 @@ func (s *Server) GetApplicationSyncWindows(ctx context.Context, q *application.A
if a.Spec.Source.Plugin != nil && a.Spec.Source.Plugin.Name != "" {
log.WithFields(map[string]interface{}{
"application": a.Name,
- "plugin": a.Spec.Source.Plugin.Name,
+ "plugin": a.Spec.Source.Plugin.Name,
}).Warnf(argocommon.ConfigMapPluginDeprecationWarning)
}
@@ -2201,6 +2209,22 @@ func (s *Server) GetApplicationSyncWindows(ctx context.Context, q *application.A
return res, nil
}
+func (s *Server) inferResourcesStatusHealth(app *v1alpha1.Application) {
+ if app.Status.ResourceHealthSource == v1alpha1.ResourceHealthLocationAppTree {
+ tree := &v1alpha1.ApplicationTree{}
+ if err := s.cache.GetAppResourcesTree(app.Name, tree); err == nil {
+ healthByKey := map[kube.ResourceKey]*v1alpha1.HealthStatus{}
+ for _, node := range tree.Nodes {
+ healthByKey[kube.NewResourceKey(node.Group, node.Kind, node.Namespace, node.Name)] = node.Health
+ }
+ for i, res := range app.Status.Resources {
+ res.Health = healthByKey[kube.NewResourceKey(res.Group, res.Kind, res.Namespace, res.Name)]
+ app.Status.Resources[i] = res
+ }
+ }
+ }
+}
+
func convertSyncWindows(w *v1alpha1.SyncWindows) []*application.ApplicationSyncWindow {
if w != nil {
var windows []*application.ApplicationSyncWindow
diff --git a/server/application/application_test.go b/server/application/application_test.go
index e44bc1901b728..d89531ed3c016 100644
--- a/server/application/application_test.go
+++ b/server/application/application_test.go
@@ -8,6 +8,7 @@ import (
"testing"
"time"
+ "github.com/argoproj/gitops-engine/pkg/health"
synccommon "github.com/argoproj/gitops-engine/pkg/sync/common"
"github.com/argoproj/gitops-engine/pkg/utils/kube/kubetest"
"github.com/argoproj/pkg/sync"
@@ -35,11 +36,14 @@ import (
appinformer "github.com/argoproj/argo-cd/v2/pkg/client/informers/externalversions"
"github.com/argoproj/argo-cd/v2/reposerver/apiclient"
"github.com/argoproj/argo-cd/v2/reposerver/apiclient/mocks"
+ servercache "github.com/argoproj/argo-cd/v2/server/cache"
"github.com/argoproj/argo-cd/v2/server/rbacpolicy"
"github.com/argoproj/argo-cd/v2/test"
"github.com/argoproj/argo-cd/v2/util/argo"
"github.com/argoproj/argo-cd/v2/util/assets"
"github.com/argoproj/argo-cd/v2/util/cache"
+ cacheutil "github.com/argoproj/argo-cd/v2/util/cache"
+ "github.com/argoproj/argo-cd/v2/util/cache/appstate"
"github.com/argoproj/argo-cd/v2/util/db"
"github.com/argoproj/argo-cd/v2/util/errors"
"github.com/argoproj/argo-cd/v2/util/grpc"
@@ -992,3 +996,43 @@ func TestGetAppRefresh_HardRefresh(t *testing.T) {
assert.Fail(t, "Out of time ( 10 seconds )")
}
}
+
+func TestInferResourcesStatusHealth(t *testing.T) {
+ cacheClient := cacheutil.NewCache(cacheutil.NewInMemoryCache(1 * time.Hour))
+
+ testApp := newTestApp()
+ testApp.Status.ResourceHealthSource = appsv1.ResourceHealthLocationAppTree
+ testApp.Status.Resources = []appsv1.ResourceStatus{{
+ Group: "apps",
+ Kind: "Deployment",
+ Name: "guestbook",
+ Namespace: "default",
+ }, {
+ Group: "apps",
+ Kind: "StatefulSet",
+ Name: "guestbook-stateful",
+ Namespace: "default",
+ }}
+ appServer := newTestAppServer(testApp)
+ appStateCache := appstate.NewCache(cacheClient, time.Minute)
+ err := appStateCache.SetAppResourcesTree(testApp.Name, &appsv1.ApplicationTree{Nodes: []appsv1.ResourceNode{{
+ ResourceRef: appsv1.ResourceRef{
+ Group: "apps",
+ Kind: "Deployment",
+ Name: "guestbook",
+ Namespace: "default",
+ },
+ Health: &appsv1.HealthStatus{
+ Status: health.HealthStatusDegraded,
+ },
+ }}})
+
+ require.NoError(t, err)
+
+ appServer.cache = servercache.NewCache(appStateCache, time.Minute, time.Minute, time.Minute)
+
+ appServer.inferResourcesStatusHealth(testApp)
+
+ assert.Equal(t, health.HealthStatusDegraded, testApp.Status.Resources[0].Health.Status)
+ assert.Nil(t, testApp.Status.Resources[1].Health)
+}
From f82b1aed1a37513af690696297fac3762efd98b0 Mon Sep 17 00:00:00 2001
From: my-git9
Date: Thu, 18 Aug 2022 22:14:47 +0800
Subject: [PATCH 03/15] fix: Add logic to handle for fileHandle.Close() (#9963)
(#10361)
Signed-off-by: xin.li
Signed-off-by: xin.li
Signed-off-by: Yi Cai
---
util/cert/cert.go | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/util/cert/cert.go b/util/cert/cert.go
index e42f5bb126ebd..c7ac284c20314 100644
--- a/util/cert/cert.go
+++ b/util/cert/cert.go
@@ -16,6 +16,7 @@ import (
"regexp"
"strings"
+ log "github.com/sirupsen/logrus"
"golang.org/x/crypto/ssh"
"github.com/argoproj/argo-cd/v2/common"
@@ -130,7 +131,14 @@ func ParseTLSCertificatesFromPath(sourceFile string) ([]string, error) {
if err != nil {
return nil, err
}
- defer fileHandle.Close()
+ defer func() {
+ if err = fileHandle.Close(); err != nil {
+ log.WithFields(log.Fields{
+ common.SecurityField: common.SecurityMedium,
+ common.SecurityCWEField: 775,
+ }).Errorf("error closing file %q: %v", fileHandle.Name(), err)
+ }
+ }()
return ParseTLSCertificatesFromStream(fileHandle)
}
@@ -187,7 +195,14 @@ func ParseSSHKnownHostsFromPath(sourceFile string) ([]string, error) {
if err != nil {
return nil, err
}
- defer fileHandle.Close()
+ defer func() {
+ if err = fileHandle.Close(); err != nil {
+ log.WithFields(log.Fields{
+ common.SecurityField: common.SecurityMedium,
+ common.SecurityCWEField: 775,
+ }).Errorf("error closing file %q: %v", fileHandle.Name(), err)
+ }
+ }()
return ParseSSHKnownHostsFromStream(fileHandle)
}
From c760c5add246697d8b3b62e44090dcbe690e10cf Mon Sep 17 00:00:00 2001
From: Xijun Dai
Date: Thu, 18 Aug 2022 22:22:13 +0800
Subject: [PATCH 04/15] docs: fix typo in upgrade notes (#10377)
Signed-off-by: Xijun Dai
Signed-off-by: Xijun Dai
Signed-off-by: Yi Cai
---
docs/operator-manual/upgrading/2.3-2.4.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/docs/operator-manual/upgrading/2.3-2.4.md b/docs/operator-manual/upgrading/2.3-2.4.md
index b46a7ed956b3e..00869b790b06d 100644
--- a/docs/operator-manual/upgrading/2.3-2.4.md
+++ b/docs/operator-manual/upgrading/2.3-2.4.md
@@ -107,13 +107,13 @@ p, role:org-admin, *, create, my-proj/*, allow
New:
```csv
-p, role: org-admin, clusters, create, my-proj/*, allow
-p, role: org-admin, projects, create, my-proj/*, allow
-p, role: org-admin, applications, create, my-proj/*, allow
-p, role: org-admin, repositories, create, my-proj/*, allow
-p, role: org-admin, certificates, create, my-proj/*, allow
-p, role: org-admin, accounts, create, my-proj/*, allow
-p, role: org-admin, gpgkeys, create, my-proj/*, allow
+p, role:org-admin, clusters, create, my-proj/*, allow
+p, role:org-admin, projects, create, my-proj/*, allow
+p, role:org-admin, applications, create, my-proj/*, allow
+p, role:org-admin, repositories, create, my-proj/*, allow
+p, role:org-admin, certificates, create, my-proj/*, allow
+p, role:org-admin, accounts, create, my-proj/*, allow
+p, role:org-admin, gpgkeys, create, my-proj/*, allow
```
## Enable logs RBAC enforcement
From cc518c4ba381a9825ae8e3011639f58242218473 Mon Sep 17 00:00:00 2001
From: my-git9
Date: Thu, 18 Aug 2022 22:25:17 +0800
Subject: [PATCH 05/15] fix: add space before prompt in CLI (#10362)
Signed-off-by: xin.li
Signed-off-by: xin.li
Signed-off-by: Yi Cai
---
cmd/argocd/commands/app.go | 4 ++--
util/cli/cli.go | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/cmd/argocd/commands/app.go b/cmd/argocd/commands/app.go
index 9a0e3bcbfacf9..99355a89c30ad 100644
--- a/cmd/argocd/commands/app.go
+++ b/cmd/argocd/commands/app.go
@@ -1156,10 +1156,10 @@ func NewApplicationDeleteCommand(clientOpts *argocdclient.ClientOptions) *cobra.
if cascade && isTerminal && !noPrompt {
var lowercaseAnswer string
if numOfApps == 1 {
- lowercaseAnswer = cli.AskToProceedS("Are you sure you want to delete '" + appFullName + "' and all its resources? [y/n]")
+ lowercaseAnswer = cli.AskToProceedS("Are you sure you want to delete '" + appFullName + "' and all its resources? [y/n] ")
} else {
if !isConfirmAll {
- lowercaseAnswer = cli.AskToProceedS("Are you sure you want to delete '" + appFullName + "' and all its resources? [y/n/A] where 'A' is to delete all specified apps and their resources without prompting")
+ lowercaseAnswer = cli.AskToProceedS("Are you sure you want to delete '" + appFullName + "' and all its resources? [y/n/A] where 'A' is to delete all specified apps and their resources without prompting ")
if lowercaseAnswer == "a" {
lowercaseAnswer = "y"
isConfirmAll = true
diff --git a/util/cli/cli.go b/util/cli/cli.go
index 8b4d014c921ff..a91a6fdd7e21b 100644
--- a/util/cli/cli.go
+++ b/util/cli/cli.go
@@ -111,7 +111,7 @@ func PromptPassword(password string) string {
}
// AskToProceed prompts the user with a message (typically a yes or no question) and returns whether
-// or not they responded in the affirmative or negative.
+// they responded in the affirmative or negative.
func AskToProceed(message string) bool {
for {
fmt.Print(message)
From 29994cce98a7a7d6ec5b0e0f78904294745778d0 Mon Sep 17 00:00:00 2001
From: Jun Duan
Date: Thu, 18 Aug 2022 12:01:58 -0400
Subject: [PATCH 06/15] docs: fix indentation of example AppProject in 'Sync
Windows' documentation (#10388)
Signed-off-by: Yi Cai
---
docs/user-guide/sync_windows.md | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/docs/user-guide/sync_windows.md b/docs/user-guide/sync_windows.md
index 8d7eb672b34e2..8129e78c27062 100644
--- a/docs/user-guide/sync_windows.md
+++ b/docs/user-guide/sync_windows.md
@@ -67,12 +67,12 @@ spec:
duration: 1h
namespaces:
- default
- - kind: allow
- schedule: '0 23 * * *'
- duration: 1h
- clusters:
- - in-cluster
- - cluster1
+ - kind: allow
+ schedule: '0 23 * * *'
+ duration: 1h
+ clusters:
+ - in-cluster
+ - cluster1
```
In order to perform a sync when syncs are being prevented by a window, you can configure the window to allow manual syncs
From 1e92891bfa624be6028512ee8f4dc886370a06c3 Mon Sep 17 00:00:00 2001
From: jannfis
Date: Thu, 18 Aug 2022 22:15:38 +0200
Subject: [PATCH 07/15] fix: Correctly assume cluster-scoped resources to be
self-referenced (#10390)
Signed-off-by: jannfis
Signed-off-by: jannfis
Signed-off-by: Yi Cai
---
controller/state.go | 5 +-
test/e2e/app_management_test.go | 93 +++++++++++++++++++++++++++------
test/e2e/fixture/fixture.go | 13 ++---
3 files changed, 88 insertions(+), 23 deletions(-)
diff --git a/controller/state.go b/controller/state.go
index decd7218017dd..d9a0ed4f05acd 100644
--- a/controller/state.go
+++ b/controller/state.go
@@ -702,10 +702,11 @@ func (m *appStateManager) isSelfReferencedObj(obj *unstructured.Unstructured, ap
// In order for us to assume obj to be managed by this application, the
// values from the annotation have to match the properties from the live
- // object.
+ // object. Cluster scoped objects carry the app's destination namespace
+ // in the tracking annotation, but are unique in GVK + name combination.
appInstance := m.resourceTracking.GetAppInstance(obj, appLabelKey, trackingMethod)
if appInstance != nil {
- return obj.GetNamespace() == appInstance.Namespace &&
+ return (obj.GetNamespace() == appInstance.Namespace || obj.GetNamespace() == "") &&
obj.GetName() == appInstance.Name &&
obj.GetObjectKind().GroupVersionKind().Group == appInstance.Group &&
obj.GetObjectKind().GroupVersionKind().Kind == appInstance.Kind
diff --git a/test/e2e/app_management_test.go b/test/e2e/app_management_test.go
index a2983093dd74a..a5d39c6734f6e 100644
--- a/test/e2e/app_management_test.go
+++ b/test/e2e/app_management_test.go
@@ -20,6 +20,7 @@ import (
"github.com/stretchr/testify/require"
v1 "k8s.io/api/core/v1"
networkingv1 "k8s.io/api/networking/v1"
+ rbacv1 "k8s.io/api/rbac/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
@@ -1671,9 +1672,11 @@ func TestSyncWithInfos(t *testing.T) {
})
}
-//Given: argocd app create does not provide --dest-namespace
-// Manifest contains resource console which does not require namespace
-//Expect: no app.Status.Conditions
+// Given: argocd app create does not provide --dest-namespace
+//
+// Manifest contains resource console which does not require namespace
+//
+// Expect: no app.Status.Conditions
func TestCreateAppWithNoNameSpaceForGlobalResource(t *testing.T) {
Given(t).
Path(globalWithNoNameSpace).
@@ -1688,10 +1691,12 @@ func TestCreateAppWithNoNameSpaceForGlobalResource(t *testing.T) {
})
}
-//Given: argocd app create does not provide --dest-namespace
-// Manifest contains resource deployment, and service which requires namespace
-// Deployment and service do not have namespace in manifest
-//Expect: app.Status.Conditions for deployment ans service which does not have namespace in manifest
+// Given: argocd app create does not provide --dest-namespace
+//
+// Manifest contains resource deployment, and service which requires namespace
+// Deployment and service do not have namespace in manifest
+//
+// Expect: app.Status.Conditions for deployment ans service which does not have namespace in manifest
func TestCreateAppWithNoNameSpaceWhenRequired(t *testing.T) {
Given(t).
Path(guestbookPath).
@@ -1709,11 +1714,13 @@ func TestCreateAppWithNoNameSpaceWhenRequired(t *testing.T) {
})
}
-//Given: argocd app create does not provide --dest-namespace
-// Manifest contains resource deployment, and service which requires namespace
-// Some deployment and service has namespace in manifest
-// Some deployment and service does not have namespace in manifest
-//Expect: app.Status.Conditions for deployment and service which does not have namespace in manifest
+// Given: argocd app create does not provide --dest-namespace
+//
+// Manifest contains resource deployment, and service which requires namespace
+// Some deployment and service has namespace in manifest
+// Some deployment and service does not have namespace in manifest
+//
+// Expect: app.Status.Conditions for deployment and service which does not have namespace in manifest
func TestCreateAppWithNoNameSpaceWhenRequired2(t *testing.T) {
Given(t).
Path(guestbookWithNamespace).
@@ -1789,10 +1796,13 @@ func TestListResource(t *testing.T) {
}
// Given application is set with --sync-option CreateNamespace=true
-// application --dest-namespace does not exist
+//
+// application --dest-namespace does not exist
+//
// Verity application --dest-namespace is created
-// application sync successful
-// when application is deleted, --dest-namespace is not deleted
+//
+// application sync successful
+// when application is deleted, --dest-namespace is not deleted
func TestNamespaceAutoCreation(t *testing.T) {
SkipOnEnv(t, "OPENSHIFT")
updatedNamespace := getNewNamespace(t)
@@ -2392,5 +2402,58 @@ func TestAnnotationTrackingExtraResources(t *testing.T) {
Then().
Expect(OperationPhaseIs(OperationSucceeded)).
Expect(SyncStatusIs(SyncStatusCodeSynced)).
+ Expect(HealthIs(health.HealthStatusHealthy)).
+ When().
+ And(func() {
+ // Add a cluster-scoped resource that is not referencing itself
+ FailOnErr(KubeClientset.RbacV1().ClusterRoles().Create(context.Background(), &rbacv1.ClusterRole{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "e2e-test-clusterrole",
+ Annotations: map[string]string{
+ common.AnnotationKeyAppInstance: fmt.Sprintf("%s:rbac.authorization.k8s.io/ClusterRole:%s/e2e-other-clusterrole", Name(), DeploymentNamespace()),
+ },
+ Labels: map[string]string{
+ fixture.TestingLabel: "true",
+ },
+ },
+ }, metav1.CreateOptions{}))
+ }).
+ Refresh(RefreshTypeNormal).
+ Then().
+ Expect(OperationPhaseIs(OperationSucceeded)).
+ Expect(SyncStatusIs(SyncStatusCodeSynced)).
+ Expect(HealthIs(health.HealthStatusHealthy)).
+ When().
+ And(func() {
+ // Add a cluster-scoped resource that is referencing itself
+ FailOnErr(KubeClientset.RbacV1().ClusterRoles().Create(context.Background(), &rbacv1.ClusterRole{
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "e2e-other-clusterrole",
+ Annotations: map[string]string{
+ common.AnnotationKeyAppInstance: fmt.Sprintf("%s:rbac.authorization.k8s.io/ClusterRole:%s/e2e-other-clusterrole", Name(), DeploymentNamespace()),
+ },
+ Labels: map[string]string{
+ fixture.TestingLabel: "true",
+ },
+ },
+ }, metav1.CreateOptions{}))
+ }).
+ Refresh(RefreshTypeNormal).
+ Then().
+ Expect(OperationPhaseIs(OperationSucceeded)).
+ Expect(SyncStatusIs(SyncStatusCodeOutOfSync)).
+ Expect(HealthIs(health.HealthStatusHealthy)).
+ When().
+ Sync("--prune").
+ And(func() {
+ // The extra configmap must be pruned now, because it's tracked and does not exist in git
+ cr, err := KubeClientset.RbacV1().ClusterRoles().Get(context.Background(), "e2e-other-clusterrole", metav1.GetOptions{})
+ require.Error(t, err)
+ require.Equal(t, "", cr.Name)
+ }).
+ Then().
+ Expect(OperationPhaseIs(OperationSucceeded)).
+ Expect(SyncStatusIs(SyncStatusCodeSynced)).
Expect(HealthIs(health.HealthStatusHealthy))
+
}
diff --git a/test/e2e/fixture/fixture.go b/test/e2e/fixture/fixture.go
index 7b376d436d79d..4a9f6b3d6c00f 100644
--- a/test/e2e/fixture/fixture.go
+++ b/test/e2e/fixture/fixture.go
@@ -41,7 +41,7 @@ const (
defaultAdminPassword = "password"
defaultAdminUsername = "admin"
DefaultTestUserPassword = "password"
- testingLabel = "e2e.argoproj.io"
+ TestingLabel = "e2e.argoproj.io"
ArgoCDNamespace = "argocd-e2e"
ArgoCDAppNamespace = "argocd-e2e-external"
@@ -308,7 +308,7 @@ func CreateSecret(username, password string) string {
"--from-literal=username="+username,
"--from-literal=password="+password,
"-n", TestNamespace()))
- FailOnErr(Run("", "kubectl", "label", "secret", secretName, testingLabel+"=true", "-n", TestNamespace()))
+ FailOnErr(Run("", "kubectl", "label", "secret", secretName, TestingLabel+"=true", "-n", TestNamespace()))
return secretName
}
@@ -531,10 +531,11 @@ func EnsureCleanState(t *testing.T) {
v1.DeleteOptions{PropagationPolicy: &policy}, v1.ListOptions{LabelSelector: common.LabelKeySecretType + "=" + common.LabelValueSecretTypeCluster}))
// kubectl delete secrets -l e2e.argoproj.io=true
CheckError(KubeClientset.CoreV1().Secrets(TestNamespace()).DeleteCollection(context.Background(),
- v1.DeleteOptions{PropagationPolicy: &policy}, v1.ListOptions{LabelSelector: testingLabel + "=true"}))
+ v1.DeleteOptions{PropagationPolicy: &policy}, v1.ListOptions{LabelSelector: TestingLabel + "=true"}))
- FailOnErr(Run("", "kubectl", "delete", "ns", "-l", testingLabel+"=true", "--field-selector", "status.phase=Active", "--wait=false"))
- FailOnErr(Run("", "kubectl", "delete", "crd", "-l", testingLabel+"=true", "--wait=false"))
+ FailOnErr(Run("", "kubectl", "delete", "ns", "-l", TestingLabel+"=true", "--field-selector", "status.phase=Active", "--wait=false"))
+ FailOnErr(Run("", "kubectl", "delete", "crd", "-l", TestingLabel+"=true", "--wait=false"))
+ FailOnErr(Run("", "kubectl", "delete", "clusterroles", "-l", TestingLabel+"=true", "--wait=false"))
// reset settings
updateSettingConfigMap(func(cm *corev1.ConfigMap) error {
@@ -627,7 +628,7 @@ func EnsureCleanState(t *testing.T) {
// create namespace
FailOnErr(Run("", "kubectl", "create", "ns", DeploymentNamespace()))
- FailOnErr(Run("", "kubectl", "label", "ns", DeploymentNamespace(), testingLabel+"=true"))
+ FailOnErr(Run("", "kubectl", "label", "ns", DeploymentNamespace(), TestingLabel+"=true"))
log.WithFields(log.Fields{"duration": time.Since(start), "name": t.Name(), "id": id, "username": "admin", "password": "password"}).Info("clean state")
}
From 01d785240e75c7973b4d35fcef3cac620be0b489 Mon Sep 17 00:00:00 2001
From: ciiay
Date: Fri, 24 Jun 2022 08:45:21 -0400
Subject: [PATCH 08/15] ui-make-https-repo-credential-editable
Signed-off-by: ciiay
Signed-off-by: Yi Cai
---
.../components/repo-details/repo-details.tsx | 86 ++++
.../components/repos-list/repos-list.scss | 7 +
.../components/repos-list/repos-list.tsx | 467 +++++++++++-------
ui/src/app/shared/models.ts | 9 +
ui/src/app/shared/services/repo-service.ts | 31 ++
5 files changed, 409 insertions(+), 191 deletions(-)
create mode 100644 ui/src/app/settings/components/repo-details/repo-details.tsx
diff --git a/ui/src/app/settings/components/repo-details/repo-details.tsx b/ui/src/app/settings/components/repo-details/repo-details.tsx
new file mode 100644
index 0000000000000..b7423348cb06e
--- /dev/null
+++ b/ui/src/app/settings/components/repo-details/repo-details.tsx
@@ -0,0 +1,86 @@
+import * as React from 'react';
+import {FormField} from 'argo-ui';
+import {FormApi, Text} from 'react-form';
+import {EditablePanel, EditablePanelItem} from '../../../shared/components';
+import * as models from '../../../shared/models';
+import {NewHTTPSRepoParams} from '../repos-list/repos-list';
+
+export const RepoDetails = (props: {repo: models.Repository; save?: (params: NewHTTPSRepoParams) => Promise}) => {
+ const {repo, save} = props;
+ const FormItems = (repository: models.Repository): EditablePanelItem[] => {
+ const items: EditablePanelItem[] = [
+ {
+ title: 'Type',
+ view: repository.type
+ },
+ {
+ title: 'Repository URL',
+ view: repository.repo
+ },
+ {
+ title: 'Username (optional)',
+ view: repository.username || '',
+ edit: (formApi: FormApi) =>
+ },
+ {
+ title: 'Password (optional)',
+ view: repository.username ? '******' : '',
+ edit: (formApi: FormApi) =>
+ }
+ ];
+
+ if (repository.name) {
+ items.splice(1, 0, {
+ title: 'NAME',
+ view: repository.name
+ });
+ }
+
+ if (repository.project) {
+ items.splice(repository.name ? 2 : 1, 0, {
+ title: 'Project',
+ view: repository.project
+ });
+ }
+
+ if (repository.proxy) {
+ items.push({
+ title: 'Proxy (optional)',
+ view: repository.proxy
+ });
+ }
+
+ return items;
+ };
+
+ const newRepo = {
+ type: repo.type,
+ name: repo.name || '',
+ url: repo.repo,
+ username: repo.username || '',
+ password: repo.password || '',
+ tlsClientCertData: repo.tlsClientCertData || '',
+ tlsClientCertKey: repo.tlsClientCertKey || '',
+ insecure: repo.insecure || false,
+ enableLfs: repo.enableLfs || false,
+ proxy: repo.proxy || '',
+ project: repo.project || ''
+ };
+
+ return (
+ ({
+ password: !input.password && input.username && 'Password is required if username is given.'
+ })}
+ save={async input => {
+ const params: NewHTTPSRepoParams = {...newRepo};
+ params.username = input.username || '';
+ params.password = input.password || '';
+ save(params);
+ }}
+ title='CONNECTED REPOSITORY'
+ items={FormItems(repo)}
+ />
+ );
+};
diff --git a/ui/src/app/settings/components/repos-list/repos-list.scss b/ui/src/app/settings/components/repos-list/repos-list.scss
index 9b5b30b38e02b..0994a8c97a523 100644
--- a/ui/src/app/settings/components/repos-list/repos-list.scss
+++ b/ui/src/app/settings/components/repos-list/repos-list.scss
@@ -28,6 +28,13 @@
}
.argo-table-list {
+ .item-clickable {
+ cursor: pointer;
+
+ &:hover {
+ box-shadow: 1px 2px 3px rgba($argo-color-gray-9, 0.1), 0 0 0 1px rgba($argo-color-teal-5, 0.5);
+ }
+ }
.argo-dropdown {
float: right;
}
diff --git a/ui/src/app/settings/components/repos-list/repos-list.tsx b/ui/src/app/settings/components/repos-list/repos-list.tsx
index 7feec8daa027b..326fc88b5520b 100644
--- a/ui/src/app/settings/components/repos-list/repos-list.tsx
+++ b/ui/src/app/settings/components/repos-list/repos-list.tsx
@@ -8,6 +8,7 @@ import {CheckboxField, ConnectionStateIcon, DataLoader, EmptyState, ErrorNotific
import {AppContext} from '../../../shared/context';
import * as models from '../../../shared/models';
import {services} from '../../../shared/services';
+import {RepoDetails} from '../repo-details/repo-details';
require('./repos-list.scss');
@@ -22,7 +23,7 @@ interface NewSSHRepoParams {
project?: string;
}
-interface NewHTTPSRepoParams {
+export interface NewHTTPSRepoParams {
type: string;
name: string;
url: string;
@@ -86,6 +87,8 @@ export class ReposList extends React.Component<
{
connecting: boolean;
method: string;
+ currentRepo: models.Repository;
+ displayEditPanel: boolean;
}
> {
public static contextTypes = {
@@ -103,7 +106,9 @@ export class ReposList extends React.Component<
super(props);
this.state = {
connecting: false,
- method: ConnectionMethod.SSH
+ method: ConnectionMethod.SSH,
+ currentRepo: null,
+ displayEditPanel: false
};
}
@@ -118,10 +123,10 @@ export class ReposList extends React.Component<
)}
items={[ConnectionMethod.SSH, ConnectionMethod.HTTPS, ConnectionMethod.GITHUBAPP].map(
- (type: ConnectionMethod.SSH | ConnectionMethod.HTTPS | ConnectionMethod.GITHUBAPP) => ({
- title: type.toUpperCase(),
+ (connectMethod: ConnectionMethod.SSH | ConnectionMethod.HTTPS | ConnectionMethod.GITHUBAPP) => ({
+ title: connectMethod.toUpperCase(),
action: () => {
- onSelection(type);
+ onSelection(connectMethod);
const formState = this.formApi.getFormState();
this.formApi.setFormState({
...formState,
@@ -165,6 +170,45 @@ export class ReposList extends React.Component<
}
}
+ private SlidingPanelHeader() {
+ return (
+ <>
+ (
+ {this.showConnectRepo && (
+ <>
+ {' '}
+ {' '}
+
+ >
+ )}
+ (
+ {this.state.displayEditPanel && (
+
+ )}
+ )
+ >
+ );
+ }
+
private onSubmitForm() {
switch (this.state.method) {
case ConnectionMethod.SSH:
@@ -215,7 +259,10 @@ export class ReposList extends React.Component<
{repos.map(repo => (
-
+
(this.isRepoUpdatable(repo) ? this.displayEditSliding(repo) : null)}>
@@ -299,201 +346,217 @@ export class ReposList extends React.Component<
(this.showConnectRepo = false)}
- header={
- <>
- {' '}
- {' '}
-
- >
- }>
- {this.ConnectRepoFormButton(this.state.method, method => {
- this.setState({method});
- })}
- services.projects.list('items.metadata.name').then(projects => projects.map(proj => proj.metadata.name).sort())}>
- {projects => (
-