From 3d00875f9c50017fc581584a435e7bc092e58b67 Mon Sep 17 00:00:00 2001 From: Allen Zhong Date: Wed, 24 Feb 2021 11:28:49 +0800 Subject: [PATCH] *: use native embed package from Go 1.16 (#1151) * cluster: use native embed from Go 1.16 * doc: update dev doc * cluster: update template reading * ci: remove reprotest 1.13 * ci: fix tests Co-authored-by: Ti Chi Robot <71242396+ti-chi-bot@users.noreply.github.com> --- .github/workflows/install.yaml | 21 ++- .github/workflows/reprotest.yaml | 19 ++- Makefile | 3 - doc/dev/README.md | 34 +++-- embed/embed.go | 13 ++ {pkg/cluster/embed => embed}/embed_test.go | 12 +- .../templates}/config/alertmanager.yml | 0 .../templates}/config/blackbox.yml | 0 .../templates}/config/dashboard.yml.tpl | 0 .../templates}/config/datasource.yml.tpl | 0 .../templates}/config/grafana.ini.tpl | 0 .../templates}/config/prometheus.yml.tpl | 0 .../templates}/config/spark-defaults.conf.tpl | 0 .../config/spark-log4j.properties.tpl | 0 .../scripts/run_alertmanager.sh.tpl | 0 .../scripts/run_blackbox_exporter.sh.tpl | 0 .../templates}/scripts/run_cdc.sh.tpl | 0 .../templates}/scripts/run_dm-master.sh.tpl | 0 .../scripts/run_dm-master_scale.sh.tpl | 0 .../templates}/scripts/run_dm-worker.sh.tpl | 0 .../templates}/scripts/run_drainer.sh.tpl | 0 .../templates}/scripts/run_grafana.sh.tpl | 0 .../scripts/run_node_exporter.sh.tpl | 0 .../templates}/scripts/run_pd.sh.tpl | 0 .../templates}/scripts/run_pd_scale.sh.tpl | 0 .../templates}/scripts/run_prometheus.sh.tpl | 0 .../templates}/scripts/run_pump.sh.tpl | 0 .../templates}/scripts/run_tidb.sh.tpl | 0 .../templates}/scripts/run_tiflash.sh.tpl | 0 .../templates}/scripts/run_tikv.sh.tpl | 0 .../templates}/scripts/spark-env.sh.tpl | 0 .../scripts/start_tispark_slave.sh.tpl | 0 .../templates}/systemd/system.service.tpl | 0 .../templates}/systemd/tispark.service.tpl | 0 go.mod | 4 +- go.sum | 10 -- pkg/cluster/embed/autogen_pkger.go | 47 ------ pkg/cluster/embed/embed.go | 15 -- pkg/cluster/embed/pkged.go | 12 -- pkg/cluster/template/config/alertmanager.go | 4 +- pkg/cluster/template/config/blackbox.go | 4 +- pkg/cluster/template/config/config.go | 4 +- pkg/cluster/template/config/dashboard.go | 4 +- pkg/cluster/template/config/datasource.go | 4 +- pkg/cluster/template/config/grafana.go | 4 +- pkg/cluster/template/config/prometheus.go | 4 +- pkg/cluster/template/config/tispark.go | 4 +- pkg/cluster/template/scripts/alertmanager.go | 4 +- .../template/scripts/blackbox_exporter.go | 4 +- pkg/cluster/template/scripts/cdc.go | 4 +- pkg/cluster/template/scripts/dm_master.go | 6 +- pkg/cluster/template/scripts/dm_worker.go | 4 +- pkg/cluster/template/scripts/drainer.go | 4 +- pkg/cluster/template/scripts/grafana.go | 4 +- pkg/cluster/template/scripts/node_exporter.go | 4 +- pkg/cluster/template/scripts/pd.go | 6 +- pkg/cluster/template/scripts/prometheus.go | 4 +- pkg/cluster/template/scripts/pump.go | 4 +- pkg/cluster/template/scripts/scripts.go | 4 +- pkg/cluster/template/scripts/tidb.go | 4 +- pkg/cluster/template/scripts/tiflash.go | 4 +- pkg/cluster/template/scripts/tikv.go | 4 +- pkg/cluster/template/systemd/system.go | 4 +- pkg/cluster/template/systemd/tispark.go | 4 +- tools/pkger/main.go | 141 ------------------ 65 files changed, 117 insertions(+), 318 deletions(-) create mode 100644 embed/embed.go rename {pkg/cluster/embed => embed}/embed_test.go (71%) rename {templates => embed/templates}/config/alertmanager.yml (100%) rename {templates => embed/templates}/config/blackbox.yml (100%) rename {templates => embed/templates}/config/dashboard.yml.tpl (100%) rename {templates => embed/templates}/config/datasource.yml.tpl (100%) rename {templates => embed/templates}/config/grafana.ini.tpl (100%) rename {templates => embed/templates}/config/prometheus.yml.tpl (100%) rename {templates => embed/templates}/config/spark-defaults.conf.tpl (100%) rename {templates => embed/templates}/config/spark-log4j.properties.tpl (100%) rename {templates => embed/templates}/scripts/run_alertmanager.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_blackbox_exporter.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_cdc.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_dm-master.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_dm-master_scale.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_dm-worker.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_drainer.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_grafana.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_node_exporter.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_pd.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_pd_scale.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_prometheus.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_pump.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_tidb.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_tiflash.sh.tpl (100%) rename {templates => embed/templates}/scripts/run_tikv.sh.tpl (100%) rename {templates => embed/templates}/scripts/spark-env.sh.tpl (100%) rename {templates => embed/templates}/scripts/start_tispark_slave.sh.tpl (100%) rename {templates => embed/templates}/systemd/system.service.tpl (100%) rename {templates => embed/templates}/systemd/tispark.service.tpl (100%) delete mode 100644 pkg/cluster/embed/autogen_pkger.go delete mode 100644 pkg/cluster/embed/embed.go delete mode 100644 pkg/cluster/embed/pkged.go delete mode 100644 tools/pkger/main.go diff --git a/.github/workflows/install.yaml b/.github/workflows/install.yaml index 2cc36c5ec9..f04fad6d89 100644 --- a/.github/workflows/install.yaml +++ b/.github/workflows/install.yaml @@ -18,45 +18,54 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} path: go/src/github.com/${{ github.repository }} - - name: Build TiUP - working-directory: ${{ env.working-directory }} - run: make build + - name: Install And Check working-directory: ${{ env.working-directory }} run: | sh install.sh source ~/.profile which tiup || (echo "no tiup found" && exit 1) - cp ./bin/tiup $(which tiup) ! tiup update --self | grep -i "WARN: adding root certificate" tiup --version + local_install: name: Local Install runs-on: ubuntu-latest env: working-directory: ${{ github.workspace }}/go/src/github.com/${{ github.repository }} steps: + - name: Set up Go 1.16 + uses: actions/setup-go@v2 + with: + go-version: 1.16 + id: go + - name: Check out code into the Go module directory uses: actions/checkout@v2 with: ref: ${{ github.event.pull_request.head.sha }} path: go/src/github.com/${{ github.repository }} + - name: Build TiUP working-directory: ${{ env.working-directory }} - run: make build + run: make tiup + - name: Setup TiUP run: | mkdir -p ~/.tiup/bin curl https://tiup-mirrors.pingcap.com/root.json -o ~/.tiup/bin/root.json + - name: Clone Mirror working-directory: ${{ env.working-directory }} run: ./bin/tiup mirror clone test-mirror + - name: Local Install And Check working-directory: ${{ env.working-directory }}/test-mirror run: | sh local_install.sh source ~/.profile which tiup || (echo "no tiup found" && exit 1) + tiup --version cp ../bin/tiup $(which tiup) - ! tiup update --self | grep -i "WARN: adding root certificate" + ! tiup list | grep -i "WARN: adding root certificate" tiup --version diff --git a/.github/workflows/reprotest.yaml b/.github/workflows/reprotest.yaml index 21cb43542e..e24ab5c7cd 100644 --- a/.github/workflows/reprotest.yaml +++ b/.github/workflows/reprotest.yaml @@ -22,7 +22,6 @@ jobs: strategy: matrix: go: - - 1.13 - 1.16 # Steps represent a sequence of tasks that will be executed as part of the job @@ -34,8 +33,20 @@ jobs: with: go-version: ${{ matrix.go }} - - name: Install reprotest - run: sudo apt-get update && sudo apt-get -qy install reprotest + - name: Install reprotest and prepare + id: prepare_env + run: | + echo ::set-output name=GOROOT::$GOROOT + echo ::set-output name=GOPATH::$GOPATH + sudo apt-get update && sudo apt-get -qy install reprotest - name: Check for reproducible build - run: sudo reprotest "make clean && BUILD_FLAG='-trimpath -buildmode=pie' make build" bin + run: | + sudo reprotest \ + "make clean && \ + GOROOT=${{ steps.prepare_env.GOROOT }} \ + GOPATH=${{ steps.prepare_env.GOPATH }} \ + PATH=$GOROOT/bin:$PATH \ + BUILD_FLAG='-trimpath -buildmode=pie' \ + make build" \ + bin diff --git a/Makefile b/Makefile index 5dede57630..d0b4f58eb2 100644 --- a/Makefile +++ b/Makefile @@ -106,9 +106,6 @@ failpoint-disable: tools/bin/failpoint-ctl tools/bin/failpoint-ctl: go.mod $(GO) build -o $@ github.com/pingcap/failpoint/failpoint-ctl -pkger: - $(GO) run tools/pkger/main.go -s templates -d pkg/cluster/embed - fmt: @echo "gofmt (simplify)" @gofmt -s -l -w $(FILES) 2>&1 diff --git a/doc/dev/README.md b/doc/dev/README.md index 77d1e88fdb..45ff3e742b 100644 --- a/doc/dev/README.md +++ b/doc/dev/README.md @@ -2,56 +2,58 @@ ## Building -You can build TiUp on any platform that supports Go. +You can build TiUP on any platform that supports Go. Prerequisites: -* Go (minimum version: 1.13; [installation instructions](https://golang.org/doc/install)) +* Go (minimum version: 1.16; [installation instructions](https://golang.org/doc/install)) * golint (`go get -u golang.org/x/lint/golint`) * make -To build TiUp, run `make`. +To build TiUP, run `make`. ## Running locally for development -For development, you don't want to use any global directories. You may also want to supply your own metadata. TiUp can be modified using the following environment variables: +For development, you don't want to use any global directories. You may also want to supply your own metadata. TiUP can be modified using the following environment variables: -* `TIUP_HOME` the profile directory, where TiUp stores its metadata. If not set, `~/.tiup` will be used. -* `TIUP_MIRRORS` set the location of TiUp's registry, can be a directory or URL. If not set, `https://tiup-mirrors.pingcap.com` will be used. +* `TIUP_HOME` the profile directory, where TiUP stores its metadata. If not set, `~/.tiup` will be used. +* `TIUP_MIRRORS` set the location of TiUP's registry, can be a directory or URL. If not set, `https://tiup-mirrors.pingcap.com` will be used. > **Note** > TiUP need a certificate file (root.json) installed in `${TIUP_HOME}/bin` directory. If this is your first time getting TiUP, you can run `curl https://tiup-mirrors.pingcap.com/root.json -o ${TIUP_HOME}/bin/root.json` to get it installed. ## Testing -TiUp has unit and integration tests; you can run both by running `make test`. +TiUP has unit and integration tests; you can run unit tests by running `make test`. Unit tests are alongside the code they test, following the Go convention of using a `_test` suffix for test files. Integration tests are in the [tests](tests) directory. ## Architecture overview -Each TiUp command has its own executable, their source is in the [cmd](cmd) directory. The main TiUp executable is [root.go](cmd/root.go). +Each TiUP command has its own executable, their source is in the [cmd](cmd) directory. The main TiUP executable is [root.go](cmd/root.go). -The core of TiUp is defined in the [pkg](pkg) directory. +The core of TiUP is defined in the [pkg](pkg) directory. -[localdata](pkg/localdata) manages TiUp's metadata held on the user's computer. +[localdata](pkg/localdata) manages TiUP's metadata held on the user's computer. [meta](pkg/meta) contains high-level functions for managing components. [repository](pkg/repository) handles remote repositories. -The [set](pkg/set), [tui](pkg/tui), and [utils](pkg/utils) packages contain utility types and functions. The [version](pkg/version) package contains version data for TiUp and utility functions for handling that data. +The [set](pkg/set), [tui](pkg/tui), and [utils](pkg/utils) packages contain utility types and functions. The [version](pkg/version) package contains version data for TiUP and utility functions for handling that data. The [mock](pkg/mock) package is a utility for testing. +[embed](embed) contains static files used by builtin components (mainly `cluster` as of now), the template files are in [embed/templates](embed/templates) directory. + Some key concepts: -* *Repository* a source of components and metadata concerning those components and TiUp in general. -* *Profile* the state of an installation of TiUp and the components it manages. -* *Component* a piece of software that can be managed by TiUp, e.g., TiDB or the playground. -* *Command* a top-level command run by TiUp, e.g., `update`, `list`. +* *Repository* a source of components and metadata concerning those components and TiUP in general. +* *Profile* the state of an installation of TiUP and the components it manages. +* *Component* a piece of software that can be managed by TiUP, e.g., TiDB or the playground. +* *Command* a top-level command run by TiUP, e.g., `update`, `list`. -### TiUp registry structure +### TiUP registry structure * tiup-manifest.index: the manifest file in json format. * Manifests for each component named tiup-component-$name.index, where %name is the name of the component. diff --git a/embed/embed.go b/embed/embed.go new file mode 100644 index 0000000000..8e149bad25 --- /dev/null +++ b/embed/embed.go @@ -0,0 +1,13 @@ +package embed + +import ( + goembed "embed" +) + +//go:embed templates +var embededFiles goembed.FS + +// ReadFile read the file embed. +func ReadFile(path string) ([]byte, error) { + return embededFiles.ReadFile(path) +} diff --git a/pkg/cluster/embed/embed_test.go b/embed/embed_test.go similarity index 71% rename from pkg/cluster/embed/embed_test.go rename to embed/embed_test.go index e7ec368901..b118e4eff9 100644 --- a/pkg/cluster/embed/embed_test.go +++ b/embed/embed_test.go @@ -4,7 +4,6 @@ import ( "io/ioutil" "os" "path/filepath" - "strings" "testing" "github.com/pingcap/check" @@ -38,23 +37,18 @@ func getAllFilePaths(dir string) (paths []string, err error) { } // Test can read all file in /templates -// If files in /templates changed, you may need run `make pkger` to regenerate the autogen_pkger.go func (s *embedSuite) TestCanReadTemplates(c *check.C) { - root, err := filepath.Abs("../../../") - c.Assert(err, check.IsNil) - - paths, err := getAllFilePaths(filepath.Join(root, "templates")) + paths, err := getAllFilePaths("templates") c.Assert(err, check.IsNil) c.Assert(len(paths), check.Greater, 0) for _, path := range paths { - embedPath := strings.TrimPrefix(path, root) - c.Log("check file: ", path, " ", embedPath) + c.Log("check file: ", path) data, err := ioutil.ReadFile(path) c.Assert(err, check.IsNil) - embedData, err := ReadFile(embedPath) + embedData, err := ReadFile(path) c.Assert(err, check.IsNil) c.Assert(embedData, check.BytesEquals, data) diff --git a/templates/config/alertmanager.yml b/embed/templates/config/alertmanager.yml similarity index 100% rename from templates/config/alertmanager.yml rename to embed/templates/config/alertmanager.yml diff --git a/templates/config/blackbox.yml b/embed/templates/config/blackbox.yml similarity index 100% rename from templates/config/blackbox.yml rename to embed/templates/config/blackbox.yml diff --git a/templates/config/dashboard.yml.tpl b/embed/templates/config/dashboard.yml.tpl similarity index 100% rename from templates/config/dashboard.yml.tpl rename to embed/templates/config/dashboard.yml.tpl diff --git a/templates/config/datasource.yml.tpl b/embed/templates/config/datasource.yml.tpl similarity index 100% rename from templates/config/datasource.yml.tpl rename to embed/templates/config/datasource.yml.tpl diff --git a/templates/config/grafana.ini.tpl b/embed/templates/config/grafana.ini.tpl similarity index 100% rename from templates/config/grafana.ini.tpl rename to embed/templates/config/grafana.ini.tpl diff --git a/templates/config/prometheus.yml.tpl b/embed/templates/config/prometheus.yml.tpl similarity index 100% rename from templates/config/prometheus.yml.tpl rename to embed/templates/config/prometheus.yml.tpl diff --git a/templates/config/spark-defaults.conf.tpl b/embed/templates/config/spark-defaults.conf.tpl similarity index 100% rename from templates/config/spark-defaults.conf.tpl rename to embed/templates/config/spark-defaults.conf.tpl diff --git a/templates/config/spark-log4j.properties.tpl b/embed/templates/config/spark-log4j.properties.tpl similarity index 100% rename from templates/config/spark-log4j.properties.tpl rename to embed/templates/config/spark-log4j.properties.tpl diff --git a/templates/scripts/run_alertmanager.sh.tpl b/embed/templates/scripts/run_alertmanager.sh.tpl similarity index 100% rename from templates/scripts/run_alertmanager.sh.tpl rename to embed/templates/scripts/run_alertmanager.sh.tpl diff --git a/templates/scripts/run_blackbox_exporter.sh.tpl b/embed/templates/scripts/run_blackbox_exporter.sh.tpl similarity index 100% rename from templates/scripts/run_blackbox_exporter.sh.tpl rename to embed/templates/scripts/run_blackbox_exporter.sh.tpl diff --git a/templates/scripts/run_cdc.sh.tpl b/embed/templates/scripts/run_cdc.sh.tpl similarity index 100% rename from templates/scripts/run_cdc.sh.tpl rename to embed/templates/scripts/run_cdc.sh.tpl diff --git a/templates/scripts/run_dm-master.sh.tpl b/embed/templates/scripts/run_dm-master.sh.tpl similarity index 100% rename from templates/scripts/run_dm-master.sh.tpl rename to embed/templates/scripts/run_dm-master.sh.tpl diff --git a/templates/scripts/run_dm-master_scale.sh.tpl b/embed/templates/scripts/run_dm-master_scale.sh.tpl similarity index 100% rename from templates/scripts/run_dm-master_scale.sh.tpl rename to embed/templates/scripts/run_dm-master_scale.sh.tpl diff --git a/templates/scripts/run_dm-worker.sh.tpl b/embed/templates/scripts/run_dm-worker.sh.tpl similarity index 100% rename from templates/scripts/run_dm-worker.sh.tpl rename to embed/templates/scripts/run_dm-worker.sh.tpl diff --git a/templates/scripts/run_drainer.sh.tpl b/embed/templates/scripts/run_drainer.sh.tpl similarity index 100% rename from templates/scripts/run_drainer.sh.tpl rename to embed/templates/scripts/run_drainer.sh.tpl diff --git a/templates/scripts/run_grafana.sh.tpl b/embed/templates/scripts/run_grafana.sh.tpl similarity index 100% rename from templates/scripts/run_grafana.sh.tpl rename to embed/templates/scripts/run_grafana.sh.tpl diff --git a/templates/scripts/run_node_exporter.sh.tpl b/embed/templates/scripts/run_node_exporter.sh.tpl similarity index 100% rename from templates/scripts/run_node_exporter.sh.tpl rename to embed/templates/scripts/run_node_exporter.sh.tpl diff --git a/templates/scripts/run_pd.sh.tpl b/embed/templates/scripts/run_pd.sh.tpl similarity index 100% rename from templates/scripts/run_pd.sh.tpl rename to embed/templates/scripts/run_pd.sh.tpl diff --git a/templates/scripts/run_pd_scale.sh.tpl b/embed/templates/scripts/run_pd_scale.sh.tpl similarity index 100% rename from templates/scripts/run_pd_scale.sh.tpl rename to embed/templates/scripts/run_pd_scale.sh.tpl diff --git a/templates/scripts/run_prometheus.sh.tpl b/embed/templates/scripts/run_prometheus.sh.tpl similarity index 100% rename from templates/scripts/run_prometheus.sh.tpl rename to embed/templates/scripts/run_prometheus.sh.tpl diff --git a/templates/scripts/run_pump.sh.tpl b/embed/templates/scripts/run_pump.sh.tpl similarity index 100% rename from templates/scripts/run_pump.sh.tpl rename to embed/templates/scripts/run_pump.sh.tpl diff --git a/templates/scripts/run_tidb.sh.tpl b/embed/templates/scripts/run_tidb.sh.tpl similarity index 100% rename from templates/scripts/run_tidb.sh.tpl rename to embed/templates/scripts/run_tidb.sh.tpl diff --git a/templates/scripts/run_tiflash.sh.tpl b/embed/templates/scripts/run_tiflash.sh.tpl similarity index 100% rename from templates/scripts/run_tiflash.sh.tpl rename to embed/templates/scripts/run_tiflash.sh.tpl diff --git a/templates/scripts/run_tikv.sh.tpl b/embed/templates/scripts/run_tikv.sh.tpl similarity index 100% rename from templates/scripts/run_tikv.sh.tpl rename to embed/templates/scripts/run_tikv.sh.tpl diff --git a/templates/scripts/spark-env.sh.tpl b/embed/templates/scripts/spark-env.sh.tpl similarity index 100% rename from templates/scripts/spark-env.sh.tpl rename to embed/templates/scripts/spark-env.sh.tpl diff --git a/templates/scripts/start_tispark_slave.sh.tpl b/embed/templates/scripts/start_tispark_slave.sh.tpl similarity index 100% rename from templates/scripts/start_tispark_slave.sh.tpl rename to embed/templates/scripts/start_tispark_slave.sh.tpl diff --git a/templates/systemd/system.service.tpl b/embed/templates/systemd/system.service.tpl similarity index 100% rename from templates/systemd/system.service.tpl rename to embed/templates/systemd/system.service.tpl diff --git a/templates/systemd/tispark.service.tpl b/embed/templates/systemd/tispark.service.tpl similarity index 100% rename from templates/systemd/tispark.service.tpl rename to embed/templates/systemd/tispark.service.tpl diff --git a/go.mod b/go.mod index 4daedec067..5619cb95f1 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/pingcap/tiup -go 1.13 +go 1.16 require ( github.com/AstroProfundis/sysinfo v0.0.0-20210201035811-eb96b87c86b3 @@ -28,7 +28,6 @@ require ( github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a github.com/lunixbochs/vtclean v1.0.0 // indirect github.com/magiconair/properties v1.8.4 - github.com/markbates/pkger v0.17.1 github.com/mattn/go-runewidth v0.0.10 github.com/otiai10/copy v1.4.2 github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712 @@ -51,7 +50,6 @@ require ( github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.7.0 github.com/tikv/pd v1.1.0-beta.0.20210105064748-f4e7924b50b6 - github.com/tj/assert v0.0.0-20190920132354-ee03d75cd160 github.com/tj/go-termd v0.0.2-0.20200115111609-7f6aeb166380 github.com/xo/usql v0.7.8 go.etcd.io/etcd v0.5.0-alpha.5.0.20200824191128-ae9734ed278b diff --git a/go.sum b/go.sum index a9adb7281d..e38688c765 100644 --- a/go.sum +++ b/go.sum @@ -241,7 +241,6 @@ github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs github.com/cznic/parser v0.0.0-20160622100904-31edd927e5b1/go.mod h1:2B43mz36vGZNZEwkWi8ayRSSUXLfjL8OkbzwW4NcPMM= github.com/cznic/sortutil v0.0.0-20181122101858-f5f958428db8/go.mod h1:q2w6Bg5jeox1B+QkJ6Wp/+Vn0G/bo3f1uY7Fn3vivIQ= github.com/cznic/strutil v0.0.0-20171016134553-529a34b1c186/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= -github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 h1:MZRmHqDBd0vxNwenEbKSQqRVT24d3C05ft8kduSwlqM= github.com/cznic/strutil v0.0.0-20181122101858-275e90344537/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= github.com/cznic/y v0.0.0-20170802143616-045f81c6662a/go.mod h1:1rk5VM7oSnA4vjp+hrLQ3HWHa+Y4yPCa3/CsJrcNnvs= github.com/daaku/go.zipexe v1.0.0/go.mod h1:z8IiR6TsVLEYKwXAoE/I+8ys/sDkgTzSL0CLnGVd57E= @@ -290,12 +289,9 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= @@ -406,8 +402,6 @@ github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= -github.com/gobuffalo/here v0.6.0 h1:hYrd0a6gDmWxBM4TnrGw8mQg24iSVoIkHEk7FodQcBI= -github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= @@ -708,8 +702,6 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/pkger v0.17.1 h1:/MKEtWqtc0mZvu9OinB9UzVN9iYCwLWuyUv4Bw+PCno= -github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-adodb v0.0.1/go.mod h1:jaSTRde4bohMuQgYQPxW3xRTPtX/cZKyxPrFVseJULo= @@ -846,7 +838,6 @@ github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh github.com/otiai10/copy v1.4.2 h1:RTiz2sol3eoXPLF4o+YWqEybwfUa/Q2Nkc4ZIUs3fwI= github.com/otiai10/copy v1.4.2/go.mod h1:XWfuS3CrI0R6IE0FbgHsEazaXO8G0LpMp9o8tos0x4E= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0 h1:TJIWdbX0B+kpNagQrjgq8bCMrbhiuX73M2XwgtDMoOI= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= github.com/otiai10/mint v1.3.2 h1:VYWnrP5fXmz1MXvjuUvcBrXSjGE6xjON+axB/UrpO3E= @@ -924,7 +915,6 @@ github.com/pingcap/go-tpc v1.0.4 h1:17gdQ+hkmbLD88575a8QcVRyKFKj6r93yqc1NQ8QYuo= github.com/pingcap/go-tpc v1.0.4/go.mod h1:KU/Cs2kFYOr5/hQoRN1w20VccYHThipZiZfbPRPvL2s= github.com/pingcap/go-ycsb v0.0.0-20210129115622-04d8656123e4 h1:dZgE6OnunTz0+ey2n7dzcKDTRdGFzHJvW6KI5iX7ibc= github.com/pingcap/go-ycsb v0.0.0-20210129115622-04d8656123e4/go.mod h1:B9UJ3Lbpk4r+qFNDAeS2l6ORGkVaVwMPO1mSqDXiNQc= -github.com/pingcap/gofail v0.0.0-20181217135706-6a951c1e42c3 h1:04yuCf5NMvLU8rB2m4Qs3rynH7EYpMno3lHkewIOdMo= github.com/pingcap/gofail v0.0.0-20181217135706-6a951c1e42c3/go.mod h1:DazNTg0PTldtpsQiT9I5tVJwV1onHMKBBgXzmJUlMns= github.com/pingcap/goleveldb v0.0.0-20171020122428-b9ff6c35079e/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= diff --git a/pkg/cluster/embed/autogen_pkger.go b/pkg/cluster/embed/autogen_pkger.go deleted file mode 100644 index fb25f27c14..0000000000 --- a/pkg/cluster/embed/autogen_pkger.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package embed - -var autogenFiles = map[string]string{} - -func init() { - autogenFiles["/templates/config/alertmanager.yml"] = "Z2xvYmFsOgogICMgVGhlIHNtYXJ0aG9zdCBhbmQgU01UUCBzZW5kZXIgdXNlZCBmb3IgbWFpbCBub3RpZmljYXRpb25zLgogIHNtdHBfc21hcnRob3N0OiAibG9jYWxob3N0OjI1IgogIHNtdHBfZnJvbTogImFsZXJ0bWFuYWdlckBleGFtcGxlLm9yZyIKICBzbXRwX2F1dGhfdXNlcm5hbWU6ICJhbGVydG1hbmFnZXIiCiAgc210cF9hdXRoX3Bhc3N3b3JkOiAicGFzc3dvcmQiCiAgIyBzbXRwX3JlcXVpcmVfdGxzOiB0cnVlCgogICMgVGhlIFNsYWNrIHdlYmhvb2sgVVJMLgogICMgc2xhY2tfYXBpX3VybDogJycKCnJvdXRlOgogICMgQSBkZWZhdWx0IHJlY2VpdmVyCiAgcmVjZWl2ZXI6ICJkYi1hbGVydC1lbWFpbCIKCiAgIyBUaGUgbGFiZWxzIGJ5IHdoaWNoIGluY29taW5nIGFsZXJ0cyBhcmUgZ3JvdXBlZCB0b2dldGhlci4gRm9yIGV4YW1wbGUsCiAgIyBtdWx0aXBsZSBhbGVydHMgY29taW5nIGluIGZvciBjbHVzdGVyPUEgYW5kIGFsZXJ0bmFtZT1MYXRlbmN5SGlnaCB3b3VsZAogICMgYmUgYmF0Y2hlZCBpbnRvIGEgc2luZ2xlIGdyb3VwLgogIGdyb3VwX2J5OiBbImVudiIsICJpbnN0YW5jZSIsICJhbGVydG5hbWUiLCAidHlwZSIsICJncm91cCIsICJqb2IiXQoKICAjIFdoZW4gYSBuZXcgZ3JvdXAgb2YgYWxlcnRzIGlzIGNyZWF0ZWQgYnkgYW4gaW5jb21pbmcgYWxlcnQsIHdhaXQgYXQKICAjIGxlYXN0ICdncm91cF93YWl0JyB0byBzZW5kIHRoZSBpbml0aWFsIG5vdGlmaWNhdGlvbi4KICAjIFRoaXMgd2F5IGVuc3VyZXMgdGhhdCB5b3UgZ2V0IG11bHRpcGxlIGFsZXJ0cyBmb3IgdGhlIHNhbWUgZ3JvdXAgdGhhdCBzdGFydAogICMgZmlyaW5nIHNob3J0bHkgYWZ0ZXIgYW5vdGhlciBhcmUgYmF0Y2hlZCB0b2dldGhlciBvbiB0aGUgZmlyc3QKICAjIG5vdGlmaWNhdGlvbi4KICBncm91cF93YWl0OiAzMHMKCiAgIyBXaGVuIHRoZSBmaXJzdCBub3RpZmljYXRpb24gd2FzIHNlbnQsIHdhaXQgJ2dyb3VwX2ludGVydmFsJyB0byBzZW5kIGEgYmF0Y2gKICAjIG9mIG5ldyBhbGVydHMgdGhhdCBzdGFydGVkIGZpcmluZyBmb3IgdGhhdCBncm91cC4KICBncm91cF9pbnRlcnZhbDogM20KCiAgIyBJZiBhbiBhbGVydCBoYXMgc3VjY2Vzc2Z1bGx5IGJlZW4gc2VudCwgd2FpdCAncmVwZWF0X2ludGVydmFsJyB0bwogICMgcmVzZW5kIHRoZW0uCiAgcmVwZWF0X2ludGVydmFsOiAzbQoKICByb3V0ZXM6CiAgIyAtIG1hdGNoOgogICMgICByZWNlaXZlcjogd2ViaG9vay1rYWZrYS1hZGFwdGVyCiAgIyAgIGNvbnRpbnVlOiB0cnVlCiAgIyAtIG1hdGNoOgogICMgICAgIGVudjogdGVzdC1jbHVzdGVyCiAgIyAgIHJlY2VpdmVyOiBkYi1hbGVydC1zbGFjawogICMgLSBtYXRjaDoKICAjICAgICBlbnY6IHRlc3QtY2x1c3RlcgogICMgICByZWNlaXZlcjogZGItYWxlcnQtZW1haWwKCnJlY2VpdmVyczoKICAjIC0gbmFtZTogJ3dlYmhvb2sta2Fma2EtYWRhcHRlcicKICAjICAgd2ViaG9va19jb25maWdzOgogICMgICAtIHNlbmRfcmVzb2x2ZWQ6IHRydWUKICAjICAgICB1cmw6ICdodHRwOi8vMTAuMC4zLjY6MjgwODIvdjEvYWxlcnRtYW5hZ2VyJwoKICAjLSBuYW1lOiAnZGItYWxlcnQtc2xhY2snCiAgIyAgc2xhY2tfY29uZmlnczoKICAjICAtIGNoYW5uZWw6ICcjYWxlcnRzJwogICMgICAgdXNlcm5hbWU6ICdkYi1hbGVydCcKICAjICAgIGljb25fZW1vamk6ICc6YmVsbDonCiAgIyAgICB0aXRsZTogICAne3sgLkNvbW1vbkxhYmVscy5hbGVydG5hbWUgfX0nCiAgIyAgICB0ZXh0OiAgICAne3sgLkNvbW1vbkFubm90YXRpb25zLnN1bW1hcnkgfX0gIHt7IC5Db21tb25Bbm5vdGF0aW9ucy5kZXNjcmlwdGlvbiB9fSAgZXhwcjoge3sgLkNvbW1vbkxhYmVscy5leHByIH19ICBodHRwOi8vMTcyLjAuMC4xOjkwOTMvIy9hbGVydHMnCgogIC0gbmFtZTogImRiLWFsZXJ0LWVtYWlsIgogICAgZW1haWxfY29uZmlnczoKICAgICAgLSBzZW5kX3Jlc29sdmVkOiB0cnVlCiAgICAgICAgdG86ICJ4eHhAeHh4LmNvbSIK" - autogenFiles["/templates/config/blackbox.yml"] = "bW9kdWxlczoKICBodHRwXzJ4eDoKICAgIHByb2JlcjogaHR0cAogICAgaHR0cDoKICAgICAgbWV0aG9kOiBHRVQKICBodHRwX3Bvc3RfMnh4OgogICAgcHJvYmVyOiBodHRwCiAgICBodHRwOgogICAgICBtZXRob2Q6IFBPU1QKICB0Y3BfY29ubmVjdDoKICAgIHByb2JlcjogdGNwCiAgcG9wM3NfYmFubmVyOgogICAgcHJvYmVyOiB0Y3AKICAgIHRjcDoKICAgICAgcXVlcnlfcmVzcG9uc2U6CiAgICAgICAgLSBleHBlY3Q6ICJeK09LIgogICAgICB0bHM6IHRydWUKICAgICAgdGxzX2NvbmZpZzoKICAgICAgICBpbnNlY3VyZV9za2lwX3ZlcmlmeTogZmFsc2UKICBzc2hfYmFubmVyOgogICAgcHJvYmVyOiB0Y3AKICAgIHRjcDoKICAgICAgcXVlcnlfcmVzcG9uc2U6CiAgICAgICAgLSBleHBlY3Q6ICJeU1NILTIuMC0iCiAgaXJjX2Jhbm5lcjoKICAgIHByb2JlcjogdGNwCiAgICB0Y3A6CiAgICAgIHF1ZXJ5X3Jlc3BvbnNlOgogICAgICAgIC0gc2VuZDogIk5JQ0sgcHJvYmVyIgogICAgICAgIC0gc2VuZDogIlVTRVIgcHJvYmVyIHByb2JlciBwcm9iZXIgOnByb2JlciIKICAgICAgICAtIGV4cGVjdDogIlBJTkcgOihbXiBdKykiCiAgICAgICAgICBzZW5kOiAiUE9ORyAkezF9IgogICAgICAgIC0gZXhwZWN0OiAiXjpbXiBdKyAwMDEiCiAgaWNtcDoKICAgIHByb2JlcjogaWNtcAogICAgdGltZW91dDogNXMKICAgIGljbXA6CiAgICAgIHByZWZlcnJlZF9pcF9wcm90b2NvbDogImlwNCIK" - autogenFiles["/templates/config/dashboard.yml.tpl"] = "YXBpVmVyc2lvbjogMQpwcm92aWRlcnM6CiAgLSBuYW1lOiB7ey5DbHVzdGVyTmFtZX19CiAgICBmb2xkZXI6IHt7LkNsdXN0ZXJOYW1lfX0KICAgIHR5cGU6IGZpbGUKICAgIGRpc2FibGVEZWxldGlvbjogZmFsc2UKICAgIGVkaXRhYmxlOiB0cnVlCiAgICB1cGRhdGVJbnRlcnZhbFNlY29uZHM6IDMwCiAgICBvcHRpb25zOgogICAgICBwYXRoOiB7ey5EZXBsb3lEaXJ9fS9kYXNoYm9hcmRz" - autogenFiles["/templates/config/datasource.yml.tpl"] = "YXBpVmVyc2lvbjogMQpkZWxldGVEYXRhc291cmNlczoKICAtIG5hbWU6IHt7LkNsdXN0ZXJOYW1lfX0KZGF0YXNvdXJjZXM6CiAgLSBuYW1lOiB7ey5DbHVzdGVyTmFtZX19CiAgICB0eXBlOiBwcm9tZXRoZXVzCiAgICBhY2Nlc3M6IHByb3h5CiAgICB1cmw6IGh0dHA6Ly97ey5JUH19Ont7LlBvcnR9fQogICAgd2l0aENyZWRlbnRpYWxzOiBmYWxzZQogICAgaXNEZWZhdWx0OiBmYWxzZQogICAgdGxzQXV0aDogZmFsc2UKICAgIHRsc0F1dGhXaXRoQ0FDZXJ0OiBmYWxzZQogICAgdmVyc2lvbjogMQogICAgZWRpdGFibGU6IHRydWU=" - autogenFiles["/templates/config/grafana.ini.tpl"] = "IyMjIyMjIyMjIyMjIyMjIyMjIyMjIEdyYWZhbmEgQ29uZmlndXJhdGlvbiBFeGFtcGxlICMjIyMjIyMjIyMjIyMjIyMjIyMjIwojCiMgRXZlcnl0aGluZyBoYXMgZGVmYXVsdHMgc28geW91IG9ubHkgbmVlZCB0byB1bmNvbW1lbnQgdGhpbmdzIHlvdSB3YW50IHRvCiMgY2hhbmdlCgojIHBvc3NpYmxlIHZhbHVlcyA6IHByb2R1Y3Rpb24sIGRldmVsb3BtZW50CjsgYXBwX21vZGUgPSBwcm9kdWN0aW9uCgojIGluc3RhbmNlIG5hbWUsIGRlZmF1bHRzIHRvIEhPU1ROQU1FIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlIG9yIGhvc3RuYW1lIGlmIEhPU1ROQU1FIHZhciBpcyBlbXB0eQo7IGluc3RhbmNlX25hbWUgPSAke0hPU1ROQU1FfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFBhdGhzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpbcGF0aHNdCiMgUGF0aCB0byB3aGVyZSBncmFmYW5hIGNhbiBzdG9yZSB0ZW1wIGZpbGVzLCBzZXNzaW9ucywgYW5kIHRoZSBzcWxpdGUzIGRiIChpZiB0aGF0IGlzIHVzZWQpCiMKZGF0YSA9IHt7LkRlcGxveURpcn19L2RhdGEKIwojIERpcmVjdG9yeSB3aGVyZSBncmFmYW5hIGNhbiBzdG9yZSBsb2dzCiMKbG9ncyA9IHt7LkRlcGxveURpcn19L2xvZ3MKIwojIERpcmVjdG9yeSB3aGVyZSBncmFmYW5hIHdpbGwgYXV0b21hdGljYWxseSBzY2FuIGFuZCBsb29rIGZvciBwbHVnaW5zCiMKcGx1Z2lucyA9IHt7LkRlcGxveURpcn19L3BsdWdpbnMKIwojIGZvbGRlciB0aGF0IGNvbnRhaW5zIHByb3Zpc2lvbmluZyBjb25maWcgZmlsZXMgdGhhdCBncmFmYW5hIHdpbGwgYXBwbHkgb24gc3RhcnR1cCBhbmQgd2hpbGUgcnVubmluZy4KcHJvdmlzaW9uaW5nID0ge3suRGVwbG95RGlyfX0vcHJvdmlzaW9uaW5nCgojCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTZXJ2ZXIgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCltzZXJ2ZXJdCiMgUHJvdG9jb2wgKGh0dHAgb3IgaHR0cHMpCjtwcm90b2NvbCA9IGh0dHAKCiMgVGhlIGlwIGFkZHJlc3MgdG8gYmluZCB0bywgZW1wdHkgd2lsbCBiaW5kIHRvIGFsbCBpbnRlcmZhY2VzCjtodHRwX2FkZHIgPQoKIyBUaGUgaHR0cCBwb3J0ICB0byB1c2UKaHR0cF9wb3J0ID0ge3suUG9ydH19CgojIFRoZSBwdWJsaWMgZmFjaW5nIGRvbWFpbiBuYW1lIHVzZWQgdG8gYWNjZXNzIGdyYWZhbmEgZnJvbSBhIGJyb3dzZXIKe3stIGlmIC5Eb21haW59fQpkb21haW4gPSB7ey5Eb21haW59fQp7ey0gZWxzZX19CmRvbWFpbiA9IHt7LklQfX0Ke3stIGVuZH19CgojIFJlZGlyZWN0IHRvIGNvcnJlY3QgZG9tYWluIGlmIGhvc3QgaGVhZGVyIGRvZXMgbm90IG1hdGNoIGRvbWFpbgojIFByZXZlbnRzIEROUyByZWJpbmRpbmcgYXR0YWNrcwo7ZW5mb3JjZV9kb21haW4gPSBmYWxzZQoKIyBUaGUgZnVsbCBwdWJsaWMgZmFjaW5nIHVybAp7ey0gaWYgLlJvb3RVUkx9fQpyb290X3VybCA9IHt7LlJvb3RVUkx9fQpzZXJ2ZXJfZnJvbV9zdWJfcGF0aCA9IHRydWUKe3stIGVuZH19CgojIExvZyB3ZWIgcmVxdWVzdHMKO3JvdXRlcl9sb2dnaW5nID0gZmFsc2UKCiMgdGhlIHBhdGggcmVsYXRpdmUgd29ya2luZyBwYXRoCjtzdGF0aWNfcm9vdF9wYXRoID0gcHVibGljCgojIGVuYWJsZSBnemlwCjtlbmFibGVfZ3ppcCA9IGZhbHNlCgojIGh0dHBzIGNlcnRzICYga2V5IGZpbGUKO2NlcnRfZmlsZSA9CjtjZXJ0X2tleSA9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRGF0YWJhc2UgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCltkYXRhYmFzZV0KIyBFaXRoZXIgIm15c3FsIiwgInBvc3RncmVzIiBvciAic3FsaXRlMyIsIGl0J3MgeW91ciBjaG9pY2UKO3R5cGUgPSBzcWxpdGUzCjtob3N0ID0gMTI3LjAuMC4xOjMzMDYKO25hbWUgPSBncmFmYW5hCjt1c2VyID0gcm9vdAo7cGFzc3dvcmQgPQoKIyBGb3IgInBvc3RncmVzIiBvbmx5LCBlaXRoZXIgImRpc2FibGUiLCAicmVxdWlyZSIgb3IgInZlcmlmeS1mdWxsIgo7c3NsX21vZGUgPSBkaXNhYmxlCgojIEZvciAic3FsaXRlMyIgb25seSwgcGF0aCByZWxhdGl2ZSB0byBkYXRhX3BhdGggc2V0dGluZwo7cGF0aCA9IGdyYWZhbmEuZGIKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTZXNzaW9uICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpbc2Vzc2lvbl0KIyBFaXRoZXIgIm1lbW9yeSIsICJmaWxlIiwgInJlZGlzIiwgIm15c3FsIiwgInBvc3RncmVzIiwgZGVmYXVsdCBpcyAiZmlsZSIKO3Byb3ZpZGVyID0gZmlsZQoKIyBQcm92aWRlciBjb25maWcgb3B0aW9ucwojIG1lbW9yeTogbm90IGhhdmUgYW55IGNvbmZpZyB5ZXQKIyBmaWxlOiBzZXNzaW9uIGRpciBwYXRoLCBpcyByZWxhdGl2ZSB0byBncmFmYW5hIGRhdGFfcGF0aAojIHJlZGlzOiBjb25maWcgbGlrZSByZWRpcyBzZXJ2ZXIgZS5nLiBgYWRkcj0xMjcuMC4wLjE6NjM3OSxwb29sX3NpemU9MTAwLGRiPWdyYWZhbmFgCiMgbXlzcWw6IGdvLXNxbC1kcml2ZXIvbXlzcWwgZHNuIGNvbmZpZyBzdHJpbmcsIGUuZy4gYHVzZXI6cGFzc3dvcmRAdGNwKDEyNy4wLjAuMTozMzA2KS9kYXRhYmFzZV9uYW1lYAojIHBvc3RncmVzOiB1c2VyPWEgcGFzc3dvcmQ9YiBob3N0PWxvY2FsaG9zdCBwb3J0PTU0MzIgZGJuYW1lPWMgc3NsbW9kZT1kaXNhYmxlCjtwcm92aWRlcl9jb25maWcgPSBzZXNzaW9ucwoKIyBTZXNzaW9uIGNvb2tpZSBuYW1lCjtjb29raWVfbmFtZSA9IGdyYWZhbmFfc2VzcwoKIyBJZiB5b3UgdXNlIHNlc3Npb24gaW4gaHR0cHMgb25seSwgZGVmYXVsdCBpcyBmYWxzZQo7Y29va2llX3NlY3VyZSA9IGZhbHNlCgojIFNlc3Npb24gbGlmZSB0aW1lLCBkZWZhdWx0IGlzIDg2NDAwCjtzZXNzaW9uX2xpZmVfdGltZSA9IDg2NDAwCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQW5hbHl0aWNzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpbYW5hbHl0aWNzXQojIFNlcnZlciByZXBvcnRpbmcsIHNlbmRzIHVzYWdlIGNvdW50ZXJzIHRvIHN0YXRzLmdyYWZhbmEub3JnIGV2ZXJ5IDI0IGhvdXJzLgojIE5vIGlwIGFkZHJlc3NlcyBhcmUgYmVpbmcgdHJhY2tlZCwgb25seSBzaW1wbGUgY291bnRlcnMgdG8gdHJhY2sKIyBydW5uaW5nIGluc3RhbmNlcywgZGFzaGJvYXJkIGFuZCBlcnJvciBjb3VudHMuIEl0IGlzIHZlcnkgaGVscGZ1bCB0byB1cy4KIyBDaGFuZ2UgdGhpcyBvcHRpb24gdG8gZmFsc2UgdG8gZGlzYWJsZSByZXBvcnRpbmcuCjtyZXBvcnRpbmdfZW5hYmxlZCA9IHRydWUKCiMgU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgYWxsIGNoZWNrcyB0byBodHRwczovL2dyYWZhbmEubmV0CiMgZm9yIG5ldyB2ZXNpb25zIChncmFmYW5hIGl0c2VsZiBhbmQgcGx1Z2lucyksIGNoZWNrIGlzIHVzZWQKIyBpbiBzb21lIFVJIHZpZXdzIHRvIG5vdGlmeSB0aGF0IGdyYWZhbmEgb3IgcGx1Z2luIHVwZGF0ZSBleGlzdHMKIyBUaGlzIG9wdGlvbiBkb2VzIG5vdCBjYXVzZSBhbnkgYXV0byB1cGRhdGVzLCBub3Igc2VuZCBhbnkgaW5mb3JtYXRpb24KIyBvbmx5IGEgR0VUIHJlcXVlc3QgdG8gaHR0cDovL2dyYWZhbmEubmV0IHRvIGdldCBsYXRlc3QgdmVyc2lvbnMKY2hlY2tfZm9yX3VwZGF0ZXMgPSB0cnVlCgojIEdvb2dsZSBBbmFseXRpY3MgdW5pdmVyc2FsIHRyYWNraW5nIGNvZGUsIG9ubHkgZW5hYmxlZCBpZiB5b3Ugc3BlY2lmeSBhbiBpZCBoZXJlCjtnb29nbGVfYW5hbHl0aWNzX3VhX2lkID0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTZWN1cml0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKW3NlY3VyaXR5XQojIGRlZmF1bHQgYWRtaW4gdXNlciwgY3JlYXRlZCBvbiBzdGFydHVwCmFkbWluX3VzZXIgPSB7ey5Vc2VybmFtZX19CgojIGRlZmF1bHQgYWRtaW4gcGFzc3dvcmQsIGNhbiBiZSBjaGFuZ2VkIGJlZm9yZSBmaXJzdCBzdGFydCBvZiBncmFmYW5hLCAgb3IgaW4gcHJvZmlsZSBzZXR0aW5ncwphZG1pbl9wYXNzd29yZCA9IHt7LlBhc3N3b3JkfX0KCiMgdXNlZCBmb3Igc2lnbmluZwo7c2VjcmV0X2tleSA9IFNXMlljd1RJYjl6cE9PaG9Qc01tCgojIEF1dG8tbG9naW4gcmVtZW1iZXIgZGF5cwo7bG9naW5fcmVtZW1iZXJfZGF5cyA9IDcKO2Nvb2tpZV91c2VybmFtZSA9IGdyYWZhbmFfdXNlcgo7Y29va2llX3JlbWVtYmVyX25hbWUgPSBncmFmYW5hX3JlbWVtYmVyCgojIGRpc2FibGUgZ3JhdmF0YXIgcHJvZmlsZSBpbWFnZXMKO2Rpc2FibGVfZ3JhdmF0YXIgPSBmYWxzZQoKIyBkYXRhIHNvdXJjZSBwcm94eSB3aGl0ZWxpc3QgKGlwX29yX2RvbWFpbjpwb3J0IHNlcGFyYXRlZCBieSBzcGFjZXMpCjtkYXRhX3NvdXJjZV9wcm94eV93aGl0ZWxpc3QgPQoKW3NuYXBzaG90c10KIyBzbmFwc2hvdCBzaGFyaW5nIG9wdGlvbnMKO2V4dGVybmFsX2VuYWJsZWQgPSB0cnVlCjtleHRlcm5hbF9zbmFwc2hvdF91cmwgPSBodHRwczovL3NuYXBzaG90cy1vcmlnaW4ucmFpbnRhbmsuaW8KO2V4dGVybmFsX3NuYXBzaG90X25hbWUgPSBQdWJsaXNoIHRvIHNuYXBzaG90LnJhaW50YW5rLmlvCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgVXNlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClt1c2Vyc10KIyBkaXNhYmxlIHVzZXIgc2lnbnVwIC8gcmVnaXN0cmF0aW9uCjthbGxvd19zaWduX3VwID0gdHJ1ZQoKIyBBbGxvdyBub24gYWRtaW4gdXNlcnMgdG8gY3JlYXRlIG9yZ2FuaXphdGlvbnMKO2FsbG93X29yZ19jcmVhdGUgPSB0cnVlCgojIFNldCB0byB0cnVlIHRvIGF1dG9tYXRpY2FsbHkgYXNzaWduIG5ldyB1c2VycyB0byB0aGUgZGVmYXVsdCBvcmdhbml6YXRpb24gKGlkIDEpCjthdXRvX2Fzc2lnbl9vcmcgPSB0cnVlCgojIERlZmF1bHQgcm9sZSBuZXcgdXNlcnMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkIChpZiBkaXNhYmxlZCBhYm92ZSBpcyBzZXQgdG8gdHJ1ZSkKO2F1dG9fYXNzaWduX29yZ19yb2xlID0gVmlld2VyCgojIEJhY2tncm91bmQgdGV4dCBmb3IgdGhlIHVzZXIgZmllbGQgb24gdGhlIGxvZ2luIHBhZ2UKO2xvZ2luX2hpbnQgPSBlbWFpbCBvciB1c2VybmFtZQoKIyBEZWZhdWx0IFVJIHRoZW1lICgiZGFyayIgb3IgImxpZ2h0IikKO2RlZmF1bHRfdGhlbWUgPSBkYXJrCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQW5vbnltb3VzIEF1dGggIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKW2F1dGguYW5vbnltb3VzXQp7ey0gaWYgLkFub255bW91c0VuYWJsZX19CmVuYWJsZWQgPSB0cnVlCnt7LSBlbmR9fQoKIyBzcGVjaWZ5IG9yZ2FuaXphdGlvbiBuYW1lIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHVuYXV0aGVudGljYXRlZCB1c2Vycwo7b3JnX25hbWUgPSBNYWluIE9yZy4KCiMgc3BlY2lmeSByb2xlIGZvciB1bmF1dGhlbnRpY2F0ZWQgdXNlcnMKO29yZ19yb2xlID0gVmlld2VyCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQmFzaWMgQXV0aCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpbYXV0aC5iYXNpY10KO2VuYWJsZWQgPSB0cnVlCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQXV0aCBMREFQICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClthdXRoLmxkYXBdCjtlbmFibGVkID0gZmFsc2UKO2NvbmZpZ19maWxlID0gL2V0Yy9ncmFmYW5hL2xkYXAudG9tbAoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNNVFAgLyBFbWFpbGluZyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpbc210cF0KO2VuYWJsZWQgPSBmYWxzZQo7aG9zdCA9IGxvY2FsaG9zdDoyNQo7dXNlciA9CjtwYXNzd29yZCA9CjtjZXJ0X2ZpbGUgPQo7a2V5X2ZpbGUgPQo7c2tpcF92ZXJpZnkgPSBmYWxzZQo7ZnJvbV9hZGRyZXNzID0gYWRtaW5AZ3JhZmFuYS5sb2NhbGhvc3QKCltlbWFpbHNdCjt3ZWxjb21lX2VtYWlsX29uX3NpZ25fdXAgPSBmYWxzZQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIExvZ2dpbmcgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKW2xvZ10KIyBFaXRoZXIgImNvbnNvbGUiLCAiZmlsZSIsICJzeXNsb2ciLiBEZWZhdWx0IGlzIGNvbnNvbGUgYW5kICBmaWxlCiMgVXNlIHNwYWNlIHRvIHNlcGFyYXRlIG11bHRpcGxlIG1vZGVzLCBlLmcuICJjb25zb2xlIGZpbGUiCm1vZGUgPSBmaWxlCgojIEVpdGhlciAidHJhY2UiLCAiZGVidWciLCAiaW5mbyIsICJ3YXJuIiwgImVycm9yIiwgImNyaXRpY2FsIiwgZGVmYXVsdCBpcyAiaW5mbyIKO2xldmVsID0gaW5mbwoKIyBGb3IgImNvbnNvbGUiIG1vZGUgb25seQpbbG9nLmNvbnNvbGVdCjtsZXZlbCA9CgojIGxvZyBsaW5lIGZvcm1hdCwgdmFsaWQgb3B0aW9ucyBhcmUgdGV4dCwgY29uc29sZSBhbmQganNvbgo7Zm9ybWF0ID0gY29uc29sZQoKIyBGb3IgImZpbGUiIG1vZGUgb25seQpbbG9nLmZpbGVdCmxldmVsID0gaW5mbwoKIyBsb2cgbGluZSBmb3JtYXQsIHZhbGlkIG9wdGlvbnMgYXJlIHRleHQsIGNvbnNvbGUgYW5kIGpzb24KZm9ybWF0ID0gdGV4dAoKIyBUaGlzIGVuYWJsZXMgYXV0b21hdGVkIGxvZyByb3RhdGUoc3dpdGNoIG9mIGZvbGxvd2luZyBvcHRpb25zKSwgZGVmYXVsdCBpcyB0cnVlCjtsb2dfcm90YXRlID0gdHJ1ZQoKIyBNYXggbGluZSBudW1iZXIgb2Ygc2luZ2xlIGZpbGUsIGRlZmF1bHQgaXMgMTAwMDAwMAo7bWF4X2xpbmVzID0gMTAwMDAwMAoKIyBNYXggc2l6ZSBzaGlmdCBvZiBzaW5nbGUgZmlsZSwgZGVmYXVsdCBpcyAyOCBtZWFucyAxIDw8IDI4LCAyNTZNQgo7bWF4X3NpemVfc2hpZnQgPSAyOAoKIyBTZWdtZW50IGxvZyBkYWlseSwgZGVmYXVsdCBpcyB0cnVlCjtkYWlseV9yb3RhdGUgPSB0cnVlCgojIEV4cGlyZWQgZGF5cyBvZiBsb2cgZmlsZShkZWxldGUgYWZ0ZXIgbWF4IGRheXMpLCBkZWZhdWx0IGlzIDcKO21heF9kYXlzID0gNwoKW2xvZy5zeXNsb2ddCjtsZXZlbCA9CgojIGxvZyBsaW5lIGZvcm1hdCwgdmFsaWQgb3B0aW9ucyBhcmUgdGV4dCwgY29uc29sZSBhbmQganNvbgo7Zm9ybWF0ID0gdGV4dAoKIyBTeXNsb2cgbmV0d29yayB0eXBlIGFuZCBhZGRyZXNzLiBUaGlzIGNhbiBiZSB1ZHAsIHRjcCwgb3IgdW5peC4gSWYgbGVmdCBibGFuaywgdGhlIGRlZmF1bHQgdW5peCBlbmRwb2ludHMgd2lsbCBiZSB1c2VkLgo7bmV0d29yayA9CjthZGRyZXNzID0KCiMgU3lzbG9nIGZhY2lsaXR5LiB1c2VyLCBkYWVtb24gYW5kIGxvY2FsMCB0aHJvdWdoIGxvY2FsNyBhcmUgdmFsaWQuCjtmYWNpbGl0eSA9CgojIFN5c2xvZyB0YWcuIEJ5IGRlZmF1bHQsIHRoZSBwcm9jZXNzJyBhcmd2WzBdIGlzIHVzZWQuCjt0YWcgPQoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBBTVFQIEV2ZW50IFB1Ymxpc2hlciAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpbZXZlbnRfcHVibGlzaGVyXQo7ZW5hYmxlZCA9IGZhbHNlCjtyYWJiaXRtcV91cmwgPSBhbXFwOi8vbG9jYWxob3N0Lwo7ZXhjaGFuZ2UgPSBncmFmYW5hX2V2ZW50cwoKOyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBEYXNoYm9hcmQgSlNPTiBmaWxlcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpbZGFzaGJvYXJkcy5qc29uXQplbmFibGVkID0gZmFsc2UKcGF0aCA9IHt7LkRlcGxveURpcn19L2Rhc2hib2FyZHMKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBJbnRlcm5hbCBHcmFmYW5hIE1ldHJpY3MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBNZXRyaWNzIGF2YWlsYWJsZSBhdCBIVFRQIEFQSSBVcmwgL2FwaS9tZXRyaWNzClttZXRyaWNzXQojIERpc2FibGUgLyBFbmFibGUgaW50ZXJuYWwgbWV0cmljcwo7ZW5hYmxlZCAgICAgICAgICAgPSB0cnVlCgojIFB1Ymxpc2ggaW50ZXJ2YWwKO2ludGVydmFsX3NlY29uZHMgID0gMTAKCiMgU2VuZCBpbnRlcm5hbCBtZXRyaWNzIHRvIEdyYXBoaXRlCjsgW21ldHJpY3MuZ3JhcGhpdGVdCjsgYWRkcmVzcyA9IGxvY2FsaG9zdDoyMDAzCjsgcHJlZml4ID0gcHJvZC5ncmFmYW5hLiUoaW5zdGFuY2VfbmFtZSlzLgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEludGVybmFsIEdyYWZhbmEgTWV0cmljcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFVybCB1c2VkIHRvIHRvIGltcG9ydCBkYXNoYm9hcmRzIGRpcmVjdGx5IGZyb20gR3JhZmFuYS5uZXQKW2dyYWZhbmFfbmV0XQp1cmwgPSBodHRwczovL2dyYWZhbmEubmV0" - autogenFiles["/templates/config/prometheus.yml.tpl"] = "LS0tCmdsb2JhbDoKICBzY3JhcGVfaW50ZXJ2YWw6ICAgICAxNXMgIyBCeSBkZWZhdWx0LCBzY3JhcGUgdGFyZ2V0cyBldmVyeSAxNSBzZWNvbmRzLgogIGV2YWx1YXRpb25faW50ZXJ2YWw6IDE1cyAjIEJ5IGRlZmF1bHQsIHNjcmFwZSB0YXJnZXRzIGV2ZXJ5IDE1IHNlY29uZHMuCiAgIyBzY3JhcGVfdGltZW91dCBpcyBzZXQgdG8gdGhlIGdsb2JhbCBkZWZhdWx0ICgxMHMpLgogIGV4dGVybmFsX2xhYmVsczoKICAgIGNsdXN0ZXI6ICd7ey5DbHVzdGVyTmFtZX19JwogICAgbW9uaXRvcjogInByb21ldGhldXMiCgojIExvYWQgYW5kIGV2YWx1YXRlIHJ1bGVzIGluIHRoaXMgZmlsZSBldmVyeSAnZXZhbHVhdGlvbl9pbnRlcnZhbCcgc2Vjb25kcy4KcnVsZV9maWxlczoKe3stIGlmIC5Mb2NhbFJ1bGVzfX0Ke3stIHJhbmdlIC5Mb2NhbFJ1bGVzfX0KICAtICd7ey59fScKe3stIGVuZH19Cnt7LSBlbHNlfX0Ke3stIGlmIC5Nb25pdG9yZWRTZXJ2ZXJzfX0KICAtICdub2RlLnJ1bGVzLnltbCcKICAtICdibGFja2VyLnJ1bGVzLnltbCcKICAtICdieXBhc3MucnVsZXMueW1sJwp7ey0gZW5kfX0Ke3stIGlmIC5QREFkZHJzfX0KICAtICdwZC5ydWxlcy55bWwnCnt7LSBlbmR9fQp7ey0gaWYgLlRpREJTdGF0dXNBZGRyc319CiAgLSAndGlkYi5ydWxlcy55bWwnCnt7LSBlbmR9fQp7ey0gaWYgLlRpS1ZTdGF0dXNBZGRyc319CiAgLSAndGlrdi5ydWxlcy55bWwnCiAgLSAndGlrdi5hY2NlbGVyYXRlLnJ1bGVzLnltbCcKe3stIGVuZH19Cnt7LSBpZiAuVGlGbGFzaFN0YXR1c0FkZHJzfX0KICAtICd0aWZsYXNoLnJ1bGVzLnltbCcKe3stIGVuZH19Cnt7LSBpZiAuUHVtcEFkZHJzfX0KICAtICdiaW5sb2cucnVsZXMueW1sJwp7ey0gZW5kfX0Ke3stIGlmIC5DRENBZGRyc319CiAgLSAndGljZGMucnVsZXMueW1sJwp7ey0gZW5kfX0Ke3stIGlmIC5LYWZrYUFkZHJzfX0KICAtICdrYWZrYS5ydWxlcy55bWwnCnt7LSBlbmR9fQp7ey0gaWYgLkxpZ2h0bmluZ0FkZHJzfX0KICAtICdsaWdodG5pbmcucnVsZXMueW1sJwp7ey0gZW5kfX0Ke3stIGlmIC5ETVdvcmtlckFkZHJzfX0KICAtICdkbV93b3JrZXIucnVsZXMueW1sJwp7ey0gZW5kfX0Ke3stIGVuZH19Cgp7ey0gaWYgLkFsZXJ0bWFuYWdlckFkZHJzfX0KYWxlcnRpbmc6CiAgYWxlcnRtYW5hZ2VyczoKICAtIHN0YXRpY19jb25maWdzOgogICAgLSB0YXJnZXRzOgp7ey0gcmFuZ2UgLkFsZXJ0bWFuYWdlckFkZHJzfX0KICAgICAgLSAne3sufX0nCnt7LSBlbmR9fQp7ey0gZW5kfX0KCnNjcmFwZV9jb25maWdzOgp7ey0gaWYgLlB1c2hnYXRld2F5QWRkcn19CiAgLSBqb2JfbmFtZTogJ292ZXJ3cml0dGVuLWNsdXN0ZXInCiAgICBzY3JhcGVfaW50ZXJ2YWw6IDE1cwogICAgaG9ub3JfbGFiZWxzOiB0cnVlICMgZG9uJ3Qgb3ZlcndyaXRlIGpvYiAmIGluc3RhbmNlIGxhYmVscwogICAgc3RhdGljX2NvbmZpZ3M6CiAgICAgIC0gdGFyZ2V0czogWyd7ey5QdXNoZ2F0ZXdheUFkZHJ9fSddCgogIC0gam9iX25hbWU6ICJibGFja2JveF9leHBvcnRlcl9odHRwIgogICAgc2NyYXBlX2ludGVydmFsOiAzMHMKICAgIG1ldHJpY3NfcGF0aDogL3Byb2JlCiAgICBwYXJhbXM6CiAgICAgIG1vZHVsZTogW2h0dHBfMnh4XQogICAgc3RhdGljX2NvbmZpZ3M6CiAgICAtIHRhcmdldHM6CiAgICAgIC0gJ2h0dHA6Ly97ey5QdXNoZ2F0ZXdheUFkZHJ9fS9tZXRyaWNzJwogICAgcmVsYWJlbF9jb25maWdzOgogICAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX2FkZHJlc3NfX10KICAgICAgICB0YXJnZXRfbGFiZWw6IF9fcGFyYW1fdGFyZ2V0CiAgICAgIC0gc291cmNlX2xhYmVsczogW19fcGFyYW1fdGFyZ2V0XQogICAgICAgIHRhcmdldF9sYWJlbDogaW5zdGFuY2UKICAgICAgLSB0YXJnZXRfbGFiZWw6IF9fYWRkcmVzc19fCiAgICAgICAgcmVwbGFjZW1lbnQ6IHt7LkJsYWNrYm94QWRkcn19Cnt7LSBlbmR9fQp7ey0gaWYgLkxpZ2h0bmluZ0FkZHJzfX0KICAtIGpvYl9uYW1lOiAibGlnaHRuaW5nIgp7ey0gaWYgLlRMU0VuYWJsZWR9fQogICAgc2NoZW1lOiBodHRwcwogICAgdGxzX2NvbmZpZzoKICAgICAgaW5zZWN1cmVfc2tpcF92ZXJpZnk6IGZhbHNlCiAgICAgIGNhX2ZpbGU6IC4uL3Rscy9jYS5jcnQKICAgICAgY2VydF9maWxlOiAuLi90bHMvcHJvbWV0aGV1cy5jcnQKICAgICAga2V5X2ZpbGU6IC4uL3Rscy9wcm9tZXRoZXVzLnBlbQp7ey0gZW5kfX0KICAgIHN0YXRpY19jb25maWdzOgogICAgICAtIHRhcmdldHM6IFsne3tpbmRleCAuTGlnaHRuaW5nQWRkcnMgMH19J10Ke3stIGVuZH19CiAgLSBqb2JfbmFtZTogIm92ZXJ3cml0dGVuLW5vZGVzIgogICAgaG9ub3JfbGFiZWxzOiB0cnVlICMgZG9uJ3Qgb3ZlcndyaXRlIGpvYiAmIGluc3RhbmNlIGxhYmVscwogICAgc3RhdGljX2NvbmZpZ3M6CiAgICAtIHRhcmdldHM6Cnt7LSByYW5nZSAuTm9kZUV4cG9ydGVyQWRkcnN9fQogICAgICAtICd7ey59fScKe3stIGVuZH19CiAgLSBqb2JfbmFtZTogInRpZGIiCiAgICBob25vcl9sYWJlbHM6IHRydWUgIyBkb24ndCBvdmVyd3JpdGUgam9iICYgaW5zdGFuY2UgbGFiZWxzCnt7LSBpZiAuVExTRW5hYmxlZH19CiAgICBzY2hlbWU6IGh0dHBzCiAgICB0bHNfY29uZmlnOgogICAgICBpbnNlY3VyZV9za2lwX3ZlcmlmeTogZmFsc2UKICAgICAgY2FfZmlsZTogLi4vdGxzL2NhLmNydAogICAgICBjZXJ0X2ZpbGU6IC4uL3Rscy9wcm9tZXRoZXVzLmNydAogICAgICBrZXlfZmlsZTogLi4vdGxzL3Byb21ldGhldXMucGVtCnt7LSBlbmR9fQogICAgc3RhdGljX2NvbmZpZ3M6CiAgICAtIHRhcmdldHM6Cnt7LSByYW5nZSAuVGlEQlN0YXR1c0FkZHJzfX0KICAgICAgLSAne3sufX0nCnt7LSBlbmR9fQogIC0gam9iX25hbWU6ICJ0aWt2IgogICAgaG9ub3JfbGFiZWxzOiB0cnVlICMgZG9uJ3Qgb3ZlcndyaXRlIGpvYiAmIGluc3RhbmNlIGxhYmVscwp7ey0gaWYgLlRMU0VuYWJsZWR9fQogICAgc2NoZW1lOiBodHRwcwogICAgdGxzX2NvbmZpZzoKICAgICAgaW5zZWN1cmVfc2tpcF92ZXJpZnk6IGZhbHNlCiAgICAgIGNhX2ZpbGU6IC4uL3Rscy9jYS5jcnQKICAgICAgY2VydF9maWxlOiAuLi90bHMvcHJvbWV0aGV1cy5jcnQKICAgICAga2V5X2ZpbGU6IC4uL3Rscy9wcm9tZXRoZXVzLnBlbQp7ey0gZW5kfX0KICAgIHN0YXRpY19jb25maWdzOgogICAgLSB0YXJnZXRzOgp7ey0gcmFuZ2UgLlRpS1ZTdGF0dXNBZGRyc319CiAgICAgIC0gJ3t7Ln19Jwp7ey0gZW5kfX0KICAtIGpvYl9uYW1lOiAicGQiCiAgICBob25vcl9sYWJlbHM6IHRydWUgIyBkb24ndCBvdmVyd3JpdGUgam9iICYgaW5zdGFuY2UgbGFiZWxzCnt7LSBpZiAuVExTRW5hYmxlZH19CiAgICBzY2hlbWU6IGh0dHBzCiAgICB0bHNfY29uZmlnOgogICAgICBpbnNlY3VyZV9za2lwX3ZlcmlmeTogZmFsc2UKICAgICAgY2FfZmlsZTogLi4vdGxzL2NhLmNydAogICAgICBjZXJ0X2ZpbGU6IC4uL3Rscy9wcm9tZXRoZXVzLmNydAogICAgICBrZXlfZmlsZTogLi4vdGxzL3Byb21ldGhldXMucGVtCnt7LSBlbmR9fQogICAgc3RhdGljX2NvbmZpZ3M6CiAgICAtIHRhcmdldHM6Cnt7LSByYW5nZSAuUERBZGRyc319CiAgICAgIC0gJ3t7Ln19Jwp7ey0gZW5kfX0Ke3stIGlmIC5UaUZsYXNoU3RhdHVzQWRkcnN9fQogIC0gam9iX25hbWU6ICJ0aWZsYXNoIgogICAgaG9ub3JfbGFiZWxzOiB0cnVlICMgZG9uJ3Qgb3ZlcndyaXRlIGpvYiAmIGluc3RhbmNlIGxhYmVscwp7ey0gaWYgLlRMU0VuYWJsZWR9fQogICAgc2NoZW1lOiBodHRwcwogICAgdGxzX2NvbmZpZzoKICAgICAgaW5zZWN1cmVfc2tpcF92ZXJpZnk6IGZhbHNlCiAgICAgIGNhX2ZpbGU6IC4uL3Rscy9jYS5jcnQKICAgICAgY2VydF9maWxlOiAuLi90bHMvcHJvbWV0aGV1cy5jcnQKICAgICAga2V5X2ZpbGU6IC4uL3Rscy9wcm9tZXRoZXVzLnBlbQp7ey0gZW5kfX0KICAgIHN0YXRpY19jb25maWdzOgogICAgLSB0YXJnZXRzOgogICAge3stIHJhbmdlIC5UaUZsYXNoU3RhdHVzQWRkcnN9fQogICAgICAgLSAne3sufX0nCiAgICB7ey0gZW5kfX0KICAgIHt7LSByYW5nZSAuVGlGbGFzaExlYXJuZXJTdGF0dXNBZGRyc319CiAgICAgICAtICd7ey59fScKICAgIHt7LSBlbmR9fQp7ey0gZW5kfX0Ke3stIGlmIC5QdW1wQWRkcnN9fQp7ey0gaWYgLkthZmthRXhwb3J0ZXJBZGRyfX0KICAtIGpvYl9uYW1lOiAna2Fma2FfZXhwb3J0ZXInCiAgICBob25vcl9sYWJlbHM6IHRydWUgIyBkb24ndCBvdmVyd3JpdGUgam9iICYgaW5zdGFuY2UgbGFiZWxzCiAgICBzdGF0aWNfY29uZmlnczoKICAgIC0gdGFyZ2V0czoKICAgICAgLSAne3suS2Fma2FFeHBvcnRlckFkZHJ9fScKe3stIGVuZH19CiAgLSBqb2JfbmFtZTogJ3B1bXAnCiAgICBob25vcl9sYWJlbHM6IHRydWUgIyBkb24ndCBvdmVyd3JpdGUgam9iICYgaW5zdGFuY2UgbGFiZWxzCnt7LSBpZiAuVExTRW5hYmxlZH19CiAgICBzY2hlbWU6IGh0dHBzCiAgICB0bHNfY29uZmlnOgogICAgICBpbnNlY3VyZV9za2lwX3ZlcmlmeTogZmFsc2UKICAgICAgY2FfZmlsZTogLi4vdGxzL2NhLmNydAogICAgICBjZXJ0X2ZpbGU6IC4uL3Rscy9wcm9tZXRoZXVzLmNydAogICAgICBrZXlfZmlsZTogLi4vdGxzL3Byb21ldGhldXMucGVtCnt7LSBlbmR9fQogICAgc3RhdGljX2NvbmZpZ3M6CiAgICAtIHRhcmdldHM6CiAgICB7ey0gcmFuZ2UgLlB1bXBBZGRyc319CiAgICAgIC0gJ3t7Ln19JwogICAge3stIGVuZH19CiAgLSBqb2JfbmFtZTogJ2RyYWluZXInCiAgICBob25vcl9sYWJlbHM6IHRydWUgIyBkb24ndCBvdmVyd3JpdGUgam9iICYgaW5zdGFuY2UgbGFiZWxzCnt7LSBpZiAuVExTRW5hYmxlZH19CiAgICBzY2hlbWU6IGh0dHBzCiAgICB0bHNfY29uZmlnOgogICAgICBpbnNlY3VyZV9za2lwX3ZlcmlmeTogZmFsc2UKICAgICAgY2FfZmlsZTogLi4vdGxzL2NhLmNydAogICAgICBjZXJ0X2ZpbGU6IC4uL3Rscy9wcm9tZXRoZXVzLmNydAogICAgICBrZXlfZmlsZTogLi4vdGxzL3Byb21ldGhldXMucGVtCnt7LSBlbmR9fQogICAgc3RhdGljX2NvbmZpZ3M6CiAgICAtIHRhcmdldHM6CiAgICB7ey0gcmFuZ2UgLkRyYWluZXJBZGRyc319CiAgICAgIC0gJ3t7Ln19JwogICAge3stIGVuZH19CiAgLSBqb2JfbmFtZTogInBvcnRfcHJvYmUiCiAgICBzY3JhcGVfaW50ZXJ2YWw6IDMwcwogICAgbWV0cmljc19wYXRoOiAvcHJvYmUKICAgIHBhcmFtczoKICAgICAgbW9kdWxlOiBbdGNwX2Nvbm5lY3RdCiAgICBzdGF0aWNfY29uZmlnczoKe3stIGlmIC5LYWZrYUFkZHJzfX0KICAgIC0gdGFyZ2V0czoKICAgIHt7LSByYW5nZSAuS2Fma2FBZGRyc319CiAgICAgICAgLSAne3sufX0nCiAgICB7ey0gZW5kfX0KICAgICAgbGFiZWxzOgogICAgICAgIGdyb3VwOiAna2Fma2EnCnt7LSBlbmR9fQp7ey0gaWYgLlpvb2tlZXBlckFkZHJzfX0KICAgIC0gdGFyZ2V0czoKICAgIHt7LSByYW5nZSAuWm9va2VlcGVyQWRkcnN9fQogICAgICAtICd7ey59fScKICAgIHt7LSBlbmR9fQogICAgICBsYWJlbHM6CiAgICAgICAgZ3JvdXA6ICd6b29rZWVwZXInCnt7LSBlbmR9fQogICAgLSB0YXJnZXRzOgp7ey0gcmFuZ2UgLlB1bXBBZGRyc319CiAgICAgIC0gJ3t7Ln19Jwp7ey0gZW5kfX0KICAgICAgbGFiZWxzOgogICAgICAgIGdyb3VwOiAncHVtcCcKICAgIC0gdGFyZ2V0czoKICAgIHt7LSByYW5nZSAuRHJhaW5lckFkZHJzfX0KICAgICAgLSAne3sufX0nCiAgICB7ey0gZW5kfX0KICAgICAgbGFiZWxzOgogICAgICAgIGdyb3VwOiAnZHJhaW5lcicKe3stIGlmIC5LYWZrYUV4cG9ydGVyQWRkcn19CiAgICAtIHRhcmdldHM6CiAgICAgIC0gJ3t7LkthZmthRXhwb3J0ZXJBZGRyfX0nCiAgICAgIGxhYmVsczoKICAgICAgICBncm91cDogJ2thZmthX2V4cG9ydGVyJwp7ey0gZW5kfX0KICAgIHJlbGFiZWxfY29uZmlnczoKICAgICAgLSBzb3VyY2VfbGFiZWxzOiBbX19hZGRyZXNzX19dCiAgICAgICAgdGFyZ2V0X2xhYmVsOiBfX3BhcmFtX3RhcmdldAogICAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX3BhcmFtX3RhcmdldF0KICAgICAgICB0YXJnZXRfbGFiZWw6IGluc3RhbmNlCiAgICAgIC0gdGFyZ2V0X2xhYmVsOiBfX2FkZHJlc3NfXwogICAgICAgIHJlcGxhY2VtZW50OiB7ey5CbGFja2JveEFkZHJ9fQp7ey0gZW5kfX0Ke3stIGlmIC5DRENBZGRyc319CiAgLSBqb2JfbmFtZTogInRpY2RjIgogICAgaG9ub3JfbGFiZWxzOiB0cnVlICMgZG9uJ3Qgb3ZlcndyaXRlIGpvYiAmIGluc3RhbmNlIGxhYmVscwp7ey0gaWYgLlRMU0VuYWJsZWR9fQogICAgc2NoZW1lOiBodHRwcwogICAgdGxzX2NvbmZpZzoKICAgICAgaW5zZWN1cmVfc2tpcF92ZXJpZnk6IGZhbHNlCiAgICAgIGNhX2ZpbGU6IC4uL3Rscy9jYS5jcnQKICAgICAgY2VydF9maWxlOiAuLi90bHMvcHJvbWV0aGV1cy5jcnQKICAgICAga2V5X2ZpbGU6IC4uL3Rscy9wcm9tZXRoZXVzLnBlbQp7ey0gZW5kfX0KICAgIHN0YXRpY19jb25maWdzOgogICAgLSB0YXJnZXRzOgp7ey0gcmFuZ2UgLkNEQ0FkZHJzfX0KICAgICAgLSAne3sufX0nCnt7LSBlbmR9fQp7ey0gZW5kfX0KICAtIGpvYl9uYW1lOiAidGlkYl9wb3J0X3Byb2JlIgogICAgc2NyYXBlX2ludGVydmFsOiAzMHMKICAgIG1ldHJpY3NfcGF0aDogL3Byb2JlCiAgICBwYXJhbXM6CiAgICAgIG1vZHVsZTogW3RjcF9jb25uZWN0XQogICAgc3RhdGljX2NvbmZpZ3M6CiAgICAtIHRhcmdldHM6CiAgICB7ey0gcmFuZ2UgLlRpREJTdGF0dXNBZGRyc319CiAgICAgIC0gJ3t7Ln19JwogICAge3stIGVuZH19CiAgICAgIGxhYmVsczoKICAgICAgICBncm91cDogJ3RpZGInCiAgICAtIHRhcmdldHM6CiAgICB7ey0gcmFuZ2UgLlRpS1ZTdGF0dXNBZGRyc319CiAgICAgIC0gJ3t7Ln19JwogICAge3stIGVuZH19CiAgICAgIGxhYmVsczoKICAgICAgICBncm91cDogJ3Rpa3YnCiAgICAtIHRhcmdldHM6CiAgICB7ey0gcmFuZ2UgLlBEQWRkcnN9fQogICAgICAtICd7ey59fScKICAgIHt7LSBlbmR9fQogICAgICBsYWJlbHM6CiAgICAgICAgZ3JvdXA6ICdwZCcKe3stIGlmIC5UaUZsYXNoU3RhdHVzQWRkcnN9fQogICAgLSB0YXJnZXRzOgogICAge3stIHJhbmdlIC5UaUZsYXNoU3RhdHVzQWRkcnN9fQogICAgICAgLSAne3sufX0nCiAgICB7ey0gZW5kfX0KICAgICAgbGFiZWxzOgogICAgICAgIGdyb3VwOiAndGlmbGFzaCcKe3stIGVuZH19Cnt7LSBpZiAuUHVzaGdhdGV3YXlBZGRyfX0KICAgIC0gdGFyZ2V0czoKICAgICAgLSAne3suUHVzaGdhdGV3YXlBZGRyfX0nCiAgICAgIGxhYmVsczoKICAgICAgICBncm91cDogJ3B1c2hnYXRld2F5Jwp7ey0gZW5kfX0Ke3stIGlmIC5HcmFmYW5hQWRkcn19CiAgICAtIHRhcmdldHM6CiAgICAgIC0gJ3t7LkdyYWZhbmFBZGRyfX0nCiAgICAgIGxhYmVsczoKICAgICAgICBncm91cDogJ2dyYWZhbmEnCnt7LSBlbmR9fQogICAgLSB0YXJnZXRzOgogICAge3stIHJhbmdlIC5Ob2RlRXhwb3J0ZXJBZGRyc319CiAgICAgIC0gJ3t7Ln19JwogICAge3stIGVuZH19CiAgICAgIGxhYmVsczoKICAgICAgICBncm91cDogJ25vZGVfZXhwb3J0ZXInCiAgICAtIHRhcmdldHM6CiAgICB7ey0gcmFuZ2UgLkJsYWNrYm94RXhwb3J0ZXJBZGRyc319CiAgICAgIC0gJ3t7Ln19JwogICAge3stIGVuZH19CiAgICAgIGxhYmVsczoKICAgICAgICBncm91cDogJ2JsYWNrYm94X2V4cG9ydGVyJwogICAgcmVsYWJlbF9jb25maWdzOgogICAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX2FkZHJlc3NfX10KICAgICAgICB0YXJnZXRfbGFiZWw6IF9fcGFyYW1fdGFyZ2V0CiAgICAgIC0gc291cmNlX2xhYmVsczogW19fcGFyYW1fdGFyZ2V0XQogICAgICAgIHRhcmdldF9sYWJlbDogaW5zdGFuY2UKICAgICAgLSB0YXJnZXRfbGFiZWw6IF9fYWRkcmVzc19fCiAgICAgICAgcmVwbGFjZW1lbnQ6IHt7LkJsYWNrYm94QWRkcn19Cnt7LSByYW5nZSAkYWRkciA6PSAuQmxhY2tib3hFeHBvcnRlckFkZHJzfX0KICAtIGpvYl9uYW1lOiAiYmxhY2tib3hfZXhwb3J0ZXJfe3skYWRkcn19X2ljbXAiCiAgICBzY3JhcGVfaW50ZXJ2YWw6IDZzCiAgICBtZXRyaWNzX3BhdGg6IC9wcm9iZQogICAgcGFyYW1zOgogICAgICBtb2R1bGU6IFtpY21wXQogICAgc3RhdGljX2NvbmZpZ3M6CiAgICAtIHRhcmdldHM6CiAgICB7ey0gcmFuZ2UgJC5Nb25pdG9yZWRTZXJ2ZXJzfX0KICAgICAgLSAne3sufX0nCiAgICB7ey0gZW5kfX0KICAgIHJlbGFiZWxfY29uZmlnczoKICAgICAgLSBzb3VyY2VfbGFiZWxzOiBbX19hZGRyZXNzX19dCiAgICAgICAgcmVnZXg6ICguKikoOjgwKT8KICAgICAgICB0YXJnZXRfbGFiZWw6IF9fcGFyYW1fdGFyZ2V0CiAgICAgICAgcmVwbGFjZW1lbnQ6ICR7MX0KICAgICAgLSBzb3VyY2VfbGFiZWxzOiBbX19wYXJhbV90YXJnZXRdCiAgICAgICAgcmVnZXg6ICguKikKICAgICAgICB0YXJnZXRfbGFiZWw6IHBpbmcKICAgICAgICByZXBsYWNlbWVudDogJHsxfQogICAgICAtIHNvdXJjZV9sYWJlbHM6IFtdCiAgICAgICAgcmVnZXg6IC4qCiAgICAgICAgdGFyZ2V0X2xhYmVsOiBfX2FkZHJlc3NfXwogICAgICAgIHJlcGxhY2VtZW50OiB7eyRhZGRyfX0Ke3stIGVuZH19Cgp7ey0gaWYgLkRNTWFzdGVyQWRkcnN9fQogIC0gam9iX25hbWU6ICJkbV9tYXN0ZXIiCiAgICBob25vcl9sYWJlbHM6IHRydWUgIyBkb24ndCBvdmVyd3JpdGUgam9iICYgaW5zdGFuY2UgbGFiZWxzCiAgICBzdGF0aWNfY29uZmlnczoKICAgIC0gdGFyZ2V0czoKICAgIHt7LSByYW5nZSAuRE1NYXN0ZXJBZGRyc319CiAgICAgIC0gJ3t7Ln19JwogICAge3stIGVuZH19Cnt7LSBlbmR9fQoKe3stIGlmIC5ETVdvcmtlckFkZHJzfX0KICAtIGpvYl9uYW1lOiAiZG1fd29ya2VyIgogICAgaG9ub3JfbGFiZWxzOiB0cnVlICMgZG9uJ3Qgb3ZlcndyaXRlIGpvYiAmIGluc3RhbmNlIGxhYmVscwogICAgc3RhdGljX2NvbmZpZ3M6CiAgICAtIHRhcmdldHM6CiAgICB7ey0gcmFuZ2UgLkRNV29ya2VyQWRkcnN9fQogICAgICAtICd7ey59fScKICAgIHt7LSBlbmR9fQp7ey0gZW5kfX0KCnt7LSBpZiAuUmVtb3RlQ29uZmlnfX0Ke3suUmVtb3RlQ29uZmlnfX0Ke3stIGVuZH19" - autogenFiles["/templates/config/spark-defaults.conf.tpl"] = "IwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIERlZmF1bHQgc3lzdGVtIHByb3BlcnRpZXMgaW5jbHVkZWQgd2hlbiBydW5uaW5nIHNwYXJrLXN1Ym1pdC4KIyBUaGlzIGlzIHVzZWZ1bCBmb3Igc2V0dGluZyBkZWZhdWx0IGVudmlyb25tZW50YWwgc2V0dGluZ3MuCgojIEV4YW1wbGU6CiNzcGFyay5ldmVudExvZy5kaXI6ICJoZGZzOi8vbmFtZW5vZGU6ODAyMS9kaXJlY3RvcnkiCiMgc3BhcmsuZXhlY3V0b3IuZXh0cmFKYXZhT3B0aW9ucyAgLVhYOitQcmludEdDRGV0YWlscyAtRGtleT12YWx1ZSAtRG51bWJlcnM9Im9uZSB0d28gdGhyZWUiCgp7ey0gZGVmaW5lICJQRExpc3QifX0KICB7ey0gcmFuZ2UgJGlkeCwgJHBkIDo9IC59fQogICAge3stIGlmIGVxICRpZHggMH19CiAgICAgIHt7LSAkcGR9fQogICAge3stIGVsc2UgLX19CiAgICAgICx7eyRwZH19CiAgICB7ey0gZW5kfX0KICB7ey0gZW5kfX0Ke3stIGVuZH19Cgp7eyByYW5nZSAkaywgJHYgOj0gLkN1c3RvbUZpZWxkc319Cnt7ICRrIH19ICAge3sgJHYgfX0Ke3stIGVuZCB9fQpzcGFyay5zcWwuZXh0ZW5zaW9ucyAgIG9yZy5hcGFjaGUuc3Bhcmsuc3FsLlRpRXh0ZW5zaW9ucwoKe3stIGlmIC5UaVNwYXJrTWFzdGVyc319CnNwYXJrLm1hc3RlciAgIHNwYXJrOi8ve3suVGlTcGFya01hc3RlcnN9fQp7ey0gZW5kfX0KCnNwYXJrLnRpc3BhcmsucGQuYWRkcmVzc2VzIHt7dGVtcGxhdGUgIlBETGlzdCIgLkVuZHBvaW50c319Cg==" - autogenFiles["/templates/config/spark-log4j.properties.tpl"] = "IwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIFNldCBldmVyeXRoaW5nIHRvIGJlIGxvZ2dlZCB0byB0aGUgY29uc29sZQpsb2c0ai5yb290Q2F0ZWdvcnk9SU5GTywgY29uc29sZQpsb2c0ai5hcHBlbmRlci5jb25zb2xlPW9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyCmxvZzRqLmFwcGVuZGVyLmNvbnNvbGUudGFyZ2V0PVN5c3RlbS5lcnIKbG9nNGouYXBwZW5kZXIuY29uc29sZS5sYXlvdXQ9b3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0CmxvZzRqLmFwcGVuZGVyLmNvbnNvbGUubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVke3l5L01NL2RkIEhIOm1tOnNzfSAlcCAlY3sxfTogJW0lbgoKIyBTZXQgdGhlIGRlZmF1bHQgc3Bhcmstc2hlbGwgbG9nIGxldmVsIHRvIFdBUk4uIFdoZW4gcnVubmluZyB0aGUgc3Bhcmstc2hlbGwsIHRoZQojIGxvZyBsZXZlbCBmb3IgdGhpcyBjbGFzcyBpcyB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgcm9vdCBsb2dnZXIncyBsb2cgbGV2ZWwsIHNvIHRoYXQKIyB0aGUgdXNlciBjYW4gaGF2ZSBkaWZmZXJlbnQgZGVmYXVsdHMgZm9yIHRoZSBzaGVsbCBhbmQgcmVndWxhciBTcGFyayBhcHBzLgpsb2c0ai5sb2dnZXIub3JnLmFwYWNoZS5zcGFyay5yZXBsLk1haW49V0FSTgoKIyBTZXR0aW5ncyB0byBxdWlldCB0aGlyZCBwYXJ0eSBsb2dzIHRoYXQgYXJlIHRvbyB2ZXJib3NlCmxvZzRqLmxvZ2dlci5vcmcuc3BhcmtfcHJvamVjdC5qZXR0eT1XQVJOCmxvZzRqLmxvZ2dlci5vcmcuc3BhcmtfcHJvamVjdC5qZXR0eS51dGlsLmNvbXBvbmVudC5BYnN0cmFjdExpZmVDeWNsZT1FUlJPUgpsb2c0ai5sb2dnZXIub3JnLmFwYWNoZS5zcGFyay5yZXBsLlNwYXJrSU1haW4kZXhwclR5cGVyPUlORk8KbG9nNGoubG9nZ2VyLm9yZy5hcGFjaGUuc3BhcmsucmVwbC5TcGFya0lMb29wJFNwYXJrSUxvb3BJbnRlcnByZXRlcj1JTkZPCmxvZzRqLmxvZ2dlci5vcmcuYXBhY2hlLnBhcnF1ZXQ9RVJST1IKbG9nNGoubG9nZ2VyLnBhcnF1ZXQ9RVJST1IKCiMgU1BBUkstOTE4MzogU2V0dGluZ3MgdG8gYXZvaWQgYW5ub3lpbmcgbWVzc2FnZXMgd2hlbiBsb29raW5nIHVwIG5vbmV4aXN0ZW50IFVERnMgaW4gU3BhcmtTUUwgd2l0aCBIaXZlIHN1cHBvcnQKbG9nNGoubG9nZ2VyLm9yZy5hcGFjaGUuaGFkb29wLmhpdmUubWV0YXN0b3JlLlJldHJ5aW5nSE1TSGFuZGxlcj1GQVRBTApsb2c0ai5sb2dnZXIub3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5leGVjLkZ1bmN0aW9uUmVnaXN0cnk9RVJST1IKCiMgdGlzcGFyayBkaXNhYmxlICJXQVJOIE9iamVjdFN0b3JlOjU2OCAtIEZhaWxlZCB0byBnZXQgZGF0YWJhc2UiCmxvZzRqLmxvZ2dlci5vcmcuYXBhY2hlLmhhZG9vcC5oaXZlLm1ldGFzdG9yZS5PYmplY3RTdG9yZT1FUlJPUgo=" - autogenFiles["/templates/scripts/run_alertmanager.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgpERVBMT1lfRElSPXt7LkRlcGxveURpcn19CmNkICIke0RFUExPWV9ESVJ9IiB8fCBleGl0IDEKCiMgV0FSTklORzogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZC4gRG8gbm90IGVkaXQhCiMgICAgICAgICAgQWxsIHlvdXIgZWRpdCBtaWdodCBiZSBvdmVyd3JpdHRlbiEKCmV4ZWMgPiA+KHRlZSAtaSAtYSAie3suTG9nRGlyfX0vYWxlcnRtYW5hZ2VyLmxvZyIpCmV4ZWMgMj4mMQoKe3stIGlmIC5OdW1hTm9kZX19CmV4ZWMgbnVtYWN0bCAtLWNwdW5vZGViaW5kPXt7Lk51bWFOb2RlfX0gLS1tZW1iaW5kPXt7Lk51bWFOb2RlfX0gYmluL2FsZXJ0bWFuYWdlciBcCnt7LSBlbHNlfX0KZXhlYyBiaW4vYWxlcnRtYW5hZ2VyL2FsZXJ0bWFuYWdlciBcCnt7LSBlbmR9fQogICAgLS1jb25maWcuZmlsZT0iY29uZi9hbGVydG1hbmFnZXIueW1sIiBcCiAgICAtLXN0b3JhZ2UucGF0aD0ie3suRGF0YURpcn19IiBcCiAgICAtLWRhdGEucmV0ZW50aW9uPTEyMGggXAogICAgLS1sb2cubGV2ZWw9ImluZm8iIFwKICAgIC0td2ViLmxpc3Rlbi1hZGRyZXNzPSJ7ey5JUH19Ont7LldlYlBvcnR9fSIgXAp7ey0gaWYgLkVuZFBvaW50c319Cnt7LSByYW5nZSAkaWR4LCAkYW0gOj0gLkVuZFBvaW50c319CiAgICAtLWNsdXN0ZXIucGVlcj0ie3skYW0uSVB9fTp7eyRhbS5DbHVzdGVyUG9ydH19IiBcCnt7LSBlbmR9fQp7ey0gZW5kfX0KICAgIC0tY2x1c3Rlci5saXN0ZW4tYWRkcmVzcz0ie3suSVB9fTp7ey5DbHVzdGVyUG9ydH19Igo=" - autogenFiles["/templates/scripts/run_blackbox_exporter.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KY2QgIiR7REVQTE9ZX0RJUn0iIHx8IGV4aXQgMQoKZXhlYyA+ID4odGVlIC1pIC1hICJ7ey5Mb2dEaXJ9fS9ibGFja2JveF9leHBvcnRlci5sb2ciKQpleGVjIDI+JjEKCkVYUE9SVEVSX0JJTj1iaW4vYmxhY2tib3hfZXhwb3J0ZXIvYmxhY2tib3hfZXhwb3J0ZXIKaWYgWyAhIC1mICRFWFBPUlRFUl9CSU4gXTsgdGhlbgogIEVYUE9SVEVSX0JJTj1iaW4vYmxhY2tib3hfZXhwb3J0ZXIKZmkKCnt7LSBpZiAuTnVtYU5vZGV9fQpleGVjIG51bWFjdGwgLS1jcHVub2RlYmluZD17ey5OdW1hTm9kZX19IC0tbWVtYmluZD17ey5OdW1hTm9kZX19ICRFWFBPUlRFUl9CSU4gXAp7ey0gZWxzZX19CmV4ZWMgJEVYUE9SVEVSX0JJTiBcCnt7LSBlbmR9fQogICAgLS13ZWIubGlzdGVuLWFkZHJlc3M9Ijp7ey5Qb3J0fX0iIFwKICAgIC0tbG9nLmxldmVsPSJpbmZvIiBcCiAgICAtLWNvbmZpZy5maWxlPSJjb25mL2JsYWNrYm94LnltbCIK" - autogenFiles["/templates/scripts/run_cdc.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KY2QgIiR7REVQTE9ZX0RJUn0iIHx8IGV4aXQgMQoKe3stIGRlZmluZSAiUERMaXN0In19CiAge3stIHJhbmdlICRpZHgsICRwZCA6PSAufX0KICAgIHt7LSBpZiBlcSAkaWR4IDB9fQogICAgICB7ey0gJHBkLlNjaGVtZX19Oi8ve3skcGQuSVB9fTp7eyRwZC5DbGllbnRQb3J0fX0KICAgIHt7LSBlbHNlIC19fQogICAgICAse3stICRwZC5TY2hlbWV9fTovL3t7JHBkLklQfX06e3skcGQuQ2xpZW50UG9ydH19CiAgICB7ey0gZW5kfX0KICB7ey0gZW5kfX0Ke3stIGVuZH19Cgp7ey0gaWYgLk51bWFOb2RlfX0KZXhlYyBudW1hY3RsIC0tY3B1bm9kZWJpbmQ9e3suTnVtYU5vZGV9fSAtLW1lbWJpbmQ9e3suTnVtYU5vZGV9fSBiaW4vY2RjIHNlcnZlciBcCnt7LSBlbHNlfX0KZXhlYyBiaW4vY2RjIHNlcnZlciBcCnt7LSBlbmR9fQogICAgLS1hZGRyICIwLjAuMC4wOnt7LlBvcnR9fSIgXAogICAgLS1hZHZlcnRpc2UtYWRkciAie3suSVB9fTp7ey5Qb3J0fX0iIFwKICAgIC0tcGQgInt7dGVtcGxhdGUgIlBETGlzdCIgLkVuZHBvaW50c319IiBcCnt7LSBpZiAuVExTRW5hYmxlZH19CiAgICAtLWNhIHRscy9jYS5jcnQgXAogICAgLS1jZXJ0IHRscy9jZGMuY3J0IFwKICAgIC0ta2V5IHRscy9jZGMucGVtIFwKe3stIGVuZH19Cnt7LSBpZiAuR0NUVEx9fQogICAgLS1nYy10dGwge3suR0NUVEx9fSBcCnt7LSBlbmR9fQp7ey0gaWYgLlRafX0KICAgIC0tdHogInt7LlRafX0iIFwKe3stIGVuZH19CiAgICAtLWxvZy1maWxlICJ7ey5Mb2dEaXJ9fS9jZGMubG9nIiAyPj4gInt7LkxvZ0Rpcn19L2NkY19zdGRlcnIubG9nIgo=" - autogenFiles["/templates/scripts/run_dm-master.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KY2QgIiR7REVQTE9ZX0RJUn0iIHx8IGV4aXQgMQoKe3stIGRlZmluZSAiTWFzdGVyTGlzdCJ9fQogIHt7LSByYW5nZSAkaWR4LCAkbWFzdGVyIDo9IC59fQogICAge3stIGlmIGVxICRpZHggMH19CiAgICAgIHt7LSAkbWFzdGVyLk5hbWV9fT17eyRtYXN0ZXIuU2NoZW1lfX06Ly97eyRtYXN0ZXIuSVB9fTp7eyRtYXN0ZXIuUGVlclBvcnR9fQogICAge3stIGVsc2UgLX19CiAgICAgICx7ey0gJG1hc3Rlci5OYW1lfX09e3skbWFzdGVyLlNjaGVtZX19Oi8ve3skbWFzdGVyLklQfX06e3skbWFzdGVyLlBlZXJQb3J0fX0KICAgIHt7LSBlbmR9fQogIHt7LSBlbmR9fQp7ey0gZW5kfX0KCnt7LSBpZiAuTnVtYU5vZGV9fQpleGVjIG51bWFjdGwgLS1jcHVub2RlYmluZD17ey5OdW1hTm9kZX19IC0tbWVtYmluZD17ey5OdW1hTm9kZX19IGJpbi9kbS1tYXN0ZXIvZG0tbWFzdGVyIFwKe3stIGVsc2V9fQpleGVjIGJpbi9kbS1tYXN0ZXIvZG0tbWFzdGVyIFwKe3stIGVuZH19Cnt7LSBpZiAuVjFTb3VyY2VQYXRofX0KICAgIC0tdjEtc291cmNlcy1wYXRoPSJ7ey5WMVNvdXJjZVBhdGh9fSIgXAp7ey0gZW5kfX0KICAgIC0tbmFtZT0ie3suTmFtZX19IiBcCiAgICAtLW1hc3Rlci1hZGRyPSIwLjAuMC4wOnt7LlBvcnR9fSIgXAogICAgLS1hZHZlcnRpc2UtYWRkcj0ie3suSVB9fTp7ey5Qb3J0fX0iIFwKICAgIC0tcGVlci11cmxzPSJ7ey5JUH19Ont7LlBlZXJQb3J0fX0iIFwKICAgIC0tYWR2ZXJ0aXNlLXBlZXItdXJscz0ie3suSVB9fTp7ey5QZWVyUG9ydH19IiBcCiAgICAtLWxvZy1maWxlPSJ7ey5Mb2dEaXJ9fS9kbS1tYXN0ZXIubG9nIiBcCiAgICAtLWRhdGEtZGlyPSJ7ey5EYXRhRGlyfX0iIFwKICAgIC0taW5pdGlhbC1jbHVzdGVyPSJ7e3RlbXBsYXRlICJNYXN0ZXJMaXN0IiAuRW5kcG9pbnRzfX0iIFwKICAgIC0tY29uZmlnPWNvbmYvZG0tbWFzdGVyLnRvbWwgPj4gInt7LkxvZ0Rpcn19L2RtLW1hc3Rlcl9zdGRvdXQubG9nIiAyPj4gInt7LkxvZ0Rpcn19L2RtLW1hc3Rlcl9zdGRlcnIubG9nIgo=" - autogenFiles["/templates/scripts/run_dm-master_scale.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KY2QgIiR7REVQTE9ZX0RJUn0iIHx8IGV4aXQgMQoKe3stIGRlZmluZSAiTWFzdGVyTGlzdCJ9fQogIHt7LSByYW5nZSAkaWR4LCAkbWFzdGVyIDo9IC59fQogICAge3stIGlmIGVxICRpZHggMH19CiAgICAgIHt7LSAkbWFzdGVyLklQfX06e3skbWFzdGVyLlBvcnR9fQogICAge3stIGVsc2UgLX19CiAgICAgICx7ey0gJG1hc3Rlci5JUH19Ont7JG1hc3Rlci5Qb3J0fX0KICAgIHt7LSBlbmR9fQogIHt7LSBlbmR9fQp7ey0gZW5kfX0KCnt7LSBpZiAuTnVtYU5vZGV9fQpleGVjIG51bWFjdGwgLS1jcHVub2RlYmluZD17ey5OdW1hTm9kZX19IC0tbWVtYmluZD17ey5OdW1hTm9kZX19IGJpbi9kbS1tYXN0ZXIvZG0tbWFzdGVyIFwKe3stIGVsc2V9fQpleGVjIGJpbi9kbS1tYXN0ZXIvZG0tbWFzdGVyIFwKe3stIGVuZH19CiAgICAtLW5hbWU9Int7Lk5hbWV9fSIgXAogICAgLS1tYXN0ZXItYWRkcj0iMC4wLjAuMDp7ey5Qb3J0fX0iIFwKICAgIC0tYWR2ZXJ0aXNlLWFkZHI9Int7LklQfX06e3suUG9ydH19IiBcCiAgICAtLXBlZXItdXJscz0ie3suU2NoZW1lfX06Ly97ey5JUH19Ont7LlBlZXJQb3J0fX0iIFwKICAgIC0tYWR2ZXJ0aXNlLXBlZXItdXJscz0ie3suU2NoZW1lfX06Ly97ey5JUH19Ont7LlBlZXJQb3J0fX0iIFwKICAgIC0tbG9nLWZpbGU9Int7LkxvZ0Rpcn19L2RtLW1hc3Rlci5sb2ciIFwKICAgIC0tZGF0YS1kaXI9Int7LkRhdGFEaXJ9fSIgXAogICAgLS1qb2luPSJ7e3RlbXBsYXRlICJNYXN0ZXJMaXN0IiAuRW5kcG9pbnRzfX0iIFwKICAgIC0tY29uZmlnPWNvbmYvZG0tbWFzdGVyLnRvbWwgPj4gInt7LkxvZ0Rpcn19L2RtLW1hc3Rlcl9zdGRvdXQubG9nIiAyPj4gInt7LkxvZ0Rpcn19L2RtLW1hc3Rlcl9zdGRlcnIubG9nIgo=" - autogenFiles["/templates/scripts/run_dm-worker.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KCmNkICIke0RFUExPWV9ESVJ9IiB8fCBleGl0IDEKCnt7LSBkZWZpbmUgIk1hc3Rlckxpc3QifX0KICB7ey0gcmFuZ2UgJGlkeCwgJG1hc3RlciA6PSAufX0KICAgIHt7LSBpZiBlcSAkaWR4IDB9fQogICAgICB7ey0gJG1hc3Rlci5JUH19Ont7JG1hc3Rlci5Qb3J0fX0KICAgIHt7LSBlbHNlIC19fQogICAgICAse3skbWFzdGVyLklQfX06e3skbWFzdGVyLlBvcnR9fQogICAge3stIGVuZH19CiAge3stIGVuZH19Cnt7LSBlbmR9fQoKe3stIGlmIC5OdW1hTm9kZX19CmV4ZWMgbnVtYWN0bCAtLWNwdW5vZGViaW5kPXt7Lk51bWFOb2RlfX0gLS1tZW1iaW5kPXt7Lk51bWFOb2RlfX0gYmluL2RtLXdvcmtlci9kbS13b3JrZXIgXAp7ey0gZWxzZX19CmV4ZWMgYmluL2RtLXdvcmtlci9kbS13b3JrZXIgXAp7ey0gZW5kfX0KICAgIC0tbmFtZT0ie3suTmFtZX19IiBcCiAgICAtLXdvcmtlci1hZGRyPSIwLjAuMC4wOnt7LlBvcnR9fSIgXAogICAgLS1hZHZlcnRpc2UtYWRkcj0ie3suSVB9fTp7ey5Qb3J0fX0iIFwKICAgIC0tbG9nLWZpbGU9Int7LkxvZ0Rpcn19L2RtLXdvcmtlci5sb2ciIFwKICAgIC0tam9pbj0ie3t0ZW1wbGF0ZSAiTWFzdGVyTGlzdCIgLkVuZHBvaW50c319IiBcCiAgICAtLWNvbmZpZz1jb25mL2RtLXdvcmtlci50b21sID4+ICJ7ey5Mb2dEaXJ9fS9kbS13b3JrZXJfc3Rkb3V0LmxvZyIgMj4+ICJ7ey5Mb2dEaXJ9fS9kbS13b3JrZXJfc3RkZXJyLmxvZyIK" - autogenFiles["/templates/scripts/run_drainer.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KCmNkICIke0RFUExPWV9ESVJ9IiB8fCBleGl0IDEKCnt7LSBkZWZpbmUgIlBETGlzdCJ9fQogIHt7LSByYW5nZSAkaWR4LCAkcGQgOj0gLn19CiAgICB7ey0gaWYgZXEgJGlkeCAwfX0KICAgICAge3stICRwZC5TY2hlbWV9fTovL3t7JHBkLklQfX06e3skcGQuQ2xpZW50UG9ydH19CiAgICB7ey0gZWxzZSAtfX0KICAgICAgLHt7LSAkcGQuU2NoZW1lfX06Ly97eyRwZC5JUH19Ont7JHBkLkNsaWVudFBvcnR9fQogICAge3stIGVuZH19CiAge3stIGVuZH19Cnt7LSBlbmR9fQoKe3stIGlmIC5OdW1hTm9kZX19CmV4ZWMgbnVtYWN0bCAtLWNwdW5vZGViaW5kPXt7Lk51bWFOb2RlfX0gLS1tZW1iaW5kPXt7Lk51bWFOb2RlfX0gYmluL2RyYWluZXIgXAp7ey0gZWxzZX19CmV4ZWMgYmluL2RyYWluZXIgXAp7ey0gZW5kfX0Ke3stIGlmIC5Ob2RlSUR9fQogICAgLS1ub2RlLWlkPSJ7ey5Ob2RlSUR9fSIgXAp7ey0gZW5kfX0KICAgIC0tYWRkcj0ie3suSVB9fTp7ey5Qb3J0fX0iIFwKICAgIC0tcGQtdXJscz0ie3t0ZW1wbGF0ZSAiUERMaXN0IiAuRW5kcG9pbnRzfX0iIFwKICAgIC0tZGF0YS1kaXI9Int7LkRhdGFEaXJ9fSIgXAogICAgLS1sb2ctZmlsZT0ie3suTG9nRGlyfX0vZHJhaW5lci5sb2ciIFwKICAgIC0tY29uZmlnPWNvbmYvZHJhaW5lci50b21sIFwKICAgIC0taW5pdGlhbC1jb21taXQtdHM9Int7LkNvbW1pdFRzfX0iIDI+PiAie3suTG9nRGlyfX0vZHJhaW5lcl9zdGRlcnIubG9nIgo=" - autogenFiles["/templates/scripts/run_grafana.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KY2QgIiR7REVQTE9ZX0RJUn0iIHx8IGV4aXQgMQoKTEFORz1lbl9VUy5VVEYtOCBcCnt7LSBpZiAuTnVtYU5vZGV9fQpleGVjIG51bWFjdGwgLS1jcHVub2RlYmluZD17ey5OdW1hTm9kZX19IC0tbWVtYmluZD17ey5OdW1hTm9kZX19IGJpbi9iaW4vZ3JhZmFuYS1zZXJ2ZXIgXAp7ey0gZWxzZX19CmV4ZWMgYmluL2Jpbi9ncmFmYW5hLXNlcnZlciBcCnt7LSBlbmR9fQogICAgLS1ob21lcGF0aD0ie3suRGVwbG95RGlyfX0vYmluIiBcCiAgICAtLWNvbmZpZz0ie3suRGVwbG95RGlyfX0vY29uZi9ncmFmYW5hLmluaSIK" - autogenFiles["/templates/scripts/run_node_exporter.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KY2QgIiR7REVQTE9ZX0RJUn0iIHx8IGV4aXQgMQoKZXhlYyA+ID4odGVlIC1pIC1hICJ7ey5Mb2dEaXJ9fS9ub2RlX2V4cG9ydGVyLmxvZyIpCmV4ZWMgMj4mMQoKRVhQT1JURVJfQklOPWJpbi9ub2RlX2V4cG9ydGVyL25vZGVfZXhwb3J0ZXIKaWYgWyAhIC1mICRFWFBPUlRFUl9CSU4gXTsgdGhlbgogIEVYUE9SVEVSX0JJTj1iaW4vbm9kZV9leHBvcnRlcgpmaQoKe3stIGlmIC5OdW1hTm9kZX19CmV4ZWMgbnVtYWN0bCAtLWNwdW5vZGViaW5kPXt7Lk51bWFOb2RlfX0gLS1tZW1iaW5kPXt7Lk51bWFOb2RlfX0gJEVYUE9SVEVSX0JJTiBcCnt7LSBlbHNlfX0KZXhlYyAkRVhQT1JURVJfQklOIFwKe3stIGVuZH19CiAgICAtLXdlYi5saXN0ZW4tYWRkcmVzcz0iOnt7LlBvcnR9fSIgXAogICAgLS1jb2xsZWN0b3IudGNwc3RhdCBcCiAgICAtLWNvbGxlY3Rvci5zeXN0ZW1kIFwKICAgIC0tY29sbGVjdG9yLm1vdW50c3RhdHMgXAogICAgLS1jb2xsZWN0b3IubWVtaW5mb19udW1hIFwKICAgIC0tY29sbGVjdG9yLmludGVycnVwdHMgXAogICAgLS1jb2xsZWN0b3IuYnVkZHlpbmZvIFwKICAgIC0tY29sbGVjdG9yLnZtc3RhdC5maWVsZHM9Il4uKiIgXAogICAgLS1sb2cubGV2ZWw9ImluZm8iCg==" - autogenFiles["/templates/scripts/run_pd.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KCmNkICIke0RFUExPWV9ESVJ9IiB8fCBleGl0IDEKCnt7LSBkZWZpbmUgIlBETGlzdCJ9fQogIHt7LSByYW5nZSAkaWR4LCAkcGQgOj0gLn19CiAgICB7ey0gaWYgZXEgJGlkeCAwfX0KICAgICAge3stICRwZC5OYW1lfX09e3skcGQuU2NoZW1lfX06Ly97eyRwZC5JUH19Ont7JHBkLlBlZXJQb3J0fX0KICAgIHt7LSBlbHNlIC19fQogICAgICAse3stICRwZC5OYW1lfX09e3skcGQuU2NoZW1lfX06Ly97eyRwZC5JUH19Ont7JHBkLlBlZXJQb3J0fX0KICAgIHt7LSBlbmR9fQogIHt7LSBlbmR9fQp7ey0gZW5kfX0KCnt7LSBpZiAuTnVtYU5vZGV9fQpleGVjIG51bWFjdGwgLS1jcHVub2RlYmluZD17ey5OdW1hTm9kZX19IC0tbWVtYmluZD17ey5OdW1hTm9kZX19IGJpbi9wZC1zZXJ2ZXIgXAp7ey0gZWxzZX19CmV4ZWMgYmluL3BkLXNlcnZlciBcCnt7LSBlbmR9fQogICAgLS1uYW1lPSJ7ey5OYW1lfX0iIFwKICAgIC0tY2xpZW50LXVybHM9Int7LlNjaGVtZX19Oi8ve3suTGlzdGVuSG9zdH19Ont7LkNsaWVudFBvcnR9fSIgXAogICAgLS1hZHZlcnRpc2UtY2xpZW50LXVybHM9Int7LlNjaGVtZX19Oi8ve3suSVB9fTp7ey5DbGllbnRQb3J0fX0iIFwKICAgIC0tcGVlci11cmxzPSJ7ey5TY2hlbWV9fTovL3t7Lkxpc3Rlbkhvc3R9fTp7ey5QZWVyUG9ydH19IiBcCiAgICAtLWFkdmVydGlzZS1wZWVyLXVybHM9Int7LlNjaGVtZX19Oi8ve3suSVB9fTp7ey5QZWVyUG9ydH19IiBcCiAgICAtLWRhdGEtZGlyPSJ7ey5EYXRhRGlyfX0iIFwKICAgIC0taW5pdGlhbC1jbHVzdGVyPSJ7e3RlbXBsYXRlICJQRExpc3QiIC5FbmRwb2ludHN9fSIgXAogICAgLS1jb25maWc9Y29uZi9wZC50b21sIFwKICAgIC0tbG9nLWZpbGU9Int7LkxvZ0Rpcn19L3BkLmxvZyIgMj4+ICJ7ey5Mb2dEaXJ9fS9wZF9zdGRlcnIubG9nIgogIAo=" - autogenFiles["/templates/scripts/run_pd_scale.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KCmNkICIke0RFUExPWV9ESVJ9IiB8fCBleGl0IDEKCnt7LSBkZWZpbmUgIlBETGlzdCJ9fQogIHt7LSByYW5nZSAkaWR4LCAkcGQgOj0gLn19CiAgICB7ey0gaWYgZXEgJGlkeCAwfX0KICAgICAge3stICRwZC5TY2hlbWV9fTovL3t7JHBkLklQfX06e3skcGQuQ2xpZW50UG9ydH19CiAgICB7ey0gZWxzZSAtfX0KICAgICAgLHt7LSAkcGQuU2NoZW1lfX06Ly97eyRwZC5JUH19Ont7JHBkLkNsaWVudFBvcnR9fQogICAge3stIGVuZH19CiAge3stIGVuZH19Cnt7LSBlbmR9fQoKe3stIGlmIC5OdW1hTm9kZX19CmV4ZWMgbnVtYWN0bCAtLWNwdW5vZGViaW5kPXt7Lk51bWFOb2RlfX0gLS1tZW1iaW5kPXt7Lk51bWFOb2RlfX0gYmluL3BkLXNlcnZlciBcCnt7LSBlbHNlfX0KZXhlYyBiaW4vcGQtc2VydmVyIFwKe3stIGVuZH19CiAgICAtLW5hbWU9Int7Lk5hbWV9fSIgXAogICAgLS1jbGllbnQtdXJscz0ie3suU2NoZW1lfX06Ly97ey5MaXN0ZW5Ib3N0fX06e3suQ2xpZW50UG9ydH19IiBcCiAgICAtLWFkdmVydGlzZS1jbGllbnQtdXJscz0ie3suU2NoZW1lfX06Ly97ey5JUH19Ont7LkNsaWVudFBvcnR9fSIgXAogICAgLS1wZWVyLXVybHM9Int7LlNjaGVtZX19Oi8ve3suTGlzdGVuSG9zdH19Ont7LlBlZXJQb3J0fX0iIFwKICAgIC0tYWR2ZXJ0aXNlLXBlZXItdXJscz0ie3suU2NoZW1lfX06Ly97ey5JUH19Ont7LlBlZXJQb3J0fX0iIFwKICAgIC0tZGF0YS1kaXI9Int7LkRhdGFEaXJ9fSIgXAogICAgLS1qb2luPSJ7e3RlbXBsYXRlICJQRExpc3QiIC5FbmRwb2ludHN9fSIgXAogICAgLS1jb25maWc9Y29uZi9wZC50b21sIFwKICAgIC0tbG9nLWZpbGU9Int7LkxvZ0Rpcn19L3BkLmxvZyIgMj4+ICJ7ey5Mb2dEaXJ9fS9wZF9zdGRlcnIubG9nIgogIAo=" - autogenFiles["/templates/scripts/run_prometheus.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgpERVBMT1lfRElSPXt7LkRlcGxveURpcn19CmNkICIke0RFUExPWV9ESVJ9IiB8fCBleGl0IDEKCiMgV0FSTklORzogVGhpcyBmaWxlIHdhcyBhdXRvLWdlbmVyYXRlZC4gRG8gbm90IGVkaXQhCiMgICAgICAgICAgQWxsIHlvdXIgZWRpdCBtaWdodCBiZSBvdmVyd3JpdHRlbiEKCmV4ZWMgPiA+KHRlZSAtaSAtYSAie3suTG9nRGlyfX0vcHJvbWV0aGV1cy5sb2ciKQpleGVjIDI+JjEKCnt7LSBpZiAuTnVtYU5vZGV9fQpleGVjIG51bWFjdGwgLS1jcHVub2RlYmluZD17ey5OdW1hTm9kZX19IC0tbWVtYmluZD17ey5OdW1hTm9kZX19IGJpbi9wcm9tZXRoZXVzL3Byb21ldGhldXMgXAp7ey0gZWxzZX19CmV4ZWMgYmluL3Byb21ldGhldXMvcHJvbWV0aGV1cyBcCnt7LSBlbmR9fQogICAgLS1jb25maWcuZmlsZT0ie3suRGVwbG95RGlyfX0vY29uZi9wcm9tZXRoZXVzLnltbCIgXAogICAgLS13ZWIubGlzdGVuLWFkZHJlc3M9Ijp7ey5Qb3J0fX0iIFwKICAgIC0td2ViLmV4dGVybmFsLXVybD0iaHR0cDovL3t7LklQfX06e3suUG9ydH19LyIgXAogICAgLS13ZWIuZW5hYmxlLWFkbWluLWFwaSBcCiAgICAtLWxvZy5sZXZlbD0iaW5mbyIgXAogICAgLS1zdG9yYWdlLnRzZGIucGF0aD0ie3suRGF0YURpcn19IiBcCiAgICAtLXN0b3JhZ2UudHNkYi5yZXRlbnRpb249Int7LlJldGVudGlvbn19Igo=" - autogenFiles["/templates/scripts/run_pump.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KCmNkICIke0RFUExPWV9ESVJ9IiB8fCBleGl0IDEKCnt7LSBkZWZpbmUgIlBETGlzdCJ9fQogIHt7LSByYW5nZSAkaWR4LCAkcGQgOj0gLn19CiAgICB7ey0gaWYgZXEgJGlkeCAwfX0KICAgICAge3stICRwZC5TY2hlbWV9fTovL3t7JHBkLklQfX06e3skcGQuQ2xpZW50UG9ydH19CiAgICB7ey0gZWxzZSAtfX0KICAgICAgLHt7LSAkcGQuU2NoZW1lfX06Ly97eyRwZC5JUH19Ont7JHBkLkNsaWVudFBvcnR9fQogICAge3stIGVuZH19CiAge3stIGVuZH19Cnt7LSBlbmR9fQoKe3stIGlmIC5OdW1hTm9kZX19CmV4ZWMgbnVtYWN0bCAtLWNwdW5vZGViaW5kPXt7Lk51bWFOb2RlfX0gLS1tZW1iaW5kPXt7Lk51bWFOb2RlfX0gYmluL3B1bXAgXAp7ey0gZWxzZX19CmV4ZWMgYmluL3B1bXAgXAp7ey0gZW5kfX0Ke3stIGlmIC5Ob2RlSUR9fQogICAgLS1ub2RlLWlkPSJ7ey5Ob2RlSUR9fSIgXAp7ey0gZW5kfX0KICAgIC0tYWRkcj0iMC4wLjAuMDp7ey5Qb3J0fX0iIFwKICAgIC0tYWR2ZXJ0aXNlLWFkZHI9Int7Lkhvc3R9fTp7ey5Qb3J0fX0iIFwKICAgIC0tcGQtdXJscz0ie3t0ZW1wbGF0ZSAiUERMaXN0IiAuRW5kcG9pbnRzfX0iIFwKICAgIC0tZGF0YS1kaXI9Int7LkRhdGFEaXJ9fSIgXAogICAgLS1sb2ctZmlsZT0ie3suTG9nRGlyfX0vcHVtcC5sb2ciIFwKICAgIC0tY29uZmlnPWNvbmYvcHVtcC50b21sIDI+PiAie3suTG9nRGlyfX0vcHVtcF9zdGRlcnIubG9nIgo=" - autogenFiles["/templates/scripts/run_tidb.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCkRFUExPWV9ESVI9e3suRGVwbG95RGlyfX0KCmNkICIke0RFUExPWV9ESVJ9IiB8fCBleGl0IDEKCnt7LSBkZWZpbmUgIlBETGlzdCJ9fQogIHt7LSByYW5nZSAkaWR4LCAkcGQgOj0gLn19CiAgICB7ey0gaWYgZXEgJGlkeCAwfX0KICAgICAge3stICRwZC5JUH19Ont7JHBkLkNsaWVudFBvcnR9fQogICAge3stIGVsc2UgLX19CiAgICAgICx7eyRwZC5JUH19Ont7JHBkLkNsaWVudFBvcnR9fQogICAge3stIGVuZH19CiAge3stIGVuZH19Cnt7LSBlbmR9fQoKe3stIGlmIC5OdW1hTm9kZX19CmV4ZWMgbnVtYWN0bCAtLWNwdW5vZGViaW5kPXt7Lk51bWFOb2RlfX0gLS1tZW1iaW5kPXt7Lk51bWFOb2RlfX0gZW52IEdPREVCVUc9bWFkdmRvbnRuZWVkPTEgYmluL3RpZGItc2VydmVyIFwKe3stIGVsc2V9fQpleGVjIGVudiBHT0RFQlVHPW1hZHZkb250bmVlZD0xIGJpbi90aWRiLXNlcnZlciBcCnt7LSBlbmR9fQogICAgLVAge3suUG9ydH19IFwKICAgIC0tc3RhdHVzPSJ7ey5TdGF0dXNQb3J0fX0iIFwKICAgIC0taG9zdD0ie3suTGlzdGVuSG9zdH19IiBcCiAgICAtLWFkdmVydGlzZS1hZGRyZXNzPSJ7ey5JUH19IiBcCiAgICAtLXN0b3JlPSJ0aWt2IiBcCiAgICAtLXBhdGg9Int7dGVtcGxhdGUgIlBETGlzdCIgLkVuZHBvaW50c319IiBcCiAgICAtLWxvZy1zbG93LXF1ZXJ5PSJsb2cvdGlkYl9zbG93X3F1ZXJ5LmxvZyIgXAogICAgLS1jb25maWc9Y29uZi90aWRiLnRvbWwgXAogICAgLS1sb2ctZmlsZT0ie3suTG9nRGlyfX0vdGlkYi5sb2ciIDI+PiAie3suTG9nRGlyfX0vdGlkYl9zdGRlcnIubG9nIgo=" - autogenFiles["/templates/scripts/run_tiflash.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCmNkICJ7ey5EZXBsb3lEaXJ9fSIgfHwgZXhpdCAxCgpleHBvcnQgUlVTVF9CQUNLVFJBQ0U9MQoKZXhwb3J0IFRaPSR7VFo6LS9ldGMvbG9jYWx0aW1lfQpleHBvcnQgTERfTElCUkFSWV9QQVRIPXt7LkRlcGxveURpcn19L2Jpbi90aWZsYXNoOiRMRF9MSUJSQVJZX1BBVEgKCmVjaG8gLW4gJ3N5bmMgLi4uICcKc3RhdD0kKHRpbWUgc3luYykKZWNobyBvawplY2hvICRzdGF0Cgp7ey0gaWYgLk51bWFOb2RlfX0KZXhlYyBudW1hY3RsIC0tY3B1bm9kZWJpbmQ9e3suTnVtYU5vZGV9fSAtLW1lbWJpbmQ9e3suTnVtYU5vZGV9fSBiaW4vdGlmbGFzaC90aWZsYXNoIHNlcnZlciBcCnt7LSBlbHNlfX0KZXhlYyBiaW4vdGlmbGFzaC90aWZsYXNoIHNlcnZlciBcCnt7LSBlbmR9fQogICAgLS1jb25maWctZmlsZSBjb25mL3RpZmxhc2gudG9tbCAyPj4gInt7LkxvZ0Rpcn19L3RpZmxhc2hfc3RkZXJyLmxvZyIK" - autogenFiles["/templates/scripts/run_tikv.sh.tpl"] = "IyEvYmluL2Jhc2gKc2V0IC1lCgojIFdBUk5JTkc6IFRoaXMgZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQuIERvIG5vdCBlZGl0IQojICAgICAgICAgIEFsbCB5b3VyIGVkaXQgbWlnaHQgYmUgb3ZlcndyaXR0ZW4hCmNkICJ7ey5EZXBsb3lEaXJ9fSIgfHwgZXhpdCAxCgplY2hvIC1uICdzeW5jIC4uLiAnCnN0YXQ9JCh0aW1lIHN5bmMgfHwgc3luYykKZWNobyBvawplY2hvICRzdGF0Cgp7ey0gZGVmaW5lICJQRExpc3QifX0KICB7ey0gcmFuZ2UgJGlkeCwgJHBkIDo9IC59fQogICAge3stIGlmIGVxICRpZHggMH19CiAgICAgIHt7LSAkcGQuSVB9fTp7eyRwZC5DbGllbnRQb3J0fX0KICAgIHt7LSBlbHNlIC19fQogICAgICAse3skcGQuSVB9fTp7eyRwZC5DbGllbnRQb3J0fX0KICAgIHt7LSBlbmR9fQogIHt7LSBlbmR9fQp7ey0gZW5kfX0KCnt7LSBpZiAuTnVtYU5vZGV9fQpleGVjIG51bWFjdGwgLS1jcHVub2RlYmluZD17ey5OdW1hTm9kZX19IC0tbWVtYmluZD17ey5OdW1hTm9kZX19IGJpbi90aWt2LXNlcnZlciBcCnt7LSBlbHNlfX0KZXhlYyBiaW4vdGlrdi1zZXJ2ZXIgXAp7ey0gZW5kfX0KICAgIC0tYWRkciAie3suTGlzdGVuSG9zdH19Ont7LlBvcnR9fSIgXAogICAgLS1hZHZlcnRpc2UtYWRkciAie3suSVB9fTp7ey5Qb3J0fX0iIFwKICAgIC0tc3RhdHVzLWFkZHIgInt7Lkxpc3Rlbkhvc3R9fTp7ey5TdGF0dXNQb3J0fX0iIFwKe3stIGlmIC5TdXBwb3J0QWR2ZXJ0aXNlU3RhdHVzQWRkcn19CiAgICAtLWFkdmVydGlzZS1zdGF0dXMtYWRkciAie3suSVB9fTp7ey5TdGF0dXNQb3J0fX0iIFwKe3stIGVuZH19CiAgICAtLXBkICJ7e3RlbXBsYXRlICJQRExpc3QiIC5FbmRwb2ludHN9fSIgXAogICAgLS1kYXRhLWRpciAie3suRGF0YURpcn19IiBcCiAgICAtLWNvbmZpZyBjb25mL3Rpa3YudG9tbCBcCiAgICAtLWxvZy1maWxlICJ7ey5Mb2dEaXJ9fS90aWt2LmxvZyIgMj4+ICJ7ey5Mb2dEaXJ9fS90aWt2X3N0ZGVyci5sb2ciCg==" - autogenFiles["/templates/scripts/spark-env.sh.tpl"] = "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIFRoaXMgZmlsZSBpcyBzb3VyY2VkIHdoZW4gcnVubmluZyB2YXJpb3VzIFNwYXJrIHByb2dyYW1zLgojIENvcHkgaXQgYXMgc3BhcmstZW52LnNoIGFuZCBlZGl0IHRoYXQgdG8gY29uZmlndXJlIFNwYXJrIGZvciB5b3VyIHNpdGUuCgojIE9wdGlvbnMgcmVhZCB3aGVuIGxhdW5jaGluZyBwcm9ncmFtcyBsb2NhbGx5IHdpdGgKIyAuL2Jpbi9ydW4tZXhhbXBsZSBvciAuL2Jpbi9zcGFyay1zdWJtaXQKIyAtIEhBRE9PUF9DT05GX0RJUiwgdG8gcG9pbnQgU3BhcmsgdG93YXJkcyBIYWRvb3AgY29uZmlndXJhdGlvbiBmaWxlcwojIC0gU1BBUktfTE9DQUxfSVAsIHRvIHNldCB0aGUgSVAgYWRkcmVzcyBTcGFyayBiaW5kcyB0byBvbiB0aGlzIG5vZGUKIyAtIFNQQVJLX1BVQkxJQ19ETlMsIHRvIHNldCB0aGUgcHVibGljIGRucyBuYW1lIG9mIHRoZSBkcml2ZXIgcHJvZ3JhbQojIC0gU1BBUktfQ0xBU1NQQVRILCBkZWZhdWx0IGNsYXNzcGF0aCBlbnRyaWVzIHRvIGFwcGVuZAoKIyBPcHRpb25zIHJlYWQgYnkgZXhlY3V0b3JzIGFuZCBkcml2ZXJzIHJ1bm5pbmcgaW5zaWRlIHRoZSBjbHVzdGVyCiMgLSBTUEFSS19MT0NBTF9JUCwgdG8gc2V0IHRoZSBJUCBhZGRyZXNzIFNwYXJrIGJpbmRzIHRvIG9uIHRoaXMgbm9kZQojIC0gU1BBUktfUFVCTElDX0ROUywgdG8gc2V0IHRoZSBwdWJsaWMgRE5TIG5hbWUgb2YgdGhlIGRyaXZlciBwcm9ncmFtCiMgLSBTUEFSS19DTEFTU1BBVEgsIGRlZmF1bHQgY2xhc3NwYXRoIGVudHJpZXMgdG8gYXBwZW5kCiMgLSBTUEFSS19MT0NBTF9ESVJTLCBzdG9yYWdlIGRpcmVjdG9yaWVzIHRvIHVzZSBvbiB0aGlzIG5vZGUgZm9yIHNodWZmbGUgYW5kIFJERCBkYXRhCiMgLSBNRVNPU19OQVRJVkVfSkFWQV9MSUJSQVJZLCB0byBwb2ludCB0byB5b3VyIGxpYm1lc29zLnNvIGlmIHlvdSB1c2UgTWVzb3MKCiMgT3B0aW9ucyByZWFkIGluIFlBUk4gY2xpZW50IG1vZGUKIyAtIEhBRE9PUF9DT05GX0RJUiwgdG8gcG9pbnQgU3BhcmsgdG93YXJkcyBIYWRvb3AgY29uZmlndXJhdGlvbiBmaWxlcwojIC0gU1BBUktfRVhFQ1VUT1JfSU5TVEFOQ0VTLCBOdW1iZXIgb2YgZXhlY3V0b3JzIHRvIHN0YXJ0IChEZWZhdWx0OiAyKQojIC0gU1BBUktfRVhFQ1VUT1JfQ09SRVMsIE51bWJlciBvZiBjb3JlcyBmb3IgdGhlIGV4ZWN1dG9ycyAoRGVmYXVsdDogMSkuCiMgLSBTUEFSS19FWEVDVVRPUl9NRU1PUlksIE1lbW9yeSBwZXIgRXhlY3V0b3IgKGUuZy4gMTAwME0sIDJHKSAoRGVmYXVsdDogMUcpCiMgLSBTUEFSS19EUklWRVJfTUVNT1JZLCBNZW1vcnkgZm9yIERyaXZlciAoZS5nLiAxMDAwTSwgMkcpIChEZWZhdWx0OiAxRykKCiMgT3B0aW9ucyBmb3IgdGhlIGRhZW1vbnMgdXNlZCBpbiB0aGUgc3RhbmRhbG9uZSBkZXBsb3kgbW9kZQojIC0gU1BBUktfTUFTVEVSX0hPU1QsIHRvIGJpbmQgdGhlIG1hc3RlciB0byBhIGRpZmZlcmVudCBJUCBhZGRyZXNzIG9yIGhvc3RuYW1lCiMgLSBTUEFSS19NQVNURVJfUE9SVCAvIFNQQVJLX01BU1RFUl9XRUJVSV9QT1JULCB0byB1c2Ugbm9uLWRlZmF1bHQgcG9ydHMgZm9yIHRoZSBtYXN0ZXIKIyAtIFNQQVJLX01BU1RFUl9PUFRTLCB0byBzZXQgY29uZmlnIHByb3BlcnRpZXMgb25seSBmb3IgdGhlIG1hc3RlciAoZS5nLiAiLUR4PXkiKQojIC0gU1BBUktfV09SS0VSX0NPUkVTLCB0byBzZXQgdGhlIG51bWJlciBvZiBjb3JlcyB0byB1c2Ugb24gdGhpcyBtYWNoaW5lCiMgLSBTUEFSS19XT1JLRVJfTUVNT1JZLCB0byBzZXQgaG93IG11Y2ggdG90YWwgbWVtb3J5IHdvcmtlcnMgaGF2ZSB0byBnaXZlIGV4ZWN1dG9ycyAoZS5nLiAxMDAwbSwgMmcpCiMgLSBTUEFSS19XT1JLRVJfUE9SVCAvIFNQQVJLX1dPUktFUl9XRUJVSV9QT1JULCB0byB1c2Ugbm9uLWRlZmF1bHQgcG9ydHMgZm9yIHRoZSB3b3JrZXIKIyAtIFNQQVJLX1dPUktFUl9JTlNUQU5DRVMsIHRvIHNldCB0aGUgbnVtYmVyIG9mIHdvcmtlciBwcm9jZXNzZXMgcGVyIG5vZGUKIyAtIFNQQVJLX1dPUktFUl9ESVIsIHRvIHNldCB0aGUgd29ya2luZyBkaXJlY3Rvcnkgb2Ygd29ya2VyIHByb2Nlc3NlcwojIC0gU1BBUktfV09SS0VSX09QVFMsIHRvIHNldCBjb25maWcgcHJvcGVydGllcyBvbmx5IGZvciB0aGUgd29ya2VyIChlLmcuICItRHg9eSIpCiMgLSBTUEFSS19EQUVNT05fTUVNT1JZLCB0byBhbGxvY2F0ZSB0byB0aGUgbWFzdGVyLCB3b3JrZXIgYW5kIGhpc3Rvcnkgc2VydmVyIHRoZW1zZWx2ZXMgKGRlZmF1bHQ6IDFnKS4KIyAtIFNQQVJLX0hJU1RPUllfT1BUUywgdG8gc2V0IGNvbmZpZyBwcm9wZXJ0aWVzIG9ubHkgZm9yIHRoZSBoaXN0b3J5IHNlcnZlciAoZS5nLiAiLUR4PXkiKQojIC0gU1BBUktfU0hVRkZMRV9PUFRTLCB0byBzZXQgY29uZmlnIHByb3BlcnRpZXMgb25seSBmb3IgdGhlIGV4dGVybmFsIHNodWZmbGUgc2VydmljZSAoZS5nLiAiLUR4PXkiKQojIC0gU1BBUktfREFFTU9OX0pBVkFfT1BUUywgdG8gc2V0IGNvbmZpZyBwcm9wZXJ0aWVzIGZvciBhbGwgZGFlbW9ucyAoZS5nLiAiLUR4PXkiKQojIC0gU1BBUktfUFVCTElDX0ROUywgdG8gc2V0IHRoZSBwdWJsaWMgZG5zIG5hbWUgb2YgdGhlIG1hc3RlciBvciB3b3JrZXJzCgojIEdlbmVyaWMgb3B0aW9ucyBmb3IgdGhlIGRhZW1vbnMgdXNlZCBpbiB0aGUgc3RhbmRhbG9uZSBkZXBsb3kgbW9kZQojIC0gU1BBUktfQ09ORl9ESVIgICAgICBBbHRlcm5hdGUgY29uZiBkaXIuIChEZWZhdWx0OiAke1NQQVJLX0hPTUV9L2NvbmYpCiMgLSBTUEFSS19MT0dfRElSICAgICAgIFdoZXJlIGxvZyBmaWxlcyBhcmUgc3RvcmVkLiAgKERlZmF1bHQ6ICR7U1BBUktfSE9NRX0vbG9ncykKIyAtIFNQQVJLX1BJRF9ESVIgICAgICAgV2hlcmUgdGhlIHBpZCBmaWxlIGlzIHN0b3JlZC4gKERlZmF1bHQ6IC90bXApCiMgLSBTUEFSS19JREVOVF9TVFJJTkcgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIGluc3RhbmNlIG9mIHNwYXJrLiAoRGVmYXVsdDogJFVTRVIpCiMgLSBTUEFSS19OSUNFTkVTUyAgICAgIFRoZSBzY2hlZHVsaW5nIHByaW9yaXR5IGZvciBkYWVtb25zLiAoRGVmYXVsdDogMCkKIyAtIFNQQVJLX05PX0RBRU1PTklaRSAgUnVuIHRoZSBwcm9wb3NlZCBjb21tYW5kIGluIHRoZSBmb3JlZ3JvdW5kLiBJdCB3aWxsIG5vdCBvdXRwdXQgYSBQSUQgZmlsZS4KCiNleHBvcnQgSkFWQV9IT01FLCB0byBzZXQgamRrIGhvbWUKCnt7IHJhbmdlICRrLCAkdiA6PSAuQ3VzdG9tRW52c319Cnt7ICRrIH19PXt7ICR2IH19Cnt7LSBlbmQgfX0KCnt7LSBpZiAuVGlTcGFya01hc3Rlcn19ClNQQVJLX01BU1RFUl9IT1NUPXt7LlRpU3BhcmtNYXN0ZXJ9fQp7ey0gZW5kfX0Ke3stIGlmIG5lIC5NYXN0ZXJQb3J0IDB9fQpTUEFSS19NQVNURVJfUE9SVD17ey5NYXN0ZXJQb3J0fX0Ke3stIGVuZH19Cnt7LSBpZiBuZSAuTWFzdGVyVUlQb3J0IDB9fQpTUEFSS19NQVNURVJfV0VCVUlfUE9SVD17ey5NYXN0ZXJVSVBvcnR9fQp7ey0gZW5kfX0Ke3stIGlmIG5lIC5Xb3JrZXJQb3J0IDB9fQpTUEFSS19XT1JLRVJfUE9SVD17ey5Xb3JrZXJQb3J0fX0Ke3stIGVuZH19Cnt7LSBpZiBuZSAuV29ya2VyVUlQb3J0IDB9fQpTUEFSS19XT1JLRVJfV0VCVUlfUE9SVD17ey5Xb3JrZXJVSVBvcnR9fQp7ey0gZW5kfX0Ke3stIGlmIG5lIC5UaVNwYXJrTG9jYWxJUCAiIn19ClNQQVJLX0xPQ0FMX0lQPXt7LlRpU3BhcmtMb2NhbElQfX0Ke3stIGVuZH19ClNQQVJLX1BVQkxJQ19ETlM9e3suSG9zdH19Cg==" - autogenFiles["/templates/scripts/start_tispark_slave.sh.tpl"] = "IyEvdXNyL2Jpbi9lbnYgYmFzaAoKIwojIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQojIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aAojIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAojICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCiMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIwojICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAojIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgojCgojIFN0YXJ0cyBhIHNsYXZlIG9uIHRoZSBtYWNoaW5lIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGVkIG9uLgojCiMgRW52aXJvbm1lbnQgVmFyaWFibGVzCiMKIyAgIFNQQVJLX1dPUktFUl9JTlNUQU5DRVMgIFRoZSBudW1iZXIgb2Ygd29ya2VyIGluc3RhbmNlcyB0byBydW4gb24gdGhpcwojICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmUuICBEZWZhdWx0IGlzIDEuCiMgICBTUEFSS19XT1JLRVJfUE9SVCAgICAgICBUaGUgYmFzZSBwb3J0IG51bWJlciBmb3IgdGhlIGZpcnN0IHdvcmtlci4gSWYgc2V0LAojICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudCB3b3JrZXJzIHdpbGwgaW5jcmVtZW50IHRoaXMgbnVtYmVyLiAgSWYKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2V0LCBTcGFyayB3aWxsIGZpbmQgYSB2YWxpZCBwb3J0IG51bWJlciwgYnV0CiMgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG5vIGd1YXJhbnRlZSBvZiBhIHByZWRpY3RhYmxlIHBhdHRlcm4uCiMgICBTUEFSS19XT1JLRVJfV0VCVUlfUE9SVCBUaGUgYmFzZSBwb3J0IGZvciB0aGUgd2ViIGludGVyZmFjZSBvZiB0aGUgZmlyc3QKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci4gIFN1YnNlcXVlbnQgd29ya2VycyB3aWxsIGluY3JlbWVudCB0aGlzCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIuICBEZWZhdWx0IGlzIDgwODEuCgppZiBbIC16ICIke1NQQVJLX0hPTUV9IiBdOyB0aGVuCiAgZXhwb3J0IFNQQVJLX0hPTUU9IiQoY2QgImBkaXJuYW1lICIkMCJgIi8uLjsgcHdkKSIKZmkKCiMgTk9URTogVGhpcyBleGFjdCBjbGFzcyBuYW1lIGlzIG1hdGNoZWQgZG93bnN0cmVhbSBieSBTcGFya1N1Ym1pdC4KIyBBbnkgY2hhbmdlcyBuZWVkIHRvIGJlIHJlZmxlY3RlZCB0aGVyZS4KQ0xBU1M9Im9yZy5hcGFjaGUuc3BhcmsuZGVwbG95Lndvcmtlci5Xb3JrZXIiCgppZiBbWyAiJEAiID0gKi0taGVscCBdXSB8fCBbWyAiJEAiID0gKi1oIF1dOyB0aGVuCiAgZWNobyAiVXNhZ2U6IC4vc2Jpbi9zdGFydC1zbGF2ZS5zaCBbb3B0aW9uc10gPG1hc3Rlcj4iCiAgcGF0dGVybj0iVXNhZ2U6IgogIHBhdHRlcm4rPSJcfFVzaW5nIFNwYXJrJ3MgZGVmYXVsdCBsb2c0aiBwcm9maWxlOiIKICBwYXR0ZXJuKz0iXHxSZWdpc3RlcmVkIHNpZ25hbCBoYW5kbGVycyBmb3IiCgogICIke1NQQVJLX0hPTUV9Ii9iaW4vc3BhcmstY2xhc3MgJENMQVNTIC0taGVscCAyPiYxIHwgZ3JlcCAtdiAiJHBhdHRlcm4iIDE+JjIKICBleGl0IDEKZmkKCi4gIiR7U1BBUktfSE9NRX0vc2Jpbi9zcGFyay1jb25maWcuc2giCgouICIke1NQQVJLX0hPTUV9L2Jpbi9sb2FkLXNwYXJrLWVudi5zaCIKCiMgRmlyc3QgYXJndW1lbnQgc2hvdWxkIGJlIHRoZSBtYXN0ZXI7IHdlIG5lZWQgdG8gc3RvcmUgaXQgYXNpZGUgYmVjYXVzZSB3ZSBtYXkKIyBuZWVkIHRvIGluc2VydCBhcmd1bWVudHMgYmV0d2VlbiBpdCBhbmQgdGhlIG90aGVyIGFyZ3VtZW50cwoKe3stIGlmIC5UaVNwYXJrTWFzdGVyfX0KTUFTVEVSPXNwYXJrOi8ve3suVGlTcGFya01hc3Rlcn19Ont7Lk1hc3RlclBvcnR9fQpzaGlmdAp7ey0gZW5kfX0KCiMgRGV0ZXJtaW5lIGRlc2lyZWQgd29ya2VyIHBvcnQKaWYgWyAiJFNQQVJLX1dPUktFUl9XRUJVSV9QT1JUIiA9ICIiIF07IHRoZW4KICBTUEFSS19XT1JLRVJfV0VCVUlfUE9SVD04MDgxCmZpCgojIFN0YXJ0IHVwIHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2Ygd29ya2VycyBvbiB0aGlzIG1hY2hpbmUuCiMgcXVpY2sgbG9jYWwgZnVuY3Rpb24gdG8gc3RhcnQgYSB3b3JrZXIKZnVuY3Rpb24gc3RhcnRfaW5zdGFuY2UgewogIFdPUktFUl9OVU09JDEKICBzaGlmdAoKICBpZiBbICIkU1BBUktfV09SS0VSX1BPUlQiID0gIiIgXTsgdGhlbgogICAgUE9SVF9GTEFHPQogICAgUE9SVF9OVU09CiAgZWxzZQogICAgUE9SVF9GTEFHPSItLXBvcnQiCiAgICBQT1JUX05VTT0kKCggJFNQQVJLX1dPUktFUl9QT1JUICsgJFdPUktFUl9OVU0gLSAxICkpCiAgZmkKICBXRUJVSV9QT1JUPSQoKCAkU1BBUktfV09SS0VSX1dFQlVJX1BPUlQgKyAkV09SS0VSX05VTSAtIDEgKSkKCiAgIiR7U1BBUktfSE9NRX0vc2JpbiIvc3BhcmstZGFlbW9uLnNoIHN0YXJ0ICRDTEFTUyAkV09SS0VSX05VTSBcCiAgICAgLS13ZWJ1aS1wb3J0ICIkV0VCVUlfUE9SVCIgJFBPUlRfRkxBRyAkUE9SVF9OVU0gJE1BU1RFUiAiJEAiCn0KCmlmIFsgIiRTUEFSS19XT1JLRVJfSU5TVEFOQ0VTIiA9ICIiIF07IHRoZW4KICBzdGFydF9pbnN0YW5jZSAxICIkQCIKZWxzZQogIGZvciAoKGk9MDsgaTwkU1BBUktfV09SS0VSX0lOU1RBTkNFUzsgaSsrKSk7IGRvCiAgICBzdGFydF9pbnN0YW5jZSAkKCggMSArICRpICkpICIkQCIKICBkb25lCmZpCg==" - autogenFiles["/templates/systemd/system.service.tpl"] = "W1VuaXRdCkRlc2NyaXB0aW9uPXt7LlNlcnZpY2VOYW1lfX0gc2VydmljZQpBZnRlcj1zeXNsb2cudGFyZ2V0IG5ldHdvcmsudGFyZ2V0IHJlbW90ZS1mcy50YXJnZXQgbnNzLWxvb2t1cC50YXJnZXQKCltTZXJ2aWNlXQp7ey0gaWYgLk1lbW9yeUxpbWl0fX0KTWVtb3J5TGltaXQ9e3suTWVtb3J5TGltaXR9fQp7ey0gZW5kfX0Ke3stIGlmIC5DUFVRdW90YX19CkNQVVF1b3RhPXt7LkNQVVF1b3RhfX0Ke3stIGVuZH19Cnt7LSBpZiAuSU9SZWFkQmFuZHdpZHRoTWF4fX0KSU9SZWFkQmFuZHdpZHRoTWF4PXt7LklPUmVhZEJhbmR3aWR0aE1heH19Cnt7LSBlbmR9fQp7ey0gaWYgLklPV3JpdGVCYW5kd2lkdGhNYXh9fQpJT1dyaXRlQmFuZHdpZHRoTWF4PXt7LklPV3JpdGVCYW5kd2lkdGhNYXh9fQp7ey0gZW5kfX0Ke3stIGlmIC5MaW1pdENPUkV9fQpMaW1pdENPUkU9e3suTGltaXRDT1JFfX0Ke3stIGVuZH19CkxpbWl0Tk9GSUxFPTEwMDAwMDAKTGltaXRTVEFDSz0xMDQ4NTc2MAoKVXNlcj17ey5Vc2VyfX0KRXhlY1N0YXJ0PXt7LkRlcGxveURpcn19L3NjcmlwdHMvcnVuX3t7LlNlcnZpY2VOYW1lfX0uc2gKe3stIGlmIGVxIC5TZXJ2aWNlTmFtZSAicHJvbWV0aGV1cyJ9fQpFeGVjUmVsb2FkPS9iaW4va2lsbCAtSFVQICRNQUlOUElECnt7ZW5kfX0KCnt7LSBpZiAuUmVzdGFydH19ClJlc3RhcnQ9e3suUmVzdGFydH19Cnt7ZWxzZX19ClJlc3RhcnQ9YWx3YXlzCnt7ZW5kfX0KUmVzdGFydFNlYz0xNXMKe3stIGlmIC5EaXNhYmxlU2VuZFNpZ2tpbGx9fQpTZW5kU0lHS0lMTD1ubwp7ey0gZW5kfX0KCltJbnN0YWxsXQpXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldAo=" - autogenFiles["/templates/systemd/tispark.service.tpl"] = "W1VuaXRdCkRlc2NyaXB0aW9uPXt7LlNlcnZpY2VOYW1lfX0gc2VydmljZQpBZnRlcj1zeXNsb2cudGFyZ2V0IG5ldHdvcmsudGFyZ2V0IHJlbW90ZS1mcy50YXJnZXQgbnNzLWxvb2t1cC50YXJnZXQKCltTZXJ2aWNlXQpVc2VyPXt7LlVzZXJ9fQp7ey0gaWYgbmUgLkphdmFIb21lICIifX0KRW52aXJvbm1lbnQ9IkpBVkFfSE9NRT17ey5KYXZhSG9tZX19Igp7ey0gZW5kfX0KRXhlY1N0YXJ0PXt7LkRlcGxveURpcn19L3NiaW4vc3RhcnQte3suU2VydmljZU5hbWV9fS5zaApFeGVjU3RvcD17ey5EZXBsb3lEaXJ9fS9zYmluL3N0b3Ate3suU2VydmljZU5hbWV9fS5zaApUeXBlPWZvcmtpbmcKe3stIGlmIC5SZXN0YXJ0fX0KUmVzdGFydD17ey5SZXN0YXJ0fX0Ke3tlbHNlfX0KUmVzdGFydD1hbHdheXMKe3stIGVuZH19ClJlc3RhcnRTZWM9MTVzClNlbmRTSUdLSUxMPW5vCgpbSW5zdGFsbF0KV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQK" -} diff --git a/pkg/cluster/embed/embed.go b/pkg/cluster/embed/embed.go deleted file mode 100644 index b4fd617422..0000000000 --- a/pkg/cluster/embed/embed.go +++ /dev/null @@ -1,15 +0,0 @@ -package embed - -import ( - "encoding/base64" - "os" -) - -// ReadFile read the file embed. -func ReadFile(path string) ([]byte, error) { - content, found := autogenFiles[path] - if !found { - return nil, os.ErrNotExist - } - return base64.StdEncoding.DecodeString(content) -} diff --git a/pkg/cluster/embed/pkged.go b/pkg/cluster/embed/pkged.go deleted file mode 100644 index 99b965d231..0000000000 --- a/pkg/cluster/embed/pkged.go +++ /dev/null @@ -1,12 +0,0 @@ -// Code generated by pkger; DO NOT EDIT. - -// +build !skippkger - -package embed - -import ( - "github.com/markbates/pkger" - "github.com/markbates/pkger/pkging/mem" -) - -var _ = pkger.Apply(mem.UnmarshalEmbed([]byte(`1f8b08000000000000ffec7d6b73a338d6ff5799cadbede90101b649d5ff852106436cd2c636b7ada7a6b838802d6c9e185ff053fbddff25899b6f89d39b9eede9cd6e4db5630b211d49e7fcce55ff77172f9f57ebbbfbffbb0be32cda785ffd55f2471a2f43df4d7f8f97fec673b3d5cb1f59bc497ff7e1669dcd5e50e387f8e5eefeee8fe97af6b2fec38fdccdd2cffff057c1ec8f70f5cdcda23fd62ffe1fb7f7f8e54e49d2d54b861ebdbb7fc750bedc696e32bbbbbfabbf7858f977f777775fee26ee4b38cb5e1f66ba08ff08dc975dbcfcd34d82167bfb98bfba775feef4d5eaf517dc7db91bba991fddddfff3eeebddff7cb91b672e9cdddd672f9b59f1873e73d7abe5ddfddd7295fd162fd7990be12cf8cddb64bfb95b3786ae0767bfc5cbdfbc4d0c83df7cd78f66775feee49514c3d91af58b46f56739aa7085de42a8b9bebb5f6e20fc72f7304babcf93d93aab1eaebf3a7962b80a36689cff77f71d4b3274e36539c50fdf28f26ab80a3eb0cb3fc2d5d76415e09e8dd9cb3ac66b417fa5d9bb7ffdeb5f5fee9e09a5de713eeeffc866490add6cb6fec35f2d9fe3103d8ece19fa3798656e0c718fcb62eb92365feed6f16176770fb8d697bb6415a08f34db663b2ccdd2f89b3fb3183f002840fd4e71bf0330a1b97b9abea7da5f3996615b5c87e5fe4175ee29eaeecb5dbcfe3340c427ebb0cef12b1f66dbbb7bbad56eb701a0f132cfd0df9d76fbcb9d06e3e5e2eebef3e54e59aeeeee698a655a1d9efb72378d83bb7b8ea2bfdcc9e813a0bedce901ea88fa72f7cd0dfef4c3d59fd4ddfd3fa92ff8fffff3e5ae8b46ba4e673e7ae718fd43733c453334db422f5aa36f5a7c9ba73b1c0bfef5e56e7843fb6a86fffa7227beb3bd10bf64d185673a2d8e6618be533ed3e6d916a001f3af2f77e37a3104b8f2176b3c5d012ec82ab114dffa72274137243fc8b325fe77b04edd9719fe382a3e22bafc0fde4bd127f3fc5ee679fbac3e99ecdf8cc97eb94bf1f4ffefeedb22fcbe0d7cce71fff5e52e7033b724353a89cbac7e47fd281ec0bfc1dbff70e1ec254bdca51bce5ebee6097c9dd99fb52ed93ecdb79892efb388c5bec9f059aa43b3e09ce13fbb70fd06c76718bad3a9383e5d727c96665a1cd7fea11c9f6dd1b773fc628a3773fcbafd358e7f494a700ccfd42c9f2c44c9f33b3f25cf3fdfef2742a0c1dbcbdfcf597bcd836b4e4b8e4bc1408b9d74cc419b7c91b4fe64843f2f233c674f1567bc73c07e6b27d2fa295c858a380c0d39824a5fcb6c4ba55c993f04a21079c9289c52f4742a0a07c7e4168ea58481a5414714128f5142cf94524f14361ea3a74e02e7b6a5a71ee00e03d4675fcb82bef0ec033af297faca6334ea29ee2e3d999fdbe69efc3d57687557b77596ead69bac4215486bc75229cf9436b619407f21c0992c65bebc878384cf9ddc7f5444e1e059face02121dc8d1331a979f7091674e5b8a18449e6ce4814c475e222d1d4b598a7137f4014df9121f0596beb21821f2198df1187581c6e5cbd2c16782ad9f8c705b252ffa6754e85b46ea27c67320ef0f4fb140f94b038a4dba49dada36b517a51f403b89b61e588786a10e07451b1fec231b64cfb625a41663e4dec32a5473ff515caadbc0d261b906a3b1b0704c270acc3da5f4556803230d1223c7634f8cb96342e0584a4b11d5851dd3648e220dc93a288fc5b8a7ae3c0d3d598a1d737f50649553fac1ca35b59522c38d0df8cc35b9a522131afbb910f9c9347418341601ad2de58100067204fd980df584cf15d9606d93de79f2745dbc234363742d61ed8c05328efe30acfb861b4576b67e2cccbdbe71086423ff36ed85b6c92dcaf77a899439137a685b3af4128d1bcb70e98a02e331c6dae9127ad8c934b41389b24184c6957a4b7dabc8bdd00770e3803d54e420f7186387e95c7cb680ca3dc582a7026313c4fe5a0570e3337ae4251a54f3ddd236f7d05fea1bdba4f1df411fee9c316a479e47dfb9091fab3455d2d372656383deeb250653be4791f9a441c3d4cf85b99f1851201b0b4c7359da5ca2f7401418db8494224b54d1ffda31a543207697c51a3c07404a03d10f03b913fac0d8a035416bea9a5c1ac8303a3f73eca65e7b7850fa41341b0bd05b6ab49f1807a5afaf6c6b14ce4c9e56e40006e2e5f573d05af7f59533160e883ed55c8be7111dfde5e85111bb734576523f811b27170eaecce781bc47734ed05aa3b97b8cbe42fcc2b654a8c86a14c8daca31476120f34bc722bf79800dd13ec37d2d354a29d6dd4b78ca359dd40612e59afce6687d992072ad514b11bb21fa6f78100ed5590411f462422b2781b9cf8ccefa42b4f173cccfeab51083a59ff0b42ff1688f417fe944de31fda3720e059db74e2c6c1ccb0f8bfd7438a6918e79a46ba9a997f8155dd1ef648dbb78bdcaf5764d8e722c15d8e60ecdebe08d5684c63d98907d44f68e224778ec81a9cd1d4b3b384b63edf517a19d1868dea773ca1d4b80b6a537fb5f2a7d7d5bcc21772c0d221e8fd6c01bb388a75e7aa6a53c6819a6719ff02bff508c4fa4900ca06c10b6489fddb0c9b79e6281714c75e501fe656066919364d1c09416b625508ea5147d7411dfd80432dc048877f7f53c30a7d7fb17bba1637200f161c7d2a881a9ad034b3beaef8857ca7a3c308bb367113e5df49529328dd7b4e4bf784fc9c62698afc240360e814857fcebcafccef97077f558bf5f3d3c852b320fccef56a1ca543222738194b8a097d9a61ef97d1dfab1ff48de51b6c99e116d9c042e31cdf1fc29b227251eaddfd6eb3bd0795885415fa59dd16a4ece8540fb09da4bc12ae8ebbba7b8b31d4eba9ba1c81e0673bb359c87bba707651bcc7bdb62ff66b6c9450e30727587ded3182f38a79fba43ef110e9e2ccd5d9a9f7b804b5c3328e68ae8aaad6c93db38783ffbf3f28c90e7d0fc8c8363a9980723d9ebc84a46da20d94bd6c135b5ad0779e899fcffba681c8714c9b3f5534923c4132d7d8dc6a888dde58c59878385b6f54c7aeb2df6919d186b3fe70a1c807141f86c5155ff816cb0c1037e365499acad88dc8307e8cc039ce025dc369009bff073ee109834c2459cd2a7794514dab3bcbb19013ef34c7e333239c4eba240865b6f39dc38b271b01935f5fb982fa377a23dc5fa7da5a5f48fde33b44d157afde1c6b1a29d1f0bfcf3b81bba7d9df21f56dbc1a1c70c637637987737c3c98a1b3e2c0e837cb86dd0f27130162ed130734c3a72cd1dc631e4f3fe781fa135eaa3b3af3f23f9e0813d70cc51f3ec85884fa07e67fd881df523762672730f504b31fc7fffefee87ead41e74fd85b7dabfad4f1fb52c75e9364fbfae4ab3bfd3d484eedc53fc3dd7f94ab5791e501ccb7ea02a4d8ca71fa64a6343254b576a2bdfeeb02db6d5b9a64a9f1b36c90caf68d2af34bfdd74da012cdba12a3d1a2fc2a71afda946ff126af4119fa95568cfe4170162b984a5868a1c51488d1d2e2396400a2ca6767ec2c7048aa0dfbb8f25742d587df5b7220a1982c61e18b5945e2019dd55dd4ee2774865b60e2a3b6b3ce3f7d5ad4da00816f518a65463e9b6aabfc56ee8990652ed174fb1309ad0da94fc2650362360f1e025c63cb8dc376533c5b8fbc2d67fd00e1650232fe1a03f7fa33d16b5daaea607ea43a21d4be5b06acd085b6fa9c1a3df452a4422d131b1c920b6e2ecdb38579a74a2bcfef0585c55df6b95a83bee13410aeee09858257af64196fa128f205aea2c172d457622afafc18226071f44cf7622219ae417d7b2afcffd6ef53d9aef11ad7dcb80fe1262f1eacbfcc607d3a3df076301cefa02b419a4caa8b329ad298389b2198a545c8c21f513ed478f019b75108d270bf830ceabbee36bed0c4393a671d5ae5a73a52fe41e50a11f775bd577aface9b4079ff4bcdb7a94b29922512f8fe3e6faa23d825513449bd184e2fa8aa8b78716753aae231a3e41d297f2d0dd0dcbfe6438f7ac065dca71ce570862664dfab9260d3dc640e3a3fd5df57d6a03fa64ff0ab9633ad05faad09178b48f103d280f685b0f41ca04ee3451f9c1302970d791b7725f02c495be66e91b58e9bc79e57306e05d80a943d10cd7fa48d703c14b9d0fc54b0d74c2028ea16906d037e2a56282d48d78a9d1fc56bcd4a128d06200a85dcd680d3ef1d2275efa25f0d239afa941936d09a99118b90fe0d69bafc2e12845cc13b8a60efde51033ea5aaf45ba36f750da602689943916cd170232f1c07e410461d61e2c4a3b90fa849e7db6a8528fe57c798a047ceac9055890f5d40752ecc946cf31f710ebeef355e824d2da07651b63e15a7a64277b58d9fce3c2b622237ddf502b5ba1a4410c3a1028791816204cd8121b0077680a6fdbd257c5bc7a8e25ac3d06f65c4be59fc7fcc2b6b4959df0919fe8871f2d3c3277bddabcf8b35ba5c759fb527c30d47bc507033a2cf5f1fa36ffc3e407cb317c87a1f99be50799e1cdf2a36a7ebbfc000cd7663b95fcc08bf0293f3ee5c72f223fceb8cdab02644198b8d1b32d3df2014ffb89062b43a75c3885af0809479628dbd2b681a5ce1deb5d02889a59026a830458469c5ac6a1f82db281067d0669a942ee311157098f64575a025a839c47fdabd33ecd3f2db3f6000a5b7fa9f3cf232230020029b7a7e58ea9436fa9a7b6891dd009fad729dab896d62b9dc6a7bf05f2fe30b20cca7d38116e7d7ded53d8716eb996be1a51d28363a9e7cf1fd17955385ff4349091f0ac9c353f58d3095fdc6777e97e8d97f1db92eab47129a63a80e2de29a778b6cd76c007cb291e49a71f24a7389aa15886636e9653648637cba9aaf9ed72aacdf04cab55c929b20aa5a002eca7a4fa94547f674975ca6d6a31a5e4c3f9d5ff7a416e9b4ee425bd7054182b034b253ec45890ca5827457ca58fdd6a2ec6c350b71ce82f21e5ca381663655bc3d0918dc4b68c75d01f863ee814711ffcc6eb2f422f31488c4f2ed05e82fda5d05be21880d44b8283d287db602c30b6c95124566018da208abc248062b89a630330a3a5482f52fa4ee4f50de8e75d22e6804edb0cf67bae1559874162ac3d46c81c93a3c4f93ab42d6167017aebc8d3f0db188bcd45606ad8cf8afb96eb589d426ce37e9c44a2bd3e8eb1d82abde8db94d69f46535ac2befa04e61ee0f03bd078fc0446cdb129329f2b72b4f51912f3a3c83039ea033d13e3f81de85902351baddacd715880f88ebf8dbb8b19553ff73c5a3dbebac697fe93842890a3c3abeb7a71ad53cf9725caed6b015a8f29fa4cd69071652377c6c2d24fa4c436b94891b5c88b854320f3e87bca31e91dd17d8dc340140e8ea51d885f7b47e2b18a781fdfdca7813c3d28b21e2b62943a388e46a2141c4f641c1c73948af190c0a5719727704a87bebcdfcea67aea2f697e00905edc7b447b53e9e9a99f1873348ed9f8cd71ae3d101c50ff9ecc2ffdfc5afffbadc30c6febbf1fa49ebc0b6dcba03c40a3b335b7cdfd7a36160e36c031351b4744efe55f8a58b59dd73796aec9e171f8f29e7600dc5c1d0b23ac033348bd65311ed9d97ab20efd8a6edad65bea11ea8f404027c5508ac44c1531137ee82470ed584374fea240bc347e34ae058e952a628b68bf88cd0c40947af234f497c686f4cb3efa7d751b2410af318e3b7ba0c219b3dee8b2b1f3649ed365983f5bd4f6b41d3a7f62fcce7d990b13c752816329e17bcf8208b3037956257b1a8d47e6e71ed8858f041e871ea310e7577f988af3ac36b28b5dbe74a6a167710ca60c778a2c2d9cbe8a60378eddb2114df039d985e81c04fd0582d46b4f146297ecfdad224be86f12f79538910d8c8338cfb033cd02a83f25fc86cf3a89abc4e311859dc7a89452f05104ab6b279d4a95349fca7c1ef4691ef336099fb35d60aa6bd71c22383e277181fa16c70dc544e528ce1a197f11e7a5c8b5bcc031b2631c8f967b4c70702ce5d191f9cc36e1a67cefd81078c29f843182ebf89c90b1ce3d46cd1d53a31aef45671dc7e32a72046d13efe185078c832273db401432dbd2e7ae88bea323d76451bf233f3100e2b97e2ef4267018fa8981695ac43a52812ccd5d66f8f8048c8d93f0b90d8ce7e6384b75a45e3f8746fbddef1bb12743749e221be0b38254a6c72746dd7a8cfe1c58ea1a3daf8ea3c67e8087a7b8b355c75139c6d43face063e190f5d13a88f030c0b14dc2d0037e18002356fa38b617fa8c8ed63cf71803a986cf880739f8dd689f158e412cfbc81ada96be42cf7a880f5b0e54fac1d64f321ceb87f97477d5f6494cd0dc2ac68dbf47fbb62fd076b24f6d3216e82558950a1d264dfdeeaaed981c965f16085aaed54572b254c9507bbc2ffd5c9893b8d36ea2c8199c8d85c435f7509c67f87b0b605b27dab76d1b187920f12f8eb528f6f13bcf780fcd438a6d4b7b1d8f5c915b585e986ae403039f73dd4458c5c81551cd6696b6f74465ad882a766e3b8c0afd5cc1e75e596a7b4f86943319c603514803b1c0269682f0c8d63535345fac82a3fde033d2dab57438dcadda247ebdcb2b0fbd5ccbab18aac3f0d005e23c23e70ced41468d9c44dad8a3551bc78fc7687dd07a8d1e9f1af1e1ca0385f7298e853e1d2be0d6b331e22fd5bc16aea5110c12ef426559c68f4f638c4544b5743a67387e53541e9f18ede0497ce6019d8c4b8607db54d7c59acba7f428b0dc5ae9233c11a2b3b7b62d3d0d9229e61b98e6065fec530d067d1ded4d3c27d4fe5b434e0e123dc67bfb7dfb229c02e380e559dc7defb38f26a34184213dc09ded09c7a4b7fe72110fc46e8c65e318ef8f1cf3b11c7fbeb66f1a587114bad63054127c0ee24276101f438ccf34f6055472278138b7a10c1c50647e57c4f321fa97636a15fc7065a3332f4b9bd9b896e333d3a0507f78cc9355e857f41116aea510be20eef0b8ced6abdc876361615b7a6491757ac431ba68de8755636cfbd40553d4c702f785ce7762e48a3c45f23fb4b10c54f8e14461f0be17d9fdd3dc3e6887c5da97f9ad27f107d74ae1b7496f3714f70b7b4e577bc1ee221c4373e82c3dc5c2d2cbe9836fee32a7afe278d70120bf29b27ef0e27aee3ea3e788ef0f44010e127fa3c848261af9d3b23e43a3be3ef7c5703f9cfb684cbbc1bcd71a1e863b2d5e6c1b3ce219c79d9a5d34f77a6d0f2b9c77e2cfe908edf9b2cf6fa612e2b3fe40af3da0451ec6f9a310f3fb078ad61e8639c2b345aec15ce96b074fc6fa07df38636dbfda036a153c82794ab986cb21d92bf59ace116e74cd298993c57c96dfba0036f485fa8c5978bf933ec6a64df43124e7c7351e273913585e1daaf37db29f4b99f984641ec852c7e08b8096e9a99c98d4fdee5307ef339839884f95baa188749e2eabcd47bb219257e5dc20bf764d075a488f237a4fd9e63b6487b4b1cd3d87e4a09f7f079f008de769eab18937fdc4c058abd8773840c5c7584c5a3ae85c32c626908ddccf31ee3904b244f939d7e07b7ceee402d251f3d9b89b6b22c240a83dc6374f5e2ea408673bb29ee3587b6b58e632408c71fa7a6e9bda8b638ed6a56eed0348f47659db06247e9ee8ac455bb4fe3556479853a36c939b3bd610ad75e48328f680943b05be772c84f1305fa2bda57e18c4824ad64d4032844378cdeb0b4960ee301f09ace106bd6354e8eb08afa07de3314291fb80f02ec133e473e9079d1ed3335cb59b7f5bc0d8e0b3628ed03e2bf39fe68aa4c1025792bd37c69f6bf947b0f5dc950d8405f1180b3cdf1ae47c632d381874890ee51779154162147a6a77d5e08f69d0d7a027db85ee5ae960e9a07c0fc9c541fc678168e19a6ce8033e73c682311e0bc0350da6d813248766b938d7bd909c2efb8e4b7fef3474ac28c558916056f49e6d19e7edc83cf4719fa3d00612d209d01839459668b23698b743a4777b381f84e45e9036106364cf2431e7a87f822b84080702e2bc0c89762c8d22eb56b90f8e6948d662e958a3106153d2de81fe12cbda8398682bc7d45e2ce06c7dc8977eec03e27545fe00dafb7d0ff04bb427462617797d48b9a67650fac6c6c5b6262df24481f291fe024a5d56870351d87ac99e53e47aafb815afd3768ea9615adb261bbae837a4af8f566d07f05b0720bcdb3ceb3c6d1b7cea885dfe3bb1c93cb0d414e97bdfa597629e0aa99981794e9d93274b0b0fe92f387f01e10d2d774c8942733dd2cfbbabb66dea996b72cf15ae2c9e2576ae9aaf93766cd8c83f5c17b69118f1315796360ec0396510ed11678cf38a0e8188795a1e883817a9de0762a137a33efbea9660282467747c96fd5d3db6c63bd1b98e1c994ebd10ef017c7e8af37870cd80d808e69836b963e9cf2e3038b46fa6b49f9ba6c6183d183f59e96e42f12b8f160e139360e69165505e8ee4333e4bb963d2d03355ac63da16447a17f90df2f56f90c7bfa1feb55d43b63275dec8117e37788c3790fe43e4b2f1ec2706c26d31d6e7908c1ea33528f568a9f1bb82c759e10122b701762512d71ed6ad141966381775b76a576d0dbed1f64457c467ab1796eec8d20d8873312d1d7a32443acacab584678f512bddf869296cfde508618f9d8d6dc2453e615fdbd9a606fd7cf1f884ed6cd273d9b7c590be2de6a86f5e0c53cf075ce4f7b595c7e8076b8474586d635b38678f52fadaca2e72d44a1981e7674514a1f3feb9d4471dacbb9280db2760b048b67a89b4b698ba3f9cdb5ad96604ac9337df3f30f9dcc53c95cbd15c0359dab839977a27ef6c3c53af9d44f4661f84455e5ed966b4f11329f5967ae425eb8d6b761ebfc38e65a0fdf35d1885ec4942db863c25e79e9c9dc0ea86038ce503243ff22267f3f109486b4fe6198bd15207205ed13d96af3df23bd23bbcb8389f31c1d6850c2b724ea7a1c7a84bdbe4d2592255eb689bfbb5c704687f2d2d50f0aa71bd8e05a6a54a8c1298441fb9603345983b75004b726049fe56896d564e336f59e67307481bd74a0b7f467785f8fd708cf62d9285fcb38db169b0b100c260c7e3d16b7c9a7b38c79783415ecd9971cdfd1af1422257f90cd1d24674ec2fc2b25fc48f1f659834e2bc168a2cc51e83f43678c03a31919598d68f08bfa339d37c314f8ed08c51b71ef15598083794bc6284651fce47c5f645b4770b5e89734f8bb54f5cd3583b482e16df7b32bf2c78fd12c93ef237f7ecca7083ed15b28178c09ae08f9ad791bd50cb0c63ba20399be6347c14d5856da92f4a2c6cfdb81b7b325cbafd518ce654617d8947fa75c103f5c84fd6df7346042fe1373393de0616e1ebae78c379d9a59e8ddb7251fd3cf16394bc05e70b038ef34c9ef6f32a7402db0e1bb8b3a9df1c7c84f54c873bdf6fa51db5c8c705d13630f7587e96b655928f6b6cf0b864a427e03c6ae888c53edbaddae4cc54ba9c86ed963db45f59bc077c46803680c96c5cee53bcfeb497e0b00a12ae010836c0fb6189e6c3e70ecd93f60f5468241006486e7d07c61925d2c135bf6b1d62dbd2529ba64ee95bf39df78e05f72b0cf59e34bac54628c20cd7601824fb856d098138cf0a3ba8b168da86b19e9b38a9431732f8810a07c0a0ec26ee05a88fee06f102ef7b745449d30c09f36709dbc3b11ff5367a927a1267742cf7696d8794f75bc4a388ad62956b0d7ba338cf76886f05686f88f8ef331b2ec25acdbf4f92578ede89fd03065fe9ad886605deebd67a14d7b4973c8a3023b9cb7d0dad05e398fbb907686801c28f2cc06f4e6454e32cbe93debdfdd641782ff16fc1e68f26d86f1da2fb4b6e51374049b4adb7d4106f3eb5131e6696b6f6801f0f62a157cb247820fe38fc0cd11dc5c2668e74390be13382af884cd3a02f4b484e4345a669afafa744afa7b70ef1a3123b97a8ce915e559c7f626b4c2aff36e91ff36e2325f534ba71d057231b14e3968d38307dfcd935b9c423f64dc6b6d40db61d2746ee235e853f6bb95bc83af4f7891da77cfef109ecb1df1dad3bfe6ed7b02137e846e632257ae628f5902c1a54bf1b681fac1dcb815ea983c9fbad930b6bd7e408af4be82810776190486b24df2bfc58d413c1f9d5e20edb2d7dc0933a13c9287451ffe1aa5deabb787f966d9af6eec2767b799cd89f1d88c9c5b9a2f50ff1391e0b89c7a8996d8dd6381e40868b866d97d873fa3a9cf5b1ce75bc3fe4f480305a739c784eddd21788f65471eeb16da8c44c086b605ae5242f7cbaf299200d646d456a86385b4fde6f03a23b5731e28f67b6b9821f13fde8d94f780aefc7635d5db3adb09ceb2620fa4ce801bb512305d3f1cc96389c7477c3872eb6fd79a6c45a609f7a09b105347eabdee103d8427aa42bc3a4d0390f4827f448ad8df505db62fe240a99634a1b3fefee95875d477950d881d8cdb589a38dc2e2bd8c96ce70425e943a4bc43fbbf953b7b0619a0189eb20f45c205e34bb4e27f2bbc197743fc1d206ebcb30c7f25f96389fd4f0c07b858c3f2ac248d1fa3b14a6a329b1082fcd2c6c5f5a1cf19307fff109d0d14c3ad25509bfcab9820f057fe9396aeccf49c107115ea7906c717312ae5ac43d54f26110977bb9b239d04ebfbbc6c985e20edb1202a457882cb65d7bb281d63ff6b0eeb62beab7d47b8bb415a097e83b0fc04dd01f563e77d4b70f8cc500ad7d352e2cf39af28ae8250c3ca0b35ef881d7aea5738342f7416b619b46e601b638ab44be0e458172fbea36308355f99d56d291d07723ceb3c4363524e7a9d9b8581349e37cbc6e02659bfe46e9a95c634eebd2efeb273cf6c7abb8cf0098072168c4c7a0bed1f3d8cffa3df87a624823a547fceab5be8be5c64d7804efb3a5fe5cf8d00fae6ce4d6a8f629631dbeb451ccb3dc36d5d8b5f4cc3778da4f76d806e45912ae17d2acd33520fa79618b3af16d80220e60b77a7c7a2f16c8855e9df3320ac750fb368989dcbc491727fee5832bab5bdb52177ecefdaf8fb0ca28bd88276b1ffce5d8a5cafede1f7ecffa917ca0848b3c51e857b6e41e0d83be9adaccf026bc83f8ad63e939b6b9ca12403cadb04b4581282886a48f949e341a8f0503add900483b778cc3cff13322ccaacfd826d1ab6d1218e316f106457d9f8d6dee7062b89fc039b6fdd47be52879fad8ee5fdb621a75821e9fd079978d3c2076a132272a2c644a696fd83855bc0da655355e12df17e4b625603b96385f8726a8e8b741f8d597a334c0f8648d70ed022737e7e7187bf8d03da0367e5f854e0259eccfebab5b476cf880e2e9ca35b943204b1bbbf43d8ee161107e0fae2573f71269dd8cef9c94b4bd693f23da1ab92716f657625fd92a32cc480c8b70942386ed1b38066ecf29b2937b800af51ae36f1c6bf46882dae68978ae354acbb34e62490eabeda06ad3dba0363f369c3f7d5925b32c9a6dd6b7e59e5d685f06f5b75a6fe52e73bf53ed09cdde33dc3d687d6db799568b6ab5f90f0cea072d96a3d88f2bf6d2e9300c03aa622f80a738966dd1d4b5a07ed2be55956229a7782daaff95f657c3facf9f010c4b3175bd17b210655c3fddfa8cebff8cebff3bc7f55fe0397568ff604c656212ac3da0461eae97221c6c2c9a8cd3527e4874ee350b897e419c35cce483ea1904f1a5dc0106e5d7e1087b0dd7dcd0b65ea29372aab2016c734f1725564fcaf3f5682c5ece60ab36f71369e78c05cab6d4a56321916190d081871eadf42b115d968face681c3454c9e2e54ac836391905402f78bb937552231dc0ffbc3b4186bed1e024529b6aa464e55aeafa588c1c5ec3ab5a8bde199fcc6b5f4ad3f5f85ca52c83d0405e40806d69084acf5f65bdb1c152a40451fa8f455da938d030ea92942200a376849dfa563e1f400623286c7651f7d60cc3dc02dfc9c7df497c6da3188f9b1ca2814830d76792fc97b064b9879a25ffe16e3b278484db9f2fbcc12229f196e70dfd6703333e935993315aa8cb0b8f21ce59a7a7cfdb70cbcfa5b22cd6d80dea722d5f8e4dd697b9653d85d3f807aaa277b048527812c5181a5094835f31992f538187797810c130fc16e91cb71fda39ce33c73b71497597b30c6aa1fff3c6af629d09e259cf563277083cd3927e39e31eb4c918d8dd3a7f9a2cfd489bb9b11a53f8c10e45b6a458624a2979eda409fdfdac718975c94cec6529462bc4817c7e416cf1655f4091345e486ae19ac02994bbd2438eb8bb86074ec327f755c6183468bd392c73894fd80de5b94fc4bbdc46f89b17052da189798c4357a48c942edb4d41ffaad3aff4fc53bfd84a872afbdb7e05f59714ef9e7f145ba16ebbd7af48186a03bb44ab33d336c35693fed1b07570ea2403618db82986ec57b32454eb736e4ab72861ee3407f19e4aea5538ec96636d8d33e5394c824f581086f331a67f761150e275506eeca03dcd687fcba28b35866ab223eb7f000bb0c44618bf841c0a8698054a2848f15d10e6b95a02ea35cd685ba46e3333ac782a73238a397f641b4447c29001247f62fcd97e5850763e17f3d5084284c56a192a8b8c4a69df0ac050c16c37ea4c6031cf253d686ba2c6f1e863bbfe29d85da41f345c989ee96d4652a338085c84fa4ac39feb29e191a3b4967e8e4b37e14bc3d77aa966147f4e82eab7296afd06250ab78cbe25db96312b971b497e2ba965415fa50cb97d0a4f9e74a25a4f9676bd4acd9a4477e12c0402af6c3c32ab4306dd4c833f862dd46cdb53c788c81d316ca3d80e872fe8c1e346b52957428c7f51437c2fceaf16457c65399c12cbad3ac6b963b9680f605f44c63133cac709ac728c165c5638f89aab3748def4d1a3ce99487a27d5fb83a5b8aa8ae6bdee6c7dfbbef5d5c2e3e0c078b7dea8088c2218f14e12dca83c03f8f83e0847f5c1a4b7d3efb3af4621acb5dbfac0527475b2fe1f3e61ec0a6f171778ed35be2805264ec2663fc04520e3e6b4aa836d7642c94fca1e42b140e29382e6b7b3ecf333eca6d1dd990667d9cc17f898fe2f380d60d97a17d7bee58de9735d45c99df788cdadc8bd81ca388c3d091f98dca8cc206cf84989fc6dde438a5b2a053c123aa1495f33356efcf7ec5c373dbe496ceb8bb3164d81b414c27daa73e629e19f849e739303e6e9e3b47fc09f72d147ac7fce026998f798a214319e340e9228d4e657a5ce3c69f810ee43b3cb7be4ac2a5456eea4e9db56d69ab29da337de3708136c7eb4ef8e3114e24e338db4b8456bd3db42d75e358ea457c7d89fe8dfe8eb0f5055c3a0a4c7a578fb9892f49f975dd8a7058b763a9afe22f8287a567a76aaf2cff33b8ea3ab6c0a98e649ca77cf77cdf5ec05a2a83f492eecf33af933d33ed1b99df7b83ef5cde7f67ebe9f4d5c835b91a3fff7c67af87c33813237f8b1f9d9f87cbfc16ed5b1c1a0b5458ca975a47a95d154f71f7302ce72097585423299b0fab7050f451d09ae03fab8147657aebf40d9cf66532fadc97f0fc378ea9512506bd2883ded04bcfe45363ad6bdc41cef5253e45f4e3ac3d58d63695d33341c67f62a32198935c89f1b00a5540def18a3eec7a807f714c6357f29577cd01a65b0f64d0b184b771d3357e8bf4971233346bb516d786e052f609bf7581017dd9c84fe772e94c9eeccf13de7a83acbc95be477ce89635d771f8f4055a7fe09a97ef509617f6e939bf1d5d3fe70d1a0d6cd379b1a7b55e5be9c375bddd8aff36f5aae2da949622062fb80f8387d518e24b74ffd4213f5a87bc647f3bc7f2dac2fe29f533ad377a17863fe30f97f0ecc286fccf2f676ee6c37aaaf75ec3a50dde9277afc8e19bce30d66dcb337f1b2ecfcc5730f90df8e0d67165e01de31ae9df87cf6e9257be3c5abe43dfba0953beddc707ca107c45d93ef241f8aa6fe0924df0fa9e6d8cef9a6df57659b20b2c6de5008972ac209abda2eb566115d377c9bb2a0ce83bc65685a9dc82552eadf524e117ce99acfd21e706dbe59af6ea779c2191f8cbd4edacf7978c35aede271d6308d2272eeb82cee5355be73599de90bbfc5bf2fc195f3f994899c514fbbbdb94eb453552a3a18b4ad9f933127574f74541e7625cbb56d326d63c3b17c703cad249dab3b56b621e15fae89c030387e21615511b6b569e876379ab923214e1d39c0a078bdaa7716a7fa8fd6637fa4198ac4dfa56f96783c77733bc2173c187f9444c2df34b9aff5bbaee6833297ddb89b19816253cde8fe37f04c655a1030cf629eeae06f12a7d7c58b14371f1c7bfb19f2feca1ee627690f85bc689d3304cfab97ae72b637d638c3b9cc2dcbc1f253176681f3ba40462abb863e4edb37e790c9bc7f04d5de13dd87c6197b2f04876feb0ebd7d6fe4b9c66ebd783f1ca4665041ed76e9501788066db6c87a559faeafde5ec3dcdde33fcd7569ba5f90edf6e9fc5e19188a4d7c2f0e856a7ddaec3f03ac7c575d90fbcbf1c74a8365fc5bc511dba45d3572f5d3b6d5f4df1fafde557dbdf5c5e97e63886e3ea303cbc1a65141ef55306e19dc6dc7d47b856fdc57974de2bc34c17e11f81fbb28b977fba49d0626f1ff357b70efabbfe823a1cf09fef98d5ff54718364eb1f870d2e57d96ff1729db910ce82dfbc4df69bbb7563e87a70f65bbcfccddbc430f8cd77fd68d60c30fce71d7ac59fe5e8c3157acb67bce1cf186f58f2d32aba90d0fa07f2f73f5e36cb3f8f2e865f476f07615f7ba8ba75b34dbd2f109ba5db9d0e7d2e00fedd40ec8fbb45ea34109b012d9666d8f6cd81d8c5146f0ec4aedbbf2310bb0378be45d7176fb6a9bfd14520359ab812875d37f80cc4feaf648c57b955b3d27a6f6b277033006ae483f0d10706a5883414c3b4a71bc27042c367bd07c7dfacf3ac2f31d1168aa82c66942e4d7bfb6fa6c1f7c686ca2bb1d0791605389321a53cf448955a4a1a4f16f0493faccaea5fa42a01b9513e0a2c7d3b3003e825464eaa49b0a12e77f00df4e436a95154de3e5dfe3732f7ebb2aa29be584314321c7e45b2254fc29f7a8f6262b08e390cbfc5dd7f3cf675e88cbb993bee66f6b81bcf98f56622f3cbb2c2f3e9cdde8364bf7572252dfb18ced964385a35dd784f814947d86c6421da9076ded2c86c53a33cb19b0d4c6d179838d40957fb2534e568cf949e3ca0c3678b0a07631a5756baf63b59ab93b0d358f02b35a7af918b59ac08dab910bb267b3e97d79e6f98830663baac52b9219539a9189b7562fe248c56c121bf0aeaa7303d0e2c8df2183572c074434cf4544c2a694b945dec9fa3f626aef8b4f11383426aae6bf29b6f935e3e94c3d0ea56e3597bc0df78b2011c73c72b09dc38492756a45d69d6cb0260c483649ffa0c0e79ab54c66f63f5e4b29800dae585316325b4bacd700f63e348c2d635390a9b158e439b16aea9b303b1bbb04daa30d19cb4afe65485eb6f7cd980fe1cd3003d47aa4c4fd03bf5c81bd761fc65d56be56c4d2e9a311ba1bddcda45ef32d9ac324f1c08cdeb775d784fb8fac12a316642e525c07fcef688fbbf03375d7db252a2d9f75d59de0100b034f7f157d37cec95e5cdab696886e7b81675153c9d6ab6c50c6fbd9aa66e7eb3ee0c68badd69d7c8092fc22772fa444ebf1272baca7a6e814fabb92205c274c1a99385df52a4a34c2ac62e8b9ee4f4d23139e827b8d8d546e9e9dba2503674107c1aade64dc8838bda8902e731465ec0a2d03371d1b2d04ea6e149e647242e9ad04ce12f5c66f1688351a8c47a5bef19a3498f772c4a57a74b2a56fafb8e221b2c7a07823a045274ffa13cb0ab4036a022d2a922d2912262d13af440505ec679c54bc4e1e2428fa314ce6463ae3c28ff50e7bdc7a3487b0497a61822219147dac91802cd0379872189df37b0c70c5f50f140a3771f412f24163dd3c8aefe2eaba9175f1be3b5efdf805875244833eaf3daf715dc3815e7d7e18bd26a5e8a710c9d70d1145228e5812a8b193561d3351857cf55c45968b118fe680b393e597ee0df0c001a6d2b7b09f766e23acd4e68ee9ea1ef69ea2bcdd30c4d33ad8fbc3595a119407fa0bd8467599a6dd3a5806500073a1d8666af897cd29e2adb5753bc26f35f697f55e89f3d43f12c68b34c6d2fe1fe4e17a77e4afd4fa97f83d46ff09bff4e394f4c1a3a7490fc1c77e3694f1f22d55229228b8ebdf17aeaf4c3b522ea3b47ecb6be8dbb9b932c8ed48905e8176a33ce5eaba34db00c54fbc26200b5392eb26ad1fc53dcd92235d997474d3579e788dc832743e82df51192a327efc1725911e966d4cb1a8f158f8d9bd820829e69f0cf13925189dfbb80a3678b6a95ef1b817dea981c555d3e7531024db810c97d292bf9c87453e2850dc22236a3afb1face08b4877089a9a65e32c2eb768481c648bee3c2de577e2ff007d0e7b8f0e2d2791bab5c6b7b6cfac1d84311955d7111caeee88eddf111be881c5c285f4f7d3025e687b87b6a7a28d7ecc85ce3cba3505966ed4036325fdee3c2730a147a135c845b21a6957e6d5a39c73d3431239e63d0b9230f7186bc1277f36f7316bf67b0d86f1daa2c5aa52d6c9a3f04b20efda542dafe35e69020f93d71d7ef31839c3d5162219a62d8b7c010a02780ba67daf7a0fdb5c3b134df066de603c110dde23a0c0d3e307a80a1d94ee5a8e101c7531cc037e15e8e1ea05a6c8bad9c4dd5145f8d1e6855608be73b5407b43aaf56f169731cc7b6aa31010e701ccff0151622ebf009863ec1d0af0486ced8ce2724429068624aa4e80e1653454073ffb297c02bda2a0f2b5e11b94ac4569e23d9d817302a1c3603c4717ff5f383051711f842233894d98567610ab49543aee32faec4af7f6bc0a7babd6c40ffe4aafc02c2ac7d300d07563390724f209a4c478597a1bcfa1fd1b31edb05f8568fbb8658757b013a967a19c69530e495a4ddff90c968e18de9928e0d13cefed0f4f89133a123d856d0ec2ac4c2c9308567aaa4eb113caae865927be994028a0de6dd57cc41d2027b3e6578700a1877eefdba08e3768e69e403cbc8bdfe902770a95abbe37df30afcc39eae98a6fd647fc1eb76b4eec77395f9e5c0c4f596f973a8d6a4273123369f25f72ad30bd7528a67f11d2f05143c1a6bea2590724d69ddf0cef167107451bc6bb14f7d66142b2227d53579b5d33e4bf31a5f98d59afb84d4d617af41d0c6bce07f168afeb9f65d387b3f203d7eae84a57cab7d332a65b8af748ba2f80e033ed22bc7d00ccd73cc8f43a52d9a6779c0bf8a4a39ae329f95537c3da615d45e3f8a6e7778c0bd65a26378ae46be14c3736daa0e6ac5ebf0894a3f51e92f894a8f79cf2736fdcf61d38b18ef7b316685171adf7d62c59f1d2b9eeb0047e63fd4fe86317c60bfb579b09853d33c7884d18899f02c1a2d736458d2a3675b7a549ccd23babb099f7a38b22ba31c93dee1bb43cfcee15ba6cc2201ed40b0e409dea53c40af9507e51fdfe2f3484547aed7de6234ca918dbcc4c87f913b37487edfad5e16ef33671e3f51e2c60efd66287c910bc5dc73e02b05b816dfe25a9d8f0c856f531d8aff91b811300819be9a0bc580dad24866f8ae54a80ec3bcc798d9a2f0ff2ad48857e113357ea2c65f0c351ef39c5f0b2fde1c8d4ff0c5c2319dd44bce6d1d4d17679d900e173371d7c068dfe9eafd1e8c77d9adfb3dd8b34afe7ead10f37f26a25fcf0656b0f593ec4df72d92f7f8ee2760e408875c282e920d4c5c54a8b0851576e363fcc6788cfae2580a71d7cea9b8c08a9be1c37577ad6deac0b154cab53458e1cc333be17761b1723c17b058ba754df67b6c748d2879528ce21bc659f6110d074b7deb99bb703867ff71c18ddc189bfaec33fac2b1d4321be4f1afc0562f6ebc7c0fb23a6e5fe12aee0d2ff159943c0b5a0cf3912173244afee342e64ea3e401cd529d4ee71aae3a8f612733bc394abe6a7e7b943c035acd0c73bc089fb0ea1356fd52b0ea98e17c822a0caaaa18a6d70d70be3c222964cbe35833d7b443c7ea15c0abbb6b5618fbd898b6fdc11977b3a30a6c85710f3d7bc1b98cde5b8337fc3e6ded9ac62690fe76a0abacd2f99681ee42bbe3b87d1cc337a653a7487324d5c360ef02805a146980b7c4c66581a5ae491adfb171a98ac98cbb1bdde416be8c6ff2389cf6f10ec7e8da037e56e6079c1999aa0ac8e7ced7337055b72586aba6b1cce4d240869127d2730fd0996b8db2a072366b5bcfa4d3402ae671cde055f6ff9f7198862feeb3bb746f066427edabb83d40bde121657f07f4846edd53e09e055f3b2d8a073cc3721f19b7c7711d8e6a7d18226bb35c8b6eb1955909b4da3ce874ae79488bf695a5ab9ae23548f64afbeba6aeb367da08a4813a700f2fc4272afb4465bf122a3be13abf162abbd535ea9919927ce1c0c2e8e3b49fad2fef6907c08dbf4b3317e8a91f77331f2323aee758c2da63606506685e1d2b26f48b23c35c11e9ddc5eb901921f71827f501dce2bb7bf28f785e8fca3a7ffe6ef5683397e784d7365f6df015e7f1db7319ecd2f9953997ae2884188a5a7e5352e8e1bbc6fcf67baa2ba44936e2e535ebabdb208107d7e4c91d71a7574f2708818f2e3e7b7cdd75271c583ae7cbd3d089bb5961623b38e6281c988b50590eb796a8b775497b1ec4ab6c44ed8d29ad4bd325855d90a3b2f042655ec366abf6f358f09f76698290e70d57656f15912eae96b7c381495027bebe1867d7aa8701bd43dac7c4a2f6aa4e45535c4485f98bc780dec18c1ac526f88b774f0e1032ec67bc22edda1fb90e866c1c0291aede87ef435b94e17b6ae90edf3ab912ce182ab41ed68fe2622f4c163eef98dcb3610c3786a1cb83497852e8e32fccd0c13cb7ba2a3af38bbaa50d13eeda07cdb00492a58c4dbed5b5d4f4c1b154f09a26e2ca7ce6584214c86189f84fd61ef57b397cf172fb02d5d75763a75eb2f8ab5ccbcb55307b7fd1908b4fd5f75ebfe1623e3385b63b6d0a7cb82994a67e982994654187e269fa66532899e1cda6d0aaf9eda6d036cd726dae71e7f5a787f91374ff62a0fb22dbf9ef84deef28167256fefee7aab586fb382aea81e180717b7190f3f6e773beeac9b502685fa9edf54a74dedc03fbb58368c1289b40d676f86a13f124e24cde439bd1b77ecc1d66b87f7a7162d85b7bb2310f643e1f24f436c0916b7a14f48757dfe59946860b90d03c8651d7fb2365e6fda5b17badbf20a1f1357083c4491d73bf40f3b662f67f6f2880f2577867d3e0664c5237ad5377d9ce9b48a43da1b97baa730fa8af1d96e930540b7c64b01b4122f4c7990069aacd50b5b98d6933ed16a0ae5a0071f3aac44835c3ab16c0ebed6f87229d16c702a691b9cb763eb1c82716f9b5b048cd6e7e2d00f2937b648fd2636ff6a0be960efb7a55938f7fdfcf9b52b173c44bf68f0b1e5b46580cac372b9cbc995261179ef377a4239c56a879257caef09a8b47a9b2671efd6668dda927ffb8e02e5a53a5e1315e5fd80bb7a5e21e8df303fbfdf034dd9b2bc59ca457a0fd5184fdddea014767ebd56a328cb0384bbf88bbe15f64274b8377e6ef9e3e5025ee76de744b1f5bc7189ae5da34ffe198f4c3cac95cb08eb1144f5cc03759c78a19de6a1dab9bdf0c4919aa4533746d1dc38bf089483f11e9af85487fe574dd9f1c977e460afe3b46c06b78f282b1cf9747977c7bef4dcf98131c39ba1d779dd2f6b50a7d1f8c6b2f947c7915c7fe1ba564beb75f1c8b3030f5b48cbebc7e11c5957493efa84a7821d5059d0912417925bad197f5b3341345ecfe25c6cc975532cba2d9667d3b8a3c7ba4aed1fcce6b191886a33b9d8fbcd38ae0c80f4be4bde465e5db34c7dc8c23c90c6fc69155f3db71246039966f5c68c57d5ecbf089237f351c79c673fe5bafb3d22e470f02622df3133e732c7de558c66190af36fed2583bd6f07a045f11e92386e5fd0c6cf82d8e28c79ce248ac81d9bb64f5c83d40c3408e606095f57617a5fb37ff16dbfbff544d64bfaf6e3dd3a05cd9a0fdfc981e6f445d1dd3ee788e5723afca3c8841d22c627799c6c76323772fdc768dd52bf7401057319cf575e8275ce461cbe28e5792880afadd4b96ba02295dba42cbd8d8a6ba264561e8148dc19717efba8acb67f4ad9f484b67cc513ed0e3c1f2282aed9ae5ef10c87c6e9b011c2cf583232bc757828d95c3501efd55d167e926496fc7428dc655da2dfbc64d156728886b31f4c73b783fec66e70b208869b7197073a8199920753308aa9adf0e8258aec5e3e8b471bd069f20e81304fd5220a8c16c3e0d699f86b4bf8d218df6acee5bcedb9336ff5eaaedbf57d724dafa8cfeb749d3f5fb46e68b6fa7e816ed5ead2b87db48ff9114db2c0ebc9b6157b371e5c4046f1b9fd809cddfd3fc3dc57ee55a344753ed0fad2247b5d816fd8121fe6d8ae11a65de181a502d8a6d5f8dac6b755a0ccd56b9b8d514af02afebedaf23afb367101003756e2d5e874fe8f509bd7e25e8d564389fd0eb2f845eef814057ca0cff1a50ca3139a0f4826f7acf108da9cf7bb884aebef596fac6318dc5b749af80527aeac8ca0db986c6268885fe84d2a51134fadf4cec875b7880a3bcc480ce03b52f2c63946beaf19bb17506c94daeac54c756a128e81b953f2f90252ab0b41b61990a7de6e86a8a0b16a729af2cf5d465eccb1068ac1631609836c5f50cc7a58d6d4b5fe1f1313af42c616d5b3a544475a4f76eba0e0243341fecb7414eef03d3c867132ac6d75be077aacff8379a27bf8ddf866b810c17f6856a2aaf5e9951cceff598b5623c7f7d59bb2c7e86ee3a7a07ca3b6a5f5dfe4ebfd7bec6f32cfd0332283eae88ca05031bc3929b5a6f33b09119de6c60ab9adf6e60ebf034d5aacbdae145f844799f28efd74279470ce76f04f43088532f14da50c2e7fe2e74ac280dc4ee1ebbf97046e2289c42636248bc389a6a034352851135e58b2c4e9cf5a848bafb6dacb70d69d51a8c7918c8c3ad27f373dbdc53ae49430c248abe263dfd79d283e274218d4d831f8d0c5db9e46e2ddc94946b3a6bdbd2564fb13ed4257e389eaae391a13a162d08462f7c141363eeca9d7060b2a1ca689c970cc341cc6e14d17fc460e2815a3cf6f5d433a7a1cfc08d9d2f1e1d535b79b9b0757729b441b455441d6711fef5aec8ebb6ae8bf62df998265840277bb4cfc20ac4355d8d44f887c5bd53f57324b8fdafb1d52cb6ef90e275e3ca45d6e2df27c259ba43b7a88f0f146aff3811de066c8bbf5d841733bc5584d7cd6f16e12cd5e159a6ce81c48bf029c23f45f8af25c26b6ef36bca6f22dbe88d22068799c9cd1591dd0ce2ee525c6a946d8d78558cb07c56fa446ea2e76f95918e6c24aec91d29beafde0dd01716df7b8fd4075df5fefe7e7ede6447ca3533706bd07920c397207ebb38547935fb77fac4c29b6afd5b68efe9b49f9757c89fde2755fc4e5fb9574aec7e841f2d7cc38f5616bd6a60a70cbc9a14383ef79111babf1ed08ddbfc85a56af375364b82d7b158d9a8beadb384608066db6c87a559fa1624c6526d8aa2cf9018114baf0131bad569b72b20c61c03b18fbb22003bcd3ad545ef6db6cd803645dd0ec4c8046f066255f3db81186817c982e36a254a1c46fd9438ec14757d87bcaebf388767af0c335d847f04eecb2e5efee926418bbd7dcc5fdd1af55d7f418d07fff98e59fd4f051cc9b63fc68dcb55f65bbc5c672e84b3e0376f93fde66edd18ba1e9cfd162f7ff336310c7ef35d3f9a3511e63fefd02bfe2c471faed05b3e01e74f09380b565a014c42eb1fc8da8b7fbfae672fdbd89fbdad795f685f65e9d0efccf66659bed3a13ede7eceff30e5bbc58036c7d0efe0f97886b7f3fcb2f9ed3c9fe1db2cdbaeb374e8bf55b677851dae29df55834fe5fbbf92175e6250b5fe6dd2c6c6b5f4405ce8d0075aee5a0209edb7b06e80f49dd406465990a5b07bc2b9334a0567a9437f4e1f669686d30f0259ca1da4bfcb1c0cfac1d64fd6f5777d157a264f39633af1738eb22d75e920dd7ba91d06e67eeb818cf6c5eafb47116613a43fb9a606ad51d34e4ca37ef2d9749f7a26c43ae4c434328f51b9890c33d72aecbe47df9deb918d208187a964e881c953b645f3e2421b1986447b8c1e113b79fd77fddc51e001d645c7537eec98d26284f4f07e903a7d7d353125163d73ed37d23ffc364d8cc8e9a99197e88c6bea94dba3a3d95960439306f09bc1a869201ba26d728b00c04520479a6d45a89d3aa1b1fd025e7bdf2bcf1ed1a8a0ddd38472d4496fca0f27ddddf0a1bb1b7657f3e2b78709ad4adf4cb8711288f611272ec8ba4c695d18516bf40cf5f43065b479f75184c6c1b148b08b817569446f83754c6d82f64940f4efd382e4079b5153bfaf1f068c4a7b10a7cd547ba32a76bdd45647fe04a8429fd1231244928e1dac07ab14d9d747bfb567a00ac0a8db99d23a0012e7eff0ef64bdebe7268e39e48713e3d0dc03ba0c0f384dc7d0d09a4d5c337871cdfd1ad1728afa903455a73275d2dbf15ed239de4b61ea8d4dee10c8d2da93a84703489b403616a3e582f72c631dc88b2c40348beb33f296ce4ac4cfec53e9f83ea5e3eba732f17713a0fffaff000000ffff010000ffff515537e008360100`))) diff --git a/pkg/cluster/template/config/alertmanager.go b/pkg/cluster/template/config/alertmanager.go index 622080288f..0ceefa6815 100644 --- a/pkg/cluster/template/config/alertmanager.go +++ b/pkg/cluster/template/config/alertmanager.go @@ -18,7 +18,7 @@ import ( "path" "github.com/pingcap/errors" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // AlertManagerConfig represent the data to generate AlertManager config @@ -31,7 +31,7 @@ func NewAlertManagerConfig() *AlertManagerConfig { // Config generate the config file data. func (c *AlertManagerConfig) Config() ([]byte, error) { - fp := path.Join("/templates", "config", "alertmanager.yml") + fp := path.Join("templates", "config", "alertmanager.yml") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/config/blackbox.go b/pkg/cluster/template/config/blackbox.go index f79489d062..a28423f898 100644 --- a/pkg/cluster/template/config/blackbox.go +++ b/pkg/cluster/template/config/blackbox.go @@ -17,7 +17,7 @@ import ( "io/ioutil" "path" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // BlackboxConfig represent the data to generate AlertManager config @@ -30,7 +30,7 @@ func NewBlackboxConfig() *BlackboxConfig { // Config generate the config file data. func (c *BlackboxConfig) Config() ([]byte, error) { - fp := path.Join("/templates", "config", "blackbox.yml") + fp := path.Join("templates", "config", "blackbox.yml") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/config/config.go b/pkg/cluster/template/config/config.go index dbee79584e..4dfe007241 100644 --- a/pkg/cluster/template/config/config.go +++ b/pkg/cluster/template/config/config.go @@ -16,11 +16,11 @@ package config import ( "path/filepath" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // GetConfig returns a raw config file from embed templates func GetConfig(filename string) ([]byte, error) { - fp := filepath.Join("/templates", "config", filename) + fp := filepath.Join("templates", "config", filename) return embed.ReadFile(fp) } diff --git a/pkg/cluster/template/config/dashboard.go b/pkg/cluster/template/config/dashboard.go index bb3ea7045a..753f93ab6f 100644 --- a/pkg/cluster/template/config/dashboard.go +++ b/pkg/cluster/template/config/dashboard.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // DashboardConfig represent the data to generate Dashboard config @@ -38,7 +38,7 @@ func NewDashboardConfig(cluster, deployDir string) *DashboardConfig { // Config generate the config file data. func (c *DashboardConfig) Config() ([]byte, error) { - fp := path.Join("/templates", "config", "dashboard.yml.tpl") + fp := path.Join("templates", "config", "dashboard.yml.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/config/datasource.go b/pkg/cluster/template/config/datasource.go index 5426f004e7..7edf81edf8 100644 --- a/pkg/cluster/template/config/datasource.go +++ b/pkg/cluster/template/config/datasource.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // DatasourceConfig represent the data to generate Datasource config @@ -46,7 +46,7 @@ func (c *DatasourceConfig) WithPort(port uint64) *DatasourceConfig { // Config generate the config file data. func (c *DatasourceConfig) Config() ([]byte, error) { - fp := path.Join("/templates", "config", "datasource.yml.tpl") + fp := path.Join("templates", "config", "datasource.yml.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/config/grafana.go b/pkg/cluster/template/config/grafana.go index 84bd15ae14..e204ec8edc 100644 --- a/pkg/cluster/template/config/grafana.go +++ b/pkg/cluster/template/config/grafana.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // GrafanaConfig represent the data to generate Grafana config @@ -81,7 +81,7 @@ func (c *GrafanaConfig) WithDomain(domain string) *GrafanaConfig { // Config generate the config file data. func (c *GrafanaConfig) Config() ([]byte, error) { - fp := path.Join("/templates", "config", "grafana.ini.tpl") + fp := path.Join("templates", "config", "grafana.ini.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/config/prometheus.go b/pkg/cluster/template/config/prometheus.go index fb1d26acc8..e3a1031592 100644 --- a/pkg/cluster/template/config/prometheus.go +++ b/pkg/cluster/template/config/prometheus.go @@ -20,7 +20,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // PrometheusConfig represent the data to generate Prometheus config @@ -202,7 +202,7 @@ func (c *PrometheusConfig) SetRemoteConfig(cfg string) *PrometheusConfig { // Config generate the config file data. func (c *PrometheusConfig) Config() ([]byte, error) { - fp := path.Join("/templates", "config", "prometheus.yml.tpl") + fp := path.Join("templates", "config", "prometheus.yml.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/config/tispark.go b/pkg/cluster/template/config/tispark.go index a6a498bc15..c1d97026f7 100644 --- a/pkg/cluster/template/config/tispark.go +++ b/pkg/cluster/template/config/tispark.go @@ -19,7 +19,7 @@ import ( "path/filepath" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // TiSparkConfig represent the data to generate TiSpark configs @@ -48,7 +48,7 @@ func (c *TiSparkConfig) WithCustomFields(m map[string]interface{}) *TiSparkConfi // Config generate the config file data. func (c *TiSparkConfig) Config() ([]byte, error) { - fp := filepath.Join("/templates", "config", "spark-defaults.conf.tpl") + fp := filepath.Join("templates", "config", "spark-defaults.conf.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/scripts/alertmanager.go b/pkg/cluster/template/scripts/alertmanager.go index e9c27973dd..5e92c27c24 100644 --- a/pkg/cluster/template/scripts/alertmanager.go +++ b/pkg/cluster/template/scripts/alertmanager.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // AlertManagerScript represent the data to generate AlertManager start script @@ -83,7 +83,7 @@ func (c *AlertManagerScript) ConfigToFile(file string) error { // Config generate the config file data. func (c *AlertManagerScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_alertmanager.sh.tpl") + fp := path.Join("templates", "scripts", "run_alertmanager.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/scripts/blackbox_exporter.go b/pkg/cluster/template/scripts/blackbox_exporter.go index f90ebb08fb..c4a3f26e49 100644 --- a/pkg/cluster/template/scripts/blackbox_exporter.go +++ b/pkg/cluster/template/scripts/blackbox_exporter.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // BlackboxExporterScript represent the data to generate BlackboxExporter config @@ -53,7 +53,7 @@ func (c *BlackboxExporterScript) WithNumaNode(numa string) *BlackboxExporterScri // Config generate the config file data. func (c *BlackboxExporterScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_blackbox_exporter.sh.tpl") + fp := path.Join("templates", "scripts", "run_blackbox_exporter.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/scripts/cdc.go b/pkg/cluster/template/scripts/cdc.go index 407d8b0143..5ab5ff69a7 100644 --- a/pkg/cluster/template/scripts/cdc.go +++ b/pkg/cluster/template/scripts/cdc.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // CDCScript represent the data to generate cdc config @@ -62,7 +62,7 @@ func (c *CDCScript) WithNumaNode(numa string) *CDCScript { // Config generate the config file data. func (c *CDCScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_cdc.sh.tpl") + fp := path.Join("templates", "scripts", "run_cdc.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/scripts/dm_master.go b/pkg/cluster/template/scripts/dm_master.go index 2024a7c3c4..0e87e308c1 100644 --- a/pkg/cluster/template/scripts/dm_master.go +++ b/pkg/cluster/template/scripts/dm_master.go @@ -20,7 +20,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // DMMasterScript represent the data to generate TiDB config @@ -90,7 +90,7 @@ func (c *DMMasterScript) AppendEndpoints(ends ...*DMMasterScript) *DMMasterScrip // Config generate the config file data. func (c *DMMasterScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_dm-master.sh.tpl") + fp := path.Join("templates", "scripts", "run_dm-master.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err @@ -173,7 +173,7 @@ func (c *DMMasterScaleScript) AppendEndpoints(ends ...*DMMasterScript) *DMMaster // Config generate the config file data. func (c *DMMasterScaleScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_dm-master_scale.sh.tpl") + fp := path.Join("templates", "scripts", "run_dm-master_scale.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/scripts/dm_worker.go b/pkg/cluster/template/scripts/dm_worker.go index 2a4709c357..0fff2bd586 100644 --- a/pkg/cluster/template/scripts/dm_worker.go +++ b/pkg/cluster/template/scripts/dm_worker.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // DMWorkerScript represent the data to generate TiDB config @@ -64,7 +64,7 @@ func (c *DMWorkerScript) AppendEndpoints(ends ...*DMMasterScript) *DMWorkerScrip // Config generate the config file data. func (c *DMWorkerScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_dm-worker.sh.tpl") + fp := path.Join("templates", "scripts", "run_dm-worker.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/scripts/drainer.go b/pkg/cluster/template/scripts/drainer.go index 9656c45627..b37f00a66e 100644 --- a/pkg/cluster/template/scripts/drainer.go +++ b/pkg/cluster/template/scripts/drainer.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // DrainerScript represent the data to generate drainer config @@ -74,7 +74,7 @@ func (c *DrainerScript) AppendEndpoints(ends ...*PDScript) *DrainerScript { // Config generate the config file data. func (c *DrainerScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_drainer.sh.tpl") + fp := path.Join("templates", "scripts", "run_drainer.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/scripts/grafana.go b/pkg/cluster/template/scripts/grafana.go index 82ce406ab8..4d03574cda 100644 --- a/pkg/cluster/template/scripts/grafana.go +++ b/pkg/cluster/template/scripts/grafana.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // GrafanaScript represent the data to generate Grafana config @@ -54,7 +54,7 @@ func (c *GrafanaScript) WithTPLFile(file string) *GrafanaScript { func (c *GrafanaScript) Config() ([]byte, error) { fp := c.tplName if fp == "" { - fp = path.Join("/templates", "scripts", "run_grafana.sh.tpl") + fp = path.Join("templates", "scripts", "run_grafana.sh.tpl") } tpl, err := embed.ReadFile(fp) diff --git a/pkg/cluster/template/scripts/node_exporter.go b/pkg/cluster/template/scripts/node_exporter.go index 886a78debb..17c9dbedcd 100644 --- a/pkg/cluster/template/scripts/node_exporter.go +++ b/pkg/cluster/template/scripts/node_exporter.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // NodeExporterScript represent the data to generate NodeExporter config @@ -53,7 +53,7 @@ func (c *NodeExporterScript) WithNumaNode(numa string) *NodeExporterScript { // Config generate the config file data. func (c *NodeExporterScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_node_exporter.sh.tpl") + fp := path.Join("templates", "scripts", "run_node_exporter.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/scripts/pd.go b/pkg/cluster/template/scripts/pd.go index db2ab9ce24..31cf9a7dad 100644 --- a/pkg/cluster/template/scripts/pd.go +++ b/pkg/cluster/template/scripts/pd.go @@ -20,7 +20,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" "github.com/pingcap/tiup/pkg/logger/log" ) @@ -91,7 +91,7 @@ func (c *PDScript) AppendEndpoints(ends ...*PDScript) *PDScript { // Config generate the config file data. func (c *PDScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_pd.sh.tpl") + fp := path.Join("templates", "scripts", "run_pd.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err @@ -180,7 +180,7 @@ func (c *PDScaleScript) WithListenHost(listenHost string) *PDScaleScript { // Config generate the config file data. func (c *PDScaleScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_pd_scale.sh.tpl") + fp := path.Join("templates", "scripts", "run_pd_scale.sh.tpl") log.Infof("script path: %s", fp) tpl, err := embed.ReadFile(fp) if err != nil { diff --git a/pkg/cluster/template/scripts/prometheus.go b/pkg/cluster/template/scripts/prometheus.go index 548ce5965c..b861b95c9d 100644 --- a/pkg/cluster/template/scripts/prometheus.go +++ b/pkg/cluster/template/scripts/prometheus.go @@ -20,7 +20,7 @@ import ( "regexp" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // PrometheusScript represent the data to generate Prometheus config @@ -79,7 +79,7 @@ func (c *PrometheusScript) WithTPLFile(fname string) *PrometheusScript { func (c *PrometheusScript) Config() ([]byte, error) { fp := c.tplFile if fp == "" { - fp = path.Join("/templates", "scripts", "run_prometheus.sh.tpl") + fp = path.Join("templates", "scripts", "run_prometheus.sh.tpl") } tpl, err := embed.ReadFile(fp) diff --git a/pkg/cluster/template/scripts/pump.go b/pkg/cluster/template/scripts/pump.go index 537e203e4b..c9e47a0072 100644 --- a/pkg/cluster/template/scripts/pump.go +++ b/pkg/cluster/template/scripts/pump.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // PumpScript represent the data to generate Pump config @@ -67,7 +67,7 @@ func (c *PumpScript) AppendEndpoints(ends ...*PDScript) *PumpScript { // Config generate the config file data. func (c *PumpScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_pump.sh.tpl") + fp := path.Join("templates", "scripts", "run_pump.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/scripts/scripts.go b/pkg/cluster/template/scripts/scripts.go index 228fedc7b6..c29e2c2064 100644 --- a/pkg/cluster/template/scripts/scripts.go +++ b/pkg/cluster/template/scripts/scripts.go @@ -16,11 +16,11 @@ package scripts import ( "path/filepath" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // GetScript returns a raw config file from embed templates func GetScript(filename string) ([]byte, error) { - fp := filepath.Join("/templates", "scripts", filename) + fp := filepath.Join("templates", "scripts", filename) return embed.ReadFile(fp) } diff --git a/pkg/cluster/template/scripts/tidb.go b/pkg/cluster/template/scripts/tidb.go index fb7f7eebcc..261fa1558a 100644 --- a/pkg/cluster/template/scripts/tidb.go +++ b/pkg/cluster/template/scripts/tidb.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // TiDBScript represent the data to generate TiDB config @@ -77,7 +77,7 @@ func (c *TiDBScript) AppendEndpoints(ends ...*PDScript) *TiDBScript { // Config generate the config file data. func (c *TiDBScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_tidb.sh.tpl") + fp := path.Join("templates", "scripts", "run_tidb.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/scripts/tiflash.go b/pkg/cluster/template/scripts/tiflash.go index 7ffa665a69..f2184246eb 100644 --- a/pkg/cluster/template/scripts/tiflash.go +++ b/pkg/cluster/template/scripts/tiflash.go @@ -21,7 +21,7 @@ import ( "strings" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // TiFlashScript represent the data to generate TiFlash config @@ -120,7 +120,7 @@ func (c *TiFlashScript) AppendEndpoints(ends ...*PDScript) *TiFlashScript { // Config generate the config file data. func (c *TiFlashScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_tiflash.sh.tpl") + fp := path.Join("templates", "scripts", "run_tiflash.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/scripts/tikv.go b/pkg/cluster/template/scripts/tikv.go index 45ee6ca453..9902c619b2 100644 --- a/pkg/cluster/template/scripts/tikv.go +++ b/pkg/cluster/template/scripts/tikv.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" "golang.org/x/mod/semver" ) @@ -86,7 +86,7 @@ func (c *TiKVScript) AppendEndpoints(ends ...*PDScript) *TiKVScript { // Config generate the config file data. func (c *TiKVScript) Config() ([]byte, error) { - fp := path.Join("/templates", "scripts", "run_tikv.sh.tpl") + fp := path.Join("templates", "scripts", "run_tikv.sh.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/systemd/system.go b/pkg/cluster/template/systemd/system.go index 9ff3608489..fc2f2c5733 100644 --- a/pkg/cluster/template/systemd/system.go +++ b/pkg/cluster/template/systemd/system.go @@ -19,7 +19,7 @@ import ( "path" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // Config represent the data to generate systemd config @@ -88,7 +88,7 @@ func (c *Config) ConfigToFile(file string) error { // Config generate the config file data. func (c *Config) Config() ([]byte, error) { - fp := path.Join("/templates", "systemd", "system.service.tpl") + fp := path.Join("templates", "systemd", "system.service.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/pkg/cluster/template/systemd/tispark.go b/pkg/cluster/template/systemd/tispark.go index 8620505a7e..905a3f2c40 100644 --- a/pkg/cluster/template/systemd/tispark.go +++ b/pkg/cluster/template/systemd/tispark.go @@ -20,7 +20,7 @@ import ( "strings" "text/template" - "github.com/pingcap/tiup/pkg/cluster/embed" + "github.com/pingcap/tiup/embed" ) // TiSparkConfig represent the data to generate systemd config @@ -60,7 +60,7 @@ func (c *TiSparkConfig) ConfigToFile(file string) error { // Config generate the config file data. func (c *TiSparkConfig) Config() ([]byte, error) { - fp := path.Join("/templates", "systemd", "tispark.service.tpl") + fp := path.Join("templates", "systemd", "tispark.service.tpl") tpl, err := embed.ReadFile(fp) if err != nil { return nil, err diff --git a/tools/pkger/main.go b/tools/pkger/main.go deleted file mode 100644 index c9b29e03ed..0000000000 --- a/tools/pkger/main.go +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2020 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package main - -import ( - "encoding/base64" - "errors" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "sort" - "strings" - - "github.com/spf13/cobra" -) - -type options struct { - Source string - Destination string - Package string -} - -func main() { - opt := options{} - rootCmd := &cobra.Command{ - Use: "pkger", - Short: "Package the files into source code", - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - return generate(opt) - }, - } - - rootCmd.Flags().StringVarP(&opt.Source, "source", "s", "", "The source directory path") - rootCmd.Flags().StringVarP(&opt.Destination, "destination", "d", "", "The destination directory path") - rootCmd.Flags().StringVarP(&opt.Package, "package", "p", "", "The package name of destination") - - if err := rootCmd.Execute(); err != nil { - os.Exit(1) - } -} - -func generate(opt options) error { - if opt.Source == "" { - return errors.New("source directory must be specified") - } - if opt.Destination == "" { - return errors.New("destination directory must be specified") - } - if opt.Package == "" { - opt.Package = filepath.Base(opt.Destination) - } - - source, err := filepath.Abs(opt.Source) - if err != nil { - return err - } - dest, err := filepath.Abs(opt.Destination) - if err != nil { - return err - } - - parentDir := filepath.Dir(source) - - fmt.Println("Source directory", source) - fmt.Println("Source parent directory", parentDir) - fmt.Println("destination directory", dest) - fmt.Println("package name", opt.Package) - - files := map[string]string{} - err = filepath.Walk(source, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - if info.IsDir() { - return err - } - - content, err := ioutil.ReadFile(path) - if err != nil { - return err - } - - subpath := path[len(parentDir):] - fmt.Println("Found file", subpath) - - files[subpath] = base64.StdEncoding.EncodeToString(content) - return nil - }) - if err != nil { - return err - } - - // Sort by filename - var filenames []string - for n := range files { - filenames = append(filenames, n) - } - sort.Strings(filenames) - - var lines []string - for _, n := range filenames { - lines = append(lines, fmt.Sprintf(`autogenFiles["%s"] = "%s"`, n, files[n])) - } - - writeBack := fmt.Sprintf(`// Copyright 2020 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package %s - -var autogenFiles = map[string]string{} - -func init() { - %s -} -`, opt.Package, strings.Join(lines, "\n\t")) - - return ioutil.WriteFile(filepath.Join(dest, "autogen_pkger.go"), []byte(writeBack), 0755) -}