projen 0.45.4 → 0.46.3

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.
Files changed (172) hide show
  1. package/.jsii +1388 -570
  2. package/API.md +414 -61
  3. package/README.md +1 -0
  4. package/dist/changelog.md +7 -0
  5. package/dist/releasetag.txt +1 -0
  6. package/dist/version.txt +1 -0
  7. package/docs/build.md +55 -0
  8. package/docs/mutable-builds.md +0 -27
  9. package/docs/publisher.md +35 -1
  10. package/lib/awscdk/auto-discover.js +1 -1
  11. package/lib/awscdk/awscdk-app-ts.js +1 -1
  12. package/lib/awscdk/awscdk-construct.js +2 -2
  13. package/lib/awscdk/awscdk-deps.js +1 -1
  14. package/lib/awscdk/cdk-config.js +1 -1
  15. package/lib/awscdk/cdk-tasks.js +1 -1
  16. package/lib/awscdk/integration-test.js +1 -1
  17. package/lib/awscdk/java-app.js +1 -1
  18. package/lib/awscdk/lambda-function.js +2 -2
  19. package/lib/build/build-workflow.d.ts +125 -0
  20. package/lib/build/build-workflow.js +217 -0
  21. package/lib/build/index.d.ts +1 -0
  22. package/lib/build/index.js +14 -0
  23. package/lib/cdk/construct-lib.js +1 -1
  24. package/lib/cdk/consts.d.ts +14 -0
  25. package/lib/cdk/consts.js +37 -0
  26. package/lib/cdk/jsii-docgen.js +1 -1
  27. package/lib/cdk/jsii-project.d.ts +13 -0
  28. package/lib/cdk/jsii-project.js +107 -44
  29. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  30. package/lib/cdk8s/cdk8s-construct.js +1 -1
  31. package/lib/cdktf/cdktf-construct.js +1 -1
  32. package/lib/component.js +1 -1
  33. package/lib/dependencies.js +1 -1
  34. package/lib/dev-env.js +1 -1
  35. package/lib/docker-compose.js +2 -2
  36. package/lib/file.js +1 -1
  37. package/lib/gitattributes.js +1 -1
  38. package/lib/github/auto-approve.js +1 -1
  39. package/lib/github/auto-merge.js +1 -1
  40. package/lib/github/constants.js +2 -1
  41. package/lib/github/dependabot.js +1 -1
  42. package/lib/github/github-project.js +1 -1
  43. package/lib/github/github.d.ts +6 -0
  44. package/lib/github/github.js +11 -2
  45. package/lib/github/mergify.js +1 -1
  46. package/lib/github/pr-template.js +1 -1
  47. package/lib/github/pull-request-lint.js +1 -1
  48. package/lib/github/stale.js +1 -1
  49. package/lib/github/task-workflow.d.ts +4 -0
  50. package/lib/github/task-workflow.js +6 -5
  51. package/lib/github/workflows-model.d.ts +62 -0
  52. package/lib/github/workflows-model.js +1 -1
  53. package/lib/github/workflows.d.ts +8 -0
  54. package/lib/github/workflows.js +39 -3
  55. package/lib/gitpod.js +1 -1
  56. package/lib/ignore-file.js +1 -1
  57. package/lib/index.d.ts +1 -0
  58. package/lib/index.js +2 -1
  59. package/lib/ini.js +1 -1
  60. package/lib/java/java-project.js +1 -1
  61. package/lib/java/junit.js +1 -1
  62. package/lib/java/maven-compile.js +1 -1
  63. package/lib/java/maven-packaging.js +1 -1
  64. package/lib/java/maven-sample.js +1 -1
  65. package/lib/java/pom.js +1 -1
  66. package/lib/java/projenrc.js +1 -1
  67. package/lib/javascript/bundler.js +1 -1
  68. package/lib/javascript/eslint.js +1 -1
  69. package/lib/javascript/jest.js +1 -1
  70. package/lib/javascript/node-package.d.ts +12 -0
  71. package/lib/javascript/node-package.js +6 -2
  72. package/lib/javascript/node-project.d.ts +46 -7
  73. package/lib/javascript/node-project.js +64 -129
  74. package/lib/javascript/npm-config.js +1 -1
  75. package/lib/javascript/projenrc.js +1 -1
  76. package/lib/javascript/typescript-config.js +1 -1
  77. package/lib/javascript/upgrade-dependencies.d.ts +15 -0
  78. package/lib/javascript/upgrade-dependencies.js +18 -6
  79. package/lib/json.js +1 -1
  80. package/lib/license.js +1 -1
  81. package/lib/logger.js +1 -1
  82. package/lib/makefile.js +1 -1
  83. package/lib/object-file.js +1 -1
  84. package/lib/project-build.js +1 -1
  85. package/lib/project.js +1 -1
  86. package/lib/projects.js +1 -1
  87. package/lib/projenrc-json.js +1 -1
  88. package/lib/python/pip.js +1 -1
  89. package/lib/python/poetry.js +2 -2
  90. package/lib/python/projenrc.js +1 -1
  91. package/lib/python/pytest.js +1 -1
  92. package/lib/python/python-project.js +1 -1
  93. package/lib/python/python-sample.js +1 -1
  94. package/lib/python/requirements-file.js +1 -1
  95. package/lib/python/setuppy.js +1 -1
  96. package/lib/python/setuptools.js +1 -1
  97. package/lib/python/venv.js +1 -1
  98. package/lib/readme.js +1 -1
  99. package/lib/release/publisher.d.ts +39 -7
  100. package/lib/release/publisher.js +51 -43
  101. package/lib/release/release-trigger.js +1 -1
  102. package/lib/release/release.d.ts +20 -8
  103. package/lib/release/release.js +3 -2
  104. package/lib/sample-file.js +2 -2
  105. package/lib/semver.js +1 -1
  106. package/lib/source-code.js +1 -1
  107. package/lib/task-runtime.js +1 -1
  108. package/lib/task.js +1 -1
  109. package/lib/tasks.js +1 -1
  110. package/lib/testing.js +1 -1
  111. package/lib/textfile.js +1 -1
  112. package/lib/toml.js +1 -1
  113. package/lib/typescript/projenrc.js +1 -1
  114. package/lib/typescript/typescript-typedoc.js +1 -1
  115. package/lib/typescript/typescript.d.ts +0 -7
  116. package/lib/typescript/typescript.js +23 -28
  117. package/lib/version.js +1 -1
  118. package/lib/vscode/devcontainer.js +1 -1
  119. package/lib/vscode/launch-config.js +1 -1
  120. package/lib/vscode/vscode.js +1 -1
  121. package/lib/web/next.js +3 -3
  122. package/lib/web/postcss.js +1 -1
  123. package/lib/web/react.js +6 -6
  124. package/lib/web/tailwind.js +1 -1
  125. package/lib/xmlfile.js +1 -1
  126. package/lib/yaml.js +1 -1
  127. package/node_modules/xmlbuilder2/node_modules/@types/node/README.md +1 -1
  128. package/node_modules/xmlbuilder2/node_modules/@types/node/assert.d.ts +1 -1
  129. package/node_modules/xmlbuilder2/node_modules/@types/node/async_hooks.d.ts +7 -3
  130. package/node_modules/xmlbuilder2/node_modules/@types/node/buffer.d.ts +9 -9
  131. package/node_modules/xmlbuilder2/node_modules/@types/node/child_process.d.ts +1 -1
  132. package/node_modules/xmlbuilder2/node_modules/@types/node/cluster.d.ts +1 -1
  133. package/node_modules/xmlbuilder2/node_modules/@types/node/console.d.ts +1 -1
  134. package/node_modules/xmlbuilder2/node_modules/@types/node/crypto.d.ts +2 -2
  135. package/node_modules/xmlbuilder2/node_modules/@types/node/dgram.d.ts +2 -2
  136. package/node_modules/xmlbuilder2/node_modules/@types/node/diagnostics_channel.d.ts +1 -1
  137. package/node_modules/xmlbuilder2/node_modules/@types/node/dns/promises.d.ts +12 -10
  138. package/node_modules/xmlbuilder2/node_modules/@types/node/dns.d.ts +17 -12
  139. package/node_modules/xmlbuilder2/node_modules/@types/node/domain.d.ts +1 -1
  140. package/node_modules/xmlbuilder2/node_modules/@types/node/events.d.ts +2 -2
  141. package/node_modules/xmlbuilder2/node_modules/@types/node/fs/promises.d.ts +5 -5
  142. package/node_modules/xmlbuilder2/node_modules/@types/node/fs.d.ts +62 -11
  143. package/node_modules/xmlbuilder2/node_modules/@types/node/http.d.ts +20 -3
  144. package/node_modules/xmlbuilder2/node_modules/@types/node/http2.d.ts +3 -3
  145. package/node_modules/xmlbuilder2/node_modules/@types/node/https.d.ts +1 -1
  146. package/node_modules/xmlbuilder2/node_modules/@types/node/index.d.ts +1 -1
  147. package/node_modules/xmlbuilder2/node_modules/@types/node/inspector.d.ts +4 -5
  148. package/node_modules/xmlbuilder2/node_modules/@types/node/net.d.ts +11 -11
  149. package/node_modules/xmlbuilder2/node_modules/@types/node/os.d.ts +1 -1
  150. package/node_modules/xmlbuilder2/node_modules/@types/node/package.json +2 -2
  151. package/node_modules/xmlbuilder2/node_modules/@types/node/path.d.ts +9 -1
  152. package/node_modules/xmlbuilder2/node_modules/@types/node/perf_hooks.d.ts +6 -4
  153. package/node_modules/xmlbuilder2/node_modules/@types/node/punycode.d.ts +1 -1
  154. package/node_modules/xmlbuilder2/node_modules/@types/node/querystring.d.ts +1 -1
  155. package/node_modules/xmlbuilder2/node_modules/@types/node/readline.d.ts +121 -14
  156. package/node_modules/xmlbuilder2/node_modules/@types/node/repl.d.ts +1 -1
  157. package/node_modules/xmlbuilder2/node_modules/@types/node/stream/web.d.ts +3 -65
  158. package/node_modules/xmlbuilder2/node_modules/@types/node/stream.d.ts +2 -2
  159. package/node_modules/xmlbuilder2/node_modules/@types/node/string_decoder.d.ts +1 -1
  160. package/node_modules/xmlbuilder2/node_modules/@types/node/timers.d.ts +1 -1
  161. package/node_modules/xmlbuilder2/node_modules/@types/node/tls.d.ts +3 -2
  162. package/node_modules/xmlbuilder2/node_modules/@types/node/trace_events.d.ts +1 -1
  163. package/node_modules/xmlbuilder2/node_modules/@types/node/tty.d.ts +1 -1
  164. package/node_modules/xmlbuilder2/node_modules/@types/node/url.d.ts +58 -18
  165. package/node_modules/xmlbuilder2/node_modules/@types/node/util.d.ts +3 -3
  166. package/node_modules/xmlbuilder2/node_modules/@types/node/v8.d.ts +3 -3
  167. package/node_modules/xmlbuilder2/node_modules/@types/node/vm.d.ts +1 -1
  168. package/node_modules/xmlbuilder2/node_modules/@types/node/wasi.d.ts +1 -1
  169. package/node_modules/xmlbuilder2/node_modules/@types/node/worker_threads.d.ts +4 -4
  170. package/node_modules/xmlbuilder2/node_modules/@types/node/zlib.d.ts +1 -1
  171. package/package.json +11 -7
  172. package/docs/project.md +0 -30
@@ -3,6 +3,7 @@ var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.isAwsCodeArtifactRegistry = exports.Publisher = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const consts_1 = require("../cdk/consts");
6
7
  const component_1 = require("../component");
7
8
  const constants_1 = require("../github/constants");
8
9
  const workflows_model_1 = require("../github/workflows-model");
@@ -24,7 +25,7 @@ class Publisher extends component_1.Component {
24
25
  * @experimental
25
26
  */
26
27
  constructor(project, options) {
27
- var _b, _c, _d, _e, _f;
28
+ var _b, _c, _d, _e, _f, _g;
28
29
  super(project);
29
30
  // functions that create jobs associated with a specific branch
30
31
  this._jobFactories = [];
@@ -32,10 +33,11 @@ class Publisher extends component_1.Component {
32
33
  this.artifactName = options.artifactName;
33
34
  this.jsiiReleaseVersion = (_b = options.jsiiReleaseVersion) !== null && _b !== void 0 ? _b : JSII_RELEASE_VERSION;
34
35
  this.condition = options.condition;
35
- this.failureIssue = (_c = options.failureIssue) !== null && _c !== void 0 ? _c : false;
36
- this.failureIssueLabel = (_d = options.failureIssueLabel) !== null && _d !== void 0 ? _d : 'failed-release';
37
- this.runsOn = (_e = options.workflowRunsOn) !== null && _e !== void 0 ? _e : ['ubuntu-latest'];
38
- this.publishTasks = (_f = options.publishTasks) !== null && _f !== void 0 ? _f : false;
36
+ this.dryRun = (_c = options.dryRun) !== null && _c !== void 0 ? _c : false;
37
+ this.failureIssue = (_d = options.failureIssue) !== null && _d !== void 0 ? _d : false;
38
+ this.failureIssueLabel = (_e = options.failureIssueLabel) !== null && _e !== void 0 ? _e : 'failed-release';
39
+ this.runsOn = (_f = options.workflowRunsOn) !== null && _f !== void 0 ? _f : ['ubuntu-latest'];
40
+ this.publishTasks = (_g = options.publishTasks) !== null && _g !== void 0 ? _g : false;
39
41
  }
40
42
  /**
41
43
  * Called by `Release` to add the publishing jobs to a release workflow
@@ -119,10 +121,12 @@ class Publisher extends component_1.Component {
119
121
  'fi',
120
122
  ].join(' ');
121
123
  this.addPublishJob(() => {
124
+ var _b;
122
125
  return {
123
126
  name: 'github',
124
127
  registryName: 'GitHub Releases',
125
- setupSteps: [],
128
+ prePublishSteps: (_b = options.prePublishSteps) !== null && _b !== void 0 ? _b : [],
129
+ publishTools: options.publishTools,
126
130
  permissions: {
127
131
  contents: workflows_model_1.JobPermission.WRITE,
128
132
  },
@@ -150,17 +154,18 @@ class Publisher extends component_1.Component {
150
154
  this.project.logger.warn('The `distTag` option is deprecated. Use the npmDistTag option instead.');
151
155
  }
152
156
  this.addPublishJob((_branch, branchOptions) => {
153
- var _b, _c, _d, _e, _f, _g, _h;
157
+ var _b, _c, _d, _e, _f, _g, _h, _j;
154
158
  if (branchOptions.npmDistTag && options.distTag) {
155
159
  throw new Error('cannot set branch-level npmDistTag and npmDistTag in publishToNpm()');
156
160
  }
157
161
  return {
158
162
  name: 'npm',
159
- setupSteps: [],
163
+ publishTools: consts_1.JSII_TOOLCHAIN.js,
164
+ prePublishSteps: (_b = options.prePublishSteps) !== null && _b !== void 0 ? _b : [],
160
165
  run: this.jsiiReleaseCommand('jsii-release-npm'),
161
166
  registryName: 'npm',
162
167
  env: {
163
- NPM_DIST_TAG: (_c = (_b = branchOptions.npmDistTag) !== null && _b !== void 0 ? _b : options.distTag) !== null && _c !== void 0 ? _c : 'latest',
168
+ NPM_DIST_TAG: (_d = (_c = branchOptions.npmDistTag) !== null && _c !== void 0 ? _c : options.distTag) !== null && _d !== void 0 ? _d : 'latest',
164
169
  NPM_REGISTRY: options.registry,
165
170
  },
166
171
  permissions: {
@@ -170,9 +175,9 @@ class Publisher extends component_1.Component {
170
175
  workflowEnv: {
171
176
  NPM_TOKEN: npmToken ? secret(npmToken) : undefined,
172
177
  // if we are publishing to AWS CodeArtifact, pass AWS access keys that will be used to generate NPM_TOKEN using AWS CLI.
173
- AWS_ACCESS_KEY_ID: isAwsCodeArtifact ? secret((_e = (_d = options.codeArtifactOptions) === null || _d === void 0 ? void 0 : _d.accessKeyIdSecret) !== null && _e !== void 0 ? _e : 'AWS_ACCESS_KEY_ID') : undefined,
174
- AWS_SECRET_ACCESS_KEY: isAwsCodeArtifact ? secret((_g = (_f = options.codeArtifactOptions) === null || _f === void 0 ? void 0 : _f.secretAccessKeySecret) !== null && _g !== void 0 ? _g : 'AWS_SECRET_ACCESS_KEY') : undefined,
175
- AWS_ROLE_TO_ASSUME: isAwsCodeArtifact ? (_h = options.codeArtifactOptions) === null || _h === void 0 ? void 0 : _h.roleToAssume : undefined,
178
+ AWS_ACCESS_KEY_ID: isAwsCodeArtifact ? secret((_f = (_e = options.codeArtifactOptions) === null || _e === void 0 ? void 0 : _e.accessKeyIdSecret) !== null && _f !== void 0 ? _f : 'AWS_ACCESS_KEY_ID') : undefined,
179
+ AWS_SECRET_ACCESS_KEY: isAwsCodeArtifact ? secret((_h = (_g = options.codeArtifactOptions) === null || _g === void 0 ? void 0 : _g.secretAccessKeySecret) !== null && _h !== void 0 ? _h : 'AWS_SECRET_ACCESS_KEY') : undefined,
180
+ AWS_ROLE_TO_ASSUME: isAwsCodeArtifact ? (_j = options.codeArtifactOptions) === null || _j === void 0 ? void 0 : _j.roleToAssume : undefined,
176
181
  },
177
182
  };
178
183
  });
@@ -185,16 +190,15 @@ class Publisher extends component_1.Component {
185
190
  */
186
191
  publishToNuget(options = {}) {
187
192
  this.addPublishJob((_branch, _branchOptions) => {
188
- var _b;
193
+ var _b, _c;
189
194
  return ({
190
195
  name: 'nuget',
191
- setupSteps: [
192
- { uses: 'actions/setup-dotnet@v1', with: { 'dotnet-version': '3.x' } },
193
- ],
196
+ publishTools: consts_1.JSII_TOOLCHAIN.dotnet,
197
+ prePublishSteps: (_b = options.prePublishSteps) !== null && _b !== void 0 ? _b : [],
194
198
  run: this.jsiiReleaseCommand('jsii-release-nuget'),
195
199
  registryName: 'NuGet Gallery',
196
200
  workflowEnv: {
197
- NUGET_API_KEY: secret((_b = options.nugetApiKeySecret) !== null && _b !== void 0 ? _b : 'NUGET_API_KEY'),
201
+ NUGET_API_KEY: secret((_c = options.nugetApiKeySecret) !== null && _c !== void 0 ? _c : 'NUGET_API_KEY'),
198
202
  },
199
203
  });
200
204
  });
@@ -214,13 +218,12 @@ class Publisher extends component_1.Component {
214
218
  throw new Error('publishing to GitHub Packages requires the "mavenServerId" to be "github"');
215
219
  }
216
220
  this.addPublishJob((_branch, _branchOptions) => {
217
- var _b, _c, _d, _e, _f;
221
+ var _b, _c, _d, _e, _f, _g;
218
222
  return ({
219
223
  name: 'maven',
220
224
  registryName: 'Maven Central',
221
- setupSteps: [
222
- { uses: 'actions/setup-java@v2', with: { 'distribution': 'temurin', 'java-version': 11 } },
223
- ],
225
+ publishTools: consts_1.JSII_TOOLCHAIN.java,
226
+ prePublishSteps: (_b = options.prePublishSteps) !== null && _b !== void 0 ? _b : [],
224
227
  run: this.jsiiReleaseCommand('jsii-release-maven'),
225
228
  env: {
226
229
  MAVEN_ENDPOINT: options.mavenEndpoint,
@@ -228,11 +231,11 @@ class Publisher extends component_1.Component {
228
231
  MAVEN_REPOSITORY_URL: options.mavenRepositoryUrl,
229
232
  },
230
233
  workflowEnv: {
231
- MAVEN_GPG_PRIVATE_KEY: isGitHubPackages ? undefined : secret((_b = options.mavenGpgPrivateKeySecret) !== null && _b !== void 0 ? _b : 'MAVEN_GPG_PRIVATE_KEY'),
232
- MAVEN_GPG_PRIVATE_KEY_PASSPHRASE: isGitHubPackages ? undefined : secret((_c = options.mavenGpgPrivateKeyPassphrase) !== null && _c !== void 0 ? _c : 'MAVEN_GPG_PRIVATE_KEY_PASSPHRASE'),
233
- MAVEN_PASSWORD: secret((_d = options.mavenPassword) !== null && _d !== void 0 ? _d : (isGitHubPackages ? 'GITHUB_TOKEN' : 'MAVEN_PASSWORD')),
234
- MAVEN_USERNAME: isGitHubActor ? '${{ github.actor }}' : secret((_e = options.mavenUsername) !== null && _e !== void 0 ? _e : 'MAVEN_USERNAME'),
235
- MAVEN_STAGING_PROFILE_ID: isGitHubPackages ? undefined : secret((_f = options.mavenStagingProfileId) !== null && _f !== void 0 ? _f : 'MAVEN_STAGING_PROFILE_ID'),
234
+ MAVEN_GPG_PRIVATE_KEY: isGitHubPackages ? undefined : secret((_c = options.mavenGpgPrivateKeySecret) !== null && _c !== void 0 ? _c : 'MAVEN_GPG_PRIVATE_KEY'),
235
+ MAVEN_GPG_PRIVATE_KEY_PASSPHRASE: isGitHubPackages ? undefined : secret((_d = options.mavenGpgPrivateKeyPassphrase) !== null && _d !== void 0 ? _d : 'MAVEN_GPG_PRIVATE_KEY_PASSPHRASE'),
236
+ MAVEN_PASSWORD: secret((_e = options.mavenPassword) !== null && _e !== void 0 ? _e : (isGitHubPackages ? 'GITHUB_TOKEN' : 'MAVEN_PASSWORD')),
237
+ MAVEN_USERNAME: isGitHubActor ? '${{ github.actor }}' : secret((_f = options.mavenUsername) !== null && _f !== void 0 ? _f : 'MAVEN_USERNAME'),
238
+ MAVEN_STAGING_PROFILE_ID: isGitHubPackages ? undefined : secret((_g = options.mavenStagingProfileId) !== null && _g !== void 0 ? _g : 'MAVEN_STAGING_PROFILE_ID'),
236
239
  },
237
240
  permissions: {
238
241
  contents: workflows_model_1.JobPermission.READ,
@@ -249,20 +252,19 @@ class Publisher extends component_1.Component {
249
252
  */
250
253
  publishToPyPi(options = {}) {
251
254
  this.addPublishJob((_branch, _branchOptions) => {
252
- var _b, _c;
255
+ var _b, _c, _d;
253
256
  return ({
254
257
  name: 'pypi',
255
258
  registryName: 'PyPI',
256
- setupSteps: [
257
- { uses: 'actions/setup-python@v2', with: { 'python-version': 3 } },
258
- ],
259
+ publishTools: consts_1.JSII_TOOLCHAIN.python,
260
+ prePublishSteps: (_b = options.prePublishSteps) !== null && _b !== void 0 ? _b : [],
259
261
  run: this.jsiiReleaseCommand('jsii-release-pypi'),
260
262
  env: {
261
263
  TWINE_REPOSITORY_URL: options.twineRegistryUrl,
262
264
  },
263
265
  workflowEnv: {
264
- TWINE_USERNAME: secret((_b = options.twineUsernameSecret) !== null && _b !== void 0 ? _b : 'TWINE_USERNAME'),
265
- TWINE_PASSWORD: secret((_c = options.twinePasswordSecret) !== null && _c !== void 0 ? _c : 'TWINE_PASSWORD'),
266
+ TWINE_USERNAME: secret((_c = options.twineUsernameSecret) !== null && _c !== void 0 ? _c : 'TWINE_USERNAME'),
267
+ TWINE_PASSWORD: secret((_d = options.twinePasswordSecret) !== null && _d !== void 0 ? _d : 'TWINE_PASSWORD'),
266
268
  },
267
269
  });
268
270
  });
@@ -275,21 +277,22 @@ class Publisher extends component_1.Component {
275
277
  */
276
278
  publishToGo(options = {}) {
277
279
  this.addPublishJob((_branch, _branchOptions) => {
278
- var _b, _c, _d;
280
+ var _b, _c, _d, _e;
279
281
  return ({
280
282
  name: 'golang',
281
- setupSteps: [],
283
+ publishTools: consts_1.JSII_TOOLCHAIN.go,
284
+ prePublishSteps: (_b = options.prePublishSteps) !== null && _b !== void 0 ? _b : [],
282
285
  run: this.jsiiReleaseCommand('jsii-release-golang'),
283
286
  registryName: 'GitHub Go Module Repository',
284
287
  env: {
285
288
  GITHUB_REPO: options.githubRepo,
286
289
  GIT_BRANCH: options.gitBranch,
287
- GIT_USER_NAME: (_b = options.gitUserName) !== null && _b !== void 0 ? _b : constants_1.DEFAULT_GITHUB_ACTIONS_USER.name,
288
- GIT_USER_EMAIL: (_c = options.gitUserEmail) !== null && _c !== void 0 ? _c : constants_1.DEFAULT_GITHUB_ACTIONS_USER.email,
290
+ GIT_USER_NAME: (_c = options.gitUserName) !== null && _c !== void 0 ? _c : constants_1.DEFAULT_GITHUB_ACTIONS_USER.name,
291
+ GIT_USER_EMAIL: (_d = options.gitUserEmail) !== null && _d !== void 0 ? _d : constants_1.DEFAULT_GITHUB_ACTIONS_USER.email,
289
292
  GIT_COMMIT_MESSAGE: options.gitCommitMessage,
290
293
  },
291
294
  workflowEnv: {
292
- GITHUB_TOKEN: secret((_d = options.githubTokenSecret) !== null && _d !== void 0 ? _d : 'GO_GITHUB_TOKEN'),
295
+ GITHUB_TOKEN: secret((_e = options.githubTokenSecret) !== null && _e !== void 0 ? _e : 'GO_GITHUB_TOKEN'),
293
296
  },
294
297
  });
295
298
  });
@@ -302,6 +305,8 @@ class Publisher extends component_1.Component {
302
305
  if (jobname in this._jobFactories) {
303
306
  throw new Error(`Duplicate job with name "${jobname}"`);
304
307
  }
308
+ const commandToRun = this.dryRun ? `echo "DRY RUN: ${opts.run}"` : opts.run;
309
+ ;
305
310
  const requiredEnv = new Array();
306
311
  // jobEnv is the env we pass to the github job (task environment + secrets/expressions).
307
312
  const jobEnv = { ...opts.env };
@@ -322,11 +327,9 @@ class Publisher extends component_1.Component {
322
327
  // first verify that we are on the correct branch
323
328
  task.exec(`test "$(git branch --show-current)" = "${branch}"`);
324
329
  // run commands
325
- task.exec(opts.run);
330
+ task.exec(commandToRun);
326
331
  }
327
332
  const steps = [
328
- { uses: 'actions/setup-node@v2', with: { 'node-version': 14 } },
329
- ...opts.setupSteps,
330
333
  {
331
334
  name: 'Download build artifacts',
332
335
  uses: 'actions/download-artifact@v2',
@@ -335,10 +338,11 @@ class Publisher extends component_1.Component {
335
338
  path: ARTIFACTS_DOWNLOAD_DIR,
336
339
  },
337
340
  },
341
+ ...opts.prePublishSteps,
338
342
  {
339
343
  name: 'Release',
340
344
  // it would have been nice if we could just run "projen publish:xxx" here but that is not possible because this job does not checkout sources
341
- run: opts.run,
345
+ run: commandToRun,
342
346
  env: jobEnv,
343
347
  },
344
348
  ];
@@ -369,6 +373,10 @@ class Publisher extends component_1.Component {
369
373
  }
370
374
  return {
371
375
  [jobname]: {
376
+ tools: {
377
+ node: { version: '14.x' },
378
+ ...opts.publishTools,
379
+ },
372
380
  name: `Publish to ${opts.registryName}`,
373
381
  permissions: perms,
374
382
  if: this.condition,
@@ -385,7 +393,7 @@ class Publisher extends component_1.Component {
385
393
  }
386
394
  exports.Publisher = Publisher;
387
395
  _a = JSII_RTTI_SYMBOL_1;
388
- Publisher[_a] = { fqn: "projen.release.Publisher", version: "0.45.4" };
396
+ Publisher[_a] = { fqn: "projen.release.Publisher", version: "0.46.3" };
389
397
  function secret(secretName) {
390
398
  return `\${{ secrets.${secretName} }}`;
391
399
  }
@@ -398,4 +406,4 @@ function isAwsCodeArtifactRegistry(registryUrl) {
398
406
  return registryUrl && AWS_CODEARTIFACT_REGISTRY_REGEX.test(registryUrl);
399
407
  }
400
408
  exports.isAwsCodeArtifactRegistry = isAwsCodeArtifactRegistry;
401
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlbGVhc2UvcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNENBQXlDO0FBQ3pDLG1EQUFrRTtBQUNsRSwrREFBd0Y7QUFDeEYsNkRBQTZEO0FBSTdELE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDO0FBQ3RDLE1BQU0sd0JBQXdCLEdBQUcsb0JBQW9CLENBQUM7QUFDdEQsTUFBTSxnQ0FBZ0MsR0FBRyw4QkFBOEIsQ0FBQztBQUN4RSxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQztBQUN0QyxNQUFNLCtCQUErQixHQUFHLCtCQUErQixDQUFDOzs7Ozs7OztBQThCeEUsTUFBYSxTQUFVLFNBQVEscUJBQVM7Ozs7SUFjdEMsWUFBWSxPQUFnQixFQUFFLE9BQXlCOztRQUNyRCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFKakIsK0RBQStEO1FBQzlDLGtCQUFhLEdBQXdCLEVBQUUsQ0FBQztRQUt2RCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsU0FBRyxPQUFPLENBQUMsa0JBQWtCLG1DQUFJLG9CQUFvQixDQUFDO1FBQzdFLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUVuQyxJQUFJLENBQUMsWUFBWSxTQUFHLE9BQU8sQ0FBQyxZQUFZLG1DQUFJLEtBQUssQ0FBQztRQUNsRCxJQUFJLENBQUMsaUJBQWlCLFNBQUcsT0FBTyxDQUFDLGlCQUFpQixtQ0FBSSxnQkFBZ0IsQ0FBQztRQUN2RSxJQUFJLENBQUMsTUFBTSxTQUFHLE9BQU8sQ0FBQyxjQUFjLG1DQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFlBQVksU0FBRyxP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Z0JBQWdCLFVBQVUsS0FBSyxDQUFDO0FBQ3pDLENBQUM7QUE0SkQ7Ozs7R0FJRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLFdBQStCO0lBQ3ZFLE9BQU8sV0FBVyxJQUFJLCtCQUErQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRkQsOERBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQnO1xuaW1wb3J0IHsgREVGQVVMVF9HSVRIVUJfQUNUSU9OU19VU0VSIH0gZnJvbSAnLi4vZ2l0aHViL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBKb2IsIEpvYlBlcm1pc3Npb24sIEpvYlBlcm1pc3Npb25zLCBKb2JTdGVwIH0gZnJvbSAnLi4vZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5pbXBvcnQgeyBkZWZhdWx0TnBtVG9rZW4gfSBmcm9tICcuLi9qYXZhc2NyaXB0L25vZGUtcGFja2FnZSc7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vcHJvamVjdCc7XG5pbXBvcnQgeyBCcmFuY2hPcHRpb25zIH0gZnJvbSAnLi9yZWxlYXNlJztcblxuY29uc3QgSlNJSV9SRUxFQVNFX1ZFUlNJT04gPSAnbGF0ZXN0JztcbmNvbnN0IEdJVEhVQl9QQUNLQUdFU19SRUdJU1RSWSA9ICducG0ucGtnLmdpdGh1Yi5jb20nO1xuY29uc3QgR0lUSFVCX1BBQ0tBR0VTX01BVkVOX1JFUE9TSVRPUlkgPSAnaHR0cHM6Ly9tYXZlbi5wa2cuZ2l0aHViLmNvbSc7XG5jb25zdCBBUlRJRkFDVFNfRE9XTkxPQURfRElSID0gJ2Rpc3QnO1xuY29uc3QgQVdTX0NPREVBUlRJRkFDVF9SRUdJU1RSWV9SRUdFWCA9IC8uY29kZWFydGlmYWN0LiouYW1hem9uYXdzLmNvbS87XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIFB1Ymxpc2hlck9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBidWlsZEpvYklkOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY29uZGl0aW9uPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhcnRpZmFjdE5hbWU6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGpzaWlSZWxlYXNlVmVyc2lvbj86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGZhaWx1cmVJc3N1ZT86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBmYWlsdXJlSXNzdWVMYWJlbD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB3b3JrZmxvd1J1bnNPbj86IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHVibGlzaFRhc2tzPzogYm9vbGVhbjtcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBQdWJsaXNoZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRKb2JJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgYXJ0aWZhY3ROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBqc2lpUmVsZWFzZVZlcnNpb246IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNvbmRpdGlvbj86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGZhaWx1cmVJc3N1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBmYWlsdXJlSXNzdWVMYWJlbDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJ1bnNPbjogc3RyaW5nW107XG4gIHByaXZhdGUgcmVhZG9ubHkgcHVibGlzaFRhc2tzOiBib29sZWFuO1xuXG4gIC8vIGZ1bmN0aW9ucyB0aGF0IGNyZWF0ZSBqb2JzIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGJyYW5jaFxuICBwcml2YXRlIHJlYWRvbmx5IF9qb2JGYWN0b3JpZXM6IFB1Ymxpc2hKb2JGYWN0b3J5W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBQdWJsaXNoZXJPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLmJ1aWxkSm9iSWQgPSBvcHRpb25zLmJ1aWxkSm9iSWQ7XG4gICAgdGhpcy5hcnRpZmFjdE5hbWUgPSBvcHRpb25zLmFydGlmYWN0TmFtZTtcbiAgICB0aGlzLmpzaWlSZWxlYXNlVmVyc2lvbiA9IG9wdGlvbnMuanNpaVJlbGVhc2VWZXJzaW9uID8/IEpTSUlfUkVMRUFTRV9WRVJTSU9OO1xuICAgIHRoaXMuY29uZGl0aW9uID0gb3B0aW9ucy5jb25kaXRpb247XG5cbiAgICB0aGlzLmZhaWx1cmVJc3N1ZSA9IG9wdGlvbnMuZmFpbHVyZUlzc3VlID8/IGZhbHNlO1xuICAgIHRoaXMuZmFpbHVyZUlzc3VlTGFiZWwgPSBvcHRpb25zLmZhaWx1cmVJc3N1ZUxhYmVsID8/ICdmYWlsZWQtcmVsZWFzZSc7XG4gICAgdGhpcy5ydW5zT24gPSBvcHRpb25zLndvcmtmbG93UnVuc09uID8/IFsndWJ1bnR1LWxhdGVzdCddO1xuICAgIHRoaXMucHVibGlzaFRhc2tzID0gb3B0aW9ucy5wdWJsaXNoVGFza3MgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IGBSZWxlYXNlYCB0byBhZGQgdGhlIHB1Ymxpc2hpbmcgam9icyB0byBhIHJlbGVhc2Ugd29ya2Zsb3dcbiAgICogYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgYnJhbmNoLlxuICAgKiBAcGFyYW0gYnJhbmNoIFRoZSBicmFuY2ggbmFtZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBCcmFuY2ggb3B0aW9uc1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfcmVuZGVySm9ic0ZvckJyYW5jaChicmFuY2g6IHN0cmluZywgb3B0aW9uczogUGFydGlhbDxCcmFuY2hPcHRpb25zPik6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuICAgIGxldCBqb2JzOiBSZWNvcmQ8c3RyaW5nLCBKb2I+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGZhY3Rvcnkgb2YgdGhpcy5fam9iRmFjdG9yaWVzKSB7XG4gICAgICBqb2JzID0ge1xuICAgICAgICAuLi5qb2JzLFxuICAgICAgICAuLi5mYWN0b3J5KGJyYW5jaCwgb3B0aW9ucyksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBqb2JzO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcHVibGlzaFRvR2l0KG9wdGlvbnM6IEdpdFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgY29uc3QgcmVsZWFzZVRhZ0ZpbGUgPSBvcHRpb25zLnJlbGVhc2VUYWdGaWxlO1xuICAgIGNvbnN0IHZlcnNpb25GaWxlID0gb3B0aW9ucy52ZXJzaW9uRmlsZTtcbiAgICBjb25zdCBjaGFuZ2Vsb2cgPSBvcHRpb25zLmNoYW5nZWxvZ0ZpbGU7XG4gICAgY29uc3QgcHJvamVjdENoYW5nZWxvZ0ZpbGUgPSBvcHRpb25zLnByb2plY3RDaGFuZ2Vsb2dGaWxlO1xuICAgIGNvbnN0IGdpdEJyYW5jaCA9IG9wdGlvbnMuZ2l0QnJhbmNoID8/ICdtYWluJztcblxuICAgIGNvbnN0IHRhc2tOYW1lID0gKGdpdEJyYW5jaCA9PT0gJ21haW4nIHx8IGdpdEJyYW5jaCA9PT0gJ21hc3RlcicpID8gJ3B1Ymxpc2g6Z2l0JyA6IGBwdWJsaXNoOmdpdDoke2dpdEJyYW5jaH1gIDtcblxuICAgIGNvbnN0IHB1Ymxpc2hUYXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2sodGFza05hbWUsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJlcGVuZHMgdGhlIHJlbGVhc2UgY2hhbmdlbG9nIG9udG8gdGhlIHByb2plY3QgY2hhbmdlbG9nLCBjcmVhdGVzIGEgcmVsZWFzZSBjb21taXQsIGFuZCB0YWdzIHRoZSByZWxlYXNlJyxcbiAgICAgIGVudjoge1xuICAgICAgICBDSEFOR0VMT0c6IGNoYW5nZWxvZyxcbiAgICAgICAgUkVMRUFTRV9UQUdfRklMRTogcmVsZWFzZVRhZ0ZpbGUsXG4gICAgICAgIFBST0pFQ1RfQ0hBTkdFTE9HX0ZJTEU6IHByb2plY3RDaGFuZ2Vsb2dGaWxlID8/ICcnLFxuICAgICAgICBWRVJTSU9OX0ZJTEU6IHZlcnNpb25GaWxlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpZiAocHJvamVjdENoYW5nZWxvZ0ZpbGUpIHtcbiAgICAgIHB1Ymxpc2hUYXNrLmJ1aWx0aW4oJ3JlbGVhc2UvdXBkYXRlLWNoYW5nZWxvZycpO1xuICAgIH1cbiAgICBwdWJsaXNoVGFzay5idWlsdGluKCdyZWxlYXNlL3RhZy12ZXJzaW9uJyk7XG5cbiAgICBpZiAob3B0aW9ucy5naXRQdXNoQ29tbWFuZCAhPT0gJycpIHtcbiAgICAgIGNvbnN0IGdpdFB1c2hDb21tYW5kID0gb3B0aW9ucy5naXRQdXNoQ29tbWFuZCB8fCBgZ2l0IHB1c2ggLS1mb2xsb3ctdGFncyBvcmlnaW4gJHtnaXRCcmFuY2h9YDtcbiAgICAgIHB1Ymxpc2hUYXNrLmV4ZWMoZ2l0UHVzaENvbW1hbmQpO1xuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoVGFzaztcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBwdWJsaXNoVG9HaXRIdWJSZWxlYXNlcyhvcHRpb25zOiBHaXRIdWJSZWxlYXNlc1B1Ymxpc2hPcHRpb25zKSB7XG4gICAgY29uc3QgY2hhbmdlbG9nRmlsZSA9IG9wdGlvbnMuY2hhbmdlbG9nRmlsZTtcbiAgICBjb25zdCByZWxlYXNlVGFnRmlsZSA9IG9wdGlvbnMucmVsZWFzZVRhZ0ZpbGU7XG5cbiAgICAvLyBjcmVhdGUgYSBnaXRodWIgcmVsZWFzZVxuICAgIGNvbnN0IHJlbGVhc2VUYWcgPSBgJChjYXQgJHtyZWxlYXNlVGFnRmlsZX0pYDtcblxuICAgIGNvbnN0IGdoUmVsZWFzZSA9IFtcbiAgICAgIGBnaCByZWxlYXNlIGNyZWF0ZSAke3JlbGVhc2VUYWd9YCxcbiAgICAgICctUiAkR0lUSFVCX1JFUE9TSVRPUlknLFxuICAgICAgYC1GICR7Y2hhbmdlbG9nRmlsZX1gLFxuICAgICAgYC10ICR7cmVsZWFzZVRhZ31gLFxuICAgICAgJy0tdGFyZ2V0ICRHSVRIVUJfUkVGJyxcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIC8vIHJlbGVhc2Ugc2NyaXB0IHRoYXQgZG9lcyBub3QgZXJyb3Igd2hlbiByZS1yZWxlYXNpbmcgYSBnaXZlbiB2ZXJzaW9uXG4gICAgY29uc3QgaWRlbXBvdGVudFJlbGVhc2UgPSBbXG4gICAgICAnZXJyb3V0PSQobWt0ZW1wKTsnLFxuICAgICAgYCR7Z2hSZWxlYXNlfSAyPiAkZXJyb3V0ICYmIHRydWU7YCxcbiAgICAgICdleGl0Y29kZT0kPzsnLFxuICAgICAgJ2lmIFsgJGV4aXRjb2RlIC1uZSAwIF0gJiYgISBncmVwIC1xIFwiUmVsZWFzZS50YWdfbmFtZSBhbHJlYWR5IGV4aXN0c1wiICRlcnJvdXQ7IHRoZW4nLFxuICAgICAgJ2NhdCAkZXJyb3V0OycsXG4gICAgICAnZXhpdCAkZXhpdGNvZGU7JyxcbiAgICAgICdmaScsXG4gICAgXS5qb2luKCcgJyk7XG5cbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2IoKCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ2dpdGh1YicsXG4gICAgICAgIHJlZ2lzdHJ5TmFtZTogJ0dpdEh1YiBSZWxlYXNlcycsXG4gICAgICAgIHNldHVwU3RlcHM6IFtdLCAvLyBnaXRodWIgY2xpIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0XG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIH0sXG4gICAgICAgIHdvcmtmbG93RW52OiB7XG4gICAgICAgICAgR0lUSFVCX1RPS0VOOiAnJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19JyxcbiAgICAgICAgICBHSVRIVUJfUkVQT1NJVE9SWTogJyR7eyBnaXRodWIucmVwb3NpdG9yeSB9fScsXG4gICAgICAgICAgR0lUSFVCX1JFRjogJyR7eyBnaXRodWIucmVmIH19JyxcbiAgICAgICAgfSxcbiAgICAgICAgcnVuOiBpZGVtcG90ZW50UmVsZWFzZSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcHVibGlzaFRvTnBtKG9wdGlvbnM6IE5wbVB1Ymxpc2hPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBpc0dpdEh1YlBhY2thZ2VzID0gb3B0aW9ucy5yZWdpc3RyeT8uc3RhcnRzV2l0aChHSVRIVUJfUEFDS0FHRVNfUkVHSVNUUlkpO1xuICAgIGNvbnN0IGlzQXdzQ29kZUFydGlmYWN0ID0gaXNBd3NDb2RlQXJ0aWZhY3RSZWdpc3RyeShvcHRpb25zLnJlZ2lzdHJ5KTtcbiAgICBjb25zdCBucG1Ub2tlbiA9IGRlZmF1bHROcG1Ub2tlbihvcHRpb25zLm5wbVRva2VuU2VjcmV0LCBvcHRpb25zLnJlZ2lzdHJ5KTtcblxuICAgIGlmIChvcHRpb25zLmRpc3RUYWcpIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIud2FybignVGhlIGBkaXN0VGFnYCBvcHRpb24gaXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBucG1EaXN0VGFnIG9wdGlvbiBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkUHVibGlzaEpvYigoX2JyYW5jaCwgYnJhbmNoT3B0aW9ucykgPT4ge1xuICAgICAgaWYgKGJyYW5jaE9wdGlvbnMubnBtRGlzdFRhZyAmJiBvcHRpb25zLmRpc3RUYWcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3Qgc2V0IGJyYW5jaC1sZXZlbCBucG1EaXN0VGFnIGFuZCBucG1EaXN0VGFnIGluIHB1Ymxpc2hUb05wbSgpJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICducG0nLFxuICAgICAgICBzZXR1cFN0ZXBzOiBbXSwgLy8gbm9kZSAxNC54IGlzIGFscmVhZHkgaW5zdGFsbGVkXG4gICAgICAgIHJ1bjogdGhpcy5qc2lpUmVsZWFzZUNvbW1hbmQoJ2pzaWktcmVsZWFzZS1ucG0nKSxcbiAgICAgICAgcmVnaXN0cnlOYW1lOiAnbnBtJyxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgTlBNX0RJU1RfVEFHOiBicmFuY2hPcHRpb25zLm5wbURpc3RUYWcgPz8gb3B0aW9ucy5kaXN0VGFnID8/ICdsYXRlc3QnLFxuICAgICAgICAgIE5QTV9SRUdJU1RSWTogb3B0aW9ucy5yZWdpc3RyeSxcbiAgICAgICAgfSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICAgIHBhY2thZ2VzOiBpc0dpdEh1YlBhY2thZ2VzID8gSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgd29ya2Zsb3dFbnY6IHtcbiAgICAgICAgICBOUE1fVE9LRU46IG5wbVRva2VuID8gc2VjcmV0KG5wbVRva2VuKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAvLyBpZiB3ZSBhcmUgcHVibGlzaGluZyB0byBBV1MgQ29kZUFydGlmYWN0LCBwYXNzIEFXUyBhY2Nlc3Mga2V5cyB0aGF0IHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBOUE1fVE9LRU4gdXNpbmcgQVdTIENMSS5cbiAgICAgICAgICBBV1NfQUNDRVNTX0tFWV9JRDogaXNBd3NDb2RlQXJ0aWZhY3QgPyBzZWNyZXQob3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5hY2Nlc3NLZXlJZFNlY3JldCA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6IGlzQXdzQ29kZUFydGlmYWN0ID8gc2VjcmV0KG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8uc2VjcmV0QWNjZXNzS2V5U2VjcmV0ID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBBV1NfUk9MRV9UT19BU1NVTUU6IGlzQXdzQ29kZUFydGlmYWN0ID8gb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5yb2xlVG9Bc3N1bWUgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcHVibGlzaFRvTnVnZXQob3B0aW9uczogTnVnZXRQdWJsaXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoSm9iKChfYnJhbmNoLCBfYnJhbmNoT3B0aW9ucykgPT4gKHtcbiAgICAgIG5hbWU6ICdudWdldCcsXG4gICAgICBzZXR1cFN0ZXBzOiBbXG4gICAgICAgIHsgdXNlczogJ2FjdGlvbnMvc2V0dXAtZG90bmV0QHYxJywgd2l0aDogeyAnZG90bmV0LXZlcnNpb24nOiAnMy54JyB9IH0sXG4gICAgICBdLFxuICAgICAgcnVuOiB0aGlzLmpzaWlSZWxlYXNlQ29tbWFuZCgnanNpaS1yZWxlYXNlLW51Z2V0JyksXG4gICAgICByZWdpc3RyeU5hbWU6ICdOdUdldCBHYWxsZXJ5JyxcbiAgICAgIHdvcmtmbG93RW52OiB7XG4gICAgICAgIE5VR0VUX0FQSV9LRVk6IHNlY3JldChvcHRpb25zLm51Z2V0QXBpS2V5U2VjcmV0ID8/ICdOVUdFVF9BUElfS0VZJyksXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcHVibGlzaFRvTWF2ZW4ob3B0aW9uczogTWF2ZW5QdWJsaXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaXNHaXRIdWJQYWNrYWdlcyA9IG9wdGlvbnMubWF2ZW5SZXBvc2l0b3J5VXJsPy5zdGFydHNXaXRoKEdJVEhVQl9QQUNLQUdFU19NQVZFTl9SRVBPU0lUT1JZKTtcbiAgICBjb25zdCBpc0dpdEh1YkFjdG9yID0gaXNHaXRIdWJQYWNrYWdlcyAmJiBvcHRpb25zLm1hdmVuVXNlcm5hbWUgPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1hdmVuU2VydmVySWQgPSBvcHRpb25zLm1hdmVuU2VydmVySWQgPz8gKGlzR2l0SHViUGFja2FnZXMgPyAnZ2l0aHViJyA6IHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoaXNHaXRIdWJQYWNrYWdlcyAmJiBtYXZlblNlcnZlcklkICE9ICdnaXRodWInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3B1Ymxpc2hpbmcgdG8gR2l0SHViIFBhY2thZ2VzIHJlcXVpcmVzIHRoZSBcIm1hdmVuU2VydmVySWRcIiB0byBiZSBcImdpdGh1YlwiJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRQdWJsaXNoSm9iKChfYnJhbmNoLCBfYnJhbmNoT3B0aW9ucykgPT4gKHtcbiAgICAgIG5hbWU6ICdtYXZlbicsXG4gICAgICByZWdpc3RyeU5hbWU6ICdNYXZlbiBDZW50cmFsJyxcbiAgICAgIHNldHVwU3RlcHM6IFtcbiAgICAgICAgeyB1c2VzOiAnYWN0aW9ucy9zZXR1cC1qYXZhQHYyJywgd2l0aDogeyAnZGlzdHJpYnV0aW9uJzogJ3RlbXVyaW4nLCAnamF2YS12ZXJzaW9uJzogMTEgfSB9LFxuICAgICAgXSxcbiAgICAgIHJ1bjogdGhpcy5qc2lpUmVsZWFzZUNvbW1hbmQoJ2pzaWktcmVsZWFzZS1tYXZlbicpLFxuICAgICAgZW52OiB7XG4gICAgICAgIE1BVkVOX0VORFBPSU5UOiBvcHRpb25zLm1hdmVuRW5kcG9pbnQsXG4gICAgICAgIE1BVkVOX1NFUlZFUl9JRDogbWF2ZW5TZXJ2ZXJJZCxcbiAgICAgICAgTUFWRU5fUkVQT1NJVE9SWV9VUkw6IG9wdGlvbnMubWF2ZW5SZXBvc2l0b3J5VXJsLFxuICAgICAgfSxcbiAgICAgIHdvcmtmbG93RW52OiB7XG4gICAgICAgIE1BVkVOX0dQR19QUklWQVRFX0tFWTogaXNHaXRIdWJQYWNrYWdlcyA/IHVuZGVmaW5lZCA6IHNlY3JldChvcHRpb25zLm1hdmVuR3BnUHJpdmF0ZUtleVNlY3JldCA/PyAnTUFWRU5fR1BHX1BSSVZBVEVfS0VZJyksXG4gICAgICAgIE1BVkVOX0dQR19QUklWQVRFX0tFWV9QQVNTUEhSQVNFOiBpc0dpdEh1YlBhY2thZ2VzID8gdW5kZWZpbmVkIDogc2VjcmV0KG9wdGlvbnMubWF2ZW5HcGdQcml2YXRlS2V5UGFzc3BocmFzZSA/PyAnTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0UnKSxcbiAgICAgICAgTUFWRU5fUEFTU1dPUkQ6IHNlY3JldChvcHRpb25zLm1hdmVuUGFzc3dvcmQgPz8gKGlzR2l0SHViUGFja2FnZXMgPyAnR0lUSFVCX1RPS0VOJyA6ICdNQVZFTl9QQVNTV09SRCcpKSxcbiAgICAgICAgTUFWRU5fVVNFUk5BTUU6IGlzR2l0SHViQWN0b3IgPyAnJHt7IGdpdGh1Yi5hY3RvciB9fScgOiBzZWNyZXQob3B0aW9ucy5tYXZlblVzZXJuYW1lID8/ICdNQVZFTl9VU0VSTkFNRScpLFxuICAgICAgICBNQVZFTl9TVEFHSU5HX1BST0ZJTEVfSUQ6IGlzR2l0SHViUGFja2FnZXMgPyB1bmRlZmluZWQgOiBzZWNyZXQob3B0aW9ucy5tYXZlblN0YWdpbmdQcm9maWxlSWQgPz8gJ01BVkVOX1NUQUdJTkdfUFJPRklMRV9JRCcpLFxuICAgICAgfSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIHBhY2thZ2VzOiBpc0dpdEh1YlBhY2thZ2VzID8gSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcHVibGlzaFRvUHlQaShvcHRpb25zOiBQeVBpUHVibGlzaE9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuYWRkUHVibGlzaEpvYigoX2JyYW5jaCwgX2JyYW5jaE9wdGlvbnMpID0+ICh7XG4gICAgICBuYW1lOiAncHlwaScsXG4gICAgICByZWdpc3RyeU5hbWU6ICdQeVBJJyxcbiAgICAgIHNldHVwU3RlcHM6IFtcbiAgICAgICAgeyB1c2VzOiAnYWN0aW9ucy9zZXR1cC1weXRob25AdjInLCB3aXRoOiB7ICdweXRob24tdmVyc2lvbic6IDMgfSB9LFxuICAgICAgXSxcbiAgICAgIHJ1bjogdGhpcy5qc2lpUmVsZWFzZUNvbW1hbmQoJ2pzaWktcmVsZWFzZS1weXBpJyksXG4gICAgICBlbnY6IHtcbiAgICAgICAgVFdJTkVfUkVQT1NJVE9SWV9VUkw6IG9wdGlvbnMudHdpbmVSZWdpc3RyeVVybCxcbiAgICAgIH0sXG4gICAgICB3b3JrZmxvd0Vudjoge1xuICAgICAgICBUV0lORV9VU0VSTkFNRTogc2VjcmV0KG9wdGlvbnMudHdpbmVVc2VybmFtZVNlY3JldCA/PyAnVFdJTkVfVVNFUk5BTUUnKSxcbiAgICAgICAgVFdJTkVfUEFTU1dPUkQ6IHNlY3JldChvcHRpb25zLnR3aW5lUGFzc3dvcmRTZWNyZXQgPz8gJ1RXSU5FX1BBU1NXT1JEJyksXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBwdWJsaXNoVG9HbyhvcHRpb25zOiBHb1B1Ymxpc2hPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2IoKF9icmFuY2gsIF9icmFuY2hPcHRpb25zKSA9PiAoe1xuICAgICAgbmFtZTogJ2dvbGFuZycsXG4gICAgICBzZXR1cFN0ZXBzOiBbXSwgLy8gb25seSByZXF1aXJlcyBgZ2l0YFxuICAgICAgcnVuOiB0aGlzLmpzaWlSZWxlYXNlQ29tbWFuZCgnanNpaS1yZWxlYXNlLWdvbGFuZycpLFxuICAgICAgcmVnaXN0cnlOYW1lOiAnR2l0SHViIEdvIE1vZHVsZSBSZXBvc2l0b3J5JyxcbiAgICAgIGVudjoge1xuICAgICAgICBHSVRIVUJfUkVQTzogb3B0aW9ucy5naXRodWJSZXBvLFxuICAgICAgICBHSVRfQlJBTkNIOiBvcHRpb25zLmdpdEJyYW5jaCxcbiAgICAgICAgR0lUX1VTRVJfTkFNRTogb3B0aW9ucy5naXRVc2VyTmFtZSA/PyBERUZBVUxUX0dJVEhVQl9BQ1RJT05TX1VTRVIubmFtZSxcbiAgICAgICAgR0lUX1VTRVJfRU1BSUw6IG9wdGlvbnMuZ2l0VXNlckVtYWlsID8/IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUi5lbWFpbCxcbiAgICAgICAgR0lUX0NPTU1JVF9NRVNTQUdFOiBvcHRpb25zLmdpdENvbW1pdE1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgd29ya2Zsb3dFbnY6IHtcbiAgICAgICAgR0lUSFVCX1RPS0VOOiBzZWNyZXQob3B0aW9ucy5naXRodWJUb2tlblNlY3JldCA/PyAnR09fR0lUSFVCX1RPS0VOJyksXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUHVibGlzaEpvYihmYWN0b3J5OiAoYnJhbmNoOiBzdHJpbmcsIGJyYW5jaE9wdGlvbnM6IFBhcnRpYWw8QnJhbmNoT3B0aW9ucz4pID0+IFB1Ymxpc2hKb2JPcHRpb25zKSB7XG4gICAgdGhpcy5fam9iRmFjdG9yaWVzLnB1c2goKGJyYW5jaCwgYnJhbmNoT3B0aW9ucykgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9IGZhY3RvcnkoYnJhbmNoLCBicmFuY2hPcHRpb25zKTtcbiAgICAgIGNvbnN0IGpvYm5hbWUgPSBgcmVsZWFzZV8ke29wdHMubmFtZX1gO1xuICAgICAgaWYgKGpvYm5hbWUgaW4gdGhpcy5fam9iRmFjdG9yaWVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGpvYiB3aXRoIG5hbWUgXCIke2pvYm5hbWV9XCJgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWlyZWRFbnYgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgICAvLyBqb2JFbnYgaXMgdGhlIGVudiB3ZSBwYXNzIHRvIHRoZSBnaXRodWIgam9iICh0YXNrIGVudmlyb25tZW50ICsgc2VjcmV0cy9leHByZXNzaW9ucykuXG4gICAgICBjb25zdCBqb2JFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IC4uLm9wdHMuZW52IH07XG4gICAgICBjb25zdCB3b3JrZmxvd0VudkVudHJpZXMgPSBPYmplY3QuZW50cmllcyhvcHRzLndvcmtmbG93RW52ID8/IHt9KVxuICAgICAgICAuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPSB1bmRlZmluZWQpIGFzIHN0cmluZ1tdW107XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBleHByZXNzaW9uXSBvZiB3b3JrZmxvd0VudkVudHJpZXMpIHtcbiAgICAgICAgcmVxdWlyZWRFbnYucHVzaChuYW1lKTtcbiAgICAgICAgam9iRW52W25hbWVdID0gZXhwcmVzc2lvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHVibGlzaFRhc2tzKSB7XG4gICAgICAgIGNvbnN0IGJyYW5jaFN1ZmZpeCA9IChicmFuY2ggPT09ICdtYWluJyB8fCBicmFuY2ggPT09ICdtYXN0ZXInKSA/ICcnIDogYDoke2JyYW5jaH1gO1xuXG4gICAgICAgIC8vIGRlZmluZSBhIHRhc2sgd2hpY2ggY2FuIGJlIHVzZWQgdGhyb3VnaCBgcHJvamVuIHB1Ymxpc2g6eHh4YC5cbiAgICAgICAgY29uc3QgdGFzayA9IHRoaXMucHJvamVjdC5hZGRUYXNrKGBwdWJsaXNoOiR7b3B0cy5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCl9JHticmFuY2hTdWZmaXh9YCwge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiBgUHVibGlzaCB0aGlzIHBhY2thZ2UgdG8gJHtvcHRzLnJlZ2lzdHJ5TmFtZX1gLFxuICAgICAgICAgIGVudjogb3B0cy5lbnYsXG4gICAgICAgICAgcmVxdWlyZWRFbnY6IHJlcXVpcmVkRW52LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBmaXJzdCB2ZXJpZnkgdGhhdCB3ZSBhcmUgb24gdGhlIGNvcnJlY3QgYnJhbmNoXG4gICAgICAgIHRhc2suZXhlYyhgdGVzdCBcIiQoZ2l0IGJyYW5jaCAtLXNob3ctY3VycmVudClcIiA9IFwiJHticmFuY2h9XCJgKTtcblxuICAgICAgICAvLyBydW4gY29tbWFuZHNcbiAgICAgICAgdGFzay5leGVjKG9wdHMucnVuKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RlcHM6IEpvYlN0ZXBbXSA9IFtcbiAgICAgICAgeyB1c2VzOiAnYWN0aW9ucy9zZXR1cC1ub2RlQHYyJywgd2l0aDogeyAnbm9kZS12ZXJzaW9uJzogMTQgfSB9LCAvLyBqc2lpLXJlbGVhc2UgcmVxdWlyZXMgbm9kZSwgc28gYWx3YXlzIHNldCB0aGF0IHVwXG4gICAgICAgIC4uLm9wdHMuc2V0dXBTdGVwcyxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdEb3dubG9hZCBidWlsZCBhcnRpZmFjdHMnLFxuICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHYyJyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmFydGlmYWN0TmFtZSxcbiAgICAgICAgICAgIHBhdGg6IEFSVElGQUNUU19ET1dOTE9BRF9ESVIsIC8vIHRoaXMgbXVzdCBiZSBcImRpc3RcIiBmb3IganNpaS1yZWxlYXNlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdSZWxlYXNlJyxcbiAgICAgICAgICAvLyBpdCB3b3VsZCBoYXZlIGJlZW4gbmljZSBpZiB3ZSBjb3VsZCBqdXN0IHJ1biBcInByb2plbiBwdWJsaXNoOnh4eFwiIGhlcmUgYnV0IHRoYXQgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgdGhpcyBqb2IgZG9lcyBub3QgY2hlY2tvdXQgc291cmNlc1xuICAgICAgICAgIHJ1bjogb3B0cy5ydW4sXG4gICAgICAgICAgZW52OiBqb2JFbnYsXG4gICAgICAgIH0sXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBwZXJtcyA9IG9wdHMucGVybWlzc2lvbnMgPz8geyBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFEIH07XG5cbiAgICAgIGlmICh0aGlzLmZhaWx1cmVJc3N1ZSkge1xuICAgICAgICBzdGVwcy5wdXNoKC4uLltcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnRXh0cmFjdCBWZXJzaW9uJyxcbiAgICAgICAgICAgIGlmOiAnJHt7IGZhaWx1cmUoKSB9fScsXG4gICAgICAgICAgICBpZDogJ2V4dHJhY3QtdmVyc2lvbicsXG4gICAgICAgICAgICBydW46ICdlY2hvIFwiOjpzZXQtb3V0cHV0IG5hbWU9VkVSU0lPTjo6JChjYXQgZGlzdC92ZXJzaW9uLnR4dClcIicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnQ3JlYXRlIElzc3VlJyxcbiAgICAgICAgICAgIGlmOiAnJHt7IGZhaWx1cmUoKSB9fScsXG4gICAgICAgICAgICB1c2VzOiAnaW1qb2huYm8vaXNzdWUtYm90QHYzJyxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgbGFiZWxzOiB0aGlzLmZhaWx1cmVJc3N1ZUxhYmVsLFxuICAgICAgICAgICAgICB0aXRsZTogYFB1Ymxpc2hpbmcgdlxcJHt7IHN0ZXBzLmV4dHJhY3QtdmVyc2lvbi5vdXRwdXRzLlZFUlNJT04gfX0gdG8gJHtvcHRzLnJlZ2lzdHJ5TmFtZX0gZmFpbGVkYCxcbiAgICAgICAgICAgICAgYm9keTogJ1NlZSBodHRwczovL2dpdGh1Yi5jb20vJHt7IGdpdGh1Yi5yZXBvc2l0b3J5IH19L2FjdGlvbnMvcnVucy8ke3sgZ2l0aHViLnJ1bl9pZCB9fScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgIEdJVEhVQl9UT0tFTjogJyR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgICAgICBPYmplY3QuYXNzaWduKHBlcm1zLCB7IGlzc3VlczogSm9iUGVybWlzc2lvbi5XUklURSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2pvYm5hbWVdOiB7XG4gICAgICAgICAgbmFtZTogYFB1Ymxpc2ggdG8gJHtvcHRzLnJlZ2lzdHJ5TmFtZX1gLFxuICAgICAgICAgIHBlcm1pc3Npb25zOiBwZXJtcyxcbiAgICAgICAgICBpZjogdGhpcy5jb25kaXRpb24sXG4gICAgICAgICAgbmVlZHM6IFt0aGlzLmJ1aWxkSm9iSWRdLFxuICAgICAgICAgIHJ1bnNPbjogdGhpcy5ydW5zT24sXG4gICAgICAgICAgc3RlcHMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBqc2lpUmVsZWFzZUNvbW1hbmQoY29tbWFuZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBucHggLXAganNpaS1yZWxlYXNlQCR7dGhpcy5qc2lpUmVsZWFzZVZlcnNpb259ICR7Y29tbWFuZH1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlY3JldChzZWNyZXROYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGBcXCR7eyBzZWNyZXRzLiR7c2VjcmV0TmFtZX0gfX1gO1xufVxuXG5pbnRlcmZhY2UgUHVibGlzaEpvYk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0XG4gICAqL1xuICByZWFkb25seSBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSByZWdpc3RyeSAoZm9yIGRlc2NyaXB0aW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0cnlOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEpvYiBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvbnM/OiBKb2JQZXJtaXNzaW9ucztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2ggam9iIChzaG91bGQgYmUgbG93ZXJjYXNlKS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdG8gaW5jbHVkZSBvbmx5IGluIHRoZSB3b3JrZmxvdyAoYW5kIG5vdCB0YXNrcykuXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd0Vudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIGFjdGlvbiB0byBleGVjdXRlIGluIG9yZGVyIHRvIHNldHVwIHRoZSBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogTk9URTogbm9kZSAxNC54IHdpbGwgYWx3YXlzIGJlIGluc3RhbGxlZCBzaW5jZSBpdCBpcyByZXF1aXJlZCBieSBqc2lpLXJlbGVhc2UuXG4gICAqL1xuICByZWFkb25seSBzZXR1cFN0ZXBzOiBKb2JTdGVwW107XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgSnNpaVJlbGVhc2VOcG0gZXh0ZW5kcyBOcG1QdWJsaXNoT3B0aW9ucyB7IH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBOcG1QdWJsaXNoT3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZGlzdFRhZz86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcmVnaXN0cnk/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbnBtVG9rZW5TZWNyZXQ/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY29kZUFydGlmYWN0T3B0aW9ucz86IENvZGVBcnRpZmFjdE9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUFydGlmYWN0T3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhY2Nlc3NLZXlJZFNlY3JldD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHNlY3JldEFjY2Vzc0tleVNlY3JldD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcm9sZVRvQXNzdW1lPzogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBKc2lpUmVsZWFzZVB5UGkgZXh0ZW5kcyBQeVBpUHVibGlzaE9wdGlvbnMgeyB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIFB5UGlQdWJsaXNoT3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHR3aW5lUmVnaXN0cnlVcmw/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB0d2luZVVzZXJuYW1lU2VjcmV0Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB0d2luZVBhc3N3b3JkU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgSnNpaVJlbGVhc2VOdWdldCBleHRlbmRzIE51Z2V0UHVibGlzaE9wdGlvbnMgeyB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgTnVnZXRQdWJsaXNoT3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG51Z2V0QXBpS2V5U2VjcmV0Pzogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgSnNpaVJlbGVhc2VNYXZlbiBleHRlbmRzIE1hdmVuUHVibGlzaE9wdGlvbnMgeyB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgTWF2ZW5QdWJsaXNoT3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG1hdmVuRW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG1hdmVuU2VydmVySWQ/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbWF2ZW5SZXBvc2l0b3J5VXJsPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBtYXZlbkdwZ1ByaXZhdGVLZXlTZWNyZXQ/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG1hdmVuR3BnUHJpdmF0ZUtleVBhc3NwaHJhc2U/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG1hdmVuVXNlcm5hbWU/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBtYXZlblBhc3N3b3JkPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG1hdmVuU3RhZ2luZ1Byb2ZpbGVJZD86IHN0cmluZztcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIEdvUHVibGlzaE9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGdpdGh1YlRva2VuU2VjcmV0Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZ2l0aHViUmVwbz86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBnaXRCcmFuY2g/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBnaXRVc2VyTmFtZT86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGdpdFVzZXJFbWFpbD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBnaXRDb21taXRNZXNzYWdlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVmVyc2lvbkFydGlmYWN0T3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB2ZXJzaW9uRmlsZTogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByZWxlYXNlVGFnRmlsZTogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjaGFuZ2Vsb2dGaWxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIGlmIHRoZSBgcmVnaXN0cnlVcmxgIGlzIGEgQVdTIENvZGVBcnRpZmFjdCByZWdpc3RyeS5cbiAqIEBwYXJhbSByZWdpc3RyeVVybCB1cmwgb2YgcmVnaXN0cnlcbiAqIEByZXR1cm5zIHRydWUgZm9yIEFXUyBDb2RlQXJ0aWZhY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXdzQ29kZUFydGlmYWN0UmVnaXN0cnkocmVnaXN0cnlVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gcmVnaXN0cnlVcmwgJiYgQVdTX0NPREVBUlRJRkFDVF9SRUdJU1RSWV9SRUdFWC50ZXN0KHJlZ2lzdHJ5VXJsKTtcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgR2l0SHViUmVsZWFzZXNQdWJsaXNoT3B0aW9ucyBleHRlbmRzIFZlcnNpb25BcnRpZmFjdE9wdGlvbnMgeyB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgR2l0UHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBWZXJzaW9uQXJ0aWZhY3RPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBwcm9qZWN0Q2hhbmdlbG9nRmlsZT86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBnaXRCcmFuY2g/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBnaXRQdXNoQ29tbWFuZD86IHN0cmluZztcbn1cblxudHlwZSBQdWJsaXNoSm9iRmFjdG9yeSA9IChicmFuY2g6IHN0cmluZywgYnJhbmNoT3B0aW9uczogUGFydGlhbDxCcmFuY2hPcHRpb25zPikgPT4gUmVjb3JkPHN0cmluZywgSm9iPjtcbiJdfQ==
409
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlbGVhc2UvcHVibGlzaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMENBQStDO0FBQy9DLDRDQUF5QztBQUN6QyxtREFBa0U7QUFDbEUsK0RBQStGO0FBQy9GLDZEQUE2RDtBQUk3RCxNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQztBQUN0QyxNQUFNLHdCQUF3QixHQUFHLG9CQUFvQixDQUFDO0FBQ3RELE1BQU0sZ0NBQWdDLEdBQUcsOEJBQThCLENBQUM7QUFDeEUsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUM7QUFDdEMsTUFBTSwrQkFBK0IsR0FBRywrQkFBK0IsQ0FBQzs7Ozs7Ozs7QUFpQ3hFLE1BQWEsU0FBVSxTQUFRLHFCQUFTOzs7O0lBZ0J0QyxZQUFZLE9BQWdCLEVBQUUsT0FBeUI7O1FBQ3JELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQU5qQiwrREFBK0Q7UUFDOUMsa0JBQWEsR0FBd0IsRUFBRSxDQUFDO1FBT3ZELElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixTQUFHLE9BQU8sQ0FBQyxrQkFBa0IsbUNBQUksb0JBQW9CLENBQUM7UUFDN0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxNQUFNLFNBQUcsT0FBTyxDQUFDLE1BQU0sbUNBQUksS0FBSyxDQUFDO1FBRXRDLElBQUksQ0FBQyxZQUFZLFNBQUcsT0FBTyxDQUFDLFlBQVksbUNBQUksS0FBSyxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsU0FBRyxPQUFPLENBQUMsaUJBQWlCLG1DQUFJLGdCQUFnQixDQUFDO1FBQ3ZFLElBQUksQ0FBQyxNQUFNLFNB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LFNBQVM7b0JBQ2xCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7b0JBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtvQkFDbkIsS0FBSztpQkFDTjthQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxPQUFlO1FBQ3hDLE9BQU8sdUJBQXVCLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNyRSxDQUFDOztBQXZXSCw4QkF3V0M7OztBQUVELFNBQVMsTUFBTSxDQUFDLFVBQWtCO0lBQ2hDLE9BQU8sZ0JBQWdCLFVBQVUsS0FBSyxDQUFDO0FBQ3pDLENBQUM7QUF5S0Q7Ozs7R0FJRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLFdBQStCO0lBQ3ZFLE9BQU8sV0FBVyxJQUFJLCtCQUErQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBRkQsOERBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKU0lJX1RPT0xDSEFJTiB9IGZyb20gJy4uL2Nkay9jb25zdHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50JztcbmltcG9ydCB7IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUiB9IGZyb20gJy4uL2dpdGh1Yi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSm9iLCBKb2JQZXJtaXNzaW9uLCBKb2JQZXJtaXNzaW9ucywgSm9iU3RlcCwgVG9vbHMgfSBmcm9tICcuLi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IGRlZmF1bHROcG1Ub2tlbiB9IGZyb20gJy4uL2phdmFzY3JpcHQvbm9kZS1wYWNrYWdlJztcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi9wcm9qZWN0JztcbmltcG9ydCB7IEJyYW5jaE9wdGlvbnMgfSBmcm9tICcuL3JlbGVhc2UnO1xuXG5jb25zdCBKU0lJX1JFTEVBU0VfVkVSU0lPTiA9ICdsYXRlc3QnO1xuY29uc3QgR0lUSFVCX1BBQ0tBR0VTX1JFR0lTVFJZID0gJ25wbS5wa2cuZ2l0aHViLmNvbSc7XG5jb25zdCBHSVRIVUJfUEFDS0FHRVNfTUFWRU5fUkVQT1NJVE9SWSA9ICdodHRwczovL21hdmVuLnBrZy5naXRodWIuY29tJztcbmNvbnN0IEFSVElGQUNUU19ET1dOTE9BRF9ESVIgPSAnZGlzdCc7XG5jb25zdCBBV1NfQ09ERUFSVElGQUNUX1JFR0lTVFJZX1JFR0VYID0gLy5jb2RlYXJ0aWZhY3QuKi5hbWF6b25hd3MuY29tLztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgUHVibGlzaGVyT3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGJ1aWxkSm9iSWQ6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjb25kaXRpb24/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFydGlmYWN0TmFtZTogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkganNpaVJlbGVhc2VWZXJzaW9uPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZmFpbHVyZUlzc3VlPzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGZhaWx1cmVJc3N1ZUxhYmVsPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHdvcmtmbG93UnVuc09uPzogc3RyaW5nW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBwdWJsaXNoVGFza3M/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGRyeVJ1bj86IGJvb2xlYW47XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgUHVibGlzaGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkSm9iSWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGFydGlmYWN0TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkganNpaVJlbGVhc2VWZXJzaW9uOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjb25kaXRpb24/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBmYWlsdXJlSXNzdWU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgZmFpbHVyZUlzc3VlTGFiZWw6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBydW5zT246IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IHB1Ymxpc2hUYXNrczogYm9vbGVhbjtcblxuICAvLyBmdW5jdGlvbnMgdGhhdCBjcmVhdGUgam9icyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBicmFuY2hcbiAgcHJpdmF0ZSByZWFkb25seSBfam9iRmFjdG9yaWVzOiBQdWJsaXNoSm9iRmFjdG9yeVtdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkcnlSdW46IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogUHVibGlzaGVyT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5idWlsZEpvYklkID0gb3B0aW9ucy5idWlsZEpvYklkO1xuICAgIHRoaXMuYXJ0aWZhY3ROYW1lID0gb3B0aW9ucy5hcnRpZmFjdE5hbWU7XG4gICAgdGhpcy5qc2lpUmVsZWFzZVZlcnNpb24gPSBvcHRpb25zLmpzaWlSZWxlYXNlVmVyc2lvbiA/PyBKU0lJX1JFTEVBU0VfVkVSU0lPTjtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IG9wdGlvbnMuY29uZGl0aW9uO1xuICAgIHRoaXMuZHJ5UnVuID0gb3B0aW9ucy5kcnlSdW4gPz8gZmFsc2U7XG5cbiAgICB0aGlzLmZhaWx1cmVJc3N1ZSA9IG9wdGlvbnMuZmFpbHVyZUlzc3VlID8/IGZhbHNlO1xuICAgIHRoaXMuZmFpbHVyZUlzc3VlTGFiZWwgPSBvcHRpb25zLmZhaWx1cmVJc3N1ZUxhYmVsID8/ICdmYWlsZWQtcmVsZWFzZSc7XG4gICAgdGhpcy5ydW5zT24gPSBvcHRpb25zLndvcmtmbG93UnVuc09uID8/IFsndWJ1bnR1LWxhdGVzdCddO1xuICAgIHRoaXMucHVibGlzaFRhc2tzID0gb3B0aW9ucy5wdWJsaXNoVGFza3MgPz8gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IGBSZWxlYXNlYCB0byBhZGQgdGhlIHB1Ymxpc2hpbmcgam9icyB0byBhIHJlbGVhc2Ugd29ya2Zsb3dcbiAgICogYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgYnJhbmNoLlxuICAgKiBAcGFyYW0gYnJhbmNoIFRoZSBicmFuY2ggbmFtZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBCcmFuY2ggb3B0aW9uc1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfcmVuZGVySm9ic0ZvckJyYW5jaChicmFuY2g6IHN0cmluZywgb3B0aW9uczogUGFydGlhbDxCcmFuY2hPcHRpb25zPik6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuICAgIGxldCBqb2JzOiBSZWNvcmQ8c3RyaW5nLCBKb2I+ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGZhY3Rvcnkgb2YgdGhpcy5fam9iRmFjdG9yaWVzKSB7XG4gICAgICBqb2JzID0ge1xuICAgICAgICAuLi5qb2JzLFxuICAgICAgICAuLi5mYWN0b3J5KGJyYW5jaCwgb3B0aW9ucyksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBqb2JzO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcHVibGlzaFRvR2l0KG9wdGlvbnM6IEdpdFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgY29uc3QgcmVsZWFzZVRhZ0ZpbGUgPSBvcHRpb25zLnJlbGVhc2VUYWdGaWxlO1xuICAgIGNvbnN0IHZlcnNpb25GaWxlID0gb3B0aW9ucy52ZXJzaW9uRmlsZTtcbiAgICBjb25zdCBjaGFuZ2Vsb2cgPSBvcHRpb25zLmNoYW5nZWxvZ0ZpbGU7XG4gICAgY29uc3QgcHJvamVjdENoYW5nZWxvZ0ZpbGUgPSBvcHRpb25zLnByb2plY3RDaGFuZ2Vsb2dGaWxlO1xuICAgIGNvbnN0IGdpdEJyYW5jaCA9IG9wdGlvbnMuZ2l0QnJhbmNoID8/ICdtYWluJztcblxuICAgIGNvbnN0IHRhc2tOYW1lID0gKGdpdEJyYW5jaCA9PT0gJ21haW4nIHx8IGdpdEJyYW5jaCA9PT0gJ21hc3RlcicpID8gJ3B1Ymxpc2g6Z2l0JyA6IGBwdWJsaXNoOmdpdDoke2dpdEJyYW5jaH1gIDtcblxuICAgIGNvbnN0IHB1Ymxpc2hUYXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2sodGFza05hbWUsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJlcGVuZHMgdGhlIHJlbGVhc2UgY2hhbmdlbG9nIG9udG8gdGhlIHByb2plY3QgY2hhbmdlbG9nLCBjcmVhdGVzIGEgcmVsZWFzZSBjb21taXQsIGFuZCB0YWdzIHRoZSByZWxlYXNlJyxcbiAgICAgIGVudjoge1xuICAgICAgICBDSEFOR0VMT0c6IGNoYW5nZWxvZyxcbiAgICAgICAgUkVMRUFTRV9UQUdfRklMRTogcmVsZWFzZVRhZ0ZpbGUsXG4gICAgICAgIFBST0pFQ1RfQ0hBTkdFTE9HX0ZJTEU6IHByb2plY3RDaGFuZ2Vsb2dGaWxlID8/ICcnLFxuICAgICAgICBWRVJTSU9OX0ZJTEU6IHZlcnNpb25GaWxlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBpZiAocHJvamVjdENoYW5nZWxvZ0ZpbGUpIHtcbiAgICAgIHB1Ymxpc2hUYXNrLmJ1aWx0aW4oJ3JlbGVhc2UvdXBkYXRlLWNoYW5nZWxvZycpO1xuICAgIH1cbiAgICBwdWJsaXNoVGFzay5idWlsdGluKCdyZWxlYXNlL3RhZy12ZXJzaW9uJyk7XG5cbiAgICBpZiAob3B0aW9ucy5naXRQdXNoQ29tbWFuZCAhPT0gJycpIHtcbiAgICAgIGNvbnN0IGdpdFB1c2hDb21tYW5kID0gb3B0aW9ucy5naXRQdXNoQ29tbWFuZCB8fCBgZ2l0IHB1c2ggLS1mb2xsb3ctdGFncyBvcmlnaW4gJHtnaXRCcmFuY2h9YDtcbiAgICAgIHB1Ymxpc2hUYXNrLmV4ZWMoZ2l0UHVzaENvbW1hbmQpO1xuICAgIH1cblxuICAgIHJldHVybiBwdWJsaXNoVGFzaztcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBwdWJsaXNoVG9HaXRIdWJSZWxlYXNlcyhvcHRpb25zOiBHaXRIdWJSZWxlYXNlc1B1Ymxpc2hPcHRpb25zKSB7XG4gICAgY29uc3QgY2hhbmdlbG9nRmlsZSA9IG9wdGlvbnMuY2hhbmdlbG9nRmlsZTtcbiAgICBjb25zdCByZWxlYXNlVGFnRmlsZSA9IG9wdGlvbnMucmVsZWFzZVRhZ0ZpbGU7XG5cbiAgICAvLyBjcmVhdGUgYSBnaXRodWIgcmVsZWFzZVxuICAgIGNvbnN0IHJlbGVhc2VUYWcgPSBgJChjYXQgJHtyZWxlYXNlVGFnRmlsZX0pYDtcblxuICAgIGNvbnN0IGdoUmVsZWFzZSA9IFtcbiAgICAgIGBnaCByZWxlYXNlIGNyZWF0ZSAke3JlbGVhc2VUYWd9YCxcbiAgICAgICctUiAkR0lUSFVCX1JFUE9TSVRPUlknLFxuICAgICAgYC1GICR7Y2hhbmdlbG9nRmlsZX1gLFxuICAgICAgYC10ICR7cmVsZWFzZVRhZ31gLFxuICAgICAgJy0tdGFyZ2V0ICRHSVRIVUJfUkVGJyxcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIC8vIHJlbGVhc2Ugc2NyaXB0IHRoYXQgZG9lcyBub3QgZXJyb3Igd2hlbiByZS1yZWxlYXNpbmcgYSBnaXZlbiB2ZXJzaW9uXG4gICAgY29uc3QgaWRlbXBvdGVudFJlbGVhc2UgPSBbXG4gICAgICAnZXJyb3V0PSQobWt0ZW1wKTsnLFxuICAgICAgYCR7Z2hSZWxlYXNlfSAyPiAkZXJyb3V0ICYmIHRydWU7YCxcbiAgICAgICdleGl0Y29kZT0kPzsnLFxuICAgICAgJ2lmIFsgJGV4aXRjb2RlIC1uZSAwIF0gJiYgISBncmVwIC1xIFwiUmVsZWFzZS50YWdfbmFtZSBhbHJlYWR5IGV4aXN0c1wiICRlcnJvdXQ7IHRoZW4nLFxuICAgICAgJ2NhdCAkZXJyb3V0OycsXG4gICAgICAnZXhpdCAkZXhpdGNvZGU7JyxcbiAgICAgICdmaScsXG4gICAgXS5qb2luKCcgJyk7XG5cbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2IoKCk6IFB1Ymxpc2hKb2JPcHRpb25zID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6ICdnaXRodWInLFxuICAgICAgICByZWdpc3RyeU5hbWU6ICdHaXRIdWIgUmVsZWFzZXMnLFxuICAgICAgICBwcmVQdWJsaXNoU3RlcHM6IG9wdGlvbnMucHJlUHVibGlzaFN0ZXBzID8/IFtdLFxuICAgICAgICBwdWJsaXNoVG9vbHM6IG9wdGlvbnMucHVibGlzaFRvb2xzLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICB9LFxuICAgICAgICB3b3JrZmxvd0Vudjoge1xuICAgICAgICAgIEdJVEhVQl9UT0tFTjogJyR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fScsXG4gICAgICAgICAgR0lUSFVCX1JFUE9TSVRPUlk6ICcke3sgZ2l0aHViLnJlcG9zaXRvcnkgfX0nLFxuICAgICAgICAgIEdJVEhVQl9SRUY6ICcke3sgZ2l0aHViLnJlZiB9fScsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1bjogaWRlbXBvdGVudFJlbGVhc2UsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHB1Ymxpc2hUb05wbShvcHRpb25zOiBOcG1QdWJsaXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaXNHaXRIdWJQYWNrYWdlcyA9IG9wdGlvbnMucmVnaXN0cnk/LnN0YXJ0c1dpdGgoR0lUSFVCX1BBQ0tBR0VTX1JFR0lTVFJZKTtcbiAgICBjb25zdCBpc0F3c0NvZGVBcnRpZmFjdCA9IGlzQXdzQ29kZUFydGlmYWN0UmVnaXN0cnkob3B0aW9ucy5yZWdpc3RyeSk7XG4gICAgY29uc3QgbnBtVG9rZW4gPSBkZWZhdWx0TnBtVG9rZW4ob3B0aW9ucy5ucG1Ub2tlblNlY3JldCwgb3B0aW9ucy5yZWdpc3RyeSk7XG5cbiAgICBpZiAob3B0aW9ucy5kaXN0VGFnKSB7XG4gICAgICB0aGlzLnByb2plY3QubG9nZ2VyLndhcm4oJ1RoZSBgZGlzdFRhZ2Agb3B0aW9uIGlzIGRlcHJlY2F0ZWQuIFVzZSB0aGUgbnBtRGlzdFRhZyBvcHRpb24gaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2IoKF9icmFuY2gsIGJyYW5jaE9wdGlvbnMpOiBQdWJsaXNoSm9iT3B0aW9ucyA9PiB7XG4gICAgICBpZiAoYnJhbmNoT3B0aW9ucy5ucG1EaXN0VGFnICYmIG9wdGlvbnMuZGlzdFRhZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzZXQgYnJhbmNoLWxldmVsIG5wbURpc3RUYWcgYW5kIG5wbURpc3RUYWcgaW4gcHVibGlzaFRvTnBtKCknKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogJ25wbScsXG4gICAgICAgIHB1Ymxpc2hUb29sczogSlNJSV9UT09MQ0hBSU4uanMsXG4gICAgICAgIHByZVB1Ymxpc2hTdGVwczogb3B0aW9ucy5wcmVQdWJsaXNoU3RlcHMgPz8gW10sXG4gICAgICAgIHJ1bjogdGhpcy5qc2lpUmVsZWFzZUNvbW1hbmQoJ2pzaWktcmVsZWFzZS1ucG0nKSxcbiAgICAgICAgcmVnaXN0cnlOYW1lOiAnbnBtJyxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgTlBNX0RJU1RfVEFHOiBicmFuY2hPcHRpb25zLm5wbURpc3RUYWcgPz8gb3B0aW9ucy5kaXN0VGFnID8/ICdsYXRlc3QnLFxuICAgICAgICAgIE5QTV9SRUdJU1RSWTogb3B0aW9ucy5yZWdpc3RyeSxcbiAgICAgICAgfSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICAgIHBhY2thZ2VzOiBpc0dpdEh1YlBhY2thZ2VzID8gSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgd29ya2Zsb3dFbnY6IHtcbiAgICAgICAgICBOUE1fVE9LRU46IG5wbVRva2VuID8gc2VjcmV0KG5wbVRva2VuKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAvLyBpZiB3ZSBhcmUgcHVibGlzaGluZyB0byBBV1MgQ29kZUFydGlmYWN0LCBwYXNzIEFXUyBhY2Nlc3Mga2V5cyB0aGF0IHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBOUE1fVE9LRU4gdXNpbmcgQVdTIENMSS5cbiAgICAgICAgICBBV1NfQUNDRVNTX0tFWV9JRDogaXNBd3NDb2RlQXJ0aWZhY3QgPyBzZWNyZXQob3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5hY2Nlc3NLZXlJZFNlY3JldCA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBBV1NfU0VDUkVUX0FDQ0VTU19LRVk6IGlzQXdzQ29kZUFydGlmYWN0ID8gc2VjcmV0KG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8uc2VjcmV0QWNjZXNzS2V5U2VjcmV0ID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBBV1NfUk9MRV9UT19BU1NVTUU6IGlzQXdzQ29kZUFydGlmYWN0ID8gb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5yb2xlVG9Bc3N1bWUgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcHVibGlzaFRvTnVnZXQob3B0aW9uczogTnVnZXRQdWJsaXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoSm9iKChfYnJhbmNoLCBfYnJhbmNoT3B0aW9ucyk6IFB1Ymxpc2hKb2JPcHRpb25zID0+ICh7XG4gICAgICBuYW1lOiAnbnVnZXQnLFxuICAgICAgcHVibGlzaFRvb2xzOiBKU0lJX1RPT0xDSEFJTi5kb3RuZXQsXG4gICAgICBwcmVQdWJsaXNoU3RlcHM6IG9wdGlvbnMucHJlUHVibGlzaFN0ZXBzID8/IFtdLFxuICAgICAgcnVuOiB0aGlzLmpzaWlSZWxlYXNlQ29tbWFuZCgnanNpaS1yZWxlYXNlLW51Z2V0JyksXG4gICAgICByZWdpc3RyeU5hbWU6ICdOdUdldCBHYWxsZXJ5JyxcbiAgICAgIHdvcmtmbG93RW52OiB7XG4gICAgICAgIE5VR0VUX0FQSV9LRVk6IHNlY3JldChvcHRpb25zLm51Z2V0QXBpS2V5U2VjcmV0ID8/ICdOVUdFVF9BUElfS0VZJyksXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcHVibGlzaFRvTWF2ZW4ob3B0aW9uczogTWF2ZW5QdWJsaXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaXNHaXRIdWJQYWNrYWdlcyA9IG9wdGlvbnMubWF2ZW5SZXBvc2l0b3J5VXJsPy5zdGFydHNXaXRoKEdJVEhVQl9QQUNLQUdFU19NQVZFTl9SRVBPU0lUT1JZKTtcbiAgICBjb25zdCBpc0dpdEh1YkFjdG9yID0gaXNHaXRIdWJQYWNrYWdlcyAmJiBvcHRpb25zLm1hdmVuVXNlcm5hbWUgPT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1hdmVuU2VydmVySWQgPSBvcHRpb25zLm1hdmVuU2VydmVySWQgPz8gKGlzR2l0SHViUGFja2FnZXMgPyAnZ2l0aHViJyA6IHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoaXNHaXRIdWJQYWNrYWdlcyAmJiBtYXZlblNlcnZlcklkICE9ICdnaXRodWInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3B1Ymxpc2hpbmcgdG8gR2l0SHViIFBhY2thZ2VzIHJlcXVpcmVzIHRoZSBcIm1hdmVuU2VydmVySWRcIiB0byBiZSBcImdpdGh1YlwiJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRQdWJsaXNoSm9iKChfYnJhbmNoLCBfYnJhbmNoT3B0aW9ucyk6IFB1Ymxpc2hKb2JPcHRpb25zID0+ICh7XG4gICAgICBuYW1lOiAnbWF2ZW4nLFxuICAgICAgcmVnaXN0cnlOYW1lOiAnTWF2ZW4gQ2VudHJhbCcsXG4gICAgICBwdWJsaXNoVG9vbHM6IEpTSUlfVE9PTENIQUlOLmphdmEsXG4gICAgICBwcmVQdWJsaXNoU3RlcHM6IG9wdGlvbnMucHJlUHVibGlzaFN0ZXBzID8/IFtdLFxuICAgICAgcnVuOiB0aGlzLmpzaWlSZWxlYXNlQ29tbWFuZCgnanNpaS1yZWxlYXNlLW1hdmVuJyksXG4gICAgICBlbnY6IHtcbiAgICAgICAgTUFWRU5fRU5EUE9JTlQ6IG9wdGlvbnMubWF2ZW5FbmRwb2ludCxcbiAgICAgICAgTUFWRU5fU0VSVkVSX0lEOiBtYXZlblNlcnZlcklkLFxuICAgICAgICBNQVZFTl9SRVBPU0lUT1JZX1VSTDogb3B0aW9ucy5tYXZlblJlcG9zaXRvcnlVcmwsXG4gICAgICB9LFxuICAgICAgd29ya2Zsb3dFbnY6IHtcbiAgICAgICAgTUFWRU5fR1BHX1BSSVZBVEVfS0VZOiBpc0dpdEh1YlBhY2thZ2VzID8gdW5kZWZpbmVkIDogc2VjcmV0KG9wdGlvbnMubWF2ZW5HcGdQcml2YXRlS2V5U2VjcmV0ID8/ICdNQVZFTl9HUEdfUFJJVkFURV9LRVknKSxcbiAgICAgICAgTUFWRU5fR1BHX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0U6IGlzR2l0SHViUGFja2FnZXMgPyB1bmRlZmluZWQgOiBzZWNyZXQob3B0aW9ucy5tYXZlbkdwZ1ByaXZhdGVLZXlQYXNzcGhyYXNlID8/ICdNQVZFTl9HUEdfUFJJVkFURV9LRVlfUEFTU1BIUkFTRScpLFxuICAgICAgICBNQVZFTl9QQVNTV09SRDogc2VjcmV0KG9wdGlvbnMubWF2ZW5QYXNzd29yZCA/PyAoaXNHaXRIdWJQYWNrYWdlcyA/ICdHSVRIVUJfVE9LRU4nIDogJ01BVkVOX1BBU1NXT1JEJykpLFxuICAgICAgICBNQVZFTl9VU0VSTkFNRTogaXNHaXRIdWJBY3RvciA/ICcke3sgZ2l0aHViLmFjdG9yIH19JyA6IHNlY3JldChvcHRpb25zLm1hdmVuVXNlcm5hbWUgPz8gJ01BVkVOX1VTRVJOQU1FJyksXG4gICAgICAgIE1BVkVOX1NUQUdJTkdfUFJPRklMRV9JRDogaXNHaXRIdWJQYWNrYWdlcyA/IHVuZGVmaW5lZCA6IHNlY3JldChvcHRpb25zLm1hdmVuU3RhZ2luZ1Byb2ZpbGVJZCA/PyAnTUFWRU5fU1RBR0lOR19QUk9GSUxFX0lEJyksXG4gICAgICB9LFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgcGFja2FnZXM6IGlzR2l0SHViUGFja2FnZXMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBwdWJsaXNoVG9QeVBpKG9wdGlvbnM6IFB5UGlQdWJsaXNoT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoSm9iKChfYnJhbmNoLCBfYnJhbmNoT3B0aW9ucyk6IFB1Ymxpc2hKb2JPcHRpb25zID0+ICh7XG4gICAgICBuYW1lOiAncHlwaScsXG4gICAgICByZWdpc3RyeU5hbWU6ICdQeVBJJyxcbiAgICAgIHB1Ymxpc2hUb29sczogSlNJSV9UT09MQ0hBSU4ucHl0aG9uLFxuICAgICAgcHJlUHVibGlzaFN0ZXBzOiBvcHRpb25zLnByZVB1Ymxpc2hTdGVwcyA/PyBbXSxcbiAgICAgIHJ1bjogdGhpcy5qc2lpUmVsZWFzZUNvbW1hbmQoJ2pzaWktcmVsZWFzZS1weXBpJyksXG4gICAgICBlbnY6IHtcbiAgICAgICAgVFdJTkVfUkVQT1NJVE9SWV9VUkw6IG9wdGlvbnMudHdpbmVSZWdpc3RyeVVybCxcbiAgICAgIH0sXG4gICAgICB3b3JrZmxvd0Vudjoge1xuICAgICAgICBUV0lORV9VU0VSTkFNRTogc2VjcmV0KG9wdGlvbnMudHdpbmVVc2VybmFtZVNlY3JldCA/PyAnVFdJTkVfVVNFUk5BTUUnKSxcbiAgICAgICAgVFdJTkVfUEFTU1dPUkQ6IHNlY3JldChvcHRpb25zLnR3aW5lUGFzc3dvcmRTZWNyZXQgPz8gJ1RXSU5FX1BBU1NXT1JEJyksXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBwdWJsaXNoVG9HbyhvcHRpb25zOiBHb1B1Ymxpc2hPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2hKb2IoKF9icmFuY2gsIF9icmFuY2hPcHRpb25zKTogUHVibGlzaEpvYk9wdGlvbnMgPT4gKHtcbiAgICAgIG5hbWU6ICdnb2xhbmcnLFxuICAgICAgcHVibGlzaFRvb2xzOiBKU0lJX1RPT0xDSEFJTi5nbyxcbiAgICAgIHByZVB1Ymxpc2hTdGVwczogb3B0aW9ucy5wcmVQdWJsaXNoU3RlcHMgPz8gW10sXG4gICAgICBydW46IHRoaXMuanNpaVJlbGVhc2VDb21tYW5kKCdqc2lpLXJlbGVhc2UtZ29sYW5nJyksXG4gICAgICByZWdpc3RyeU5hbWU6ICdHaXRIdWIgR28gTW9kdWxlIFJlcG9zaXRvcnknLFxuICAgICAgZW52OiB7XG4gICAgICAgIEdJVEhVQl9SRVBPOiBvcHRpb25zLmdpdGh1YlJlcG8sXG4gICAgICAgIEdJVF9CUkFOQ0g6IG9wdGlvbnMuZ2l0QnJhbmNoLFxuICAgICAgICBHSVRfVVNFUl9OQU1FOiBvcHRpb25zLmdpdFVzZXJOYW1lID8/IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUi5uYW1lLFxuICAgICAgICBHSVRfVVNFUl9FTUFJTDogb3B0aW9ucy5naXRVc2VyRW1haWwgPz8gREVGQVVMVF9HSVRIVUJfQUNUSU9OU19VU0VSLmVtYWlsLFxuICAgICAgICBHSVRfQ09NTUlUX01FU1NBR0U6IG9wdGlvbnMuZ2l0Q29tbWl0TWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICB3b3JrZmxvd0Vudjoge1xuICAgICAgICBHSVRIVUJfVE9LRU46IHNlY3JldChvcHRpb25zLmdpdGh1YlRva2VuU2VjcmV0ID8/ICdHT19HSVRIVUJfVE9LRU4nKSxcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRQdWJsaXNoSm9iKGZhY3Rvcnk6IChicmFuY2g6IHN0cmluZywgYnJhbmNoT3B0aW9uczogUGFydGlhbDxCcmFuY2hPcHRpb25zPikgPT4gUHVibGlzaEpvYk9wdGlvbnMpIHtcbiAgICB0aGlzLl9qb2JGYWN0b3JpZXMucHVzaCgoYnJhbmNoLCBicmFuY2hPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0gZmFjdG9yeShicmFuY2gsIGJyYW5jaE9wdGlvbnMpO1xuICAgICAgY29uc3Qgam9ibmFtZSA9IGByZWxlYXNlXyR7b3B0cy5uYW1lfWA7XG4gICAgICBpZiAoam9ibmFtZSBpbiB0aGlzLl9qb2JGYWN0b3JpZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgam9iIHdpdGggbmFtZSBcIiR7am9ibmFtZX1cImApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21tYW5kVG9SdW4gPSB0aGlzLmRyeVJ1biA/IGBlY2hvIFwiRFJZIFJVTjogJHtvcHRzLnJ1bn1cImAgOiBvcHRzLnJ1bjs7XG4gICAgICBjb25zdCByZXF1aXJlZEVudiA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICAgIC8vIGpvYkVudiBpcyB0aGUgZW52IHdlIHBhc3MgdG8gdGhlIGdpdGh1YiBqb2IgKHRhc2sgZW52aXJvbm1lbnQgKyBzZWNyZXRzL2V4cHJlc3Npb25zKS5cbiAgICAgIGNvbnN0IGpvYkVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgLi4ub3B0cy5lbnYgfTtcbiAgICAgIGNvbnN0IHdvcmtmbG93RW52RW50cmllcyA9IE9iamVjdC5lbnRyaWVzKG9wdHMud29ya2Zsb3dFbnYgPz8ge30pXG4gICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9IHVuZGVmaW5lZCkgYXMgc3RyaW5nW11bXTtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGV4cHJlc3Npb25dIG9mIHdvcmtmbG93RW52RW50cmllcykge1xuICAgICAgICByZXF1aXJlZEVudi5wdXNoKG5hbWUpO1xuICAgICAgICBqb2JFbnZbbmFtZV0gPSBleHByZXNzaW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wdWJsaXNoVGFza3MpIHtcbiAgICAgICAgY29uc3QgYnJhbmNoU3VmZml4ID0gKGJyYW5jaCA9PT0gJ21haW4nIHx8IGJyYW5jaCA9PT0gJ21hc3RlcicpID8gJycgOiBgOiR7YnJhbmNofWA7XG5cbiAgICAgICAgLy8gZGVmaW5lIGEgdGFzayB3aGljaCBjYW4gYmUgdXNlZCB0aHJvdWdoIGBwcm9qZW4gcHVibGlzaDp4eHhgLlxuICAgICAgICBjb25zdCB0YXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2soYHB1Ymxpc2g6JHtvcHRzLm5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKX0ke2JyYW5jaFN1ZmZpeH1gLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGBQdWJsaXNoIHRoaXMgcGFja2FnZSB0byAke29wdHMucmVnaXN0cnlOYW1lfWAsXG4gICAgICAgICAgZW52OiBvcHRzLmVudixcbiAgICAgICAgICByZXF1aXJlZEVudjogcmVxdWlyZWRFbnYsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGZpcnN0IHZlcmlmeSB0aGF0IHdlIGFyZSBvbiB0aGUgY29ycmVjdCBicmFuY2hcbiAgICAgICAgdGFzay5leGVjKGB0ZXN0IFwiJChnaXQgYnJhbmNoIC0tc2hvdy1jdXJyZW50KVwiID0gXCIke2JyYW5jaH1cImApO1xuXG4gICAgICAgIC8vIHJ1biBjb21tYW5kc1xuICAgICAgICB0YXNrLmV4ZWMoY29tbWFuZFRvUnVuKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RlcHM6IEpvYlN0ZXBbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdEb3dubG9hZCBidWlsZCBhcnRpZmFjdHMnLFxuICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHYyJyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLmFydGlmYWN0TmFtZSxcbiAgICAgICAgICAgIHBhdGg6IEFSVElGQUNUU19ET1dOTE9BRF9ESVIsIC8vIHRoaXMgbXVzdCBiZSBcImRpc3RcIiBmb3IganNpaS1yZWxlYXNlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4ub3B0cy5wcmVQdWJsaXNoU3RlcHMsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnUmVsZWFzZScsXG4gICAgICAgICAgLy8gaXQgd291bGQgaGF2ZSBiZWVuIG5pY2UgaWYgd2UgY291bGQganVzdCBydW4gXCJwcm9qZW4gcHVibGlzaDp4eHhcIiBoZXJlIGJ1dCB0aGF0IGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHRoaXMgam9iIGRvZXMgbm90IGNoZWNrb3V0IHNvdXJjZXNcbiAgICAgICAgICBydW46IGNvbW1hbmRUb1J1bixcbiAgICAgICAgICBlbnY6IGpvYkVudixcbiAgICAgICAgfSxcbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IHBlcm1zID0gb3B0cy5wZXJtaXNzaW9ucyA/PyB7IGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQgfTtcblxuICAgICAgaWYgKHRoaXMuZmFpbHVyZUlzc3VlKSB7XG4gICAgICAgIHN0ZXBzLnB1c2goLi4uW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdFeHRyYWN0IFZlcnNpb24nLFxuICAgICAgICAgICAgaWY6ICcke3sgZmFpbHVyZSgpIH19JyxcbiAgICAgICAgICAgIGlkOiAnZXh0cmFjdC12ZXJzaW9uJyxcbiAgICAgICAgICAgIHJ1bjogJ2VjaG8gXCI6OnNldC1vdXRwdXQgbmFtZT1WRVJTSU9OOjokKGNhdCBkaXN0L3ZlcnNpb24udHh0KVwiJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdDcmVhdGUgSXNzdWUnLFxuICAgICAgICAgICAgaWY6ICcke3sgZmFpbHVyZSgpIH19JyxcbiAgICAgICAgICAgIHVzZXM6ICdpbWpvaG5iby9pc3N1ZS1ib3RAdjMnLFxuICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICBsYWJlbHM6IHRoaXMuZmFpbHVyZUlzc3VlTGFiZWwsXG4gICAgICAgICAgICAgIHRpdGxlOiBgUHVibGlzaGluZyB2XFwke3sgc3RlcHMuZXh0cmFjdC12ZXJzaW9uLm91dHB1dHMuVkVSU0lPTiB9fSB0byAke29wdHMucmVnaXN0cnlOYW1lfSBmYWlsZWRgLFxuICAgICAgICAgICAgICBib2R5OiAnU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS8ke3sgZ2l0aHViLnJlcG9zaXRvcnkgfX0vYWN0aW9ucy9ydW5zLyR7eyBnaXRodWIucnVuX2lkIH19JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgR0lUSFVCX1RPS0VOOiAnJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGVybXMsIHsgaXNzdWVzOiBKb2JQZXJtaXNzaW9uLldSSVRFIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBbam9ibmFtZV06IHtcbiAgICAgICAgICB0b29sczoge1xuICAgICAgICAgICAgbm9kZTogeyB2ZXJzaW9uOiAnMTQueCcgfSxcbiAgICAgICAgICAgIC4uLm9wdHMucHVibGlzaFRvb2xzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmFtZTogYFB1Ymxpc2ggdG8gJHtvcHRzLnJlZ2lzdHJ5TmFtZX1gLFxuICAgICAgICAgIHBlcm1pc3Npb25zOiBwZXJtcyxcbiAgICAgICAgICBpZjogdGhpcy5jb25kaXRpb24sXG4gICAgICAgICAgbmVlZHM6IFt0aGlzLmJ1aWxkSm9iSWRdLFxuICAgICAgICAgIHJ1bnNPbjogdGhpcy5ydW5zT24sXG4gICAgICAgICAgc3RlcHMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBqc2lpUmVsZWFzZUNvbW1hbmQoY29tbWFuZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBucHggLXAganNpaS1yZWxlYXNlQCR7dGhpcy5qc2lpUmVsZWFzZVZlcnNpb259ICR7Y29tbWFuZH1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlY3JldChzZWNyZXROYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGBcXCR7eyBzZWNyZXRzLiR7c2VjcmV0TmFtZX0gfX1gO1xufVxuXG5pbnRlcmZhY2UgUHVibGlzaEpvYk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0XG4gICAqL1xuICByZWFkb25seSBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSByZWdpc3RyeSAoZm9yIGRlc2NyaXB0aW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0cnlOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEpvYiBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvbnM/OiBKb2JQZXJtaXNzaW9ucztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2ggam9iIChzaG91bGQgYmUgbG93ZXJjYXNlKS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdG8gaW5jbHVkZSBvbmx5IGluIHRoZSB3b3JrZmxvdyAoYW5kIG5vdCB0YXNrcykuXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd0Vudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xuXG4gIC8qKlxuICAgKiBTdGVwcyB0byBleGVjdXRlIGJlZm9yZSB0aGUgcmVsZWFzZSBjb21tYW5kIGZvciBwcmVwYXJpbmcgdGhlIGRpc3QvIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHByZVB1Ymxpc2hTdGVwczogSm9iU3RlcFtdO1xuXG4gIC8qKlxuICAgKiBUb29scyBzZXR1cCBmb3IgdGhlIHdvcmtmbG93LlxuICAgKiBAZGVmYXVsdCAtIG5vIHRvb2xzIGFyZSBpbnN0YWxsZWRcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2hUb29scz86IFRvb2xzO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uUHVibGlzaE9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHJlUHVibGlzaFN0ZXBzPzogSm9iU3RlcFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHVibGlzaFRvb2xzPzogVG9vbHM7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgSnNpaVJlbGVhc2VOcG0gZXh0ZW5kcyBOcG1QdWJsaXNoT3B0aW9ucyB7IH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBOcG1QdWJsaXNoT3B0aW9ucyBleHRlbmRzIENvbW1vblB1Ymxpc2hPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkaXN0VGFnPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByZWdpc3RyeT86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBucG1Ub2tlblNlY3JldD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjb2RlQXJ0aWZhY3RPcHRpb25zPzogQ29kZUFydGlmYWN0T3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2RlQXJ0aWZhY3RPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFjY2Vzc0tleUlkU2VjcmV0Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgc2VjcmV0QWNjZXNzS2V5U2VjcmV0Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByb2xlVG9Bc3N1bWU/OiBzdHJpbmc7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIEpzaWlSZWxlYXNlUHlQaSBleHRlbmRzIFB5UGlQdWJsaXNoT3B0aW9ucyB7IH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgUHlQaVB1Ymxpc2hPcHRpb25zIGV4dGVuZHMgQ29tbW9uUHVibGlzaE9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB0d2luZVJlZ2lzdHJ5VXJsPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdHdpbmVVc2VybmFtZVNlY3JldD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdHdpbmVQYXNzd29yZFNlY3JldD86IHN0cmluZztcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIEpzaWlSZWxlYXNlTnVnZXQgZXh0ZW5kcyBOdWdldFB1Ymxpc2hPcHRpb25zIHsgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIE51Z2V0UHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBDb21tb25QdWJsaXNoT3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG51Z2V0QXBpS2V5U2VjcmV0Pzogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgSnNpaVJlbGVhc2VNYXZlbiBleHRlbmRzIE1hdmVuUHVibGlzaE9wdGlvbnMgeyB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgTWF2ZW5QdWJsaXNoT3B0aW9ucyBleHRlbmRzIENvbW1vblB1Ymxpc2hPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbWF2ZW5FbmRwb2ludD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbWF2ZW5TZXJ2ZXJJZD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBtYXZlblJlcG9zaXRvcnlVcmw/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG1hdmVuR3BnUHJpdmF0ZUtleVNlY3JldD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbWF2ZW5HcGdQcml2YXRlS2V5UGFzc3BocmFzZT86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbWF2ZW5Vc2VybmFtZT86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG1hdmVuUGFzc3dvcmQ/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbWF2ZW5TdGFnaW5nUHJvZmlsZUlkPzogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgR29QdWJsaXNoT3B0aW9ucyBleHRlbmRzIENvbW1vblB1Ymxpc2hPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBnaXRodWJUb2tlblNlY3JldD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGdpdGh1YlJlcG8/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZ2l0QnJhbmNoPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZ2l0VXNlck5hbWU/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBnaXRVc2VyRW1haWw/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZ2l0Q29tbWl0TWVzc2FnZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFZlcnNpb25BcnRpZmFjdE9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdmVyc2lvbkZpbGU6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcmVsZWFzZVRhZ0ZpbGU6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY2hhbmdlbG9nRmlsZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2YWx1YXRlcyBpZiB0aGUgYHJlZ2lzdHJ5VXJsYCBpcyBhIEFXUyBDb2RlQXJ0aWZhY3QgcmVnaXN0cnkuXG4gKiBAcGFyYW0gcmVnaXN0cnlVcmwgdXJsIG9mIHJlZ2lzdHJ5XG4gKiBAcmV0dXJucyB0cnVlIGZvciBBV1MgQ29kZUFydGlmYWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0F3c0NvZGVBcnRpZmFjdFJlZ2lzdHJ5KHJlZ2lzdHJ5VXJsOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIHJlZ2lzdHJ5VXJsICYmIEFXU19DT0RFQVJUSUZBQ1RfUkVHSVNUUllfUkVHRVgudGVzdChyZWdpc3RyeVVybCk7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2VzUHVibGlzaE9wdGlvbnMgZXh0ZW5kcyBWZXJzaW9uQXJ0aWZhY3RPcHRpb25zLCBDb21tb25QdWJsaXNoT3B0aW9ucyB7IH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBHaXRQdWJsaXNoT3B0aW9ucyBleHRlbmRzIFZlcnNpb25BcnRpZmFjdE9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHByb2plY3RDaGFuZ2Vsb2dGaWxlPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGdpdEJyYW5jaD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGdpdFB1c2hDb21tYW5kPzogc3RyaW5nO1xufVxuXG50eXBlIFB1Ymxpc2hKb2JGYWN0b3J5ID0gKGJyYW5jaDogc3RyaW5nLCBicmFuY2hPcHRpb25zOiBQYXJ0aWFsPEJyYW5jaE9wdGlvbnM+KSA9PiBSZWNvcmQ8c3RyaW5nLCBKb2I+O1xuIl19
@@ -84,5 +84,5 @@ class ReleaseTrigger {
84
84
  }
85
85
  exports.ReleaseTrigger = ReleaseTrigger;
86
86
  _a = JSII_RTTI_SYMBOL_1;
87
- ReleaseTrigger[_a] = { fqn: "projen.release.ReleaseTrigger", version: "0.45.4" };
87
+ ReleaseTrigger[_a] = { fqn: "projen.release.ReleaseTrigger", version: "0.46.3" };
88
88
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZS10cmlnZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlbGVhc2UvcmVsZWFzZS10cmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFpREEsTUFBYSxjQUFjO0lBeUN6QixZQUFvQixVQUFpQyxFQUFFOztRQUNyRCxJQUFJLENBQUMsWUFBWSxTQUFHLE9BQU8sQ0FBQyxVQUFVLG1DQUFJLEtBQUssQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztJQUMvQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBNUNNLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBZ0MsRUFBRTs7UUFDckQsSUFBSSxhQUFhLENBQUM7UUFFbEIsVUFBSSxPQUFPLENBQUMsU0FBUyxtQ0FBSSxJQUFJLEVBQUU7WUFDN0IsYUFBYSxTQUFHLE9BQU8sQ0FBQyxhQUFhLG1DQUFJLGNBQWMsQ0FBQztTQUN6RDtRQUVELE9BQU8sSUFBSSxjQUFjLENBQUM7WUFDeEIsYUFBYSxFQUFFLGFBQWE7WUFDNUIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjO1NBQ3ZDLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7Ozs7OztJQUdNLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBZ0M7UUFDdEQsT0FBTyxJQUFJLGNBQWMsQ0FBQztZQUN4QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7Ozs7SUFHTSxNQUFNLENBQUMsVUFBVTtRQUN0QixPQUFPLElBQUksY0FBYyxDQUFDO1lBQ3hCLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7OztJQXNCRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQzs7QUFuREgsd0NBb0RDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZWRSZWxlYXNlT3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHNjaGVkdWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFudWFsUmVsZWFzZU9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjaGFuZ2Vsb2c/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjaGFuZ2Vsb2dQYXRoPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZ2l0UHVzaENvbW1hbmQ/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSZWxlYXNlVHJpZ2dlck9wdGlvbnMge1xuICAvKipcbiAgICogUHJvamVjdC1sZXZlbCBjaGFuZ2Vsb2cgZmlsZSBwYXRoLlxuICAgKlxuICAgKiBJZ25vcmVkIGlmIGBjaGFuZ2Vsb2dgIGlzIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2Vsb2dQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250aW51b3VzIHJlbGVhc2VzLCB3aGljaCB3aWxsIHJlbGVhc2UgZXZlcnkgY29tbWl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGludW91cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENyb24gc2NoZWR1bGUgZm9yIHJlbGVhc2UuXG4gICAqXG4gICAqIE9ubHkgZGVmaW5lZCBpZiB0aGlzIGlzIGEgc2NoZWR1bGVkIHJlbGVhc2UuXG4gICAqXG4gICAqIEBleGFtcGxlICcwIDE3ICogKiAqJyAtIGV2ZXJ5IGRheSBhdCA1IHBtXG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZT86IHN0cmluZztcblxuICAvKipcbiAgICogT3ZlcnJpZGUgZ2l0LXB1c2ggY29tbWFuZC5cbiAgICpcbiAgICogU2V0IHRvIGFuIGVtcHR5IHN0cmluZyB0byBkaXNhYmxlIHB1c2hpbmcuXG4gICAqL1xuICByZWFkb25seSBnaXRQdXNoQ29tbWFuZD86IHN0cmluZztcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgUmVsZWFzZVRyaWdnZXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBzdGF0aWMgbWFudWFsKG9wdGlvbnM6IE1hbnVhbFJlbGVhc2VPcHRpb25zID0ge30pIHtcbiAgICBsZXQgY2hhbmdlbG9nUGF0aDtcblxuICAgIGlmIChvcHRpb25zLmNoYW5nZWxvZyA/PyB0cnVlKSB7XG4gICAgICBjaGFuZ2Vsb2dQYXRoID0gb3B0aW9ucy5jaGFuZ2Vsb2dQYXRoID8/ICdDSEFOR0VMT0cubWQnO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVsZWFzZVRyaWdnZXIoe1xuICAgICAgY2hhbmdlbG9nUGF0aDogY2hhbmdlbG9nUGF0aCxcbiAgICAgIGdpdFB1c2hDb21tYW5kOiBvcHRpb25zLmdpdFB1c2hDb21tYW5kLFxuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHN0YXRpYyBzY2hlZHVsZWQob3B0aW9uczogU2NoZWR1bGVkUmVsZWFzZU9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IFJlbGVhc2VUcmlnZ2VyKHtcbiAgICAgIHNjaGVkdWxlOiBvcHRpb25zLnNjaGVkdWxlLFxuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgc3RhdGljIGNvbnRpbnVvdXMoKSB7XG4gICAgcmV0dXJuIG5ldyBSZWxlYXNlVHJpZ2dlcih7XG4gICAgICBjb250aW51b3VzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgY2hhbmdlbG9nUGF0aD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgc2NoZWR1bGU/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGlzQ29udGludW91czogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGdpdFB1c2hDb21tYW5kPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3Iob3B0aW9uczogUmVsZWFzZVRyaWdnZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmlzQ29udGludW91cyA9IG9wdGlvbnMuY29udGludW91cyA/PyBmYWxzZTtcbiAgICB0aGlzLnNjaGVkdWxlID0gb3B0aW9ucy5zY2hlZHVsZTtcbiAgICB0aGlzLmNoYW5nZWxvZ1BhdGggPSBvcHRpb25zLmNoYW5nZWxvZ1BhdGg7XG4gICAgdGhpcy5naXRQdXNoQ29tbWFuZCA9IG9wdGlvbnMuZ2l0UHVzaENvbW1hbmQ7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGdldCBpc01hbnVhbCgpIHtcbiAgICByZXR1cm4gISh0aGlzLmlzQ29udGludW91cyB8fCB0aGlzLnNjaGVkdWxlKTtcbiAgfVxufVxuIl19
@@ -31,13 +31,6 @@ export interface ReleaseProjectOptions {
31
31
  * @experimental
32
32
  */
33
33
  readonly releaseTrigger?: ReleaseTrigger;
34
- /**
35
- * (experimental) A directory which will contain artifacts to be published to npm.
36
- *
37
- * @default "dist"
38
- * @experimental
39
- */
40
- readonly artifactsDirectory?: string;
41
34
  /**
42
35
  * (experimental) A set of workflow steps to execute in order to setup the workflow container.
43
36
  *
@@ -177,6 +170,13 @@ export interface ReleaseProjectOptions {
177
170
  * @experimental
178
171
  */
179
172
  readonly publishTasks?: boolean;
173
+ /**
174
+ * (experimental) Instead of actually publishing to package managers, just print the publishing command.
175
+ *
176
+ * @default false
177
+ * @experimental
178
+ */
179
+ readonly publishDryRun?: boolean;
180
180
  }
181
181
  /**
182
182
  * (experimental) Options for `Release`.
@@ -221,6 +221,13 @@ export interface ReleaseOptions extends ReleaseProjectOptions {
221
221
  * @experimental
222
222
  */
223
223
  readonly githubRelease?: boolean;
224
+ /**
225
+ * (experimental) A directory which will contain build artifacts.
226
+ *
227
+ * @default "dist"
228
+ * @experimental
229
+ */
230
+ readonly artifactsDirectory: string;
224
231
  }
225
232
  /**
226
233
  * (experimental) Manages releases (currently through GitHub workflows).
@@ -240,7 +247,6 @@ export declare class Release extends Component {
240
247
  private readonly version;
241
248
  private readonly postBuildSteps;
242
249
  private readonly antitamper;
243
- private readonly artifactsDirectory;
244
250
  private readonly versionFile;
245
251
  private readonly releaseTrigger;
246
252
  private readonly preBuildSteps;
@@ -250,6 +256,12 @@ export declare class Release extends Component {
250
256
  private readonly defaultBranch;
251
257
  private readonly github?;
252
258
  private readonly workflowRunsOn?;
259
+ /**
260
+ * (experimental) Location of build artifacts.
261
+ *
262
+ * @experimental
263
+ */
264
+ readonly artifactsDirectory: string;
253
265
  /**
254
266
  * @experimental
255
267
  */