Compare commits

...

19 Commits

Author SHA1 Message Date
argo-bot
c10ae246ab Bump version to 1.6.0 2020-06-16 22:30:38 +00:00
argo-bot
41e72d1247 Bump version to 1.6.0 2020-06-16 22:30:28 +00:00
Timothy Vandenbrande
6393d925bf fix: use uid instead of named user in Dockerfile (#3108) 2020-06-16 15:06:52 -07:00
Alexander Matyushentsev
faffea357e feat: upgrade redis to 5.0.8-alpine (#3783) 2020-06-16 14:04:49 -07:00
Alexander Matyushentsev
623b4757f4 fix: upgrade awscli version (#3774) 2020-06-16 10:11:19 -07:00
Alexander Matyushentsev
a68f483fa3 fix: html encode login error/description before rendering it (#3773) 2020-06-15 16:34:01 -07:00
Alexander Matyushentsev
a17217d9e8 fix: avoid panic in badge handler (#3741) 2020-06-15 12:02:14 -07:00
Alexander Matyushentsev
a7c776d356 fix: cluster state cache should be initialized before using (#3752) (#3763) 2020-06-12 20:18:02 -07:00
May Zhang
247879b424 feat: Support additional metadata in Application sync operation (#3747)
* feat: Support additional metadata in Application sync operation

* regenerated generated.pb.go
2020-06-11 14:39:33 -07:00
Alexander Matyushentsev
2058cb6374 fix: ensure cache settings read/writes are protected by mutex (#3753) 2020-06-11 13:13:48 -07:00
argo-bot
f5bcc1dbcc Bump version to 1.6.0-rc2 2020-06-09 22:12:40 +00:00
argo-bot
4d7e6945bd Bump version to 1.6.0-rc2 2020-06-09 22:12:30 +00:00
jannfis
df65d017a2 fix: Reap orphaned ("zombie") processes in argocd-repo-server pod (#3611) (#3721)
* fix: Reap orphaned ("zombie") processes in argocd-repo-server pod
2020-06-09 13:59:30 -07:00
jannfis
283645e63e chore: Introduce release automation (#3711)
* chore: Introduce release automation
2020-06-09 12:14:14 -07:00
Alexander Matyushentsev
0e016a368d fix: delete api should return 404 error if app does not exist (#3739) 2020-06-09 11:54:22 -07:00
jannfis
26d711a6db fix: Fix possible nil pointer deref on resource deduplication (#3725) 2020-06-08 15:35:44 -07:00
Alexander Matyushentsev
1f12aac601 fix: upgrade gitops-engine dependency to v0.1.2 (#3729) 2020-06-08 15:13:49 -07:00
Alexander Matyushentsev
b39e93a4d2 Update manifests to v1.6.0-rc1 2020-06-02 13:30:08 -07:00
Alexander Matyushentsev
97aa28a687 Update manifests to v1.6.0-rc1 2020-06-02 12:15:02 -07:00
37 changed files with 1515 additions and 547 deletions

289
.github/workflows/release.yaml vendored Normal file
View File

@@ -0,0 +1,289 @@
name: Create ArgoCD release
on:
push:
tags:
- 'release-v*'
- '!release-v1.5*'
- '!release-v1.4*'
- '!release-v1.3*'
- '!release-v1.2*'
- '!release-v1.1*'
- '!release-v1.0*'
- '!release-v0*'
jobs:
prepare-release:
name: Perform automatic release on trigger ${{ github.ref }}
runs-on: ubuntu-latest
env:
# The name of the tag as supplied by the GitHub event
SOURCE_TAG: ${{ github.ref }}
# The image namespace where Docker image will be published to
IMAGE_NAMESPACE: argoproj
# Whether to create & push image and release assets
DRY_RUN: false
# Whether a draft release should be created, instead of public one
DRAFT_RELEASE: false
# The name of the repository containing tap formulae
TAP_REPOSITORY: argoproj/homebrew-tap
# Whether to update homebrew with this release as well
# Set RELEASE_HOMEBREW_TOKEN secret in repository for this to work - needs
# access to public repositories (or homebrew-tap repo specifically)
UPDATE_HOMEBREW: false
# Name of the GitHub user for Git config
GIT_USERNAME: argo-bot
# E-Mail of the GitHub user for Git config
GIT_EMAIL: argoproj@gmail.com
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Check if the published tag is well formed and setup vars
run: |
set -xue
# Target version must match major.minor.patch and optional -rcX suffix
# where X must be a number.
TARGET_VERSION=${SOURCE_TAG#*release-v}
if ! echo ${TARGET_VERSION} | egrep '^[0-9]+\.[0-9]+\.[0-9]+(-rc[0-9]+)*$'; then
echo "::error::Target version '${TARGET_VERSION}' is malformed, refusing to continue." >&2
exit 1
fi
# Target branch is the release branch we're going to operate on
# Its name is 'release-<major>.<minor>'
TARGET_BRANCH="release-${TARGET_VERSION%\.[0-9]*}"
# The release tag is the source tag, minus the release- prefix
RELEASE_TAG="${SOURCE_TAG#*release-}"
# Whether this is a pre-release (indicated by -rc suffix)
PRE_RELEASE=false
if echo "${RELEASE_TAG}" | egrep -- '-rc[0-9]+$'; then
PRE_RELEASE=true
fi
# We must not have a release trigger within the same release branch,
# because that means a release for this branch is already running.
if git tag -l | grep "release-v${TARGET_VERSION%\.[0-9]*}" | grep -v "release-v${TARGET_VERSION}"; then
echo "::error::Another release for branch ${TARGET_BRANCH} is currently in progress."
exit 1
fi
# Ensure that release do not yet exist
if git rev-parse ${RELEASE_TAG}; then
echo "::error::Release tag ${RELEASE_TAG} already exists in repository. Refusing to continue."
exit 1
fi
# Make the variables available in follow-up steps
echo "::set-env name=TARGET_VERSION::${TARGET_VERSION}"
echo "::set-env name=TARGET_BRANCH::${TARGET_BRANCH}"
echo "::set-env name=RELEASE_TAG::${RELEASE_TAG}"
echo "::set-env name=PRE_RELEASE::${PRE_RELEASE}"
- name: Check if our release tag has a correct annotation
run: |
set -ue
# Fetch all tag information as well
git fetch --prune --tags --force
echo "=========== BEGIN COMMIT MESSAGE ============="
git show ${SOURCE_TAG}
echo "============ END COMMIT MESSAGE =============="
# Quite dirty hack to get the release notes from the annotated tag
# into a temporary file.
RELEASE_NOTES=$(mktemp -p /tmp release-notes.XXXXXX)
prefix=true
begin=false
git show ${SOURCE_TAG} | while read line; do
# Whatever is in commit history for the tag, we only want that
# annotation from our tag. We discard everything else.
if test "$begin" = "false"; then
if echo $line | grep -q "tag ${SOURCE_TAG#refs/tags/}"; then begin="true"; fi
continue
fi
if test "$prefix" = "true"; then
if test -z "$line"; then prefix=false; fi
else
if echo $line | egrep -q '^commit [0-9a-f]+'; then
break
fi
echo $line >> ${RELEASE_NOTES}
fi
done
# For debug purposes
echo "============BEGIN RELEASE NOTES================="
cat ${RELEASE_NOTES}
echo "=============END RELEASE NOTES=================="
# Too short release notes are suspicious. We need at least 100 bytes.
relNoteLen=$(stat -c '%s' $RELEASE_NOTES)
if test $relNoteLen -lt 100; then
echo "::error::No release notes provided in tag annotation (or tag is not annotated)"
exit 1
fi
# Check for magic string '## Quick Start' in head of release notes
if ! head -2 ${RELEASE_NOTES} | grep -iq '## Quick Start'; then
echo "::error::Release notes seem invalid, quick start section not found."
exit 1
fi
# We store path to temporary release notes file for later reading, we
# need it when creating release.
echo "::set-env name=RELEASE_NOTES::$RELEASE_NOTES"
- name: Setup Golang
uses: actions/setup-go@v1
with:
go-version: '1.14.2'
- name: Setup Git author information
run: |
set -ue
git config --global user.email "${GIT_EMAIL}"
git config --global user.name "${GIT_USERNAME}"
- name: Checkout corresponding release branch
run: |
set -ue
echo "Switching to release branch '${TARGET_BRANCH}'"
if ! git checkout ${TARGET_BRANCH}; then
echo "::error::Checking out release branch '${TARGET_BRANCH}' for target version '${TARGET_VERSION}' (tagged '${RELEASE_TAG}') failed. Does it exist in repo?"
exit 1
fi
- name: Create VERSION information
run: |
set -ue
echo "Bumping version from $(cat VERSION) to ${TARGET_VERSION}"
echo "${TARGET_VERSION}" > VERSION
git commit -m "Bump version to ${TARGET_VERSION}" VERSION
- name: Generate new set of manifests
run: |
set -ue
make install-codegen-tools-local
helm2 init --client-only
make manifests-local VERSION=${TARGET_VERSION}
git diff
git commit manifests/ -m "Bump version to ${TARGET_VERSION}"
- name: Create the release tag
run: |
set -ue
echo "Creating release ${RELEASE_TAG}"
git tag ${RELEASE_TAG}
- name: Build Docker image for release
run: |
set -ue
git clean -fd
mkdir -p dist/
make image IMAGE_TAG="${TARGET_VERSION}" DOCKER_PUSH=false
make release-cli
chmod +x ./dist/argocd-linux-amd64
./dist/argocd-linux-amd64 version --client
if: ${{ env.DRY_RUN != 'true' }}
- name: Push docker image to repository
env:
DOCKER_USERNAME: ${{ secrets.RELEASE_DOCKERHUB_USERNAME }}
DOCKER_TOKEN: ${{ secrets.RELEASE_DOCKERHUB_TOKEN }}
run: |
set -ue
docker login --username "${DOCKER_USERNAME}" --password "${DOCKER_TOKEN}"
docker push ${IMAGE_NAMESPACE}/argocd:v${TARGET_VERSION}
if: ${{ env.DRY_RUN != 'true' }}
- name: Read release notes file
id: release-notes
uses: juliangruber/read-file-action@v1
with:
path: ${{ env.RELEASE_NOTES }}
- name: Push changes to release branch
run: |
set -ue
git push origin ${TARGET_BRANCH}
git push origin ${RELEASE_TAG}
- name: Create GitHub release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
id: create_release
with:
tag_name: ${{ env.RELEASE_TAG }}
release_name: ${{ env.RELEASE_TAG }}
draft: ${{ env.DRAFT_RELEASE }}
prerelease: ${{ env.PRE_RELEASE }}
body: ${{ steps.release-notes.outputs.content }}
- name: Upload argocd-linux-amd64 binary to release assets
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./dist/argocd-linux-amd64
asset_name: argocd-linux-amd64
asset_content_type: application/octet-stream
if: ${{ env.DRY_RUN != 'true' }}
- name: Upload argocd-darwin-amd64 binary to release assets
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./dist/argocd-darwin-amd64
asset_name: argocd-darwin-amd64
asset_content_type: application/octet-stream
if: ${{ env.DRY_RUN != 'true' }}
- name: Upload argocd-windows-amd64 binary to release assets
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./dist/argocd-windows-amd64.exe
asset_name: argocd-windows-amd64.exe
asset_content_type: application/octet-stream
if: ${{ env.DRY_RUN != 'true' }}
- name: Check out homebrew tap repository
uses: actions/checkout@v2
env:
HOMEBREW_TOKEN: ${{ secrets.RELEASE_HOMEBREW_TOKEN }}
with:
repository: ${{ env.TAP_REPOSITORY }}
path: homebrew-tap
fetch-depth: 0
token: ${{ env.HOMEBREW_TOKEN }}
if: ${{ env.HOMEBREW_TOKEN != '' && env.UPDATE_HOMEBREW == 'true' && env.PRE_RELEASE != 'true' }}
- name: Update homebrew tap formula
env:
HOMEBREW_TOKEN: ${{ secrets.RELEASE_HOMEBREW_TOKEN }}
run: |
set -ue
cd homebrew-tap
./update.sh argocd ${TARGET_VERSION}
git commit -am "Update argocd to ${TARGET_VERSION}"
git push
cd ..
rm -rf homebrew-tap
if: ${{ env.HOMEBREW_TOKEN != '' && env.UPDATE_HOMEBREW == 'true' && env.PRE_RELEASE != 'true' }}
- name: Delete original request tag from repository
run: |
set -ue
git push --delete origin ${SOURCE_TAG}
if: ${{ always() }}

View File

@@ -50,9 +50,9 @@ RUN groupadd -g 999 argocd && \
chmod g=u /home/argocd && \
chmod g=u /etc/passwd && \
apt-get update && \
apt-get install -y git git-lfs python3-pip && \
apt-get install -y git git-lfs python3-pip tini && \
apt-get clean && \
pip3 install awscli==1.17.7 && \
pip3 install awscli==1.18.80 && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
COPY hack/git-ask-pass.sh /usr/local/bin/git-ask-pass.sh
@@ -75,7 +75,7 @@ RUN mkdir -p /app/config/tls
# workaround ksonnet issue https://github.com/ksonnet/ksonnet/issues/298
ENV USER=argocd
USER argocd
USER 999
WORKDIR /home/argocd
####################################################################################################

View File

@@ -2174,6 +2174,12 @@
"type": "boolean",
"format": "boolean"
},
"infos": {
"type": "array",
"items": {
"$ref": "#/definitions/v1alpha1Info"
}
},
"manifests": {
"type": "array",
"items": {
@@ -3902,6 +3908,12 @@
"description": "Operation contains requested operation parameters.",
"type": "object",
"properties": {
"info": {
"type": "array",
"items": {
"$ref": "#/definitions/v1alpha1Info"
}
},
"initiatedBy": {
"$ref": "#/definitions/v1alpha1OperationInitiator"
},

View File

@@ -203,6 +203,18 @@ func setLabels(app *argoappv1.Application, labels []string) {
app.SetLabels(mapLabels)
}
func getInfos(infos []string) []*argoappv1.Info {
mapInfos, err := label.Parse(infos)
errors.CheckError(err)
sliceInfos := make([]*argoappv1.Info, len(mapInfos))
i := 0
for key, element := range mapInfos {
sliceInfos[i] = &argoappv1.Info{Name: key, Value: element}
i++
}
return sliceInfos
}
func getRefreshType(refresh bool, hardRefresh bool) *string {
if hardRefresh {
refreshType := string(argoappv1.RefreshTypeHard)
@@ -1388,6 +1400,7 @@ func NewApplicationSyncCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co
force bool
async bool
local string
infos []string
)
var command = &cobra.Command{
Use: "sync [APPNAME... | -l selector]",
@@ -1495,6 +1508,7 @@ func NewApplicationSyncCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co
Resources: selectedResources,
Prune: prune,
Manifests: localObjsStrings,
Infos: getInfos(infos),
}
switch strategy {
case "apply":
@@ -1540,6 +1554,7 @@ func NewApplicationSyncCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co
command.Flags().BoolVar(&force, "force", false, "Use a force apply")
command.Flags().BoolVar(&async, "async", false, "Do not wait for application to sync before continuing")
command.Flags().StringVar(&local, "local", "", "Path to a local directory. When this flag is present no git queries will be made")
command.Flags().StringArrayVar(&infos, "info", []string{}, "A list of key-value pairs during sync process. These infos will be persisted in app.")
return command
}

View File

@@ -395,11 +395,6 @@ func (ctrl *ApplicationController) managedResources(comparisonResult *comparison
} else {
item.TargetState = "null"
}
jsonDiff, err := resDiff.JSONFormat()
if err != nil {
return nil, err
}
item.Diff = jsonDiff
item.PredictedLiveState = string(resDiff.PredictedLive)
item.NormalizedLiveState = string(resDiff.NormalizedLive)
@@ -419,6 +414,8 @@ func (ctrl *ApplicationController) Run(ctx context.Context, statusProcessors int
go ctrl.appInformer.Run(ctx.Done())
go ctrl.projInformer.Run(ctx.Done())
errors.CheckError(ctrl.stateCache.Init())
if !cache.WaitForCacheSync(ctx.Done(), ctrl.appInformer.HasSynced, ctrl.projInformer.HasSynced) {
log.Error("Timed out waiting for caches to sync")
return

View File

@@ -40,6 +40,8 @@ type LiveStateCache interface {
Run(ctx context.Context) error
// Returns information about monitored clusters
GetClustersInfo() []clustercache.ClusterInfo
// Init must be executed before cache can be used
Init() error
}
type ObjectUpdatedHandler = func(managedByApp map[string]bool, ref v1.ObjectReference)
@@ -72,33 +74,42 @@ func NewLiveStateCache(
}
}
type liveStateCache struct {
db db.ArgoDB
clusters map[string]clustercache.ClusterCache
lock sync.RWMutex
appInformer cache.SharedIndexInformer
onObjectUpdated ObjectUpdatedHandler
kubectl kube.Kubectl
settingsMgr *settings.SettingsManager
metricsServer *metrics.MetricsServer
cacheSettings clustercache.Settings
type cacheSettings struct {
clusterSettings clustercache.Settings
appInstanceLabelKey string
}
func (c *liveStateCache) loadCacheSettings() (*clustercache.Settings, string, error) {
type liveStateCache struct {
db db.ArgoDB
appInformer cache.SharedIndexInformer
onObjectUpdated ObjectUpdatedHandler
kubectl kube.Kubectl
settingsMgr *settings.SettingsManager
metricsServer *metrics.MetricsServer
clusters map[string]clustercache.ClusterCache
cacheSettings cacheSettings
lock sync.RWMutex
}
func (c *liveStateCache) loadCacheSettings() (*cacheSettings, error) {
appInstanceLabelKey, err := c.settingsMgr.GetAppInstanceLabelKey()
if err != nil {
return nil, "", err
return nil, err
}
resourcesFilter, err := c.settingsMgr.GetResourcesFilter()
if err != nil {
return nil, "", err
return nil, err
}
resourceOverrides, err := c.settingsMgr.GetResourceOverrides()
if err != nil {
return nil, "", err
return nil, err
}
return &clustercache.Settings{ResourceHealthOverride: lua.ResourceHealthOverrides(resourceOverrides), ResourcesFilter: resourcesFilter}, appInstanceLabelKey, nil
clusterSettings := clustercache.Settings{
ResourceHealthOverride: lua.ResourceHealthOverrides(resourceOverrides),
ResourcesFilter: resourcesFilter,
}
return &cacheSettings{clusterSettings, appInstanceLabelKey}, nil
}
func asResourceNode(r *clustercache.Resource) appv1.ResourceNode {
@@ -197,6 +208,7 @@ func skipAppRequeuing(key kube.ResourceKey) bool {
func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, error) {
c.lock.RLock()
clusterCache, ok := c.clusters[server]
cacheSettings := c.cacheSettings
c.lock.RUnlock()
if ok {
@@ -217,13 +229,13 @@ func (c *liveStateCache) getCluster(server string) (clustercache.ClusterCache, e
}
clusterCache = clustercache.NewClusterCache(cluster.RESTConfig(),
clustercache.SetSettings(c.cacheSettings),
clustercache.SetSettings(cacheSettings.clusterSettings),
clustercache.SetNamespaces(cluster.Namespaces),
clustercache.SetPopulateResourceInfoHandler(func(un *unstructured.Unstructured, isRoot bool) (interface{}, bool) {
res := &ResourceInfo{}
populateNodeInfo(un, res)
res.Health, _ = health.GetResourceHealth(un, c.cacheSettings.ResourceHealthOverride)
appName := kube.GetAppInstanceLabel(un, c.appInstanceLabelKey)
res.Health, _ = health.GetResourceHealth(un, cacheSettings.clusterSettings.ResourceHealthOverride)
appName := kube.GetAppInstanceLabel(un, cacheSettings.appInstanceLabelKey)
if isRoot && appName != "" {
res.AppName = appName
}
@@ -277,14 +289,14 @@ func (c *liveStateCache) getSyncedCluster(server string) (clustercache.ClusterCa
return clusterCache, nil
}
func (c *liveStateCache) invalidate(settings clustercache.Settings, appInstanceLabelKey string) {
func (c *liveStateCache) invalidate(cacheSettings cacheSettings) {
log.Info("invalidating live state cache")
c.lock.RLock()
defer c.lock.RUnlock()
c.lock.Lock()
defer c.lock.Unlock()
c.appInstanceLabelKey = appInstanceLabelKey
c.cacheSettings = cacheSettings
for _, clust := range c.clusters {
clust.Invalidate(clustercache.SetSettings(settings))
clust.Invalidate(clustercache.SetSettings(cacheSettings.clusterSettings))
}
log.Info("live state cache invalidated")
}
@@ -356,7 +368,7 @@ func (c *liveStateCache) watchSettings(ctx context.Context) {
for !done {
select {
case <-updateCh:
nextCacheSettings, appInstanceLabelKey, err := c.loadCacheSettings()
nextCacheSettings, err := c.loadCacheSettings()
if err != nil {
log.Warnf("Failed to read updated settings: %v", err)
continue
@@ -370,7 +382,7 @@ func (c *liveStateCache) watchSettings(ctx context.Context) {
}
c.lock.Unlock()
if needInvalidate {
c.invalidate(*nextCacheSettings, appInstanceLabelKey)
c.invalidate(*nextCacheSettings)
}
case <-ctx.Done():
done = true
@@ -381,15 +393,17 @@ func (c *liveStateCache) watchSettings(ctx context.Context) {
close(updateCh)
}
// Run watches for resource changes annotated with application label on all registered clusters and schedule corresponding app refresh.
func (c *liveStateCache) Run(ctx context.Context) error {
cacheSettings, appInstanceLabelKey, err := c.loadCacheSettings()
func (c *liveStateCache) Init() error {
cacheSettings, err := c.loadCacheSettings()
if err != nil {
return err
}
c.cacheSettings = *cacheSettings
c.appInstanceLabelKey = appInstanceLabelKey
return nil
}
// Run watches for resource changes annotated with application label on all registered clusters and schedule corresponding app refresh.
func (c *liveStateCache) Run(ctx context.Context) error {
go c.watchSettings(ctx)
kube.RetryUntilSucceed(func() error {
@@ -420,7 +434,7 @@ func (c *liveStateCache) Run(ctx context.Context) error {
}, "watch clusters", ctx, clustercache.ClusterRetryTimeout)
<-ctx.Done()
c.invalidate(c.cacheSettings, c.appInstanceLabelKey)
c.invalidate(c.cacheSettings)
return nil
}

View File

@@ -140,6 +140,20 @@ func (_m *LiveStateCache) GetVersionsInfo(serverURL string) (string, []v1.APIGro
return r0, r1, r2
}
// Init provides a mock function with given fields:
func (_m *LiveStateCache) Init() error {
ret := _m.Called()
var r0 error
if rf, ok := ret.Get(0).(func() error); ok {
r0 = rf()
} else {
r0 = ret.Error(0)
}
return r0
}
// IsNamespaced provides a mock function with given fields: server, gk
func (_m *LiveStateCache) IsNamespaced(server string, gk schema.GroupKind) (bool, error) {
ret := _m.Called(server, gk)

View File

@@ -15,7 +15,6 @@ import (
"github.com/argoproj/gitops-engine/pkg/utils/io"
kubeutil "github.com/argoproj/gitops-engine/pkg/utils/kube"
log "github.com/sirupsen/logrus"
"github.com/yudai/gojsondiff"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema"
@@ -194,6 +193,9 @@ func DeduplicateTargetObjects(
targetByKey := make(map[kubeutil.ResourceKey][]*unstructured.Unstructured)
for i := range objs {
obj := objs[i]
if obj == nil {
continue
}
isNamespaced := kubeutil.IsNamespacedOrUnknown(infoProvider, obj.GroupVersionKind().GroupKind())
if !isNamespaced {
obj.SetNamespace("")
@@ -387,12 +389,7 @@ func (m *appStateManager) CompareAppState(app *v1alpha1.Application, project *ap
if i < len(diffResults.Diffs) {
diffResult = diffResults.Diffs[i]
} else {
diffResult = diff.DiffResult{
Diff: gojsondiff.New().CompareObjects(map[string]interface{}{}, map[string]interface{}{}),
Modified: false,
NormalizedLive: []byte("{}"),
PredictedLive: []byte("{}"),
}
diffResult = diff.DiffResult{Modified: false, NormalizedLive: []byte("{}"), PredictedLive: []byte("{}")}
}
if resState.Hook || ignore.Ignore(obj) {
// For resource hooks, don't store sync status, and do not affect overall sync status

View File

@@ -1,5 +1,155 @@
# Releasing
## Automated release procedure
Starting from `release-1.6` branch, ArgoCD can be released in automatic fashion
using GitHub actions. The release process takes about 20 minutes, sometimes a
little less, depending on the performance of GitHub actions runners.
The target release branch must already exist in GitHub repository. If you for
example want to create a release `v1.7.0`, the corresponding release branch
`release-1.7` needs to exist, otherwise the release cannot be build. Also,
the trigger tag should always be created in the release branch, checked out
in your local repository clone.
Before triggering the release automation, the `CHANGELOG.md` should be updated
with the latest information, and this change should be commited and pushed to
the GitHub repository to the release branch. Afterwards, the automation can be
triggered.
**Manual steps before release creation:**
* Update `CHANGELOG.md` with changes for this release
* Commit & push changes to `CHANGELOG.md`
* Prepare release notes (save to some file, or copy from Changelog)
**The automation will perform the following steps:**
* Update `VERSION` file in release branch
* Update manifests with image tags of new version in release branch
* Build the Docker image and push to Docker Hub
* Create release tag in the GitHub repository
* Create GitHub release and attach the required assets to it (CLI binaries, ...)
Finally, it will the remove trigger tag from repository again.
Automation supports both, GA and pre-releases. The automation is triggered by
pushing a tag to the repository. The tag must be in one of the following formats
to trigger the GH workflow:
* GA: `release-v<MAJOR>.<MINOR>.<PATCH>`
* Pre-release: `release-v<MAJOR>.<MINOR>.<PATCH>-rc<RC#>`
The tag must be an annotated tag, and it must contain the release notes in the
commit message. Please note that Markdown uses `#` character for formatting, but
Git uses it as comment char. To solve this, temporarily switch Git comment char
to something else, the `;` character is recommended.
For example, considering you have configured the Git remote for repository to
`github.com/argoproj/argo-cd` to be named `upstream` and are in your locally
checked out repo:
```shell
git config core.commentChar ';'
git tag -a -F /path/to/release-notes.txt release-v1.6.0-rc2
git push upstream release-v1.6.0-rc2
git tag -d release-v1.6.0-rc2
git config core.commentChar '#'
```
For convenience, there is a shell script in the tree that ensures all the
pre-requisites are met and that the trigger is well-formed before pushing
it to the GitHub repo.
In summary, the modifications it does are:
* Create annotated trigger tag in your local repository
* Push tag to GitHub repository to trigger workflow
* Remove trigger tag from your local repository
The script can be found at `hacks/trigger-release.sh` and is used as follows:
```shell
./hacks/trigger-release.sh <version> <remote name> [<release notes path>]
```
The `<version>` identifier needs to be specified **without** the `release-`
prefix, so just specify it as `v1.6.0-rc2` for example. The `<remote name>`
specifies the name of the remote used to push to the GitHub repository.
If you omit the `<release notes path>`, an editor will pop-up asking you to
enter the tag's annotation so you can paste the release notes, save and exit.
It will also take care of temporarily configuring the `core.commentChar` and
setting it back to its original state.
!!!note
It is strongly recommended to use this script to trigger the workflow
instead of manually pushing a tag to the repository.
Once the trigger tag is pushed to the repo, the GitHub workflow will start
execution. You can follow its progress under `Actions` tab, the name of the
action is `Create release`. Don't get confused by the name of the running
workflow, it will be the commit message of the latest commit to `master`
branch, this is a limitation of GH actions.
The workflow performs necessary checks so that the release can be sucessfully
build before the build actually starts. It will error when one of the
prerequisites is not met, or if the release cannot be build (i.e. already
exists, release notes invalid, etc etc). You can see a summary of what has
failed in the job's overview page, and more detailed errors in the output
of the step that has failed.
!!!note
You cannot perform more than one release on the same release branch at the
same time. For example, both `v1.6.0` and `v1.6.1` would operate on the
`release-1.6` branch. If you submit `v1.6.1` while `v1.6.0` is still
executing, the release automation will not execute. You have to either
cancel `v1.6.0` before submitting `v1.6.1` or wait until it has finished.
You can execute releases on different release branches simultaneously, for
example `v1.6.0` and `v1.7.0-rc1`, without problems.
### Verifying automated release
After the automatic release creation has finished, you should perform manual
checks to see if the release came out correctly:
* Check status & output of the GitHub action
* Check [https://github.com/argoproj/argo-cd/releases](https://github.com/argoproj/argo-cd/releases)
to see if release has been correctly created, and if all required assets
are attached.
* Check whether the image has been published on DockerHub correctly
### If something went wrong
If something went wrong, damage should be limited. Depending on the steps that
have been performed, you will need to manually clean up.
* Delete release tag (i.e. `v1.6.0-rc2`) created on GitHub repository. This
will immediately set release (if created) to `draft` status, invisible for
general public.
* Delete the draft release (if created) from `Releases` page on GitHub
* If Docker image has been pushed to DockerHub, delete it
* If commits have been performed to the release branch, revert them. Paths that could have been commited to are:
* `VERSION`
* `manifests/*`
### Post-process manual steps
For now, the only manual steps left are to
* update brew formulae for ArgoCD CLI on Mac if release is GA
* update stable tag in GitHub repository to point to new release (if appropriate)
These will be automated as well in the future.
## Manual releasing
Automatic release process does not interfere with manual release process, since
the trigger tag does not match a normal release tag. If you prefer to perform,
manual release or if automatic release is for some reason broken, these are the
steps:
Make sure you are logged into Docker Hub:
```bash
@@ -42,18 +192,14 @@ git push $REPO $BRANCH
git push $REPO $VERSION
```
If GA, update `stable` tag:
```bash
git tag stable --force && git push $REPO stable --force
```
Update [Github releases](https://github.com/argoproj/argo-cd/releases) with:
* Getting started (copy from previous release)
* Changelog
* Binaries (e.g. `dist/argocd-darwin-amd64`).
## Update brew formulae (manual)
If GA, update Brew formula:
```bash
@@ -64,7 +210,15 @@ git commit -am "Update argocd to $VERSION"
git push
```
### Verify
## Update stable tag (manual)
If GA, update `stable` tag:
```bash
git tag stable --force && git push $REPO stable --force
```
## Verify release
Locally:

4
go.mod
View File

@@ -8,7 +8,7 @@ require (
github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d
github.com/alicebob/gopher-json v0.0.0-20180125190556-5a6b3ba71ee6 // indirect
github.com/alicebob/miniredis v2.5.0+incompatible
github.com/argoproj/gitops-engine v0.0.0-00010101000000-000000000000
github.com/argoproj/gitops-engine v0.1.2
github.com/argoproj/pkg v0.0.0-20200319004004-f46beff7cd54
github.com/bsm/redislock v0.4.3
github.com/casbin/casbin v1.9.1
@@ -57,7 +57,6 @@ require (
github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.5.1
github.com/vmihailenco/msgpack v3.3.1+incompatible
github.com/yudai/gojsondiff v1.0.1-0.20180504020246-0525c875b75c
github.com/yuin/gopher-lua v0.0.0-20190115140932-732aa6820ec4
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
@@ -83,7 +82,6 @@ require (
)
replace (
github.com/argoproj/gitops-engine => github.com/argoproj/gitops-engine v0.1.1-0.20200601171118-4bd4f29670ee
github.com/golang/protobuf => github.com/golang/protobuf v1.2.0
github.com/grpc-ecosystem/grpc-gateway => github.com/grpc-ecosystem/grpc-gateway v1.3.1
github.com/improbable-eng/grpc-web => github.com/improbable-eng/grpc-web v0.0.0-20181111100011-16092bd1d58a

4
go.sum
View File

@@ -50,8 +50,8 @@ github.com/alicebob/miniredis v2.5.0+incompatible h1:yBHoLpsyjupjz3NL3MhKMVkR41j
github.com/alicebob/miniredis v2.5.0+incompatible/go.mod h1:8HZjEj4yU0dwhYHky+DxYx+6BMjkBbe5ONFIF1MXffk=
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
github.com/argoproj/gitops-engine v0.1.1-0.20200601171118-4bd4f29670ee h1:oCQxH/zplZhggoIhXpBNJyx4F45CcSL6Hiyz4N2uJQU=
github.com/argoproj/gitops-engine v0.1.1-0.20200601171118-4bd4f29670ee/go.mod h1:UmBGlQLT/MPNiMmbnouZRWhkk3slPuozMsENdXMkIMs=
github.com/argoproj/gitops-engine v0.1.2 h1:tUDt0DR3axmHLmEJwgqWnr+cHHSK6cJLJef3YTLkQ+E=
github.com/argoproj/gitops-engine v0.1.2/go.mod h1:UmBGlQLT/MPNiMmbnouZRWhkk3slPuozMsENdXMkIMs=
github.com/argoproj/pkg v0.0.0-20200102163130-2dd1f3f6b4de/go.mod h1:2EZ44RG/CcgtPTwrRR0apOc7oU6UIw8GjCUJWZ8X3bM=
github.com/argoproj/pkg v0.0.0-20200319004004-f46beff7cd54 h1:hDn02iEkh5EUl4TJfOo6AI9uSgh0vt/qh66ODuQl/YE=
github.com/argoproj/pkg v0.0.0-20200319004004-f46beff7cd54/go.mod h1:2EZ44RG/CcgtPTwrRR0apOc7oU6UIw8GjCUJWZ8X3bM=

108
hack/trigger-release.sh Executable file
View File

@@ -0,0 +1,108 @@
#!/usr/bin/env bash
# This script requires bash shell - sorry.
NEW_TAG="${1}"
GIT_REMOTE="${2}"
COMMIT_MSG="${3}"
origToken=""
set -ue
restoreToken() {
if test "$origToken" != ""; then
echo ">> Restoring original Git comment char"
git config core.commentChar "$origToken"
fi
}
cleanLocalTriggerTag() {
if test "$TRIGGER_TAG" != ""; then
echo ">> Remove trigger tag '${TRIGGER_TAG}' from local repository."
git tag -d $TRIGGER_TAG
fi
}
cleanup() {
restoreToken
cleanLocalTriggerTag
}
if test "${NEW_TAG}" = "" -o "${GIT_REMOTE}" = ""; then
echo "!! Usage: $0 <release tag> <remote> [path to release notes file]" >&2
exit 1
fi
# Target (version) tag must match version scheme vMAJOR.MINOR.PATCH with an
# optional pre-release tag.
if ! echo "${NEW_TAG}" | egrep -q '^v[0-9]+\.[0-9]+\.[0-9]+(-rc[0-9]+)*$'; then
echo "!! Malformed version tag: '${NEW_TAG}', must match 'vMAJOR.MINOR.PATCH(-rcX)'" >&2
exit 1
fi
TRIGGER_TAG="release-${NEW_TAG}"
# Check whether we are in correct branch of local repository
RELEASE_BRANCH="${NEW_TAG%\.[0-9]*}"
RELEASE_BRANCH="release-${RELEASE_BRANCH#*v}"
currentBranch=$(git branch --show-current)
if test "$currentBranch" != "${RELEASE_BRANCH}"; then
echo "!! Please checkout branch '${RELEASE_BRANCH}' (currently in branch: '${currentBranch}')" >&2
exit 1
fi
echo ">> Working in release branch '${RELEASE_BRANCH}'"
# Check for trigger tag existing in local repo
if git tag -l | grep -q "${TRIGGER_TAG}"; then
echo "!! Release tag '${TRIGGER_TAG}' already exists in local repository" >&2
exit 1
fi
# Check for trigger tag existing in remote repo
if git ls-remote ${GIT_REMOTE} refs/tags/${TRIGGER_TAG} | grep -q ${NEW_TAG}; then
echo "!! Target trigger tag '${TRIGGER_TAG}' already exists in remote '${GIT_REMOTE}'" >&2
echo "!! Another operation currently in progress?" >&2
exit 1
fi
# Check for target (version) tag in local repo
if git tag -l | grep -q "${NEW_TAG}"; then
echo "!! Target version tag '${NEW_TAG}' already exists in local repository" >&2
exit 1
fi
# Check for target (version) tag in remote repo
if git ls-remote ${GIT_REMOTE} refs/tags/${NEW_TAG} | grep -q ${NEW_TAG}; then
echo "!! Target version tag '${NEW_TAG}' already exists in remote '${GIT_REMOTE}'" >&2
exit 1
fi
echo ">> Creating new release '${NEW_TAG}' by pushing '${TRIGGER_TAG}' to '${GIT_REMOTE}'"
GIT_ARGS=""
if test "${COMMIT_MSG}" != ""; then
if ! test -f "${COMMIT_MSG}"; then
echo "!! Release notes at '${COMMIT_MSG}' do not exist or are not readable." >&2
exit 1
fi
GIT_ARGS="-F ${COMMIT_MSG}"
fi
# We need different git comment char than '#', because markdown makes extensive
# use of '#' - we chose ';' for our operation.
origToken=$(git config core.commentChar)
echo ">> Saving original Git comment char '${origToken}' and setting it to ';' for this run"
if ! git config core.commentChar ';'; then
echo "!! Could not set git config commentChar ';'" >&2
exit 1
fi
trap cleanup SIGINT EXIT
# Create trigger tag in local repository
git tag -a ${GIT_ARGS} ${TRIGGER_TAG}
# Push the trigger tag to remote repository
git push ${GIT_REMOTE} ${TRIGGER_TAG}

View File

@@ -12,4 +12,4 @@ bases:
images:
- name: argoproj/argocd
newName: argoproj/argocd
newTag: latest
newTag: v1.6.0

View File

@@ -35,6 +35,18 @@ spec:
operation:
description: Operation contains requested operation parameters.
properties:
info:
items:
properties:
name:
type: string
value:
type: string
required:
- name
- value
type: object
type: array
initiatedBy:
description: OperationInitiator holds information about the operation
initiator
@@ -847,6 +859,18 @@ spec:
operation:
description: Operation is the original requested operation
properties:
info:
items:
properties:
name:
type: string
value:
type: string
required:
- name
- value
type: object
type: array
initiatedBy:
description: OperationInitiator holds information about the
operation initiator

View File

@@ -18,4 +18,4 @@ bases:
images:
- name: argoproj/argocd
newName: argoproj/argocd
newTag: latest
newTag: v1.6.0

View File

@@ -647,7 +647,7 @@ spec:
serviceAccountName: argocd-redis-ha
initContainers:
- name: config-init
image: redis:5.0.6-alpine
image: redis:5.0.8-alpine
imagePullPolicy: IfNotPresent
resources:
{}
@@ -674,7 +674,7 @@ spec:
mountPath: /data
containers:
- name: redis
image: redis:5.0.6-alpine
image: redis:5.0.8-alpine
imagePullPolicy: IfNotPresent
command:
- redis-server
@@ -694,7 +694,7 @@ spec:
- mountPath: /data
name: data
- name: sentinel
image: redis:5.0.6-alpine
image: redis:5.0.8-alpine
imagePullPolicy: IfNotPresent
command:
- redis-sentinel

View File

@@ -7,3 +7,5 @@ redis-ha:
save: "\"\""
haproxy:
enabled: true
image:
tag: 5.0.8-alpine

View File

@@ -36,6 +36,18 @@ spec:
operation:
description: Operation contains requested operation parameters.
properties:
info:
items:
properties:
name:
type: string
value:
type: string
required:
- name
- value
type: object
type: array
initiatedBy:
description: OperationInitiator holds information about the operation
initiator
@@ -848,6 +860,18 @@ spec:
operation:
description: Operation is the original requested operation
properties:
info:
items:
properties:
name:
type: string
value:
type: string
required:
- name
- value
type: object
type: array
initiatedBy:
description: OperationInitiator holds information about the
operation initiator
@@ -2871,7 +2895,7 @@ spec:
- "10"
- --redis
- argocd-redis-ha-haproxy:6379
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -2927,7 +2951,7 @@ spec:
- -n
- /usr/local/bin/argocd-util
- /shared
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
name: copyutil
volumeMounts:
@@ -2977,7 +3001,7 @@ spec:
- argocd-repo-server
- --redis
- argocd-redis-ha-haproxy:6379
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
initialDelaySeconds: 5
@@ -3045,7 +3069,7 @@ spec:
- /shared/app
- --redis
- argocd-redis-ha-haproxy:6379
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -3120,7 +3144,7 @@ spec:
- /data/conf/redis.conf
command:
- redis-server
image: redis:5.0.6-alpine
image: redis:5.0.8-alpine
imagePullPolicy: IfNotPresent
livenessProbe:
initialDelaySeconds: 15
@@ -3138,7 +3162,7 @@ spec:
- /data/conf/sentinel.conf
command:
- redis-sentinel
image: redis:5.0.6-alpine
image: redis:5.0.8-alpine
imagePullPolicy: IfNotPresent
livenessProbe:
initialDelaySeconds: 15
@@ -3164,7 +3188,7 @@ spec:
value: 896627000a81c7bdad8dbdcffd39728c9c17b309
- name: SENTINEL_ID_2
value: 3acbca861108bc47379b71b1d87d1c137dce591f
image: redis:5.0.6-alpine
image: redis:5.0.8-alpine
imagePullPolicy: IfNotPresent
name: config-init
resources: {}

View File

@@ -36,6 +36,18 @@ spec:
operation:
description: Operation contains requested operation parameters.
properties:
info:
items:
properties:
name:
type: string
value:
type: string
required:
- name
- value
type: object
type: array
initiatedBy:
description: OperationInitiator holds information about the operation
initiator
@@ -848,6 +860,18 @@ spec:
operation:
description: Operation is the original requested operation
properties:
info:
items:
properties:
name:
type: string
value:
type: string
required:
- name
- value
type: object
type: array
initiatedBy:
description: OperationInitiator holds information about the
operation initiator
@@ -2786,7 +2810,7 @@ spec:
- "10"
- --redis
- argocd-redis-ha-haproxy:6379
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -2842,7 +2866,7 @@ spec:
- -n
- /usr/local/bin/argocd-util
- /shared
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
name: copyutil
volumeMounts:
@@ -2892,7 +2916,7 @@ spec:
- argocd-repo-server
- --redis
- argocd-redis-ha-haproxy:6379
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
initialDelaySeconds: 5
@@ -2960,7 +2984,7 @@ spec:
- /shared/app
- --redis
- argocd-redis-ha-haproxy:6379
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -3035,7 +3059,7 @@ spec:
- /data/conf/redis.conf
command:
- redis-server
image: redis:5.0.6-alpine
image: redis:5.0.8-alpine
imagePullPolicy: IfNotPresent
livenessProbe:
initialDelaySeconds: 15
@@ -3053,7 +3077,7 @@ spec:
- /data/conf/sentinel.conf
command:
- redis-sentinel
image: redis:5.0.6-alpine
image: redis:5.0.8-alpine
imagePullPolicy: IfNotPresent
livenessProbe:
initialDelaySeconds: 15
@@ -3079,7 +3103,7 @@ spec:
value: 896627000a81c7bdad8dbdcffd39728c9c17b309
- name: SENTINEL_ID_2
value: 3acbca861108bc47379b71b1d87d1c137dce591f
image: redis:5.0.6-alpine
image: redis:5.0.8-alpine
imagePullPolicy: IfNotPresent
name: config-init
resources: {}

View File

@@ -36,6 +36,18 @@ spec:
operation:
description: Operation contains requested operation parameters.
properties:
info:
items:
properties:
name:
type: string
value:
type: string
required:
- name
- value
type: object
type: array
initiatedBy:
description: OperationInitiator holds information about the operation
initiator
@@ -848,6 +860,18 @@ spec:
operation:
description: Operation is the original requested operation
properties:
info:
items:
properties:
name:
type: string
value:
type: string
required:
- name
- value
type: object
type: array
initiatedBy:
description: OperationInitiator holds information about the
operation initiator
@@ -2371,7 +2395,7 @@ spec:
- "20"
- --operation-processors
- "10"
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -2427,7 +2451,7 @@ spec:
- -n
- /usr/local/bin/argocd-util
- /shared
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
name: copyutil
volumeMounts:
@@ -2491,7 +2515,7 @@ spec:
- argocd-repo-server
- --redis
- argocd-redis:6379
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
initialDelaySeconds: 5
@@ -2542,7 +2566,7 @@ spec:
- argocd-server
- --staticassets
- /shared/app
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
httpGet:

View File

@@ -36,6 +36,18 @@ spec:
operation:
description: Operation contains requested operation parameters.
properties:
info:
items:
properties:
name:
type: string
value:
type: string
required:
- name
- value
type: object
type: array
initiatedBy:
description: OperationInitiator holds information about the operation
initiator
@@ -848,6 +860,18 @@ spec:
operation:
description: Operation is the original requested operation
properties:
info:
items:
properties:
name:
type: string
value:
type: string
required:
- name
- value
type: object
type: array
initiatedBy:
description: OperationInitiator holds information about the
operation initiator
@@ -2286,7 +2310,7 @@ spec:
- "20"
- --operation-processors
- "10"
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -2342,7 +2366,7 @@ spec:
- -n
- /usr/local/bin/argocd-util
- /shared
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
name: copyutil
volumeMounts:
@@ -2406,7 +2430,7 @@ spec:
- argocd-repo-server
- --redis
- argocd-redis:6379
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
initialDelaySeconds: 5
@@ -2457,7 +2481,7 @@ spec:
- argocd-server
- --staticassets
- /shared/app
image: argoproj/argocd:latest
image: argoproj/argocd:v1.6.0
imagePullPolicy: Always
livenessProbe:
httpGet:

View File

@@ -512,6 +512,7 @@ type ApplicationSyncRequest struct {
Strategy *v1alpha1.SyncStrategy `protobuf:"bytes,5,opt,name=strategy" json:"strategy,omitempty"`
Resources []v1alpha1.SyncOperationResource `protobuf:"bytes,7,rep,name=resources" json:"resources"`
Manifests []string `protobuf:"bytes,8,rep,name=manifests" json:"manifests,omitempty"`
Infos []*v1alpha1.Info `protobuf:"bytes,9,rep,name=infos" json:"infos,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@@ -599,6 +600,13 @@ func (m *ApplicationSyncRequest) GetManifests() []string {
return nil
}
func (m *ApplicationSyncRequest) GetInfos() []*v1alpha1.Info {
if m != nil {
return m.Infos
}
return nil
}
// ApplicationUpdateSpecRequest is a request to update application spec
type ApplicationUpdateSpecRequest struct {
Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
@@ -1858,136 +1866,138 @@ func init() {
}
var fileDescriptor_df6e82b174b5eaec = []byte{
// 2059 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x8f, 0x1c, 0x47,
0x15, 0xa7, 0x66, 0x76, 0x77, 0x66, 0xdf, 0x3a, 0xb1, 0x53, 0x89, 0x4d, 0xa7, 0x3d, 0x5e, 0x8f,
0xca, 0x5f, 0xeb, 0xb5, 0xb7, 0xc7, 0xbb, 0x18, 0x08, 0x0b, 0x52, 0xf0, 0xc6, 0x66, 0x6d, 0x58,
0x9b, 0x65, 0xd6, 0x21, 0x12, 0x12, 0x42, 0x9d, 0xee, 0xda, 0xd9, 0x66, 0x67, 0xba, 0x9b, 0xee,
0x9e, 0xb1, 0x06, 0xcb, 0x87, 0x04, 0x84, 0x38, 0x20, 0x10, 0x82, 0x43, 0x40, 0x7c, 0x29, 0x5c,
0xb9, 0x21, 0x2e, 0x1c, 0xb8, 0x81, 0x72, 0x44, 0x24, 0x67, 0x0b, 0xad, 0xf8, 0x03, 0x38, 0x71,
0x46, 0x55, 0x5d, 0xd5, 0x5d, 0x35, 0xee, 0xe9, 0x19, 0xc7, 0x93, 0x83, 0x6f, 0x53, 0xaf, 0xaa,
0xdf, 0xfb, 0xbd, 0x8f, 0xfa, 0x55, 0xd5, 0x1b, 0x38, 0x1f, 0xd3, 0x68, 0x40, 0xa3, 0x96, 0x1d,
0x86, 0x5d, 0xcf, 0xb1, 0x13, 0x2f, 0xf0, 0xd5, 0xdf, 0x56, 0x18, 0x05, 0x49, 0x80, 0x97, 0x14,
0x91, 0xf9, 0x4a, 0x27, 0xe8, 0x04, 0x5c, 0xde, 0x62, 0xbf, 0xd2, 0x25, 0x66, 0xa3, 0x13, 0x04,
0x9d, 0x2e, 0x6d, 0xd9, 0xa1, 0xd7, 0xb2, 0x7d, 0x3f, 0x48, 0xf8, 0xe2, 0x58, 0xcc, 0x92, 0xc3,
0xd7, 0x62, 0xcb, 0x0b, 0xf8, 0xac, 0x13, 0x44, 0xb4, 0x35, 0x58, 0x6f, 0x75, 0xa8, 0x4f, 0x23,
0x3b, 0xa1, 0xae, 0x58, 0x73, 0x3d, 0x5f, 0xd3, 0xb3, 0x9d, 0x03, 0xcf, 0xa7, 0xd1, 0xb0, 0x15,
0x1e, 0x76, 0x98, 0x20, 0x6e, 0xf5, 0x68, 0x62, 0x17, 0x7d, 0x75, 0xa7, 0xe3, 0x25, 0x07, 0xfd,
0xb7, 0x2d, 0x27, 0xe8, 0xb5, 0xec, 0x88, 0x03, 0xfb, 0x2e, 0xff, 0xb1, 0xe6, 0xb8, 0xf9, 0xd7,
0xaa, 0x7b, 0x83, 0x75, 0xbb, 0x1b, 0x1e, 0xd8, 0x4f, 0xaa, 0xda, 0x2a, 0x53, 0x15, 0xd1, 0x30,
0x10, 0xb1, 0xe2, 0x3f, 0xbd, 0x24, 0x88, 0x86, 0xca, 0xcf, 0x54, 0x07, 0xf9, 0x2b, 0x82, 0x13,
0x37, 0x72, 0x63, 0xdf, 0xe8, 0xd3, 0x68, 0x88, 0x31, 0xcc, 0xf9, 0x76, 0x8f, 0x1a, 0xa8, 0x89,
0x56, 0x16, 0xdb, 0xfc, 0x37, 0x36, 0xa0, 0x16, 0xd1, 0xfd, 0x88, 0xc6, 0x07, 0x46, 0x85, 0x8b,
0xe5, 0x10, 0x5f, 0x84, 0x1a, 0xb3, 0x4c, 0x9d, 0xc4, 0xa8, 0x36, 0xab, 0x2b, 0x8b, 0x5b, 0xc7,
0x8e, 0x1e, 0x9f, 0xad, 0xef, 0xa6, 0xa2, 0xb8, 0x2d, 0x27, 0xb1, 0x05, 0xc7, 0x23, 0x1a, 0x07,
0xfd, 0xc8, 0xa1, 0xdf, 0xa4, 0x51, 0xec, 0x05, 0xbe, 0x31, 0xc7, 0x34, 0x6d, 0xcd, 0x7d, 0xf0,
0xf8, 0xec, 0xa7, 0xda, 0xa3, 0x93, 0xb8, 0x09, 0xf5, 0x98, 0x76, 0xa9, 0x93, 0x04, 0x91, 0x31,
0xaf, 0x2c, 0xcc, 0xa4, 0x64, 0x1b, 0x4e, 0xb6, 0xe9, 0xc0, 0x63, 0xab, 0xef, 0xd2, 0xc4, 0x76,
0xed, 0xc4, 0x1e, 0x75, 0xa0, 0x92, 0x39, 0x60, 0x42, 0x3d, 0x12, 0x8b, 0x8d, 0x0a, 0x97, 0x67,
0x63, 0x16, 0x85, 0x65, 0x25, 0x0a, 0x6d, 0x81, 0xe4, 0xd6, 0x80, 0xfa, 0x49, 0x3c, 0x5e, 0xe5,
0x06, 0xbc, 0x24, 0x41, 0xdf, 0xb3, 0x7b, 0x34, 0x0e, 0x6d, 0x87, 0xa6, 0xba, 0x05, 0xd4, 0x27,
0xa7, 0xf1, 0x0a, 0x1c, 0x53, 0x85, 0x46, 0x55, 0x59, 0xae, 0xcd, 0xe0, 0x8b, 0xb0, 0x24, 0xc7,
0x6f, 0xde, 0xb9, 0x69, 0xcc, 0x29, 0x0b, 0xd5, 0x09, 0xb2, 0x0b, 0x86, 0x82, 0xfd, 0xae, 0xed,
0x7b, 0xfb, 0x34, 0x4e, 0xc6, 0xa3, 0x6e, 0x6a, 0x81, 0x50, 0xe2, 0x9a, 0x85, 0xe3, 0x24, 0xbc,
0xac, 0x47, 0x23, 0x0c, 0xfc, 0x98, 0x92, 0xf7, 0x91, 0x66, 0xe9, 0x8d, 0x88, 0xda, 0x09, 0x6d,
0xd3, 0xef, 0xf5, 0x69, 0x9c, 0x60, 0x1f, 0xd4, 0x4d, 0xc7, 0x0d, 0x2e, 0x6d, 0x7c, 0xc5, 0xca,
0x4b, 0xd4, 0x92, 0x25, 0xca, 0x7f, 0x7c, 0xc7, 0x71, 0xad, 0xf0, 0xb0, 0x63, 0xb1, 0x6a, 0xb7,
0xd4, 0x0d, 0x2c, 0xab, 0xdd, 0x52, 0x2c, 0x49, 0xaf, 0x95, 0x75, 0xf8, 0x14, 0x2c, 0xf4, 0xc3,
0x98, 0x46, 0x09, 0xf7, 0xa1, 0xde, 0x16, 0x23, 0xf2, 0x43, 0x1d, 0xe4, 0x9b, 0xa1, 0xab, 0x80,
0x3c, 0xf8, 0x04, 0x41, 0x6a, 0xf0, 0xc8, 0x6d, 0x0d, 0xc5, 0x4d, 0xda, 0xa5, 0x39, 0x8a, 0xa2,
0xa4, 0x18, 0x50, 0x73, 0xec, 0xd8, 0xb1, 0x5d, 0x2a, 0xfc, 0x91, 0x43, 0xf2, 0x4e, 0x15, 0x4e,
0x29, 0xaa, 0xf6, 0x86, 0xbe, 0x53, 0xa6, 0x68, 0x62, 0x76, 0x71, 0x03, 0x16, 0xdc, 0x68, 0xd8,
0xee, 0xfb, 0x46, 0x95, 0x59, 0x12, 0xf3, 0x42, 0x86, 0x4d, 0x98, 0x0f, 0xa3, 0xbe, 0x4f, 0xf9,
0xde, 0x94, 0x93, 0xa9, 0x08, 0x3b, 0x50, 0x8f, 0x13, 0xc6, 0x40, 0x9d, 0x21, 0xdf, 0x91, 0x4b,
0x1b, 0xdb, 0xcf, 0x10, 0x3b, 0xe6, 0xc9, 0x9e, 0x50, 0xd7, 0xce, 0x14, 0xe3, 0x04, 0x16, 0x65,
0x75, 0xc7, 0x46, 0xad, 0x59, 0x5d, 0x59, 0xda, 0xd8, 0x7d, 0x46, 0x2b, 0x5f, 0x0f, 0x19, 0x6f,
0x2a, 0x1b, 0x5b, 0xb8, 0x95, 0x1b, 0xc2, 0x0d, 0x58, 0xec, 0x89, 0x9d, 0x13, 0x1b, 0x75, 0x46,
0x63, 0xed, 0x5c, 0x40, 0xde, 0x43, 0xd0, 0x78, 0xa2, 0xa8, 0xf6, 0x42, 0x5a, 0x9a, 0x09, 0x17,
0xe6, 0xe2, 0x90, 0x3a, 0x9c, 0x10, 0x96, 0x36, 0xbe, 0x3a, 0x9b, 0x2a, 0x63, 0x46, 0x05, 0x7a,
0xae, 0x9d, 0xf4, 0xe0, 0xd3, 0xca, 0xf4, 0xae, 0x9d, 0x38, 0x07, 0x65, 0xa0, 0x58, 0x7a, 0xd9,
0x1a, 0x8d, 0xa6, 0x52, 0x11, 0x26, 0xb0, 0xc8, 0x7f, 0xdc, 0x1f, 0x86, 0x3a, 0x2f, 0xe5, 0x62,
0xf2, 0x23, 0x04, 0xa6, 0x5a, 0xf4, 0x41, 0xb7, 0xfb, 0xb6, 0xed, 0x1c, 0x96, 0x9b, 0xac, 0x78,
0x2e, 0xb7, 0x57, 0xdd, 0x02, 0xa6, 0xef, 0xe8, 0xf1, 0xd9, 0xca, 0x9d, 0x9b, 0xed, 0x8a, 0xe7,
0x7e, 0xfc, 0x5a, 0x24, 0x1f, 0x8d, 0x00, 0x11, 0x99, 0x2c, 0x03, 0x42, 0x60, 0xd1, 0x2f, 0xa4,
0xe9, 0x5c, 0xfc, 0x14, 0xf4, 0xbc, 0x0c, 0xb5, 0x41, 0x76, 0x8c, 0xe5, 0x8b, 0xa4, 0x90, 0x81,
0xef, 0x44, 0x41, 0x3f, 0x34, 0xe6, 0xd5, 0x48, 0x73, 0x11, 0x36, 0x60, 0xee, 0xd0, 0xf3, 0x5d,
0x63, 0x41, 0x99, 0xe2, 0x12, 0xf2, 0xab, 0x0a, 0x9c, 0x2d, 0x70, 0x6b, 0x62, 0x5e, 0x9f, 0x03,
0xdf, 0xf2, 0xda, 0xab, 0x4d, 0xa8, 0xbd, 0x7a, 0x71, 0xed, 0xfd, 0x0f, 0x41, 0xb3, 0x20, 0x36,
0x93, 0xc9, 0xf5, 0x39, 0x09, 0xce, 0x7e, 0x10, 0x39, 0xd4, 0xa8, 0x65, 0xb5, 0x8e, 0xda, 0xa9,
0x88, 0xfc, 0x17, 0x81, 0x21, 0xbd, 0xbd, 0xe1, 0x70, 0xdf, 0xfb, 0xfe, 0xf3, 0xee, 0x70, 0x03,
0x16, 0x6c, 0xee, 0x8b, 0x56, 0x0e, 0x42, 0x46, 0x7e, 0x8c, 0xe0, 0xb4, 0xee, 0x72, 0xbc, 0xe3,
0xc5, 0x89, 0xbc, 0x8b, 0x60, 0x0f, 0x6a, 0xe9, 0xca, 0xd8, 0x40, 0xfc, 0x8c, 0xb8, 0xf3, 0x0c,
0xfc, 0xaa, 0x1b, 0x92, 0xee, 0x09, 0xfd, 0xe4, 0x75, 0x38, 0x5d, 0x48, 0x34, 0x02, 0x49, 0x13,
0xea, 0xf2, 0xa0, 0x48, 0x73, 0x20, 0x0f, 0x5c, 0x29, 0x25, 0x7f, 0xaf, 0xe8, 0x1c, 0x1d, 0xb8,
0x3b, 0x41, 0xa7, 0xe4, 0x5a, 0x39, 0x4d, 0xf6, 0x0c, 0xa8, 0x85, 0x81, 0x9b, 0x27, 0xae, 0x2d,
0x87, 0xec, 0x6b, 0x27, 0xf0, 0x13, 0x9b, 0xbd, 0x47, 0xb4, 0x7c, 0xe5, 0x62, 0x96, 0xfb, 0xd8,
0xf3, 0x1d, 0xba, 0x47, 0x9d, 0xc0, 0x77, 0x63, 0x9e, 0xb8, 0xaa, 0xcc, 0xbd, 0x3a, 0x83, 0x6f,
0xc3, 0x22, 0x1f, 0xdf, 0xf7, 0x7a, 0xd4, 0x58, 0xe0, 0x67, 0xfe, 0xaa, 0x95, 0x3e, 0x7c, 0x2c,
0xf5, 0xe1, 0x93, 0x47, 0x98, 0x3d, 0x7c, 0xac, 0xc1, 0xba, 0xc5, 0xbe, 0x68, 0xe7, 0x1f, 0x33,
0x5c, 0x89, 0xed, 0x75, 0x77, 0x3c, 0x9f, 0x9f, 0xeb, 0xb9, 0xc1, 0x5c, 0xcc, 0x6a, 0x62, 0x3f,
0xe8, 0x76, 0x83, 0x07, 0x9c, 0x02, 0xb2, 0xe3, 0x20, 0x95, 0x91, 0xef, 0x43, 0x7d, 0x27, 0xe8,
0xdc, 0xf2, 0x93, 0x68, 0xc8, 0x6a, 0x92, 0xb9, 0x43, 0x7d, 0x3d, 0xe8, 0x52, 0x88, 0xef, 0xc1,
0x62, 0xe2, 0xf5, 0xe8, 0x5e, 0x62, 0xf7, 0x42, 0x71, 0x02, 0x3f, 0x05, 0xee, 0x0c, 0x99, 0x54,
0x41, 0x5a, 0xf0, 0x6a, 0x76, 0x8b, 0xb8, 0x4f, 0xa3, 0x9e, 0xe7, 0xdb, 0xa5, 0x9c, 0x43, 0xd6,
0xb5, 0xaa, 0x61, 0xb7, 0x90, 0xb7, 0x3c, 0xdf, 0x0d, 0x1e, 0x8c, 0xcf, 0x3b, 0xf9, 0x97, 0xfe,
0x0a, 0x51, 0xbe, 0xc9, 0x8a, 0xed, 0x36, 0xbc, 0xc0, 0xca, 0x72, 0x40, 0xc5, 0x84, 0x28, 0x7e,
0xa2, 0xd5, 0x75, 0xa1, 0x8e, 0xb6, 0xfe, 0x21, 0xde, 0x81, 0xe3, 0x76, 0x1c, 0x7b, 0x1d, 0x9f,
0xba, 0x52, 0x57, 0x65, 0x6a, 0x5d, 0xa3, 0x9f, 0xa6, 0xd7, 0x57, 0xbe, 0x82, 0x97, 0x23, 0xbf,
0xbe, 0xf2, 0x21, 0xf9, 0x01, 0x82, 0x93, 0x85, 0x4a, 0x58, 0x08, 0x38, 0x35, 0x88, 0x10, 0x08,
0x16, 0xac, 0xc7, 0xce, 0x01, 0x75, 0xfb, 0x5d, 0x2a, 0x1f, 0x69, 0x72, 0xcc, 0xe6, 0xdc, 0x7e,
0x9a, 0x01, 0x51, 0xf3, 0xd9, 0x18, 0x2f, 0x03, 0xf4, 0x6c, 0xbf, 0x6f, 0x77, 0x39, 0x84, 0x39,
0x0e, 0x41, 0x91, 0x90, 0x06, 0x98, 0x45, 0xe9, 0x13, 0x0f, 0x9b, 0x8f, 0x10, 0xbc, 0x28, 0xf7,
0xb5, 0xc8, 0x8f, 0x05, 0xc7, 0x95, 0x30, 0xdc, 0xcb, 0x52, 0x25, 0x88, 0x79, 0x74, 0x72, 0x74,
0xcf, 0xa2, 0xe2, 0x3d, 0x9b, 0xe6, 0xbc, 0xaa, 0x4c, 0xa7, 0x3b, 0x5e, 0x63, 0x58, 0x54, 0xca,
0xb0, 0x68, 0x3c, 0xc3, 0xa2, 0x91, 0xbb, 0xc4, 0x10, 0x8c, 0xbb, 0xb6, 0x6f, 0x77, 0xa8, 0x9b,
0x39, 0x97, 0x15, 0xd2, 0xb7, 0x61, 0xde, 0x4b, 0x68, 0x4f, 0x16, 0xd0, 0xf6, 0x0c, 0xd8, 0xf3,
0xa6, 0xb7, 0xbf, 0xdf, 0x4e, 0xb5, 0x6e, 0x7c, 0xd8, 0x00, 0xac, 0x66, 0x9d, 0x46, 0x03, 0xcf,
0xa1, 0xf8, 0x67, 0x08, 0xe6, 0x18, 0x8d, 0xe3, 0x33, 0xe3, 0x8a, 0x8c, 0x47, 0xdf, 0x9c, 0xd1,
0x65, 0x99, 0x99, 0x22, 0x8d, 0x77, 0x3f, 0xfc, 0xcf, 0x2f, 0x2a, 0xa7, 0xf0, 0x2b, 0xbc, 0x99,
0x33, 0x58, 0x57, 0x7b, 0x2b, 0x31, 0xfe, 0x09, 0x02, 0x2c, 0x0e, 0x16, 0xe5, 0xc9, 0x8f, 0xaf,
0x8c, 0xc3, 0x57, 0xd0, 0x1a, 0x30, 0xcf, 0x28, 0xc4, 0x62, 0x39, 0x41, 0x44, 0x19, 0x8d, 0xf0,
0x05, 0x1c, 0xc0, 0x2a, 0x07, 0x70, 0x1e, 0x93, 0x22, 0x00, 0xad, 0x87, 0xac, 0x00, 0x1e, 0xb5,
0x68, 0x6a, 0xf7, 0xf7, 0x08, 0xe6, 0xdf, 0xe2, 0x17, 0xa2, 0x09, 0x11, 0xda, 0x9d, 0x4d, 0x84,
0xb8, 0x2d, 0x0e, 0x95, 0x9c, 0xe3, 0x30, 0xcf, 0xe0, 0xd3, 0x12, 0x66, 0x9c, 0x44, 0xd4, 0xee,
0x69, 0x68, 0xaf, 0x21, 0xfc, 0x3e, 0x82, 0x85, 0xf4, 0xe5, 0x8f, 0x2f, 0x8c, 0x83, 0xa8, 0x75,
0x06, 0xcc, 0x19, 0xbd, 0xaf, 0xc9, 0x65, 0x0e, 0xf0, 0x1c, 0x29, 0x4c, 0xe4, 0xa6, 0xd6, 0x1c,
0xf8, 0x39, 0x82, 0xea, 0x36, 0x9d, 0x58, 0x66, 0xb3, 0x42, 0xf6, 0x44, 0xe8, 0x0a, 0x32, 0x8c,
0xff, 0x88, 0xe0, 0xd5, 0x6d, 0x9a, 0x14, 0x13, 0x3c, 0x5e, 0x99, 0xcc, 0xba, 0xa2, 0xda, 0xae,
0x4c, 0xb1, 0x32, 0x63, 0xb6, 0x16, 0x47, 0x76, 0x19, 0x5f, 0x2a, 0xab, 0xbd, 0x78, 0xe8, 0x3b,
0x0f, 0x04, 0x8e, 0x7f, 0x20, 0x38, 0x31, 0xda, 0x53, 0xc3, 0xfa, 0x91, 0x50, 0xd8, 0x72, 0x33,
0xbf, 0xf6, 0x4c, 0x0c, 0xa2, 0x6b, 0x24, 0x37, 0x38, 0xec, 0x2f, 0xe2, 0x2f, 0x94, 0xc1, 0x96,
0x0d, 0x8d, 0xb8, 0xf5, 0x50, 0xfe, 0x7c, 0xc4, 0xdb, 0xae, 0x1c, 0xf3, 0xbb, 0x08, 0x8e, 0x6d,
0xd3, 0x44, 0xb6, 0xc3, 0xe2, 0xf1, 0xd5, 0xaa, 0x75, 0xcc, 0xcc, 0x86, 0xa5, 0xf4, 0x48, 0xe5,
0x54, 0x16, 0xcf, 0x35, 0x0e, 0xec, 0x12, 0xbe, 0x50, 0x06, 0x2c, 0xeb, 0x1b, 0xe0, 0xbf, 0x21,
0x58, 0x48, 0x9b, 0x05, 0xe3, 0xcd, 0x6b, 0x1d, 0xaa, 0x99, 0x95, 0xe4, 0x2d, 0x0e, 0xf4, 0x75,
0xf3, 0x5a, 0x31, 0x50, 0xf5, 0x7b, 0x19, 0x32, 0x8b, 0xa3, 0xd7, 0x37, 0xd2, 0x9f, 0x11, 0x40,
0xde, 0xed, 0xc0, 0x97, 0xcb, 0x9d, 0x50, 0x3a, 0x22, 0xe6, 0x0c, 0xfb, 0x1d, 0xc4, 0xe2, 0xce,
0xac, 0x98, 0xcd, 0xd2, 0x2a, 0x0e, 0xa9, 0xb3, 0xc9, 0x7b, 0x22, 0xf8, 0xb7, 0x08, 0xe6, 0xf9,
0x8b, 0x19, 0x9f, 0x1f, 0x07, 0x58, 0x7d, 0x50, 0xcf, 0x2c, 0xe8, 0x17, 0x39, 0xce, 0xe6, 0x46,
0x19, 0x0f, 0x6c, 0xa2, 0x55, 0x3c, 0x80, 0x85, 0xf4, 0xd1, 0x3a, 0xbe, 0x2a, 0xb4, 0x47, 0xad,
0xd9, 0x2c, 0x39, 0x8e, 0xd2, 0xc2, 0x14, 0x14, 0xb4, 0x5a, 0x4a, 0x41, 0x7f, 0x40, 0x30, 0xc7,
0x58, 0x02, 0x9f, 0x2b, 0xe3, 0x90, 0x59, 0x47, 0xe5, 0x0a, 0x87, 0x76, 0x81, 0x34, 0x27, 0x71,
0x10, 0x0b, 0xcd, 0x7b, 0x08, 0x4e, 0x8c, 0x5e, 0x5a, 0xf0, 0xe9, 0x11, 0xfe, 0x51, 0x6f, 0x6a,
0xa6, 0x1e, 0xc2, 0x71, 0x17, 0x1e, 0xf2, 0x65, 0x8e, 0x62, 0x13, 0xbf, 0x36, 0x71, 0x43, 0xdc,
0x93, 0x9b, 0x98, 0x29, 0x5a, 0xcb, 0x5b, 0x84, 0x7f, 0x41, 0x70, 0x4c, 0xea, 0xbd, 0x1f, 0x51,
0x5a, 0x0e, 0x6b, 0x46, 0xf5, 0xcf, 0x0c, 0x91, 0x2f, 0x71, 0xec, 0x9f, 0xc3, 0xd7, 0xa7, 0xc4,
0x2e, 0x31, 0xaf, 0x25, 0x0c, 0xe6, 0x9f, 0x10, 0xd4, 0x65, 0x9f, 0x0e, 0x5f, 0x1a, 0x5b, 0x49,
0x7a, 0x27, 0x6f, 0x66, 0xd9, 0x17, 0x27, 0x10, 0x39, 0x5f, 0x4a, 0xe5, 0xc2, 0x38, 0xab, 0x80,
0x5f, 0x22, 0xc0, 0xd9, 0x15, 0x3d, 0xbb, 0xb4, 0xe3, 0x8b, 0x9a, 0xa9, 0xb1, 0x6f, 0x31, 0xf3,
0xd2, 0xc4, 0x75, 0x3a, 0x95, 0xaf, 0x96, 0x52, 0x79, 0x90, 0xd9, 0xff, 0x29, 0x82, 0xa5, 0x6d,
0x9a, 0xdd, 0x13, 0x4b, 0x02, 0xa9, 0x77, 0x22, 0xcd, 0x95, 0xc9, 0x0b, 0x05, 0xa2, 0xab, 0x1c,
0xd1, 0x45, 0x5c, 0x1e, 0x2a, 0x09, 0xe0, 0x37, 0x08, 0x5e, 0x10, 0x2c, 0x26, 0x24, 0x57, 0x27,
0x59, 0xd2, 0x48, 0x6f, 0x7a, 0x5c, 0x9f, 0xe1, 0xb8, 0xd6, 0xc8, 0x54, 0xb8, 0x36, 0x45, 0x43,
0xef, 0x77, 0x08, 0x5e, 0x56, 0x2f, 0xd6, 0xa2, 0x89, 0xf3, 0x71, 0xe3, 0x56, 0xd2, 0x0b, 0x22,
0xd7, 0x39, 0x3e, 0x0b, 0x5f, 0x9d, 0x06, 0x5f, 0x4b, 0xb4, 0x75, 0xf0, 0xaf, 0x11, 0xbc, 0xc4,
0xdb, 0x68, 0xaa, 0xe2, 0x11, 0x42, 0x1e, 0xd7, 0x74, 0x9b, 0x82, 0x90, 0xc5, 0x9e, 0x25, 0x4f,
0x05, 0x6a, 0x53, 0xb4, 0xbf, 0xd8, 0x43, 0xe9, 0x45, 0x79, 0x04, 0x88, 0xec, 0xae, 0x4d, 0x0a,
0xdc, 0xd3, 0x1e, 0x19, 0xa2, 0xdc, 0x56, 0xa7, 0x2b, 0xb7, 0x77, 0x10, 0xd4, 0x44, 0xe7, 0xaa,
0xe4, 0x54, 0x55, 0x5a, 0x5b, 0xe6, 0x49, 0x6d, 0x95, 0xec, 0xdc, 0x90, 0xcf, 0x73, 0xb3, 0xeb,
0xb8, 0x55, 0x66, 0x36, 0x0c, 0xdc, 0xb8, 0xf5, 0x50, 0xb4, 0xb4, 0x1e, 0xb5, 0xba, 0x41, 0x27,
0xbe, 0x86, 0xb6, 0xde, 0xf8, 0xe0, 0x68, 0x19, 0xfd, 0xf3, 0x68, 0x19, 0xfd, 0xfb, 0x68, 0x19,
0x7d, 0xeb, 0xb3, 0x53, 0xfc, 0x93, 0xee, 0x74, 0x3d, 0xea, 0x27, 0xaa, 0x89, 0xff, 0x07, 0x00,
0x00, 0xff, 0xff, 0xd2, 0x0f, 0x21, 0x57, 0x42, 0x20, 0x00, 0x00,
// 2082 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x6f, 0x1c, 0x49,
0x15, 0xa7, 0x66, 0x6c, 0xcf, 0xf8, 0x39, 0xbb, 0xc9, 0xd6, 0x6e, 0x42, 0x6f, 0x67, 0xe2, 0x8c,
0x2a, 0x89, 0xe3, 0x38, 0x71, 0x4f, 0x6c, 0x02, 0x2c, 0x06, 0x29, 0xc4, 0x9b, 0xe0, 0x18, 0x9c,
0x60, 0xc6, 0x09, 0x2b, 0x21, 0x21, 0xd4, 0xdb, 0x5d, 0x1e, 0x37, 0x9e, 0xe9, 0x6e, 0xba, 0x7b,
0x26, 0x1a, 0xa2, 0x1c, 0x58, 0x10, 0xe2, 0x80, 0x40, 0x08, 0x0e, 0x0b, 0xe2, 0x4b, 0xcb, 0x95,
0x1b, 0xe2, 0xc2, 0x81, 0x1b, 0x68, 0x8f, 0x88, 0xdd, 0x03, 0xa7, 0x08, 0x59, 0xfc, 0x01, 0x9c,
0x38, 0xa3, 0xaa, 0xae, 0xea, 0xae, 0x9a, 0xcc, 0xf4, 0x4c, 0xd6, 0xb3, 0x87, 0xdc, 0xa6, 0x5e,
0x55, 0xbf, 0xf7, 0x7b, 0x1f, 0xf5, 0xab, 0xaa, 0x37, 0x70, 0x31, 0xa6, 0x51, 0x8f, 0x46, 0x0d,
0x3b, 0x0c, 0xdb, 0x9e, 0x63, 0x27, 0x5e, 0xe0, 0xab, 0xbf, 0xad, 0x30, 0x0a, 0x92, 0x00, 0x2f,
0x28, 0x22, 0xf3, 0xb5, 0x56, 0xd0, 0x0a, 0xb8, 0xbc, 0xc1, 0x7e, 0xa5, 0x4b, 0xcc, 0x5a, 0x2b,
0x08, 0x5a, 0x6d, 0xda, 0xb0, 0x43, 0xaf, 0x61, 0xfb, 0x7e, 0x90, 0xf0, 0xc5, 0xb1, 0x98, 0x25,
0x87, 0x6f, 0xc4, 0x96, 0x17, 0xf0, 0x59, 0x27, 0x88, 0x68, 0xa3, 0xb7, 0xd6, 0x68, 0x51, 0x9f,
0x46, 0x76, 0x42, 0x5d, 0xb1, 0xe6, 0x46, 0xbe, 0xa6, 0x63, 0x3b, 0x07, 0x9e, 0x4f, 0xa3, 0x7e,
0x23, 0x3c, 0x6c, 0x31, 0x41, 0xdc, 0xe8, 0xd0, 0xc4, 0x1e, 0xf6, 0xd5, 0x76, 0xcb, 0x4b, 0x0e,
0xba, 0x6f, 0x5b, 0x4e, 0xd0, 0x69, 0xd8, 0x11, 0x07, 0xf6, 0x6d, 0xfe, 0x63, 0xd5, 0x71, 0xf3,
0xaf, 0x55, 0xf7, 0x7a, 0x6b, 0x76, 0x3b, 0x3c, 0xb0, 0x9f, 0x55, 0xb5, 0x59, 0xa4, 0x2a, 0xa2,
0x61, 0x20, 0x62, 0xc5, 0x7f, 0x7a, 0x49, 0x10, 0xf5, 0x95, 0x9f, 0xa9, 0x0e, 0xf2, 0x17, 0x04,
0xa7, 0x6e, 0xe5, 0xc6, 0xbe, 0xd6, 0xa5, 0x51, 0x1f, 0x63, 0x98, 0xf1, 0xed, 0x0e, 0x35, 0x50,
0x1d, 0x2d, 0xcf, 0x37, 0xf9, 0x6f, 0x6c, 0x40, 0x25, 0xa2, 0xfb, 0x11, 0x8d, 0x0f, 0x8c, 0x12,
0x17, 0xcb, 0x21, 0x5e, 0x82, 0x0a, 0xb3, 0x4c, 0x9d, 0xc4, 0x28, 0xd7, 0xcb, 0xcb, 0xf3, 0x9b,
0x27, 0x8e, 0x9e, 0x9e, 0xaf, 0xee, 0xa6, 0xa2, 0xb8, 0x29, 0x27, 0xb1, 0x05, 0x27, 0x23, 0x1a,
0x07, 0xdd, 0xc8, 0xa1, 0x5f, 0xa7, 0x51, 0xec, 0x05, 0xbe, 0x31, 0xc3, 0x34, 0x6d, 0xce, 0xbc,
0xff, 0xf4, 0xfc, 0x27, 0x9a, 0x83, 0x93, 0xb8, 0x0e, 0xd5, 0x98, 0xb6, 0xa9, 0x93, 0x04, 0x91,
0x31, 0xab, 0x2c, 0xcc, 0xa4, 0x64, 0x0b, 0x4e, 0x37, 0x69, 0xcf, 0x63, 0xab, 0xef, 0xd1, 0xc4,
0x76, 0xed, 0xc4, 0x1e, 0x74, 0xa0, 0x94, 0x39, 0x60, 0x42, 0x35, 0x12, 0x8b, 0x8d, 0x12, 0x97,
0x67, 0x63, 0x16, 0x85, 0x45, 0x25, 0x0a, 0x4d, 0x81, 0xe4, 0x4e, 0x8f, 0xfa, 0x49, 0x3c, 0x5a,
0xe5, 0x3a, 0xbc, 0x22, 0x41, 0xdf, 0xb7, 0x3b, 0x34, 0x0e, 0x6d, 0x87, 0xa6, 0xba, 0x05, 0xd4,
0x67, 0xa7, 0xf1, 0x32, 0x9c, 0x50, 0x85, 0x46, 0x59, 0x59, 0xae, 0xcd, 0xe0, 0x25, 0x58, 0x90,
0xe3, 0x87, 0xdb, 0xb7, 0x8d, 0x19, 0x65, 0xa1, 0x3a, 0x41, 0x76, 0xc1, 0x50, 0xb0, 0xdf, 0xb3,
0x7d, 0x6f, 0x9f, 0xc6, 0xc9, 0x68, 0xd4, 0x75, 0x2d, 0x10, 0x4a, 0x5c, 0xb3, 0x70, 0x9c, 0x86,
0x57, 0xf5, 0x68, 0x84, 0x81, 0x1f, 0x53, 0xf2, 0x1e, 0xd2, 0x2c, 0xbd, 0x19, 0x51, 0x3b, 0xa1,
0x4d, 0xfa, 0x9d, 0x2e, 0x8d, 0x13, 0xec, 0x83, 0xba, 0xe9, 0xb8, 0xc1, 0x85, 0xf5, 0x2f, 0x59,
0x79, 0x89, 0x5a, 0xb2, 0x44, 0xf9, 0x8f, 0x6f, 0x39, 0xae, 0x15, 0x1e, 0xb6, 0x2c, 0x56, 0xed,
0x96, 0xba, 0x81, 0x65, 0xb5, 0x5b, 0x8a, 0x25, 0xe9, 0xb5, 0xb2, 0x0e, 0x9f, 0x81, 0xb9, 0x6e,
0x18, 0xd3, 0x28, 0xe1, 0x3e, 0x54, 0x9b, 0x62, 0x44, 0x7e, 0xa0, 0x83, 0x7c, 0x18, 0xba, 0x0a,
0xc8, 0x83, 0x8f, 0x11, 0xa4, 0x06, 0x8f, 0xdc, 0xd5, 0x50, 0xdc, 0xa6, 0x6d, 0x9a, 0xa3, 0x18,
0x96, 0x14, 0x03, 0x2a, 0x8e, 0x1d, 0x3b, 0xb6, 0x4b, 0x85, 0x3f, 0x72, 0x48, 0xfe, 0x55, 0x86,
0x33, 0x8a, 0xaa, 0xbd, 0xbe, 0xef, 0x14, 0x29, 0x1a, 0x9b, 0x5d, 0x5c, 0x83, 0x39, 0x37, 0xea,
0x37, 0xbb, 0xbe, 0x51, 0x66, 0x96, 0xc4, 0xbc, 0x90, 0x61, 0x13, 0x66, 0xc3, 0xa8, 0xeb, 0x53,
0xbe, 0x37, 0xe5, 0x64, 0x2a, 0xc2, 0x0e, 0x54, 0xe3, 0x84, 0x31, 0x50, 0xab, 0xcf, 0x77, 0xe4,
0xc2, 0xfa, 0xd6, 0x31, 0x62, 0xc7, 0x3c, 0xd9, 0x13, 0xea, 0x9a, 0x99, 0x62, 0x9c, 0xc0, 0xbc,
0xac, 0xee, 0xd8, 0xa8, 0xd4, 0xcb, 0xcb, 0x0b, 0xeb, 0xbb, 0xc7, 0xb4, 0xf2, 0xd5, 0x90, 0xf1,
0xa6, 0xb2, 0xb1, 0x85, 0x5b, 0xb9, 0x21, 0x5c, 0x83, 0xf9, 0x8e, 0xd8, 0x39, 0xb1, 0x51, 0x65,
0x34, 0xd6, 0xcc, 0x05, 0xf8, 0x21, 0xcc, 0x7a, 0xfe, 0x7e, 0x10, 0x1b, 0xf3, 0x1c, 0xcf, 0xcd,
0x63, 0xe0, 0xd9, 0xf6, 0xf7, 0x83, 0x66, 0xaa, 0x8d, 0xbc, 0x8b, 0xa0, 0xf6, 0x4c, 0xad, 0xee,
0x85, 0xb4, 0x30, 0xc1, 0x2e, 0xcc, 0xc4, 0x21, 0x75, 0x38, 0xcf, 0x2c, 0xac, 0x7f, 0x79, 0x3a,
0xc5, 0xcb, 0x8c, 0x8a, 0xa0, 0x70, 0xed, 0xa4, 0x03, 0x9f, 0x54, 0xa6, 0x77, 0xed, 0xc4, 0x39,
0x28, 0x02, 0xc5, 0xaa, 0x86, 0xad, 0xd1, 0xd8, 0x2f, 0x15, 0x61, 0x02, 0xf3, 0xfc, 0xc7, 0x83,
0x7e, 0xa8, 0xd3, 0x5d, 0x2e, 0x26, 0x3f, 0x44, 0x60, 0xaa, 0x7b, 0x29, 0x68, 0xb7, 0xdf, 0xb6,
0x9d, 0xc3, 0x62, 0x93, 0x25, 0xcf, 0xe5, 0xf6, 0xca, 0x9b, 0xc0, 0xf4, 0x1d, 0x3d, 0x3d, 0x5f,
0xda, 0xbe, 0xdd, 0x2c, 0x79, 0xee, 0x47, 0x2f, 0x71, 0xf2, 0xe1, 0x00, 0x10, 0x51, 0x20, 0x45,
0x40, 0x08, 0xcc, 0xfb, 0x43, 0xd9, 0x3f, 0x17, 0x3f, 0x07, 0xeb, 0x2f, 0x42, 0xa5, 0x97, 0x9d,
0x8e, 0xf9, 0x22, 0x29, 0x64, 0xe0, 0x5b, 0x51, 0xd0, 0x0d, 0x8d, 0x59, 0x35, 0xd2, 0x5c, 0x84,
0x0d, 0x98, 0x39, 0xf4, 0x7c, 0xd7, 0x98, 0x53, 0xa6, 0xb8, 0x84, 0xfc, 0xb2, 0x04, 0xe7, 0x87,
0xb8, 0x35, 0x36, 0xaf, 0x2f, 0x80, 0x6f, 0x79, 0xed, 0x55, 0xc6, 0xd4, 0x5e, 0x75, 0x78, 0xed,
0xfd, 0x0f, 0x41, 0x7d, 0x48, 0x6c, 0xc6, 0x73, 0xf6, 0x0b, 0x12, 0x9c, 0xfd, 0x20, 0x72, 0xa8,
0x51, 0xc9, 0x6a, 0x1d, 0x35, 0x53, 0x11, 0xf9, 0x2f, 0x02, 0x43, 0x7a, 0x7b, 0xcb, 0xe1, 0xbe,
0x77, 0xfd, 0x17, 0xdd, 0xe1, 0x1a, 0xcc, 0xd9, 0xdc, 0x17, 0xad, 0x1c, 0x84, 0x8c, 0xfc, 0x08,
0xc1, 0x59, 0xdd, 0xe5, 0x78, 0xc7, 0x8b, 0x13, 0x79, 0xc5, 0xc1, 0x1e, 0x54, 0xd2, 0x95, 0xb1,
0x81, 0x38, 0xd5, 0x6f, 0x1f, 0x83, 0x5f, 0x75, 0x43, 0xd2, 0x3d, 0xa1, 0x9f, 0xdc, 0x84, 0xb3,
0x43, 0x89, 0x46, 0x20, 0xa9, 0x43, 0x55, 0x9e, 0x3f, 0x69, 0x0e, 0xe4, 0x39, 0x2e, 0xa5, 0xe4,
0x6f, 0x25, 0x9d, 0xa3, 0x03, 0x77, 0x27, 0x68, 0x15, 0xdc, 0x56, 0x27, 0xc9, 0x9e, 0x01, 0x95,
0x30, 0x70, 0xf3, 0xc4, 0x35, 0xe5, 0x90, 0x7d, 0xed, 0x04, 0x7e, 0x62, 0xb3, 0x67, 0x8e, 0x96,
0xaf, 0x5c, 0xcc, 0x72, 0x1f, 0x7b, 0xbe, 0x43, 0xf7, 0xa8, 0x13, 0xf8, 0x6e, 0xcc, 0x13, 0x57,
0x96, 0xb9, 0x57, 0x67, 0xf0, 0x5d, 0x98, 0xe7, 0xe3, 0x07, 0x5e, 0x87, 0x1a, 0x73, 0xfc, 0x2a,
0xb1, 0x62, 0xa5, 0xef, 0x29, 0x4b, 0x7d, 0x4f, 0xe5, 0x11, 0x66, 0xef, 0x29, 0xab, 0xb7, 0x66,
0xb1, 0x2f, 0x9a, 0xf9, 0xc7, 0x0c, 0x57, 0x62, 0x7b, 0xed, 0x1d, 0xcf, 0xe7, 0xd7, 0x85, 0xdc,
0x60, 0x2e, 0x66, 0x35, 0xb1, 0x1f, 0xb4, 0xdb, 0xc1, 0x23, 0x4e, 0x01, 0xd9, 0x71, 0x90, 0xca,
0xc8, 0x77, 0xa1, 0xba, 0x13, 0xb4, 0xee, 0xf8, 0x49, 0xd4, 0x67, 0x35, 0xc9, 0xdc, 0xa1, 0xbe,
0x1e, 0x74, 0x29, 0xc4, 0xf7, 0x61, 0x3e, 0xf1, 0x3a, 0x74, 0x2f, 0xb1, 0x3b, 0xa1, 0x38, 0x81,
0x9f, 0x03, 0x77, 0x86, 0x4c, 0xaa, 0x20, 0x0d, 0x78, 0x3d, 0xbb, 0x9c, 0x3c, 0xa0, 0x51, 0xc7,
0xf3, 0xed, 0x42, 0xce, 0x21, 0x6b, 0x5a, 0xd5, 0xb0, 0xcb, 0xcd, 0x5b, 0x9e, 0xef, 0x06, 0x8f,
0x46, 0xe7, 0x9d, 0xfc, 0x53, 0x7f, 0xdc, 0x28, 0xdf, 0x64, 0xc5, 0x76, 0x17, 0x5e, 0x62, 0x65,
0xd9, 0xa3, 0x62, 0x42, 0x14, 0x3f, 0xd1, 0xea, 0x7a, 0xa8, 0x8e, 0xa6, 0xfe, 0x21, 0xde, 0x81,
0x93, 0x76, 0x1c, 0x7b, 0x2d, 0x9f, 0xba, 0x52, 0x57, 0x69, 0x62, 0x5d, 0x83, 0x9f, 0xa6, 0xb7,
0x62, 0xbe, 0x82, 0x97, 0x23, 0xbf, 0x15, 0xf3, 0x21, 0xf9, 0x3e, 0x82, 0xd3, 0x43, 0x95, 0xb0,
0x10, 0x70, 0x6a, 0x10, 0x21, 0x10, 0x2c, 0x58, 0x8d, 0x9d, 0x03, 0xea, 0x76, 0xdb, 0x54, 0xbe,
0xfd, 0xe4, 0x98, 0xcd, 0xb9, 0xdd, 0x34, 0x03, 0xa2, 0xe6, 0xb3, 0x31, 0x5e, 0x04, 0xe8, 0xd8,
0x7e, 0xd7, 0x6e, 0x73, 0x08, 0x33, 0x1c, 0x82, 0x22, 0x21, 0x35, 0x30, 0x87, 0xa5, 0x4f, 0xbc,
0x97, 0x3e, 0x44, 0xf0, 0xb2, 0xdc, 0xd7, 0x22, 0x3f, 0x16, 0x9c, 0x54, 0xc2, 0x70, 0x3f, 0x4b,
0x95, 0x20, 0xe6, 0xc1, 0xc9, 0xc1, 0x3d, 0x8b, 0x86, 0xef, 0xd9, 0x34, 0xe7, 0x65, 0x65, 0x3a,
0xdd, 0xf1, 0x1a, 0xc3, 0xa2, 0x42, 0x86, 0x45, 0xa3, 0x19, 0x16, 0x0d, 0xdc, 0x25, 0xfa, 0x60,
0xdc, 0xb3, 0x7d, 0xbb, 0x45, 0xdd, 0xcc, 0xb9, 0xac, 0x90, 0xbe, 0x09, 0xb3, 0x5e, 0x42, 0x3b,
0xb2, 0x80, 0xb6, 0xa6, 0xc0, 0x9e, 0xb7, 0xbd, 0xfd, 0xfd, 0x66, 0xaa, 0x75, 0xfd, 0x83, 0x1a,
0x60, 0x35, 0xeb, 0x34, 0xea, 0x79, 0x0e, 0xc5, 0x3f, 0x45, 0x30, 0xc3, 0x68, 0x1c, 0x9f, 0x1b,
0x55, 0x64, 0x3c, 0xfa, 0xe6, 0x94, 0x2e, 0xcb, 0xcc, 0x14, 0xa9, 0xbd, 0xf3, 0xc1, 0x7f, 0x7e,
0x5e, 0x3a, 0x83, 0x5f, 0xe3, 0x3d, 0xa2, 0xde, 0x9a, 0xda, 0xb2, 0x89, 0xf1, 0x8f, 0x11, 0x60,
0x71, 0xb0, 0x28, 0x9d, 0x04, 0x7c, 0x75, 0x14, 0xbe, 0x21, 0x1d, 0x07, 0xf3, 0x9c, 0x42, 0x2c,
0x96, 0x13, 0x44, 0x94, 0xd1, 0x08, 0x5f, 0xc0, 0x01, 0xac, 0x70, 0x00, 0x17, 0x31, 0x19, 0x06,
0xa0, 0xf1, 0x98, 0x15, 0xc0, 0x93, 0x06, 0x4d, 0xed, 0xfe, 0x0e, 0xc1, 0xec, 0x5b, 0xfc, 0x42,
0x34, 0x26, 0x42, 0xbb, 0xd3, 0x89, 0x10, 0xb7, 0xc5, 0xa1, 0x92, 0x0b, 0x1c, 0xe6, 0x39, 0x7c,
0x56, 0xc2, 0x8c, 0x93, 0x88, 0xda, 0x1d, 0x0d, 0xed, 0x75, 0x84, 0xdf, 0x43, 0x30, 0x97, 0x36,
0x14, 0xf0, 0xa5, 0x51, 0x10, 0xb5, 0x86, 0x83, 0x39, 0xa5, 0x67, 0x3b, 0xb9, 0xc2, 0x01, 0x5e,
0x20, 0x43, 0x13, 0xb9, 0xa1, 0xf5, 0x1c, 0x7e, 0x86, 0xa0, 0xbc, 0x45, 0xc7, 0x96, 0xd9, 0xb4,
0x90, 0x3d, 0x13, 0xba, 0x21, 0x19, 0xc6, 0x7f, 0x40, 0xf0, 0xfa, 0x16, 0x4d, 0x86, 0x13, 0x3c,
0x5e, 0x1e, 0xcf, 0xba, 0xa2, 0xda, 0xae, 0x4e, 0xb0, 0x32, 0x63, 0xb6, 0x06, 0x47, 0x76, 0x05,
0x5f, 0x2e, 0xaa, 0xbd, 0xb8, 0xef, 0x3b, 0x8f, 0x04, 0x8e, 0xbf, 0x23, 0x38, 0x35, 0xd8, 0xaa,
0xc3, 0xfa, 0x91, 0x30, 0xb4, 0x93, 0x67, 0x7e, 0xe5, 0x58, 0x0c, 0xa2, 0x6b, 0x24, 0xb7, 0x38,
0xec, 0xcf, 0xe3, 0xcf, 0x15, 0xc1, 0x96, 0x7d, 0x92, 0xb8, 0xf1, 0x58, 0xfe, 0x7c, 0xc2, 0xbb,
0xb9, 0x1c, 0xf3, 0x3b, 0x08, 0x4e, 0x6c, 0xd1, 0xe4, 0x5e, 0xd6, 0x1a, 0x18, 0x59, 0xad, 0x5a,
0x23, 0xce, 0xac, 0x59, 0x4a, 0xeb, 0x55, 0x4e, 0x65, 0xf1, 0x5c, 0xe5, 0xc0, 0x2e, 0xe3, 0x4b,
0x45, 0xc0, 0xf2, 0x76, 0xc4, 0x5f, 0x11, 0xcc, 0xa5, 0xcd, 0x82, 0xd1, 0xe6, 0xb5, 0xc6, 0xd7,
0xd4, 0x4a, 0xf2, 0x0e, 0x07, 0x7a, 0xd3, 0xbc, 0x3e, 0x1c, 0xa8, 0xfa, 0xbd, 0x0c, 0x99, 0xc5,
0xd1, 0xeb, 0x1b, 0xe9, 0x4f, 0x08, 0x20, 0xef, 0x76, 0xe0, 0x2b, 0xc5, 0x4e, 0x28, 0x1d, 0x11,
0x73, 0x8a, 0xfd, 0x0e, 0x62, 0x71, 0x67, 0x96, 0xcd, 0x7a, 0x61, 0x15, 0x87, 0xd4, 0xd9, 0xe0,
0x3d, 0x11, 0xfc, 0x1b, 0x04, 0xb3, 0xfc, 0xc5, 0x8c, 0x2f, 0x8e, 0x02, 0xac, 0x3e, 0xa8, 0xa7,
0x16, 0xf4, 0x25, 0x8e, 0xb3, 0xbe, 0x5e, 0xc4, 0x03, 0x1b, 0x68, 0x05, 0xf7, 0x60, 0x2e, 0x7d,
0xb4, 0x8e, 0xae, 0x0a, 0xed, 0x51, 0x6b, 0xd6, 0x0b, 0x8e, 0xa3, 0xb4, 0x30, 0x05, 0x05, 0xad,
0x14, 0x52, 0xd0, 0xef, 0x11, 0xcc, 0x30, 0x96, 0xc0, 0x17, 0x8a, 0x38, 0x64, 0xda, 0x51, 0xb9,
0xca, 0xa1, 0x5d, 0x22, 0xf5, 0x71, 0x1c, 0xc4, 0x42, 0xf3, 0x2e, 0x82, 0x53, 0x83, 0x97, 0x16,
0x7c, 0x76, 0x80, 0x7f, 0xd4, 0x9b, 0x9a, 0xa9, 0x87, 0x70, 0xd4, 0x85, 0x87, 0x7c, 0x91, 0xa3,
0xd8, 0xc0, 0x6f, 0x8c, 0xdd, 0x10, 0xf7, 0xe5, 0x26, 0x66, 0x8a, 0x56, 0xf3, 0xce, 0xe3, 0x9f,
0x11, 0x9c, 0x90, 0x7a, 0x1f, 0x44, 0x94, 0x16, 0xc3, 0x9a, 0x52, 0xfd, 0x33, 0x43, 0xe4, 0x0b,
0x1c, 0xfb, 0x67, 0xf0, 0x8d, 0x09, 0xb1, 0x4b, 0xcc, 0xab, 0x09, 0x83, 0xf9, 0x47, 0x04, 0x55,
0xd9, 0xa7, 0xc3, 0x97, 0x47, 0x56, 0x92, 0xde, 0xc9, 0x9b, 0x5a, 0xf6, 0xc5, 0x09, 0x44, 0x2e,
0x16, 0x52, 0xb9, 0x30, 0xce, 0x2a, 0xe0, 0x17, 0x08, 0x70, 0x76, 0x45, 0xcf, 0x2e, 0xed, 0x78,
0x49, 0x33, 0x35, 0xf2, 0x2d, 0x66, 0x5e, 0x1e, 0xbb, 0x4e, 0xa7, 0xf2, 0x95, 0x42, 0x2a, 0x0f,
0x32, 0xfb, 0x3f, 0x41, 0xb0, 0xb0, 0x45, 0xb3, 0x7b, 0x62, 0x41, 0x20, 0xf5, 0x4e, 0xa4, 0xb9,
0x3c, 0x7e, 0xa1, 0x40, 0x74, 0x8d, 0x23, 0x5a, 0xc2, 0xc5, 0xa1, 0x92, 0x00, 0x7e, 0x8d, 0xe0,
0x25, 0xc1, 0x62, 0x42, 0x72, 0x6d, 0x9c, 0x25, 0x8d, 0xf4, 0x26, 0xc7, 0xf5, 0x29, 0x8e, 0x6b,
0x95, 0x4c, 0x84, 0x6b, 0x43, 0x34, 0xf4, 0x7e, 0x8b, 0xe0, 0x55, 0xf5, 0x62, 0x2d, 0x9a, 0x38,
0x1f, 0x35, 0x6e, 0x05, 0xbd, 0x20, 0x72, 0x83, 0xe3, 0xb3, 0xf0, 0xb5, 0x49, 0xf0, 0x35, 0x44,
0x5b, 0x07, 0xff, 0x0a, 0xc1, 0x2b, 0xbc, 0x8d, 0xa6, 0x2a, 0x1e, 0x20, 0xe4, 0x51, 0x4d, 0xb7,
0x09, 0x08, 0x59, 0xec, 0x59, 0xf2, 0x5c, 0xa0, 0x36, 0x44, 0xfb, 0x8b, 0x3d, 0x94, 0x5e, 0x96,
0x47, 0x80, 0xc8, 0xee, 0xea, 0xb8, 0xc0, 0x3d, 0xef, 0x91, 0x21, 0xca, 0x6d, 0x65, 0xb2, 0x72,
0xfb, 0x1e, 0x82, 0x8a, 0xe8, 0x5c, 0x15, 0x9c, 0xaa, 0x4a, 0x6b, 0xcb, 0x3c, 0xad, 0xad, 0x92,
0x9d, 0x1b, 0xf2, 0x59, 0x6e, 0x76, 0x0d, 0x37, 0x8a, 0xcc, 0x86, 0x81, 0x1b, 0x37, 0x1e, 0x8b,
0x96, 0xd6, 0x93, 0x46, 0x3b, 0x68, 0xc5, 0xd7, 0xd1, 0xe6, 0x9b, 0xef, 0x1f, 0x2d, 0xa2, 0x7f,
0x1c, 0x2d, 0xa2, 0x7f, 0x1f, 0x2d, 0xa2, 0x6f, 0x7c, 0x7a, 0x82, 0x3f, 0xe8, 0x9d, 0xb6, 0x47,
0xfd, 0x44, 0x35, 0xf1, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xde, 0x6c, 0xbb, 0xb2, 0x99, 0x20,
0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@@ -3337,6 +3347,20 @@ func (m *ApplicationSyncRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)
i -= len(m.XXX_unrecognized)
copy(dAtA[i:], m.XXX_unrecognized)
}
if len(m.Infos) > 0 {
for iNdEx := len(m.Infos) - 1; iNdEx >= 0; iNdEx-- {
{
size, err := m.Infos[iNdEx].MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintApplication(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x4a
}
}
if len(m.Manifests) > 0 {
for iNdEx := len(m.Manifests) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.Manifests[iNdEx])
@@ -4546,6 +4570,12 @@ func (m *ApplicationSyncRequest) Size() (n int) {
n += 1 + l + sovApplication(uint64(l))
}
}
if len(m.Infos) > 0 {
for _, e := range m.Infos {
l = e.Size()
n += 1 + l + sovApplication(uint64(l))
}
}
if m.XXX_unrecognized != nil {
n += len(m.XXX_unrecognized)
}
@@ -6231,6 +6261,40 @@ func (m *ApplicationSyncRequest) Unmarshal(dAtA []byte) error {
}
m.Manifests = append(m.Manifests, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
case 9:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Infos", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowApplication
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthApplication
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthApplication
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Infos = append(m.Infos, &v1alpha1.Info{})
if err := m.Infos[len(m.Infos)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipApplication(dAtA[iNdEx:])

View File

@@ -24,6 +24,7 @@ API rule violation: list_type_missing,github.com/argoproj/argo-cd/pkg/apis/appli
API rule violation: list_type_missing,github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1,ClusterList,Items
API rule violation: list_type_missing,github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1,Command,Args
API rule violation: list_type_missing,github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1,Command,Command
API rule violation: list_type_missing,github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1,Operation,Info
API rule violation: list_type_missing,github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1,ProjectRole,Groups
API rule violation: list_type_missing,github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1,ProjectRole,JWTTokens
API rule violation: list_type_missing,github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1,ProjectRole,Policies

View File

@@ -2221,331 +2221,332 @@ func init() {
}
var fileDescriptor_e7dc23c2911a1a00 = []byte{
// 5173 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3c, 0x6d, 0x8c, 0x24, 0xc7,
0x55, 0xee, 0x99, 0xdd, 0xd9, 0x99, 0xb7, 0x1f, 0x77, 0x5b, 0xf6, 0x39, 0x9b, 0x23, 0xb9, 0x3d,
0xb5, 0x95, 0xc4, 0x10, 0x7b, 0x16, 0x9f, 0x0c, 0x5c, 0x62, 0x88, 0xb3, 0xb3, 0x7b, 0x1f, 0x7b,
0xb7, 0xbb, 0xb7, 0xae, 0xd9, 0xf3, 0x49, 0x4e, 0x08, 0xee, 0xeb, 0xae, 0x99, 0xe9, 0xdb, 0x99,
0xee, 0x76, 0x77, 0xcf, 0xde, 0xad, 0x21, 0xc1, 0x81, 0x18, 0x45, 0xc1, 0x46, 0x48, 0x88, 0x5f,
0x28, 0x08, 0xf8, 0x47, 0xfe, 0xa1, 0x48, 0x48, 0x48, 0xfc, 0xf2, 0x8f, 0x60, 0xf1, 0x23, 0x0a,
0x91, 0x05, 0x16, 0xa0, 0x05, 0x6f, 0xfe, 0x20, 0xf8, 0x11, 0x10, 0xe2, 0xcf, 0xfd, 0x42, 0xf5,
0x5d, 0xdd, 0x33, 0x73, 0x3b, 0x7b, 0xd3, 0x77, 0x41, 0xe1, 0xdf, 0xf4, 0x7b, 0xaf, 0xde, 0x7b,
0x55, 0xf5, 0xaa, 0xea, 0xbd, 0x57, 0xaf, 0x06, 0x36, 0xda, 0x7e, 0xda, 0xe9, 0xdf, 0xae, 0xbb,
0x61, 0x6f, 0xc5, 0x89, 0xdb, 0x61, 0x14, 0x87, 0x77, 0xd8, 0x8f, 0xe7, 0x5d, 0x6f, 0x25, 0xda,
0x6b, 0xaf, 0x38, 0x91, 0x9f, 0xac, 0x38, 0x51, 0xd4, 0xf5, 0x5d, 0x27, 0xf5, 0xc3, 0x60, 0x65,
0xff, 0x05, 0xa7, 0x1b, 0x75, 0x9c, 0x17, 0x56, 0xda, 0x24, 0x20, 0xb1, 0x93, 0x12, 0xaf, 0x1e,
0xc5, 0x61, 0x1a, 0xa2, 0xcf, 0x69, 0x56, 0x75, 0xc9, 0x8a, 0xfd, 0xf8, 0x35, 0xd7, 0xab, 0x47,
0x7b, 0xed, 0x3a, 0x65, 0x55, 0x37, 0x58, 0xd5, 0x25, 0xab, 0xb3, 0xcf, 0x1b, 0x5a, 0xb4, 0xc3,
0x76, 0xb8, 0xc2, 0x38, 0xde, 0xee, 0xb7, 0xd8, 0x17, 0xfb, 0x60, 0xbf, 0xb8, 0xa4, 0xb3, 0xf6,
0xde, 0xc5, 0xa4, 0xee, 0x87, 0x54, 0xb7, 0x15, 0x37, 0x8c, 0xc9, 0xca, 0xfe, 0x80, 0x36, 0x67,
0x5f, 0xd4, 0x34, 0x3d, 0xc7, 0xed, 0xf8, 0x01, 0x89, 0x0f, 0x74, 0x87, 0x7a, 0x24, 0x75, 0x86,
0xb5, 0x5a, 0x19, 0xd5, 0x2a, 0xee, 0x07, 0xa9, 0xdf, 0x23, 0x03, 0x0d, 0x7e, 0xf1, 0xb8, 0x06,
0x89, 0xdb, 0x21, 0x3d, 0x27, 0xdf, 0xce, 0x7e, 0x03, 0xe6, 0x57, 0x6f, 0x35, 0x57, 0xfb, 0x69,
0x67, 0x2d, 0x0c, 0x5a, 0x7e, 0x1b, 0xfd, 0x02, 0xcc, 0xba, 0xdd, 0x7e, 0x92, 0x92, 0x78, 0xdb,
0xe9, 0x91, 0x25, 0xeb, 0xbc, 0xf5, 0x6c, 0xad, 0xf1, 0xe4, 0xfb, 0x87, 0xcb, 0x4f, 0x1c, 0x1d,
0x2e, 0xcf, 0xae, 0x69, 0x14, 0x36, 0xe9, 0xd0, 0xcf, 0xc2, 0x4c, 0x1c, 0x76, 0xc9, 0x2a, 0xde,
0x5e, 0x2a, 0xb1, 0x26, 0xa7, 0x44, 0x93, 0x19, 0xcc, 0xc1, 0x58, 0xe2, 0xed, 0x7f, 0xb2, 0x00,
0x56, 0xa3, 0x68, 0x27, 0x0e, 0xef, 0x10, 0x37, 0x45, 0xaf, 0x43, 0x95, 0x8e, 0x82, 0xe7, 0xa4,
0x0e, 0x93, 0x36, 0x7b, 0xe1, 0xe7, 0xeb, 0xbc, 0x33, 0x75, 0xb3, 0x33, 0x7a, 0xe6, 0x28, 0x75,
0x7d, 0xff, 0x85, 0xfa, 0x8d, 0xdb, 0xb4, 0xfd, 0x16, 0x49, 0x9d, 0x06, 0x12, 0xc2, 0x40, 0xc3,
0xb0, 0xe2, 0x8a, 0xf6, 0x60, 0x2a, 0x89, 0x88, 0xcb, 0x14, 0x9b, 0xbd, 0xb0, 0x51, 0x7f, 0x68,
0xfb, 0xa8, 0x6b, 0xb5, 0x9b, 0x11, 0x71, 0x1b, 0x73, 0x42, 0xec, 0x14, 0xfd, 0xc2, 0x4c, 0x88,
0xfd, 0x8f, 0x16, 0x2c, 0x68, 0xb2, 0x4d, 0x3f, 0x49, 0xd1, 0x97, 0x07, 0x7a, 0x58, 0x1f, 0xaf,
0x87, 0xb4, 0x35, 0xeb, 0xdf, 0x69, 0x21, 0xa8, 0x2a, 0x21, 0x46, 0xef, 0xee, 0xc0, 0xb4, 0x9f,
0x92, 0x5e, 0xb2, 0x54, 0x3a, 0x5f, 0x7e, 0x76, 0xf6, 0xc2, 0xa5, 0x42, 0xba, 0xd7, 0x98, 0x17,
0x12, 0xa7, 0x37, 0x28, 0x6f, 0xcc, 0x45, 0xd8, 0xdf, 0xaf, 0x9a, 0x9d, 0xa3, 0xbd, 0x46, 0x2f,
0xc0, 0x6c, 0x12, 0xf6, 0x63, 0x97, 0x60, 0x12, 0x85, 0xc9, 0x92, 0x75, 0xbe, 0x4c, 0x27, 0x9f,
0xda, 0x4a, 0x53, 0x83, 0xb1, 0x49, 0x83, 0x7e, 0xd7, 0x82, 0x39, 0x8f, 0x24, 0xa9, 0x1f, 0x30,
0xf9, 0x52, 0xf3, 0x57, 0x26, 0xd3, 0x5c, 0x02, 0xd7, 0x35, 0xe7, 0xc6, 0x53, 0xa2, 0x17, 0x73,
0x06, 0x30, 0xc1, 0x19, 0xe1, 0xd4, 0xe0, 0x3d, 0x92, 0xb8, 0xb1, 0x1f, 0xd1, 0xef, 0xa5, 0x72,
0xd6, 0xe0, 0xd7, 0x35, 0x0a, 0x9b, 0x74, 0x68, 0x0f, 0xa6, 0xa9, 0x41, 0x27, 0x4b, 0x53, 0x4c,
0xf9, 0xcb, 0x13, 0x28, 0x2f, 0x86, 0x93, 0x2e, 0x14, 0x3d, 0xee, 0xf4, 0x2b, 0xc1, 0x5c, 0x06,
0x7a, 0xd7, 0x82, 0x25, 0xb1, 0xda, 0x30, 0xe1, 0x43, 0x79, 0xab, 0xe3, 0xa7, 0xa4, 0xeb, 0x27,
0xe9, 0xd2, 0x34, 0x53, 0x60, 0x65, 0x3c, 0x93, 0xba, 0x12, 0x87, 0xfd, 0xe8, 0xba, 0x1f, 0x78,
0x8d, 0xf3, 0x42, 0xd2, 0xd2, 0xda, 0x08, 0xc6, 0x78, 0xa4, 0x48, 0xf4, 0x07, 0x16, 0x9c, 0x0d,
0x9c, 0x1e, 0x49, 0x22, 0x87, 0x4e, 0x2a, 0x47, 0x37, 0xba, 0x8e, 0xbb, 0xc7, 0x34, 0xaa, 0x3c,
0x9c, 0x46, 0xb6, 0xd0, 0xe8, 0xec, 0xf6, 0x48, 0xd6, 0xf8, 0x01, 0x62, 0xd1, 0x9f, 0x58, 0xb0,
0x18, 0xc6, 0x51, 0xc7, 0x09, 0x88, 0x27, 0xb1, 0xc9, 0xd2, 0x0c, 0x5b, 0x71, 0x5f, 0x9a, 0x60,
0x7e, 0x6e, 0xe4, 0x79, 0x6e, 0x85, 0x81, 0x9f, 0x86, 0x71, 0x93, 0xa4, 0xa9, 0x1f, 0xb4, 0x93,
0xc6, 0x99, 0xa3, 0xc3, 0xe5, 0xc5, 0x01, 0x2a, 0x3c, 0xa8, 0x0c, 0xba, 0x07, 0xb3, 0xc9, 0x41,
0xe0, 0xde, 0xf2, 0x03, 0x2f, 0xbc, 0x9b, 0x2c, 0x55, 0x27, 0x5e, 0xb2, 0x4d, 0xc5, 0x4d, 0x2c,
0x3a, 0xcd, 0x1d, 0x9b, 0xa2, 0x86, 0x4f, 0x99, 0x36, 0xa2, 0x5a, 0xd1, 0x53, 0xa6, 0xcd, 0xe8,
0x01, 0x62, 0xed, 0xef, 0x95, 0x61, 0xd6, 0x58, 0xbb, 0x8f, 0xe1, 0x30, 0xe8, 0x66, 0x0e, 0x83,
0x6b, 0xc5, 0xec, 0x39, 0xa3, 0x4e, 0x03, 0x94, 0x42, 0x25, 0x49, 0x9d, 0xb4, 0x9f, 0xb0, 0x7d,
0x65, 0xf6, 0xc2, 0x66, 0x41, 0xf2, 0x18, 0xcf, 0xc6, 0x82, 0x90, 0x58, 0xe1, 0xdf, 0x58, 0xc8,
0x42, 0x6f, 0x40, 0x2d, 0x8c, 0xe8, 0x31, 0x4f, 0x37, 0xb4, 0x29, 0x26, 0x78, 0x7d, 0x12, 0xfb,
0x97, 0xbc, 0x1a, 0xf3, 0x47, 0x87, 0xcb, 0x35, 0xf5, 0x89, 0xb5, 0x14, 0xfb, 0x1f, 0x2c, 0x78,
0xca, 0x50, 0x70, 0x2d, 0x0c, 0x3c, 0x9f, 0xcd, 0xe8, 0x79, 0x98, 0x4a, 0x0f, 0x22, 0xe9, 0x48,
0xa8, 0x31, 0xda, 0x3d, 0x88, 0x08, 0x66, 0x18, 0xea, 0x3a, 0xf4, 0x48, 0x92, 0x38, 0x6d, 0x92,
0x77, 0x1d, 0xb6, 0x38, 0x18, 0x4b, 0x3c, 0x8a, 0x01, 0x75, 0x9d, 0x24, 0xdd, 0x8d, 0x9d, 0x20,
0x61, 0xec, 0x77, 0xfd, 0x1e, 0x11, 0x43, 0xfb, 0x73, 0xe3, 0x19, 0x0a, 0x6d, 0xd1, 0x78, 0xfa,
0xe8, 0x70, 0x19, 0x6d, 0x0e, 0x70, 0xc2, 0x43, 0xb8, 0xdb, 0x6f, 0xc0, 0xd3, 0xc3, 0x4f, 0x17,
0xf4, 0x69, 0xa8, 0x24, 0x24, 0xde, 0x27, 0xb1, 0xe8, 0x9c, 0x9e, 0x0e, 0x06, 0xc5, 0x02, 0x8b,
0x56, 0xa0, 0xa6, 0x96, 0x80, 0xe8, 0xe2, 0xa2, 0x20, 0xad, 0xe9, 0x75, 0xa3, 0x69, 0xec, 0x7f,
0xb6, 0xe0, 0x94, 0x21, 0xf3, 0x31, 0x38, 0x11, 0x7b, 0x59, 0x27, 0xe2, 0x72, 0x31, 0x66, 0x3a,
0xc2, 0x8b, 0xf8, 0x6e, 0x05, 0x16, 0x4d, 0x63, 0x66, 0x7b, 0x02, 0xf3, 0x20, 0x49, 0x14, 0xde,
0xc4, 0x9b, 0x62, 0x38, 0xb5, 0x07, 0xc9, 0xc1, 0x58, 0xe2, 0xa9, 0x4d, 0x45, 0x4e, 0xda, 0x11,
0x63, 0xa9, 0x6c, 0x6a, 0xc7, 0x49, 0x3b, 0x98, 0x61, 0xd0, 0x17, 0x60, 0x21, 0x75, 0xe2, 0x36,
0x49, 0x31, 0xd9, 0xf7, 0x13, 0xb9, 0x0c, 0x6a, 0x8d, 0xa7, 0x05, 0xed, 0xc2, 0x6e, 0x06, 0x8b,
0x73, 0xd4, 0x28, 0x80, 0xa9, 0x0e, 0xe9, 0xf6, 0xc4, 0xe1, 0xb1, 0x53, 0xd0, 0xaa, 0x65, 0x1d,
0xbd, 0x4a, 0xba, 0xbd, 0x46, 0x95, 0xea, 0x4b, 0x7f, 0x61, 0x26, 0x07, 0xfd, 0x96, 0x05, 0xb5,
0xbd, 0x7e, 0x92, 0x86, 0x3d, 0xff, 0x4d, 0xb2, 0x54, 0x65, 0x52, 0x6f, 0x16, 0x29, 0xf5, 0xba,
0x64, 0xce, 0xd7, 0xb0, 0xfa, 0xc4, 0x5a, 0x2c, 0x7a, 0x13, 0x66, 0xf6, 0x92, 0x30, 0x08, 0x08,
0x3d, 0x0e, 0xa8, 0x06, 0xcd, 0x42, 0x35, 0xe0, 0xac, 0x1b, 0xb3, 0x74, 0x4a, 0xc5, 0x07, 0x96,
0x02, 0xd9, 0x00, 0x78, 0x7e, 0x4c, 0xdc, 0x34, 0x8c, 0x0f, 0x96, 0xa0, 0xf8, 0x01, 0x58, 0x97,
0xcc, 0xf9, 0x00, 0xa8, 0x4f, 0xac, 0xc5, 0xa2, 0x7d, 0xa8, 0x44, 0xdd, 0x7e, 0xdb, 0x0f, 0x96,
0x66, 0x99, 0x02, 0xb8, 0x48, 0x05, 0x76, 0x18, 0xe7, 0x06, 0xd0, 0x0d, 0x82, 0xff, 0xc6, 0x42,
0x1a, 0x7a, 0x06, 0xa6, 0xdd, 0x8e, 0x13, 0xa7, 0x4b, 0x73, 0xcc, 0x48, 0xd5, 0xaa, 0x59, 0xa3,
0x40, 0xcc, 0x71, 0xf6, 0xdf, 0x58, 0x70, 0x76, 0x74, 0xaf, 0xf8, 0xf2, 0x71, 0xfb, 0x71, 0xc2,
0xb7, 0xda, 0xaa, 0xb9, 0x7c, 0x18, 0x18, 0x4b, 0x3c, 0xfa, 0x1a, 0xcc, 0xdc, 0x11, 0xf3, 0x5c,
0x2a, 0x7e, 0x9e, 0xaf, 0x89, 0x79, 0x56, 0xf2, 0xaf, 0xc9, 0xb9, 0x16, 0x42, 0xed, 0xef, 0x96,
0xe1, 0xcc, 0xd0, 0x65, 0x81, 0xea, 0x00, 0xfb, 0x4e, 0xb7, 0x4f, 0x2e, 0xfb, 0xd4, 0xb3, 0xe6,
0xb1, 0xc4, 0x02, 0x3d, 0xca, 0x5f, 0x55, 0x50, 0x6c, 0x50, 0xa0, 0xdf, 0x00, 0x88, 0x9c, 0xd8,
0xe9, 0x91, 0x94, 0xc4, 0x72, 0xef, 0xba, 0x3a, 0x41, 0x67, 0xa8, 0x12, 0x3b, 0x92, 0xa1, 0x76,
0x24, 0x14, 0x28, 0xc1, 0x86, 0x3c, 0x1a, 0x39, 0xc4, 0xa4, 0x4b, 0x9c, 0x84, 0xb0, 0x50, 0x39,
0x17, 0x39, 0x60, 0x8d, 0xc2, 0x26, 0x1d, 0x3d, 0x36, 0x58, 0x17, 0x12, 0xb1, 0x27, 0xa9, 0x63,
0x83, 0x75, 0x32, 0xc1, 0x02, 0x8b, 0xde, 0xb1, 0x60, 0xa1, 0xe5, 0x77, 0x89, 0x96, 0x2e, 0x5c,
0xfd, 0xcd, 0x09, 0x7b, 0x78, 0xd9, 0x64, 0xaa, 0xb7, 0xc4, 0x0c, 0x38, 0xc1, 0x39, 0xd9, 0xf6,
0xff, 0x58, 0xb0, 0x34, 0x6a, 0xb2, 0x51, 0x04, 0x33, 0xe4, 0x5e, 0xfa, 0xaa, 0x13, 0xf3, 0x59,
0x9b, 0xcc, 0xa7, 0x15, 0x4c, 0x5f, 0x75, 0x62, 0x6d, 0x44, 0x97, 0x38, 0x77, 0x2c, 0xc5, 0xa0,
0x36, 0x4c, 0xa5, 0x5d, 0xa7, 0x88, 0xa8, 0xd7, 0x10, 0xa7, 0xdd, 0x93, 0xcd, 0xd5, 0x04, 0x33,
0x01, 0xf6, 0x0f, 0x87, 0xf5, 0x5b, 0xec, 0x5f, 0xd4, 0x04, 0x48, 0xb0, 0xef, 0xc7, 0x61, 0xd0,
0x23, 0x41, 0x9a, 0xcf, 0x96, 0x5c, 0xd2, 0x28, 0x6c, 0xd2, 0xa1, 0xdf, 0x1c, 0x62, 0xb7, 0xd7,
0x27, 0xe8, 0x82, 0x50, 0x67, 0x6c, 0xd3, 0xb5, 0xff, 0xb6, 0x3c, 0x64, 0x33, 0x51, 0x87, 0x02,
0xba, 0x00, 0x40, 0xbd, 0x91, 0x9d, 0x98, 0xb4, 0xfc, 0x7b, 0xa2, 0x57, 0x8a, 0xe5, 0xb6, 0xc2,
0x60, 0x83, 0x4a, 0xb6, 0x69, 0xf6, 0x5b, 0xb4, 0x4d, 0x69, 0xb0, 0x0d, 0xc7, 0x60, 0x83, 0x0a,
0xbd, 0x08, 0x15, 0xbf, 0xe7, 0xb4, 0x09, 0x75, 0x8f, 0xe9, 0x5a, 0xff, 0x04, 0x5d, 0x06, 0x1b,
0x0c, 0x72, 0xff, 0x70, 0x79, 0x41, 0x29, 0xc4, 0x40, 0x58, 0xd0, 0xa2, 0x3f, 0xb5, 0x60, 0xce,
0x0d, 0x7b, 0xbd, 0x30, 0xd8, 0x74, 0x6e, 0x93, 0xae, 0x0c, 0xc1, 0xdb, 0x8f, 0xe4, 0xbc, 0xac,
0xaf, 0x19, 0x92, 0x2e, 0x05, 0x69, 0x7c, 0xa0, 0xb3, 0x0a, 0x26, 0x0a, 0x67, 0x54, 0xa2, 0xdb,
0xf1, 0x3e, 0x89, 0x99, 0xe7, 0x31, 0x9d, 0xf5, 0x66, 0x5e, 0xe5, 0x60, 0x2c, 0xf1, 0x67, 0x5f,
0x86, 0xc5, 0x01, 0x19, 0xe8, 0x34, 0x94, 0xf7, 0xc8, 0x01, 0x1f, 0x7a, 0x4c, 0x7f, 0xa2, 0xa7,
0x60, 0x9a, 0x6d, 0x0c, 0x7c, 0x68, 0x31, 0xff, 0xf8, 0x7c, 0xe9, 0xa2, 0x65, 0xff, 0x91, 0x05,
0x1f, 0x1b, 0x71, 0xdc, 0x50, 0x57, 0x29, 0xd0, 0x79, 0x3c, 0x65, 0xdf, 0x6c, 0x57, 0x62, 0x18,
0xf4, 0x15, 0x28, 0x93, 0x60, 0x5f, 0x18, 0xe1, 0xda, 0x04, 0x63, 0x78, 0x29, 0xd8, 0xe7, 0xe3,
0x33, 0x73, 0x74, 0xb8, 0x5c, 0xbe, 0x14, 0xec, 0x63, 0xca, 0xd8, 0x7e, 0xbb, 0x92, 0x71, 0x66,
0x9b, 0x32, 0x2c, 0x62, 0x5a, 0x0a, 0x57, 0x76, 0xb3, 0xc8, 0xa9, 0x33, 0xfc, 0x70, 0x9e, 0x74,
0x12, 0xb2, 0xd0, 0x37, 0x2d, 0x96, 0xea, 0x91, 0xfe, 0xbb, 0x38, 0xfc, 0x1e, 0x41, 0xda, 0xc9,
0xcc, 0x1e, 0x49, 0x20, 0x36, 0x45, 0x53, 0xf3, 0x88, 0x78, 0xd6, 0x47, 0x1c, 0x1b, 0xca, 0x3c,
0x64, 0x32, 0x48, 0xe2, 0x51, 0x1f, 0x80, 0xc6, 0xf1, 0x3b, 0x61, 0xd7, 0x77, 0x0f, 0x44, 0x34,
0x37, 0x69, 0xc6, 0x80, 0x33, 0xe3, 0x47, 0xab, 0xfe, 0xc6, 0x86, 0x20, 0xf4, 0x6d, 0x0b, 0x16,
0xfd, 0x76, 0x10, 0xc6, 0x64, 0xdd, 0x6f, 0xb5, 0x48, 0x4c, 0x02, 0x97, 0xc8, 0x03, 0x68, 0x77,
0x02, 0xf1, 0x32, 0x07, 0xb0, 0x91, 0xe7, 0xdd, 0xf8, 0xb8, 0x18, 0x82, 0xc5, 0x01, 0x14, 0x1e,
0xd4, 0x04, 0x39, 0x30, 0xe5, 0x07, 0xad, 0x50, 0xe4, 0x9a, 0x5e, 0x9e, 0x40, 0xa3, 0x8d, 0xa0,
0x15, 0xea, 0x95, 0x41, 0xbf, 0x30, 0x63, 0x8d, 0x36, 0xe1, 0xa9, 0x58, 0x04, 0x04, 0x57, 0xfd,
0x84, 0x7a, 0x59, 0x9b, 0x7e, 0xcf, 0x4f, 0x59, 0x50, 0x50, 0x6e, 0x2c, 0x1d, 0x1d, 0x2e, 0x3f,
0x85, 0x87, 0xe0, 0xf1, 0xd0, 0x56, 0xf6, 0x7f, 0x57, 0xb3, 0x51, 0x0f, 0x0f, 0xd5, 0xdf, 0x84,
0x5a, 0xac, 0x52, 0x55, 0xfc, 0xe8, 0xdc, 0x28, 0x60, 0x74, 0x45, 0x82, 0x40, 0x85, 0x99, 0x3a,
0x29, 0xa5, 0xc5, 0xd1, 0x23, 0x94, 0x4e, 0xb8, 0x58, 0x07, 0x93, 0xda, 0x94, 0x10, 0xa9, 0xb3,
0x20, 0x07, 0x81, 0x8b, 0x99, 0x00, 0x14, 0x42, 0xa5, 0x43, 0x9c, 0x6e, 0xda, 0x11, 0xa1, 0xfa,
0x95, 0x89, 0x1c, 0x18, 0xca, 0x28, 0x9f, 0x00, 0xe1, 0x50, 0x2c, 0xc4, 0xa0, 0x3e, 0xcc, 0x74,
0xf8, 0xd8, 0x8b, 0xb3, 0xe1, 0xda, 0x44, 0x63, 0x9a, 0x99, 0x4d, 0xbd, 0x54, 0x05, 0x00, 0x4b,
0x59, 0xe8, 0xb7, 0x2d, 0x00, 0x57, 0x66, 0x3e, 0xe4, 0x62, 0xb9, 0x51, 0xcc, 0xfe, 0xa2, 0x32,
0x2a, 0xfa, 0x50, 0x55, 0xa0, 0x04, 0x1b, 0x62, 0xd1, 0xeb, 0x30, 0x17, 0x13, 0x37, 0x0c, 0x5c,
0xbf, 0x4b, 0xbc, 0xd5, 0x74, 0xa9, 0x72, 0xe2, 0xf4, 0xc8, 0x69, 0x7a, 0xb8, 0x61, 0x83, 0x07,
0xce, 0x70, 0x44, 0x6f, 0x5b, 0xb0, 0xa0, 0x52, 0x3f, 0x74, 0x2a, 0x88, 0x08, 0x94, 0x37, 0x8a,
0xc8, 0x32, 0x31, 0x86, 0x0d, 0x44, 0x5d, 0xd2, 0x2c, 0x0c, 0xe7, 0x84, 0xa2, 0xd7, 0x00, 0xc2,
0xdb, 0x2c, 0xc9, 0x42, 0xfb, 0x59, 0x3d, 0x71, 0x3f, 0x17, 0x78, 0x96, 0x50, 0x72, 0xc0, 0x06,
0x37, 0x74, 0x1d, 0x80, 0xaf, 0x93, 0xdd, 0x83, 0x88, 0xb0, 0x78, 0xb8, 0xd6, 0xf8, 0xac, 0x1c,
0xf9, 0xa6, 0xc2, 0xdc, 0x3f, 0x5c, 0x1e, 0x8c, 0x65, 0x58, 0x72, 0xcb, 0x68, 0x8e, 0xee, 0xc1,
0x4c, 0xd2, 0xef, 0xf5, 0x1c, 0x15, 0xda, 0x6e, 0x15, 0x74, 0xe0, 0x71, 0xa6, 0xda, 0x24, 0x05,
0x00, 0x4b, 0x71, 0x76, 0x00, 0x68, 0x90, 0x1e, 0xbd, 0x08, 0x73, 0xe4, 0x5e, 0x4a, 0xe2, 0xc0,
0xe9, 0xde, 0xc4, 0x9b, 0x32, 0xd2, 0x62, 0xd3, 0x7e, 0xc9, 0x80, 0xe3, 0x0c, 0x15, 0xb2, 0x95,
0xb7, 0x56, 0x62, 0xf4, 0xa0, 0xbd, 0x35, 0xe9, 0x9b, 0xd9, 0xbf, 0x53, 0xca, 0x9c, 0xf6, 0xbb,
0x31, 0x21, 0xa8, 0x0b, 0xd3, 0x41, 0xe8, 0xa9, 0xfd, 0xed, 0x4a, 0x01, 0xfb, 0xdb, 0x76, 0xe8,
0x19, 0x77, 0x25, 0xf4, 0x2b, 0xc1, 0x5c, 0x08, 0xfa, 0x86, 0x05, 0xf3, 0x32, 0xf1, 0xce, 0x10,
0xc2, 0xb5, 0x29, 0x4c, 0xec, 0x19, 0x21, 0x76, 0xfe, 0x86, 0x29, 0x05, 0x67, 0x85, 0xda, 0x3f,
0xb2, 0x32, 0x41, 0xee, 0x2d, 0x27, 0x75, 0x3b, 0x97, 0xf6, 0xa9, 0xf3, 0x7f, 0x3d, 0x93, 0x11,
0xfd, 0x25, 0x33, 0x23, 0x7a, 0xff, 0x70, 0xf9, 0x33, 0xa3, 0x2e, 0x72, 0xef, 0x52, 0x0e, 0x75,
0xc6, 0xc2, 0x48, 0x9e, 0x7e, 0x15, 0x66, 0x0d, 0x8d, 0xc5, 0x56, 0x5e, 0x54, 0xfa, 0x4e, 0xf9,
0x31, 0x06, 0x10, 0x9b, 0xf2, 0xec, 0xf7, 0xca, 0x30, 0x23, 0xee, 0x8f, 0xc6, 0x4e, 0x87, 0x4a,
0x97, 0xb4, 0x34, 0xd2, 0x25, 0x8d, 0xa0, 0xe2, 0xb2, 0xdb, 0x68, 0x71, 0x5e, 0x4c, 0x12, 0xd2,
0x0b, 0xed, 0xf8, 0xed, 0xb6, 0xd6, 0x89, 0x7f, 0x63, 0x21, 0x07, 0xbd, 0x6b, 0xc1, 0x29, 0x97,
0xc6, 0x50, 0xae, 0xde, 0xd2, 0xa6, 0x26, 0xbe, 0x21, 0x58, 0xcb, 0x72, 0x6c, 0x7c, 0x4c, 0x48,
0x3f, 0x95, 0x43, 0xe0, 0xbc, 0x6c, 0xf4, 0x12, 0xcc, 0xf3, 0xd1, 0x7a, 0x35, 0x13, 0x44, 0x28,
0xd3, 0x6b, 0x9a, 0x48, 0x9c, 0xa5, 0x45, 0x75, 0x1e, 0x89, 0xb1, 0x5c, 0x72, 0xc2, 0x1c, 0x24,
0x91, 0x45, 0x51, 0xc9, 0xe6, 0x04, 0x1b, 0x14, 0xf6, 0x5f, 0x96, 0x61, 0x3e, 0x33, 0x4c, 0xe8,
0x39, 0xa8, 0xf6, 0x13, 0xba, 0xf0, 0x55, 0xe4, 0xa0, 0x92, 0xc7, 0x37, 0x05, 0x1c, 0x2b, 0x0a,
0x4a, 0x1d, 0x39, 0x49, 0x72, 0x37, 0x8c, 0x3d, 0x31, 0xa9, 0x8a, 0x7a, 0x47, 0xc0, 0xb1, 0xa2,
0xa0, 0x21, 0xf3, 0x6d, 0xe2, 0xc4, 0x24, 0xde, 0x0d, 0xf7, 0xc8, 0xc0, 0x7d, 0x6b, 0x43, 0xa3,
0xb0, 0x49, 0xc7, 0x66, 0x28, 0xed, 0x26, 0x6b, 0x5d, 0x9f, 0x04, 0x29, 0x57, 0xb3, 0x80, 0x19,
0xda, 0xdd, 0x6c, 0x9a, 0x1c, 0xf5, 0x0c, 0xe5, 0x10, 0x38, 0x2f, 0x1b, 0x7d, 0xdd, 0x82, 0x79,
0xe7, 0x6e, 0xa2, 0x2b, 0x27, 0xd8, 0x14, 0x4d, 0x66, 0xab, 0x99, 0x4a, 0x8c, 0xc6, 0x22, 0x9d,
0xe8, 0x0c, 0x08, 0x67, 0x25, 0xda, 0x1f, 0x58, 0x20, 0x2b, 0x32, 0x1e, 0xc3, 0x1d, 0x41, 0x3b,
0x7b, 0x47, 0xd0, 0x98, 0x7c, 0x51, 0x8e, 0xb8, 0x1f, 0xd8, 0x86, 0x19, 0x1a, 0x10, 0x3b, 0x81,
0x87, 0x3e, 0x05, 0x33, 0x2e, 0xff, 0x29, 0xce, 0x28, 0x96, 0x3d, 0x16, 0x58, 0x2c, 0x71, 0xe8,
0x13, 0x30, 0xe5, 0xc4, 0x6d, 0x79, 0x2e, 0xb1, 0xe4, 0xfa, 0x6a, 0xdc, 0x4e, 0x30, 0x83, 0xda,
0xef, 0x96, 0x00, 0xd6, 0xc2, 0x5e, 0xe4, 0xc4, 0xc4, 0xdb, 0x0d, 0xff, 0xdf, 0x07, 0x9f, 0xf6,
0x3b, 0x16, 0x20, 0x3a, 0x1e, 0x61, 0x40, 0x02, 0x9d, 0x33, 0x42, 0x2b, 0x50, 0x73, 0x25, 0x54,
0xac, 0x7a, 0x15, 0x3f, 0x28, 0x72, 0xac, 0x69, 0xc6, 0xd8, 0xc8, 0x9f, 0x91, 0x39, 0x8b, 0x72,
0x36, 0xb1, 0xcd, 0x32, 0x9d, 0x22, 0x85, 0x61, 0xff, 0x5e, 0x09, 0x9e, 0xe6, 0x06, 0xbd, 0xe5,
0x04, 0x4e, 0x9b, 0xf4, 0xa8, 0x56, 0xe3, 0x66, 0x2f, 0x5e, 0xa7, 0x61, 0xa0, 0x2f, 0x13, 0xd9,
0x13, 0xd9, 0x24, 0xb7, 0x25, 0x6e, 0x3d, 0x1b, 0x81, 0x9f, 0x62, 0xc6, 0x19, 0x45, 0x50, 0x95,
0x45, 0x53, 0xe2, 0x38, 0x2a, 0x42, 0x8a, 0x5a, 0x68, 0x57, 0x04, 0x6f, 0xac, 0xa4, 0xd8, 0xef,
0x59, 0x90, 0x3f, 0x21, 0xd8, 0xe1, 0xca, 0x2f, 0x92, 0xf3, 0x87, 0x6b, 0xf6, 0xea, 0xf7, 0x04,
0x97, 0xa9, 0x5f, 0x86, 0x59, 0x27, 0x4d, 0x49, 0x2f, 0x4a, 0x99, 0xfb, 0x5c, 0x7e, 0x38, 0xf7,
0x79, 0x2b, 0xf4, 0xfc, 0x96, 0xcf, 0xdc, 0x67, 0x93, 0x9d, 0xfd, 0x0a, 0x54, 0x65, 0x42, 0x68,
0x8c, 0x69, 0x7c, 0x26, 0x93, 0xdc, 0x1a, 0x61, 0x28, 0x7f, 0x66, 0xc1, 0x9c, 0x19, 0xfe, 0xa1,
0x76, 0x6e, 0x50, 0x6e, 0x64, 0x07, 0xe5, 0xfe, 0xe1, 0xf2, 0xaf, 0x0c, 0x2b, 0x2b, 0x6c, 0xfb,
0x69, 0x18, 0x25, 0xcf, 0x93, 0xa0, 0xed, 0x07, 0x84, 0xf9, 0x56, 0x3c, 0x6c, 0xcc, 0xc4, 0x96,
0x6b, 0xa1, 0x47, 0x1e, 0x62, 0x54, 0xed, 0x5b, 0xb0, 0x38, 0x90, 0x63, 0x1f, 0x63, 0x00, 0x8e,
0xbd, 0xd2, 0xb4, 0xdf, 0xb5, 0x60, 0x3e, 0x73, 0x3f, 0x51, 0xd0, 0xb0, 0xd2, 0x03, 0xb9, 0x15,
0xb2, 0x9c, 0x41, 0xec, 0x07, 0xdc, 0xe5, 0xaa, 0xea, 0x5d, 0xe4, 0xb2, 0x46, 0x61, 0x93, 0xce,
0xde, 0x02, 0x96, 0x2b, 0x29, 0x6a, 0x72, 0x5f, 0x81, 0x2a, 0x65, 0x47, 0x0f, 0x82, 0xa2, 0x58,
0x86, 0x50, 0xbd, 0x76, 0x6b, 0x97, 0xbb, 0x0f, 0x36, 0x94, 0x7d, 0x87, 0x6f, 0x6b, 0x65, 0xbd,
0xf8, 0x36, 0x92, 0xa4, 0xcf, 0x4c, 0x97, 0x22, 0xd1, 0x33, 0x50, 0x26, 0xf7, 0x22, 0xc6, 0xb2,
0xac, 0xb7, 0xbe, 0x4b, 0xf7, 0x22, 0x3f, 0x26, 0x09, 0x25, 0x22, 0xf7, 0x22, 0x74, 0x16, 0x4a,
0xbe, 0x27, 0xf6, 0x33, 0x10, 0x34, 0xa5, 0x8d, 0x75, 0x5c, 0xf2, 0x3d, 0xbb, 0x0f, 0xa0, 0x2f,
0x13, 0x8a, 0x9a, 0x9e, 0xf3, 0x30, 0xe5, 0x86, 0x1e, 0x11, 0xf3, 0xa2, 0xd8, 0x30, 0xfb, 0x64,
0x18, 0xfb, 0x16, 0x2c, 0x5c, 0x0f, 0xc2, 0xbb, 0x01, 0x0d, 0x0b, 0x2e, 0xfb, 0xa4, 0xeb, 0x51,
0xc6, 0x2d, 0xfa, 0x43, 0xc8, 0x56, 0x8c, 0x19, 0x16, 0x73, 0x9c, 0xaa, 0xcc, 0x28, 0x8d, 0xaa,
0xcc, 0xb0, 0xbf, 0x65, 0xc1, 0xe9, 0xfc, 0xd5, 0xc2, 0x4f, 0xec, 0x98, 0x78, 0x8b, 0x2a, 0x23,
0xb3, 0xf2, 0x37, 0x22, 0x9e, 0xeb, 0xb8, 0x08, 0x73, 0xb7, 0xfb, 0x7e, 0xd7, 0x13, 0xdf, 0x42,
0x1f, 0x95, 0xa0, 0x6f, 0x18, 0x38, 0x9c, 0xa1, 0x44, 0x17, 0x00, 0x6e, 0xfb, 0x81, 0x13, 0x1f,
0xec, 0xe8, 0x65, 0xa7, 0x32, 0x2b, 0x0d, 0x85, 0xc1, 0x06, 0x95, 0x7d, 0xdf, 0x02, 0x5d, 0xfd,
0x82, 0x5a, 0x22, 0x7d, 0x66, 0x4d, 0xec, 0xf7, 0x35, 0x0f, 0x02, 0x57, 0x17, 0xd9, 0x54, 0x73,
0xd9, 0xb3, 0x6f, 0x58, 0x30, 0x4b, 0x4f, 0x22, 0xdf, 0x49, 0x89, 0xd7, 0x38, 0x10, 0x47, 0xdd,
0x56, 0x11, 0xa9, 0x96, 0x0d, 0xce, 0x36, 0x8c, 0xf5, 0x7a, 0xdf, 0xd0, 0x92, 0xb0, 0x29, 0xd6,
0x4e, 0x00, 0x0d, 0xb6, 0x3b, 0x61, 0xa4, 0xb0, 0x02, 0x35, 0xa7, 0x9f, 0x86, 0x3d, 0xca, 0x92,
0xf5, 0xa3, 0xaa, 0x6d, 0x67, 0x55, 0x22, 0xb0, 0xa6, 0xb1, 0x3f, 0x98, 0x82, 0x5c, 0x12, 0x08,
0xf5, 0xcd, 0xe2, 0x26, 0xab, 0xc0, 0xe2, 0x26, 0xa5, 0xc9, 0xb0, 0x02, 0x27, 0xea, 0xfd, 0x46,
0x1d, 0x27, 0x91, 0x66, 0xfc, 0x8a, 0xb4, 0xd1, 0x1d, 0x0a, 0xbc, 0x7f, 0xb8, 0xfc, 0xc5, 0xf1,
0x4e, 0x1a, 0x3a, 0xa3, 0x2b, 0xfc, 0xa6, 0x48, 0x8b, 0x66, 0x3c, 0x30, 0xe7, 0x6f, 0x9e, 0x35,
0xe5, 0x63, 0x4e, 0xf0, 0xaf, 0xf1, 0xab, 0x01, 0x4c, 0x92, 0x7e, 0x37, 0x15, 0xd1, 0xd0, 0x76,
0x51, 0x76, 0xc8, 0xb9, 0xea, 0x3b, 0x02, 0xfe, 0x8d, 0x0d, 0x89, 0xe8, 0x4b, 0x50, 0x4b, 0x52,
0x27, 0x4e, 0x1f, 0x32, 0xcd, 0xa8, 0x06, 0xbc, 0x29, 0x99, 0x60, 0xcd, 0x0f, 0xbd, 0x06, 0xd0,
0xf2, 0x03, 0x3f, 0xe9, 0x30, 0xee, 0x33, 0x0f, 0xe7, 0x9d, 0x5c, 0x56, 0x1c, 0xb0, 0xc1, 0xcd,
0xfe, 0x22, 0x9c, 0x3f, 0xae, 0xa8, 0x93, 0xc6, 0x14, 0x77, 0x9d, 0x38, 0x10, 0xd5, 0x14, 0x6c,
0x51, 0xde, 0x72, 0xe2, 0x00, 0x33, 0xa8, 0xfd, 0x9d, 0x12, 0xcc, 0x1a, 0x75, 0xbb, 0x63, 0x6c,
0xf6, 0xb9, 0x3a, 0xe3, 0xd2, 0x98, 0x75, 0xc6, 0xcf, 0x42, 0x35, 0x0a, 0xbb, 0xbe, 0xeb, 0xab,
0x4b, 0xd2, 0x39, 0x16, 0x58, 0x0b, 0x18, 0x56, 0x58, 0x94, 0x42, 0xed, 0xce, 0xdd, 0x94, 0x1d,
0x77, 0xf2, 0x4a, 0x74, 0x92, 0xeb, 0x3c, 0x79, 0x74, 0xea, 0x69, 0x92, 0x90, 0x04, 0x6b, 0x41,
0xc8, 0x86, 0x4a, 0x3b, 0x0e, 0xfb, 0x11, 0x4f, 0x77, 0x8b, 0xa4, 0x20, 0x2b, 0x10, 0x4d, 0xb0,
0xc0, 0xd8, 0x3f, 0x2c, 0x41, 0x0d, 0x93, 0x28, 0x5c, 0x8b, 0x89, 0x97, 0xa0, 0x4f, 0x42, 0xb9,
0x1f, 0x77, 0xc5, 0x48, 0xcd, 0x0a, 0xe6, 0xe5, 0x9b, 0x78, 0x13, 0x53, 0x78, 0x66, 0x47, 0x29,
0x9d, 0x28, 0xf7, 0x50, 0x3e, 0x36, 0xf7, 0xf0, 0x12, 0xcc, 0x27, 0x49, 0x67, 0x27, 0xf6, 0xf7,
0x9d, 0x94, 0x5c, 0x27, 0x07, 0xa2, 0x02, 0x43, 0xa7, 0x55, 0x9a, 0x57, 0x35, 0x12, 0x67, 0x69,
0xd1, 0x15, 0x58, 0xd4, 0x49, 0x00, 0x12, 0xa7, 0xeb, 0x34, 0xcc, 0xe6, 0x79, 0x19, 0x75, 0x75,
0xa5, 0xd3, 0x06, 0x82, 0x00, 0x0f, 0xb6, 0x41, 0xeb, 0x70, 0x3a, 0x03, 0xa4, 0x8a, 0x54, 0x18,
0x9f, 0x25, 0xc1, 0xe7, 0x74, 0x86, 0x0f, 0xd5, 0x65, 0xa0, 0x85, 0xfd, 0xa1, 0x05, 0xf3, 0x6a,
0x50, 0x1f, 0x43, 0xf8, 0xef, 0x67, 0xc3, 0xff, 0xf5, 0x89, 0xd2, 0xa9, 0x42, 0xed, 0x11, 0x09,
0x80, 0x3f, 0xae, 0x00, 0xb0, 0xa7, 0x02, 0x3e, 0xbb, 0x56, 0x39, 0x0f, 0x53, 0x31, 0x89, 0xc2,
0xfc, 0xda, 0xa2, 0x14, 0x98, 0x61, 0xfe, 0xef, 0xda, 0xcc, 0xb0, 0xbc, 0xe2, 0xf4, 0x4f, 0x30,
0xaf, 0xd8, 0x84, 0x33, 0x7e, 0x90, 0x10, 0xb7, 0x1f, 0x8b, 0x0b, 0xd8, 0xab, 0x61, 0xa2, 0xec,
0xaf, 0xda, 0xf8, 0xa4, 0x60, 0x74, 0x66, 0x63, 0x18, 0x11, 0x1e, 0xde, 0x96, 0x8e, 0xa7, 0x44,
0xb0, 0x7d, 0xba, 0x6a, 0x38, 0xd8, 0x02, 0x8e, 0x15, 0x05, 0xf5, 0x01, 0x48, 0xe0, 0xdc, 0xee,
0x92, 0xcd, 0x56, 0xc2, 0xee, 0x6c, 0x0c, 0x1f, 0xe0, 0x12, 0x47, 0x5c, 0x6e, 0x62, 0x4d, 0x33,
0x7c, 0xdd, 0xd5, 0x0a, 0x5a, 0x77, 0x70, 0xd2, 0x75, 0xa7, 0xdc, 0xe6, 0xd9, 0x91, 0x05, 0xcd,
0xf2, 0x2c, 0x98, 0x1b, 0x79, 0x16, 0x7c, 0x01, 0x16, 0xfc, 0xa0, 0x43, 0x62, 0x3f, 0x25, 0x1e,
0x5b, 0x08, 0x4b, 0xf3, 0x6c, 0x20, 0x54, 0x2d, 0xd6, 0x46, 0x06, 0x8b, 0x73, 0xd4, 0xf6, 0x37,
0x4b, 0x70, 0x46, 0x2f, 0x10, 0xaa, 0x99, 0xdf, 0xa2, 0x56, 0xc2, 0x2a, 0x77, 0x78, 0x32, 0xd8,
0x78, 0xbd, 0xa5, 0xdc, 0xda, 0xa6, 0xc2, 0x60, 0x83, 0x8a, 0xce, 0x9f, 0x4b, 0x62, 0x76, 0xab,
0x90, 0x5f, 0x3d, 0x6b, 0x02, 0x8e, 0x15, 0x05, 0x7b, 0x20, 0x46, 0xe2, 0xb4, 0xd9, 0xbf, 0xcd,
0x1a, 0xe4, 0xf2, 0xb7, 0x6b, 0x1a, 0x85, 0x4d, 0x3a, 0x7a, 0x8e, 0xb9, 0x72, 0xf2, 0xe8, 0x0a,
0x9a, 0xe3, 0xe7, 0x98, 0x9a, 0x2f, 0x85, 0x95, 0xea, 0xd0, 0x68, 0x50, 0x6c, 0xaf, 0x19, 0x75,
0xd8, 0x05, 0xbd, 0xa2, 0xb0, 0xff, 0xd3, 0x82, 0x8f, 0x0f, 0x1d, 0x8a, 0xc7, 0xb0, 0x25, 0xf6,
0xb3, 0x5b, 0xe2, 0xce, 0x84, 0x5b, 0xe2, 0x40, 0x17, 0x46, 0x6c, 0x8f, 0x7f, 0x6f, 0xc1, 0x82,
0xa6, 0x7f, 0x0c, 0xfd, 0x6c, 0x15, 0xf7, 0xc4, 0x4c, 0xeb, 0xdd, 0xa8, 0x0d, 0x74, 0xec, 0x43,
0xd6, 0x31, 0xee, 0x8f, 0xad, 0xba, 0xf2, 0xf9, 0xc0, 0x31, 0x7e, 0xd5, 0x3e, 0x54, 0x58, 0x61,
0x9b, 0xd4, 0x6e, 0xbb, 0x80, 0x7b, 0x3e, 0x2e, 0x9c, 0xc5, 0xbc, 0x3a, 0xd3, 0xc6, 0x3e, 0x13,
0x2c, 0xa4, 0x51, 0x33, 0xf5, 0xfc, 0x84, 0x6e, 0x52, 0x9e, 0x88, 0xcd, 0xd5, 0x10, 0xae, 0x0b,
0x38, 0x56, 0x14, 0x76, 0x0f, 0x96, 0xb2, 0xcc, 0xd7, 0x49, 0x8b, 0x45, 0x57, 0x63, 0xf5, 0x91,
0xc6, 0x4d, 0xac, 0xd5, 0x66, 0xdf, 0xc9, 0xbf, 0x20, 0x58, 0x95, 0x08, 0xac, 0x69, 0xec, 0x3f,
0xb7, 0xe0, 0xc9, 0x21, 0x9d, 0x29, 0x30, 0x27, 0x91, 0xea, 0xc5, 0x3f, 0xe2, 0x51, 0x87, 0x47,
0x5a, 0x8e, 0x8c, 0x4b, 0x8c, 0x28, 0x66, 0x9d, 0x83, 0xb1, 0xc4, 0xdb, 0xff, 0x6e, 0xc1, 0xa9,
0xac, 0xae, 0x09, 0xba, 0x06, 0x88, 0x77, 0x66, 0xdd, 0x4f, 0xdc, 0x70, 0x9f, 0xc4, 0x07, 0xb4,
0xe7, 0x5c, 0xeb, 0xb3, 0x82, 0x13, 0x5a, 0x1d, 0xa0, 0xc0, 0x43, 0x5a, 0xa1, 0x6f, 0xb1, 0xcc,
0xbb, 0x1c, 0x6d, 0x69, 0x26, 0xcd, 0xc2, 0xcc, 0x44, 0xcf, 0xa4, 0xe9, 0xce, 0x2b, 0x79, 0xd8,
0x14, 0x6e, 0xff, 0xb8, 0x0c, 0x73, 0xb2, 0xf9, 0xba, 0xdf, 0x6a, 0xd1, 0xf1, 0x66, 0x5e, 0x72,
0x3e, 0x55, 0xc3, 0x5c, 0x68, 0xcc, 0x71, 0x74, 0xbc, 0xf7, 0xfc, 0xc0, 0xcb, 0xa7, 0x50, 0xae,
0xfb, 0x81, 0x87, 0x19, 0x26, 0xfb, 0xc6, 0xa4, 0x7c, 0xfc, 0x1b, 0x13, 0x65, 0x09, 0x53, 0x0f,
0x0a, 0x58, 0xf8, 0xab, 0x08, 0xed, 0xb6, 0x18, 0x1b, 0xfd, 0xae, 0x46, 0x61, 0x93, 0x8e, 0x6a,
0xd2, 0xf5, 0xf7, 0x09, 0x6f, 0x54, 0xc9, 0x6a, 0xb2, 0x29, 0x11, 0x58, 0xd3, 0x50, 0x4d, 0x3c,
0xbf, 0xd5, 0x62, 0xae, 0x83, 0xa1, 0x09, 0x1d, 0x1d, 0xcc, 0x30, 0x94, 0xa2, 0x13, 0x86, 0x7b,
0xc2, 0x5b, 0x50, 0x14, 0x57, 0xc3, 0x70, 0x0f, 0x33, 0x0c, 0xda, 0x82, 0x27, 0x83, 0x30, 0xee,
0x39, 0x5d, 0xff, 0x4d, 0xe2, 0x29, 0x29, 0xc2, 0x4b, 0xf8, 0x19, 0xd1, 0xe0, 0xc9, 0xed, 0x41,
0x12, 0x3c, 0xac, 0x1d, 0x35, 0xbf, 0x28, 0x26, 0x9e, 0xef, 0xa6, 0x26, 0x37, 0xc8, 0x9a, 0xdf,
0xce, 0x00, 0x05, 0x1e, 0xd2, 0xca, 0xfe, 0x0f, 0x76, 0x40, 0x8d, 0x28, 0x7a, 0x2b, 0x6a, 0xfa,
0xe5, 0x6c, 0x96, 0x1f, 0xb4, 0x85, 0x68, 0x03, 0x99, 0x1a, 0xc3, 0x40, 0x5e, 0x84, 0xb9, 0x3b,
0x49, 0x18, 0xec, 0x84, 0x7e, 0xa0, 0x6a, 0xcf, 0x45, 0x8d, 0xc8, 0xb5, 0xe6, 0x8d, 0x6d, 0x09,
0xc7, 0x19, 0x2a, 0xfb, 0xbd, 0x69, 0x78, 0x5a, 0x55, 0x4b, 0x90, 0xf4, 0x6e, 0x18, 0xef, 0xf9,
0x41, 0x9b, 0x25, 0x8a, 0xbf, 0x6d, 0xc1, 0x1c, 0x37, 0x14, 0x51, 0xb6, 0xcb, 0xcb, 0x41, 0xdc,
0x22, 0xea, 0x32, 0x32, 0x92, 0xea, 0xbb, 0x86, 0x94, 0x5c, 0xc9, 0xae, 0x89, 0xc2, 0x19, 0x75,
0xd0, 0x9b, 0x00, 0xf2, 0x15, 0x50, 0xab, 0x88, 0x87, 0x50, 0x52, 0x39, 0x4c, 0x5a, 0xda, 0x05,
0xdb, 0x55, 0x12, 0xb0, 0x21, 0x0d, 0xbd, 0x6d, 0x41, 0xa5, 0xcb, 0x47, 0xa5, 0xcc, 0x04, 0xff,
0x6a, 0xf1, 0xa3, 0x62, 0x8e, 0x87, 0x3a, 0xd4, 0xc4, 0x48, 0x08, 0xe1, 0x08, 0xc3, 0x8c, 0x1f,
0xb4, 0x63, 0x92, 0xc8, 0x0c, 0xc2, 0x67, 0x0c, 0x37, 0xa2, 0xee, 0x86, 0x31, 0x61, 0x4e, 0x43,
0xe8, 0x78, 0x0d, 0xa7, 0xeb, 0x04, 0x2e, 0x89, 0x37, 0x38, 0xb9, 0xde, 0xdf, 0x05, 0x00, 0x4b,
0x46, 0x03, 0xc5, 0x46, 0xd3, 0xe3, 0x14, 0x1b, 0x9d, 0x7d, 0x19, 0x16, 0x07, 0xa6, 0xf1, 0x24,
0x55, 0xd1, 0x67, 0x3f, 0x07, 0xb3, 0x0f, 0x5b, 0x50, 0xfd, 0xc1, 0xb4, 0xde, 0xa4, 0xb7, 0x43,
0x8f, 0x55, 0xd9, 0xc4, 0x7a, 0x36, 0x85, 0x87, 0x55, 0x94, 0x6d, 0x18, 0x2f, 0x46, 0x14, 0x10,
0x9b, 0xf2, 0xa8, 0x65, 0x46, 0x4e, 0x4c, 0x82, 0x47, 0x6a, 0x99, 0x3b, 0x4a, 0x02, 0x36, 0xa4,
0x21, 0x22, 0xea, 0x6c, 0xcb, 0x13, 0x27, 0x94, 0xe4, 0xf5, 0xce, 0xd0, 0x5a, 0xdb, 0x77, 0x2d,
0x58, 0x08, 0x32, 0xf6, 0x2a, 0xf2, 0x99, 0xaf, 0x14, 0xbe, 0x10, 0x78, 0x69, 0x61, 0x16, 0x86,
0x73, 0xc2, 0xd1, 0x2a, 0x9c, 0x92, 0x33, 0x90, 0x2d, 0xc1, 0x51, 0xb1, 0x36, 0xce, 0xa2, 0x71,
0x9e, 0xde, 0x28, 0x97, 0xab, 0x8c, 0x2a, 0x97, 0x43, 0x7b, 0xaa, 0x32, 0x76, 0xa6, 0xd8, 0xca,
0x58, 0x18, 0xac, 0x8a, 0xb5, 0xbf, 0x57, 0x82, 0xd3, 0x52, 0xeb, 0x1b, 0xfb, 0x24, 0x8e, 0x7d,
0x8f, 0x9d, 0x0b, 0x1c, 0xad, 0x1d, 0x2c, 0x75, 0x2e, 0x5c, 0x95, 0x08, 0xac, 0x69, 0xa8, 0x67,
0xc7, 0x9d, 0xac, 0x24, 0x9f, 0x9f, 0x16, 0xce, 0x1b, 0x96, 0x78, 0x1a, 0xb9, 0x0f, 0x96, 0x90,
0x97, 0xb2, 0x91, 0xfb, 0x58, 0xc5, 0xde, 0xef, 0x58, 0x70, 0x6a, 0x2f, 0x73, 0xc5, 0x25, 0xf7,
0xa7, 0x49, 0x2a, 0x4e, 0xb3, 0x97, 0x66, 0x7a, 0x66, 0xb3, 0xf0, 0x04, 0xe7, 0x45, 0xdb, 0xff,
0x65, 0x81, 0xb9, 0x58, 0xc7, 0x3b, 0xc4, 0x8d, 0x17, 0x21, 0xa5, 0x07, 0xbf, 0x08, 0x51, 0xe7,
0x7d, 0x79, 0x3c, 0x77, 0x6f, 0xea, 0x04, 0xee, 0xde, 0xf4, 0x48, 0x07, 0xe1, 0x93, 0x50, 0xee,
0xfb, 0x9e, 0xf0, 0xd8, 0x74, 0x5a, 0x76, 0x63, 0x1d, 0x53, 0xb8, 0xfd, 0x57, 0xd3, 0x3a, 0x36,
0x13, 0xe9, 0xff, 0x9f, 0x8a, 0x6e, 0xb7, 0x54, 0x0d, 0x01, 0xef, 0xf9, 0xf6, 0x40, 0x0d, 0xc1,
0x2f, 0x9f, 0xfc, 0x66, 0x87, 0x0f, 0xd0, 0xa8, 0x12, 0x82, 0x99, 0x63, 0xae, 0x75, 0xee, 0x40,
0x95, 0x3a, 0xb5, 0x2c, 0xbd, 0x52, 0xcd, 0x28, 0x55, 0xbd, 0x2a, 0xe0, 0xf7, 0x0f, 0x97, 0x3f,
0x7f, 0x72, 0xb5, 0x64, 0x6b, 0xac, 0xf8, 0xa3, 0x04, 0x6a, 0xf4, 0x37, 0xbb, 0x81, 0x12, 0xee,
0xf2, 0x4d, 0xb5, 0xfc, 0x25, 0xa2, 0x90, 0xeb, 0x2d, 0x2d, 0x07, 0x05, 0x50, 0x63, 0x2f, 0x4d,
0x98, 0x50, 0xee, 0x55, 0xef, 0xa8, 0xbb, 0x20, 0x89, 0xb8, 0x7f, 0xb8, 0xfc, 0xd2, 0xc9, 0x85,
0xaa, 0xe6, 0x58, 0x8b, 0xb0, 0x3f, 0x2a, 0x6b, 0xdb, 0x15, 0xa5, 0x23, 0x3f, 0x15, 0xb6, 0x7b,
0x31, 0x67, 0xbb, 0xe7, 0x07, 0x6c, 0x77, 0x41, 0xbf, 0xcc, 0xc8, 0x58, 0xe3, 0xe3, 0x3c, 0x77,
0xc6, 0x08, 0xdf, 0xd8, 0x69, 0xfb, 0x46, 0xdf, 0x8f, 0x49, 0xb2, 0x13, 0xf7, 0x03, 0x3f, 0x68,
0x33, 0x5b, 0xac, 0x9a, 0xa7, 0x6d, 0x06, 0x8d, 0xf3, 0xf4, 0xf6, 0x5f, 0x94, 0xe0, 0x54, 0xee,
0xa5, 0x06, 0x7a, 0x0e, 0xaa, 0xf2, 0x29, 0x4e, 0x3e, 0xb1, 0xa9, 0x5e, 0xfe, 0x2b, 0x0a, 0xf4,
0x15, 0x00, 0x8f, 0x44, 0xdd, 0xf0, 0x80, 0x5d, 0x38, 0x4e, 0x9d, 0xf8, 0xc2, 0x51, 0x79, 0x52,
0xeb, 0x8a, 0x0b, 0x36, 0x38, 0x8a, 0xca, 0x91, 0x69, 0x56, 0x5d, 0x92, 0xab, 0x1c, 0x31, 0x6a,
0x12, 0x2b, 0x8f, 0xaf, 0x26, 0xd1, 0xfe, 0x3b, 0x8b, 0x3a, 0x04, 0xbc, 0xfb, 0x5b, 0x32, 0xd9,
0xf7, 0x69, 0xa8, 0x38, 0xfd, 0xb4, 0x13, 0x0e, 0x94, 0x71, 0xaf, 0x32, 0x28, 0x16, 0x58, 0xb4,
0x09, 0x53, 0x1e, 0x8d, 0x8a, 0x4b, 0x27, 0x1e, 0x28, 0x1d, 0xe2, 0xd3, 0x98, 0x99, 0x71, 0x41,
0x9f, 0x80, 0xa9, 0xd4, 0x69, 0xcb, 0x2b, 0x4e, 0x76, 0xdb, 0xba, 0xeb, 0xb4, 0x13, 0xcc, 0xa0,
0xe6, 0xe6, 0x39, 0x75, 0x4c, 0xfd, 0xd5, 0xbf, 0x4c, 0xc1, 0x7c, 0xe6, 0x1e, 0x3b, 0x63, 0x05,
0xd6, 0xb1, 0x56, 0xf0, 0x0c, 0x4c, 0x47, 0x71, 0x3f, 0x20, 0xa2, 0x3c, 0x41, 0x6d, 0x0c, 0xd4,
0xce, 0x08, 0xe6, 0x38, 0x3a, 0x46, 0x5e, 0x7c, 0x80, 0xfb, 0x81, 0xc8, 0xfc, 0xa9, 0x31, 0x5a,
0x67, 0x50, 0x2c, 0xb0, 0xe8, 0xab, 0x30, 0x97, 0xb0, 0x05, 0x18, 0x3b, 0x29, 0x69, 0xcb, 0xd7,
0x7b, 0x57, 0x26, 0x7e, 0x69, 0xc5, 0xd9, 0xf1, 0x18, 0xca, 0x84, 0xe0, 0x8c, 0x38, 0xf4, 0x75,
0xcb, 0x7c, 0x5d, 0x56, 0x99, 0x38, 0x49, 0x9d, 0xaf, 0x0f, 0xe0, 0xd6, 0xf5, 0xe0, 0x47, 0x66,
0x91, 0xb2, 0xec, 0x99, 0x47, 0x60, 0xd9, 0x30, 0xa4, 0xd2, 0xf6, 0xb3, 0x50, 0xeb, 0x39, 0x81,
0xdf, 0x22, 0x49, 0xca, 0xff, 0x61, 0xa9, 0xc6, 0xff, 0xf2, 0x61, 0x4b, 0x02, 0xb1, 0xc6, 0xb3,
0xbf, 0x2f, 0x63, 0xbd, 0xe2, 0x1e, 0x6d, 0xcd, 0xf8, 0xfb, 0x32, 0x0d, 0xc6, 0x26, 0x8d, 0xfd,
0x96, 0x05, 0x67, 0x86, 0x8e, 0xc4, 0x63, 0x4b, 0xe6, 0xd0, 0xcd, 0xee, 0xc9, 0x21, 0xc5, 0x1a,
0x68, 0xff, 0xd1, 0xbc, 0x26, 0x14, 0xa5, 0x20, 0xf3, 0x23, 0x27, 0xf9, 0x64, 0x1b, 0xad, 0xde,
0xec, 0xca, 0x8f, 0x71, 0xb3, 0xfb, 0x6b, 0x0b, 0x8c, 0xb7, 0xae, 0xe8, 0xd7, 0xcd, 0x52, 0x24,
0xab, 0x90, 0xd2, 0x19, 0xce, 0x59, 0xd5, 0x31, 0xf1, 0xf1, 0x1a, 0x56, 0xd6, 0x94, 0xb7, 0xba,
0xd2, 0x18, 0x56, 0xd7, 0xe1, 0x33, 0x9e, 0x93, 0xa1, 0xb7, 0x2b, 0xeb, 0x01, 0xdb, 0xd5, 0x73,
0x50, 0x4d, 0x48, 0xb7, 0x45, 0x8f, 0x65, 0xb1, 0xad, 0xa9, 0xe9, 0x69, 0x0a, 0x38, 0x56, 0x14,
0xf6, 0x8f, 0xc5, 0x40, 0x09, 0x4f, 0xe9, 0x62, 0xae, 0xc8, 0x76, 0x7c, 0x27, 0xe3, 0x00, 0xc0,
0x55, 0x65, 0xf7, 0x05, 0xbc, 0x32, 0xd5, 0x35, 0xfc, 0xe6, 0x1b, 0x48, 0x09, 0xc3, 0x86, 0xb0,
0x8c, 0x41, 0x96, 0x8f, 0x33, 0x48, 0xfb, 0xdf, 0x2c, 0xc8, 0x6c, 0xa3, 0xa8, 0x07, 0xd3, 0x54,
0x83, 0x83, 0x02, 0x5e, 0x08, 0x98, 0x7c, 0xa9, 0xb1, 0x8a, 0x7b, 0x2f, 0xf6, 0x13, 0x73, 0x29,
0xc8, 0x17, 0x0e, 0x12, 0x1f, 0xa2, 0xeb, 0x05, 0x49, 0xa3, 0xfe, 0x95, 0xf8, 0xa3, 0x21, 0xe5,
0x69, 0xd9, 0x17, 0x61, 0x71, 0x40, 0x23, 0x56, 0x2e, 0x1a, 0xca, 0x07, 0x11, 0x86, 0x11, 0xb1,
0xda, 0x5f, 0xcc, 0x71, 0xf6, 0x77, 0x2c, 0x38, 0x9d, 0x67, 0x8f, 0xfe, 0xd0, 0x82, 0xc5, 0x24,
0xcf, 0xef, 0x91, 0x8c, 0x9a, 0x4a, 0x18, 0x0c, 0xa0, 0xf0, 0xa0, 0x06, 0xf6, 0xf7, 0x4b, 0xdc,
0x86, 0xf9, 0xbf, 0xdf, 0xa9, 0x3d, 0xd7, 0x1a, 0xb9, 0xe7, 0xd2, 0x25, 0xe2, 0x76, 0x88, 0xd7,
0xef, 0x0e, 0xdc, 0x81, 0x37, 0x05, 0x1c, 0x2b, 0x0a, 0x76, 0xf7, 0xd7, 0x17, 0x25, 0x88, 0x39,
0xf3, 0x5a, 0x17, 0x70, 0xac, 0x28, 0xd0, 0x8b, 0x30, 0x67, 0x74, 0x92, 0x67, 0x2e, 0x44, 0x02,
0xd4, 0xd8, 0xbe, 0x12, 0x9c, 0xa1, 0xca, 0xbd, 0xe2, 0x9a, 0x3e, 0xee, 0x15, 0x17, 0xbb, 0x60,
0xe7, 0xcf, 0x6a, 0x64, 0xc2, 0x89, 0x5f, 0xb0, 0x0b, 0x18, 0x56, 0x58, 0x74, 0x01, 0xa0, 0xe7,
0x04, 0x7d, 0xa7, 0x4b, 0x47, 0x48, 0x54, 0x6c, 0xa8, 0x05, 0xb5, 0xa5, 0x30, 0xd8, 0xa0, 0xa2,
0x4b, 0x24, 0xff, 0x26, 0x2a, 0x53, 0xf7, 0x61, 0x1d, 0x5b, 0xf7, 0x91, 0xad, 0x4c, 0x28, 0x8d,
0x55, 0x99, 0x60, 0x16, 0x0d, 0x94, 0x1f, 0x58, 0x34, 0xf0, 0x29, 0x98, 0xd9, 0x23, 0x07, 0x46,
0x75, 0x01, 0xff, 0x9b, 0x29, 0x0e, 0xc2, 0x12, 0x87, 0x6c, 0xa8, 0xb8, 0x8e, 0x2a, 0xdc, 0x9a,
0xe3, 0xfe, 0xc3, 0xda, 0x2a, 0x23, 0x12, 0x98, 0x46, 0xfd, 0xfd, 0x8f, 0xce, 0x3d, 0xf1, 0x83,
0x8f, 0xce, 0x3d, 0xf1, 0xe1, 0x47, 0xe7, 0x9e, 0x78, 0xeb, 0xe8, 0x9c, 0xf5, 0xfe, 0xd1, 0x39,
0xeb, 0x07, 0x47, 0xe7, 0xac, 0x0f, 0x8f, 0xce, 0x59, 0xff, 0x7a, 0x74, 0xce, 0xfa, 0xfd, 0x1f,
0x9d, 0x7b, 0xe2, 0xb5, 0xaa, 0xb4, 0xd5, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xed, 0x21, 0xaa,
0x05, 0xbb, 0x58, 0x00, 0x00,
// 5187 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3c, 0x5b, 0x6c, 0x24, 0xc7,
0x71, 0x9a, 0x5d, 0x72, 0xb9, 0x5b, 0x7c, 0xdc, 0xb1, 0xa5, 0x93, 0xe9, 0x8b, 0x7d, 0x3c, 0x8c,
0xe0, 0x47, 0x62, 0x69, 0x19, 0x1d, 0x94, 0xe4, 0x6c, 0x25, 0x96, 0xb9, 0xe4, 0x3d, 0x78, 0x47,
0xf2, 0xa8, 0x5e, 0x9e, 0x0e, 0x90, 0x1f, 0xd1, 0xdc, 0x4c, 0xef, 0xee, 0x1c, 0x77, 0x67, 0x46,
0x33, 0xb3, 0xbc, 0xa3, 0x12, 0x3b, 0x72, 0x62, 0x05, 0x86, 0x23, 0x05, 0x01, 0x82, 0x7c, 0x05,
0x0e, 0x92, 0xfc, 0xc5, 0x7f, 0x81, 0x81, 0x00, 0x01, 0xf2, 0xa5, 0x0f, 0x47, 0xc8, 0x87, 0xe1,
0x18, 0x42, 0xa2, 0x3c, 0xc0, 0x44, 0xf4, 0x4f, 0x90, 0x7c, 0x38, 0x41, 0x90, 0x9f, 0xfb, 0x0a,
0xfa, 0xdd, 0x33, 0xbb, 0x7b, 0x5c, 0xde, 0xce, 0x9d, 0x03, 0xe7, 0x6f, 0xa7, 0xaa, 0xba, 0xaa,
0xba, 0xbb, 0xba, 0xbb, 0xaa, 0xba, 0x7a, 0x61, 0xa3, 0xed, 0xa7, 0x9d, 0xfe, 0xed, 0xba, 0x1b,
0xf6, 0x56, 0x9c, 0xb8, 0x1d, 0x46, 0x71, 0x78, 0x87, 0xfd, 0x78, 0xce, 0xf5, 0x56, 0xa2, 0xbd,
0xf6, 0x8a, 0x13, 0xf9, 0xc9, 0x8a, 0x13, 0x45, 0x5d, 0xdf, 0x75, 0x52, 0x3f, 0x0c, 0x56, 0xf6,
0x9f, 0x77, 0xba, 0x51, 0xc7, 0x79, 0x7e, 0xa5, 0x4d, 0x02, 0x12, 0x3b, 0x29, 0xf1, 0xea, 0x51,
0x1c, 0xa6, 0x21, 0xfa, 0xac, 0x66, 0x55, 0x97, 0xac, 0xd8, 0x8f, 0x5f, 0x75, 0xbd, 0x7a, 0xb4,
0xd7, 0xae, 0x53, 0x56, 0x75, 0x83, 0x55, 0x5d, 0xb2, 0x3a, 0xfb, 0x9c, 0xa1, 0x45, 0x3b, 0x6c,
0x87, 0x2b, 0x8c, 0xe3, 0xed, 0x7e, 0x8b, 0x7d, 0xb1, 0x0f, 0xf6, 0x8b, 0x4b, 0x3a, 0x6b, 0xef,
0x5d, 0x4c, 0xea, 0x7e, 0x48, 0x75, 0x5b, 0x71, 0xc3, 0x98, 0xac, 0xec, 0x0f, 0x68, 0x73, 0xf6,
0x05, 0x4d, 0xd3, 0x73, 0xdc, 0x8e, 0x1f, 0x90, 0xf8, 0x40, 0x77, 0xa8, 0x47, 0x52, 0x67, 0x58,
0xab, 0x95, 0x51, 0xad, 0xe2, 0x7e, 0x90, 0xfa, 0x3d, 0x32, 0xd0, 0xe0, 0x17, 0x8f, 0x6b, 0x90,
0xb8, 0x1d, 0xd2, 0x73, 0xf2, 0xed, 0xec, 0xd7, 0x61, 0x7e, 0xf5, 0x56, 0x73, 0xb5, 0x9f, 0x76,
0xd6, 0xc2, 0xa0, 0xe5, 0xb7, 0xd1, 0x2f, 0xc0, 0xac, 0xdb, 0xed, 0x27, 0x29, 0x89, 0xb7, 0x9d,
0x1e, 0x59, 0xb2, 0xce, 0x5b, 0x9f, 0xae, 0x35, 0x9e, 0x7c, 0xef, 0x70, 0xf9, 0x89, 0xa3, 0xc3,
0xe5, 0xd9, 0x35, 0x8d, 0xc2, 0x26, 0x1d, 0xfa, 0x59, 0x98, 0x89, 0xc3, 0x2e, 0x59, 0xc5, 0xdb,
0x4b, 0x25, 0xd6, 0xe4, 0x94, 0x68, 0x32, 0x83, 0x39, 0x18, 0x4b, 0xbc, 0xfd, 0x4f, 0x16, 0xc0,
0x6a, 0x14, 0xed, 0xc4, 0xe1, 0x1d, 0xe2, 0xa6, 0xe8, 0x35, 0xa8, 0xd2, 0x51, 0xf0, 0x9c, 0xd4,
0x61, 0xd2, 0x66, 0x2f, 0xfc, 0x7c, 0x9d, 0x77, 0xa6, 0x6e, 0x76, 0x46, 0xcf, 0x1c, 0xa5, 0xae,
0xef, 0x3f, 0x5f, 0xbf, 0x71, 0x9b, 0xb6, 0xdf, 0x22, 0xa9, 0xd3, 0x40, 0x42, 0x18, 0x68, 0x18,
0x56, 0x5c, 0xd1, 0x1e, 0x4c, 0x25, 0x11, 0x71, 0x99, 0x62, 0xb3, 0x17, 0x36, 0xea, 0x0f, 0x6d,
0x1f, 0x75, 0xad, 0x76, 0x33, 0x22, 0x6e, 0x63, 0x4e, 0x88, 0x9d, 0xa2, 0x5f, 0x98, 0x09, 0xb1,
0xff, 0xd1, 0x82, 0x05, 0x4d, 0xb6, 0xe9, 0x27, 0x29, 0xfa, 0xd2, 0x40, 0x0f, 0xeb, 0xe3, 0xf5,
0x90, 0xb6, 0x66, 0xfd, 0x3b, 0x2d, 0x04, 0x55, 0x25, 0xc4, 0xe8, 0xdd, 0x1d, 0x98, 0xf6, 0x53,
0xd2, 0x4b, 0x96, 0x4a, 0xe7, 0xcb, 0x9f, 0x9e, 0xbd, 0x70, 0xa9, 0x90, 0xee, 0x35, 0xe6, 0x85,
0xc4, 0xe9, 0x0d, 0xca, 0x1b, 0x73, 0x11, 0xf6, 0xf7, 0xab, 0x66, 0xe7, 0x68, 0xaf, 0xd1, 0xf3,
0x30, 0x9b, 0x84, 0xfd, 0xd8, 0x25, 0x98, 0x44, 0x61, 0xb2, 0x64, 0x9d, 0x2f, 0xd3, 0xc9, 0xa7,
0xb6, 0xd2, 0xd4, 0x60, 0x6c, 0xd2, 0xa0, 0xdf, 0xb1, 0x60, 0xce, 0x23, 0x49, 0xea, 0x07, 0x4c,
0xbe, 0xd4, 0xfc, 0xe5, 0xc9, 0x34, 0x97, 0xc0, 0x75, 0xcd, 0xb9, 0xf1, 0x94, 0xe8, 0xc5, 0x9c,
0x01, 0x4c, 0x70, 0x46, 0x38, 0x35, 0x78, 0x8f, 0x24, 0x6e, 0xec, 0x47, 0xf4, 0x7b, 0xa9, 0x9c,
0x35, 0xf8, 0x75, 0x8d, 0xc2, 0x26, 0x1d, 0xda, 0x83, 0x69, 0x6a, 0xd0, 0xc9, 0xd2, 0x14, 0x53,
0xfe, 0xf2, 0x04, 0xca, 0x8b, 0xe1, 0xa4, 0x0b, 0x45, 0x8f, 0x3b, 0xfd, 0x4a, 0x30, 0x97, 0x81,
0xde, 0xb1, 0x60, 0x49, 0xac, 0x36, 0x4c, 0xf8, 0x50, 0xde, 0xea, 0xf8, 0x29, 0xe9, 0xfa, 0x49,
0xba, 0x34, 0xcd, 0x14, 0x58, 0x19, 0xcf, 0xa4, 0xae, 0xc4, 0x61, 0x3f, 0xba, 0xee, 0x07, 0x5e,
0xe3, 0xbc, 0x90, 0xb4, 0xb4, 0x36, 0x82, 0x31, 0x1e, 0x29, 0x12, 0xfd, 0xbe, 0x05, 0x67, 0x03,
0xa7, 0x47, 0x92, 0xc8, 0xa1, 0x93, 0xca, 0xd1, 0x8d, 0xae, 0xe3, 0xee, 0x31, 0x8d, 0x2a, 0x0f,
0xa7, 0x91, 0x2d, 0x34, 0x3a, 0xbb, 0x3d, 0x92, 0x35, 0x7e, 0x80, 0x58, 0xf4, 0xc7, 0x16, 0x2c,
0x86, 0x71, 0xd4, 0x71, 0x02, 0xe2, 0x49, 0x6c, 0xb2, 0x34, 0xc3, 0x56, 0xdc, 0x17, 0x27, 0x98,
0x9f, 0x1b, 0x79, 0x9e, 0x5b, 0x61, 0xe0, 0xa7, 0x61, 0xdc, 0x24, 0x69, 0xea, 0x07, 0xed, 0xa4,
0x71, 0xe6, 0xe8, 0x70, 0x79, 0x71, 0x80, 0x0a, 0x0f, 0x2a, 0x83, 0xee, 0xc1, 0x6c, 0x72, 0x10,
0xb8, 0xb7, 0xfc, 0xc0, 0x0b, 0xef, 0x26, 0x4b, 0xd5, 0x89, 0x97, 0x6c, 0x53, 0x71, 0x13, 0x8b,
0x4e, 0x73, 0xc7, 0xa6, 0xa8, 0xe1, 0x53, 0xa6, 0x8d, 0xa8, 0x56, 0xf4, 0x94, 0x69, 0x33, 0x7a,
0x80, 0x58, 0xfb, 0x7b, 0x65, 0x98, 0x35, 0xd6, 0xee, 0x63, 0x38, 0x0c, 0xba, 0x99, 0xc3, 0xe0,
0x5a, 0x31, 0x7b, 0xce, 0xa8, 0xd3, 0x00, 0xa5, 0x50, 0x49, 0x52, 0x27, 0xed, 0x27, 0x6c, 0x5f,
0x99, 0xbd, 0xb0, 0x59, 0x90, 0x3c, 0xc6, 0xb3, 0xb1, 0x20, 0x24, 0x56, 0xf8, 0x37, 0x16, 0xb2,
0xd0, 0xeb, 0x50, 0x0b, 0x23, 0x7a, 0xcc, 0xd3, 0x0d, 0x6d, 0x8a, 0x09, 0x5e, 0x9f, 0xc4, 0xfe,
0x25, 0xaf, 0xc6, 0xfc, 0xd1, 0xe1, 0x72, 0x4d, 0x7d, 0x62, 0x2d, 0xc5, 0xfe, 0x7b, 0x0b, 0x9e,
0x32, 0x14, 0x5c, 0x0b, 0x03, 0xcf, 0x67, 0x33, 0x7a, 0x1e, 0xa6, 0xd2, 0x83, 0x48, 0x3a, 0x12,
0x6a, 0x8c, 0x76, 0x0f, 0x22, 0x82, 0x19, 0x86, 0xba, 0x0e, 0x3d, 0x92, 0x24, 0x4e, 0x9b, 0xe4,
0x5d, 0x87, 0x2d, 0x0e, 0xc6, 0x12, 0x8f, 0x62, 0x40, 0x5d, 0x27, 0x49, 0x77, 0x63, 0x27, 0x48,
0x18, 0xfb, 0x5d, 0xbf, 0x47, 0xc4, 0xd0, 0xfe, 0xdc, 0x78, 0x86, 0x42, 0x5b, 0x34, 0x9e, 0x3e,
0x3a, 0x5c, 0x46, 0x9b, 0x03, 0x9c, 0xf0, 0x10, 0xee, 0xf6, 0xeb, 0xf0, 0xf4, 0xf0, 0xd3, 0x05,
0x7d, 0x12, 0x2a, 0x09, 0x89, 0xf7, 0x49, 0x2c, 0x3a, 0xa7, 0xa7, 0x83, 0x41, 0xb1, 0xc0, 0xa2,
0x15, 0xa8, 0xa9, 0x25, 0x20, 0xba, 0xb8, 0x28, 0x48, 0x6b, 0x7a, 0xdd, 0x68, 0x1a, 0xfb, 0x9f,
0x2d, 0x38, 0x65, 0xc8, 0x7c, 0x0c, 0x4e, 0xc4, 0x5e, 0xd6, 0x89, 0xb8, 0x5c, 0x8c, 0x99, 0x8e,
0xf0, 0x22, 0xbe, 0x5b, 0x81, 0x45, 0xd3, 0x98, 0xd9, 0x9e, 0xc0, 0x3c, 0x48, 0x12, 0x85, 0x37,
0xf1, 0xa6, 0x18, 0x4e, 0xed, 0x41, 0x72, 0x30, 0x96, 0x78, 0x6a, 0x53, 0x91, 0x93, 0x76, 0xc4,
0x58, 0x2a, 0x9b, 0xda, 0x71, 0xd2, 0x0e, 0x66, 0x18, 0xf4, 0x79, 0x58, 0x48, 0x9d, 0xb8, 0x4d,
0x52, 0x4c, 0xf6, 0xfd, 0x44, 0x2e, 0x83, 0x5a, 0xe3, 0x69, 0x41, 0xbb, 0xb0, 0x9b, 0xc1, 0xe2,
0x1c, 0x35, 0x0a, 0x60, 0xaa, 0x43, 0xba, 0x3d, 0x71, 0x78, 0xec, 0x14, 0xb4, 0x6a, 0x59, 0x47,
0xaf, 0x92, 0x6e, 0xaf, 0x51, 0xa5, 0xfa, 0xd2, 0x5f, 0x98, 0xc9, 0x41, 0xbf, 0x69, 0x41, 0x6d,
0xaf, 0x9f, 0xa4, 0x61, 0xcf, 0x7f, 0x83, 0x2c, 0x55, 0x99, 0xd4, 0x9b, 0x45, 0x4a, 0xbd, 0x2e,
0x99, 0xf3, 0x35, 0xac, 0x3e, 0xb1, 0x16, 0x8b, 0xde, 0x80, 0x99, 0xbd, 0x24, 0x0c, 0x02, 0x42,
0x8f, 0x03, 0xaa, 0x41, 0xb3, 0x50, 0x0d, 0x38, 0xeb, 0xc6, 0x2c, 0x9d, 0x52, 0xf1, 0x81, 0xa5,
0x40, 0x36, 0x00, 0x9e, 0x1f, 0x13, 0x37, 0x0d, 0xe3, 0x83, 0x25, 0x28, 0x7e, 0x00, 0xd6, 0x25,
0x73, 0x3e, 0x00, 0xea, 0x13, 0x6b, 0xb1, 0x68, 0x1f, 0x2a, 0x51, 0xb7, 0xdf, 0xf6, 0x83, 0xa5,
0x59, 0xa6, 0x00, 0x2e, 0x52, 0x81, 0x1d, 0xc6, 0xb9, 0x01, 0x74, 0x83, 0xe0, 0xbf, 0xb1, 0x90,
0x86, 0x9e, 0x81, 0x69, 0xb7, 0xe3, 0xc4, 0xe9, 0xd2, 0x1c, 0x33, 0x52, 0xb5, 0x6a, 0xd6, 0x28,
0x10, 0x73, 0x9c, 0xfd, 0xd7, 0x16, 0x9c, 0x1d, 0xdd, 0x2b, 0xbe, 0x7c, 0xdc, 0x7e, 0x9c, 0xf0,
0xad, 0xb6, 0x6a, 0x2e, 0x1f, 0x06, 0xc6, 0x12, 0x8f, 0xbe, 0x06, 0x33, 0x77, 0xc4, 0x3c, 0x97,
0x8a, 0x9f, 0xe7, 0x6b, 0x62, 0x9e, 0x95, 0xfc, 0x6b, 0x72, 0xae, 0x85, 0x50, 0xfb, 0xbb, 0x65,
0x38, 0x33, 0x74, 0x59, 0xa0, 0x3a, 0xc0, 0xbe, 0xd3, 0xed, 0x93, 0xcb, 0x3e, 0xf5, 0xac, 0x79,
0x2c, 0xb1, 0x40, 0x8f, 0xf2, 0x57, 0x14, 0x14, 0x1b, 0x14, 0xe8, 0xd7, 0x01, 0x22, 0x27, 0x76,
0x7a, 0x24, 0x25, 0xb1, 0xdc, 0xbb, 0xae, 0x4e, 0xd0, 0x19, 0xaa, 0xc4, 0x8e, 0x64, 0xa8, 0x1d,
0x09, 0x05, 0x4a, 0xb0, 0x21, 0x8f, 0x46, 0x0e, 0x31, 0xe9, 0x12, 0x27, 0x21, 0x2c, 0x54, 0xce,
0x45, 0x0e, 0x58, 0xa3, 0xb0, 0x49, 0x47, 0x8f, 0x0d, 0xd6, 0x85, 0x44, 0xec, 0x49, 0xea, 0xd8,
0x60, 0x9d, 0x4c, 0xb0, 0xc0, 0xa2, 0xb7, 0x2d, 0x58, 0x68, 0xf9, 0x5d, 0xa2, 0xa5, 0x0b, 0x57,
0x7f, 0x73, 0xc2, 0x1e, 0x5e, 0x36, 0x99, 0xea, 0x2d, 0x31, 0x03, 0x4e, 0x70, 0x4e, 0xb6, 0xfd,
0x3f, 0x16, 0x2c, 0x8d, 0x9a, 0x6c, 0x14, 0xc1, 0x0c, 0xb9, 0x97, 0xbe, 0xe2, 0xc4, 0x7c, 0xd6,
0x26, 0xf3, 0x69, 0x05, 0xd3, 0x57, 0x9c, 0x58, 0x1b, 0xd1, 0x25, 0xce, 0x1d, 0x4b, 0x31, 0xa8,
0x0d, 0x53, 0x69, 0xd7, 0x29, 0x22, 0xea, 0x35, 0xc4, 0x69, 0xf7, 0x64, 0x73, 0x35, 0xc1, 0x4c,
0x80, 0xfd, 0xc3, 0x61, 0xfd, 0x16, 0xfb, 0x17, 0x35, 0x01, 0x12, 0xec, 0xfb, 0x71, 0x18, 0xf4,
0x48, 0x90, 0xe6, 0xb3, 0x25, 0x97, 0x34, 0x0a, 0x9b, 0x74, 0xe8, 0x37, 0x86, 0xd8, 0xed, 0xf5,
0x09, 0xba, 0x20, 0xd4, 0x19, 0xdb, 0x74, 0xed, 0xbf, 0x29, 0x0f, 0xd9, 0x4c, 0xd4, 0xa1, 0x80,
0x2e, 0x00, 0x50, 0x6f, 0x64, 0x27, 0x26, 0x2d, 0xff, 0x9e, 0xe8, 0x95, 0x62, 0xb9, 0xad, 0x30,
0xd8, 0xa0, 0x92, 0x6d, 0x9a, 0xfd, 0x16, 0x6d, 0x53, 0x1a, 0x6c, 0xc3, 0x31, 0xd8, 0xa0, 0x42,
0x2f, 0x40, 0xc5, 0xef, 0x39, 0x6d, 0x42, 0xdd, 0x63, 0xba, 0xd6, 0x3f, 0x46, 0x97, 0xc1, 0x06,
0x83, 0xdc, 0x3f, 0x5c, 0x5e, 0x50, 0x0a, 0x31, 0x10, 0x16, 0xb4, 0xe8, 0x4f, 0x2c, 0x98, 0x73,
0xc3, 0x5e, 0x2f, 0x0c, 0x36, 0x9d, 0xdb, 0xa4, 0x2b, 0x43, 0xf0, 0xf6, 0x23, 0x39, 0x2f, 0xeb,
0x6b, 0x86, 0xa4, 0x4b, 0x41, 0x1a, 0x1f, 0xe8, 0xac, 0x82, 0x89, 0xc2, 0x19, 0x95, 0xe8, 0x76,
0xbc, 0x4f, 0x62, 0xe6, 0x79, 0x4c, 0x67, 0xbd, 0x99, 0x57, 0x38, 0x18, 0x4b, 0xfc, 0xd9, 0x97,
0x60, 0x71, 0x40, 0x06, 0x3a, 0x0d, 0xe5, 0x3d, 0x72, 0xc0, 0x87, 0x1e, 0xd3, 0x9f, 0xe8, 0x29,
0x98, 0x66, 0x1b, 0x03, 0x1f, 0x5a, 0xcc, 0x3f, 0x3e, 0x57, 0xba, 0x68, 0xd9, 0x7f, 0x68, 0xc1,
0x47, 0x46, 0x1c, 0x37, 0xd4, 0x55, 0x0a, 0x74, 0x1e, 0x4f, 0xd9, 0x37, 0xdb, 0x95, 0x18, 0x06,
0x7d, 0x05, 0xca, 0x24, 0xd8, 0x17, 0x46, 0xb8, 0x36, 0xc1, 0x18, 0x5e, 0x0a, 0xf6, 0xf9, 0xf8,
0xcc, 0x1c, 0x1d, 0x2e, 0x97, 0x2f, 0x05, 0xfb, 0x98, 0x32, 0xb6, 0xdf, 0xaa, 0x64, 0x9c, 0xd9,
0xa6, 0x0c, 0x8b, 0x98, 0x96, 0xc2, 0x95, 0xdd, 0x2c, 0x72, 0xea, 0x0c, 0x3f, 0x9c, 0x27, 0x9d,
0x84, 0x2c, 0xf4, 0x4d, 0x8b, 0xa5, 0x7a, 0xa4, 0xff, 0x2e, 0x0e, 0xbf, 0x47, 0x90, 0x76, 0x32,
0xb3, 0x47, 0x12, 0x88, 0x4d, 0xd1, 0xd4, 0x3c, 0x22, 0x9e, 0xf5, 0x11, 0xc7, 0x86, 0x32, 0x0f,
0x99, 0x0c, 0x92, 0x78, 0xd4, 0x07, 0xa0, 0x71, 0xfc, 0x4e, 0xd8, 0xf5, 0xdd, 0x03, 0x11, 0xcd,
0x4d, 0x9a, 0x31, 0xe0, 0xcc, 0xf8, 0xd1, 0xaa, 0xbf, 0xb1, 0x21, 0x08, 0x7d, 0xdb, 0x82, 0x45,
0xbf, 0x1d, 0x84, 0x31, 0x59, 0xf7, 0x5b, 0x2d, 0x12, 0x93, 0xc0, 0x25, 0xf2, 0x00, 0xda, 0x9d,
0x40, 0xbc, 0xcc, 0x01, 0x6c, 0xe4, 0x79, 0x37, 0x3e, 0x2a, 0x86, 0x60, 0x71, 0x00, 0x85, 0x07,
0x35, 0x41, 0x0e, 0x4c, 0xf9, 0x41, 0x2b, 0x14, 0xb9, 0xa6, 0x97, 0x26, 0xd0, 0x68, 0x23, 0x68,
0x85, 0x7a, 0x65, 0xd0, 0x2f, 0xcc, 0x58, 0xa3, 0x4d, 0x78, 0x2a, 0x16, 0x01, 0xc1, 0x55, 0x3f,
0xa1, 0x5e, 0xd6, 0xa6, 0xdf, 0xf3, 0x53, 0x16, 0x14, 0x94, 0x1b, 0x4b, 0x47, 0x87, 0xcb, 0x4f,
0xe1, 0x21, 0x78, 0x3c, 0xb4, 0x95, 0xfd, 0xdf, 0xd5, 0x6c, 0xd4, 0xc3, 0x43, 0xf5, 0x37, 0xa0,
0x16, 0xab, 0x54, 0x15, 0x3f, 0x3a, 0x37, 0x0a, 0x18, 0x5d, 0x91, 0x20, 0x50, 0x61, 0xa6, 0x4e,
0x4a, 0x69, 0x71, 0xf4, 0x08, 0xa5, 0x13, 0x2e, 0xd6, 0xc1, 0xa4, 0x36, 0x25, 0x44, 0xea, 0x2c,
0xc8, 0x41, 0xe0, 0x62, 0x26, 0x00, 0x85, 0x50, 0xe9, 0x10, 0xa7, 0x9b, 0x76, 0x44, 0xa8, 0x7e,
0x65, 0x22, 0x07, 0x86, 0x32, 0xca, 0x27, 0x40, 0x38, 0x14, 0x0b, 0x31, 0xa8, 0x0f, 0x33, 0x1d,
0x3e, 0xf6, 0xe2, 0x6c, 0xb8, 0x36, 0xd1, 0x98, 0x66, 0x66, 0x53, 0x2f, 0x55, 0x01, 0xc0, 0x52,
0x16, 0xfa, 0x2d, 0x0b, 0xc0, 0x95, 0x99, 0x0f, 0xb9, 0x58, 0x6e, 0x14, 0xb3, 0xbf, 0xa8, 0x8c,
0x8a, 0x3e, 0x54, 0x15, 0x28, 0xc1, 0x86, 0x58, 0xf4, 0x1a, 0xcc, 0xc5, 0xc4, 0x0d, 0x03, 0xd7,
0xef, 0x12, 0x6f, 0x35, 0x5d, 0xaa, 0x9c, 0x38, 0x3d, 0x72, 0x9a, 0x1e, 0x6e, 0xd8, 0xe0, 0x81,
0x33, 0x1c, 0xd1, 0x5b, 0x16, 0x2c, 0xa8, 0xd4, 0x0f, 0x9d, 0x0a, 0x22, 0x02, 0xe5, 0x8d, 0x22,
0xb2, 0x4c, 0x8c, 0x61, 0x03, 0x51, 0x97, 0x34, 0x0b, 0xc3, 0x39, 0xa1, 0xe8, 0x55, 0x80, 0xf0,
0x36, 0x4b, 0xb2, 0xd0, 0x7e, 0x56, 0x4f, 0xdc, 0xcf, 0x05, 0x9e, 0x25, 0x94, 0x1c, 0xb0, 0xc1,
0x0d, 0x5d, 0x07, 0xe0, 0xeb, 0x64, 0xf7, 0x20, 0x22, 0x2c, 0x1e, 0xae, 0x35, 0x3e, 0x23, 0x47,
0xbe, 0xa9, 0x30, 0xf7, 0x0f, 0x97, 0x07, 0x63, 0x19, 0x96, 0xdc, 0x32, 0x9a, 0xa3, 0x7b, 0x30,
0x93, 0xf4, 0x7b, 0x3d, 0x47, 0x85, 0xb6, 0x5b, 0x05, 0x1d, 0x78, 0x9c, 0xa9, 0x36, 0x49, 0x01,
0xc0, 0x52, 0x9c, 0x1d, 0x00, 0x1a, 0xa4, 0x47, 0x2f, 0xc0, 0x1c, 0xb9, 0x97, 0x92, 0x38, 0x70,
0xba, 0x37, 0xf1, 0xa6, 0x8c, 0xb4, 0xd8, 0xb4, 0x5f, 0x32, 0xe0, 0x38, 0x43, 0x85, 0x6c, 0xe5,
0xad, 0x95, 0x18, 0x3d, 0x68, 0x6f, 0x4d, 0xfa, 0x66, 0xf6, 0x6f, 0x97, 0x32, 0xa7, 0xfd, 0x6e,
0x4c, 0x08, 0xea, 0xc2, 0x74, 0x10, 0x7a, 0x6a, 0x7f, 0xbb, 0x52, 0xc0, 0xfe, 0xb6, 0x1d, 0x7a,
0xc6, 0x5d, 0x09, 0xfd, 0x4a, 0x30, 0x17, 0x82, 0xbe, 0x61, 0xc1, 0xbc, 0x4c, 0xbc, 0x33, 0x84,
0x70, 0x6d, 0x0a, 0x13, 0x7b, 0x46, 0x88, 0x9d, 0xbf, 0x61, 0x4a, 0xc1, 0x59, 0xa1, 0xf6, 0x8f,
0xac, 0x4c, 0x90, 0x7b, 0xcb, 0x49, 0xdd, 0xce, 0xa5, 0x7d, 0xea, 0xfc, 0x5f, 0xcf, 0x64, 0x44,
0x7f, 0xc9, 0xcc, 0x88, 0xde, 0x3f, 0x5c, 0xfe, 0xd4, 0xa8, 0x8b, 0xdc, 0xbb, 0x94, 0x43, 0x9d,
0xb1, 0x30, 0x92, 0xa7, 0x5f, 0x85, 0x59, 0x43, 0x63, 0xb1, 0x95, 0x17, 0x95, 0xbe, 0x53, 0x7e,
0x8c, 0x01, 0xc4, 0xa6, 0x3c, 0xfb, 0xdd, 0x32, 0xcc, 0x88, 0xfb, 0xa3, 0xb1, 0xd3, 0xa1, 0xd2,
0x25, 0x2d, 0x8d, 0x74, 0x49, 0x23, 0xa8, 0xb8, 0xec, 0x36, 0x5a, 0x9c, 0x17, 0x93, 0x84, 0xf4,
0x42, 0x3b, 0x7e, 0xbb, 0xad, 0x75, 0xe2, 0xdf, 0x58, 0xc8, 0x41, 0xef, 0x58, 0x70, 0xca, 0xa5,
0x31, 0x94, 0xab, 0xb7, 0xb4, 0xa9, 0x89, 0x6f, 0x08, 0xd6, 0xb2, 0x1c, 0x1b, 0x1f, 0x11, 0xd2,
0x4f, 0xe5, 0x10, 0x38, 0x2f, 0x1b, 0xbd, 0x08, 0xf3, 0x7c, 0xb4, 0x5e, 0xc9, 0x04, 0x11, 0xca,
0xf4, 0x9a, 0x26, 0x12, 0x67, 0x69, 0x51, 0x9d, 0x47, 0x62, 0x2c, 0x97, 0x9c, 0x30, 0x07, 0x49,
0x64, 0x51, 0x54, 0xb2, 0x39, 0xc1, 0x06, 0x85, 0xfd, 0x17, 0x65, 0x98, 0xcf, 0x0c, 0x13, 0x7a,
0x16, 0xaa, 0xfd, 0x84, 0x2e, 0x7c, 0x15, 0x39, 0xa8, 0xe4, 0xf1, 0x4d, 0x01, 0xc7, 0x8a, 0x82,
0x52, 0x47, 0x4e, 0x92, 0xdc, 0x0d, 0x63, 0x4f, 0x4c, 0xaa, 0xa2, 0xde, 0x11, 0x70, 0xac, 0x28,
0x68, 0xc8, 0x7c, 0x9b, 0x38, 0x31, 0x89, 0x77, 0xc3, 0x3d, 0x32, 0x70, 0xdf, 0xda, 0xd0, 0x28,
0x6c, 0xd2, 0xb1, 0x19, 0x4a, 0xbb, 0xc9, 0x5a, 0xd7, 0x27, 0x41, 0xca, 0xd5, 0x2c, 0x60, 0x86,
0x76, 0x37, 0x9b, 0x26, 0x47, 0x3d, 0x43, 0x39, 0x04, 0xce, 0xcb, 0x46, 0x5f, 0xb7, 0x60, 0xde,
0xb9, 0x9b, 0xe8, 0xca, 0x09, 0x36, 0x45, 0x93, 0xd9, 0x6a, 0xa6, 0x12, 0xa3, 0xb1, 0x48, 0x27,
0x3a, 0x03, 0xc2, 0x59, 0x89, 0xf6, 0xfb, 0x16, 0xc8, 0x8a, 0x8c, 0xc7, 0x70, 0x47, 0xd0, 0xce,
0xde, 0x11, 0x34, 0x26, 0x5f, 0x94, 0x23, 0xee, 0x07, 0xb6, 0x61, 0x86, 0x06, 0xc4, 0x4e, 0xe0,
0xa1, 0x4f, 0xc0, 0x8c, 0xcb, 0x7f, 0x8a, 0x33, 0x8a, 0x65, 0x8f, 0x05, 0x16, 0x4b, 0x1c, 0xfa,
0x18, 0x4c, 0x39, 0x71, 0x5b, 0x9e, 0x4b, 0x2c, 0xb9, 0xbe, 0x1a, 0xb7, 0x13, 0xcc, 0xa0, 0xf6,
0x3b, 0x25, 0x80, 0xb5, 0xb0, 0x17, 0x39, 0x31, 0xf1, 0x76, 0xc3, 0xff, 0xf7, 0xc1, 0xa7, 0xfd,
0xb6, 0x05, 0x88, 0x8e, 0x47, 0x18, 0x90, 0x40, 0xe7, 0x8c, 0xd0, 0x0a, 0xd4, 0x5c, 0x09, 0x15,
0xab, 0x5e, 0xc5, 0x0f, 0x8a, 0x1c, 0x6b, 0x9a, 0x31, 0x36, 0xf2, 0x67, 0x64, 0xce, 0xa2, 0x9c,
0x4d, 0x6c, 0xb3, 0x4c, 0xa7, 0x48, 0x61, 0xd8, 0xbf, 0x5b, 0x82, 0xa7, 0xb9, 0x41, 0x6f, 0x39,
0x81, 0xd3, 0x26, 0x3d, 0xaa, 0xd5, 0xb8, 0xd9, 0x8b, 0xd7, 0x68, 0x18, 0xe8, 0xcb, 0x44, 0xf6,
0x44, 0x36, 0xc9, 0x6d, 0x89, 0x5b, 0xcf, 0x46, 0xe0, 0xa7, 0x98, 0x71, 0x46, 0x11, 0x54, 0x65,
0xd1, 0x94, 0x38, 0x8e, 0x8a, 0x90, 0xa2, 0x16, 0xda, 0x15, 0xc1, 0x1b, 0x2b, 0x29, 0xf6, 0xbb,
0x16, 0xe4, 0x4f, 0x08, 0x76, 0xb8, 0xf2, 0x8b, 0xe4, 0xfc, 0xe1, 0x9a, 0xbd, 0xfa, 0x3d, 0xc1,
0x65, 0xea, 0x97, 0x60, 0xd6, 0x49, 0x53, 0xd2, 0x8b, 0x52, 0xe6, 0x3e, 0x97, 0x1f, 0xce, 0x7d,
0xde, 0x0a, 0x3d, 0xbf, 0xe5, 0x33, 0xf7, 0xd9, 0x64, 0x67, 0xbf, 0x0c, 0x55, 0x99, 0x10, 0x1a,
0x63, 0x1a, 0x9f, 0xc9, 0x24, 0xb7, 0x46, 0x18, 0xca, 0x9f, 0x5a, 0x30, 0x67, 0x86, 0x7f, 0xa8,
0x9d, 0x1b, 0x94, 0x1b, 0xd9, 0x41, 0xb9, 0x7f, 0xb8, 0xfc, 0x2b, 0xc3, 0xca, 0x0a, 0xdb, 0x7e,
0x1a, 0x46, 0xc9, 0x73, 0x24, 0x68, 0xfb, 0x01, 0x61, 0xbe, 0x15, 0x0f, 0x1b, 0x33, 0xb1, 0xe5,
0x5a, 0xe8, 0x91, 0x87, 0x18, 0x55, 0xfb, 0x16, 0x2c, 0x0e, 0xe4, 0xd8, 0xc7, 0x18, 0x80, 0x63,
0xaf, 0x34, 0xed, 0x77, 0x2c, 0x98, 0xcf, 0xdc, 0x4f, 0x14, 0x34, 0xac, 0xf4, 0x40, 0x6e, 0x85,
0x2c, 0x67, 0x10, 0xfb, 0x01, 0x77, 0xb9, 0xaa, 0x7a, 0x17, 0xb9, 0xac, 0x51, 0xd8, 0xa4, 0xb3,
0xb7, 0x80, 0xe5, 0x4a, 0x8a, 0x9a, 0xdc, 0x97, 0xa1, 0x4a, 0xd9, 0xd1, 0x83, 0xa0, 0x28, 0x96,
0x21, 0x54, 0xaf, 0xdd, 0xda, 0xe5, 0xee, 0x83, 0x0d, 0x65, 0xdf, 0xe1, 0xdb, 0x5a, 0x59, 0x2f,
0xbe, 0x8d, 0x24, 0xe9, 0x33, 0xd3, 0xa5, 0x48, 0xf4, 0x0c, 0x94, 0xc9, 0xbd, 0x88, 0xb1, 0x2c,
0xeb, 0xad, 0xef, 0xd2, 0xbd, 0xc8, 0x8f, 0x49, 0x42, 0x89, 0xc8, 0xbd, 0x08, 0x9d, 0x85, 0x92,
0xef, 0x89, 0xfd, 0x0c, 0x04, 0x4d, 0x69, 0x63, 0x1d, 0x97, 0x7c, 0xcf, 0xee, 0x03, 0xe8, 0xcb,
0x84, 0xa2, 0xa6, 0xe7, 0x3c, 0x4c, 0xb9, 0xa1, 0x47, 0xc4, 0xbc, 0x28, 0x36, 0xcc, 0x3e, 0x19,
0xc6, 0xbe, 0x05, 0x0b, 0xd7, 0x83, 0xf0, 0x6e, 0x40, 0xc3, 0x82, 0xcb, 0x3e, 0xe9, 0x7a, 0x94,
0x71, 0x8b, 0xfe, 0x10, 0xb2, 0x15, 0x63, 0x86, 0xc5, 0x1c, 0xa7, 0x2a, 0x33, 0x4a, 0xa3, 0x2a,
0x33, 0xec, 0x6f, 0x59, 0x70, 0x3a, 0x7f, 0xb5, 0xf0, 0x13, 0x3b, 0x26, 0xde, 0xa4, 0xca, 0xc8,
0xac, 0xfc, 0x8d, 0x88, 0xe7, 0x3a, 0x2e, 0xc2, 0xdc, 0xed, 0xbe, 0xdf, 0xf5, 0xc4, 0xb7, 0xd0,
0x47, 0x25, 0xe8, 0x1b, 0x06, 0x0e, 0x67, 0x28, 0xd1, 0x05, 0x80, 0xdb, 0x7e, 0xe0, 0xc4, 0x07,
0x3b, 0x7a, 0xd9, 0xa9, 0xcc, 0x4a, 0x43, 0x61, 0xb0, 0x41, 0x65, 0xff, 0x43, 0x09, 0x74, 0xf5,
0x0b, 0x6a, 0x89, 0xf4, 0x99, 0x35, 0xb1, 0xdf, 0xd7, 0x3c, 0x08, 0x5c, 0x5d, 0x64, 0x53, 0xcd,
0x65, 0xcf, 0xbe, 0x61, 0xc1, 0x2c, 0x3d, 0x89, 0x7c, 0x27, 0x25, 0x5e, 0xe3, 0x40, 0x1c, 0x75,
0x5b, 0x45, 0xa4, 0x5a, 0x36, 0x38, 0xdb, 0x30, 0xd6, 0xeb, 0x7d, 0x43, 0x4b, 0xc2, 0xa6, 0x58,
0xf4, 0x65, 0x91, 0x70, 0x2d, 0x17, 0x93, 0x70, 0xad, 0x66, 0x93, 0xad, 0x76, 0x02, 0x68, 0x50,
0xad, 0x13, 0x06, 0x22, 0x2b, 0x50, 0x73, 0xfa, 0x69, 0xd8, 0xa3, 0x1a, 0xb3, 0x61, 0xaa, 0x6a,
0xd3, 0x5c, 0x95, 0x08, 0xac, 0x69, 0xec, 0xf7, 0xa7, 0x20, 0x97, 0x63, 0x42, 0x7d, 0xb3, 0x76,
0xca, 0x2a, 0xb0, 0x76, 0x4a, 0x69, 0x32, 0xac, 0x7e, 0x8a, 0x3a, 0xd7, 0x51, 0xc7, 0x49, 0xe4,
0x2a, 0x79, 0x59, 0x2e, 0x81, 0x1d, 0x0a, 0xbc, 0x7f, 0xb8, 0xfc, 0x85, 0xf1, 0x0e, 0x32, 0x6a,
0x30, 0x2b, 0xfc, 0x22, 0x4a, 0x8b, 0x66, 0x3c, 0x30, 0xe7, 0x6f, 0x1e, 0x65, 0xe5, 0x63, 0x1c,
0x84, 0xaf, 0xf1, 0x9b, 0x07, 0x4c, 0x92, 0x7e, 0x37, 0x15, 0xc1, 0xd6, 0x76, 0x51, 0x66, 0xce,
0xb9, 0xea, 0x2b, 0x08, 0xfe, 0x8d, 0x0d, 0x89, 0xe8, 0x8b, 0x50, 0x4b, 0x52, 0x27, 0x4e, 0x1f,
0x32, 0x8b, 0xa9, 0x06, 0xbc, 0x29, 0x99, 0x60, 0xcd, 0x0f, 0xbd, 0x0a, 0xd0, 0xf2, 0x03, 0x3f,
0xe9, 0x30, 0xee, 0x33, 0x0f, 0xe7, 0xfc, 0x5c, 0x56, 0x1c, 0xb0, 0xc1, 0xcd, 0xfe, 0x02, 0x9c,
0x3f, 0xae, 0x66, 0x94, 0x86, 0x2c, 0x77, 0x9d, 0x38, 0x10, 0xc5, 0x1a, 0x6c, 0x35, 0xdc, 0x72,
0xe2, 0x00, 0x33, 0xa8, 0xfd, 0x9d, 0x12, 0xcc, 0x1a, 0x65, 0xc1, 0x63, 0x9c, 0x25, 0xb9, 0x32,
0xe6, 0xd2, 0x98, 0x65, 0xcc, 0x9f, 0x86, 0x6a, 0x14, 0x76, 0x7d, 0xd7, 0x57, 0x77, 0xb0, 0x73,
0x2c, 0x6e, 0x17, 0x30, 0xac, 0xb0, 0x28, 0x85, 0xda, 0x9d, 0xbb, 0x29, 0x3b, 0x4d, 0xe5, 0x8d,
0xeb, 0x24, 0xb7, 0x85, 0xf2, 0x64, 0xd6, 0xd3, 0x24, 0x21, 0x09, 0xd6, 0x82, 0x90, 0x0d, 0x95,
0x76, 0x1c, 0xf6, 0x23, 0x9e, 0x4d, 0x17, 0x39, 0x47, 0x56, 0x7f, 0x9a, 0x60, 0x81, 0xb1, 0x7f,
0x58, 0x82, 0x1a, 0x26, 0x51, 0xb8, 0x16, 0x13, 0x2f, 0x41, 0x1f, 0x87, 0x72, 0x3f, 0xee, 0x8a,
0x91, 0x9a, 0x15, 0xcc, 0xcb, 0x37, 0xf1, 0x26, 0xa6, 0xf0, 0xcc, 0x8e, 0x52, 0x3a, 0x51, 0x6a,
0xa3, 0x7c, 0x6c, 0x6a, 0xe3, 0x45, 0x98, 0x4f, 0x92, 0xce, 0x4e, 0xec, 0xef, 0x3b, 0x29, 0xb9,
0x4e, 0x0e, 0x44, 0x81, 0x87, 0xce, 0xda, 0x34, 0xaf, 0x6a, 0x24, 0xce, 0xd2, 0xa2, 0x2b, 0xb0,
0xa8, 0x73, 0x0c, 0x24, 0x4e, 0xd7, 0x69, 0x14, 0xcf, 0xd3, 0x3e, 0xea, 0x66, 0x4c, 0x67, 0x25,
0x04, 0x01, 0x1e, 0x6c, 0x83, 0xd6, 0xe1, 0x74, 0x06, 0x48, 0x15, 0xa9, 0x30, 0x3e, 0x4b, 0x82,
0xcf, 0xe9, 0x0c, 0x1f, 0xaa, 0xcb, 0x40, 0x0b, 0xfb, 0x03, 0x0b, 0xe6, 0xd5, 0xa0, 0x3e, 0x86,
0xec, 0x82, 0x9f, 0xcd, 0x2e, 0xac, 0x4f, 0x94, 0xad, 0x15, 0x6a, 0x8f, 0xc8, 0x2f, 0xfc, 0x51,
0x05, 0x80, 0xbd, 0x44, 0xf0, 0xd9, 0xad, 0xcd, 0x79, 0x98, 0x8a, 0x49, 0x14, 0xe6, 0xd7, 0x16,
0xa5, 0xc0, 0x0c, 0xf3, 0x7f, 0xd7, 0x66, 0x86, 0xa5, 0x2d, 0xa7, 0x7f, 0x82, 0x69, 0xcb, 0x26,
0x9c, 0xf1, 0x83, 0x84, 0xb8, 0xfd, 0x58, 0xdc, 0xef, 0x5e, 0x0d, 0x13, 0x65, 0x7f, 0xd5, 0xc6,
0xc7, 0x05, 0xa3, 0x33, 0x1b, 0xc3, 0x88, 0xf0, 0xf0, 0xb6, 0x74, 0x3c, 0x25, 0x82, 0xed, 0xd3,
0x55, 0xc3, 0x7f, 0x17, 0x70, 0xac, 0x28, 0xa8, 0x0f, 0x40, 0x02, 0xe7, 0x76, 0x97, 0x6c, 0xb6,
0x12, 0x76, 0x25, 0x64, 0xf8, 0x00, 0x97, 0x38, 0xe2, 0x72, 0x13, 0x6b, 0x9a, 0xe1, 0xeb, 0xae,
0x56, 0xd0, 0xba, 0x83, 0x93, 0xae, 0x3b, 0xe5, 0x95, 0xcf, 0x8e, 0xac, 0x97, 0x96, 0x67, 0xc1,
0xdc, 0xc8, 0xb3, 0xe0, 0xf3, 0xb0, 0xe0, 0x07, 0x1d, 0x12, 0xfb, 0x29, 0xf1, 0xd8, 0x42, 0x58,
0x9a, 0x67, 0x03, 0xa1, 0x4a, 0xbd, 0x36, 0x32, 0x58, 0x9c, 0xa3, 0xb6, 0xbf, 0x59, 0x82, 0x33,
0x7a, 0x81, 0x50, 0xcd, 0xfc, 0x16, 0xb5, 0x12, 0x56, 0x18, 0xc4, 0x73, 0xcd, 0xc6, 0xe3, 0x30,
0xe5, 0x35, 0x37, 0x15, 0x06, 0x1b, 0x54, 0x74, 0xfe, 0x5c, 0x12, 0xb3, 0x4b, 0x8b, 0xfc, 0xea,
0x59, 0x13, 0x70, 0xac, 0x28, 0xd8, 0xfb, 0x33, 0x12, 0xa7, 0xcd, 0xfe, 0x6d, 0xd6, 0x20, 0x97,
0x1e, 0x5e, 0xd3, 0x28, 0x6c, 0xd2, 0xd1, 0x73, 0xcc, 0x95, 0x93, 0x47, 0x57, 0xd0, 0x1c, 0x3f,
0xc7, 0xd4, 0x7c, 0x29, 0xac, 0x54, 0x87, 0xba, 0x9e, 0x62, 0x7b, 0xcd, 0xa8, 0xc3, 0x5c, 0x52,
0x45, 0x61, 0xff, 0xa7, 0x05, 0x1f, 0x1d, 0x3a, 0x14, 0x8f, 0x61, 0x4b, 0xec, 0x67, 0xb7, 0xc4,
0x9d, 0x09, 0xb7, 0xc4, 0x81, 0x2e, 0x8c, 0xd8, 0x1e, 0xff, 0xce, 0x82, 0x05, 0x4d, 0xff, 0x18,
0xfa, 0xd9, 0x2a, 0xee, 0x05, 0x9b, 0xd6, 0xbb, 0x51, 0x1b, 0xe8, 0xd8, 0x07, 0xac, 0x63, 0xdc,
0x1f, 0x5b, 0x75, 0xe5, 0xeb, 0x84, 0x63, 0xfc, 0xaa, 0x7d, 0xa8, 0xb0, 0xba, 0x39, 0xa9, 0xdd,
0x76, 0x01, 0xd7, 0x88, 0x5c, 0x38, 0x0b, 0xa9, 0x75, 0x22, 0x8f, 0x7d, 0x26, 0x58, 0x48, 0xa3,
0x66, 0xea, 0xf9, 0x09, 0xdd, 0xa4, 0x3c, 0x11, 0xfa, 0xab, 0x21, 0x5c, 0x17, 0x70, 0xac, 0x28,
0xec, 0x1e, 0x2c, 0x65, 0x99, 0xaf, 0x93, 0x16, 0x0b, 0xde, 0xc6, 0xea, 0x23, 0x8d, 0x9b, 0x58,
0xab, 0xcd, 0xbe, 0x93, 0x7f, 0xa0, 0xb0, 0x2a, 0x11, 0x58, 0xd3, 0xd8, 0x7f, 0x66, 0xc1, 0x93,
0x43, 0x3a, 0x53, 0x60, 0xca, 0x23, 0xd5, 0x8b, 0x7f, 0xc4, 0x9b, 0x11, 0x8f, 0xb4, 0x1c, 0x19,
0x97, 0x18, 0x51, 0xcc, 0x3a, 0x07, 0x63, 0x89, 0xb7, 0xff, 0xdd, 0x82, 0x53, 0x59, 0x5d, 0x13,
0x74, 0x0d, 0x10, 0xef, 0xcc, 0xba, 0x9f, 0xb8, 0xe1, 0x3e, 0x89, 0x0f, 0x68, 0xcf, 0xb9, 0xd6,
0x67, 0x05, 0x27, 0xb4, 0x3a, 0x40, 0x81, 0x87, 0xb4, 0x42, 0xdf, 0x62, 0x89, 0x7d, 0x39, 0xda,
0xd2, 0x4c, 0x9a, 0x85, 0x99, 0x89, 0x9e, 0x49, 0xd3, 0x9d, 0x57, 0xf2, 0xb0, 0x29, 0xdc, 0xfe,
0x71, 0x19, 0xe6, 0x64, 0xf3, 0x75, 0xbf, 0xd5, 0xa2, 0xe3, 0xcd, 0xbc, 0xe4, 0x7c, 0x26, 0x88,
0xb9, 0xd0, 0x98, 0xe3, 0xe8, 0x78, 0xef, 0xf9, 0x81, 0x97, 0xcf, 0xd0, 0x5c, 0xf7, 0x03, 0x0f,
0x33, 0x4c, 0xf6, 0x09, 0x4b, 0xf9, 0xf8, 0x27, 0x2c, 0xca, 0x12, 0xa6, 0x1e, 0x14, 0xb0, 0xf0,
0x47, 0x17, 0xda, 0x6d, 0x31, 0x36, 0xfa, 0x5d, 0x8d, 0xc2, 0x26, 0x1d, 0xd5, 0xa4, 0xeb, 0xef,
0x13, 0xde, 0xa8, 0x92, 0xd5, 0x64, 0x53, 0x22, 0xb0, 0xa6, 0xa1, 0x9a, 0x78, 0x7e, 0xab, 0xc5,
0x5c, 0x07, 0x43, 0x13, 0x3a, 0x3a, 0x98, 0x61, 0x28, 0x45, 0x27, 0x0c, 0xf7, 0x84, 0xb7, 0xa0,
0x28, 0xae, 0x86, 0xe1, 0x1e, 0x66, 0x18, 0xb4, 0x05, 0x4f, 0x06, 0x61, 0xdc, 0x73, 0xba, 0xfe,
0x1b, 0xc4, 0x53, 0x52, 0x84, 0x97, 0xf0, 0x33, 0xa2, 0xc1, 0x93, 0xdb, 0x83, 0x24, 0x78, 0x58,
0x3b, 0x6a, 0x7e, 0x51, 0x4c, 0x3c, 0xdf, 0x4d, 0x4d, 0x6e, 0x90, 0x35, 0xbf, 0x9d, 0x01, 0x0a,
0x3c, 0xa4, 0x95, 0xfd, 0x1f, 0xec, 0x80, 0x1a, 0x51, 0x53, 0x57, 0xd4, 0xf4, 0xcb, 0xd9, 0x2c,
0x3f, 0x68, 0x0b, 0xd1, 0x06, 0x32, 0x35, 0x86, 0x81, 0xbc, 0x00, 0x73, 0x77, 0x92, 0x30, 0xd8,
0x09, 0xfd, 0x40, 0x95, 0xb6, 0x8b, 0x12, 0x94, 0x6b, 0xcd, 0x1b, 0xdb, 0x12, 0x8e, 0x33, 0x54,
0xf6, 0xbb, 0xd3, 0xf0, 0xb4, 0x2a, 0xc6, 0x20, 0xe9, 0xdd, 0x30, 0xde, 0xf3, 0x83, 0x36, 0xcb,
0x43, 0x7f, 0xdb, 0x82, 0x39, 0x6e, 0x28, 0xa2, 0x2a, 0x98, 0x57, 0x9b, 0xb8, 0x45, 0x94, 0x7d,
0x64, 0x24, 0xd5, 0x77, 0x0d, 0x29, 0xb9, 0x8a, 0x60, 0x13, 0x85, 0x33, 0xea, 0xa0, 0x37, 0x00,
0xe4, 0x23, 0xa3, 0x56, 0x11, 0xef, 0xac, 0xa4, 0x72, 0x98, 0xb4, 0xb4, 0x0b, 0xb6, 0xab, 0x24,
0x60, 0x43, 0x1a, 0x7a, 0xcb, 0x82, 0x4a, 0x97, 0x8f, 0x0a, 0x4f, 0xdf, 0x7d, 0xb9, 0xf8, 0x51,
0x31, 0xc7, 0x43, 0x1d, 0x6a, 0x62, 0x24, 0x84, 0x70, 0x84, 0x61, 0xc6, 0x0f, 0xda, 0x31, 0x49,
0x64, 0x06, 0xe1, 0x53, 0x86, 0x1b, 0x51, 0x77, 0xc3, 0x98, 0x30, 0xa7, 0x21, 0x74, 0xbc, 0x86,
0xd3, 0x75, 0x02, 0x97, 0xc4, 0x1b, 0x9c, 0x5c, 0xef, 0xef, 0x02, 0x80, 0x25, 0xa3, 0x81, 0x5a,
0xa6, 0xe9, 0x71, 0x6a, 0x99, 0xce, 0xbe, 0x04, 0x8b, 0x03, 0xd3, 0x78, 0x92, 0xa2, 0xeb, 0xb3,
0x9f, 0x85, 0xd9, 0x87, 0xad, 0xd7, 0x7e, 0x7f, 0x5a, 0x6f, 0xd2, 0xdb, 0xa1, 0xc7, 0x8a, 0x78,
0x62, 0x3d, 0x9b, 0xc2, 0xc3, 0x2a, 0xca, 0x36, 0x8c, 0x07, 0x29, 0x0a, 0x88, 0x4d, 0x79, 0xd4,
0x32, 0x23, 0x27, 0x26, 0xc1, 0x23, 0xb5, 0xcc, 0x1d, 0x25, 0x01, 0x1b, 0xd2, 0x10, 0xc9, 0x64,
0x95, 0xd7, 0x26, 0xcc, 0x2a, 0x53, 0x77, 0x6f, 0x68, 0x29, 0xef, 0x3b, 0x16, 0x2c, 0x04, 0x19,
0x7b, 0x15, 0xf9, 0xcc, 0x97, 0x0b, 0x5f, 0x08, 0xbc, 0x72, 0x31, 0x0b, 0xc3, 0x39, 0xe1, 0x68,
0x15, 0x4e, 0xc9, 0x19, 0xc8, 0x56, 0xf8, 0xa8, 0x58, 0x1b, 0x67, 0xd1, 0x38, 0x4f, 0x6f, 0x54,
0xe3, 0x55, 0x46, 0x55, 0xe3, 0xa1, 0x3d, 0x55, 0x78, 0x3b, 0x53, 0x6c, 0xe1, 0x2d, 0x0c, 0x16,
0xdd, 0xda, 0xdf, 0x2b, 0xc1, 0x69, 0xa9, 0xf5, 0x8d, 0x7d, 0x12, 0xc7, 0xbe, 0xc7, 0xce, 0x05,
0x8e, 0xd6, 0x0e, 0x96, 0x3a, 0x17, 0xae, 0x4a, 0x04, 0xd6, 0x34, 0xd4, 0xb3, 0xe3, 0x4e, 0x56,
0x92, 0xcf, 0x4f, 0x0b, 0xe7, 0x0d, 0x4b, 0x3c, 0x8d, 0xdc, 0x07, 0x2b, 0xd4, 0x4b, 0xd9, 0xc8,
0x7d, 0xac, 0x5a, 0xf2, 0xb7, 0x2d, 0x38, 0xb5, 0x97, 0xb9, 0x41, 0x93, 0xfb, 0xd3, 0x24, 0x05,
0xad, 0xd9, 0x3b, 0x39, 0x3d, 0xb3, 0x59, 0x78, 0x82, 0xf3, 0xa2, 0xed, 0xff, 0xb2, 0xc0, 0x5c,
0xac, 0xe3, 0x1d, 0xe2, 0xc6, 0x83, 0x93, 0xd2, 0x83, 0x1f, 0x9c, 0xa8, 0xf3, 0xbe, 0x3c, 0x9e,
0xbb, 0x37, 0x75, 0x02, 0x77, 0x6f, 0x7a, 0xa4, 0x83, 0xf0, 0x71, 0x28, 0xf7, 0x7d, 0x4f, 0x78,
0x6c, 0x3a, 0x2d, 0xbb, 0xb1, 0x8e, 0x29, 0xdc, 0xfe, 0xcb, 0x69, 0x1d, 0x9b, 0x89, 0xf4, 0xff,
0x4f, 0x45, 0xb7, 0x5b, 0xaa, 0x44, 0x81, 0xf7, 0x7c, 0x7b, 0xa0, 0x44, 0xe1, 0x97, 0x4f, 0x7e,
0xb3, 0xc3, 0x07, 0x68, 0x54, 0x85, 0xc2, 0xcc, 0x31, 0xd7, 0x3a, 0x77, 0xa0, 0x4a, 0x9d, 0x5a,
0x96, 0x5e, 0xa9, 0x66, 0x94, 0xaa, 0x5e, 0x15, 0xf0, 0xfb, 0x87, 0xcb, 0x9f, 0x3b, 0xb9, 0x5a,
0xb2, 0x35, 0x56, 0xfc, 0x51, 0x02, 0x35, 0xfa, 0x9b, 0xdd, 0x40, 0x09, 0x77, 0xf9, 0xa6, 0x5a,
0xfe, 0x12, 0x51, 0xc8, 0xf5, 0x96, 0x96, 0x83, 0x02, 0xa8, 0xb1, 0x87, 0x2c, 0x4c, 0x28, 0xf7,
0xaa, 0x77, 0xd4, 0x5d, 0x90, 0x44, 0xdc, 0x3f, 0x5c, 0x7e, 0xf1, 0xe4, 0x42, 0x55, 0x73, 0xac,
0x45, 0xd8, 0x1f, 0x96, 0xb5, 0xed, 0x8a, 0xca, 0x94, 0x9f, 0x0a, 0xdb, 0xbd, 0x98, 0xb3, 0xdd,
0xf3, 0x03, 0xb6, 0xbb, 0xa0, 0x1f, 0x7e, 0x64, 0xac, 0xf1, 0x71, 0x9e, 0x3b, 0x63, 0x84, 0x6f,
0xec, 0xb4, 0x7d, 0xbd, 0xef, 0xc7, 0x24, 0xd9, 0x89, 0xfb, 0x81, 0x1f, 0xb4, 0x99, 0x2d, 0x56,
0xcd, 0xd3, 0x36, 0x83, 0xc6, 0x79, 0x7a, 0xfb, 0xcf, 0x4b, 0x70, 0x2a, 0xf7, 0x10, 0x04, 0x3d,
0x0b, 0x55, 0xf9, 0xd2, 0x27, 0x9f, 0xd8, 0x54, 0x7f, 0x2c, 0xa0, 0x28, 0xd0, 0x57, 0x00, 0x3c,
0x12, 0x75, 0xc3, 0x03, 0x76, 0xe1, 0x38, 0x75, 0xe2, 0x0b, 0x47, 0xe5, 0x49, 0xad, 0x2b, 0x2e,
0xd8, 0xe0, 0x28, 0x0a, 0x53, 0xa6, 0x59, 0xf1, 0x4a, 0xae, 0x30, 0xc5, 0x28, 0x79, 0xac, 0x3c,
0xbe, 0x92, 0x47, 0xfb, 0x6f, 0x2d, 0xea, 0x10, 0xf0, 0xee, 0x6f, 0xc9, 0x64, 0xdf, 0x27, 0xa1,
0xe2, 0xf4, 0xd3, 0x4e, 0x38, 0x50, 0x25, 0xbe, 0xca, 0xa0, 0x58, 0x60, 0xd1, 0x26, 0x4c, 0x79,
0x34, 0x2a, 0x2e, 0x9d, 0x78, 0xa0, 0x74, 0x88, 0x4f, 0x63, 0x66, 0xc6, 0x05, 0x7d, 0x0c, 0xa6,
0x52, 0xa7, 0x2d, 0xaf, 0x38, 0xd9, 0x6d, 0xeb, 0xae, 0xd3, 0x4e, 0x30, 0x83, 0x9a, 0x9b, 0xe7,
0xd4, 0x31, 0xe5, 0x5d, 0xff, 0x32, 0x05, 0xf3, 0x99, 0x7b, 0xec, 0x8c, 0x15, 0x58, 0xc7, 0x5a,
0xc1, 0x33, 0x30, 0x1d, 0xc5, 0xfd, 0x80, 0x88, 0xf2, 0x04, 0xb5, 0x31, 0x50, 0x3b, 0x23, 0x98,
0xe3, 0xe8, 0x18, 0x79, 0xf1, 0x01, 0xee, 0x07, 0x22, 0xf3, 0xa7, 0xc6, 0x68, 0x9d, 0x41, 0xb1,
0xc0, 0xa2, 0xaf, 0xc2, 0x5c, 0xc2, 0x16, 0x60, 0xec, 0xa4, 0xa4, 0x2d, 0x1f, 0x07, 0x5e, 0x99,
0xf8, 0x21, 0x17, 0x67, 0xc7, 0x63, 0x28, 0x13, 0x82, 0x33, 0xe2, 0xd0, 0xd7, 0x2d, 0xf3, 0xf1,
0x5a, 0x65, 0xe2, 0x24, 0x75, 0xbe, 0x3e, 0x80, 0x5b, 0xd7, 0x83, 0xdf, 0xb0, 0x45, 0xca, 0xb2,
0x67, 0x1e, 0x81, 0x65, 0xc3, 0x90, 0x42, 0xde, 0xcf, 0x40, 0xad, 0xe7, 0x04, 0x7e, 0x8b, 0x24,
0x29, 0xff, 0x03, 0xa7, 0x1a, 0xff, 0x47, 0x89, 0x2d, 0x09, 0xc4, 0x1a, 0xcf, 0xfe, 0x1d, 0x8d,
0xf5, 0x8a, 0x7b, 0xb4, 0x35, 0xe3, 0xdf, 0xd1, 0x34, 0x18, 0x9b, 0x34, 0xf6, 0x9b, 0x16, 0x9c,
0x19, 0x3a, 0x12, 0x8f, 0x2d, 0x99, 0x43, 0x37, 0xbb, 0x27, 0x87, 0x14, 0x6b, 0xa0, 0xfd, 0x47,
0xf3, 0x58, 0x51, 0x94, 0x82, 0xcc, 0x8f, 0x9c, 0xe4, 0x93, 0x6d, 0xb4, 0x7a, 0xb3, 0x2b, 0x3f,
0xc6, 0xcd, 0xee, 0xaf, 0x2c, 0x30, 0x9e, 0xd2, 0xa2, 0x5f, 0x33, 0x4b, 0x91, 0xac, 0x42, 0x4a,
0x67, 0x38, 0x67, 0x55, 0xc7, 0xc4, 0xc7, 0x6b, 0x58, 0x59, 0x53, 0xde, 0xea, 0x4a, 0x63, 0x58,
0x5d, 0x87, 0xcf, 0x78, 0x4e, 0x86, 0xde, 0xae, 0xac, 0x07, 0x6c, 0x57, 0xcf, 0x42, 0x35, 0x21,
0xdd, 0x16, 0x3d, 0x96, 0xc5, 0xb6, 0xa6, 0xa6, 0xa7, 0x29, 0xe0, 0x58, 0x51, 0xd8, 0x3f, 0x16,
0x03, 0x25, 0x3c, 0xa5, 0x8b, 0xb9, 0x1a, 0xde, 0xf1, 0x9d, 0x8c, 0x03, 0x00, 0x57, 0x55, 0xf5,
0x17, 0xf0, 0x88, 0x55, 0x3f, 0x11, 0x30, 0x9f, 0x58, 0x4a, 0x18, 0x36, 0x84, 0x65, 0x0c, 0xb2,
0x7c, 0x9c, 0x41, 0xda, 0xff, 0x66, 0x41, 0x66, 0x1b, 0x45, 0x3d, 0x98, 0xa6, 0x1a, 0x1c, 0x14,
0xf0, 0x00, 0xc1, 0xe4, 0x4b, 0x8d, 0x55, 0xdc, 0x7b, 0xb1, 0x9f, 0x98, 0x4b, 0x41, 0xbe, 0x70,
0x90, 0xf8, 0x10, 0x5d, 0x2f, 0x48, 0x1a, 0xf5, 0xaf, 0xc4, 0xff, 0x18, 0x29, 0x4f, 0xcb, 0xbe,
0x08, 0x8b, 0x03, 0x1a, 0xb1, 0x6a, 0xd4, 0x50, 0xbe, 0xb7, 0x30, 0x8c, 0x88, 0x95, 0x16, 0x63,
0x8e, 0xb3, 0xbf, 0x63, 0xc1, 0xe9, 0x3c, 0x7b, 0xf4, 0x07, 0x16, 0x2c, 0x26, 0x79, 0x7e, 0x8f,
0x64, 0xd4, 0x54, 0xc2, 0x60, 0x00, 0x85, 0x07, 0x35, 0xb0, 0xbf, 0x5f, 0xe2, 0x36, 0xcc, 0xff,
0x5c, 0x4f, 0xed, 0xb9, 0xd6, 0xc8, 0x3d, 0x97, 0x2e, 0x11, 0xb7, 0x43, 0xbc, 0x7e, 0x77, 0xe0,
0x0e, 0xbc, 0x29, 0xe0, 0x58, 0x51, 0xb0, 0xbb, 0xbf, 0xbe, 0x28, 0x41, 0xcc, 0x99, 0xd7, 0xba,
0x80, 0x63, 0x45, 0x81, 0x5e, 0x80, 0x39, 0xa3, 0x93, 0x3c, 0x73, 0x21, 0x12, 0xa0, 0xc6, 0xf6,
0x95, 0xe0, 0x0c, 0x55, 0xee, 0x91, 0xd8, 0xf4, 0x71, 0x8f, 0xc4, 0xd8, 0x05, 0x3b, 0x7f, 0xb5,
0x23, 0x13, 0x4e, 0xfc, 0x82, 0x5d, 0xc0, 0xb0, 0xc2, 0xa2, 0x0b, 0x00, 0x3d, 0x27, 0xe8, 0x3b,
0x5d, 0x3a, 0x42, 0xa2, 0x62, 0x43, 0x2d, 0xa8, 0x2d, 0x85, 0xc1, 0x06, 0x15, 0x5d, 0x22, 0xf9,
0x27, 0x57, 0x99, 0xba, 0x0f, 0xeb, 0xd8, 0xba, 0x8f, 0x6c, 0x65, 0x42, 0x69, 0xac, 0xca, 0x04,
0xb3, 0x68, 0xa0, 0xfc, 0xc0, 0xa2, 0x81, 0x4f, 0xc0, 0xcc, 0x1e, 0x39, 0x30, 0xaa, 0x0b, 0xf8,
0xbf, 0x58, 0x71, 0x10, 0x96, 0x38, 0x64, 0x43, 0xc5, 0x75, 0x54, 0xe1, 0xd6, 0x1c, 0xf7, 0x1f,
0xd6, 0x56, 0x19, 0x91, 0xc0, 0x34, 0xea, 0xef, 0x7d, 0x78, 0xee, 0x89, 0x1f, 0x7c, 0x78, 0xee,
0x89, 0x0f, 0x3e, 0x3c, 0xf7, 0xc4, 0x9b, 0x47, 0xe7, 0xac, 0xf7, 0x8e, 0xce, 0x59, 0x3f, 0x38,
0x3a, 0x67, 0x7d, 0x70, 0x74, 0xce, 0xfa, 0xd7, 0xa3, 0x73, 0xd6, 0xef, 0xfd, 0xe8, 0xdc, 0x13,
0xaf, 0x56, 0xa5, 0xad, 0xfe, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x94, 0x79, 0xef, 0x1a,
0x59, 0x00, 0x00,
}
func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) {
@@ -4569,6 +4570,20 @@ func (m *Operation) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.Info) > 0 {
for iNdEx := len(m.Info) - 1; iNdEx >= 0; iNdEx-- {
{
size, err := m.Info[iNdEx].MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintGenerated(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x1a
}
}
{
size, err := m.InitiatedBy.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
@@ -7358,6 +7373,12 @@ func (m *Operation) Size() (n int) {
}
l = m.InitiatedBy.Size()
n += 1 + l + sovGenerated(uint64(l))
if len(m.Info) > 0 {
for _, e := range m.Info {
l = e.Size()
n += 1 + l + sovGenerated(uint64(l))
}
}
return n
}
@@ -8721,9 +8742,15 @@ func (this *Operation) String() string {
if this == nil {
return "nil"
}
repeatedStringForInfo := "[]*Info{"
for _, f := range this.Info {
repeatedStringForInfo += strings.Replace(f.String(), "Info", "Info", 1) + ","
}
repeatedStringForInfo += "}"
s := strings.Join([]string{`&Operation{`,
`Sync:` + strings.Replace(this.Sync.String(), "SyncOperation", "SyncOperation", 1) + `,`,
`InitiatedBy:` + strings.Replace(strings.Replace(this.InitiatedBy.String(), "OperationInitiator", "OperationInitiator", 1), `&`, ``, 1) + `,`,
`Info:` + repeatedStringForInfo + `,`,
`}`,
}, "")
return s
@@ -15699,6 +15726,40 @@ func (m *Operation) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 3:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthGenerated
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthGenerated
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Info = append(m.Info, &Info{})
if err := m.Info[len(m.Info)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:])

View File

@@ -487,6 +487,8 @@ message Operation {
optional SyncOperation sync = 1;
optional OperationInitiator initiatedBy = 2;
repeated Info info = 3;
}
// OperationInitiator holds information about the operation initiator

View File

@@ -1734,11 +1734,23 @@ func schema_pkg_apis_application_v1alpha1_Operation(ref common.ReferenceCallback
Ref: ref("github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1.OperationInitiator"),
},
},
"info": {
SchemaProps: spec.SchemaProps{
Type: []string{"array"},
Items: &spec.SchemaOrArray{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Ref: ref("github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1.Info"),
},
},
},
},
},
},
},
},
Dependencies: []string{
"github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1.OperationInitiator", "github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1.SyncOperation"},
"github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1.Info", "github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1.OperationInitiator", "github.com/argoproj/argo-cd/pkg/apis/application/v1alpha1.SyncOperation"},
}
}

View File

@@ -432,6 +432,7 @@ type OperationInitiator struct {
type Operation struct {
Sync *SyncOperation `json:"sync,omitempty" protobuf:"bytes,1,opt,name=sync"`
InitiatedBy OperationInitiator `json:"initiatedBy,omitempty" protobuf:"bytes,2,opt,name=initiatedBy"`
Info []*Info `json:"info,omitempty" protobuf:"bytes,3,name=info"`
}
// SyncOperationResource contains resources to sync.

View File

@@ -1011,6 +1011,17 @@ func (in *Operation) DeepCopyInto(out *Operation) {
(*in).DeepCopyInto(*out)
}
out.InitiatedBy = in.InitiatedBy
if in.Info != nil {
in, out := &in.Info, &out.Info
*out = make([]*Info, len(*in))
for i := range *in {
if (*in)[i] != nil {
in, out := &(*in)[i], &(*out)[i]
*out = new(Info)
**out = **in
}
}
}
return
}

View File

@@ -522,7 +522,7 @@ func (s *Server) Patch(ctx context.Context, q *application.ApplicationPatchReque
// Delete removes an application and all associated resources
func (s *Server) Delete(ctx context.Context, q *application.ApplicationDeleteRequest) (*application.ApplicationResponse, error) {
a, err := s.appclientset.ArgoprojV1alpha1().Applications(s.ns).Get(*q.Name, metav1.GetOptions{})
if err != nil && !apierr.IsNotFound(err) {
if err != nil {
return nil, err
}
@@ -565,7 +565,7 @@ func (s *Server) Delete(ctx context.Context, q *application.ApplicationDeleteReq
}
err = s.appclientset.ArgoprojV1alpha1().Applications(s.ns).Delete(*q.Name, &metav1.DeleteOptions{})
if err != nil && !apierr.IsNotFound(err) {
if err != nil {
return nil, err
}
s.logAppEvent(a, ctx, argo.EventReasonResourceDeleted, "deleted application")
@@ -1086,6 +1086,7 @@ func (s *Server) Sync(ctx context.Context, syncReq *application.ApplicationSyncR
Manifests: syncReq.Manifests,
},
InitiatedBy: appv1.OperationInitiator{Username: session.Username(ctx)},
Info: syncReq.Infos,
}
a, err = argo.SetAppOperation(appIf, *syncReq.Name, &op)
if err == nil {

View File

@@ -74,6 +74,7 @@ message ApplicationSyncRequest {
optional github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.SyncStrategy strategy = 5;
repeated github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.SyncOperationResource resources = 7 [(gogoproto.nullable) = false];
repeated string manifests = 8;
repeated github.com.argoproj.argo_cd.pkg.apis.application.v1alpha1.Info infos = 9;
}
// ApplicationUpdateSpecRequest is a request to update application spec

View File

@@ -16,12 +16,14 @@ import (
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
v1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes/fake"
kubetesting "k8s.io/client-go/testing"
k8scache "k8s.io/client-go/tools/cache"
"k8s.io/utils/pointer"
"github.com/argoproj/argo-cd/common"
"github.com/argoproj/argo-cd/pkg/apiclient/application"
@@ -308,6 +310,17 @@ func TestDeleteApp(t *testing.T) {
assert.True(t, deleted)
}
func TestDeleteApp_InvalidName(t *testing.T) {
appServer := newTestAppServer()
_, err := appServer.Delete(context.Background(), &application.ApplicationDeleteRequest{
Name: pointer.StringPtr("foo"),
})
if !assert.Error(t, err) {
return
}
assert.True(t, apierrors.IsNotFound(err))
}
func TestSyncAndTerminate(t *testing.T) {
ctx := context.Background()
appServer := newTestAppServer()

View File

@@ -123,7 +123,11 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
badge = svgWidthPattern.ReplaceAllString(badge, fmt.Sprintf(`<svg width="%d" $2`, svgWidthWithRevision))
badge = displayNonePattern.ReplaceAllString(badge, `display="inline"`)
badge = revisionRectColorPattern.ReplaceAllString(badge, fmt.Sprintf(`id="revisionRect" fill="%s" $2`, rightColorString))
badge = replaceFirstGroupSubMatch(revisionTextPattern, badge, fmt.Sprintf("(%s)", revision[:7]))
shortRevision := revision
if len(shortRevision) > 7 {
shortRevision = shortRevision[:7]
}
badge = replaceFirstGroupSubMatch(revisionTextPattern, badge, fmt.Sprintf("(%s)", shortRevision))
}
w.Header().Set("Content-Type", "image/svg+xml")

View File

@@ -111,6 +111,22 @@ func TestHandlerRevisionIsEnabledNoOperationState(t *testing.T) {
assert.NotContains(t, response, "(aa29b85)")
}
func TestHandlerRevisionIsEnabledShortCommitSHA(t *testing.T) {
app := testApp.DeepCopy()
app.Status.OperationState.SyncResult.Revision = "abc"
settingsMgr := settings.NewSettingsManager(context.Background(), fake.NewSimpleClientset(&argoCDCm, &argoCDSecret), "default")
handler := NewHandler(appclientset.NewSimpleClientset(app), settingsMgr, "default")
req, err := http.NewRequest("GET", "/api/badge?name=testApp&revision=true", nil)
assert.NoError(t, err)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
response := rr.Body.String()
assert.Contains(t, response, "(abc)")
}
func TestHandlerFeatureIsDisabled(t *testing.T) {
argoCDCmDisabled := argoCDCm.DeepCopy()

View File

@@ -1036,3 +1036,25 @@ func TestNotPermittedResources(t *testing.T) {
FailOnErr(KubeClientset.NetworkingV1beta1().Ingresses(ArgoCDNamespace).Get("sample-ingress", metav1.GetOptions{}))
FailOnErr(KubeClientset.CoreV1().Services(DeploymentNamespace()).Get("guestbook-ui", metav1.GetOptions{}))
}
func TestSyncWithInfos(t *testing.T) {
expectedInfo := make([]*Info, 2)
expectedInfo[0] = &Info{Name: "name1", Value: "val1"}
expectedInfo[1] = &Info{Name: "name2", Value: "val2"}
Given(t).
Path(guestbookPath).
When().
Create().
Then().
And(func(app *Application) {
_, err := RunCli("app", "sync", app.Name,
"--info", fmt.Sprintf("%s=%s", expectedInfo[0].Name, expectedInfo[0].Value),
"--info", fmt.Sprintf("%s=%s", expectedInfo[1].Name, expectedInfo[1].Value))
assert.NoError(t, err)
}).
Expect(SyncStatusIs(SyncStatusCodeSynced)).
And(func(app *Application) {
assert.ElementsMatch(t, app.Status.OperationState.Operation.Info, expectedInfo)
})
}

View File

@@ -9,4 +9,10 @@ if ! whoami &> /dev/null; then
fi
fi
exec "$@"
# If we're started as PID 1, we should wrap command execution through tini to
# prevent leakage of orphaned processes ("zombies").
if test "$$" = "1"; then
exec tini -- $@
else
exec "$@"
fi

View File

@@ -3,6 +3,7 @@ package oidc
import (
"encoding/json"
"fmt"
"html"
"html/template"
"net"
"net/http"
@@ -223,7 +224,8 @@ func (a *ClientApp) HandleCallback(w http.ResponseWriter, r *http.Request) {
}
log.Infof("Callback: %s", r.URL)
if errMsg := r.FormValue("error"); errMsg != "" {
http.Error(w, errMsg+": "+r.FormValue("error_description"), http.StatusBadRequest)
errorDesc := r.FormValue("error_description")
http.Error(w, html.EscapeString(errMsg)+": "+html.EscapeString(errorDesc), http.StatusBadRequest)
return
}
code := r.FormValue("code")

View File

@@ -3,12 +3,13 @@ package oidc
import (
"encoding/json"
"io/ioutil"
"net/http/httptest"
"net/url"
"testing"
"golang.org/x/oauth2"
gooidc "github.com/coreos/go-oidc"
"github.com/stretchr/testify/assert"
"golang.org/x/oauth2"
"github.com/argoproj/argo-cd/server/settings/oidc"
)
@@ -65,3 +66,33 @@ func TestIDTokenClaims(t *testing.T) {
assert.Equal(t, "{\"id_token\":{\"groups\":{\"essential\":true}}}", values.Get("claims"))
}
type fakeProvider struct {
}
func (p *fakeProvider) Endpoint() (*oauth2.Endpoint, error) {
return &oauth2.Endpoint{}, nil
}
func (p *fakeProvider) ParseConfig() (*OIDCConfiguration, error) {
return nil, nil
}
func (p *fakeProvider) Verify(_, _ string) (*gooidc.IDToken, error) {
return nil, nil
}
func TestHandleCallback(t *testing.T) {
app := ClientApp{provider: &fakeProvider{}}
req := httptest.NewRequest("GET", "http://example.com/foo", nil)
req.Form = url.Values{
"error": []string{"login-failed"},
"error_description": []string{"<script>alert('hello')</script>"},
}
w := httptest.NewRecorder()
app.HandleCallback(w, req)
assert.Equal(t, "login-failed: &lt;script&gt;alert(&#39;hello&#39;)&lt;/script&gt;\n", w.Body.String())
}