@taimos/projen 0.1.96 → 0.1.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GitHooks = void 0;
4
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
+ const path_1 = require("path");
6
+ const projen_1 = require("projen");
7
+ const SCRIPT_DIR = '.lefthook';
8
+ /**
9
+ * Local git hooks managed by Lefthook (ADR-0013): a generated `lefthook.yml`,
10
+ * a root `prepare` script that runs `lefthook install`, and a pinned
11
+ * `lefthook` devDependency.
12
+ *
13
+ * Hooks cover a staged secret scan, projen drift, lint and typecheck per
14
+ * package, and a Conventional Commits check on the first commit of a branch.
15
+ * CI should set `LEFTHOOK=0`.
16
+ */
17
+ class GitHooks extends projen_1.Component {
18
+ tsProject;
19
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.GitHooks", version: "0.1.98" };
20
+ /** The generated `lefthook.yml`. */
21
+ configFile;
22
+ /** The generated commit-msg check script. */
23
+ commitMsgScript;
24
+ /** The generated projen drift check script, if enabled. */
25
+ projenDriftScript;
26
+ pkgs;
27
+ options;
28
+ constructor(tsProject, options = {}) {
29
+ super(tsProject);
30
+ this.tsProject = tsProject;
31
+ this.options = options;
32
+ this.pkgs = [...(options.packages ?? [])];
33
+ const version = options.lefthookVersion ?? '1.11.13';
34
+ tsProject.addDevDeps(`lefthook@${version}`);
35
+ tsProject.package.setScript('prepare', 'lefthook install');
36
+ const types = options.commitTypes ?? ['feat', 'fix', 'chore', 'docs', 'ci', 'spec'];
37
+ const branch = options.defaultBranch ?? 'main';
38
+ this.commitMsgScript = new projen_1.TextFile(tsProject, `${SCRIPT_DIR}/commit-msg.sh`, {
39
+ executable: true,
40
+ lines: [
41
+ '#!/usr/bin/env sh',
42
+ '# Only the first commit of a branch must follow Conventional Commits (header only).',
43
+ 'set -eu',
44
+ 'msg_file="$1"',
45
+ `base="${branch}"`,
46
+ 'ref=$(git rev-parse --verify --quiet "origin/$base" || git rev-parse --verify --quiet "$base" || true)',
47
+ 'if [ -n "$ref" ] && git rev-parse --verify --quiet HEAD >/dev/null; then',
48
+ ' mb=$(git merge-base "$ref" HEAD 2>/dev/null || true)',
49
+ ' if [ -n "$mb" ] && [ "$(git rev-list --count "$mb"..HEAD)" -gt 0 ]; then',
50
+ ' exit 0',
51
+ ' fi',
52
+ 'fi',
53
+ 'header=$(grep -v "^#" "$msg_file" | head -n 1)',
54
+ `pattern='^(${types.join('|')})(\\([^)]+\\))?!?: .+'`,
55
+ 'case "$header" in',
56
+ ' Merge\\ *|Revert\\ *|fixup!\\ *|squash!\\ *) exit 0 ;;',
57
+ 'esac',
58
+ 'if ! printf "%s" "$header" | grep -Eq "$pattern"; then',
59
+ ' echo "The first commit of a branch must follow Conventional Commits: <type>: <subject>" >&2',
60
+ ` echo "Allowed types: ${types.join(', ')}" >&2`,
61
+ ' echo "Got: $header" >&2',
62
+ ' exit 1',
63
+ 'fi',
64
+ ],
65
+ });
66
+ if (options.projenDrift ?? true) {
67
+ this.projenDriftScript = new projen_1.TextFile(tsProject, `${SCRIPT_DIR}/projen-drift.sh`, {
68
+ executable: true,
69
+ lines: [
70
+ '#!/usr/bin/env sh',
71
+ '# Fail when projen synth changes files. Compares the working tree before and',
72
+ '# after synth, so unstaged changes that existed before do not fail the check.',
73
+ 'set -eu',
74
+ 'snapshot() { { git status --porcelain=v1 -uall; git diff; git ls-files -o --exclude-standard | xargs -r cat; } | cksum; }',
75
+ 'before=$(snapshot)',
76
+ 'pnpm exec projen',
77
+ 'after=$(snapshot)',
78
+ 'if [ "$before" != "$after" ]; then',
79
+ ' echo "projen synth changed files. Review and stage the generated changes." >&2',
80
+ ' git status --short >&2',
81
+ ' exit 1',
82
+ 'fi',
83
+ ],
84
+ });
85
+ }
86
+ this.configFile = new projen_1.YamlFile(tsProject, 'lefthook.yml', {
87
+ marker: true,
88
+ obj: { 'pre-commit': { piped: true, jobs: [] }, 'commit-msg': { jobs: [] } },
89
+ });
90
+ }
91
+ /** Add a package that runs its own lint and typecheck scripts. */
92
+ addPackage(pkg) {
93
+ this.pkgs.push(pkg);
94
+ }
95
+ preSynthesize() {
96
+ const preJobs = [];
97
+ if (this.projenDriftScript) {
98
+ preJobs.push({ name: 'projen-drift', run: `sh ${SCRIPT_DIR}/projen-drift.sh` });
99
+ }
100
+ const parallel = [];
101
+ if (this.options.gitleaks ?? true) {
102
+ parallel.push({ name: 'gitleaks', run: 'gitleaks git --staged --redact --no-banner' });
103
+ }
104
+ const entries = [];
105
+ if (this.options.subprojectChecks ?? true) {
106
+ for (const sub of this.tsProject.subprojects) {
107
+ if (sub instanceof projen_1.typescript.TypeScriptProject) {
108
+ const path = (0, path_1.relative)(this.tsProject.outdir, sub.outdir);
109
+ entries.push({
110
+ path,
111
+ glob: '*.ts',
112
+ lint: 'pnpm exec eslint {staged_files}',
113
+ typecheck: 'pnpm exec tsc --noEmit',
114
+ });
115
+ }
116
+ }
117
+ }
118
+ entries.push(...this.pkgs);
119
+ for (const e of entries) {
120
+ const name = e.path.split('/').filter(Boolean).pop();
121
+ const base = { root: `${e.path.replace(/\/+$/, '')}/`, glob: e.glob ?? '*.{ts,tsx}' };
122
+ parallel.push({ name: `lint-${name}`, ...base, run: e.lint ?? 'pnpm run lint' });
123
+ parallel.push({ name: `typecheck-${name}`, ...base, run: e.typecheck ?? 'pnpm run typecheck' });
124
+ }
125
+ if (parallel.length > 0) {
126
+ preJobs.push({ group: { parallel: true, jobs: parallel } });
127
+ }
128
+ this.configFile.patch(projen_1.JsonPatch.replace('/pre-commit/jobs', preJobs), projen_1.JsonPatch.replace('/commit-msg/jobs', [
129
+ { name: 'conventional-first-commit', run: `sh ${SCRIPT_DIR}/commit-msg.sh {1}` },
130
+ ]));
131
+ }
132
+ }
133
+ exports.GitHooks = GitHooks;
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LWhvb2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvZ2l0LWhvb2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwrQkFBZ0M7QUFDaEMsbUNBQThFO0FBNkU5RSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUM7QUFFL0I7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxrQkFBUztJQWNSOztJQVo3QixvQ0FBb0M7SUFDcEIsVUFBVSxDQUFXO0lBRXJDLDZDQUE2QztJQUM3QixlQUFlLENBQVc7SUFFMUMsMkRBQTJEO0lBQzNDLGlCQUFpQixDQUFZO0lBRTVCLElBQUksQ0FBb0I7SUFDeEIsT0FBTyxDQUFrQjtJQUUxQyxZQUE2QixTQUF1QyxFQUFFLFVBQTJCLEVBQUU7UUFDakcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRFUsY0FBUyxHQUFULFNBQVMsQ0FBOEI7UUFFbEUsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFMUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxTQUFTLENBQUM7UUFDckQsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDNUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFM0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEYsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUM7UUFFL0MsSUFB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QVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQ25CLGtCQUFTLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxFQUM5QyxrQkFBUyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtZQUNwQyxFQUFFLElBQUksRUFBRSwyQkFBMkIsRUFBRSxHQUFHLEVBQUUsTUFBTSxVQUFVLG9CQUFvQixFQUFFO1NBQ2pGLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzs7QUFsSUgsNEJBbUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbXBvbmVudCwgSnNvblBhdGNoLCBUZXh0RmlsZSwgWWFtbEZpbGUsIHR5cGVzY3JpcHQgfSBmcm9tICdwcm9qZW4nO1xuXG4vKipcbiAqIEEgcGFja2FnZSB0aGF0IGdldHMgbGludCBhbmQgdHlwZWNoZWNrIGpvYnMgaW4gYGxlZnRob29rLnltbGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0SG9va3NQYWNrYWdlIHtcbiAgLyoqIFBhY2thZ2UgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSByZXBvIHJvb3QsIGUuZy4gYHBhY2thZ2VzL3dlYmAuICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIEZpbGUgZ2xvYiB0aGF0IHNlbGVjdHMgdGhlIHN0YWdlZCBmaWxlcyB0aGF0IHRyaWdnZXIgdGhlIGpvYnMuXG4gICAqXG4gICAqIEBkZWZhdWx0ICcqLnt0cyx0c3h9J1xuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYj86IHN0cmluZztcbiAgLyoqXG4gICAqIENvbW1hbmQgdGhhdCBsaW50cyB0aGUgcGFja2FnZS4gYHtzdGFnZWRfZmlsZXN9YCBpcyByZXBsYWNlZCBieSBsZWZ0aG9vay5cbiAgICpcbiAgICogQGRlZmF1bHQgJ3BucG0gcnVuIGxpbnQnXG4gICAqL1xuICByZWFkb25seSBsaW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbWFuZCB0aGF0IHR5cGVjaGVja3MgdGhlIHBhY2thZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdwbnBtIHJ1biB0eXBlY2hlY2snXG4gICAqL1xuICByZWFkb25seSB0eXBlY2hlY2s/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0SG9va3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwaW5uZWQgbGVmdGhvb2sgdmVyc2lvbiBhZGRlZCBhcyBhIGRldkRlcGVuZGVuY3kuXG4gICAqXG4gICAqIEBkZWZhdWx0ICcxLjExLjEzJ1xuICAgKi9cbiAgcmVhZG9ubHkgbGVmdGhvb2tWZXJzaW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkIGEgcHJlLWNvbW1pdCBnaXRsZWFrcyBzY2FuIG9mIHN0YWdlZCBjaGFuZ2VzLiBSZXF1aXJlcyB0aGUgYGdpdGxlYWtzYFxuICAgKiBiaW5hcnkgb24gdGhlIFBBVEguIEl0IHJldXNlcyBgLmdpdGxlYWtzLnRvbWxgIHdoZW4gdGhhdCBmaWxlIGV4aXN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0bGVha3M/OiBib29sZWFuO1xuICAvKipcbiAgICogQWRkIGEgcHJlLWNvbW1pdCBjaGVjayB0aGF0IGZhaWxzIHdoZW4gYHByb2plbmAgc3ludGggY2hhbmdlcyBhbnkgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVuRHJpZnQ/OiBib29sZWFuO1xuICAvKipcbiAgICogR2VuZXJhdGUgZXNsaW50IGFuZCBgdHNjIC0tbm9FbWl0YCBqb2JzIGZvciBldmVyeSBwcm9qZW4gVHlwZVNjcmlwdFxuICAgKiBzdWJwcm9qZWN0LCBzY29wZWQgdG8gdGhlIHN1YnByb2plY3QgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzdWJwcm9qZWN0Q2hlY2tzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgKG5vbi1wcm9qZW4pIHBhY2thZ2VzLCBlLmcuIGZyb250ZW5kcywgdGhhdCBydW4gdGhlaXIgb3duXG4gICAqIGBsaW50YCBhbmQgYHR5cGVjaGVja2AgcGFja2FnZSBzY3JpcHRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZXM/OiBHaXRIb29rc1BhY2thZ2VbXTtcbiAgLyoqXG4gICAqIFR5cGVzIGFjY2VwdGVkIGJ5IHRoZSBjb21taXQtbXNnIGNoZWNrIG9uIHRoZSBmaXJzdCBjb21taXQgb2YgYSBicmFuY2guXG4gICAqIEtlZXAgdGhpcyBpbiBzeW5jIHdpdGggdGhlIFBSIHRpdGxlIGNoZWNrLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ2ZlYXQnLCAnZml4JywgJ2Nob3JlJywgJ2RvY3MnLCAnY2knLCAnc3BlYyddXG4gICAqL1xuICByZWFkb25seSBjb21taXRUeXBlcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIGJyYW5jaCB0aGUgZmlyc3QtY29tbWl0IGRldGVjdGlvbiBjb21wYXJlcyBhZ2FpbnN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBgZGVmYXVsdFJlbGVhc2VCcmFuY2hgIG9mIHRoZSBwcm9qZWN0LCBmYWxsaW5nIGJhY2sgdG8gJ21haW4nXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QnJhbmNoPzogc3RyaW5nO1xufVxuXG5jb25zdCBTQ1JJUFRfRElSID0gJy5sZWZ0aG9vayc7XG5cbi8qKlxuICogTG9jYWwgZ2l0IGhvb2tzIG1hbmFnZWQgYnkgTGVmdGhvb2sgKEFEUi0wMDEzKTogYSBnZW5lcmF0ZWQgYGxlZnRob29rLnltbGAsXG4gKiBhIHJvb3QgYHByZXBhcmVgIHNjcmlwdCB0aGF0IHJ1bnMgYGxlZnRob29rIGluc3RhbGxgLCBhbmQgYSBwaW5uZWRcbiAqIGBsZWZ0aG9va2AgZGV2RGVwZW5kZW5jeS5cbiAqXG4gKiBIb29rcyBjb3ZlciBhIHN0YWdlZCBzZWNyZXQgc2NhbiwgcHJvamVuIGRyaWZ0LCBsaW50IGFuZCB0eXBlY2hlY2sgcGVyXG4gKiBwYWNrYWdlLCBhbmQgYSBDb252ZW50aW9uYWwgQ29tbWl0cyBjaGVjayBvbiB0aGUgZmlyc3QgY29tbWl0IG9mIGEgYnJhbmNoLlxuICogQ0kgc2hvdWxkIHNldCBgTEVGVEhPT0s9MGAuXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRIb29rcyBleHRlbmRzIENvbXBvbmVudCB7XG5cbiAgLyoqIFRoZSBnZW5lcmF0ZWQgYGxlZnRob29rLnltbGAuICovXG4gIHB1YmxpYyByZWFkb25seSBjb25maWdGaWxlOiBZYW1sRmlsZTtcblxuICAvKiogVGhlIGdlbmVyYXRlZCBjb21taXQtbXNnIGNoZWNrIHNjcmlwdC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbW1pdE1zZ1NjcmlwdDogVGV4dEZpbGU7XG5cbiAgLyoqIFRoZSBnZW5lcmF0ZWQgcHJvamVuIGRyaWZ0IGNoZWNrIHNjcmlwdCwgaWYgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb2plbkRyaWZ0U2NyaXB0PzogVGV4dEZpbGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwa2dzOiBHaXRIb29rc1BhY2thZ2VbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBHaXRIb29rc09wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0c1Byb2plY3Q6IHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3QsIG9wdGlvbnM6IEdpdEhvb2tzT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIodHNQcm9qZWN0KTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMucGtncyA9IFsuLi4ob3B0aW9ucy5wYWNrYWdlcyA/PyBbXSldO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IG9wdGlvbnMubGVmdGhvb2tWZXJzaW9uID8/ICcxLjExLjEzJztcbiAgICB0c1Byb2plY3QuYWRkRGV2RGVwcyhgbGVmdGhvb2tAJHt2ZXJzaW9ufWApO1xuICAgIHRzUHJvamVjdC5wYWNrYWdlLnNldFNjcmlwdCgncHJlcGFyZScsICdsZWZ0aG9vayBpbnN0YWxsJyk7XG5cbiAgICBjb25zdCB0eXBlcyA9IG9wdGlvbnMuY29tbWl0VHlwZXMgPz8gWydmZWF0JywgJ2ZpeCcsICdjaG9yZScsICdkb2NzJywgJ2NpJywgJ3NwZWMnXTtcbiAgICBjb25zdCBicmFuY2ggPSBvcHRpb25zLmRlZmF1bHRCcmFuY2ggPz8gJ21haW4nO1xuXG4gICAgdGhpcy5jb21taXRNc2dTY3JpcHQgPSBuZXcgVGV4dEZpbGUodHNQcm9qZWN0LCBgJHtTQ1JJUFRfRElSfS9jb21taXQtbXNnLnNoYCwge1xuICAgICAgZXhlY3V0YWJsZTogdHJ1ZSxcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgICcjIS91c3IvYmluL2VudiBzaCcsXG4gICAgICAgICcjIE9ubHkgdGhlIGZpcnN0IGNvbW1pdCBvZiBhIGJyYW5jaCBtdXN0IGZvbGxvdyBDb252ZW50aW9uYWwgQ29tbWl0cyAoaGVhZGVyIG9ubHkpLicsXG4gICAgICAgICdzZXQgLWV1JyxcbiAgICAgICAgJ21zZ19maWxlPVwiJDFcIicsXG4gICAgICAgIGBiYXNlPVwiJHticmFuY2h9XCJgLFxuICAgICAgICAncmVmPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0IFwib3JpZ2luLyRiYXNlXCIgfHwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0IFwiJGJhc2VcIiB8fCB0cnVlKScsXG4gICAgICAgICdpZiBbIC1uIFwiJHJlZlwiIF0gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0IEhFQUQgPi9kZXYvbnVsbDsgdGhlbicsXG4gICAgICAgICcgIG1iPSQoZ2l0IG1lcmdlLWJhc2UgXCIkcmVmXCIgSEVBRCAyPi9kZXYvbnVsbCB8fCB0cnVlKScsXG4gICAgICAgICcgIGlmIFsgLW4gXCIkbWJcIiBdICYmIFsgXCIkKGdpdCByZXYtbGlzdCAtLWNvdW50IFwiJG1iXCIuLkhFQUQpXCIgLWd0IDAgXTsgdGhlbicsXG4gICAgICAgICcgICAgZXhpdCAwJyxcbiAgICAgICAgJyAgZmknLFxuICAgICAgICAnZmknLFxuICAgICAgICAnaGVhZGVyPSQoZ3JlcCAtdiBcIl4jXCIgXCIkbXNnX2ZpbGVcIiB8IGhlYWQgLW4gMSknLFxuICAgICAgICBgcGF0dGVybj0nXigke3R5cGVzLmpvaW4oJ3wnKX0pKFxcXFwoW14pXStcXFxcKSk/IT86IC4rJ2AsXG4gICAgICAgICdjYXNlIFwiJGhlYWRlclwiIGluJyxcbiAgICAgICAgJyAgTWVyZ2VcXFxcICp8UmV2ZXJ0XFxcXCAqfGZpeHVwIVxcXFwgKnxzcXVhc2ghXFxcXCAqKSBleGl0IDAgOzsnLFxuICAgICAgICAnZXNhYycsXG4gICAgICAgICdpZiAhIHByaW50ZiBcIiVzXCIgXCIkaGVhZGVyXCIgfCBncmVwIC1FcSBcIiRwYXR0ZXJuXCI7IHRoZW4nLFxuICAgICAgICAnICBlY2hvIFwiVGhlIGZpcnN0IGNvbW1pdCBvZiBhIGJyYW5jaCBtdXN0IGZvbGxvdyBDb252ZW50aW9uYWwgQ29tbWl0czogPHR5cGU+OiA8c3ViamVjdD5cIiA+JjInLFxuICAgICAgICBgICBlY2hvIFwiQWxsb3dlZCB0eXBlczogJHt0eXBlcy5qb2luKCcsICcpfVwiID4mMmAsXG4gICAgICAgICcgIGVjaG8gXCJHb3Q6ICRoZWFkZXJcIiA+JjInLFxuICAgICAgICAnICBleGl0IDEnLFxuICAgICAgICAnZmknLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb25zLnByb2plbkRyaWZ0ID8/IHRydWUpIHtcbiAgICAgIHRoaXMucHJvamVuRHJpZnRTY3JpcHQgPSBuZXcgVGV4dEZpbGUodHNQcm9qZWN0LCBgJHtTQ1JJUFRfRElSfS9wcm9qZW4tZHJpZnQuc2hgLCB7XG4gICAgICAgIGV4ZWN1dGFibGU6IHRydWUsXG4gICAgICAgIGxpbmVzOiBbXG4gICAgICAgICAgJyMhL3Vzci9iaW4vZW52IHNoJyxcbiAgICAgICAgICAnIyBGYWlsIHdoZW4gcHJvamVuIHN5bnRoIGNoYW5nZXMgZmlsZXMuIENvbXBhcmVzIHRoZSB3b3JraW5nIHRyZWUgYmVmb3JlIGFuZCcsXG4gICAgICAgICAgJyMgYWZ0ZXIgc3ludGgsIHNvIHVuc3RhZ2VkIGNoYW5nZXMgdGhhdCBleGlzdGVkIGJlZm9yZSBkbyBub3QgZmFpbCB0aGUgY2hlY2suJyxcbiAgICAgICAgICAnc2V0IC1ldScsXG4gICAgICAgICAgJ3NuYXBzaG90KCkgeyB7IGdpdCBzdGF0dXMgLS1wb3JjZWxhaW49djEgLXVhbGw7IGdpdCBkaWZmOyBnaXQgbHMtZmlsZXMgLW8gLS1leGNsdWRlLXN0YW5kYXJkIHwgeGFyZ3MgLXIgY2F0OyB9IHwgY2tzdW07IH0nLFxuICAgICAgICAgICdiZWZvcmU9JChzbmFwc2hvdCknLFxuICAgICAgICAgICdwbnBtIGV4ZWMgcHJvamVuJyxcbiAgICAgICAgICAnYWZ0ZXI9JChzbmFwc2hvdCknLFxuICAgICAgICAgICdpZiBbIFwiJGJlZm9yZVwiICE9IFwiJGFmdGVyXCIgXTsgdGhlbicsXG4gICAgICAgICAgJyAgZWNobyBcInByb2plbiBzeW50aCBjaGFuZ2VkIGZpbGVzLiBSZXZpZXcgYW5kIHN0YWdlIHRoZSBnZW5lcmF0ZWQgY2hhbmdlcy5cIiA+JjInLFxuICAgICAgICAgICcgIGdpdCBzdGF0dXMgLS1zaG9ydCA+JjInLFxuICAgICAgICAgICcgIGV4aXQgMScsXG4gICAgICAgICAgJ2ZpJyxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnRmlsZSA9IG5ldyBZYW1sRmlsZSh0c1Byb2plY3QsICdsZWZ0aG9vay55bWwnLCB7XG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgICBvYmo6IHsgJ3ByZS1jb21taXQnOiB7IHBpcGVkOiB0cnVlLCBqb2JzOiBbXSB9LCAnY29tbWl0LW1zZyc6IHsgam9iczogW10gfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEFkZCBhIHBhY2thZ2UgdGhhdCBydW5zIGl0cyBvd24gbGludCBhbmQgdHlwZWNoZWNrIHNjcmlwdHMuICovXG4gIHB1YmxpYyBhZGRQYWNrYWdlKHBrZzogR2l0SG9va3NQYWNrYWdlKTogdm9pZCB7XG4gICAgdGhpcy5wa2dzLnB1c2gocGtnKTtcbiAgfVxuXG4gIHByZVN5bnRoZXNpemUoKTogdm9pZCB7XG4gICAgY29uc3QgcHJlSm9iczogYW55W10gPSBbXTtcbiAgICBpZiAodGhpcy5wcm9qZW5EcmlmdFNjcmlwdCkge1xuICAgICAgcHJlSm9icy5wdXNoKHsgbmFtZTogJ3Byb2plbi1kcmlmdCcsIHJ1bjogYHNoICR7U0NSSVBUX0RJUn0vcHJvamVuLWRyaWZ0LnNoYCB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbGxlbDogYW55W10gPSBbXTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmdpdGxlYWtzID8/IHRydWUpIHtcbiAgICAgIHBhcmFsbGVsLnB1c2goeyBuYW1lOiAnZ2l0bGVha3MnLCBydW46ICdnaXRsZWFrcyBnaXQgLS1zdGFnZWQgLS1yZWRhY3QgLS1uby1iYW5uZXInIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXM6IEdpdEhvb2tzUGFja2FnZVtdID0gW107XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdWJwcm9qZWN0Q2hlY2tzID8/IHRydWUpIHtcbiAgICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMudHNQcm9qZWN0LnN1YnByb2plY3RzKSB7XG4gICAgICAgIGlmIChzdWIgaW5zdGFuY2VvZiB0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0KSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHJlbGF0aXZlKHRoaXMudHNQcm9qZWN0Lm91dGRpciwgc3ViLm91dGRpcik7XG4gICAgICAgICAgZW50cmllcy5wdXNoKHtcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBnbG9iOiAnKi50cycsXG4gICAgICAgICAgICBsaW50OiAncG5wbSBleGVjIGVzbGludCB7c3RhZ2VkX2ZpbGVzfScsXG4gICAgICAgICAgICB0eXBlY2hlY2s6ICdwbnBtIGV4ZWMgdHNjIC0tbm9FbWl0JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbnRyaWVzLnB1c2goLi4udGhpcy5wa2dzKTtcblxuICAgIGZvciAoY29uc3QgZSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBuYW1lID0gZS5wYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pLnBvcCgpITtcbiAgICAgIGNvbnN0IGJhc2UgPSB7IHJvb3Q6IGAke2UucGF0aC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vYCwgZ2xvYjogZS5nbG9iID8/ICcqLnt0cyx0c3h9JyB9O1xuICAgICAgcGFyYWxsZWwucHVzaCh7IG5hbWU6IGBsaW50LSR7bmFtZX1gLCAuLi5iYXNlLCBydW46IGUubGludCA/PyAncG5wbSBydW4gbGludCcgfSk7XG4gICAgICBwYXJhbGxlbC5wdXNoKHsgbmFtZTogYHR5cGVjaGVjay0ke25hbWV9YCwgLi4uYmFzZSwgcnVuOiBlLnR5cGVjaGVjayA/PyAncG5wbSBydW4gdHlwZWNoZWNrJyB9KTtcbiAgICB9XG4gICAgaWYgKHBhcmFsbGVsLmxlbmd0aCA+IDApIHtcbiAgICAgIHByZUpvYnMucHVzaCh7IGdyb3VwOiB7IHBhcmFsbGVsOiB0cnVlLCBqb2JzOiBwYXJhbGxlbCB9IH0pO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnRmlsZS5wYXRjaChcbiAgICAgIEpzb25QYXRjaC5yZXBsYWNlKCcvcHJlLWNvbW1pdC9qb2JzJywgcHJlSm9icyksXG4gICAgICBKc29uUGF0Y2gucmVwbGFjZSgnL2NvbW1pdC1tc2cvam9icycsIFtcbiAgICAgICAgeyBuYW1lOiAnY29udmVudGlvbmFsLWZpcnN0LWNvbW1pdCcsIHJ1bjogYHNoICR7U0NSSVBUX0RJUn0vY29tbWl0LW1zZy5zaCB7MX1gIH0sXG4gICAgICBdKSxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -13,7 +13,7 @@ const projen_1 = require("projen");
13
13
  * enabled on the project.
14
14
  */
15
15
  class Gitleaks extends projen_1.Component {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.Gitleaks", version: "0.1.96" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.Gitleaks", version: "0.1.98" };
17
17
  /** The generated `.gitleaks.toml`. */
18
18
  configFile;
19
19
  /** The generated pull-request scanning workflow. */
@@ -1,3 +1,4 @@
1
1
  export * from './amplify-deploy';
2
2
  export * from './production-release';
3
3
  export * from './gitleaks';
4
+ export * from './git-hooks';
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./amplify-deploy"), exports);
18
18
  __exportStar(require("./production-release"), exports);
19
19
  __exportStar(require("./gitleaks"), exports);
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDO0FBQ2pDLHVEQUFxQztBQUNyQyw2Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FtcGxpZnktZGVwbG95JztcbmV4cG9ydCAqIGZyb20gJy4vcHJvZHVjdGlvbi1yZWxlYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vZ2l0bGVha3MnO1xuIl19
20
+ __exportStar(require("./git-hooks"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDO0FBQ2pDLHVEQUFxQztBQUNyQyw2Q0FBMkI7QUFDM0IsOENBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hbXBsaWZ5LWRlcGxveSc7XG5leHBvcnQgKiBmcm9tICcuL3Byb2R1Y3Rpb24tcmVsZWFzZSc7XG5leHBvcnQgKiBmcm9tICcuL2dpdGxlYWtzJztcbmV4cG9ydCAqIGZyb20gJy4vZ2l0LWhvb2tzJztcbiJdfQ==
@@ -15,7 +15,7 @@ const projen_1 = require("projen");
15
15
  * dispatch time.
16
16
  */
17
17
  class GitHubProductionRelease extends projen_1.Component {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.GitHubProductionRelease", version: "0.1.96" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.GitHubProductionRelease", version: "0.1.98" };
19
19
  /**
20
20
  * Resolves the branch that is promoted — the project's default release branch.
21
21
  *
@@ -26,7 +26,7 @@ const DEFAULT_SCALARS = {
26
26
  * @pjid taimos-api-library
27
27
  */
28
28
  class TaimosApiLibrary extends private_ts_lib_1.TaimosPrivateTypescriptLibrary {
29
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosApiLibrary", version: "0.1.96" };
29
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosApiLibrary", version: "0.1.98" };
30
30
  constructor(options) {
31
31
  const restEnabled = options.rest ?? true;
32
32
  const graphqlEnabled = options.graphql ?? false;
@@ -9,7 +9,7 @@ const projen_1 = require("projen");
9
9
  * @pjid taimos-cdk-app
10
10
  */
11
11
  class TaimosCdkApp extends projen_1.awscdk.AwsCdkTypeScriptApp {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkApp", version: "0.1.96" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkApp", version: "0.1.98" };
13
13
  constructor(options) {
14
14
  super({
15
15
  authorEmail: 'info@taimos.de',
@@ -9,7 +9,7 @@ const projen_1 = require("projen");
9
9
  * @pjid taimos-awscdk-construct
10
10
  */
11
11
  class TaimosCdkConstructLibrary extends projen_1.awscdk.AwsCdkConstructLibrary {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkConstructLibrary", version: "0.1.96" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosCdkConstructLibrary", version: "0.1.98" };
13
13
  constructor(options) {
14
14
  super({
15
15
  authorOrganization: true,
@@ -1,6 +1,6 @@
1
1
  import { github, typescript, YamlFile } from 'projen';
2
2
  import { GitHubAssignApprover } from 'projen-pipelines';
3
- import { GitHubAmplifyDeploy, GitHubAmplifyDeployOptions, GitHubProductionRelease, GitHubProductionReleaseOptions, Gitleaks, GitleaksOptions } from '../components';
3
+ import { GitHubAmplifyDeploy, GitHubAmplifyDeployOptions, GitHubProductionRelease, GitHubProductionReleaseOptions, GitHooks, GitHooksOptions, Gitleaks, GitleaksOptions } from '../components';
4
4
  /**
5
5
  * The frontend framework an Amplify Hosting application is built with.
6
6
  *
@@ -238,6 +238,19 @@ export interface MonorepoProjectOptions extends typescript.TypeScriptProjectOpti
238
238
  * @default - extend the default ruleset, no extra allowlists
239
239
  */
240
240
  readonly gitleaksOptions?: GitleaksOptions;
241
+ /**
242
+ * Whether to add local git hooks managed by Lefthook: a `lefthook.yml`, a
243
+ * root `prepare` script and a pinned `lefthook` devDependency (see `GitHooks`).
244
+ *
245
+ * @default false
246
+ */
247
+ readonly gitHooks?: boolean;
248
+ /**
249
+ * Options for the git hooks component. Only used when `gitHooks` is enabled.
250
+ *
251
+ * @default - all checks enabled, first-commit types feat, fix, chore, docs, ci, spec
252
+ */
253
+ readonly gitHooksOptions?: GitHooksOptions;
241
254
  /**
242
255
  * Drive Amplify Hosting builds from GitHub Actions instead of Amplify's own
243
256
  * auto-build, so an app only rebuilds when the packages it is built from
@@ -285,6 +298,8 @@ export declare class MonorepoProject extends typescript.TypeScriptProject {
285
298
  readonly amplifyDeploy?: GitHubAmplifyDeploy;
286
299
  /** The gitleaks secret-scanning component, if enabled. */
287
300
  readonly gitleaks?: Gitleaks;
301
+ /** The Lefthook git hooks component, if enabled. */
302
+ readonly gitHooks?: GitHooks;
288
303
  /** The default release branch (promoted by the production release workflow). */
289
304
  readonly defaultReleaseBranch: string;
290
305
  constructor(options: MonorepoProjectOptions);
@@ -32,7 +32,7 @@ var MonorepoAmplifyFramework;
32
32
  * @pjid taimos-monorepo
33
33
  */
34
34
  class MonorepoProject extends projen_1.typescript.TypeScriptProject {
35
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.MonorepoProject", version: "0.1.96" };
35
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.MonorepoProject", version: "0.1.98" };
36
36
  /**
37
37
  * Packages exempt from `minimumReleaseAge` by default so our own build tooling
38
38
  * can update without the cooldown. A consumer's
@@ -58,6 +58,8 @@ class MonorepoProject extends projen_1.typescript.TypeScriptProject {
58
58
  amplifyDeploy;
59
59
  /** The gitleaks secret-scanning component, if enabled. */
60
60
  gitleaks;
61
+ /** The Lefthook git hooks component, if enabled. */
62
+ gitHooks;
61
63
  /** The default release branch (promoted by the production release workflow). */
62
64
  defaultReleaseBranch;
63
65
  constructor(options) {
@@ -162,6 +164,13 @@ class MonorepoProject extends projen_1.typescript.TypeScriptProject {
162
164
  if (options.gitleaks ?? false) {
163
165
  this.gitleaks = new components_1.Gitleaks(this, options.gitleaksOptions);
164
166
  }
167
+ // Local git hooks (ADR-0013): lefthook.yml + prepare script.
168
+ if (options.gitHooks ?? false) {
169
+ this.gitHooks = new components_1.GitHooks(this, {
170
+ defaultBranch: options.defaultReleaseBranch,
171
+ ...options.gitHooksOptions,
172
+ });
173
+ }
165
174
  // The projenrc is split into modules under .projen/ — make them part of the
166
175
  // dev tsconfig so the IDE and ts-node type-check them.
167
176
  this.tsconfigDev?.addInclude('.projen/*.ts');
@@ -279,4 +288,4 @@ class MonorepoProject extends projen_1.typescript.TypeScriptProject {
279
288
  }
280
289
  }
281
290
  exports.MonorepoProject = MonorepoProject;
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvamVjdHMvbW9ub3JlcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFrRTtBQUNsRSx1REFBd0Q7QUFDeEQsOENBQW9LO0FBRXBLOzs7OztHQUtHO0FBQ0gsSUFBWSx3QkFLWDtBQUxELFdBQVksd0JBQXdCO0lBQ2xDLDZFQUE2RTtJQUM3RSw2Q0FBaUIsQ0FBQTtJQUNqQiwyR0FBMkc7SUFDM0csK0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLHdCQUF3Qix3Q0FBeEIsd0JBQXdCLFFBS25DO0FBNFFEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxtQkFBVSxDQUFDLGlCQUFpQjs7SUFFL0Q7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBVSwyQkFBMkIsR0FBYTtRQUM3RCxrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQixRQUFRO0tBQ1QsQ0FBQztJQUVGLDJDQUEyQztJQUMzQixhQUFhLENBQVc7SUFFeEMscUNBQXFDO0lBQ3JCLGVBQWUsQ0FBd0I7SUFFdkQsd0VBQXdFO0lBQ3hELFdBQVcsQ0FBWTtJQUV2Qyw4Q0FBOEM7SUFDOUIsY0FBYyxDQUF3QjtJQUV0RCxtREFBbUQ7SUFDbkMsaUJBQWlCLENBQTJCO0lBRTVELHdFQUF3RTtJQUN4RCxhQUFhLENBQXVCO0lBRXBELDBEQUEwRDtJQUMxQyxRQUFRLENBQVk7SUFFcEMsZ0ZBQWdGO0lBQ2hFLG9CQUFvQixDQUFTO0lBRTdDLFlBQVksT0FBK0I7UUFDekMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixJQUFJLFNBQVMsQ0FBQztRQUU5RCw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLDBDQUEwQztRQUMxQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLEVB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LENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzdDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7YUFDN0I7U0FDRixDQUFDO0lBQ0osQ0FBQzs7QUE5UUgsMENBK1FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aHViLCBqYXZhc2NyaXB0LCB0eXBlc2NyaXB0LCBZYW1sRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBHaXRIdWJBc3NpZ25BcHByb3ZlciB9IGZyb20gJ3Byb2plbi1waXBlbGluZXMnO1xuaW1wb3J0IHsgR2l0SHViQW1wbGlmeURlcGxveSwgR2l0SHViQW1wbGlmeURlcGxveU9wdGlvbnMsIEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlLCBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZU9wdGlvbnMsIEdpdGxlYWtzLCBHaXRsZWFrc09wdGlvbnMgfSBmcm9tICcuLi9jb21wb25lbnRzJztcblxuLyoqXG4gKiBUaGUgZnJvbnRlbmQgZnJhbWV3b3JrIGFuIEFtcGxpZnkgSG9zdGluZyBhcHBsaWNhdGlvbiBpcyBidWlsdCB3aXRoLlxuICpcbiAqIFNlbGVjdHMgc2Vuc2libGUgZGVmYXVsdHMgZm9yIHRoZSBidWlsZCBjb21tYW5kLCBhcnRpZmFjdCBkaXJlY3RvcnkgYW5kXG4gKiBjYWNoZSBwYXRocyBpbiB0aGUgZ2VuZXJhdGVkIGBhbXBsaWZ5LnltbGAuXG4gKi9cbmV4cG9ydCBlbnVtIE1vbm9yZXBvQW1wbGlmeUZyYW1ld29yayB7XG4gIC8qKiBBIE5leHQuanMgYXBwIOKAlCBhcnRpZmFjdHMgaW4gYDxhcHBSb290Pi8ubmV4dGAsIGJ1aWx0IHZpYSBgcnVuIGJ1aWxkYC4gKi9cbiAgTkVYVEpTID0gJ25leHRqcycsXG4gIC8qKiBBbiBBbmd1bGFyIGFwcCDigJQgYXJ0aWZhY3RzIGluIGA8YXBwUm9vdD4vZGlzdC88ZmlsdGVyPi9icm93c2VyYCwgYnVpbHQgdmlhIGBydW4gYnVpbGQ6JHtCVUlMRF9FTlZ9YC4gKi9cbiAgQU5HVUxBUiA9ICdhbmd1bGFyJyxcbn1cblxuLyoqXG4gKiBPbmUgQVdTIEFtcGxpZnkgSG9zdGluZyBhcHBsaWNhdGlvbiBzZXJ2ZWQgZnJvbSBhIHdvcmtzcGFjZSBwYWNrYWdlLlxuICpcbiAqIFJlbmRlcnMgYSBzaW5nbGUgZW50cnkgdW5kZXIgYGFwcGxpY2F0aW9uczpgIGluIHRoZSBnZW5lcmF0ZWQgYGFtcGxpZnkueW1sYC5cbiAqIEFtcGxpZnkgZG9lcyBub3QgYXV0by1kZXRlY3QgUE5QTSB3b3Jrc3BhY2VzLCBzbyB0aGUgZ2VuZXJhdGVkIGJ1aWxkIHNwZWNcbiAqIHJ1bnMgYGNvcmVwYWNrIGVuYWJsZWAgKyBhIHJvb3QgYHBucG0gaW5zdGFsbGAgYW5kIHByZS1idWlsZHMgYW55IHNoYXJlZFxuICogcGFja2FnZXMgYmVmb3JlIGJ1aWxkaW5nIHRoZSBhcHAgZnJvbSBpdHMgYGFwcFJvb3RgIChzZWUgQURSLTAwMDIpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbm9yZXBvQW1wbGlmeUFwcCB7XG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBwYXRoIHRoYXQgaXMgdGhlIEFtcGxpZnkgYXBwIHJvb3QsIGUuZy4gYHBhY2thZ2VzL2Zyb250ZW5kYC5cbiAgICovXG4gIHJlYWRvbmx5IGFwcFJvb3Q6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZyb250ZW5kIGZyYW1ld29yaywgdXNlZCB0byBwaWNrIGJ1aWxkL2FydGlmYWN0L2NhY2hlIGRlZmF1bHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJhbWV3b3JrOiBNb25vcmVwb0FtcGxpZnlGcmFtZXdvcms7XG5cbiAgLyoqXG4gICAqIFRoZSBwbnBtIHBhY2thZ2UgbmFtZSB0byBidWlsZCwgdXNlZCBhcyB0aGUgYC0tZmlsdGVyYCB0YXJnZXQsXG4gICAqIGUuZy4gYGRlcGxveW1vbi1mcm9udGVuZGAgb3IgYHJhZGJhbGwtZGlnaXRhbC1wb3J0YWxgLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRGaWx0ZXI6IHN0cmluZztcblxuICAvKipcbiAgICogV29ya3NwYWNlIHBhY2thZ2VzIHRvIGJ1aWxkIGJlZm9yZSB0aGUgYXBwLCBhcyBgLS1maWx0ZXJgIHRhcmdldHMuXG4gICAqXG4gICAqIFR5cGljYWxseSB0aGUgc2hhcmVkIEFQSSBwYWNrYWdlIHRoZSBhcHAgY29uc3VtZXMgdmlhIGB3b3Jrc3BhY2U6KmAsXG4gICAqIGUuZy4gYFsnQHRhaW1vcy9kZXBsb3ltb24tYXBpJ11gLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlQnVpbGRGaWx0ZXJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBidWlsZCBjb21tYW5kIHJ1biBpbiB0aGUgQW1wbGlmeSBgYnVpbGRgIHBoYXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGBwbnBtIC0tZmlsdGVyIDxidWlsZEZpbHRlcj4gcnVuIGJ1aWxkYCBmb3IgTmV4dC5qcywgb3JcbiAgICogYHBucG0gLS1maWx0ZXIgPGJ1aWxkRmlsdGVyPiBydW4gYnVpbGQ6JHtCVUlMRF9FTlZ9YCBmb3IgQW5ndWxhci5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQ29tbWFuZD86IHN0cmluZztcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIGFydGlmYWN0IGJhc2UgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGA8YXBwUm9vdD4vLm5leHRgIGZvciBOZXh0LmpzLCBvclxuICAgKiBgPGFwcFJvb3Q+L2Rpc3QvPGJ1aWxkRmlsdGVyPi9icm93c2VyYCBmb3IgQW5ndWxhci5cbiAgICovXG4gIHJlYWRvbmx5IGFydGlmYWN0QmFzZURpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIEFtcGxpZnkgYnVpbGQgY2FjaGUgcGF0aHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYG5vZGVfbW9kdWxlcy8qKmAgcGx1cyB0aGUgZnJhbWV3b3JrIGJ1aWxkIGNhY2hlXG4gICAqIChgPGFwcFJvb3Q+Ly5uZXh0L2NhY2hlLyoqYCBvciBgPGFwcFJvb3Q+Ly5hbmd1bGFyL2NhY2hlLyoqYCkuXG4gICAqL1xuICByZWFkb25seSBjYWNoZVBhdGhzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIHBucG0gYC0tZmlsdGVyYCBleHByZXNzaW9uIGZvciB0aGUgc2NvcGVkIGluc3RhbGwgaW4gdGhlIHByZUJ1aWxkIHBoYXNlLlxuICAgKlxuICAgKiBUaGUgdHJhaWxpbmcgYC4uLmAgc3ludGF4IHB1bGxzIGluIHRoZSBhcHAncyB0cmFuc2l0aXZlIHdvcmtzcGFjZVxuICAgKiBkZXBlbmRlbmNpZXMgKGUuZy4gYSBzaGFyZWQgQVBJIHBhY2thZ2UpIGJ1dCBleGNsdWRlcyB1bnJlbGF0ZWQgcGFja2FnZXMsXG4gICAqIGF2b2lkaW5nIGNvbmN1cnJlbnQgYHByb2plbi9ub2RlX21vZHVsZXNgIHJlbmFtZSByYWNlcyB1bmRlciB0aGUgaG9pc3RlZFxuICAgKiBsaW5rZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAke2J1aWxkRmlsdGVyfS4uLmBcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxGaWx0ZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZ1bGwgb3ZlcnJpZGUgb2YgdGhlIGluc3RhbGwgY29tbWFuZCBpbiB0aGUgcHJlQnVpbGQgcGhhc2UuXG4gICAqXG4gICAqIFdoZW4gc2V0LCBgaW5zdGFsbEZpbHRlcmAgaXMgaWdub3JlZCBhbmQgdGhpcyBzdHJpbmcgaXMgZW1pdHRlZCB2ZXJiYXRpbS5cbiAgICogVXNlIHRoaXMgYXMgYW4gZXNjYXBlIGhhdGNoIHdoZW4gdGhlIGRlZmF1bHQgc2NvcGVkIGluc3RhbGwgaXMgaW5zdWZmaWNpZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1ub2RlLWxpbmtlciBob2lzdGVkIC0tZmlsdGVyIFwiPGluc3RhbGxGaWx0ZXI+XCJgXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsQ29tbWFuZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQTlBNIHdvcmtzcGFjZSB0dW5pbmcgZm9yIHRoZSBnZW5lcmF0ZWQgYHBucG0td29ya3NwYWNlLnlhbWxgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbm9yZXBvV29ya3NwYWNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIHBhY2thZ2UgZ2xvYnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsncGFja2FnZXMvKiddXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG92ZXJyaWRlcyBmb3JjZWQgYWNyb3NzIHRoZSB3aG9sZSB3b3Jrc3BhY2VcbiAgICogKHRoZSBgb3ZlcnJpZGVzOmAgZmllbGQpLiBPbWl0dGVkIGZyb20gdGhlIGZpbGUgd2hlbiBlbXB0eS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBEZXBlbmRlbmNpZXMgYWxsb3dlZCB0byBydW4gaW5zdGFsbC9idWlsZCBzY3JpcHRzLiBwbnBtID49IDEwIGJsb2NrcyB0aGVzZVxuICAgKiBieSBkZWZhdWx0LiBUaGUgbGlzdCBwb3B1bGF0ZXMgYm90aCBgYWxsb3dCdWlsZHNgIGFuZFxuICAgKiBgb25seUJ1aWx0RGVwZW5kZW5jaWVzYCBzbyBwbnBtIGRvZXMgbm90IHRyZWF0IGBub2RlX21vZHVsZXNgIGFzIHN0YWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ0Bhd3MtYW1wbGlmeS9jbGknLCAnZXNidWlsZCcsICdzaGFycCcsICd1bnJzLXJlc29sdmVyJ11cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93ZWRCdWlsZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTWluaW11bSBhZ2UgaW4gbWludXRlcyBhIHB1Ymxpc2hlZCB2ZXJzaW9uIG11c3QgaGF2ZSBiZWZvcmUgaXQgbWF5IGJlXG4gICAqIGluc3RhbGxlZCAoYG1pbmltdW1SZWxlYXNlQWdlYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IDI4ODAgLy8gMiBkYXlzXG4gICAqL1xuICByZWFkb25seSBtaW5pbXVtUmVsZWFzZUFnZT86IG51bWJlcjtcblxuICAvKipcbiAgICogUGFja2FnZXMgZXhlbXB0IGZyb20gYG1pbmltdW1SZWxlYXNlQWdlYCBzbyBvdXIgb3duIHRvb2xpbmcgY2FuIHVwZGF0ZVxuICAgKiB3aXRob3V0IHRoZSBjb29sZG93bi4gTUVSR0VEIG9uIHRvcCBvZiB0aGUgYnVpbHQtaW4gZGVmYXVsdHNcbiAgICogKGBwcm9qZW4tcGlwZWxpbmVzYCwgYGNkay1zZXJ2ZXJsZXNzYCwgYEB0YWltb3MvcHJvamVuYCwgYHByb2plbmApIGFuZFxuICAgKiBkZWR1cGVkIOKAlCBzdXBwbHlpbmcgdGhpcyBkb2VzIG5vdCBkcm9wIHRoZSB0b29saW5nIGV4ZW1wdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdIC8vIG1lcmdlZCB3aXRoIERFRkFVTFRfUkVMRUFTRV9BR0VfRVhDTFVERVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogT25lIGF1dGhvci10by1hcHByb3ZlcnMgcm91dGluZyBydWxlIGZvciB0aGUgUFIgYXBwcm92ZXIgYXNzaWdubWVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25vcmVwb0FwcHJvdmVyTWFwcGluZyB7XG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIHVzZXJuYW1lIG9wZW5pbmcgdGhlIFBSLlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9yOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgdXNlcm5hbWVzIGFzc2lnbmVkIHRvIHJldmlldyB3aGVuIGBhdXRob3JgIG9wZW5zIGEgUFIuXG4gICAqL1xuICByZWFkb25seSBhcHByb3ZlcnM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbm9yZXBvUHJvamVjdE9wdGlvbnMgZXh0ZW5kcyB0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcG5wbSB2ZXJzaW9uIHBpbm5lZCBmb3IgdGhlIHdvcmtzcGFjZSBhbmQgQ0kuXG4gICAqXG4gICAqIEBkZWZhdWx0ICcxMC4zMy4wJ1xuICAgKi9cbiAgcmVhZG9ubHkgcG5wbVdvcmtzcGFjZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBOb2RlLmpzIHZlcnNpb24gdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGJ1aWxkIHdvcmtmbG93LlxuICAgKlxuICAgKiBAZGVmYXVsdCAnMjInXG4gICAqL1xuICByZWFkb25seSBub2RlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUE5QTSB3b3Jrc3BhY2UgdHVuaW5nIGZvciB0aGUgZ2VuZXJhdGVkIGBwbnBtLXdvcmtzcGFjZS55YW1sYC5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtzcGFjZU9wdGlvbnM/OiBNb25vcmVwb1dvcmtzcGFjZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGBjZGstc2VydmVybGVzc2AgYXMgYSB3b3Jrc3BhY2UgZGV2IGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjZGtTZXJ2ZXJsZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhc3NpZ24gUFIgYXBwcm92ZXJzIHZpYSBgR2l0SHViQXNzaWduQXBwcm92ZXJgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBhc3NpZ25BcHByb3Zlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF1dGhvci10by1hcHByb3ZlcnMgcm91dGluZyBmb3IgdGhlIFBSIGFwcHJvdmVyIGFzc2lnbm1lbnQuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGBhc3NpZ25BcHByb3ZlcmAgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBob2VnZXJ0biBhbmQgaG9lZ2VybWEgcmV2aWV3IGVhY2ggb3RoZXJcbiAgICovXG4gIHJlYWRvbmx5IGFwcHJvdmVyTWFwcGluZz86IE1vbm9yZXBvQXBwcm92ZXJNYXBwaW5nW107XG5cbiAgLyoqXG4gICAqIEFwcHJvdmVycyBhc3NpZ25lZCB3aGVuIG5vIGF1dGhvci1zcGVjaWZpYyBtYXBwaW5nIG1hdGNoZXMuXG4gICAqIE9ubHkgdXNlZCB3aGVuIGBhc3NpZ25BcHByb3ZlcmAgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgWydob2VnZXJ0bicsICdob2VnZXJtYSddXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QXBwcm92ZXJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHVuaWZpZWQgYnVpbGQgd29ya2Zsb3cgYWxzbyBydW5zIGEgc2VwYXJhdGUgYHBucG0gLXIgcnVuIHRlc3RgXG4gICAqIHN0ZXAuXG4gICAqXG4gICAqIEVhY2ggcHJvamVuIHN1Yi1wcm9qZWN0J3Mgb3duIGBidWlsZGAgdGFzayBhbHJlYWR5IHJ1bnMgaXRzIGB0ZXN0YCBzdWItdGFza1xuICAgKiAocHJlLWNvbXBpbGUg4oaSIGNvbXBpbGUg4oaSIHBvc3QtY29tcGlsZSDihpIgdGVzdCDihpIgcGFja2FnZSksIHNvIGBwbnBtIC1yIHJ1blxuICAgKiBidWlsZGAgYWxyZWFkeSBydW5zIGV2ZXJ5IHByb2plbiBwYWNrYWdlJ3MgamVzdCArIGVzbGludC4gRW5hYmxpbmcgdGhpcyBhZGRzXG4gICAqIGEgc2Vjb25kIGZ1bGwgcnVuIOKAlCBpbmNsdWRpbmcgdGhlIGV4cGVuc2l2ZSBDREsgc3ludGhzIOKAlCByb3VnaGx5IGRvdWJsaW5nIENJLlxuICAgKlxuICAgKiBDYXZlYXQ6IHdpdGggdGhpcyBvZmYsIGEgaGFuZC1tYW5hZ2VkIChub24tcHJvamVuKSBwYWNrYWdlIGlzIG9ubHkgdGVzdGVkIGluXG4gICAqIENJIGlmIGl0cyBvd24gYGJ1aWxkYCBzY3JpcHQgcnVucyBpdHMgY2hlY2tzIChlLmcuIGB0c2MgJiYgamVzdGAsXG4gICAqIGBlc2xpbnQgLiAmJiB2aXRlc3QgcnVuICYmIG5leHQgYnVpbGRgKS4gTWFrZSBlYWNoIGhhbmQtbWFuYWdlZCBwYWNrYWdlJ3NcbiAgICogYnVpbGQgc2VsZi1jb250YWluIGl0cyB2ZXJpZmljYXRpb24gc28gYHBucG0gLXIgcnVuIGJ1aWxkYCBzdGF5cyB0aGUgc2luZ2xlXG4gICAqIGdhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBydW5UZXN0c0luQnVpbGQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBV1MgQW1wbGlmeSBIb3N0aW5nIGFwcGxpY2F0aW9ucy4gV2hlbiBzZXQsIGFuIGBhbXBsaWZ5LnltbGAgaXMgZ2VuZXJhdGVkXG4gICAqIHdpdGggb25lIGVudHJ5IHBlciBhcHAuIFdoZW4gb21pdHRlZCwgbm8gYGFtcGxpZnkueW1sYCBpcyBjcmVhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgYW1wbGlmeUFwcHM/OiBNb25vcmVwb0FtcGxpZnlBcHBbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYSBtYW51YWwgXCJQcm9kdWN0aW9uIFJlbGVhc2VcIiB3b3JrZmxvdyB0aGF0IHByb21vdGVzIGEgYnJhbmNoXG4gICAqIHRvIHRoZSBwcm9kdWN0aW9uIGJyYW5jaCAoc2VlIGBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZWApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZHVjdGlvblJlbGVhc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgcHJvZHVjdGlvbiByZWxlYXNlIHdvcmtmbG93LiBPbmx5IHVzZWQgd2hlblxuICAgKiBgcHJvZHVjdGlvblJlbGVhc2VgIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvbW90ZSBgbWFpbmAgdG8gYSBgcHJvZHVjdGlvbmAgYnJhbmNoXG4gICAqL1xuICByZWFkb25seSBwcm9kdWN0aW9uUmVsZWFzZU9wdGlvbnM/OiBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGdpdGxlYWtzIHNlY3JldC1zY2FubmluZzogYSBgLmdpdGxlYWtzLnRvbWxgIGNvbmZpZyBwbHVzIGFcbiAgICogcHVsbC1yZXF1ZXN0IHdvcmtmbG93IHRoYXQgc2NhbnMgdGhlIGZ1bGwgZ2l0IGhpc3RvcnkgKHNlZSBgR2l0bGVha3NgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGdpdGxlYWtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIGdpdGxlYWtzIGNvbXBvbmVudC4gT25seSB1c2VkIHdoZW4gYGdpdGxlYWtzYCBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGV4dGVuZCB0aGUgZGVmYXVsdCBydWxlc2V0LCBubyBleHRyYSBhbGxvd2xpc3RzXG4gICAqL1xuICByZWFkb25seSBnaXRsZWFrc09wdGlvbnM/OiBHaXRsZWFrc09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERyaXZlIEFtcGxpZnkgSG9zdGluZyBidWlsZHMgZnJvbSBHaXRIdWIgQWN0aW9ucyBpbnN0ZWFkIG9mIEFtcGxpZnkncyBvd25cbiAgICogYXV0by1idWlsZCwgc28gYW4gYXBwIG9ubHkgcmVidWlsZHMgd2hlbiB0aGUgcGFja2FnZXMgaXQgaXMgYnVpbHQgZnJvbVxuICAgKiBhY3R1YWxseSBjaGFuZ2VkIChzZWUgYEdpdEh1YkFtcGxpZnlEZXBsb3lgKS5cbiAgICpcbiAgICogU2V0dGluZyB0aGlzIGdlbmVyYXRlcyBvbmUgZGVwbG95IHdvcmtmbG93IHBlciBsaXN0ZWQgYXBwLiBUaGUgcHJvamVjdCdzXG4gICAqIENESyBhcHAgbXVzdCBkaXNhYmxlIGBhdXRvQnVpbGRgIG9uIHRoZSB0cmFja2VkIGJyYW5jaGVzIGFuZCBwcm92aWRlIHRoZVxuICAgKiBhcHAtaWQgcGFyYW1ldGVycyBhbmQgYnVpbGQtdHJpZ2dlciByb2xlIHRoZSB3b3JrZmxvd3MgZXhwZWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFtcGxpZnkncyBvd24gYXV0by1idWlsZCBpcyBsZWZ0IGluIHBsYWNlXG4gICAqL1xuICByZWFkb25seSBhbXBsaWZ5RGVwbG95T3B0aW9ucz86IEdpdEh1YkFtcGxpZnlEZXBsb3lPcHRpb25zO1xufVxuXG4vKipcbiAqIFByaXZhdGUgUE5QTS13b3Jrc3BhY2UgbW9ub3JlcG8gcm9vdCwgZm9sbG93aW5nIFRhaW1vcyBBRFItMDAwMi5cbiAqXG4gKiBUaGUgcm9vdCBvbmx5IG9yY2hlc3RyYXRlcyB0aGUgd29ya3NwYWNlIOKAlCBidWlsZGluZywgdGVzdGluZyBhbmQgbGludGluZyBhcmVcbiAqIGRlbGVnYXRlZCB0byB0aGUgd29ya3NwYWNlIHBhY2thZ2VzIHZpYSBgcG5wbSAtcmAuIFRoaXMgcHJvamVjdCBnZW5lcmF0ZXMgdGhlXG4gKiBgcG5wbS13b3Jrc3BhY2UueWFtbGAsIHRoZSByb290IGNvbnZlbmllbmNlIHNjcmlwdHMsIGEgdW5pZmllZCBQUiBidWlsZFxuICogd29ya2Zsb3cgYW5kIChvcHRpb25hbGx5KSBhbiBBbXBsaWZ5IEhvc3RpbmcgYnVpbGQgc3BlYy4gVGhlIHByb2plbi1tYW5hZ2VkXG4gKiBzdWItcHJvamVjdHMgKGFwaSwgYmFja2VuZCwgaW5mcmEpIGFyZSBhZGRlZCB3aXRoIHRoZSBgcGFyZW50YC9gb3V0ZGlyYFxuICogcGF0dGVybiBpbiB0aGUgY29uc3VtaW5nIGAucHJvamVucmMudHNgOyBwbGFpbiB3b3Jrc3BhY2UgcGFja2FnZXMgKGUuZy5cbiAqIE5leHQuanMgYXBwcykgYXJlIHBpY2tlZCB1cCBieSB0aGUgYHBhY2thZ2VzLypgIGdsb2IuXG4gKlxuICogQHBqaWQgdGFpbW9zLW1vbm9yZXBvXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25vcmVwb1Byb2plY3QgZXh0ZW5kcyB0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0IHtcblxuICAvKipcbiAgICogUGFja2FnZXMgZXhlbXB0IGZyb20gYG1pbmltdW1SZWxlYXNlQWdlYCBieSBkZWZhdWx0IHNvIG91ciBvd24gYnVpbGQgdG9vbGluZ1xuICAgKiBjYW4gdXBkYXRlIHdpdGhvdXQgdGhlIGNvb2xkb3duLiBBIGNvbnN1bWVyJ3NcbiAgICogYHdvcmtzcGFjZU9wdGlvbnMubWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlYCBpcyBtZXJnZWQgb24gdG9wIG9mIHRoaXMgbGlzdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9SRUxFQVNFX0FHRV9FWENMVURFOiBzdHJpbmdbXSA9IFtcbiAgICAncHJvamVuLXBpcGVsaW5lcycsXG4gICAgJ2Nkay1zZXJ2ZXJsZXNzJyxcbiAgICAnQHRhaW1vcy9wcm9qZW4nLFxuICAgICdwcm9qZW4nLFxuICBdO1xuXG4gIC8qKiBUaGUgZ2VuZXJhdGVkIGBwbnBtLXdvcmtzcGFjZS55YW1sYC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdvcmtzcGFjZUZpbGU6IFlhbWxGaWxlO1xuXG4gIC8qKiBUaGUgdW5pZmllZCBQUiBidWlsZCB3b3JrZmxvdy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHByQnVpbGRXb3JrZmxvdzogZ2l0aHViLkdpdGh1YldvcmtmbG93O1xuXG4gIC8qKiBUaGUgZ2VuZXJhdGVkIGBhbXBsaWZ5LnltbGAsIGlmIGFueSBBbXBsaWZ5IGFwcHMgd2VyZSBjb25maWd1cmVkLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYW1wbGlmeUZpbGU/OiBZYW1sRmlsZTtcblxuICAvKiogVGhlIFBSIGFwcHJvdmVyIGFzc2lnbm1lbnQsIGlmIGVuYWJsZWQuICovXG4gIHB1YmxpYyByZWFkb25seSBhc3NpZ25BcHByb3Zlcj86IEdpdEh1YkFzc2lnbkFwcHJvdmVyO1xuXG4gIC8qKiBUaGUgcHJvZHVjdGlvbiByZWxlYXNlIHdvcmtmbG93LCBpZiBlbmFibGVkLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvZHVjdGlvblJlbGVhc2U/OiBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZTtcblxuICAvKiogVGhlIEFtcGxpZnkgZGVwbG95IHdvcmtmbG93cywgd2hlbiBgYW1wbGlmeURlcGxveU9wdGlvbnNgIGlzIHNldC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGFtcGxpZnlEZXBsb3k/OiBHaXRIdWJBbXBsaWZ5RGVwbG95O1xuXG4gIC8qKiBUaGUgZ2l0bGVha3Mgc2VjcmV0LXNjYW5uaW5nIGNvbXBvbmVudCwgaWYgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGdpdGxlYWtzPzogR2l0bGVha3M7XG5cbiAgLyoqIFRoZSBkZWZhdWx0IHJlbGVhc2UgYnJhbmNoIChwcm9tb3RlZCBieSB0aGUgcHJvZHVjdGlvbiByZWxlYXNlIHdvcmtmbG93KS4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRSZWxlYXNlQnJhbmNoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTW9ub3JlcG9Qcm9qZWN0T3B0aW9ucykge1xuICAgIGNvbnN0IHBucG1WZXJzaW9uID0gb3B0aW9ucy5wbnBtV29ya3NwYWNlVmVyc2lvbiA/PyAnMTAuMzMuMCc7XG5cbiAgICAvLyBQTlBNIHdvcmtzcGFjZSB0dW5pbmcg4oCUIG1hcHBlZCBvbnRvIHByb2plbidzIG5hdGl2ZSBgcG5wbS13b3Jrc3BhY2UueWFtbGBcbiAgICAvLyBzdXBwb3J0IChwcm9qZW4gPj0gMC4xMDEpIHRocm91Z2ggYGFsbG93U2NyaXB0c2AgKyBgcG5wbU9wdGlvbnNgIGJlbG93LFxuICAgIC8vIHJhdGhlciB0aGFuIGhhbmQtcm9sbGluZyB0aGUgWUFNTCBmaWxlLlxuICAgIGNvbnN0IHdzID0gb3B0aW9ucy53b3Jrc3BhY2VPcHRpb25zID8/IHt9O1xuICAgIGNvbnN0IGFsbG93ZWRCdWlsZHMgPSB3cy5hbGxvd2VkQnVpbGRzID8/IFsnQGF3cy1hbXBsaWZ5L2NsaScsICdlc2J1aWxkJywgJ3NoYXJwJywgJ3VucnMtcmVzb2x2ZXInXTtcblxuICAgIC8vIFBhY2thZ2VzIGV4ZW1wdCBmcm9tIGBtaW5pbXVtUmVsZWFzZUFnZWAgc28gb3VyIG93biBidWlsZCB0b29saW5nIGNhblxuICAgIC8vIHVwZGF0ZSB3aXRob3V0IHRoZSBjb29sZG93bi4gYHByb2plbmAgaXMgaW5jbHVkZWQgYmVjYXVzZSBgQHRhaW1vcy9wcm9qZW5gXG4gICAgLy8gcGlucyBhIHByb2plbiBmbG9vciwgc28gdGhlIHR3byBtdXN0IG1vdmUgaW4gbG9ja3N0ZXAuIEEgY29uc3VtZXItc3VwcGxpZWRcbiAgICAvLyBsaXN0IE1FUkdFUyB3aXRoIHRoZXNlIGRlZmF1bHRzIChkZWR1cGVkKSByYXRoZXIgdGhhbiByZXBsYWNpbmcgdGhlbSwgc29cbiAgICAvLyBhZGRpbmcgb25lIHBhY2thZ2UgZG9lcyBub3Qgc2lsZW50bHkgZHJvcCB0aGUgdG9vbGluZyBleGVtcHRpb25zLlxuICAgIGNvbnN0IHJlbGVhc2VBZ2VFeGNsdWRlID0gQXJyYXkuZnJvbShuZXcgU2V0KFtcbiAgICAgIC4uLk1vbm9yZXBvUHJvamVjdC5ERUZBVUxUX1JFTEVBU0VfQUdFX0VYQ0xVREUsXG4gICAgICAuLi4od3MubWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlID8/IFtdKSxcbiAgICBdKSk7XG5cbiAgICBzdXBlcih7XG4gICAgICBsaWNlbnNlZDogZmFsc2UsXG4gICAgICByZWxlYXNlOiBmYWxzZSxcbiAgICAgIGRlcHNVcGdyYWRlOiBmYWxzZSxcbiAgICAgIC8vIFRoZSByb290IG9ubHkgb3JjaGVzdHJhdGVzIHRoZSB3b3Jrc3BhY2Ug4oCUIG5vIGFwcCBjb2RlIGxpdmVzIGhlcmUuXG4gICAgICBqZXN0OiBmYWxzZSxcbiAgICAgIGVzbGludDogZmFsc2UsXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcbiAgICAgIC8vIENJIGlzIHRoZSBzaW5nbGUgaGFuZC1yb2xsZWQgd29ya2Zsb3cgYmVsb3cgdGhhdCBkZWxlZ2F0ZXMgdG8gcGFja2FnZXMuXG4gICAgICBidWlsZFdvcmtmbG93OiBmYWxzZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAvLyBGb3JjZWQg4oCUIGRlZmluaW5nIHdoYXQgYSBUYWltb3MgbW9ub3JlcG8gcm9vdCBpcy5cbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBqYXZhc2NyaXB0Lk5vZGVQYWNrYWdlTWFuYWdlci5QTlBNLFxuICAgICAgcG5wbVZlcnNpb24sXG4gICAgICAvLyBOYXRpdmUgcG5wbS13b3Jrc3BhY2UueWFtbCAocHJvamVuID49IDAuMTAxKS4gYGFsbG93U2NyaXB0c2AgcmVuZGVycyB0aGVcbiAgICAgIC8vIGJ1aWxkIGFsbG93bGlzdCBpbnRvIGBvbmx5QnVpbHREZXBlbmRlbmNpZXNgOyB0aGUgcmVtYWluaW5nIHR1bmluZyBtYXBzXG4gICAgICAvLyBvbnRvIGB3b3Jrc3BhY2VZYW1sT3B0aW9uc2AuIEFueSBjb25zdW1lci1zdXBwbGllZCBgcG5wbU9wdGlvbnNgIGFyZVxuICAgICAgLy8gbWVyZ2VkIGluIGFuZCB3aW4gb3ZlciBvdXIgZGVmYXVsdHMuXG4gICAgICBhbGxvd1NjcmlwdHM6IGFsbG93ZWRCdWlsZHMsXG4gICAgICBwbnBtT3B0aW9uczoge1xuICAgICAgICAuLi5vcHRpb25zLnBucG1PcHRpb25zLFxuICAgICAgICB3b3Jrc3BhY2VZYW1sT3B0aW9uczoge1xuICAgICAgICAgIC8vIHBucG0gMTEgcmVwbGFjZWQgYG9ubHlCdWlsdERlcGVuZGVuY2llc2AgKHdoaWNoIGBhbGxvd1NjcmlwdHNgXG4gICAgICAgICAgLy8gcmVuZGVycykgd2l0aCBgYWxsb3dCdWlsZHNgLCBhbmQgcmVhZHMgb25seSB0aGUgbGF0dGVyIOKAlCBhIHBucG0gMTFcbiAgICAgICAgICAvLyBpbnN0YWxsIG90aGVyd2lzZSBhYm9ydHMgd2l0aCBFUlJfUE5QTV9JR05PUkVEX0JVSUxEUy4gcG5wbSAxMCByZWFkc1xuICAgICAgICAgIC8vIG9ubHkgYG9ubHlCdWlsdERlcGVuZGVuY2llc2AuIEVtaXQgYm90aCBzbyB0aGUgc2FtZSB3b3Jrc3BhY2UgZmlsZVxuICAgICAgICAgIC8vIHdvcmtzIG9uIGVpdGhlciwgd2hhdGV2ZXIgYHBucG1WZXJzaW9uYCBhIGNvbnN1bWVyIHBpbnMuXG4gICAgICAgICAgYWxsb3dCdWlsZHM6IE9iamVjdC5mcm9tRW50cmllcyhhbGxvd2VkQnVpbGRzLm1hcCgocGtnKSA9PiBbcGtnLCB0cnVlXSkpLFxuICAgICAgICAgIHBhY2thZ2VzOiB3cy5wYWNrYWdlcyA/PyBbJ3BhY2thZ2VzLyonXSxcbiAgICAgICAgICBtaW5pbXVtUmVsZWFzZUFnZTogd3MubWluaW11bVJlbGVhc2VBZ2UgPz8gMjg4MCwgLy8gMiBkYXlzIGluIG1pbnV0ZXNcbiAgICAgICAgICBtaW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGU6IHJlbGVhc2VBZ2VFeGNsdWRlLFxuICAgICAgICAgIC4uLih3cy5vdmVycmlkZXMgJiYgT2JqZWN0LmtleXMod3Mub3ZlcnJpZGVzKS5sZW5ndGggPiAwID8geyBvdmVycmlkZXM6IHdzLm92ZXJyaWRlcyB9IDoge30pLFxuICAgICAgICAgIC4uLm9wdGlvbnMucG5wbU9wdGlvbnM/LndvcmtzcGFjZVlhbWxPcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHByb2plbnJjVHM6IHRydWUsXG4gICAgICBnaXRodWI6IHRydWUsXG4gICAgICBnaXRodWJPcHRpb25zOiB7XG4gICAgICAgIHByb2plbkNyZWRlbnRpYWxzOiBnaXRodWIuR2l0aHViQ3JlZGVudGlhbHMuZnJvbUFwcCgpLFxuICAgICAgICBtZXJnaWZ5OiBmYWxzZSxcbiAgICAgICAgbWVyZ2VRdWV1ZTogdHJ1ZSxcbiAgICAgICAgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zLFxuICAgICAgICBtZXJnZVF1ZXVlT3B0aW9uczoge1xuICAgICAgICAgIGF1dG9RdWV1ZTogdHJ1ZSxcbiAgICAgICAgICAuLi5vcHRpb25zLmdpdGh1Yk9wdGlvbnM/Lm1lcmdlUXVldWVPcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBwdWxsUmVxdWVzdExpbnRPcHRpb25zOiB7XG4gICAgICAgICAgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zPy5wdWxsUmVxdWVzdExpbnRPcHRpb25zLFxuICAgICAgICAgIHNlbWFudGljVGl0bGVPcHRpb25zOiB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLmdpdGh1Yk9wdGlvbnM/LnB1bGxSZXF1ZXN0TGludE9wdGlvbnM/LnNlbWFudGljVGl0bGVPcHRpb25zLFxuICAgICAgICAgICAgLy8gRml4ZWQgYWxsb3dlZCBQUiB0aXRsZSB0eXBlcyBmb3IgYSBUYWltb3MgbW9ub3JlcG8uXG4gICAgICAgICAgICB0eXBlczogWydmZWF0JywgJ2ZpeCcsICdjaG9yZScsICdkb2NzJywgJ3NwZWMnLCAnY2knXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRldkRlcHM6IFtcbiAgICAgICAgJ0B0YWltb3MvcHJvamVuJyxcbiAgICAgICAgJ3Byb2plbi1waXBlbGluZXMnLFxuICAgICAgICAuLi4ob3B0aW9ucy5jZGtTZXJ2ZXJsZXNzID8/IGZhbHNlID8gWydjZGstc2VydmVybGVzcyddIDogW10pLFxuICAgICAgICAuLi5vcHRpb25zLmRldkRlcHMgPz8gW10sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gUHJpdmF0ZSB3b3Jrc3BhY2Ugcm9vdCDigJQgbmV2ZXIgcHVibGlzaGVkLCByZXNvbHZlcyBwYWNrYWdlcyBsb2NhbGx5LlxuICAgIHRoaXMucGFja2FnZS5hZGRGaWVsZCgncHJpdmF0ZScsIHRydWUpO1xuXG4gICAgdGhpcy5kZWZhdWx0UmVsZWFzZUJyYW5jaCA9IG9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2ggPz8gJ21haW4nO1xuXG4gICAgLy8gUFIgYXBwcm92ZXIgcm91dGluZy5cbiAgICBpZiAob3B0aW9ucy5hc3NpZ25BcHByb3ZlciA/PyB0cnVlKSB7XG4gICAgICB0aGlzLmFzc2lnbkFwcHJvdmVyID0gbmV3IEdpdEh1YkFzc2lnbkFwcHJvdmVyKHRoaXMsIHtcbiAgICAgICAgYXBwcm92ZXJNYXBwaW5nOiBvcHRpb25zLmFwcHJvdmVyTWFwcGluZyA/PyBbXG4gICAgICAgICAgeyBhdXRob3I6ICdob2VnZXJ0bicsIGFwcHJvdmVyczogWydob2VnZXJtYSddIH0sXG4gICAgICAgICAgeyBhdXRob3I6ICdob2VnZXJtYScsIGFwcHJvdmVyczogWydob2VnZXJ0biddIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRlZmF1bHRBcHByb3ZlcnM6IG9wdGlvbnMuZGVmYXVsdEFwcHJvdmVycyA/PyBbJ2hvZWdlcnRuJywgJ2hvZWdlcm1hJ10sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBNYW51YWwgcHJvZHVjdGlvbiByZWxlYXNlIOKAlCBwcm9tb3RlcyBhIGJyYW5jaCB0byB0aGUgcHJvZHVjdGlvbiBicmFuY2guXG4gICAgaWYgKG9wdGlvbnMuYW1wbGlmeURlcGxveU9wdGlvbnMpIHtcbiAgICAgIHRoaXMuYW1wbGlmeURlcGxveSA9IG5ldyBHaXRIdWJBbXBsaWZ5RGVwbG95KHRoaXMsIG9wdGlvbnMuYW1wbGlmeURlcGxveU9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnByb2R1Y3Rpb25SZWxlYXNlID8/IGZhbHNlKSB7XG4gICAgICB0aGlzLnByb2R1Y3Rpb25SZWxlYXNlID0gbmV3IEdpdEh1YlByb2R1Y3Rpb25SZWxlYXNlKHRoaXMsIG9wdGlvbnMucHJvZHVjdGlvblJlbGVhc2VPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBnaXRsZWFrcyBzZWNyZXQtc2Nhbm5pbmc6IC5naXRsZWFrcy50b21sICsgYSBQUiB3b3JrZmxvdyBzY2FubmluZyBoaXN0b3J5LlxuICAgIGlmIChvcHRpb25zLmdpdGxlYWtzID8/IGZhbHNlKSB7XG4gICAgICB0aGlzLmdpdGxlYWtzID0gbmV3IEdpdGxlYWtzKHRoaXMsIG9wdGlvbnMuZ2l0bGVha3NPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgcHJvamVucmMgaXMgc3BsaXQgaW50byBtb2R1bGVzIHVuZGVyIC5wcm9qZW4vIOKAlCBtYWtlIHRoZW0gcGFydCBvZiB0aGVcbiAgICAvLyBkZXYgdHNjb25maWcgc28gdGhlIElERSBhbmQgdHMtbm9kZSB0eXBlLWNoZWNrIHRoZW0uXG4gICAgdGhpcy50c2NvbmZpZ0Rldj8uYWRkSW5jbHVkZSgnLnByb2plbi8qLnRzJyk7XG5cbiAgICAvLyBwcm9qZW4ncyBOb2RlUGFja2FnZSBnZW5lcmF0ZXMgYHBucG0td29ya3NwYWNlLnlhbWxgIG5hdGl2ZWx5IChwcm9qZW4gPj1cbiAgICAvLyAwLjEwMSksIGNvbmZpZ3VyZWQgdmlhIHRoZSBgcG5wbU9wdGlvbnNgL2BhbGxvd1NjcmlwdHNgIHBhc3NlZCB0byBzdXBlcigpLlxuICAgIC8vIEV4cG9zZSB0aGUgZ2VuZXJhdGVkIGZpbGUgc28gY29uc3VtZXJzIGNhbiBmdXJ0aGVyIGN1c3RvbWl6ZSBpdC5cbiAgICB0aGlzLndvcmtzcGFjZUZpbGUgPSB0aGlzLnRyeUZpbmRPYmplY3RGaWxlKCdwbnBtLXdvcmtzcGFjZS55YW1sJykgYXMgWWFtbEZpbGU7XG5cbiAgICAvLyBDb252ZW5pZW5jZSByb290IHNjcmlwdHMgZGVsZWdhdGUgdG8gdGhlIHdvcmtzcGFjZS5cbiAgICBjb25zdCByb290UGtnID0gdGhpcy50cnlGaW5kT2JqZWN0RmlsZSgncGFja2FnZS5qc29uJykhO1xuICAgIHJvb3RQa2cuYWRkT3ZlcnJpZGUoJ3NjcmlwdHMuYnVpbGQnLCAncG5wbSAtciBydW4gYnVpbGQnKTtcbiAgICByb290UGtnLmFkZE92ZXJyaWRlKCdzY3JpcHRzLnRlc3QnLCAncG5wbSAtciBydW4gdGVzdCcpO1xuICAgIHJvb3RQa2cuYWRkT3ZlcnJpZGUoJ3NjcmlwdHMubGludCcsICdwbnBtIC1yIHJ1biBlc2xpbnQnKTtcblxuICAgIC8vIFVuaWZpZWQgUFIgYnVpbGQgd29ya2Zsb3cg4oCUIGJ1aWxkcyAoYW5kIG9wdGlvbmFsbHkgdGVzdHMpIGV2ZXJ5IHdvcmtzcGFjZVxuICAgIC8vIHBhY2thZ2UgaW4gZGVwZW5kZW5jeSBvcmRlci5cbiAgICBjb25zdCBub2RlVmVyc2lvbiA9IG9wdGlvbnMubm9kZVZlcnNpb24gPz8gJzIyJztcbiAgICBjb25zdCBidWlsZFN0ZXBzOiBnaXRodWIud29ya2Zsb3dzLkpvYlN0ZXBbXSA9IFtcbiAgICAgIHsgbmFtZTogJ0NoZWNrb3V0JywgdXNlczogJ2FjdGlvbnMvY2hlY2tvdXRAdjQnIH0sXG4gICAgICB7IG5hbWU6ICdTZXR1cCBwbnBtJywgdXNlczogJ3BucG0vYWN0aW9uLXNldHVwQHY0Jywgd2l0aDogeyB2ZXJzaW9uOiBwbnBtVmVyc2lvbiB9IH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdTZXR1cCBOb2RlLmpzJyxcbiAgICAgICAgdXNlczogJ2FjdGlvbnMvc2V0dXAtbm9kZUB2NCcsXG4gICAgICAgIHdpdGg6IHsgJ25vZGUtdmVyc2lvbic6IG5vZGVWZXJzaW9uLCAnY2FjaGUnOiAncG5wbScgfSxcbiAgICAgIH0sXG4gICAgICB7IG5hbWU6ICdJbnN0YWxsJywgcnVuOiAncG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlJyB9LFxuICAgICAgeyBuYW1lOiAnQnVpbGQnLCBydW46ICdwbnBtIC1yIHJ1biBidWlsZCcgfSxcbiAgICBdO1xuICAgIGlmIChvcHRpb25zLnJ1blRlc3RzSW5CdWlsZCA/PyBmYWxzZSkge1xuICAgICAgYnVpbGRTdGVwcy5wdXNoKHsgbmFtZTogJ1Rlc3QnLCBydW46ICdwbnBtIC1yIHJ1biB0ZXN0JyB9KTtcbiAgICB9XG4gICAgLy8gUGF0aCBmaWx0ZXI6IG9ubHkgdHJpZ2dlciBidWlsZHMgd2hlbiB3b3Jrc3BhY2UgcGFja2FnZSBmaWxlcyBvclxuICAgIC8vIGJ1aWxkLXJlbGV2YW50IHJvb3QgY29uZmlndXJhdGlvbiBjaGFuZ2VzLiBDaGFuZ2VzIHRvIHNwZWNzIG9yIGRvY3NcbiAgICAvLyBhbG9uZSBzaG91bGQgbm90IHRyaWdnZXIgYSBuZXcgYnVpbGQuXG4gICAgY29uc3Qgd29ya3NwYWNlUGFja2FnZXMgPSB3cy5wYWNrYWdlcyA/PyBbJ3BhY2thZ2VzLyonXTtcbiAgICBjb25zdCBidWlsZFBhdGhzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC8vIFdvcmtzcGFjZSBwYWNrYWdlIHNvdXJjZSBmaWxlcy5cbiAgICAgIC4uLndvcmtzcGFjZVBhY2thZ2VzLm1hcCgocGtnKSA9PiBgJHtwa2d9LyoqYCksXG4gICAgICAvLyBEZXBlbmRlbmN5IGxvY2sgJiB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbi5cbiAgICAgICdwbnBtLWxvY2sueWFtbCcsXG4gICAgICAncG5wbS13b3Jrc3BhY2UueWFtbCcsXG4gICAgICAvLyBSb290IHBhY2thZ2UuanNvbiAoc2NyaXB0cywgZGV2RGVwcywgZW5naW5lcykuXG4gICAgICAncGFja2FnZS5qc29uJyxcbiAgICAgIC8vIFByb2plbiBjb25maWd1cmF0aW9uIOKAlCByZWdlbmVyYXRlcyBwcm9qZWN0IGZpbGVzLlxuICAgICAgJy5wcm9qZW5yYy50cycsXG4gICAgICAnLnByb2plbnJjLmpzJyxcbiAgICAgICcucHJvamVuLyoqJyxcbiAgICAgIC8vIFNoYXJlZCBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24uXG4gICAgICAndHNjb25maWcuanNvbicsXG4gICAgICAndHNjb25maWcuKi5qc29uJyxcbiAgICAgIC8vIFRoZSBidWlsZCB3b3JrZmxvdyBpdHNlbGYuXG4gICAgICAnLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQueW1sJyxcbiAgICAgIC8vIFNoYXJlZCBsaW50IGNvbmZpZ3VyYXRpb24uXG4gICAgICAnLmVzbGludHJjLionLFxuICAgICAgJ2VzbGludC5jb25maWcuKicsXG4gICAgXTtcblxuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93ID0gbmV3IGdpdGh1Yi5HaXRodWJXb3JrZmxvdyh0aGlzLmdpdGh1YiEsICdidWlsZCcpO1xuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93Lm9uKHtcbiAgICAgIHB1bGxSZXF1ZXN0OiB7IHBhdGhzOiBidWlsZFBhdGhzIH0sXG4gICAgICBwdXNoOiB7IGJyYW5jaGVzOiBbJ21haW4nXSwgcGF0aHM6IGJ1aWxkUGF0aHMgfSxcbiAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHt9LFxuICAgIH0pO1xuICAgIHRoaXMucHJCdWlsZFdvcmtmbG93LmFkZEpvYignYnVpbGQnLCB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgcGVybWlzc2lvbnM6IHsgY29udGVudHM6IGdpdGh1Yi53b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5SRUFEIH0sXG4gICAgICBzdGVwczogYnVpbGRTdGVwcyxcbiAgICB9KTtcblxuICAgIC8vIEFXUyBBbXBsaWZ5IEhvc3RpbmcgYnVpbGQgc3BlYy4gUE5QTSB3b3Jrc3BhY2VzIGFyZSBub3QgYXV0by1kZXRlY3RlZCBieVxuICAgIC8vIEFtcGxpZnksIHNvIGVhY2ggYXBwIGluc3RhbGxzIGF0IHRoZSByZXBvIHJvb3QsIHByZS1idWlsZHMgaXRzIHNoYXJlZFxuICAgIC8vIHBhY2thZ2VzLCB0aGVuIGJ1aWxkcyBmcm9tIGl0cyBhcHBSb290IChzZWUgQURSLTAwMDIpLlxuICAgIGlmIChvcHRpb25zLmFtcGxpZnlBcHBzICYmIG9wdGlvbnMuYW1wbGlmeUFwcHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hbXBsaWZ5RmlsZSA9IG5ldyBZYW1sRmlsZSh0aGlzLCAnYW1wbGlmeS55bWwnLCB7XG4gICAgICAgIG9iajoge1xuICAgICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgICAgYXBwbGljYXRpb25zOiBvcHRpb25zLmFtcGxpZnlBcHBzLm1hcCgoYXBwKSA9PiB0aGlzLnJlbmRlckFtcGxpZnlBcHAoYXBwKSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckFtcGxpZnlBcHAoYXBwOiBNb25vcmVwb0FtcGxpZnlBcHApIHtcbiAgICBjb25zdCBhbmd1bGFyID0gYXBwLmZyYW1ld29yayA9PT0gTW9ub3JlcG9BbXBsaWZ5RnJhbWV3b3JrLkFOR1VMQVI7XG4gICAgLy8gU2NvcGUgdGhlIGluc3RhbGwgdG8gdGhlIGFwcCdzIGRlcGVuZGVuY3kgY2xvc3VyZSB0byBhdm9pZCBjb25jdXJyZW50XG4gICAgLy8gcHJvamVuL25vZGVfbW9kdWxlcyByZW5hbWUgcmFjZXMgdW5kZXIgdGhlIGhvaXN0ZWQgbGlua2VyIChzZWUgIzM3MikuXG4gICAgY29uc3QgZmlsdGVyID0gYXBwLmluc3RhbGxGaWx0ZXIgPz8gYCR7YXBwLmJ1aWxkRmlsdGVyfS4uLmA7XG4gICAgY29uc3QgaW5zdGFsbENvbW1hbmQgPSBhcHAuaW5zdGFsbENvbW1hbmRcbiAgICAgID8/IGBwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgLS1ub2RlLWxpbmtlciBob2lzdGVkIC0tZmlsdGVyIFwiJHtmaWx0ZXJ9XCJgO1xuICAgIGNvbnN0IHByZUJ1aWxkID0gW1xuICAgICAgJ2NvcmVwYWNrIGVuYWJsZScsXG4gICAgICBpbnN0YWxsQ29tbWFuZCxcbiAgICAgIC4uLihhcHAucHJlQnVpbGRGaWx0ZXJzID8/IFtdKS5tYXAoKGYpID0+IGBwbnBtIC0tZmlsdGVyICR7Zn0gcnVuIGJ1aWxkYCksXG4gICAgXTtcbiAgICAvLyBCVUlMRF9FTlYgKGRldnxwcm9kKSBpcyBwcm92aWRlZCBhcyBhbiBBbXBsaWZ5IGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgIGNvbnN0IGJ1aWxkQ29tbWFuZCA9IGFwcC5idWlsZENvbW1hbmQgPz8gKGFuZ3VsYXJcbiAgICAgID8gYHBucG0gLS1maWx0ZXIgJHthcHAuYnVpbGRGaWx0ZXJ9IHJ1biBidWlsZDpcXCR7QlVJTERfRU5WfWBcbiAgICAgIDogYHBucG0gLS1maWx0ZXIgJHthcHAuYnVpbGRGaWx0ZXJ9IHJ1biBidWlsZGApO1xuICAgIGNvbnN0IGJhc2VEaXJlY3RvcnkgPSBhcHAuYXJ0aWZhY3RCYXNlRGlyZWN0b3J5ID8/IChhbmd1bGFyXG4gICAgICA/IGAke2FwcC5hcHBSb290fS9kaXN0LyR7YXBwLmJ1aWxkRmlsdGVyfS9icm93c2VyYFxuICAgICAgOiBgJHthcHAuYXBwUm9vdH0vLm5leHRgKTtcbiAgICBjb25zdCBjYWNoZVBhdGhzID0gYXBwLmNhY2hlUGF0aHMgPz8gW1xuICAgICAgJ25vZGVfbW9kdWxlcy8qKi8qJyxcbiAgICAgIGFuZ3VsYXIgPyBgJHthcHAuYXBwUm9vdH0vLmFuZ3VsYXIvY2FjaGUvKiovKmAgOiBgJHthcHAuYXBwUm9vdH0vLm5leHQvY2FjaGUvKiovKmAsXG4gICAgXTtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwUm9vdDogYXBwLmFwcFJvb3QsXG4gICAgICBmcm9udGVuZDoge1xuICAgICAgICAvLyBJbnN0YWxsL2J1aWxkIGZyb20gdGhlIG1vbm9yZXBvIHJvb3Qgc28gdGhlIHdvcmtzcGFjZSByb290XG4gICAgICAgIC8vIHBhY2thZ2UuanNvbiBhbmQgcG5wbS1sb2NrLnlhbWwgYXJlIGF2YWlsYWJsZS5cbiAgICAgICAgYnVpbGRQYXRoOiAnLycsXG4gICAgICAgIHBoYXNlczoge1xuICAgICAgICAgIHByZUJ1aWxkOiB7IGNvbW1hbmRzOiBwcmVCdWlsZCB9LFxuICAgICAgICAgIGJ1aWxkOiB7IGNvbW1hbmRzOiBbYnVpbGRDb21tYW5kXSB9LFxuICAgICAgICB9LFxuICAgICAgICBhcnRpZmFjdHM6IHsgYmFzZURpcmVjdG9yeSwgZmlsZXM6IFsnKiovKiddIH0sXG4gICAgICAgIGNhY2hlOiB7IHBhdGhzOiBjYWNoZVBhdGhzIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvamVjdHMvbW9ub3JlcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFrRTtBQUNsRSx1REFBd0Q7QUFDeEQsOENBQStMO0FBRS9MOzs7OztHQUtHO0FBQ0gsSUFBWSx3QkFLWDtBQUxELFdBQVksd0JBQXdCO0lBQ2xDLDZFQUE2RTtJQUM3RSw2Q0FBaUIsQ0FBQTtJQUNqQiwyR0FBMkc7SUFDM0csK0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLHdCQUF3Qix3Q0FBeEIsd0JBQXdCLFFBS25DO0FBMlJEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxtQkFBVSxDQUFDLGlCQUFpQjs7SUFFL0Q7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBVSwyQkFBMkIsR0FBYTtRQUM3RCxrQkFBa0I7UUFDbEIsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQixRQUFRO0tBQ1QsQ0FBQztJQUVGLDJDQUEyQztJQUMzQixhQUFhLENBQVc7SUFFeEMscUNBQXFDO0lBQ3JCLGVBQWUsQ0FBd0I7SUFFdkQsd0VBQXdFO0lBQ3hELFdBQVcsQ0FBWTtJQUV2Qyw4Q0FBOEM7SUFDOUIsY0FBYyxDQUF3QjtJQUV0RCxtREFBbUQ7SUFDbkMsaUJBQWlCLENBQTJCO0lBRTVELHdFQUF3RTtJQUN4RCxhQUFhLENBQXVCO0lBRXBELDBEQUEwRDtJQUMxQyxRQUFRLENBQVk7SUFFcEMsb0RBQW9EO0lBQ3BDLFFBQVEsQ0FBWTtJQUVwQyxnRkFBZ0Y7SUFDaEUsb0JBQW9CLENBQVM7SUFFN0MsWUFBWSxPQUErQjtRQUN6QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsb0JBQW9CLElBQUksU0FBUyxDQUFDO1FBRTlELDRFQUE0RTtRQUM1RSwwRUFBMEU7UUFDMUUsMENBQTBDO1FBQzFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFF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T0FBTztZQUNwQixRQUFRLEVBQUU7Z0JBQ1IsNkRBQTZEO2dCQUM3RCxpREFBaUQ7Z0JBQ2pELFNBQVMsRUFBRSxHQUFHO2dCQUNkLE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO29CQUNoQyxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRTtpQkFDcEM7Z0JBQ0QsU0FBUyxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM3QyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO2FBQzdCO1NBQ0YsQ0FBQztJQUNKLENBQUM7O0FBelJILDBDQTBSQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdpdGh1YiwgamF2YXNjcmlwdCwgdHlwZXNjcmlwdCwgWWFtbEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgR2l0SHViQXNzaWduQXBwcm92ZXIgfSBmcm9tICdwcm9qZW4tcGlwZWxpbmVzJztcbmltcG9ydCB7IEdpdEh1YkFtcGxpZnlEZXBsb3ksIEdpdEh1YkFtcGxpZnlEZXBsb3lPcHRpb25zLCBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZSwgR2l0SHViUHJvZHVjdGlvblJlbGVhc2VPcHRpb25zLCBHaXRIb29rcywgR2l0SG9va3NPcHRpb25zLCBHaXRsZWFrcywgR2l0bGVha3NPcHRpb25zIH0gZnJvbSAnLi4vY29tcG9uZW50cyc7XG5cbi8qKlxuICogVGhlIGZyb250ZW5kIGZyYW1ld29yayBhbiBBbXBsaWZ5IEhvc3RpbmcgYXBwbGljYXRpb24gaXMgYnVpbHQgd2l0aC5cbiAqXG4gKiBTZWxlY3RzIHNlbnNpYmxlIGRlZmF1bHRzIGZvciB0aGUgYnVpbGQgY29tbWFuZCwgYXJ0aWZhY3QgZGlyZWN0b3J5IGFuZFxuICogY2FjaGUgcGF0aHMgaW4gdGhlIGdlbmVyYXRlZCBgYW1wbGlmeS55bWxgLlxuICovXG5leHBvcnQgZW51bSBNb25vcmVwb0FtcGxpZnlGcmFtZXdvcmsge1xuICAvKiogQSBOZXh0LmpzIGFwcCDigJQgYXJ0aWZhY3RzIGluIGA8YXBwUm9vdD4vLm5leHRgLCBidWlsdCB2aWEgYHJ1biBidWlsZGAuICovXG4gIE5FWFRKUyA9ICduZXh0anMnLFxuICAvKiogQW4gQW5ndWxhciBhcHAg4oCUIGFydGlmYWN0cyBpbiBgPGFwcFJvb3Q+L2Rpc3QvPGZpbHRlcj4vYnJvd3NlcmAsIGJ1aWx0IHZpYSBgcnVuIGJ1aWxkOiR7QlVJTERfRU5WfWAuICovXG4gIEFOR1VMQVIgPSAnYW5ndWxhcicsXG59XG5cbi8qKlxuICogT25lIEFXUyBBbXBsaWZ5IEhvc3RpbmcgYXBwbGljYXRpb24gc2VydmVkIGZyb20gYSB3b3Jrc3BhY2UgcGFja2FnZS5cbiAqXG4gKiBSZW5kZXJzIGEgc2luZ2xlIGVudHJ5IHVuZGVyIGBhcHBsaWNhdGlvbnM6YCBpbiB0aGUgZ2VuZXJhdGVkIGBhbXBsaWZ5LnltbGAuXG4gKiBBbXBsaWZ5IGRvZXMgbm90IGF1dG8tZGV0ZWN0IFBOUE0gd29ya3NwYWNlcywgc28gdGhlIGdlbmVyYXRlZCBidWlsZCBzcGVjXG4gKiBydW5zIGBjb3JlcGFjayBlbmFibGVgICsgYSByb290IGBwbnBtIGluc3RhbGxgIGFuZCBwcmUtYnVpbGRzIGFueSBzaGFyZWRcbiAqIHBhY2thZ2VzIGJlZm9yZSBidWlsZGluZyB0aGUgYXBwIGZyb20gaXRzIGBhcHBSb290YCAoc2VlIEFEUi0wMDAyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25vcmVwb0FtcGxpZnlBcHAge1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgcGF0aCB0aGF0IGlzIHRoZSBBbXBsaWZ5IGFwcCByb290LCBlLmcuIGBwYWNrYWdlcy9mcm9udGVuZGAuXG4gICAqL1xuICByZWFkb25seSBhcHBSb290OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmcm9udGVuZCBmcmFtZXdvcmssIHVzZWQgdG8gcGljayBidWlsZC9hcnRpZmFjdC9jYWNoZSBkZWZhdWx0cy5cbiAgICovXG4gIHJlYWRvbmx5IGZyYW1ld29yazogTW9ub3JlcG9BbXBsaWZ5RnJhbWV3b3JrO1xuXG4gIC8qKlxuICAgKiBUaGUgcG5wbSBwYWNrYWdlIG5hbWUgdG8gYnVpbGQsIHVzZWQgYXMgdGhlIGAtLWZpbHRlcmAgdGFyZ2V0LFxuICAgKiBlLmcuIGBkZXBsb3ltb24tZnJvbnRlbmRgIG9yIGByYWRiYWxsLWRpZ2l0YWwtcG9ydGFsYC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkRmlsdGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdvcmtzcGFjZSBwYWNrYWdlcyB0byBidWlsZCBiZWZvcmUgdGhlIGFwcCwgYXMgYC0tZmlsdGVyYCB0YXJnZXRzLlxuICAgKlxuICAgKiBUeXBpY2FsbHkgdGhlIHNoYXJlZCBBUEkgcGFja2FnZSB0aGUgYXBwIGNvbnN1bWVzIHZpYSBgd29ya3NwYWNlOipgLFxuICAgKiBlLmcuIGBbJ0B0YWltb3MvZGVwbG95bW9uLWFwaSddYC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IHByZUJ1aWxkRmlsdGVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgYnVpbGQgY29tbWFuZCBydW4gaW4gdGhlIEFtcGxpZnkgYGJ1aWxkYCBwaGFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgcG5wbSAtLWZpbHRlciA8YnVpbGRGaWx0ZXI+IHJ1biBidWlsZGAgZm9yIE5leHQuanMsIG9yXG4gICAqIGBwbnBtIC0tZmlsdGVyIDxidWlsZEZpbHRlcj4gcnVuIGJ1aWxkOiR7QlVJTERfRU5WfWAgZm9yIEFuZ3VsYXIuXG4gICAqL1xuICByZWFkb25seSBidWlsZENvbW1hbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBhcnRpZmFjdCBiYXNlIGRpcmVjdG9yeS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgPGFwcFJvb3Q+Ly5uZXh0YCBmb3IgTmV4dC5qcywgb3JcbiAgICogYDxhcHBSb290Pi9kaXN0LzxidWlsZEZpbHRlcj4vYnJvd3NlcmAgZm9yIEFuZ3VsYXIuXG4gICAqL1xuICByZWFkb25seSBhcnRpZmFjdEJhc2VEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBBbXBsaWZ5IGJ1aWxkIGNhY2hlIHBhdGhzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGBub2RlX21vZHVsZXMvKipgIHBsdXMgdGhlIGZyYW1ld29yayBidWlsZCBjYWNoZVxuICAgKiAoYDxhcHBSb290Pi8ubmV4dC9jYWNoZS8qKmAgb3IgYDxhcHBSb290Pi8uYW5ndWxhci9jYWNoZS8qKmApLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVQYXRocz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBwbnBtIGAtLWZpbHRlcmAgZXhwcmVzc2lvbiBmb3IgdGhlIHNjb3BlZCBpbnN0YWxsIGluIHRoZSBwcmVCdWlsZCBwaGFzZS5cbiAgICpcbiAgICogVGhlIHRyYWlsaW5nIGAuLi5gIHN5bnRheCBwdWxscyBpbiB0aGUgYXBwJ3MgdHJhbnNpdGl2ZSB3b3Jrc3BhY2VcbiAgICogZGVwZW5kZW5jaWVzIChlLmcuIGEgc2hhcmVkIEFQSSBwYWNrYWdlKSBidXQgZXhjbHVkZXMgdW5yZWxhdGVkIHBhY2thZ2VzLFxuICAgKiBhdm9pZGluZyBjb25jdXJyZW50IGBwcm9qZW4vbm9kZV9tb2R1bGVzYCByZW5hbWUgcmFjZXMgdW5kZXIgdGhlIGhvaXN0ZWRcbiAgICogbGlua2VyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJHtidWlsZEZpbHRlcn0uLi5gXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsRmlsdGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGdWxsIG92ZXJyaWRlIG9mIHRoZSBpbnN0YWxsIGNvbW1hbmQgaW4gdGhlIHByZUJ1aWxkIHBoYXNlLlxuICAgKlxuICAgKiBXaGVuIHNldCwgYGluc3RhbGxGaWx0ZXJgIGlzIGlnbm9yZWQgYW5kIHRoaXMgc3RyaW5nIGlzIGVtaXR0ZWQgdmVyYmF0aW0uXG4gICAqIFVzZSB0aGlzIGFzIGFuIGVzY2FwZSBoYXRjaCB3aGVuIHRoZSBkZWZhdWx0IHNjb3BlZCBpbnN0YWxsIGlzIGluc3VmZmljaWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgcG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0tbm9kZS1saW5rZXIgaG9pc3RlZCAtLWZpbHRlciBcIjxpbnN0YWxsRmlsdGVyPlwiYFxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbENvbW1hbmQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUE5QTSB3b3Jrc3BhY2UgdHVuaW5nIGZvciB0aGUgZ2VuZXJhdGVkIGBwbnBtLXdvcmtzcGFjZS55YW1sYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25vcmVwb1dvcmtzcGFjZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHdvcmtzcGFjZSBwYWNrYWdlIGdsb2JzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbJ3BhY2thZ2VzLyonXVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVmVyc2lvbiBvdmVycmlkZXMgZm9yY2VkIGFjcm9zcyB0aGUgd2hvbGUgd29ya3NwYWNlXG4gICAqICh0aGUgYG92ZXJyaWRlczpgIGZpZWxkKS4gT21pdHRlZCBmcm9tIHRoZSBmaWxlIHdoZW4gZW1wdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogRGVwZW5kZW5jaWVzIGFsbG93ZWQgdG8gcnVuIGluc3RhbGwvYnVpbGQgc2NyaXB0cy4gcG5wbSA+PSAxMCBibG9ja3MgdGhlc2VcbiAgICogYnkgZGVmYXVsdC4gVGhlIGxpc3QgcG9wdWxhdGVzIGJvdGggYGFsbG93QnVpbGRzYCBhbmRcbiAgICogYG9ubHlCdWlsdERlcGVuZGVuY2llc2Agc28gcG5wbSBkb2VzIG5vdCB0cmVhdCBgbm9kZV9tb2R1bGVzYCBhcyBzdGFsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgWydAYXdzLWFtcGxpZnkvY2xpJywgJ2VzYnVpbGQnLCAnc2hhcnAnLCAndW5ycy1yZXNvbHZlciddXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkQnVpbGRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gYWdlIGluIG1pbnV0ZXMgYSBwdWJsaXNoZWQgdmVyc2lvbiBtdXN0IGhhdmUgYmVmb3JlIGl0IG1heSBiZVxuICAgKiBpbnN0YWxsZWQgKGBtaW5pbXVtUmVsZWFzZUFnZWApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyODgwIC8vIDIgZGF5c1xuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVJlbGVhc2VBZ2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBhY2thZ2VzIGV4ZW1wdCBmcm9tIGBtaW5pbXVtUmVsZWFzZUFnZWAgc28gb3VyIG93biB0b29saW5nIGNhbiB1cGRhdGVcbiAgICogd2l0aG91dCB0aGUgY29vbGRvd24uIE1FUkdFRCBvbiB0b3Agb2YgdGhlIGJ1aWx0LWluIGRlZmF1bHRzXG4gICAqIChgcHJvamVuLXBpcGVsaW5lc2AsIGBjZGstc2VydmVybGVzc2AsIGBAdGFpbW9zL3Byb2plbmAsIGBwcm9qZW5gKSBhbmRcbiAgICogZGVkdXBlZCDigJQgc3VwcGx5aW5nIHRoaXMgZG9lcyBub3QgZHJvcCB0aGUgdG9vbGluZyBleGVtcHRpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXSAvLyBtZXJnZWQgd2l0aCBERUZBVUxUX1JFTEVBU0VfQUdFX0VYQ0xVREVcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1SZWxlYXNlQWdlRXhjbHVkZT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSBhdXRob3ItdG8tYXBwcm92ZXJzIHJvdXRpbmcgcnVsZSBmb3IgdGhlIFBSIGFwcHJvdmVyIGFzc2lnbm1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9ub3JlcG9BcHByb3Zlck1hcHBpbmcge1xuICAvKipcbiAgICogVGhlIEdpdEh1YiB1c2VybmFtZSBvcGVuaW5nIHRoZSBQUi5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIHVzZXJuYW1lcyBhc3NpZ25lZCB0byByZXZpZXcgd2hlbiBgYXV0aG9yYCBvcGVucyBhIFBSLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwcm92ZXJzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb25vcmVwb1Byb2plY3RPcHRpb25zIGV4dGVuZHMgdHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHBucG0gdmVyc2lvbiBwaW5uZWQgZm9yIHRoZSB3b3Jrc3BhY2UgYW5kIENJLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnMTAuMzMuMCdcbiAgICovXG4gIHJlYWRvbmx5IHBucG1Xb3Jrc3BhY2VWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgTm9kZS5qcyB2ZXJzaW9uIHVzZWQgaW4gdGhlIGdlbmVyYXRlZCBidWlsZCB3b3JrZmxvdy5cbiAgICpcbiAgICogQGRlZmF1bHQgJzIyJ1xuICAgKi9cbiAgcmVhZG9ubHkgbm9kZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBOUE0gd29ya3NwYWNlIHR1bmluZyBmb3IgdGhlIGdlbmVyYXRlZCBgcG5wbS13b3Jrc3BhY2UueWFtbGAuXG4gICAqL1xuICByZWFkb25seSB3b3Jrc3BhY2VPcHRpb25zPzogTW9ub3JlcG9Xb3Jrc3BhY2VPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBgY2RrLXNlcnZlcmxlc3NgIGFzIGEgd29ya3NwYWNlIGRldiBkZXBlbmRlbmN5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrU2VydmVybGVzcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXNzaWduIFBSIGFwcHJvdmVycyB2aWEgYEdpdEh1YkFzc2lnbkFwcHJvdmVyYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaWduQXBwcm92ZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBdXRob3ItdG8tYXBwcm92ZXJzIHJvdXRpbmcgZm9yIHRoZSBQUiBhcHByb3ZlciBhc3NpZ25tZW50LlxuICAgKiBPbmx5IHVzZWQgd2hlbiBgYXNzaWduQXBwcm92ZXJgIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gaG9lZ2VydG4gYW5kIGhvZWdlcm1hIHJldmlldyBlYWNoIG90aGVyXG4gICAqL1xuICByZWFkb25seSBhcHByb3Zlck1hcHBpbmc/OiBNb25vcmVwb0FwcHJvdmVyTWFwcGluZ1tdO1xuXG4gIC8qKlxuICAgKiBBcHByb3ZlcnMgYXNzaWduZWQgd2hlbiBubyBhdXRob3Itc3BlY2lmaWMgbWFwcGluZyBtYXRjaGVzLlxuICAgKiBPbmx5IHVzZWQgd2hlbiBgYXNzaWduQXBwcm92ZXJgIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFsnaG9lZ2VydG4nLCAnaG9lZ2VybWEnXVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEFwcHJvdmVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1bmlmaWVkIGJ1aWxkIHdvcmtmbG93IGFsc28gcnVucyBhIHNlcGFyYXRlIGBwbnBtIC1yIHJ1biB0ZXN0YFxuICAgKiBzdGVwLlxuICAgKlxuICAgKiBFYWNoIHByb2plbiBzdWItcHJvamVjdCdzIG93biBgYnVpbGRgIHRhc2sgYWxyZWFkeSBydW5zIGl0cyBgdGVzdGAgc3ViLXRhc2tcbiAgICogKHByZS1jb21waWxlIOKGkiBjb21waWxlIOKGkiBwb3N0LWNvbXBpbGUg4oaSIHRlc3Qg4oaSIHBhY2thZ2UpLCBzbyBgcG5wbSAtciBydW5cbiAgICogYnVpbGRgIGFscmVhZHkgcnVucyBldmVyeSBwcm9qZW4gcGFja2FnZSdzIGplc3QgKyBlc2xpbnQuIEVuYWJsaW5nIHRoaXMgYWRkc1xuICAgKiBhIHNlY29uZCBmdWxsIHJ1biDigJQgaW5jbHVkaW5nIHRoZSBleHBlbnNpdmUgQ0RLIHN5bnRocyDigJQgcm91Z2hseSBkb3VibGluZyBDSS5cbiAgICpcbiAgICogQ2F2ZWF0OiB3aXRoIHRoaXMgb2ZmLCBhIGhhbmQtbWFuYWdlZCAobm9uLXByb2plbikgcGFja2FnZSBpcyBvbmx5IHRlc3RlZCBpblxuICAgKiBDSSBpZiBpdHMgb3duIGBidWlsZGAgc2NyaXB0IHJ1bnMgaXRzIGNoZWNrcyAoZS5nLiBgdHNjICYmIGplc3RgLFxuICAgKiBgZXNsaW50IC4gJiYgdml0ZXN0IHJ1biAmJiBuZXh0IGJ1aWxkYCkuIE1ha2UgZWFjaCBoYW5kLW1hbmFnZWQgcGFja2FnZSdzXG4gICAqIGJ1aWxkIHNlbGYtY29udGFpbiBpdHMgdmVyaWZpY2F0aW9uIHNvIGBwbnBtIC1yIHJ1biBidWlsZGAgc3RheXMgdGhlIHNpbmdsZVxuICAgKiBnYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcnVuVGVzdHNJbkJ1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQVdTIEFtcGxpZnkgSG9zdGluZyBhcHBsaWNhdGlvbnMuIFdoZW4gc2V0LCBhbiBgYW1wbGlmeS55bWxgIGlzIGdlbmVyYXRlZFxuICAgKiB3aXRoIG9uZSBlbnRyeSBwZXIgYXBwLiBXaGVuIG9taXR0ZWQsIG5vIGBhbXBsaWZ5LnltbGAgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGFtcGxpZnlBcHBzPzogTW9ub3JlcG9BbXBsaWZ5QXBwW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGEgbWFudWFsIFwiUHJvZHVjdGlvbiBSZWxlYXNlXCIgd29ya2Zsb3cgdGhhdCBwcm9tb3RlcyBhIGJyYW5jaFxuICAgKiB0byB0aGUgcHJvZHVjdGlvbiBicmFuY2ggKHNlZSBgR2l0SHViUHJvZHVjdGlvblJlbGVhc2VgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2R1Y3Rpb25SZWxlYXNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdGhlIHByb2R1Y3Rpb24gcmVsZWFzZSB3b3JrZmxvdy4gT25seSB1c2VkIHdoZW5cbiAgICogYHByb2R1Y3Rpb25SZWxlYXNlYCBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb21vdGUgYG1haW5gIHRvIGEgYHByb2R1Y3Rpb25gIGJyYW5jaFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZHVjdGlvblJlbGVhc2VPcHRpb25zPzogR2l0SHViUHJvZHVjdGlvblJlbGVhc2VPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBnaXRsZWFrcyBzZWNyZXQtc2Nhbm5pbmc6IGEgYC5naXRsZWFrcy50b21sYCBjb25maWcgcGx1cyBhXG4gICAqIHB1bGwtcmVxdWVzdCB3b3JrZmxvdyB0aGF0IHNjYW5zIHRoZSBmdWxsIGdpdCBoaXN0b3J5IChzZWUgYEdpdGxlYWtzYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBnaXRsZWFrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSBnaXRsZWFrcyBjb21wb25lbnQuIE9ubHkgdXNlZCB3aGVuIGBnaXRsZWFrc2AgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBleHRlbmQgdGhlIGRlZmF1bHQgcnVsZXNldCwgbm8gZXh0cmEgYWxsb3dsaXN0c1xuICAgKi9cbiAgcmVhZG9ubHkgZ2l0bGVha3NPcHRpb25zPzogR2l0bGVha3NPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFkZCBsb2NhbCBnaXQgaG9va3MgbWFuYWdlZCBieSBMZWZ0aG9vazogYSBgbGVmdGhvb2sueW1sYCwgYVxuICAgKiByb290IGBwcmVwYXJlYCBzY3JpcHQgYW5kIGEgcGlubmVkIGBsZWZ0aG9va2AgZGV2RGVwZW5kZW5jeSAoc2VlIGBHaXRIb29rc2ApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0SG9va3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgZ2l0IGhvb2tzIGNvbXBvbmVudC4gT25seSB1c2VkIHdoZW4gYGdpdEhvb2tzYCBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFsbCBjaGVja3MgZW5hYmxlZCwgZmlyc3QtY29tbWl0IHR5cGVzIGZlYXQsIGZpeCwgY2hvcmUsIGRvY3MsIGNpLCBzcGVjXG4gICAqL1xuICByZWFkb25seSBnaXRIb29rc09wdGlvbnM/OiBHaXRIb29rc09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERyaXZlIEFtcGxpZnkgSG9zdGluZyBidWlsZHMgZnJvbSBHaXRIdWIgQWN0aW9ucyBpbnN0ZWFkIG9mIEFtcGxpZnkncyBvd25cbiAgICogYXV0by1idWlsZCwgc28gYW4gYXBwIG9ubHkgcmVidWlsZHMgd2hlbiB0aGUgcGFja2FnZXMgaXQgaXMgYnVpbHQgZnJvbVxuICAgKiBhY3R1YWxseSBjaGFuZ2VkIChzZWUgYEdpdEh1YkFtcGxpZnlEZXBsb3lgKS5cbiAgICpcbiAgICogU2V0dGluZyB0aGlzIGdlbmVyYXRlcyBvbmUgZGVwbG95IHdvcmtmbG93IHBlciBsaXN0ZWQgYXBwLiBUaGUgcHJvamVjdCdzXG4gICAqIENESyBhcHAgbXVzdCBkaXNhYmxlIGBhdXRvQnVpbGRgIG9uIHRoZSB0cmFja2VkIGJyYW5jaGVzIGFuZCBwcm92aWRlIHRoZVxuICAgKiBhcHAtaWQgcGFyYW1ldGVycyBhbmQgYnVpbGQtdHJpZ2dlciByb2xlIHRoZSB3b3JrZmxvd3MgZXhwZWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFtcGxpZnkncyBvd24gYXV0by1idWlsZCBpcyBsZWZ0IGluIHBsYWNlXG4gICAqL1xuICByZWFkb25seSBhbXBsaWZ5RGVwbG95T3B0aW9ucz86IEdpdEh1YkFtcGxpZnlEZXBsb3lPcHRpb25zO1xufVxuXG4vKipcbiAqIFByaXZhdGUgUE5QTS13b3Jrc3BhY2UgbW9ub3JlcG8gcm9vdCwgZm9sbG93aW5nIFRhaW1vcyBBRFItMDAwMi5cbiAqXG4gKiBUaGUgcm9vdCBvbmx5IG9yY2hlc3RyYXRlcyB0aGUgd29ya3NwYWNlIOKAlCBidWlsZGluZywgdGVzdGluZyBhbmQgbGludGluZyBhcmVcbiAqIGRlbGVnYXRlZCB0byB0aGUgd29ya3NwYWNlIHBhY2thZ2VzIHZpYSBgcG5wbSAtcmAuIFRoaXMgcHJvamVjdCBnZW5lcmF0ZXMgdGhlXG4gKiBgcG5wbS13b3Jrc3BhY2UueWFtbGAsIHRoZSByb290IGNvbnZlbmllbmNlIHNjcmlwdHMsIGEgdW5pZmllZCBQUiBidWlsZFxuICogd29ya2Zsb3cgYW5kIChvcHRpb25hbGx5KSBhbiBBbXBsaWZ5IEhvc3RpbmcgYnVpbGQgc3BlYy4gVGhlIHByb2plbi1tYW5hZ2VkXG4gKiBzdWItcHJvamVjdHMgKGFwaSwgYmFja2VuZCwgaW5mcmEpIGFyZSBhZGRlZCB3aXRoIHRoZSBgcGFyZW50YC9gb3V0ZGlyYFxuICogcGF0dGVybiBpbiB0aGUgY29uc3VtaW5nIGAucHJvamVucmMudHNgOyBwbGFpbiB3b3Jrc3BhY2UgcGFja2FnZXMgKGUuZy5cbiAqIE5leHQuanMgYXBwcykgYXJlIHBpY2tlZCB1cCBieSB0aGUgYHBhY2thZ2VzLypgIGdsb2IuXG4gKlxuICogQHBqaWQgdGFpbW9zLW1vbm9yZXBvXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25vcmVwb1Byb2plY3QgZXh0ZW5kcyB0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0IHtcblxuICAvKipcbiAgICogUGFja2FnZXMgZXhlbXB0IGZyb20gYG1pbmltdW1SZWxlYXNlQWdlYCBieSBkZWZhdWx0IHNvIG91ciBvd24gYnVpbGQgdG9vbGluZ1xuICAgKiBjYW4gdXBkYXRlIHdpdGhvdXQgdGhlIGNvb2xkb3duLiBBIGNvbnN1bWVyJ3NcbiAgICogYHdvcmtzcGFjZU9wdGlvbnMubWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlYCBpcyBtZXJnZWQgb24gdG9wIG9mIHRoaXMgbGlzdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9SRUxFQVNFX0FHRV9FWENMVURFOiBzdHJpbmdbXSA9IFtcbiAgICAncHJvamVuLXBpcGVsaW5lcycsXG4gICAgJ2Nkay1zZXJ2ZXJsZXNzJyxcbiAgICAnQHRhaW1vcy9wcm9qZW4nLFxuICAgICdwcm9qZW4nLFxuICBdO1xuXG4gIC8qKiBUaGUgZ2VuZXJhdGVkIGBwbnBtLXdvcmtzcGFjZS55YW1sYC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHdvcmtzcGFjZUZpbGU6IFlhbWxGaWxlO1xuXG4gIC8qKiBUaGUgdW5pZmllZCBQUiBidWlsZCB3b3JrZmxvdy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHByQnVpbGRXb3JrZmxvdzogZ2l0aHViLkdpdGh1YldvcmtmbG93O1xuXG4gIC8qKiBUaGUgZ2VuZXJhdGVkIGBhbXBsaWZ5LnltbGAsIGlmIGFueSBBbXBsaWZ5IGFwcHMgd2VyZSBjb25maWd1cmVkLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYW1wbGlmeUZpbGU/OiBZYW1sRmlsZTtcblxuICAvKiogVGhlIFBSIGFwcHJvdmVyIGFzc2lnbm1lbnQsIGlmIGVuYWJsZWQuICovXG4gIHB1YmxpYyByZWFkb25seSBhc3NpZ25BcHByb3Zlcj86IEdpdEh1YkFzc2lnbkFwcHJvdmVyO1xuXG4gIC8qKiBUaGUgcHJvZHVjdGlvbiByZWxlYXNlIHdvcmtmbG93LCBpZiBlbmFibGVkLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvZHVjdGlvblJlbGVhc2U/OiBHaXRIdWJQcm9kdWN0aW9uUmVsZWFzZTtcblxuICAvKiogVGhlIEFtcGxpZnkgZGVwbG95IHdvcmtmbG93cywgd2hlbiBgYW1wbGlmeURlcGxveU9wdGlvbnNgIGlzIHNldC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGFtcGxpZnlEZXBsb3k/OiBHaXRIdWJBbXBsaWZ5RGVwbG95O1xuXG4gIC8qKiBUaGUgZ2l0bGVha3Mgc2VjcmV0LXNjYW5uaW5nIGNvbXBvbmVudCwgaWYgZW5hYmxlZC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGdpdGxlYWtzPzogR2l0bGVha3M7XG5cbiAgLyoqIFRoZSBMZWZ0aG9vayBnaXQgaG9va3MgY29tcG9uZW50LCBpZiBlbmFibGVkLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2l0SG9va3M/OiBHaXRIb29rcztcblxuICAvKiogVGhlIGRlZmF1bHQgcmVsZWFzZSBicmFuY2ggKHByb21vdGVkIGJ5IHRoZSBwcm9kdWN0aW9uIHJlbGVhc2Ugd29ya2Zsb3cpLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdFJlbGVhc2VCcmFuY2g6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNb25vcmVwb1Byb2plY3RPcHRpb25zKSB7XG4gICAgY29uc3QgcG5wbVZlcnNpb24gPSBvcHRpb25zLnBucG1Xb3Jrc3BhY2VWZXJzaW9uID8/ICcxMC4zMy4wJztcblxuICAgIC8vIFBOUE0gd29ya3NwYWNlIHR1bmluZyDigJQgbWFwcGVkIG9udG8gcHJvamVuJ3MgbmF0aXZlIGBwbnBtLXdvcmtzcGFjZS55YW1sYFxuICAgIC8vIHN1cHBvcnQgKHByb2plbiA+PSAwLjEwMSkgdGhyb3VnaCBgYWxsb3dTY3JpcHRzYCArIGBwbnBtT3B0aW9uc2AgYmVsb3csXG4gICAgLy8gcmF0aGVyIHRoYW4gaGFuZC1yb2xsaW5nIHRoZSBZQU1MIGZpbGUuXG4gICAgY29uc3Qgd3MgPSBvcHRpb25zLndvcmtzcGFjZU9wdGlvbnMgPz8ge307XG4gICAgY29uc3QgYWxsb3dlZEJ1aWxkcyA9IHdzLmFsbG93ZWRCdWlsZHMgPz8gWydAYXdzLWFtcGxpZnkvY2xpJywgJ2VzYnVpbGQnLCAnc2hhcnAnLCAndW5ycy1yZXNvbHZlciddO1xuXG4gICAgLy8gUGFja2FnZXMgZXhlbXB0IGZyb20gYG1pbmltdW1SZWxlYXNlQWdlYCBzbyBvdXIgb3duIGJ1aWxkIHRvb2xpbmcgY2FuXG4gICAgLy8gdXBkYXRlIHdpdGhvdXQgdGhlIGNvb2xkb3duLiBgcHJvamVuYCBpcyBpbmNsdWRlZCBiZWNhdXNlIGBAdGFpbW9zL3Byb2plbmBcbiAgICAvLyBwaW5zIGEgcHJvamVuIGZsb29yLCBzbyB0aGUgdHdvIG11c3QgbW92ZSBpbiBsb2Nrc3RlcC4gQSBjb25zdW1lci1zdXBwbGllZFxuICAgIC8vIGxpc3QgTUVSR0VTIHdpdGggdGhlc2UgZGVmYXVsdHMgKGRlZHVwZWQpIHJhdGhlciB0aGFuIHJlcGxhY2luZyB0aGVtLCBzb1xuICAgIC8vIGFkZGluZyBvbmUgcGFja2FnZSBkb2VzIG5vdCBzaWxlbnRseSBkcm9wIHRoZSB0b29saW5nIGV4ZW1wdGlvbnMuXG4gICAgY29uc3QgcmVsZWFzZUFnZUV4Y2x1ZGUgPSBBcnJheS5mcm9tKG5ldyBTZXQoW1xuICAgICAgLi4uTW9ub3JlcG9Qcm9qZWN0LkRFRkFVTFRfUkVMRUFTRV9BR0VfRVhDTFVERSxcbiAgICAgIC4uLih3cy5taW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGUgPz8gW10pLFxuICAgIF0pKTtcblxuICAgIHN1cGVyKHtcbiAgICAgIGxpY2Vuc2VkOiBmYWxzZSxcbiAgICAgIHJlbGVhc2U6IGZhbHNlLFxuICAgICAgZGVwc1VwZ3JhZGU6IGZhbHNlLFxuICAgICAgLy8gVGhlIHJvb3Qgb25seSBvcmNoZXN0cmF0ZXMgdGhlIHdvcmtzcGFjZSDigJQgbm8gYXBwIGNvZGUgbGl2ZXMgaGVyZS5cbiAgICAgIGplc3Q6IGZhbHNlLFxuICAgICAgZXNsaW50OiBmYWxzZSxcbiAgICAgIHNhbXBsZUNvZGU6IGZhbHNlLFxuICAgICAgLy8gQ0kgaXMgdGhlIHNpbmdsZSBoYW5kLXJvbGxlZCB3b3JrZmxvdyBiZWxvdyB0aGF0IGRlbGVnYXRlcyB0byBwYWNrYWdlcy5cbiAgICAgIGJ1aWxkV29ya2Zsb3c6IGZhbHNlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIC8vIEZvcmNlZCDigJQgZGVmaW5pbmcgd2hhdCBhIFRhaW1vcyBtb25vcmVwbyByb290IGlzLlxuICAgICAgcGFja2FnZU1hbmFnZXI6IGphdmFzY3JpcHQuTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE0sXG4gICAgICBwbnBtVmVyc2lvbixcbiAgICAgIC8vIE5hdGl2ZSBwbnBtLXdvcmtzcGFjZS55YW1sIChwcm9qZW4gPj0gMC4xMDEpLiBgYWxsb3dTY3JpcHRzYCByZW5kZXJzIHRoZVxuICAgICAgLy8gYnVpbGQgYWxsb3dsaXN0IGludG8gYG9ubHlCdWlsdERlcGVuZGVuY2llc2A7IHRoZSByZW1haW5pbmcgdHVuaW5nIG1hcHNcbiAgICAgIC8vIG9udG8gYHdvcmtzcGFjZVlhbWxPcHRpb25zYC4gQW55IGNvbnN1bWVyLXN1cHBsaWVkIGBwbnBtT3B0aW9uc2AgYXJlXG4gICAgICAvLyBtZXJnZWQgaW4gYW5kIHdpbiBvdmVyIG91ciBkZWZhdWx0cy5cbiAgICAgIGFsbG93U2NyaXB0czogYWxsb3dlZEJ1aWxkcyxcbiAgICAgIHBucG1PcHRpb25zOiB7XG4gICAgICAgIC4uLm9wdGlvbnMucG5wbU9wdGlvbnMsXG4gICAgICAgIHdvcmtzcGFjZVlhbWxPcHRpb25zOiB7XG4gICAgICAgICAgLy8gcG5wbSAxMSByZXBsYWNlZCBgb25seUJ1aWx0RGVwZW5kZW5jaWVzYCAod2hpY2ggYGFsbG93U2NyaXB0c2BcbiAgICAgICAgICAvLyByZW5kZXJzKSB3aXRoIGBhbGxvd0J1aWxkc2AsIGFuZCByZWFkcyBvbmx5IHRoZSBsYXR0ZXIg4oCUIGEgcG5wbSAxMVxuICAgICAgICAgIC8vIGluc3RhbGwgb3RoZXJ3aXNlIGFib3J0cyB3aXRoIEVSUl9QTlBNX0lHTk9SRURfQlVJTERTLiBwbnBtIDEwIHJlYWRzXG4gICAgICAgICAgLy8gb25seSBgb25seUJ1aWx0RGVwZW5kZW5jaWVzYC4gRW1pdCBib3RoIHNvIHRoZSBzYW1lIHdvcmtzcGFjZSBmaWxlXG4gICAgICAgICAgLy8gd29ya3Mgb24gZWl0aGVyLCB3aGF0ZXZlciBgcG5wbVZlcnNpb25gIGEgY29uc3VtZXIgcGlucy5cbiAgICAgICAgICBhbGxvd0J1aWxkczogT2JqZWN0LmZyb21FbnRyaWVzKGFsbG93ZWRCdWlsZHMubWFwKChwa2cpID0+IFtwa2csIHRydWVdKSksXG4gICAgICAgICAgcGFja2FnZXM6IHdzLnBhY2thZ2VzID8/IFsncGFja2FnZXMvKiddLFxuICAgICAgICAgIG1pbmltdW1SZWxlYXNlQWdlOiB3cy5taW5pbXVtUmVsZWFzZUFnZSA/PyAyODgwLCAvLyAyIGRheXMgaW4gbWludXRlc1xuICAgICAgICAgIG1pbmltdW1SZWxlYXNlQWdlRXhjbHVkZTogcmVsZWFzZUFnZUV4Y2x1ZGUsXG4gICAgICAgICAgLi4uKHdzLm92ZXJyaWRlcyAmJiBPYmplY3Qua2V5cyh3cy5vdmVycmlkZXMpLmxlbmd0aCA+IDAgPyB7IG92ZXJyaWRlczogd3Mub3ZlcnJpZGVzIH0gOiB7fSksXG4gICAgICAgICAgLi4ub3B0aW9ucy5wbnBtT3B0aW9ucz8ud29ya3NwYWNlWWFtbE9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcHJvamVucmNUczogdHJ1ZSxcbiAgICAgIGdpdGh1YjogdHJ1ZSxcbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgICAgcHJvamVuQ3JlZGVudGlhbHM6IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tQXBwKCksXG4gICAgICAgIG1lcmdpZnk6IGZhbHNlLFxuICAgICAgICBtZXJnZVF1ZXVlOiB0cnVlLFxuICAgICAgICAuLi5vcHRpb25zLmdpdGh1Yk9wdGlvbnMsXG4gICAgICAgIG1lcmdlUXVldWVPcHRpb25zOiB7XG4gICAgICAgICAgYXV0b1F1ZXVlOiB0cnVlLFxuICAgICAgICAgIC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucz8ubWVyZ2VRdWV1ZU9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIHB1bGxSZXF1ZXN0TGludE9wdGlvbnM6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLmdpdGh1Yk9wdGlvbnM/LnB1bGxSZXF1ZXN0TGludE9wdGlvbnMsXG4gICAgICAgICAgc2VtYW50aWNUaXRsZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucz8ucHVsbFJlcXVlc3RMaW50T3B0aW9ucz8uc2VtYW50aWNUaXRsZU9wdGlvbnMsXG4gICAgICAgICAgICAvLyBGaXhlZCBhbGxvd2VkIFBSIHRpdGxlIHR5cGVzIGZvciBhIFRhaW1vcyBtb25vcmVwby5cbiAgICAgICAgICAgIHR5cGVzOiBbJ2ZlYXQnLCAnZml4JywgJ2Nob3JlJywgJ2RvY3MnLCAnc3BlYycsICdjaSddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZGV2RGVwczogW1xuICAgICAgICAnQHRhaW1vcy9wcm9qZW4nLFxuICAgICAgICAncHJvamVuLXBpcGVsaW5lcycsXG4gICAgICAgIC4uLihvcHRpb25zLmNka1NlcnZlcmxlc3MgPz8gZmFsc2UgPyBbJ2Nkay1zZXJ2ZXJsZXNzJ10gOiBbXSksXG4gICAgICAgIC4uLm9wdGlvbnMuZGV2RGVwcyA/PyBbXSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBQcml2YXRlIHdvcmtzcGFjZSByb290IOKAlCBuZXZlciBwdWJsaXNoZWQsIHJlc29sdmVzIHBhY2thZ2VzIGxvY2FsbHkuXG4gICAgdGhpcy5wYWNrYWdlLmFkZEZpZWxkKCdwcml2YXRlJywgdHJ1ZSk7XG5cbiAgICB0aGlzLmRlZmF1bHRSZWxlYXNlQnJhbmNoID0gb3B0aW9ucy5kZWZhdWx0UmVsZWFzZUJyYW5jaCA/PyAnbWFpbic7XG5cbiAgICAvLyBQUiBhcHByb3ZlciByb3V0aW5nLlxuICAgIGlmIChvcHRpb25zLmFzc2lnbkFwcHJvdmVyID8/IHRydWUpIHtcbiAgICAgIHRoaXMuYXNzaWduQXBwcm92ZXIgPSBuZXcgR2l0SHViQXNzaWduQXBwcm92ZXIodGhpcywge1xuICAgICAgICBhcHByb3Zlck1hcHBpbmc6IG9wdGlvbnMuYXBwcm92ZXJNYXBwaW5nID8/IFtcbiAgICAgICAgICB7IGF1dGhvcjogJ2hvZWdlcnRuJywgYXBwcm92ZXJzOiBbJ2hvZWdlcm1hJ10gfSxcbiAgICAgICAgICB7IGF1dGhvcjogJ2hvZWdlcm1hJywgYXBwcm92ZXJzOiBbJ2hvZWdlcnRuJ10gfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGVmYXVsdEFwcHJvdmVyczogb3B0aW9ucy5kZWZhdWx0QXBwcm92ZXJzID8/IFsnaG9lZ2VydG4nLCAnaG9lZ2VybWEnXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE1hbnVhbCBwcm9kdWN0aW9uIHJlbGVhc2Ug4oCUIHByb21vdGVzIGEgYnJhbmNoIHRvIHRoZSBwcm9kdWN0aW9uIGJyYW5jaC5cbiAgICBpZiAob3B0aW9ucy5hbXBsaWZ5RGVwbG95T3B0aW9ucykge1xuICAgICAgdGhpcy5hbXBsaWZ5RGVwbG95ID0gbmV3IEdpdEh1YkFtcGxpZnlEZXBsb3kodGhpcywgb3B0aW9ucy5hbXBsaWZ5RGVwbG95T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHJvZHVjdGlvblJlbGVhc2UgPz8gZmFsc2UpIHtcbiAgICAgIHRoaXMucHJvZHVjdGlvblJlbGVhc2UgPSBuZXcgR2l0SHViUHJvZHVjdGlvblJlbGVhc2UodGhpcywgb3B0aW9ucy5wcm9kdWN0aW9uUmVsZWFzZU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIGdpdGxlYWtzIHNlY3JldC1zY2FubmluZzogLmdpdGxlYWtzLnRvbWwgKyBhIFBSIHdvcmtmbG93IHNjYW5uaW5nIGhpc3RvcnkuXG4gICAgaWYgKG9wdGlvbnMuZ2l0bGVha3MgPz8gZmFsc2UpIHtcbiAgICAgIHRoaXMuZ2l0bGVha3MgPSBuZXcgR2l0bGVha3ModGhpcywgb3B0aW9ucy5naXRsZWFrc09wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIExvY2FsIGdpdCBob29rcyAoQURSLTAwMTMpOiBsZWZ0aG9vay55bWwgKyBwcmVwYXJlIHNjcmlwdC5cbiAgICBpZiAob3B0aW9ucy5naXRIb29rcyA/PyBmYWxzZSkge1xuICAgICAgdGhpcy5naXRIb29rcyA9IG5ldyBHaXRIb29rcyh0aGlzLCB7XG4gICAgICAgIGRlZmF1bHRCcmFuY2g6IG9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2gsXG4gICAgICAgIC4uLm9wdGlvbnMuZ2l0SG9va3NPcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHByb2plbnJjIGlzIHNwbGl0IGludG8gbW9kdWxlcyB1bmRlciAucHJvamVuLyDigJQgbWFrZSB0aGVtIHBhcnQgb2YgdGhlXG4gICAgLy8gZGV2IHRzY29uZmlnIHNvIHRoZSBJREUgYW5kIHRzLW5vZGUgdHlwZS1jaGVjayB0aGVtLlxuICAgIHRoaXMudHNjb25maWdEZXY/LmFkZEluY2x1ZGUoJy5wcm9qZW4vKi50cycpO1xuXG4gICAgLy8gcHJvamVuJ3MgTm9kZVBhY2thZ2UgZ2VuZXJhdGVzIGBwbnBtLXdvcmtzcGFjZS55YW1sYCBuYXRpdmVseSAocHJvamVuID49XG4gICAgLy8gMC4xMDEpLCBjb25maWd1cmVkIHZpYSB0aGUgYHBucG1PcHRpb25zYC9gYWxsb3dTY3JpcHRzYCBwYXNzZWQgdG8gc3VwZXIoKS5cbiAgICAvLyBFeHBvc2UgdGhlIGdlbmVyYXRlZCBmaWxlIHNvIGNvbnN1bWVycyBjYW4gZnVydGhlciBjdXN0b21pemUgaXQuXG4gICAgdGhpcy53b3Jrc3BhY2VGaWxlID0gdGhpcy50cnlGaW5kT2JqZWN0RmlsZSgncG5wbS13b3Jrc3BhY2UueWFtbCcpIGFzIFlhbWxGaWxlO1xuXG4gICAgLy8gQ29udmVuaWVuY2Ugcm9vdCBzY3JpcHRzIGRlbGVnYXRlIHRvIHRoZSB3b3Jrc3BhY2UuXG4gICAgY29uc3Qgcm9vdFBrZyA9IHRoaXMudHJ5RmluZE9iamVjdEZpbGUoJ3BhY2thZ2UuanNvbicpITtcbiAgICByb290UGtnLmFkZE92ZXJyaWRlKCdzY3JpcHRzLmJ1aWxkJywgJ3BucG0gLXIgcnVuIGJ1aWxkJyk7XG4gICAgcm9vdFBrZy5hZGRPdmVycmlkZSgnc2NyaXB0cy50ZXN0JywgJ3BucG0gLXIgcnVuIHRlc3QnKTtcbiAgICByb290UGtnLmFkZE92ZXJyaWRlKCdzY3JpcHRzLmxpbnQnLCAncG5wbSAtciBydW4gZXNsaW50Jyk7XG5cbiAgICAvLyBVbmlmaWVkIFBSIGJ1aWxkIHdvcmtmbG93IOKAlCBidWlsZHMgKGFuZCBvcHRpb25hbGx5IHRlc3RzKSBldmVyeSB3b3Jrc3BhY2VcbiAgICAvLyBwYWNrYWdlIGluIGRlcGVuZGVuY3kgb3JkZXIuXG4gICAgY29uc3Qgbm9kZVZlcnNpb24gPSBvcHRpb25zLm5vZGVWZXJzaW9uID8/ICcyMic7XG4gICAgY29uc3QgYnVpbGRTdGVwczogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10gPSBbXG4gICAgICB7IG5hbWU6ICdDaGVja291dCcsIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHY0JyB9LFxuICAgICAgeyBuYW1lOiAnU2V0dXAgcG5wbScsIHVzZXM6ICdwbnBtL2FjdGlvbi1zZXR1cEB2NCcsIHdpdGg6IHsgdmVyc2lvbjogcG5wbVZlcnNpb24gfSB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnU2V0dXAgTm9kZS5qcycsXG4gICAgICAgIHVzZXM6ICdhY3Rpb25zL3NldHVwLW5vZGVAdjQnLFxuICAgICAgICB3aXRoOiB7ICdub2RlLXZlcnNpb24nOiBub2RlVmVyc2lvbiwgJ2NhY2hlJzogJ3BucG0nIH0sXG4gICAgICB9LFxuICAgICAgeyBuYW1lOiAnSW5zdGFsbCcsIHJ1bjogJ3BucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZScgfSxcbiAgICAgIHsgbmFtZTogJ0J1aWxkJywgcnVuOiAncG5wbSAtciBydW4gYnVpbGQnIH0sXG4gICAgXTtcbiAgICBpZiAob3B0aW9ucy5ydW5UZXN0c0luQnVpbGQgPz8gZmFsc2UpIHtcbiAgICAgIGJ1aWxkU3RlcHMucHVzaCh7IG5hbWU6ICdUZXN0JywgcnVuOiAncG5wbSAtciBydW4gdGVzdCcgfSk7XG4gICAgfVxuICAgIC8vIFBhdGggZmlsdGVyOiBvbmx5IHRyaWdnZXIgYnVpbGRzIHdoZW4gd29ya3NwYWNlIHBhY2thZ2UgZmlsZXMgb3JcbiAgICAvLyBidWlsZC1yZWxldmFudCByb290IGNvbmZpZ3VyYXRpb24gY2hhbmdlcy4gQ2hhbmdlcyB0byBzcGVjcyBvciBkb2NzXG4gICAgLy8gYWxvbmUgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgbmV3IGJ1aWxkLlxuICAgIGNvbnN0IHdvcmtzcGFjZVBhY2thZ2VzID0gd3MucGFja2FnZXMgPz8gWydwYWNrYWdlcy8qJ107XG4gICAgY29uc3QgYnVpbGRQYXRoczogc3RyaW5nW10gPSBbXG4gICAgICAvLyBXb3Jrc3BhY2UgcGFja2FnZSBzb3VyY2UgZmlsZXMuXG4gICAgICAuLi53b3Jrc3BhY2VQYWNrYWdlcy5tYXAoKHBrZykgPT4gYCR7cGtnfS8qKmApLFxuICAgICAgLy8gRGVwZW5kZW5jeSBsb2NrICYgd29ya3NwYWNlIGNvbmZpZ3VyYXRpb24uXG4gICAgICAncG5wbS1sb2NrLnlhbWwnLFxuICAgICAgJ3BucG0td29ya3NwYWNlLnlhbWwnLFxuICAgICAgLy8gUm9vdCBwYWNrYWdlLmpzb24gKHNjcmlwdHMsIGRldkRlcHMsIGVuZ2luZXMpLlxuICAgICAgJ3BhY2thZ2UuanNvbicsXG4gICAgICAvLyBQcm9qZW4gY29uZmlndXJhdGlvbiDigJQgcmVnZW5lcmF0ZXMgcHJvamVjdCBmaWxlcy5cbiAgICAgICcucHJvamVucmMudHMnLFxuICAgICAgJy5wcm9qZW5yYy5qcycsXG4gICAgICAnLnByb2plbi8qKicsXG4gICAgICAvLyBTaGFyZWQgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uLlxuICAgICAgJ3RzY29uZmlnLmpzb24nLFxuICAgICAgJ3RzY29uZmlnLiouanNvbicsXG4gICAgICAvLyBUaGUgYnVpbGQgd29ya2Zsb3cgaXRzZWxmLlxuICAgICAgJy5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnltbCcsXG4gICAgICAvLyBTaGFyZWQgbGludCBjb25maWd1cmF0aW9uLlxuICAgICAgJy5lc2xpbnRyYy4qJyxcbiAgICAgICdlc2xpbnQuY29uZmlnLionLFxuICAgIF07XG5cbiAgICB0aGlzLnByQnVpbGRXb3JrZmxvdyA9IG5ldyBnaXRodWIuR2l0aHViV29ya2Zsb3codGhpcy5naXRodWIhLCAnYnVpbGQnKTtcbiAgICB0aGlzLnByQnVpbGRXb3JrZmxvdy5vbih7XG4gICAgICBwdWxsUmVxdWVzdDogeyBwYXRoczogYnVpbGRQYXRocyB9LFxuICAgICAgcHVzaDogeyBicmFuY2hlczogWydtYWluJ10sIHBhdGhzOiBidWlsZFBhdGhzIH0sXG4gICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7fSxcbiAgICB9KTtcbiAgICB0aGlzLnByQnVpbGRXb3JrZmxvdy5hZGRKb2IoJ2J1aWxkJywge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7IGNvbnRlbnRzOiBnaXRodWIud29ya2Zsb3dzLkpvYlBlcm1pc3Npb24uUkVBRCB9LFxuICAgICAgc3RlcHM6IGJ1aWxkU3RlcHMsXG4gICAgfSk7XG5cbiAgICAvLyBBV1MgQW1wbGlmeSBIb3N0aW5nIGJ1aWxkIHNwZWMuIFBOUE0gd29ya3NwYWNlcyBhcmUgbm90IGF1dG8tZGV0ZWN0ZWQgYnlcbiAgICAvLyBBbXBsaWZ5LCBzbyBlYWNoIGFwcCBpbnN0YWxscyBhdCB0aGUgcmVwbyByb290LCBwcmUtYnVpbGRzIGl0cyBzaGFyZWRcbiAgICAvLyBwYWNrYWdlcywgdGhlbiBidWlsZHMgZnJvbSBpdHMgYXBwUm9vdCAoc2VlIEFEUi0wMDAyKS5cbiAgICBpZiAob3B0aW9ucy5hbXBsaWZ5QXBwcyAmJiBvcHRpb25zLmFtcGxpZnlBcHBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYW1wbGlmeUZpbGUgPSBuZXcgWWFtbEZpbGUodGhpcywgJ2FtcGxpZnkueW1sJywge1xuICAgICAgICBvYmo6IHtcbiAgICAgICAgICB2ZXJzaW9uOiAxLFxuICAgICAgICAgIGFwcGxpY2F0aW9uczogb3B0aW9ucy5hbXBsaWZ5QXBwcy5tYXAoKGFwcCkgPT4gdGhpcy5yZW5kZXJBbXBsaWZ5QXBwKGFwcCkpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJBbXBsaWZ5QXBwKGFwcDogTW9ub3JlcG9BbXBsaWZ5QXBwKSB7XG4gICAgY29uc3QgYW5ndWxhciA9IGFwcC5mcmFtZXdvcmsgPT09IE1vbm9yZXBvQW1wbGlmeUZyYW1ld29yay5BTkdVTEFSO1xuICAgIC8vIFNjb3BlIHRoZSBpbnN0YWxsIHRvIHRoZSBhcHAncyBkZXBlbmRlbmN5IGNsb3N1cmUgdG8gYXZvaWQgY29uY3VycmVudFxuICAgIC8vIHByb2plbi9ub2RlX21vZHVsZXMgcmVuYW1lIHJhY2VzIHVuZGVyIHRoZSBob2lzdGVkIGxpbmtlciAoc2VlICMzNzIpLlxuICAgIGNvbnN0IGZpbHRlciA9IGFwcC5pbnN0YWxsRmlsdGVyID8/IGAke2FwcC5idWlsZEZpbHRlcn0uLi5gO1xuICAgIGNvbnN0IGluc3RhbGxDb21tYW5kID0gYXBwLmluc3RhbGxDb21tYW5kXG4gICAgICA/PyBgcG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlIC0tbm9kZS1saW5rZXIgaG9pc3RlZCAtLWZpbHRlciBcIiR7ZmlsdGVyfVwiYDtcbiAgICBjb25zdCBwcmVCdWlsZCA9IFtcbiAgICAgICdjb3JlcGFjayBlbmFibGUnLFxuICAgICAgaW5zdGFsbENvbW1hbmQsXG4gICAgICAuLi4oYXBwLnByZUJ1aWxkRmlsdGVycyA/PyBbXSkubWFwKChmKSA9PiBgcG5wbSAtLWZpbHRlciAke2Z9IHJ1biBidWlsZGApLFxuICAgIF07XG4gICAgLy8gQlVJTERfRU5WIChkZXZ8cHJvZCkgaXMgcHJvdmlkZWQgYXMgYW4gQW1wbGlmeSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAgICBjb25zdCBidWlsZENvbW1hbmQgPSBhcHAuYnVpbGRDb21tYW5kID8/IChhbmd1bGFyXG4gICAgICA/IGBwbnBtIC0tZmlsdGVyICR7YXBwLmJ1aWxkRmlsdGVyfSBydW4gYnVpbGQ6XFwke0JVSUxEX0VOVn1gXG4gICAgICA6IGBwbnBtIC0tZmlsdGVyICR7YXBwLmJ1aWxkRmlsdGVyfSBydW4gYnVpbGRgKTtcbiAgICBjb25zdCBiYXNlRGlyZWN0b3J5ID0gYXBwLmFydGlmYWN0QmFzZURpcmVjdG9yeSA/PyAoYW5ndWxhclxuICAgICAgPyBgJHthcHAuYXBwUm9vdH0vZGlzdC8ke2FwcC5idWlsZEZpbHRlcn0vYnJvd3NlcmBcbiAgICAgIDogYCR7YXBwLmFwcFJvb3R9Ly5uZXh0YCk7XG4gICAgY29uc3QgY2FjaGVQYXRocyA9IGFwcC5jYWNoZVBhdGhzID8/IFtcbiAgICAgICdub2RlX21vZHVsZXMvKiovKicsXG4gICAgICBhbmd1bGFyID8gYCR7YXBwLmFwcFJvb3R9Ly5hbmd1bGFyL2NhY2hlLyoqLypgIDogYCR7YXBwLmFwcFJvb3R9Ly5uZXh0L2NhY2hlLyoqLypgLFxuICAgIF07XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFJvb3Q6IGFwcC5hcHBSb290LFxuICAgICAgZnJvbnRlbmQ6IHtcbiAgICAgICAgLy8gSW5zdGFsbC9idWlsZCBmcm9tIHRoZSBtb25vcmVwbyByb290IHNvIHRoZSB3b3Jrc3BhY2Ugcm9vdFxuICAgICAgICAvLyBwYWNrYWdlLmpzb24gYW5kIHBucG0tbG9jay55YW1sIGFyZSBhdmFpbGFibGUuXG4gICAgICAgIGJ1aWxkUGF0aDogJy8nLFxuICAgICAgICBwaGFzZXM6IHtcbiAgICAgICAgICBwcmVCdWlsZDogeyBjb21tYW5kczogcHJlQnVpbGQgfSxcbiAgICAgICAgICBidWlsZDogeyBjb21tYW5kczogW2J1aWxkQ29tbWFuZF0gfSxcbiAgICAgICAgfSxcbiAgICAgICAgYXJ0aWZhY3RzOiB7IGJhc2VEaXJlY3RvcnksIGZpbGVzOiBbJyoqLyonXSB9LFxuICAgICAgICBjYWNoZTogeyBwYXRoczogY2FjaGVQYXRocyB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -10,7 +10,7 @@ const cdk_app_1 = require("./cdk-app");
10
10
  * @pjid taimos-cdk-app-private
11
11
  */
12
12
  class PrivateTaimosCdkApp extends cdk_app_1.TaimosCdkApp {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.PrivateTaimosCdkApp", version: "0.1.96" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.PrivateTaimosCdkApp", version: "0.1.98" };
14
14
  constructor(options) {
15
15
  super({
16
16
  licensed: false,
@@ -10,7 +10,7 @@ const ts_lib_1 = require("./ts-lib");
10
10
  * @pjid taimos-ts-lib-private
11
11
  */
12
12
  class TaimosPrivateTypescriptLibrary extends ts_lib_1.TaimosTypescriptLibrary {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosPrivateTypescriptLibrary", version: "0.1.96" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosPrivateTypescriptLibrary", version: "0.1.98" };
14
14
  constructor(options) {
15
15
  super({
16
16
  licensed: false,
@@ -11,7 +11,7 @@ const cdk_app_1 = require("./cdk-app");
11
11
  * @pjid taimos-cdk-app-production
12
12
  */
13
13
  class ProductionTaimosCdkApp extends cdk_app_1.TaimosCdkApp {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.ProductionTaimosCdkApp", version: "0.1.96" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.ProductionTaimosCdkApp", version: "0.1.98" };
15
15
  /**
16
16
  * The SonarCloud properties file.
17
17
  */
@@ -9,7 +9,7 @@ const projen_1 = require("projen");
9
9
  * @pjid taimos-ts-lib
10
10
  */
11
11
  class TaimosTypescriptLibrary extends projen_1.typescript.TypeScriptProject {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosTypescriptLibrary", version: "0.1.96" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@taimos/projen.TaimosTypescriptLibrary", version: "0.1.98" };
13
13
  constructor(options) {
14
14
  super({
15
15
  authorName: 'Taimos GmbH',
package/package.json CHANGED
@@ -41,26 +41,26 @@
41
41
  "@typescript-eslint/eslint-plugin": "^8",
42
42
  "@typescript-eslint/parser": "^8",
43
43
  "commit-and-tag-version": "^13",
44
- "constructs": "10.5.1",
44
+ "constructs": "10.8.1",
45
45
  "eslint": "^9",
46
46
  "eslint-import-resolver-typescript": "^4.4.5",
47
47
  "eslint-plugin-import": "^2.32.0",
48
48
  "jest": "^29",
49
49
  "jest-junit": "^17",
50
- "jsii": "5.9.21",
50
+ "jsii": "5.9.57",
51
51
  "jsii-diff": "^1.142.0",
52
- "jsii-docgen": "^10.5.0",
52
+ "jsii-docgen": "^10.12.9",
53
53
  "jsii-pacmak": "^1.142.0",
54
- "jsii-rosetta": "5.9.21",
55
- "projen": "0.104.26",
54
+ "jsii-rosetta": "5.9.57",
55
+ "projen": "0.104.27",
56
56
  "projen-pipelines": "0.3.27",
57
57
  "ts-jest": "^29",
58
58
  "typescript": "^5.9.3",
59
59
  "yaml": "^2.9.1"
60
60
  },
61
61
  "peerDependencies": {
62
- "constructs": "^10.5.1",
63
- "projen": ">=0.104.26 <1.0.0",
62
+ "constructs": "^10.8.1",
63
+ "projen": ">=0.104.27 <1.0.0",
64
64
  "projen-pipelines": ">=0.3.27"
65
65
  },
66
66
  "devEngines": {
@@ -75,7 +75,7 @@
75
75
  "publishConfig": {
76
76
  "access": "public"
77
77
  },
78
- "version": "0.1.96",
78
+ "version": "0.1.98",
79
79
  "jest": {
80
80
  "coverageProvider": "v8",
81
81
  "testMatch": [