@xpertss/projen-types 0.0.16 → 0.0.18

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 (34) hide show
  1. package/.jsii +11 -11
  2. package/API.md +3 -3
  3. package/README.md +74 -5
  4. package/lib/actions/action-build-workflow.js +12 -6
  5. package/lib/actions/action-dogfood-workflow.js +1 -1
  6. package/lib/actions/action-sonar-workflow.js +1 -1
  7. package/lib/actions/github-action-project.js +1 -1
  8. package/lib/cdk/app-runtime-scaffold.js +1 -1
  9. package/lib/cdk/cdk-app-project.js +1 -1
  10. package/lib/cdk/cdk-infra-project.js +1 -1
  11. package/lib/cdk/cdk-typescript-base.js +1 -1
  12. package/lib/cdk/components/ecr-ecs-constructs.js +1 -1
  13. package/lib/cdk/components/edge-networking-constructs.js +1 -1
  14. package/lib/cdk/database-component.js +1 -1
  15. package/lib/common/projen-drift-check-workflow.d.ts +4 -2
  16. package/lib/common/projen-drift-check-workflow.js +3 -3
  17. package/lib/common/workflow-change-notice-workflow.js +1 -1
  18. package/lib/java/components/cdk-deploy-hook.js +1 -1
  19. package/lib/java/components/code-index-workflow.js +1 -1
  20. package/lib/java/components/docker-publish.js +1 -1
  21. package/lib/java/components/flyway-migration.js +1 -1
  22. package/lib/java/components/github-packages-publish.js +1 -1
  23. package/lib/java/components/maven-central-publish.js +1 -1
  24. package/lib/java/components/maven-upgrade-report.js +1 -1
  25. package/lib/java/java-app-project.js +1 -1
  26. package/lib/java/java-library-project.js +1 -1
  27. package/lib/java/java-maven-base.js +6 -6
  28. package/lib/java/java-service-project.js +1 -1
  29. package/lib/java/java-spring-boot-project.js +3 -3
  30. package/lib/java/java-versions.js +2 -2
  31. package/lib/java/maven/maven-module.js +1 -1
  32. package/lib/java/maven/maven-pom.d.ts +7 -0
  33. package/lib/java/maven/maven-pom.js +29 -15
  34. package/package.json +1 -1
@@ -58,7 +58,7 @@ function key(c) {
58
58
  * `executions` and `dependencies` appended.
59
59
  */
60
60
  class MavenPom extends projen_1.Component {
61
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenPom", version: "0.0.16" };
61
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@xpertss/projen-types.MavenPom", version: "0.0.18" };
62
62
  /** Path of the pom, relative to the project root. */
63
63
  filePath;
64
64
  groupId;
@@ -241,7 +241,12 @@ class MavenPom extends projen_1.Component {
241
241
  },
242
242
  });
243
243
  }
244
- synthPom() {
244
+ /**
245
+ * Renders `<plugins>` and `<pluginManagement>`. With `managePluginVersions`,
246
+ * a versioned plugin's version moves into `<pluginManagement>` (unless one
247
+ * is already managed there) and the plugin itself is rendered versionless.
248
+ */
249
+ renderPlugins() {
245
250
  const managedPlugins = new Map(this.managedPlugins);
246
251
  const plugins = [];
247
252
  for (const p of this.plugins.values()) {
@@ -256,11 +261,18 @@ class MavenPom extends projen_1.Component {
256
261
  plugins.push(renderPlugin(p.coords, p.options));
257
262
  }
258
263
  }
264
+ const pluginManagement = [...managedPlugins.values()].map((p) => renderPlugin(p.coords, p.options));
265
+ return { plugins, pluginManagement };
266
+ }
267
+ renderDependencyManagement() {
259
268
  const managed = [
260
269
  ...this.boms.map((b) => ({ ...renderCoords(b), type: 'pom', scope: 'import' })),
261
270
  ...[...this.managedDeps.values()].map(renderDependency),
262
271
  ];
263
- const pluginManagement = [...managedPlugins.values()].map((p) => renderPlugin(p.coords, p.options));
272
+ return managed.length ? { dependencies: { dependency: managed } } : undefined;
273
+ }
274
+ synthPom() {
275
+ const { plugins, pluginManagement } = this.renderPlugins();
264
276
  // JSON round-trip drops every `undefined` field, so absent sections are
265
277
  // omitted rather than written as empty elements.
266
278
  return JSON.parse(JSON.stringify({
@@ -284,25 +296,27 @@ class MavenPom extends projen_1.Component {
284
296
  pluginRepositories: this.pluginRepositories.length
285
297
  ? { pluginRepository: this.pluginRepositories }
286
298
  : undefined,
287
- dependencyManagement: managed.length
288
- ? { dependencies: { dependency: managed } }
289
- : undefined,
299
+ dependencyManagement: this.renderDependencyManagement(),
290
300
  dependencies: this.deps.size
291
301
  ? { dependency: [...this.deps.values()].map(renderDependency) }
292
302
  : undefined,
293
- build: plugins.length || pluginManagement.length
294
- ? {
295
- pluginManagement: pluginManagement.length
296
- ? { plugins: { plugin: pluginManagement } }
297
- : undefined,
298
- plugins: plugins.length ? { plugin: plugins } : undefined,
299
- }
300
- : undefined,
303
+ build: renderBuild(plugins, pluginManagement),
301
304
  },
302
305
  }));
303
306
  }
304
307
  }
305
308
  exports.MavenPom = MavenPom;
309
+ function renderBuild(plugins, pluginManagement) {
310
+ if (!plugins.length && !pluginManagement.length) {
311
+ return undefined;
312
+ }
313
+ return {
314
+ pluginManagement: pluginManagement.length
315
+ ? { plugins: { plugin: pluginManagement } }
316
+ : undefined,
317
+ plugins: plugins.length ? { plugin: plugins } : undefined,
318
+ };
319
+ }
306
320
  function mergeVersion(existing, added, section) {
307
321
  if (existing.version && added.version && existing.version !== added.version) {
308
322
  throw new Error(`${key(added)} is pinned at two different versions in ${section} (${existing.version} and ${added.version}). Pin it once.`);
@@ -334,4 +348,4 @@ function renderPlugin(c, options) {
334
348
  : undefined,
335
349
  };
336
350
  }
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF2ZW4tcG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2phdmEvbWF2ZW4vbWF2ZW4tcG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTJCQSx3Q0FjQztBQUdELGdEQU1DOztBQWxERCxtQ0FBMkQ7QUFFM0QsTUFBTSxhQUFhLEdBQUc7SUFDcEIscUJBQXFCLEVBQ25CLCtFQUErRTtJQUNqRixRQUFRLEVBQUUsbUNBQW1DO0lBQzdDLFlBQVksRUFBRSwyQ0FBMkM7Q0FDMUQsQ0FBQztBQUVGLDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsZ0VBQWdFO0FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsa0NBQWtDLENBQUM7QUFTN0Q7Ozs7O0dBS0c7QUFDSCxTQUFnQixjQUFjLENBQUMsSUFBWTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakQsTUFBTSxJQUFJLEtBQUssQ0FDYix1QkFBdUIsSUFBSSxtRkFBbUYsQ0FDL0csQ0FBQztJ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b3J0IHsgQ29tcG9uZW50LCBQcm9qZWN0LCBYbWxGaWxlLCBqYXZhIH0gZnJvbSAncHJvamVuJztcblxuY29uc3QgUE9NX1hNTF9BVFRSUyA9IHtcbiAgJ0B4c2k6c2NoZW1hTG9jYXRpb24nOlxuICAgICdodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCcsXG4gICdAeG1sbnMnOiAnaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wJyxcbiAgJ0B4bWxuczp4c2knOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnLFxufTtcblxuLy8gQ2hhcmFjdGVycyB0aGF0IG1ha2UgYSB2ZXJzaW9uIGEgcmFuZ2Ugb3IgYSBzZW12ZXIgZXhwcmVzc2lvbiByYXRoZXIgdGhhblxuLy8gb25lIGV4YWN0IHZlcnNpb24uIE1hdmVuIHJhbmdlcyBtYWtlIGJ1aWxkcyBub24tcmVwcm9kdWNpYmxlLCBzbyBhIHNwZWNcbi8vIGNhcnJ5aW5nIG9uZSBpcyByZWplY3RlZCBvdXRyaWdodCBpbnN0ZWFkIG9mIGJlaW5nIGNvbnZlcnRlZC5cbmNvbnN0IE5PTl9FWEFDVF9WRVJTSU9OID0gL1tcXF5+KlxcW1xcXSgpLDw+XFxzXXxeeCR8XFwueChcXC58JCkvaTtcblxuLyoqIFBhcnNlZCBgZ3JvdXBJZC9hcnRpZmFjdElkW0B2ZXJzaW9uXWAgc3BlYy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF2ZW5Db29yZGluYXRlcyB7XG4gIHJlYWRvbmx5IGdyb3VwSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgYXJ0aWZhY3RJZDogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcnNlcyBgZ3JvdXBJZC9hcnRpZmFjdElkW0B2ZXJzaW9uXWAuIFRoZSB2ZXJzaW9uLCB3aGVuIHByZXNlbnQsIG11c3QgYmVcbiAqIG9uZSBleGFjdCB2ZXJzaW9uIC0gYSByYW5nZSAoYFsxLDIpYCksIGEgc2VtdmVyIHJhbmdlIChgXjFgLCBgfjEuMmApLCBvciBhXG4gKiB3aWxkY2FyZCB0aHJvd3MsIGJlY2F1c2UgYSByYW5nZSByZXNvbHZlcyBkaWZmZXJlbnRseSBvdmVyIHRpbWUgYW5kIG1ha2VzXG4gKiB0aGUgYnVpbGQgbm9uLXJlcHJvZHVjaWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWF2ZW5TcGVjKHNwZWM6IHN0cmluZyk6IE1hdmVuQ29vcmRpbmF0ZXMge1xuICBjb25zdCBhdCA9IHNwZWMuaW5kZXhPZignQCcpO1xuICBjb25zdCBuYW1lID0gYXQgPT09IC0xID8gc3BlYyA6IHNwZWMuc2xpY2UoMCwgYXQpO1xuICBjb25zdCB2ZXJzaW9uID0gYXQgPT09IC0xID8gdW5kZWZpbmVkIDogc3BlYy5zbGljZShhdCArIDEpO1xuICBjb25zdCBwYXJ0cyA9IG5hbWUuc3BsaXQoJy8nKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMiB8fCAhcGFydHNbMF0gfHwgIXBhcnRzWzFdKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgTWF2ZW4gc3BlYyBcIiR7c3BlY31cIi4gRm9ybWF0IGlzIFwiPGdyb3VwSWQ+LzxhcnRpZmFjdElkPltAPHZlcnNpb24+XVwiLCBlLmcuIFwib3JnLnlhbWwvc25ha2V5YW1sQDIuNFwiLmAsXG4gICAgKTtcbiAgfVxuICBpZiAodmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXNzZXJ0RXhhY3RWZXJzaW9uKHZlcnNpb24sIHNwZWMpO1xuICB9XG4gIHJldHVybiB7IGdyb3VwSWQ6IHBhcnRzWzBdLCBhcnRpZmFjdElkOiBwYXJ0c1sxXSwgdmVyc2lvbiB9O1xufVxuXG4vKiogVGhyb3dzIHVubGVzcyBgdmVyc2lvbmAgaXMgb25lIGV4YWN0IHZlcnNpb24gKG5vIHJhbmdlLCBubyB3aWxkY2FyZCkuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RXhhY3RWZXJzaW9uKHZlcnNpb246IHN0cmluZywgY29udGV4dDogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghdmVyc2lvbiB8fCBOT05fRVhBQ1RfVkVSU0lPTi50ZXN0KHZlcnNpb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFwiJHtjb250ZXh0fVwiIHVzZXMgdmVyc2lvbiBcIiR7dmVyc2lvbn1cIiwgd2hpY2ggaXMgbm90IGFuIGV4YWN0IHZlcnNpb24uIEdlbmVyYXRlZCBwb21zIG5ldmVyIGNvbnRhaW4gdmVyc2lvbiByYW5nZXM6IHBpbiBvbmUgZXhhY3QgdmVyc2lvbiAoZS5nLiBcIjEuMi4zXCIpLCBvciBvbWl0IHRoZSB2ZXJzaW9uIHdoZW4gYSBCT00gbWFuYWdlcyBpdC5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqIE9wdGlvbnMgZm9yIGBNYXZlblBvbWAuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hdmVuUG9tT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQYXRoIG9mIHRoZSBwb20sIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHJvb3QuXG4gICAqIEBkZWZhdWx0IFwicG9tLnhtbFwiXG4gICAqL1xuICByZWFkb25seSBmaWxlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogYGdyb3VwSWRgLiBPbWl0IGluIGEgbW9kdWxlIHBvbSB0byBpbmhlcml0IGl0IGZyb20gYDxwYXJlbnQ+YC5cbiAgICogQGRlZmF1bHQgLSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50XG4gICAqL1xuICByZWFkb25seSBncm91cElkPzogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IGFydGlmYWN0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogYHZlcnNpb25gLiBPbWl0IGluIGEgbW9kdWxlIHBvbSB0byBpbmhlcml0IGl0IGZyb20gYDxwYXJlbnQ+YC5cbiAgICogQGRlZmF1bHQgLSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50XG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCBcImphclwiICovXG4gIHJlYWRvbmx5IHBhY2thZ2luZz86IHN0cmluZztcblxuICAvKiogQGRlZmF1bHQgLSBub25lICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIEBkZWZhdWx0IC0gbm9uZSAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKiogQGRlZmF1bHQgLSBub25lICovXG4gIHJlYWRvbmx5IHVybD86IHN0cmluZztcblxuICAvKiogQGRlZmF1bHQgLSBubyBwYXJlbnQgKi9cbiAgcmVhZG9ubHkgcGFyZW50PzogamF2YS5QYXJlbnRQb207XG59XG5cbmludGVyZmFjZSBEZXBlbmRlbmN5RW50cnkge1xuICByZWFkb25seSBjb29yZHM6IE1hdmVuQ29vcmRpbmF0ZXM7XG4gIHJlYWRvbmx5IHNjb3BlPzogc3RyaW5nO1xuICByZWFkb25seSB0eXBlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGx1Z2luRW50cnkge1xuICByZWFkb25seSBjb29yZHM6IE1hdmVuQ29vcmRpbmF0ZXM7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IGphdmEuUGx1Z2luT3B0aW9ucztcbn1cblxuZnVuY3Rpb24ga2V5KGM6IE1hdmVuQ29vcmRpbmF0ZXMpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Yy5ncm91cElkfS8ke2MuYXJ0aWZhY3RJZH1gO1xufVxuXG4vKipcbiAqIEEgYHBvbS54bWxgIHdyaXR0ZW4gYnkgdGhpcyBwYWNrYWdlIChyYXRoZXIgdGhhbiBwcm9qZW4ncyBgamF2YS5Qb21gKS5cbiAqXG4gKiBTdXBwb3J0cyBgPG1vZHVsZXM+YCwgYDxkZXBlbmRlbmN5TWFuYWdlbWVudD5gIChpbmNsdWRpbmcgQk9NIGltcG9ydHMpLFxuICogYDxwbHVnaW5NYW5hZ2VtZW50PmAsIGFuZCB2ZXJzaW9ubGVzcyBkZXBlbmRlbmNpZXMvcGx1Z2lucyAtIHdoYXQgYSBNYXZlblxuICogcmVhY3RvciBuZWVkcyBhbmQgYGphdmEuUG9tYCBjYW5ub3QgZXhwcmVzcy4gRXZlcnkgdmVyc2lvbiBpdCB3cml0ZXMgaXNcbiAqIGV4YWN0OyBhIHNwZWMgY2FycnlpbmcgYSByYW5nZSB0aHJvd3MuIFBsdWdpbiBleGVjdXRpb25zIHJlbmRlciBvbmVcbiAqIGA8Z29hbHM+YCBlbGVtZW50IHBlciBleGVjdXRpb24gKHByb2plbidzIGBqYXZhLlBvbWAgcmVwZWF0cyBgPGdvYWxzPmAsXG4gKiB3aGljaCBNYXZlbiAzLjkgcmVqZWN0cyBhcyBub24tcGFyc2VhYmxlKS5cbiAqXG4gKiBBZGRpbmcgdGhlIHNhbWUgYGdyb3VwSWQvYXJ0aWZhY3RJZGAgdHdpY2UgbWVyZ2VzOiBhIGxhdGVyIHZlcnNpb25cbiAqIHJlcGxhY2VzIGFuIGVhcmxpZXIgb25lIG9ubHkgaWYgdGhlIGVhcmxpZXIgaGFkIG5vbmUgKHR3byBkaWZmZXJlbnRcbiAqIHZlcnNpb25zIHRocm93KSwgYW5kIHBsdWdpbiBvcHRpb25zIGFyZSBtZXJnZWQgLSBgY29uZmlndXJhdGlvbmAgc2hhbGxvd2x5LFxuICogYGV4ZWN1dGlvbnNgIGFuZCBgZGVwZW5kZW5jaWVzYCBhcHBlbmRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1hdmVuUG9tIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqIFBhdGggb2YgdGhlIHBvbSwgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBncm91cElkPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgYXJ0aWZhY3RJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHVybD86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmVudD86IGphdmEuUGFyZW50UG9tO1xuXG4gIC8qKiBNYXZlbiBwYWNrYWdpbmcgKGBqYXJgLCBgcG9tYCwgLi4uKS4gKi9cbiAgcHVibGljIHBhY2thZ2luZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSB2ZXJzaW9ucyBvZiBgPHBsdWdpbnM+YCBlbnRyaWVzIGFyZSB3cml0dGVuIGludG9cbiAgICogYDxwbHVnaW5NYW5hZ2VtZW50PmAgYW5kIHRoZSBgPHBsdWdpbnM+YCBlbnRyaWVzIHN0YXkgdmVyc2lvbmxlc3MgLSB0aGVcbiAgICogc2hhcGUgYSByZWFjdG9yIHBhcmVudCB3YW50cywgc28gbW9kdWxlcyBjYW4gcmVkZWNsYXJlIGEgcGx1Z2luIHdpdGhvdXRcbiAgICogcmVwZWF0aW5nIGl0cyB2ZXJzaW9uLlxuICAgKi9cbiAgcHVibGljIG1hbmFnZVBsdWdpblZlcnNpb25zID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kdWxlczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBib21zOiBNYXZlbkNvb3JkaW5hdGVzW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYW5hZ2VkRGVwcyA9IG5ldyBNYXA8c3RyaW5nLCBEZXBlbmRlbmN5RW50cnk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwcyA9IG5ldyBNYXA8c3RyaW5nLCBEZXBlbmRlbmN5RW50cnk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWFuYWdlZFBsdWdpbnMgPSBuZXcgTWFwPHN0cmluZywgUGx1Z2luRW50cnk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2lucyA9IG5ldyBNYXA8c3RyaW5nLCBQbHVnaW5FbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvc2l0b3JpZXM6IGphdmEuTWF2ZW5SZXBvc2l0b3J5W10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5SZXBvc2l0b3JpZXM6IGphdmEuTWF2ZW5SZXBvc2l0b3J5W10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBNYXZlblBvbU9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgICB0aGlzLmZpbGVQYXRoID0gb3B0aW9ucy5maWxlUGF0aCA/PyAncG9tLnhtbCc7XG4gICAgdGhpcy5ncm91cElkID0gb3B0aW9ucy5ncm91cElkO1xuICAgIHRoaXMuYXJ0aWZhY3RJZCA9IG9wdGlvbnMuYXJ0aWZhY3RJZDtcbiAgICB0aGlzLnZlcnNpb24gPSBvcHRpb25zLnZlcnNpb247XG4gICAgdGhpcy5wYWNrYWdpbmcgPSBvcHRpb25zLnBhY2thZ2luZyA/PyAnamFyJztcbiAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybDtcbiAgICB0aGlzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICAgIGlmICh0aGlzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXNzZXJ0RXhhY3RWZXJzaW9uKHRoaXMudmVyc2lvbiwgYCR7dGhpcy5hcnRpZmFjdElkfSB2ZXJzaW9uYCk7XG4gICAgfVxuXG4gICAgbmV3IFhtbEZpbGUocHJvamVjdCwgdGhpcy5maWxlUGF0aCwgeyBvYmo6ICgpID0+IHRoaXMuc3ludGhQb20oKSB9KTtcbiAgfVxuXG4gIC8qKiBTZXRzIGEgYDxwcm9wZXJ0aWVzPmAgZW50cnkuICovXG4gIHB1YmxpYyBhZGRQcm9wZXJ0eShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BlcnRpZXNbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBBZGRzIGEgYDxtb2R1bGU+YCAoYSBwYXRoIHJlbGF0aXZlIHRvIHRoaXMgcG9tJ3MgZGlyZWN0b3J5KS4gKi9cbiAgcHVibGljIGFkZE1vZHVsZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubW9kdWxlcy5pbmNsdWRlcyhwYXRoKSkge1xuICAgICAgdGhpcy5tb2R1bGVzLnB1c2gocGF0aCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYSBCT00gaW50byBgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PmAgKGB0eXBlPXBvbWAsXG4gICAqIGBzY29wZT1pbXBvcnRgKS4gQk9NcyBhcmUgd3JpdHRlbiBpbiB0aGUgb3JkZXIgYWRkZWQsIGJlZm9yZSBldmVyeSBvdGhlclxuICAgKiBtYW5hZ2VkIGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRAdmVyc2lvbmAgLSB0aGUgdmVyc2lvbiBpcyByZXF1aXJlZFxuICAgKi9cbiAgcHVibGljIGFkZEJvbShzcGVjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb29yZHMgPSBwYXJzZU1hdmVuU3BlYyhzcGVjKTtcbiAgICBpZiAoIWNvb3Jkcy52ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJPTSBcIiR7c3BlY31cIiBuZWVkcyBhIHZlcnNpb246IGEgQk9NIGltcG9ydCBjYW5ub3QgYmUgdmVyc2lvbmxlc3MuYCk7XG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5ib21zLmZpbmRJbmRleCgoYikgPT4ga2V5KGIpID09PSBrZXkoY29vcmRzKSk7XG4gICAgaWYgKGV4aXN0aW5nICE9PSAtMSkge1xuICAgICAgdGhpcy5ib21zW2V4aXN0aW5nXSA9IGNvb3JkcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib21zLnB1c2goY29vcmRzKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVtb3ZlcyBhIEJPTSBpbXBvcnQgYWRkZWQgYnkgYGFkZEJvbWAsIGlmIHByZXNlbnQuICovXG4gIHB1YmxpYyByZW1vdmVCb20oY29vcmRpbmF0ZXM6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5ib21zLmZpbmRJbmRleCgoYikgPT4ga2V5KGIpID09PSBjb29yZGluYXRlcyk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5ib21zLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBpbnMgYSB2ZXJzaW9uIGluIGA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+YCB3aXRob3V0IGFkZGluZyB0aGVcbiAgICogZGVwZW5kZW5jeSBpdHNlbGYuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRAdmVyc2lvbmAgLSB0aGUgdmVyc2lvbiBpcyByZXF1aXJlZFxuICAgKi9cbiAgcHVibGljIGFkZE1hbmFnZWREZXBlbmRlbmN5KHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvb3JkcyA9IHBhcnNlTWF2ZW5TcGVjKHNwZWMpO1xuICAgIGlmICghY29vcmRzLnZlcnNpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWFuYWdlZCBkZXBlbmRlbmN5IFwiJHtzcGVjfVwiIG5lZWRzIGEgdmVyc2lvbi5gKTtcbiAgICB9XG4gICAgdGhpcy5tZXJnZURlcGVuZGVuY3kodGhpcy5tYW5hZ2VkRGVwcywgeyBjb29yZHMgfSwgJ2RlcGVuZGVuY3lNYW5hZ2VtZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGRlcGVuZGVuY3kgKGNvbXBpbGUgc2NvcGUgdW5sZXNzIGBzY29wZWAgaXMgZ2l2ZW4pLlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBgZ3JvdXBJZC9hcnRpZmFjdElkW0B2ZXJzaW9uXWAgLSBvbWl0IHRoZSB2ZXJzaW9uIHdoZW4gYSBCT01cbiAgICogb3IgdGhlIHBhcmVudCdzIGA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+YCBtYW5hZ2VzIGl0XG4gICAqIEBwYXJhbSBzY29wZSBNYXZlbiBzY29wZSAoYHRlc3RgLCBgcHJvdmlkZWRgLCBgcnVudGltZWAsIC4uLilcbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KHNwZWM6IHN0cmluZywgc2NvcGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1lcmdlRGVwZW5kZW5jeShcbiAgICAgIHRoaXMuZGVwcyxcbiAgICAgIHsgY29vcmRzOiBwYXJzZU1hdmVuU3BlYyhzcGVjKSwgc2NvcGUgfSxcbiAgICAgICdkZXBlbmRlbmNpZXMnLFxuICAgICk7XG4gIH1cblxuICAvKiogQWRkcyBhIGB0ZXN0YC1zY29wZWQgZGVwZW5kZW5jeS4gKi9cbiAgcHVibGljIGFkZFRlc3REZXBlbmRlbmN5KHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYWRkRGVwZW5kZW5jeShzcGVjLCAndGVzdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBidWlsZCBwbHVnaW4gdG8gYDxidWlsZD48cGx1Z2lucz5gLlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBgZ3JvdXBJZC9hcnRpZmFjdElkW0B2ZXJzaW9uXWAgLSBvbWl0IHRoZSB2ZXJzaW9uIHdoZW5cbiAgICogYDxwbHVnaW5NYW5hZ2VtZW50PmAgKGhlcmUgb3IgaW4gdGhlIHBhcmVudCkgbWFuYWdlcyBpdFxuICAgKi9cbiAgcHVibGljIGFkZFBsdWdpbihzcGVjOiBzdHJpbmcsIG9wdGlvbnM6IGphdmEuUGx1Z2luT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgdGhpcy5tZXJnZVBsdWdpbih0aGlzLnBsdWdpbnMsIHBhcnNlTWF2ZW5TcGVjKHNwZWMpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcGx1Z2luIHRvIGA8YnVpbGQ+PHBsdWdpbk1hbmFnZW1lbnQ+YCBvbmx5OiBpdCBwaW5zIHRoZSB2ZXJzaW9uXG4gICAqIChhbmQgb3B0aW9uYWwgZGVmYXVsdCBjb25maWd1cmF0aW9uKSBmb3IgdGhpcyBwb20gYW5kIGl0cyBtb2R1bGVzXG4gICAqIHdpdGhvdXQgcnVubmluZyB0aGUgcGx1Z2luIGhlcmUuXG4gICAqL1xuICBwdWJsaWMgYWRkTWFuYWdlZFBsdWdpbihzcGVjOiBzdHJpbmcsIG9wdGlvbnM6IGphdmEuUGx1Z2luT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgdGhpcy5tZXJnZVBsdWdpbih0aGlzLm1hbmFnZWRQbHVnaW5zLCBwYXJzZU1hdmVuU3BlYyhzcGVjKSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogVHJ1ZSBpZiBhIHBsdWdpbiB3aXRoIHRoZXNlIGBncm91cElkL2FydGlmYWN0SWRgIGNvb3JkaW5hdGVzIGlzIGluIGA8cGx1Z2lucz5gLiAqL1xuICBwdWJsaWMgaGFzUGx1Z2luKGNvb3JkaW5hdGVzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5zLmhhcyhjb29yZGluYXRlcyk7XG4gIH1cblxuICAvKiogQWRkcyBhIGA8cmVwb3NpdG9yeT5gLiAqL1xuICBwdWJsaWMgYWRkUmVwb3NpdG9yeShyZXBvc2l0b3J5OiBqYXZhLk1hdmVuUmVwb3NpdG9yeSk6IHZvaWQge1xuICAgIHRoaXMucmVwb3NpdG9yaWVzLnB1c2gocmVwb3NpdG9yeSk7XG4gIH1cblxuICAvKiogQWRkcyBhIGA8cGx1Z2luUmVwb3NpdG9yeT5gLiAqL1xuICBwdWJsaWMgYWRkUGx1Z2luUmVwb3NpdG9yeShyZXBvc2l0b3J5OiBqYXZhLk1hdmVuUmVwb3NpdG9yeSk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2luUmVwb3NpdG9yaWVzLnB1c2gocmVwb3NpdG9yeSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlRGVwZW5kZW5jeShcbiAgICB0YXJnZXQ6IE1hcDxzdHJpbmcsIERlcGVuZGVuY3lFbnRyeT4sXG4gICAgZW50cnk6IERlcGVuZGVuY3lFbnRyeSxcbiAgICBzZWN0aW9uOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGsgPSBrZXkoZW50cnkuY29vcmRzKTtcbiAgICBjb25zdCBleGlzdGluZyA9IHRhcmdldC5nZXQoayk7XG4gICAgaWYgKCFleGlzdGluZykge1xuICAgICAgdGFyZ2V0LnNldChrLCBlbnRyeSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb24gPSBtZXJnZVZlcnNpb24oZXhpc3RpbmcuY29vcmRzLCBlbnRyeS5jb29yZHMsIHNlY3Rpb24pO1xuICAgIHRhcmdldC5zZXQoaywge1xuICAgICAgY29vcmRzOiB7IC4uLmVudHJ5LmNvb3JkcywgdmVyc2lvbiB9LFxuICAgICAgc2NvcGU6IGVudHJ5LnNjb3BlID8/IGV4aXN0aW5nLnNjb3BlLFxuICAgICAgdHlwZTogZW50cnkudHlwZSA/PyBleGlzdGluZy50eXBlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZVBsdWdpbihcbiAgICB0YXJnZXQ6IE1hcDxzdHJpbmcsIFBsdWdpbkVudHJ5PixcbiAgICBjb29yZHM6IE1hdmVuQ29vcmRpbmF0ZXMsXG4gICAgb3B0aW9uczogamF2YS5QbHVnaW5PcHRpb25zLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBrID0ga2V5KGNvb3Jkcyk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0YXJnZXQuZ2V0KGspO1xuICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgIHRhcmdldC5zZXQoaywgeyBjb29yZHMsIG9wdGlvbnMgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb24gPSBtZXJnZVZlcnNpb24oZXhpc3RpbmcuY29vcmRzLCBjb29yZHMsICdwbHVnaW5zJyk7XG4gICAgY29uc3QgZXhlY3V0aW9ucyA9IFsuLi4oZXhpc3Rpbmcub3B0aW9ucy5leGVjdXRpb25zID8/IFtdKV07XG4gICAgZm9yIChjb25zdCBlIG9mIG9wdGlvbnMuZXhlY3V0aW9ucyA/PyBbXSkge1xuICAgICAgY29uc3QgaSA9IGV4ZWN1dGlvbnMuZmluZEluZGV4KCh4KSA9PiB4LmlkID09PSBlLmlkKTtcbiAgICAgIGlmIChpID09PSAtMSkge1xuICAgICAgICBleGVjdXRpb25zLnB1c2goZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGVjdXRpb25zW2ldID0gZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGFyZ2V0LnNldChrLCB7XG4gICAgICBjb29yZHM6IHsgLi4uY29vcmRzLCB2ZXJzaW9uIH0sXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGNvbmZpZ3VyYXRpb246XG4gICAgICAgICAgZXhpc3Rpbmcub3B0aW9ucy5jb25maWd1cmF0aW9uIHx8IG9wdGlvbnMuY29uZmlndXJhdGlvblxuICAgICAgICAgICAgPyB7IC4uLmV4aXN0aW5nLm9wdGlvbnMuY29uZmlndXJhdGlvbiwgLi4ub3B0aW9ucy5jb25maWd1cmF0aW9uIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBleGVjdXRpb25zOiBleGVjdXRpb25zLmxlbmd0aCA/IGV4ZWN1dGlvbnMgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlcGVuZGVuY2llczogW1xuICAgICAgICAgIC4uLihleGlzdGluZy5vcHRpb25zLmRlcGVuZGVuY2llcyA/PyBbXSksXG4gICAgICAgICAgLi4uKG9wdGlvbnMuZGVwZW5kZW5jaWVzID8/IFtdKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN5bnRoUG9tKCk6IGFueSB7XG4gICAgY29uc3QgbWFuYWdlZFBsdWdpbnMgPSBuZXcgTWFwKHRoaXMubWFuYWdlZFBsdWdpbnMpO1xuICAgIGNvbnN0IHBsdWdpbnM6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMucGx1Z2lucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKHRoaXMubWFuYWdlUGx1Z2luVmVyc2lvbnMgJiYgcC5jb29yZHMudmVyc2lvbikge1xuICAgICAgICBjb25zdCBrID0ga2V5KHAuY29vcmRzKTtcbiAgICAgICAgaWYgKCFtYW5hZ2VkUGx1Z2lucy5oYXMoaykpIHtcbiAgICAgICAgICBtYW5hZ2VkUGx1Z2lucy5zZXQoaywgeyBjb29yZHM6IHAuY29vcmRzLCBvcHRpb25zOiB7fSB9KTtcbiAgICAgICAgfVxuICAgICAgICBwbHVnaW5zLnB1c2gocmVuZGVyUGx1Z2luKHsgLi4ucC5jb29yZHMsIHZlcnNpb246IHVuZGVmaW5lZCB9LCBwLm9wdGlvbnMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChyZW5kZXJQbHVnaW4ocC5jb29yZHMsIHAub3B0aW9ucykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hbmFnZWQgPSBbXG4gICAgICAuLi50aGlzLmJvbXMubWFwKChiKSA9PiAoeyAuLi5yZW5kZXJDb29yZHMoYiksIHR5cGU6ICdwb20nLCBzY29wZTogJ2ltcG9ydCcgfSkpLFxuICAgICAgLi4uWy4uLnRoaXMubWFuYWdlZERlcHMudmFsdWVzKCldLm1hcChyZW5kZXJEZXBlbmRlbmN5KSxcbiAgICBdO1xuXG4gICAgY29uc3QgcGx1Z2luTWFuYWdlbWVudCA9IFsuLi5tYW5hZ2VkUGx1Z2lucy52YWx1ZXMoKV0ubWFwKChwKSA9PlxuICAgICAgcmVuZGVyUGx1Z2luKHAuY29vcmRzLCBwLm9wdGlvbnMpLFxuICAgICk7XG5cbiAgICAvLyBKU09OIHJvdW5kLXRyaXAgZHJvcHMgZXZlcnkgYHVuZGVmaW5lZGAgZmllbGQsIHNvIGFic2VudCBzZWN0aW9ucyBhcmVcbiAgICAvLyBvbWl0dGVkIHJhdGhlciB0aGFuIHdyaXR0ZW4gYXMgZW1wdHkgZWxlbWVudHMuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgcHJvamVjdDoge1xuICAgICAgICAuLi5QT01fWE1MX0FUVFJTLFxuICAgICAgICBtb2RlbFZlcnNpb246ICc0LjAuMCcsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnQsXG4gICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBJZCxcbiAgICAgICAgYXJ0aWZhY3RJZDogdGhpcy5hcnRpZmFjdElkLFxuICAgICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgIC8vIGBqYXJgIGlzIE1hdmVuJ3MgZGVmYXVsdCBhbmQgaXMgbGVmdCBpbXBsaWNpdC5cbiAgICAgICAgcGFja2FnaW5nOiB0aGlzLnBhY2thZ2luZyA9PT0gJ2phcicgPyB1bmRlZmluZWQgOiB0aGlzLnBhY2thZ2luZyxcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgbW9kdWxlczogdGhpcy5tb2R1bGVzLmxlbmd0aCA/IHsgbW9kdWxlOiB0aGlzLm1vZHVsZXMgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJvcGVydGllczogT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0aWVzKS5sZW5ndGggPyB0aGlzLnByb3BlcnRpZXMgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlcG9zaXRvcmllczogdGhpcy5yZXBvc2l0b3JpZXMubGVuZ3RoXG4gICAgICAgICAgPyB7IHJlcG9zaXRvcnk6IHRoaXMucmVwb3NpdG9yaWVzIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgcGx1Z2luUmVwb3NpdG9yaWVzOiB0aGlzLnBsdWdpblJlcG9zaXRvcmllcy5sZW5ndGhcbiAgICAgICAgICA/IHsgcGx1Z2luUmVwb3NpdG9yeTogdGhpcy5wbHVnaW5SZXBvc2l0b3JpZXMgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBkZXBlbmRlbmN5TWFuYWdlbWVudDogbWFuYWdlZC5sZW5ndGhcbiAgICAgICAgICA/IHsgZGVwZW5kZW5jaWVzOiB7IGRlcGVuZGVuY3k6IG1hbmFnZWQgfSB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlcGVuZGVuY2llczogdGhpcy5kZXBzLnNpemVcbiAgICAgICAgICA/IHsgZGVwZW5kZW5jeTogWy4uLnRoaXMuZGVwcy52YWx1ZXMoKV0ubWFwKHJlbmRlckRlcGVuZGVuY3kpIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYnVpbGQ6XG4gICAgICAgICAgcGx1Z2lucy5sZW5ndGggfHwgcGx1Z2luTWFuYWdlbWVudC5sZW5ndGhcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwbHVnaW5NYW5hZ2VtZW50OiBwbHVnaW5NYW5hZ2VtZW50Lmxlbmd0aFxuICAgICAgICAgICAgICAgID8geyBwbHVnaW5zOiB7IHBsdWdpbjogcGx1Z2luTWFuYWdlbWVudCB9IH1cbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcGx1Z2luczogcGx1Z2lucy5sZW5ndGggPyB7IHBsdWdpbjogcGx1Z2lucyB9IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZVZlcnNpb24oXG4gIGV4aXN0aW5nOiBNYXZlbkNvb3JkaW5hdGVzLFxuICBhZGRlZDogTWF2ZW5Db29yZGluYXRlcyxcbiAgc2VjdGlvbjogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGV4aXN0aW5nLnZlcnNpb24gJiYgYWRkZWQudmVyc2lvbiAmJiBleGlzdGluZy52ZXJzaW9uICE9PSBhZGRlZC52ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7a2V5KGFkZGVkKX0gaXMgcGlubmVkIGF0IHR3byBkaWZmZXJlbnQgdmVyc2lvbnMgaW4gJHtzZWN0aW9ufSAoJHtleGlzdGluZy52ZXJzaW9ufSBhbmQgJHthZGRlZC52ZXJzaW9ufSkuIFBpbiBpdCBvbmNlLmAsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gYWRkZWQudmVyc2lvbiA/PyBleGlzdGluZy52ZXJzaW9uO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb29yZHMoYzogTWF2ZW5Db29yZGluYXRlcyk6IGFueSB7XG4gIHJldHVybiB7IGdyb3VwSWQ6IGMuZ3JvdXBJZCwgYXJ0aWZhY3RJZDogYy5hcnRpZmFjdElkLCB2ZXJzaW9uOiBjLnZlcnNpb24gfTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyRGVwZW5kZW5jeShkOiBEZXBlbmRlbmN5RW50cnkpOiBhbnkge1xuICByZXR1cm4geyAuLi5yZW5kZXJDb29yZHMoZC5jb29yZHMpLCB0eXBlOiBkLnR5cGUsIHNjb3BlOiBkLnNjb3BlIH07XG59XG5cbmZ1bmN0aW9uIHJlbmRlclBsdWdpbihjOiBNYXZlbkNvb3JkaW5hdGVzLCBvcHRpb25zOiBqYXZhLlBsdWdpbk9wdGlvbnMpOiBhbnkge1xuICBjb25zdCBkZXBzID0gKG9wdGlvbnMuZGVwZW5kZW5jaWVzID8/IFtdKS5tYXAoKGQpID0+IHJlbmRlckNvb3JkcyhwYXJzZU1hdmVuU3BlYyhkKSkpO1xuICByZXR1cm4ge1xuICAgIC4uLnJlbmRlckNvb3JkcyhjKSxcbiAgICBjb25maWd1cmF0aW9uOiBvcHRpb25zLmNvbmZpZ3VyYXRpb24sXG4gICAgZGVwZW5kZW5jaWVzOiBkZXBzLmxlbmd0aCA/IHsgZGVwZW5kZW5jeTogZGVwcyB9IDogdW5kZWZpbmVkLFxuICAgIGV4ZWN1dGlvbnM6IG9wdGlvbnMuZXhlY3V0aW9ucz8ubGVuZ3RoXG4gICAgICA/IHtcbiAgICAgICAgZXhlY3V0aW9uOiBvcHRpb25zLmV4ZWN1dGlvbnMubWFwKChlKSA9PiAoe1xuICAgICAgICAgIGlkOiBlLmlkLFxuICAgICAgICAgIHBoYXNlOiBlLnBoYXNlLFxuICAgICAgICAgIC8vIE9uZSA8Z29hbHM+IGhvbGRpbmcgZXZlcnkgPGdvYWw+IC0gbm90IG9uZSA8Z29hbHM+IHBlciBnb2FsLlxuICAgICAgICAgIGdvYWxzOiB7IGdvYWw6IGUuZ29hbHMgfSxcbiAgICAgICAgICBjb25maWd1cmF0aW9uOiBlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIH0pKSxcbiAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkLFxuICB9O1xufVxuIl19
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF2ZW4tcG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2phdmEvbWF2ZW4vbWF2ZW4tcG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTJCQSx3Q0FjQztBQUdELGdEQU1DOztBQWxERCxtQ0FBMkQ7QUFFM0QsTUFBTSxhQUFhLEdBQUc7SUFDcEIscUJBQXFCLEVBQ25CLCtFQUErRTtJQUNqRixRQUFRLEVBQUUsbUNBQW1DO0lBQzdDLFlBQVksRUFBRSwyQ0FBMkM7Q0FDMUQsQ0FBQztBQUVGLDRFQUE0RTtBQUM1RSwwRUFBMEU7QUFDMUUsZ0VBQWdFO0FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsa0NBQWtDLENBQUM7QUFTN0Q7Ozs7O0dBS0c7QUFDSCxTQUFnQixjQUFjLENBQUMsSUFBWTtJQUN6QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sSUFBSSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakQsTUFBTSxJQUFJLEtBQUssQ0FDYix1QkFBdUIsSUFBSSxtRkFBbUYsQ0FDL0csQ0FBQztJ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QSxTQUFTLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3hDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtvQkFDUixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7b0JBQ2QsK0RBQStEO29CQUMvRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRTtvQkFDeEIsYUFBYSxFQUFFLENBQUMsQ0FBQyxhQUFhO2lCQUMvQixDQUFDLENBQUM7YUFDSjtZQUNELENBQUMsQ0FBQyxTQUFTO0tBQ2QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFByb2plY3QsIFhtbEZpbGUsIGphdmEgfSBmcm9tICdwcm9qZW4nO1xuXG5jb25zdCBQT01fWE1MX0FUVFJTID0ge1xuICAnQHhzaTpzY2hlbWFMb2NhdGlvbic6XG4gICAgJ2h0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkJyxcbiAgJ0B4bWxucyc6ICdodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAnLFxuICAnQHhtbG5zOnhzaSc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZScsXG59O1xuXG4vLyBDaGFyYWN0ZXJzIHRoYXQgbWFrZSBhIHZlcnNpb24gYSByYW5nZSBvciBhIHNlbXZlciBleHByZXNzaW9uIHJhdGhlciB0aGFuXG4vLyBvbmUgZXhhY3QgdmVyc2lvbi4gTWF2ZW4gcmFuZ2VzIG1ha2UgYnVpbGRzIG5vbi1yZXByb2R1Y2libGUsIHNvIGEgc3BlY1xuLy8gY2Fycnlpbmcgb25lIGlzIHJlamVjdGVkIG91dHJpZ2h0IGluc3RlYWQgb2YgYmVpbmcgY29udmVydGVkLlxuY29uc3QgTk9OX0VYQUNUX1ZFUlNJT04gPSAvW1xcXn4qXFxbXFxdKCksPD5cXHNdfF54JHxcXC54KFxcLnwkKS9pO1xuXG4vKiogUGFyc2VkIGBncm91cElkL2FydGlmYWN0SWRbQHZlcnNpb25dYCBzcGVjLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXZlbkNvb3JkaW5hdGVzIHtcbiAgcmVhZG9ubHkgZ3JvdXBJZDogc3RyaW5nO1xuICByZWFkb25seSBhcnRpZmFjdElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyc2VzIGBncm91cElkL2FydGlmYWN0SWRbQHZlcnNpb25dYC4gVGhlIHZlcnNpb24sIHdoZW4gcHJlc2VudCwgbXVzdCBiZVxuICogb25lIGV4YWN0IHZlcnNpb24gLSBhIHJhbmdlIChgWzEsMilgKSwgYSBzZW12ZXIgcmFuZ2UgKGBeMWAsIGB+MS4yYCksIG9yIGFcbiAqIHdpbGRjYXJkIHRocm93cywgYmVjYXVzZSBhIHJhbmdlIHJlc29sdmVzIGRpZmZlcmVudGx5IG92ZXIgdGltZSBhbmQgbWFrZXNcbiAqIHRoZSBidWlsZCBub24tcmVwcm9kdWNpYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNYXZlblNwZWMoc3BlYzogc3RyaW5nKTogTWF2ZW5Db29yZGluYXRlcyB7XG4gIGNvbnN0IGF0ID0gc3BlYy5pbmRleE9mKCdAJyk7XG4gIGNvbnN0IG5hbWUgPSBhdCA9PT0gLTEgPyBzcGVjIDogc3BlYy5zbGljZSgwLCBhdCk7XG4gIGNvbnN0IHZlcnNpb24gPSBhdCA9PT0gLTEgPyB1bmRlZmluZWQgOiBzcGVjLnNsaWNlKGF0ICsgMSk7XG4gIGNvbnN0IHBhcnRzID0gbmFtZS5zcGxpdCgnLycpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAyIHx8ICFwYXJ0c1swXSB8fCAhcGFydHNbMV0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBNYXZlbiBzcGVjIFwiJHtzcGVjfVwiLiBGb3JtYXQgaXMgXCI8Z3JvdXBJZD4vPGFydGlmYWN0SWQ+W0A8dmVyc2lvbj5dXCIsIGUuZy4gXCJvcmcueWFtbC9zbmFrZXlhbWxAMi40XCIuYCxcbiAgICApO1xuICB9XG4gIGlmICh2ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBhc3NlcnRFeGFjdFZlcnNpb24odmVyc2lvbiwgc3BlYyk7XG4gIH1cbiAgcmV0dXJuIHsgZ3JvdXBJZDogcGFydHNbMF0sIGFydGlmYWN0SWQ6IHBhcnRzWzFdLCB2ZXJzaW9uIH07XG59XG5cbi8qKiBUaHJvd3MgdW5sZXNzIGB2ZXJzaW9uYCBpcyBvbmUgZXhhY3QgdmVyc2lvbiAobm8gcmFuZ2UsIG5vIHdpbGRjYXJkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFeGFjdFZlcnNpb24odmVyc2lvbjogc3RyaW5nLCBjb250ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCF2ZXJzaW9uIHx8IE5PTl9FWEFDVF9WRVJTSU9OLnRlc3QodmVyc2lvbikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgXCIke2NvbnRleHR9XCIgdXNlcyB2ZXJzaW9uIFwiJHt2ZXJzaW9ufVwiLCB3aGljaCBpcyBub3QgYW4gZXhhY3QgdmVyc2lvbi4gR2VuZXJhdGVkIHBvbXMgbmV2ZXIgY29udGFpbiB2ZXJzaW9uIHJhbmdlczogcGluIG9uZSBleGFjdCB2ZXJzaW9uIChlLmcuIFwiMS4yLjNcIiksIG9yIG9taXQgdGhlIHZlcnNpb24gd2hlbiBhIEJPTSBtYW5hZ2VzIGl0LmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKiogT3B0aW9ucyBmb3IgYE1hdmVuUG9tYC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF2ZW5Qb21PcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhdGggb2YgdGhlIHBvbSwgcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdC5cbiAgICogQGRlZmF1bHQgXCJwb20ueG1sXCJcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBgZ3JvdXBJZGAuIE9taXQgaW4gYSBtb2R1bGUgcG9tIHRvIGluaGVyaXQgaXQgZnJvbSBgPHBhcmVudD5gLlxuICAgKiBAZGVmYXVsdCAtIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnRcbiAgICovXG4gIHJlYWRvbmx5IGdyb3VwSWQ/OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgYXJ0aWZhY3RJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBgdmVyc2lvbmAuIE9taXQgaW4gYSBtb2R1bGUgcG9tIHRvIGluaGVyaXQgaXQgZnJvbSBgPHBhcmVudD5gLlxuICAgKiBAZGVmYXVsdCAtIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnRcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqIEBkZWZhdWx0IFwiamFyXCIgKi9cbiAgcmVhZG9ubHkgcGFja2FnaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCAtIG5vbmUgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKiogQGRlZmF1bHQgLSBub25lICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCAtIG5vbmUgKi9cbiAgcmVhZG9ubHkgdXJsPzogc3RyaW5nO1xuXG4gIC8qKiBAZGVmYXVsdCAtIG5vIHBhcmVudCAqL1xuICByZWFkb25seSBwYXJlbnQ/OiBqYXZhLlBhcmVudFBvbTtcbn1cblxuaW50ZXJmYWNlIERlcGVuZGVuY3lFbnRyeSB7XG4gIHJlYWRvbmx5IGNvb3JkczogTWF2ZW5Db29yZGluYXRlcztcbiAgcmVhZG9ubHkgc2NvcGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBQbHVnaW5FbnRyeSB7XG4gIHJlYWRvbmx5IGNvb3JkczogTWF2ZW5Db29yZGluYXRlcztcbiAgcmVhZG9ubHkgb3B0aW9uczogamF2YS5QbHVnaW5PcHRpb25zO1xufVxuXG5mdW5jdGlvbiBrZXkoYzogTWF2ZW5Db29yZGluYXRlcyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtjLmdyb3VwSWR9LyR7Yy5hcnRpZmFjdElkfWA7XG59XG5cbi8qKlxuICogQSBgcG9tLnhtbGAgd3JpdHRlbiBieSB0aGlzIHBhY2thZ2UgKHJhdGhlciB0aGFuIHByb2plbidzIGBqYXZhLlBvbWApLlxuICpcbiAqIFN1cHBvcnRzIGA8bW9kdWxlcz5gLCBgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PmAgKGluY2x1ZGluZyBCT00gaW1wb3J0cyksXG4gKiBgPHBsdWdpbk1hbmFnZW1lbnQ+YCwgYW5kIHZlcnNpb25sZXNzIGRlcGVuZGVuY2llcy9wbHVnaW5zIC0gd2hhdCBhIE1hdmVuXG4gKiByZWFjdG9yIG5lZWRzIGFuZCBgamF2YS5Qb21gIGNhbm5vdCBleHByZXNzLiBFdmVyeSB2ZXJzaW9uIGl0IHdyaXRlcyBpc1xuICogZXhhY3Q7IGEgc3BlYyBjYXJyeWluZyBhIHJhbmdlIHRocm93cy4gUGx1Z2luIGV4ZWN1dGlvbnMgcmVuZGVyIG9uZVxuICogYDxnb2Fscz5gIGVsZW1lbnQgcGVyIGV4ZWN1dGlvbiAocHJvamVuJ3MgYGphdmEuUG9tYCByZXBlYXRzIGA8Z29hbHM+YCxcbiAqIHdoaWNoIE1hdmVuIDMuOSByZWplY3RzIGFzIG5vbi1wYXJzZWFibGUpLlxuICpcbiAqIEFkZGluZyB0aGUgc2FtZSBgZ3JvdXBJZC9hcnRpZmFjdElkYCB0d2ljZSBtZXJnZXM6IGEgbGF0ZXIgdmVyc2lvblxuICogcmVwbGFjZXMgYW4gZWFybGllciBvbmUgb25seSBpZiB0aGUgZWFybGllciBoYWQgbm9uZSAodHdvIGRpZmZlcmVudFxuICogdmVyc2lvbnMgdGhyb3cpLCBhbmQgcGx1Z2luIG9wdGlvbnMgYXJlIG1lcmdlZCAtIGBjb25maWd1cmF0aW9uYCBzaGFsbG93bHksXG4gKiBgZXhlY3V0aW9uc2AgYW5kIGBkZXBlbmRlbmNpZXNgIGFwcGVuZGVkLlxuICovXG5leHBvcnQgY2xhc3MgTWF2ZW5Qb20gZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKiogUGF0aCBvZiB0aGUgcG9tLCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCByb290LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGdyb3VwSWQ/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBhcnRpZmFjdElkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdXJsPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50PzogamF2YS5QYXJlbnRQb207XG5cbiAgLyoqIE1hdmVuIHBhY2thZ2luZyAoYGphcmAsIGBwb21gLCAuLi4pLiAqL1xuICBwdWJsaWMgcGFja2FnaW5nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHZlcnNpb25zIG9mIGA8cGx1Z2lucz5gIGVudHJpZXMgYXJlIHdyaXR0ZW4gaW50b1xuICAgKiBgPHBsdWdpbk1hbmFnZW1lbnQ+YCBhbmQgdGhlIGA8cGx1Z2lucz5gIGVudHJpZXMgc3RheSB2ZXJzaW9ubGVzcyAtIHRoZVxuICAgKiBzaGFwZSBhIHJlYWN0b3IgcGFyZW50IHdhbnRzLCBzbyBtb2R1bGVzIGNhbiByZWRlY2xhcmUgYSBwbHVnaW4gd2l0aG91dFxuICAgKiByZXBlYXRpbmcgaXRzIHZlcnNpb24uXG4gICAqL1xuICBwdWJsaWMgbWFuYWdlUGx1Z2luVmVyc2lvbnMgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGJvbXM6IE1hdmVuQ29vcmRpbmF0ZXNbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbmFnZWREZXBzID0gbmV3IE1hcDxzdHJpbmcsIERlcGVuZGVuY3lFbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBzID0gbmV3IE1hcDxzdHJpbmcsIERlcGVuZGVuY3lFbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYW5hZ2VkUGx1Z2lucyA9IG5ldyBNYXA8c3RyaW5nLCBQbHVnaW5FbnRyeT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5zID0gbmV3IE1hcDxzdHJpbmcsIFBsdWdpbkVudHJ5PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9zaXRvcmllczogamF2YS5NYXZlblJlcG9zaXRvcnlbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpblJlcG9zaXRvcmllczogamF2YS5NYXZlblJlcG9zaXRvcnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IE1hdmVuUG9tT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuICAgIHRoaXMuZmlsZVBhdGggPSBvcHRpb25zLmZpbGVQYXRoID8/ICdwb20ueG1sJztcbiAgICB0aGlzLmdyb3VwSWQgPSBvcHRpb25zLmdyb3VwSWQ7XG4gICAgdGhpcy5hcnRpZmFjdElkID0gb3B0aW9ucy5hcnRpZmFjdElkO1xuICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvbjtcbiAgICB0aGlzLnBhY2thZ2luZyA9IG9wdGlvbnMucGFja2FnaW5nID8/ICdqYXInO1xuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnVybCA9IG9wdGlvbnMudXJsO1xuICAgIHRoaXMucGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhc3NlcnRFeGFjdFZlcnNpb24odGhpcy52ZXJzaW9uLCBgJHt0aGlzLmFydGlmYWN0SWR9IHZlcnNpb25gKTtcbiAgICB9XG5cbiAgICBuZXcgWG1sRmlsZShwcm9qZWN0LCB0aGlzLmZpbGVQYXRoLCB7IG9iajogKCkgPT4gdGhpcy5zeW50aFBvbSgpIH0pO1xuICB9XG5cbiAgLyoqIFNldHMgYSBgPHByb3BlcnRpZXM+YCBlbnRyeS4gKi9cbiAgcHVibGljIGFkZFByb3BlcnR5KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHJvcGVydGllc1tuYW1lXSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqIEFkZHMgYSBgPG1vZHVsZT5gIChhIHBhdGggcmVsYXRpdmUgdG8gdGhpcyBwb20ncyBkaXJlY3RvcnkpLiAqL1xuICBwdWJsaWMgYWRkTW9kdWxlKHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tb2R1bGVzLmluY2x1ZGVzKHBhdGgpKSB7XG4gICAgICB0aGlzLm1vZHVsZXMucHVzaChwYXRoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0cyBhIEJPTSBpbnRvIGA8ZGVwZW5kZW5jeU1hbmFnZW1lbnQ+YCAoYHR5cGU9cG9tYCxcbiAgICogYHNjb3BlPWltcG9ydGApLiBCT01zIGFyZSB3cml0dGVuIGluIHRoZSBvcmRlciBhZGRlZCwgYmVmb3JlIGV2ZXJ5IG90aGVyXG4gICAqIG1hbmFnZWQgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgYGdyb3VwSWQvYXJ0aWZhY3RJZEB2ZXJzaW9uYCAtIHRoZSB2ZXJzaW9uIGlzIHJlcXVpcmVkXG4gICAqL1xuICBwdWJsaWMgYWRkQm9tKHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvb3JkcyA9IHBhcnNlTWF2ZW5TcGVjKHNwZWMpO1xuICAgIGlmICghY29vcmRzLnZlcnNpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQk9NIFwiJHtzcGVjfVwiIG5lZWRzIGEgdmVyc2lvbjogYSBCT00gaW1wb3J0IGNhbm5vdCBiZSB2ZXJzaW9ubGVzcy5gKTtcbiAgICB9XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmJvbXMuZmluZEluZGV4KChiKSA9PiBrZXkoYikgPT09IGtleShjb29yZHMpKTtcbiAgICBpZiAoZXhpc3RpbmcgIT09IC0xKSB7XG4gICAgICB0aGlzLmJvbXNbZXhpc3RpbmddID0gY29vcmRzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvbXMucHVzaChjb29yZHMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZW1vdmVzIGEgQk9NIGltcG9ydCBhZGRlZCBieSBgYWRkQm9tYCwgaWYgcHJlc2VudC4gKi9cbiAgcHVibGljIHJlbW92ZUJvbShjb29yZGluYXRlczogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmJvbXMuZmluZEluZGV4KChiKSA9PiBrZXkoYikgPT09IGNvb3JkaW5hdGVzKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmJvbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGlucyBhIHZlcnNpb24gaW4gYDxkZXBlbmRlbmN5TWFuYWdlbWVudD5gIHdpdGhvdXQgYWRkaW5nIHRoZVxuICAgKiBkZXBlbmRlbmN5IGl0c2VsZi5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgYGdyb3VwSWQvYXJ0aWZhY3RJZEB2ZXJzaW9uYCAtIHRoZSB2ZXJzaW9uIGlzIHJlcXVpcmVkXG4gICAqL1xuICBwdWJsaWMgYWRkTWFuYWdlZERlcGVuZGVuY3koc3BlYzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29vcmRzID0gcGFyc2VNYXZlblNwZWMoc3BlYyk7XG4gICAgaWYgKCFjb29yZHMudmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNYW5hZ2VkIGRlcGVuZGVuY3kgXCIke3NwZWN9XCIgbmVlZHMgYSB2ZXJzaW9uLmApO1xuICAgIH1cbiAgICB0aGlzLm1lcmdlRGVwZW5kZW5jeSh0aGlzLm1hbmFnZWREZXBzLCB7IGNvb3JkcyB9LCAnZGVwZW5kZW5jeU1hbmFnZW1lbnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgZGVwZW5kZW5jeSAoY29tcGlsZSBzY29wZSB1bmxlc3MgYHNjb3BlYCBpcyBnaXZlbikuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRbQHZlcnNpb25dYCAtIG9taXQgdGhlIHZlcnNpb24gd2hlbiBhIEJPTVxuICAgKiBvciB0aGUgcGFyZW50J3MgYDxkZXBlbmRlbmN5TWFuYWdlbWVudD5gIG1hbmFnZXMgaXRcbiAgICogQHBhcmFtIHNjb3BlIE1hdmVuIHNjb3BlIChgdGVzdGAsIGBwcm92aWRlZGAsIGBydW50aW1lYCwgLi4uKVxuICAgKi9cbiAgcHVibGljIGFkZERlcGVuZGVuY3koc3BlYzogc3RyaW5nLCBzY29wZT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubWVyZ2VEZXBlbmRlbmN5KFxuICAgICAgdGhpcy5kZXBzLFxuICAgICAgeyBjb29yZHM6IHBhcnNlTWF2ZW5TcGVjKHNwZWMpLCBzY29wZSB9LFxuICAgICAgJ2RlcGVuZGVuY2llcycsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBBZGRzIGEgYHRlc3RgLXNjb3BlZCBkZXBlbmRlbmN5LiAqL1xuICBwdWJsaWMgYWRkVGVzdERlcGVuZGVuY3koc3BlYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hZGREZXBlbmRlbmN5KHNwZWMsICd0ZXN0Jyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGJ1aWxkIHBsdWdpbiB0byBgPGJ1aWxkPjxwbHVnaW5zPmAuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIGBncm91cElkL2FydGlmYWN0SWRbQHZlcnNpb25dYCAtIG9taXQgdGhlIHZlcnNpb24gd2hlblxuICAgKiBgPHBsdWdpbk1hbmFnZW1lbnQ+YCAoaGVyZSBvciBpbiB0aGUgcGFyZW50KSBtYW5hZ2VzIGl0XG4gICAqL1xuICBwdWJsaWMgYWRkUGx1Z2luKHNwZWM6IHN0cmluZywgb3B0aW9uczogamF2YS5QbHVnaW5PcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLm1lcmdlUGx1Z2luKHRoaXMucGx1Z2lucywgcGFyc2VNYXZlblNwZWMoc3BlYyksIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBwbHVnaW4gdG8gYDxidWlsZD48cGx1Z2luTWFuYWdlbWVudD5gIG9ubHk6IGl0IHBpbnMgdGhlIHZlcnNpb25cbiAgICogKGFuZCBvcHRpb25hbCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24pIGZvciB0aGlzIHBvbSBhbmQgaXRzIG1vZHVsZXNcbiAgICogd2l0aG91dCBydW5uaW5nIHRoZSBwbHVnaW4gaGVyZS5cbiAgICovXG4gIHB1YmxpYyBhZGRNYW5hZ2VkUGx1Z2luKHNwZWM6IHN0cmluZywgb3B0aW9uczogamF2YS5QbHVnaW5PcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLm1lcmdlUGx1Z2luKHRoaXMubWFuYWdlZFBsdWdpbnMsIHBhcnNlTWF2ZW5TcGVjKHNwZWMpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBUcnVlIGlmIGEgcGx1Z2luIHdpdGggdGhlc2UgYGdyb3VwSWQvYXJ0aWZhY3RJZGAgY29vcmRpbmF0ZXMgaXMgaW4gYDxwbHVnaW5zPmAuICovXG4gIHB1YmxpYyBoYXNQbHVnaW4oY29vcmRpbmF0ZXM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbnMuaGFzKGNvb3JkaW5hdGVzKTtcbiAgfVxuXG4gIC8qKiBBZGRzIGEgYDxyZXBvc2l0b3J5PmAuICovXG4gIHB1YmxpYyBhZGRSZXBvc2l0b3J5KHJlcG9zaXRvcnk6IGphdmEuTWF2ZW5SZXBvc2l0b3J5KTogdm9pZCB7XG4gICAgdGhpcy5yZXBvc2l0b3JpZXMucHVzaChyZXBvc2l0b3J5KTtcbiAgfVxuXG4gIC8qKiBBZGRzIGEgYDxwbHVnaW5SZXBvc2l0b3J5PmAuICovXG4gIHB1YmxpYyBhZGRQbHVnaW5SZXBvc2l0b3J5KHJlcG9zaXRvcnk6IGphdmEuTWF2ZW5SZXBvc2l0b3J5KTogdm9pZCB7XG4gICAgdGhpcy5wbHVnaW5SZXBvc2l0b3JpZXMucHVzaChyZXBvc2l0b3J5KTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VEZXBlbmRlbmN5KFxuICAgIHRhcmdldDogTWFwPHN0cmluZywgRGVwZW5kZW5jeUVudHJ5PixcbiAgICBlbnRyeTogRGVwZW5kZW5jeUVudHJ5LFxuICAgIHNlY3Rpb246IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgayA9IGtleShlbnRyeS5jb29yZHMpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGFyZ2V0LmdldChrKTtcbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICB0YXJnZXQuc2V0KGssIGVudHJ5KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmVyc2lvbiA9IG1lcmdlVmVyc2lvbihleGlzdGluZy5jb29yZHMsIGVudHJ5LmNvb3Jkcywgc2VjdGlvbik7XG4gICAgdGFyZ2V0LnNldChrLCB7XG4gICAgICBjb29yZHM6IHsgLi4uZW50cnkuY29vcmRzLCB2ZXJzaW9uIH0sXG4gICAgICBzY29wZTogZW50cnkuc2NvcGUgPz8gZXhpc3Rpbmcuc2NvcGUsXG4gICAgICB0eXBlOiBlbnRyeS50eXBlID8/IGV4aXN0aW5nLnR5cGUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlUGx1Z2luKFxuICAgIHRhcmdldDogTWFwPHN0cmluZywgUGx1Z2luRW50cnk+LFxuICAgIGNvb3JkczogTWF2ZW5Db29yZGluYXRlcyxcbiAgICBvcHRpb25zOiBqYXZhLlBsdWdpbk9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGsgPSBrZXkoY29vcmRzKTtcbiAgICBjb25zdCBleGlzdGluZyA9IHRhcmdldC5nZXQoayk7XG4gICAgaWYgKCFleGlzdGluZykge1xuICAgICAgdGFyZ2V0LnNldChrLCB7IGNvb3Jkcywgb3B0aW9ucyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdmVyc2lvbiA9IG1lcmdlVmVyc2lvbihleGlzdGluZy5jb29yZHMsIGNvb3JkcywgJ3BsdWdpbnMnKTtcbiAgICBjb25zdCBleGVjdXRpb25zID0gWy4uLihleGlzdGluZy5vcHRpb25zLmV4ZWN1dGlvbnMgPz8gW10pXTtcbiAgICBmb3IgKGNvbnN0IGUgb2Ygb3B0aW9ucy5leGVjdXRpb25zID8/IFtdKSB7XG4gICAgICBjb25zdCBpID0gZXhlY3V0aW9ucy5maW5kSW5kZXgoKHgpID0+IHguaWQgPT09IGUuaWQpO1xuICAgICAgaWYgKGkgPT09IC0xKSB7XG4gICAgICAgIGV4ZWN1dGlvbnMucHVzaChlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4ZWN1dGlvbnNbaV0gPSBlO1xuICAgICAgfVxuICAgIH1cbiAgICB0YXJnZXQuc2V0KGssIHtcbiAgICAgIGNvb3JkczogeyAuLi5jb29yZHMsIHZlcnNpb24gfSxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgY29uZmlndXJhdGlvbjpcbiAgICAgICAgICBleGlzdGluZy5vcHRpb25zLmNvbmZpZ3VyYXRpb24gfHwgb3B0aW9ucy5jb25maWd1cmF0aW9uXG4gICAgICAgICAgICA/IHsgLi4uZXhpc3Rpbmcub3B0aW9ucy5jb25maWd1cmF0aW9uLCAuLi5vcHRpb25zLmNvbmZpZ3VyYXRpb24gfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGV4ZWN1dGlvbnM6IGV4ZWN1dGlvbnMubGVuZ3RoID8gZXhlY3V0aW9ucyA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiBbXG4gICAgICAgICAgLi4uKGV4aXN0aW5nLm9wdGlvbnMuZGVwZW5kZW5jaWVzID8/IFtdKSxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5kZXBlbmRlbmNpZXMgPz8gW10pLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGA8cGx1Z2lucz5gIGFuZCBgPHBsdWdpbk1hbmFnZW1lbnQ+YC4gV2l0aCBgbWFuYWdlUGx1Z2luVmVyc2lvbnNgLFxuICAgKiBhIHZlcnNpb25lZCBwbHVnaW4ncyB2ZXJzaW9uIG1vdmVzIGludG8gYDxwbHVnaW5NYW5hZ2VtZW50PmAgKHVubGVzcyBvbmVcbiAgICogaXMgYWxyZWFkeSBtYW5hZ2VkIHRoZXJlKSBhbmQgdGhlIHBsdWdpbiBpdHNlbGYgaXMgcmVuZGVyZWQgdmVyc2lvbmxlc3MuXG4gICAqL1xuICBwcml2YXRlIHJlbmRlclBsdWdpbnMoKTogeyBwbHVnaW5zOiBhbnlbXTsgcGx1Z2luTWFuYWdlbWVudDogYW55W10gfSB7XG4gICAgY29uc3QgbWFuYWdlZFBsdWdpbnMgPSBuZXcgTWFwKHRoaXMubWFuYWdlZFBsdWdpbnMpO1xuICAgIGNvbnN0IHBsdWdpbnM6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMucGx1Z2lucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKHRoaXMubWFuYWdlUGx1Z2luVmVyc2lvbnMgJiYgcC5jb29yZHMudmVyc2lvbikge1xuICAgICAgICBjb25zdCBrID0ga2V5KHAuY29vcmRzKTtcbiAgICAgICAgaWYgKCFtYW5hZ2VkUGx1Z2lucy5oYXMoaykpIHtcbiAgICAgICAgICBtYW5hZ2VkUGx1Z2lucy5zZXQoaywgeyBjb29yZHM6IHAuY29vcmRzLCBvcHRpb25zOiB7fSB9KTtcbiAgICAgICAgfVxuICAgICAgICBwbHVnaW5zLnB1c2gocmVuZGVyUGx1Z2luKHsgLi4ucC5jb29yZHMsIHZlcnNpb246IHVuZGVmaW5lZCB9LCBwLm9wdGlvbnMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChyZW5kZXJQbHVnaW4ocC5jb29yZHMsIHAub3B0aW9ucykpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwbHVnaW5NYW5hZ2VtZW50ID0gWy4uLm1hbmFnZWRQbHVnaW5zLnZhbHVlcygpXS5tYXAoKHApID0+XG4gICAgICByZW5kZXJQbHVnaW4ocC5jb29yZHMsIHAub3B0aW9ucyksXG4gICAgKTtcbiAgICByZXR1cm4geyBwbHVnaW5zLCBwbHVnaW5NYW5hZ2VtZW50IH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckRlcGVuZGVuY3lNYW5hZ2VtZW50KCk6IGFueSB7XG4gICAgY29uc3QgbWFuYWdlZCA9IFtcbiAgICAgIC4uLnRoaXMuYm9tcy5tYXAoKGIpID0+ICh7IC4uLnJlbmRlckNvb3JkcyhiKSwgdHlwZTogJ3BvbScsIHNjb3BlOiAnaW1wb3J0JyB9KSksXG4gICAgICAuLi5bLi4udGhpcy5tYW5hZ2VkRGVwcy52YWx1ZXMoKV0ubWFwKHJlbmRlckRlcGVuZGVuY3kpLFxuICAgIF07XG4gICAgcmV0dXJuIG1hbmFnZWQubGVuZ3RoID8geyBkZXBlbmRlbmNpZXM6IHsgZGVwZW5kZW5jeTogbWFuYWdlZCB9IH0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHN5bnRoUG9tKCk6IGFueSB7XG4gICAgY29uc3QgeyBwbHVnaW5zLCBwbHVnaW5NYW5hZ2VtZW50IH0gPSB0aGlzLnJlbmRlclBsdWdpbnMoKTtcblxuICAgIC8vIEpTT04gcm91bmQtdHJpcCBkcm9wcyBldmVyeSBgdW5kZWZpbmVkYCBmaWVsZCwgc28gYWJzZW50IHNlY3Rpb25zIGFyZVxuICAgIC8vIG9taXR0ZWQgcmF0aGVyIHRoYW4gd3JpdHRlbiBhcyBlbXB0eSBlbGVtZW50cy5cbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICBwcm9qZWN0OiB7XG4gICAgICAgIC4uLlBPTV9YTUxfQVRUUlMsXG4gICAgICAgIG1vZGVsVmVyc2lvbjogJzQuMC4wJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCxcbiAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cElkLFxuICAgICAgICBhcnRpZmFjdElkOiB0aGlzLmFydGlmYWN0SWQsXG4gICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgICAgLy8gYGphcmAgaXMgTWF2ZW4ncyBkZWZhdWx0IGFuZCBpcyBsZWZ0IGltcGxpY2l0LlxuICAgICAgICBwYWNrYWdpbmc6IHRoaXMucGFja2FnaW5nID09PSAnamFyJyA/IHVuZGVmaW5lZCA6IHRoaXMucGFja2FnaW5nLFxuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICBtb2R1bGVzOiB0aGlzLm1vZHVsZXMubGVuZ3RoID8geyBtb2R1bGU6IHRoaXMubW9kdWxlcyB9IDogdW5kZWZpbmVkLFxuICAgICAgICBwcm9wZXJ0aWVzOiBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnRpZXMpLmxlbmd0aCA/IHRoaXMucHJvcGVydGllcyA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVwb3NpdG9yaWVzOiB0aGlzLnJlcG9zaXRvcmllcy5sZW5ndGhcbiAgICAgICAgICA/IHsgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3JpZXMgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBwbHVnaW5SZXBvc2l0b3JpZXM6IHRoaXMucGx1Z2luUmVwb3NpdG9yaWVzLmxlbmd0aFxuICAgICAgICAgID8geyBwbHVnaW5SZXBvc2l0b3J5OiB0aGlzLnBsdWdpblJlcG9zaXRvcmllcyB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlcGVuZGVuY3lNYW5hZ2VtZW50OiB0aGlzLnJlbmRlckRlcGVuZGVuY3lNYW5hZ2VtZW50KCksXG4gICAgICAgIGRlcGVuZGVuY2llczogdGhpcy5kZXBzLnNpemVcbiAgICAgICAgICA/IHsgZGVwZW5kZW5jeTogWy4uLnRoaXMuZGVwcy52YWx1ZXMoKV0ubWFwKHJlbmRlckRlcGVuZGVuY3kpIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgYnVpbGQ6IHJlbmRlckJ1aWxkKHBsdWdpbnMsIHBsdWdpbk1hbmFnZW1lbnQpLFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQnVpbGQocGx1Z2luczogYW55W10sIHBsdWdpbk1hbmFnZW1lbnQ6IGFueVtdKTogYW55IHtcbiAgaWYgKCFwbHVnaW5zLmxlbmd0aCAmJiAhcGx1Z2luTWFuYWdlbWVudC5sZW5ndGgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB7XG4gICAgcGx1Z2luTWFuYWdlbWVudDogcGx1Z2luTWFuYWdlbWVudC5sZW5ndGhcbiAgICAgID8geyBwbHVnaW5zOiB7IHBsdWdpbjogcGx1Z2luTWFuYWdlbWVudCB9IH1cbiAgICAgIDogdW5kZWZpbmVkLFxuICAgIHBsdWdpbnM6IHBsdWdpbnMubGVuZ3RoID8geyBwbHVnaW46IHBsdWdpbnMgfSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VWZXJzaW9uKFxuICBleGlzdGluZzogTWF2ZW5Db29yZGluYXRlcyxcbiAgYWRkZWQ6IE1hdmVuQ29vcmRpbmF0ZXMsXG4gIHNlY3Rpb246IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChleGlzdGluZy52ZXJzaW9uICYmIGFkZGVkLnZlcnNpb24gJiYgZXhpc3RpbmcudmVyc2lvbiAhPT0gYWRkZWQudmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke2tleShhZGRlZCl9IGlzIHBpbm5lZCBhdCB0d28gZGlmZmVyZW50IHZlcnNpb25zIGluICR7c2VjdGlvbn0gKCR7ZXhpc3RpbmcudmVyc2lvbn0gYW5kICR7YWRkZWQudmVyc2lvbn0pLiBQaW4gaXQgb25jZS5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGFkZGVkLnZlcnNpb24gPz8gZXhpc3RpbmcudmVyc2lvbjtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQ29vcmRzKGM6IE1hdmVuQ29vcmRpbmF0ZXMpOiBhbnkge1xuICByZXR1cm4geyBncm91cElkOiBjLmdyb3VwSWQsIGFydGlmYWN0SWQ6IGMuYXJ0aWZhY3RJZCwgdmVyc2lvbjogYy52ZXJzaW9uIH07XG59XG5cbmZ1bmN0aW9uIHJlbmRlckRlcGVuZGVuY3koZDogRGVwZW5kZW5jeUVudHJ5KTogYW55IHtcbiAgcmV0dXJuIHsgLi4ucmVuZGVyQ29vcmRzKGQuY29vcmRzKSwgdHlwZTogZC50eXBlLCBzY29wZTogZC5zY29wZSB9O1xufVxuXG5mdW5jdGlvbiByZW5kZXJQbHVnaW4oYzogTWF2ZW5Db29yZGluYXRlcywgb3B0aW9uczogamF2YS5QbHVnaW5PcHRpb25zKTogYW55IHtcbiAgY29uc3QgZGVwcyA9IChvcHRpb25zLmRlcGVuZGVuY2llcyA/PyBbXSkubWFwKChkKSA9PiByZW5kZXJDb29yZHMocGFyc2VNYXZlblNwZWMoZCkpKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZW5kZXJDb29yZHMoYyksXG4gICAgY29uZmlndXJhdGlvbjogb3B0aW9ucy5jb25maWd1cmF0aW9uLFxuICAgIGRlcGVuZGVuY2llczogZGVwcy5sZW5ndGggPyB7IGRlcGVuZGVuY3k6IGRlcHMgfSA6IHVuZGVmaW5lZCxcbiAgICBleGVjdXRpb25zOiBvcHRpb25zLmV4ZWN1dGlvbnM/Lmxlbmd0aFxuICAgICAgPyB7XG4gICAgICAgIGV4ZWN1dGlvbjogb3B0aW9ucy5leGVjdXRpb25zLm1hcCgoZSkgPT4gKHtcbiAgICAgICAgICBpZDogZS5pZCxcbiAgICAgICAgICBwaGFzZTogZS5waGFzZSxcbiAgICAgICAgICAvLyBPbmUgPGdvYWxzPiBob2xkaW5nIGV2ZXJ5IDxnb2FsPiAtIG5vdCBvbmUgPGdvYWxzPiBwZXIgZ29hbC5cbiAgICAgICAgICBnb2FsczogeyBnb2FsOiBlLmdvYWxzIH0sXG4gICAgICAgICAgY29uZmlndXJhdGlvbjogZS5jb25maWd1cmF0aW9uLFxuICAgICAgICB9KSksXG4gICAgICB9XG4gICAgICA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -82,7 +82,7 @@
82
82
  "publishConfig": {
83
83
  "access": "public"
84
84
  },
85
- "version": "0.0.16",
85
+ "version": "0.0.18",
86
86
  "jest": {
87
87
  "coverageProvider": "v8",
88
88
  "testMatch": [