@pipeline-builder/pipeline-core 3.4.106 → 3.4.108

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.
@@ -13,11 +13,8 @@ export declare class CoreConstants {
13
13
  static readonly HANDLER_MAX_RETRIES: number;
14
14
  static readonly HANDLER_RETRY_DELAY_MS: number;
15
15
  static readonly PLUGIN_BUILD_QUEUE_NAME: string;
16
- static readonly PLUGIN_BUILD_MAX_ATTEMPTS: number;
17
- static readonly PLUGIN_BUILD_BACKOFF_DELAY_MS: number;
18
16
  static readonly PLUGIN_BUILD_COMPLETED_RETENTION_SECS: number;
19
17
  static readonly PLUGIN_BUILD_FAILED_RETENTION_SECS: number;
20
- static readonly PLUGIN_BUILD_WORKER_TIMEOUT_MS: number;
21
18
  static readonly MAX_PAGE_LIMIT: number;
22
19
  static readonly DEFAULT_PAGE_LIMIT: number;
23
20
  static readonly MAX_PROMPT_LENGTH: number;
@@ -79,6 +76,16 @@ export declare class Config {
79
76
  * the real defaults.
80
77
  */
81
78
  static override<K extends keyof AppConfig>(section: K, partial: Partial<AppConfig[K]>): void;
79
+ /**
80
+ * Like {@link override}, but scoped: snapshots the current cache state for
81
+ * `section` and returns a restore function that reverts it. Use around a
82
+ * single unit of work (e.g. one CDK PipelineBuilder's synth) so a per-builder
83
+ * override does NOT leak into the process-wide cache and bleed into sibling
84
+ * builders in a multi-pipeline CDK app. Calling the returned function restores
85
+ * the exact prior state — the previously cached value, or an unloaded section
86
+ * if it had not been cached yet (so the next `get()` re-loads from env).
87
+ */
88
+ static overrideScoped<K extends keyof AppConfig>(section: K, partial: Partial<AppConfig[K]>): () => void;
82
89
  /**
83
90
  * Clear all cached config sections so the next `Config.get()` re-reads them
84
91
  * from the current `process.env` (re-running each section's loader + validator).
@@ -20,13 +20,13 @@ export class CoreConstants {
20
20
  static HANDLER_DEFAULT_BASE_URL = HandlerConstants.HANDLER_DEFAULT_BASE_URL;
21
21
  static HANDLER_MAX_RETRIES = HandlerConstants.HANDLER_MAX_RETRIES;
22
22
  static HANDLER_RETRY_DELAY_MS = HandlerConstants.HANDLER_RETRY_DELAY_MS;
23
- // Plugin build queue configuration
23
+ // Plugin build queue configuration.
24
+ // NOTE: maxAttempts / backoffDelayMs / workerTimeoutMs are NOT duplicated here —
25
+ // `loadPluginBuildConfig` (infrastructure-config.ts) is their single source of
26
+ // truth, read via `Config.get('pluginBuild')`.
24
27
  static PLUGIN_BUILD_QUEUE_NAME = process.env.PLUGIN_BUILD_QUEUE_NAME || 'plugin-build';
25
- static PLUGIN_BUILD_MAX_ATTEMPTS = parseInt(process.env.PLUGIN_BUILD_MAX_ATTEMPTS || '2', 10);
26
- static PLUGIN_BUILD_BACKOFF_DELAY_MS = parseInt(process.env.PLUGIN_BUILD_BACKOFF_DELAY_MS || '5000', 10); // 5s
27
28
  static PLUGIN_BUILD_COMPLETED_RETENTION_SECS = parseInt(process.env.PLUGIN_BUILD_COMPLETED_RETENTION_SECS || '3600', 10); // 1 hr
28
29
  static PLUGIN_BUILD_FAILED_RETENTION_SECS = parseInt(process.env.PLUGIN_BUILD_FAILED_RETENTION_SECS || '86400', 10); // 24 hr
29
- static PLUGIN_BUILD_WORKER_TIMEOUT_MS = parseInt(process.env.PLUGIN_BUILD_WORKER_TIMEOUT_MS || '10000', 10); // 10s
30
30
  // Pagination and limits
31
31
  static MAX_PAGE_LIMIT = parseInt(process.env.MAX_PAGE_LIMIT || '1000', 10);
32
32
  static DEFAULT_PAGE_LIMIT = parseInt(process.env.DEFAULT_PAGE_LIMIT || '100', 10);
@@ -139,6 +139,26 @@ export class Config {
139
139
  const defined = Object.fromEntries(Object.entries(partial).filter(([, v]) => v !== undefined));
140
140
  this.cache.set(section, { ...current, ...defined });
141
141
  }
142
+ /**
143
+ * Like {@link override}, but scoped: snapshots the current cache state for
144
+ * `section` and returns a restore function that reverts it. Use around a
145
+ * single unit of work (e.g. one CDK PipelineBuilder's synth) so a per-builder
146
+ * override does NOT leak into the process-wide cache and bleed into sibling
147
+ * builders in a multi-pipeline CDK app. Calling the returned function restores
148
+ * the exact prior state — the previously cached value, or an unloaded section
149
+ * if it had not been cached yet (so the next `get()` re-loads from env).
150
+ */
151
+ static overrideScoped(section, partial) {
152
+ const hadCached = this.cache.has(section);
153
+ const previous = hadCached ? this.cache.get(section) : undefined;
154
+ this.override(section, partial);
155
+ return () => {
156
+ if (hadCached)
157
+ this.cache.set(section, previous);
158
+ else
159
+ this.cache.delete(section);
160
+ };
161
+ }
142
162
  /**
143
163
  * Clear all cached config sections so the next `Config.get()` re-reads them
144
164
  * from the current `process.env` (re-running each section's loader + validator).
@@ -172,4 +192,4 @@ export class Config {
172
192
  return this.get(section);
173
193
  }
174
194
  }
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvYXBwLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIsb0JBQW9CLEVBQ3BCLGFBQWEsR0FDZCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLE1BQU0sb0JBQW9CLENBQUM7QUFFNUI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQUN4QixNQUFNLENBQVUsWUFBWSxHQUFHLGNBQWMsQ0FBQztJQUU5QywyQkFBMkI7SUFDM0IsTUFBTSxDQUFVLHNCQUFzQixHQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFbEYsOEdBQThHO0lBQzlHLHdHQUF3RztJQUN4RyxzR0FBc0c7SUFDdEcsTUFBTSxDQUFVLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDO0lBQ3pFLHVFQUF1RTtJQUN2RSxNQUFNLENBQVUsb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7SUFFN0UsTUFBTSxDQUFVLHdCQUF3QixHQUFHLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDO0lBQ3JGLE1BQU0sQ0FBVSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQztJQUMzRSxNQUFNLENBQVUsc0JBQXNCLEdBQUcsZ0JBQWdC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QyxPQUFlO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUEwQixDQUFDLENBQUM7SUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IEFsZ29yaXRobSB9IGZyb20gJ2pzb253ZWJ0b2tlbic7XG5pbXBvcnQgeyBsb2FkQmlsbGluZ0NvbmZpZyB9IGZyb20gJy4vYmlsbGluZy1jb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBBcHBDb25maWcgfSBmcm9tICcuL2NvbmZpZy10eXBlcy5qcyc7XG5pbXBvcnQgKiBhcyBIYW5kbGVyQ29uc3RhbnRzIGZyb20gJy4vaGFuZGxlci1jb25zdGFudHMuanMnO1xuaW1wb3J0IHtcbiAgbG9hZFJlZ2lzdHJ5Q29uZmlnLFxuICBsb2FkUmVkaXNDb25maWcsXG4gIGxvYWRQbHVnaW5CdWlsZENvbmZpZyxcbiAgbG9hZERvY2tlckNvbmZpZyxcbiAgbG9hZERhdGFiYXNlQ29uZmlnLFxuICBsb2FkT2JzZXJ2YWJpbGl0eUNvbmZpZyxcbiAgbG9hZENvbXBsaWFuY2VDb25maWcsXG4gIGxvYWRBV1NDb25maWcsXG59IGZyb20gJy4vaW5mcmFzdHJ1Y3R1cmUtY29uZmlnLmpzJztcbmltcG9ydCB7XG4gIGxvYWRTZXJ2ZXJDb25maWcsXG4gIGxvYWRBdXRoQ29uZmlnLFxuICBsb2FkUmF0ZUxpbWl0Q29uZmlnLFxuICB2YWxpZGF0ZVNlcnZlckNvbmZpZyxcbiAgdmFsaWRhdGVBdXRoQ29uZmlnLFxufSBmcm9tICcuL3NlcnZlci1jb25maWcuanMnO1xuXG4vKipcbiAqIENvcmUgY29uc3RhbnRzIOKAlCBjb25maWd1cmFibGUgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHNlbnNpYmxlIGRlZmF1bHRzLlxuICovXG5leHBvcnQgY2xhc3MgQ29yZUNvbnN0YW50cyB7XG4gIHN0YXRpYyByZWFkb25seSBOQU1FX1BBVFRFUk4gPSAvXlthLXowLTktXSskLztcblxuICAvLyBTdXBwb3J0ZWQgSldUIGFsZ29yaXRobXNcbiAgc3RhdGljIHJlYWRvbmx5IEFMTE9XRURfSldUX0FMR09SSVRITVM6IEFsZ29yaXRobVtdID0gWydIUzI1NicsICdSUzI1NicsICdFUzI1NiddO1xuXG4gIC8vIEN1c3RvbSBSZXNvdXJjZSBIYW5kbGVyIGNvbmZpZ3VyYXRpb24gKG11c3QgYmUgbGVzcyB0aGFuIExhbWJkYSB0aW1lb3V0IG9mIDMwcyB0byBhbGxvdyByZXNwb25zZSBoYW5kbGluZykuXG4gIC8vIFNvdXJjZWQgZnJvbSB0aGUgZGVwZW5kZW5jeS1mcmVlIGBoYW5kbGVyLWNvbnN0YW50cy50c2AgbGVhZiDigJQgdGhlIExhbWJkYSBoYW5kbGVyIGltcG9ydHMgdGhhdCBtb2R1bGVcbiAgLy8gZGlyZWN0bHkgKG5vdCB0aGlzIG9uZSkgc28gaXRzIGVzYnVpbGQgYnVuZGxlIG5ldmVyIHB1bGxzIGluIGF3cy1jZGstbGliIHZpYSBpbmZyYXN0cnVjdHVyZS1jb25maWcuXG4gIHN0YXRpYyByZWFkb25seSBIQU5ETEVSX1RJTUVPVVRfTVMgPSBIYW5kbGVyQ29uc3RhbnRzLkhBTkRMRVJfVElNRU9VVF9NUztcbiAgLyoqIERlZmF1bHQgcGxhdGZvcm0gVVJMIGZhbGxiYWNrIHdoZW4gUExBVEZPUk1fQkFTRV9VUkwgaXMgbm90IHNldC4gKi9cbiAgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUExBVEZPUk1fVVJMID0gSGFuZGxlckNvbnN0YW50cy5ERUZBVUxUX1BMQVRGT1JNX1VSTDtcblxuICBzdGF0aWMgcmVhZG9ubHkgSEFORExFUl9ERUZBVUxUX0JBU0VfVVJMID0gSGFuZGxlckNvbnN0YW50cy5IQU5ETEVSX0RFRkFVTFRfQkFTRV9VUkw7XG4gIHN0YXRpYyByZWFkb25seSBIQU5ETEVSX01BWF9SRVRSSUVTID0gSGFuZGxlckNvbnN0YW50cy5IQU5ETEVSX01BWF9SRVRSSUVTO1xuICBzdGF0aWMgcmVhZG9ubHkgSEFORExFUl9SRVRSWV9ERUxBWV9NUyA9IEhhbmRsZXJDb25zdGFudHMuSEFORExFUl9SRVRSWV9ERUxBWV9NUztcblxuICAvLyBQbHVnaW4gYnVpbGQgcXVldWUgY29uZmlndXJhdGlvblxuICBzdGF0aWMgcmVhZG9ubHkgUExVR0lOX0JVSUxEX1FVRVVFX05BTUUgPSBwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfUVVFVUVfTkFNRSB8fCAncGx1Z2luLWJ1aWxkJztcbiAgc3RhdGljIHJlYWRvbmx5IFBMVUdJTl9CVUlMRF9NQVhfQVRURU1QVFMgPSBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfTUFYX0FUVEVNUFRTIHx8ICcyJywgMTApO1xuICBzdGF0aWMgcmVhZG9ubHkgUExVR0lOX0JVSUxEX0JBQ0tPRkZfREVMQVlfTVMgPSBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfQkFDS09GRl9ERUxBWV9NUyB8fCAnNTAwMCcsIDEwKTsgLy8gNXNcbiAgc3RhdGljIHJlYWRvbmx5IFBMVUdJTl9CVUlMRF9DT01QTEVURURfUkVURU5USU9OX1NFQ1MgPSBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfQ09NUExFVEVEX1JFVEVOVElPTl9TRUNTIHx8ICczNjAwJywgMTApOyAvLyAxIGhyXG4gIHN0YXRpYyByZWFkb25seSBQTFVHSU5fQlVJTERfRkFJTEVEX1JFVEVOVElPTl9TRUNTID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0JVSUxEX0ZBSUxFRF9SRVRFTlRJT05fU0VDUyB8fCAnODY0MDAnLCAxMCk7IC8vIDI0IGhyXG4gIHN0YXRpYyByZWFkb25seSBQTFVHSU5fQlVJTERfV09SS0VSX1RJTUVPVVRfTVMgPSBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfV09SS0VSX1RJTUVPVVRfTVMgfHwgJzEwMDAwJywgMTApOyAvLyAxMHNcblxuICAvLyBQYWdpbmF0aW9uIGFuZCBsaW1pdHNcbiAgc3RhdGljIHJlYWRvbmx5IE1BWF9QQUdFX0xJTUlUID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuTUFYX1BBR0VfTElNSVQgfHwgJzEwMDAnLCAxMCk7XG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1BBR0VfTElNSVQgPSBwYXJzZUludChwcm9jZXNzLmVudi5ERUZBVUxUX1BBR0VfTElNSVQgfHwgJzEwMCcsIDEwKTtcbiAgc3RhdGljIHJlYWRvbmx5IE1BWF9QUk9NUFRfTEVOR1RIID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuTUFYX1BST01QVF9MRU5HVEggfHwgJzUwMDAnLCAxMCk7XG4gIHN0YXRpYyByZWFkb25seSBQTFVHSU5fTUFYX1VQTE9BRF9NQiA9IHBhcnNlSW50KHByb2Nlc3MuZW52LlBMVUdJTl9NQVhfVVBMT0FEX01CIHx8ICc0MDk2JywgMTApO1xuICBzdGF0aWMgcmVhZG9ubHkgUElQRUxJTkVfTkFNRV9NQVhfTEVOR1RIID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuUElQRUxJTkVfTkFNRV9NQVhfTEVOR1RIIHx8ICcxMDAnLCAxMCk7XG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1BMVUdJTl9WRVJTSU9OID0gcHJvY2Vzcy5lbnYuREVGQVVMVF9QTFVHSU5fVkVSU0lPTiB8fCAnMS4wLjAnO1xuXG4gIC8vIFNTRSBzdHJlYW0gdGltZW91dCBmb3IgQUkgZ2VuZXJhdGlvbiBlbmRwb2ludHNcbiAgc3RhdGljIHJlYWRvbmx5IFNTRV9TVFJFQU1fVElNRU9VVF9NUyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LlNTRV9TVFJFQU1fVElNRU9VVF9NUyB8fCAnMzAwMDAwJywgMTApOyAvLyA1IG1pblxuXG4gIC8vIEdpdCBwcm92aWRlciBBUEkgYmFzZSBVUkxzIChjb25maWd1cmFibGUgZm9yIGVudGVycHJpc2UgaW5zdGFuY2VzKVxuICBzdGF0aWMgcmVhZG9ubHkgR0lUSFVCX0FQSV9CQVNFX1VSTCA9IHByb2Nlc3MuZW52LkdJVEhVQl9BUElfQkFTRV9VUkwgfHwgJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nO1xuICBzdGF0aWMgcmVhZG9ubHkgQklUQlVDS0VUX0FQSV9CQVNFX1VSTCA9IHByb2Nlc3MuZW52LkJJVEJVQ0tFVF9BUElfQkFTRV9VUkwgfHwgJ2h0dHBzOi8vYXBpLmJpdGJ1Y2tldC5vcmcvMi4wJztcblxuICAvLyBCdWxrIG9wZXJhdGlvbnMgYW5kIGV2ZW50IGluZ2VzdGlvblxuICBzdGF0aWMgcmVhZG9ubHkgTUFYX0JVTEtfSVRFTVMgPSBwYXJzZUludChwcm9jZXNzLmVudi5NQVhfQlVMS19JVEVNUyB8fCAnMTAwJywgMTApO1xuICBzdGF0aWMgcmVhZG9ubHkgTUFYX0VWRU5UU19QRVJfQkFUQ0ggPSBwYXJzZUludChwcm9jZXNzLmVudi5NQVhfRVZFTlRTX1BFUl9CQVRDSCB8fCAnMTAwJywgMTApO1xuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9SRVBPUlRfUkFOR0VfREFZUyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkRFRkFVTFRfUkVQT1JUX1JBTkdFX0RBWVMgfHwgJzMwJywgMTApO1xuXG4gIC8vIFNlY3JldHMgTWFuYWdlciBwYXRoIHByZWZpeCBmb3Igb3JnLXNjb3BlZCBzZWNyZXRzXG4gIHN0YXRpYyByZWFkb25seSBTRUNSRVRTX1BBVEhfUFJFRklYID0gcHJvY2Vzcy5lbnYuU0VDUkVUU19QQVRIX1BSRUZJWCB8fCAncGlwZWxpbmUtYnVpbGRlcic7XG5cbiAgLyoqIEJ1aWxkIGEgU2VjcmV0cyBNYW5hZ2VyIHBhdGg6IHtwcmVmaXh9L3tvcmdJZH0ve25hbWV9ICovXG4gIHN0YXRpYyBzZWNyZXRQYXRoKG9yZ0lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke0NvcmVDb25zdGFudHMuU0VDUkVUU19QQVRIX1BSRUZJWH0vJHtvcmdJZH0vJHtuYW1lfWA7XG4gIH1cblxuICAvLyBEYXRhYmFzZSBjb25uZWN0aW9uXG4gIHN0YXRpYyByZWFkb25seSBEQl9NQVhfUkVUUklFUyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkRCX01BWF9SRVRSSUVTIHx8ICczJywgMTApO1xuICBzdGF0aWMgcmVhZG9ubHkgREJfUkVUUllfREVMQVlfTVMgPSBwYXJzZUludChwcm9jZXNzLmVudi5EQl9SRVRSWV9ERUxBWV9NUyB8fCAnMTAwMCcsIDEwKTsgLy8gMXNcbiAgc3RhdGljIHJlYWRvbmx5IERCX1RSQU5TQUNUSU9OX1RJTUVPVVRfTVMgPSBwYXJzZUludChwcm9jZXNzLmVudi5EQl9UUkFOU0FDVElPTl9USU1FT1VUX01TIHx8ICczMDAwMCcsIDEwKTsgLy8gMzBzXG4gIHN0YXRpYyByZWFkb25seSBEQl9DTE9TRV9USU1FT1VUX01TID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREJfQ0xPU0VfVElNRU9VVF9NUyB8fCAnNTAwMCcsIDEwKTsgLy8gNXNcblxuICAvLyBSZXNwb25zZSBjb21wcmVzc2lvblxuICBzdGF0aWMgcmVhZG9ubHkgQ09NUFJFU1NJT05fVEhSRVNIT0xEX0JZVEVTID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuQ09NUFJFU1NJT05fVEhSRVNIT0xEX0JZVEVTIHx8ICcxMDI0JywgMTApO1xuXG4gIC8vIElkZW1wb3RlbmN5XG4gIHN0YXRpYyByZWFkb25seSBJREVNUE9URU5DWV9UVExfTVMgPSBwYXJzZUludChwcm9jZXNzLmVudi5JREVNUE9URU5DWV9UVExfTVMgfHwgJzMwMDAwMCcsIDEwKTsgLy8gNSBtaW5cbiAgc3RhdGljIHJlYWRvbmx5IElERU1QT1RFTkNZX01BWF9TVE9SRV9TSVpFID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuSURFTVBPVEVOQ1lfTUFYX1NUT1JFX1NJWkUgfHwgJzEwMDAwJywgMTApO1xuICBzdGF0aWMgcmVhZG9ubHkgSURFTVBPVEVOQ1lfQ0xFQU5VUF9JTlRFUlZBTF9NUyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LklERU1QT1RFTkNZX0NMRUFOVVBfSU5URVJWQUxfTVMgfHwgJzYwMDAwJywgMTApOyAvLyAxIG1pblxuXG4gIC8vIENhY2hlXG4gIHN0YXRpYyByZWFkb25seSBDQUNIRV9DTEVBTlVQX0lOVEVSVkFMX01TID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuQ0FDSEVfQ0xFQU5VUF9JTlRFUlZBTF9NUyB8fCAnMzAwMDAnLCAxMCk7IC8vIDMwc1xuXG4gIC8vIFNlcnZlci1zaWRlIGNhY2hlIFRUTHMgKHNlY29uZHMpXG4gIHN0YXRpYyByZWFkb25seSBDQUNIRV9UVExfRU5USVRZID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuQ0FDSEVfVFRMX0VOVElUWSB8fCAnNjAnLCAxMCk7IC8vIHBsdWdpbi9waXBlbGluZSBmaW5kQnlJZFxuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfVFRMX01FU1NBR0UgPSBwYXJzZUludChwcm9jZXNzLmVudi5DQUNIRV9UVExfTUVTU0FHRSB8fCAnMzAwJywgMTApOyAvLyBhbm5vdW5jZW1lbnRzL2NvbnZlcnNhdGlvbnMgKDUgbWluKVxuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfVFRMX1JFUE9SVF9JTlZFTlRPUlkgPSBwYXJzZUludChwcm9jZXNzLmVudi5DQUNIRV9UVExfUkVQT1JUX0lOVkVOVE9SWSB8fCAnMzAwJywgMTApOyAvLyBwbHVnaW4gc3VtbWFyeS9kaXN0cmlidXRpb24gKDUgbWluKVxuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfVFRMX1JFUE9SVF9USU1FU0VSSUVTID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuQ0FDSEVfVFRMX1JFUE9SVF9USU1FU0VSSUVTIHx8ICcxMjAnLCAxMCk7IC8vIGV4ZWN1dGlvbi9idWlsZCBtZXRyaWNzICgyIG1pbilcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX1RUTF9DT01QTElBTkNFX1JVTEVTID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuQ0FDSEVfVFRMX0NPTVBMSUFOQ0VfUlVMRVMgfHwgJzYwJywgMTApOyAvLyBhY3RpdmUgY29tcGxpYW5jZSBydWxlc1xuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfVFRMX0JJTExJTkdfUExBTlMgPSBwYXJzZUludChwcm9jZXNzLmVudi5DQUNIRV9UVExfQklMTElOR19QTEFOUyB8fCAnMTQ0MDAnLCAxMCk7IC8vIGJpbGxpbmcgcGxhbnMgKDQgaG91cnMpXG5cbiAgLy8gU1NFIGJhY2twcmVzc3VyZVxuICBzdGF0aWMgcmVhZG9ubHkgU1NFX0JBQ0tQUkVTU1VSRV9USFJFU0hPTEQgPSBwYXJzZUludChwcm9jZXNzLmVudi5TU0VfQkFDS1BSRVNTVVJFX1RIUkVTSE9MRCB8fCAnMTAnLCAxMCk7XG5cbiAgLy8gSFRUUCBDYWNoZS1Db250cm9sIGhlYWRlcnNcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX0NPTlRST0xfTElTVCA9IHByb2Nlc3MuZW52LkNBQ0hFX0NPTlRST0xfTElTVCB8fCAncHJpdmF0ZSwgbWF4LWFnZT0zMCwgc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZT02MCc7XG4gIHN0YXRpYyByZWFkb25seSBDQUNIRV9DT05UUk9MX0RFVEFJTCA9IHByb2Nlc3MuZW52LkNBQ0hFX0NPTlRST0xfREVUQUlMIHx8ICdwcml2YXRlLCBtYXgtYWdlPTYwLCBzdGFsZS13aGlsZS1yZXZhbGlkYXRlPTEyMCc7XG59XG5cbi8qKlxuICogUGVyLXNlY3Rpb24gbG9hZGVyIG1hcCDigJQgZWFjaCBzZWN0aW9uIGlzIGxvYWRlZCBsYXppbHkgb24gZmlyc3QgYWNjZXNzLlxuICogVGhpcyBhdm9pZHMgbG9hZGluZyBhbGwgY29uZmlnIHNlY3Rpb25zIChhbmQgdGhlaXIgcmVxdWlyZWQgZW52IHZhcnMpXG4gKiB3aGVuIG9ubHkgb25lIHNlY3Rpb24gaXMgbmVlZGVkIChlLmcuIENESyBzeW50aGVzaXMgb25seSBuZWVkcyAnYXdzJykuXG4gKi9cbmNvbnN0IHNlY3Rpb25Mb2FkZXJzOiB7IFtLIGluIGtleW9mIEFwcENvbmZpZ106ICgpID0+IEFwcENvbmZpZ1tLXSB9ID0ge1xuICBzZXJ2ZXI6IGxvYWRTZXJ2ZXJDb25maWcsXG4gIGF1dGg6IGxvYWRBdXRoQ29uZmlnLFxuICBkYXRhYmFzZTogbG9hZERhdGFiYXNlQ29uZmlnLFxuICByZWdpc3RyeTogbG9hZFJlZ2lzdHJ5Q29uZmlnLFxuICByZWRpczogbG9hZFJlZGlzQ29uZmlnLFxuICBwbHVnaW5CdWlsZDogbG9hZFBsdWdpbkJ1aWxkQ29uZmlnLFxuICBkb2NrZXJDb25maWc6IGxvYWREb2NrZXJDb25maWcsXG4gIG9ic2VydmFiaWxpdHk6IGxvYWRPYnNlcnZhYmlsaXR5Q29uZmlnLFxuICBjb21wbGlhbmNlOiBsb2FkQ29tcGxpYW5jZUNvbmZpZyxcbiAgYXdzOiBsb2FkQVdTQ29uZmlnLFxuICByYXRlTGltaXQ6IGxvYWRSYXRlTGltaXRDb25maWcsXG4gIGJpbGxpbmc6IGxvYWRCaWxsaW5nQ29uZmlnLFxufTtcblxuLyoqIFBlci1zZWN0aW9uIHZhbGlkYXRvcnMg4oCUIG9ubHkgcnVuIGZvciBzZWN0aW9ucyB0aGF0IGhhdmUgdmFsaWRhdGlvbiBsb2dpYy4gKi9cbmNvbnN0IHNlY3Rpb25WYWxpZGF0b3JzOiBQYXJ0aWFsPHsgW0sgaW4ga2V5b2YgQXBwQ29uZmlnXTogKGNvbmZpZzogQXBwQ29uZmlnW0tdKSA9PiB2b2lkIH0+ID0ge1xuICBzZXJ2ZXI6IHZhbGlkYXRlU2VydmVyQ29uZmlnLFxufTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZhY2FkZSB3aXRoIGxhenkgcGVyLXNlY3Rpb24gbG9hZGluZy5cbiAqXG4gKiBFYWNoIHNlY3Rpb24gaXMgbG9hZGVkIGFuZCB2YWxpZGF0ZWQgaW5kZXBlbmRlbnRseSBvbiBmaXJzdCBhY2Nlc3MsXG4gKiBzbyByZXF1ZXN0aW5nIGBDb25maWcuZ2V0KCdhd3MnKWAgZG9lcyBub3QgdHJpZ2dlciBsb2FkaW5nIG9mXG4gKiBzZXJ2ZXIsIGF1dGgsIG9yIGJpbGxpbmcgY29uZmlnIChhbmQgdGhlaXIgZW52IHZhciByZXF1aXJlbWVudHMpLlxuICpcbiAqIFVzYWdlOiBgQ29uZmlnLmdldCgnc2VydmVyJylgLCBgQ29uZmlnLmdldCgnYXV0aCcpYCwgZXRjLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlnIHtcbiAgcHJpdmF0ZSBzdGF0aWMgY2FjaGUgPSBuZXcgTWFwPGtleW9mIEFwcENvbmZpZywgdW5rbm93bj4oKTtcblxuICAvKipcbiAgICogR2V0IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZWN0aW9uIChsb2FkZWQgbGF6aWx5IG9uIGZpcnN0IGFjY2VzcykuXG4gICAqL1xuICBzdGF0aWMgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBBcHBDb25maWc+KHNlY3Rpb246IEspOiBBcHBDb25maWdbS10ge1xuICAgIGlmICghdGhpcy5jYWNoZS5oYXMoc2VjdGlvbikpIHtcbiAgICAgIGNvbnN0IGxvYWRlciA9IHNlY3Rpb25Mb2FkZXJzW3NlY3Rpb25dO1xuICAgICAgY29uc3QgdmFsdWUgPSBsb2FkZXIoKTtcbiAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHNlY3Rpb25WYWxpZGF0b3JzW3NlY3Rpb25dO1xuICAgICAgaWYgKHZhbGlkYXRvcikgKHZhbGlkYXRvciBhcyAodjogQXBwQ29uZmlnW0tdKSA9PiB2b2lkKSh2YWx1ZSk7XG4gICAgICB0aGlzLmNhY2hlLnNldChzZWN0aW9uLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNhY2hlLmdldChzZWN0aW9uKSBhcyBBcHBDb25maWdbS107XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgYSBwYXJ0aWFsIG92ZXJyaWRlIGludG8gYSBjb25maWcgc2VjdGlvbiwgdGFraW5nIHByZWNlZGVuY2Ugb3ZlciB0aGVcbiAgICogZW52LWxvYWRlZCB2YWx1ZXMgZm9yIGFsbCBzdWJzZXF1ZW50IGBDb25maWcuZ2V0KHNlY3Rpb24pYCBjYWxscy5cbiAgICpcbiAgICogVXNlZCBhdCBDREsgc3ludGggc3RhcnQgdG8gaW5qZWN0IHBsYXRmb3JtLXNvdXJjZWQgaW5mcmFzdHJ1Y3R1cmUgY29uZmlnXG4gICAqIChlLmcuIHRoZSByZWdpc3RyeSBwdWxsIGhvc3QgZGVyaXZlZCBmcm9tIHRoZSBwbGF0Zm9ybSdzIHB1YmxpYyBVUkwpIHNvIHRoZVxuICAgKiBzeW50aCBkb2VzIG5vdCBzaWxlbnRseSBkZXBlbmQgb24gdGhlIG9wZXJhdG9yJ3MgbG9jYWwgYHByb2Nlc3MuZW52YC5cbiAgICogYHVuZGVmaW5lZGAgZmllbGRzIGluIGBwYXJ0aWFsYCBhcmUgaWdub3JlZCBzbyB0aGV5IG5ldmVyIGNsb2JiZXIgYSBsb2FkZWRcbiAgICogdmFsdWUuIExvYWRzIChhbmQgdmFsaWRhdGVzKSB0aGUgc2VjdGlvbiBmaXJzdCBzbyB0aGUgb3ZlcnJpZGUgbWVyZ2VzIG9udG9cbiAgICogdGhlIHJlYWwgZGVmYXVsdHMuXG4gICAqL1xuICBzdGF0aWMgb3ZlcnJpZGU8SyBleHRlbmRzIGtleW9mIEFwcENvbmZpZz4oc2VjdGlvbjogSywgcGFydGlhbDogUGFydGlhbDxBcHBDb25maWdbS10+KTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0KHNlY3Rpb24pO1xuICAgIGNvbnN0IGRlZmluZWQgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhwYXJ0aWFsKS5maWx0ZXIoKFssIHZdKSA9PiB2ICE9PSB1bmRlZmluZWQpLFxuICAgICkgYXMgUGFydGlhbDxBcHBDb25maWdbS10+O1xuICAgIHRoaXMuY2FjaGUuc2V0KHNlY3Rpb24sIHsgLi4uY3VycmVudCwgLi4uZGVmaW5lZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgY2FjaGVkIGNvbmZpZyBzZWN0aW9ucyBzbyB0aGUgbmV4dCBgQ29uZmlnLmdldCgpYCByZS1yZWFkcyB0aGVtXG4gICAqIGZyb20gdGhlIGN1cnJlbnQgYHByb2Nlc3MuZW52YCAocmUtcnVubmluZyBlYWNoIHNlY3Rpb24ncyBsb2FkZXIgKyB2YWxpZGF0b3IpLlxuICAgKlxuICAgKiBVc2Ugd2hlbiBlbnYgaGFzIGJlZW4gbXV0YXRlZCBpbi1wcm9jZXNzIGFuZCB0aGUgY2FjaGUgaXMgbm93IHN0YWxlIOKAlCBlLmcuIGFcbiAgICogbG9uZy1ydW5uaW5nIENMSSB0aGF0IHJlY29uZmlndXJlcyBiZXR3ZWVuIG9wZXJhdGlvbnMuIENESyBzeW50aCBydW5zIGluIGFcbiAgICogZnJlc2ggc3VicHJvY2VzcyB0aGF0IGFscmVhZHkgcmVhZHMgZW52IG9uIGZpcnN0IGFjY2Vzcywgc28gaXQgZG9lcyBub3QgbmVlZFxuICAgKiB0aGlzLiBOb3RlOiB0aGlzIGFsc28gZHJvcHMgYW55IHZhbHVlcyBzZXQgdmlhIHtAbGluayBvdmVycmlkZX0uXG4gICAqL1xuICBzdGF0aWMgcmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuY2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgUmVzZXQgY29uZmlndXJhdGlvbiAoZm9yIHRlc3Rpbmcgb25seSkuIEFsaWFzIGZvciB7QGxpbmsgcmVsb2FkfS5cbiAgICovXG4gIHN0YXRpYyBfcmVzZXRGb3JUZXN0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYXV0aCBjb25maWd1cmF0aW9uIChKV1Qgc2VjcmV0cywgYWxnb3JpdGhtcywgZXhwaXJhdGlvbikuXG4gICAqIENhbGwgdGhpcyBhdCBzZXJ2ZXIgc3RhcnR1cCwgbm90IGR1cmluZyBDREsgc3ludGhlc2lzLlxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlQXV0aCgpOiB2b2lkIHtcbiAgICB2YWxpZGF0ZUF1dGhDb25maWcodGhpcy5nZXQoJ2F1dGgnKSk7XG4gIH1cblxuICAvKipcbiAgICogVW50eXBlZCBjb25maWcgYWNjZXNzIOKAlCB1c2Ugd2hlbiB0aGUgcHVibGlzaGVkIHBhY2thZ2UgdHlwZXMgZG9uJ3QgaW5jbHVkZSBhIG5ldyBzZWN0aW9uIHlldC5cbiAgICogQXZvaWRzIHRoZSBgKENvbmZpZyBhcyB1bmtub3duIGFzIC4uLikuZ2V0KC4uLilgIGNhc3QgcGF0dGVybiBpbiBjb25zdW1lcnMuXG4gICAqL1xuICBzdGF0aWMgZ2V0QW55KHNlY3Rpb246IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLmdldChzZWN0aW9uIGFzIGtleW9mIEFwcENvbmZpZyk7XG4gIH1cbn1cbiJdfQ==
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvYXBwLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBR3RDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIsb0JBQW9CLEVBQ3BCLGFBQWEsR0FDZCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsa0JBQWtCLEdBQ25CLE1BQU0sb0JBQW9CLENBQUM7QUFFNUI7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQUN4QixNQUFNLENBQVUsWUFBWSxHQUFHLGNBQWMsQ0FBQztJQUU5QywyQkFBMkI7SUFDM0IsTUFBTSxDQUFVLHNCQUFzQixHQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFbEYsOEdBQThHO0lBQzlHLHdHQUF3RztJQUN4RyxzR0FBc0c7SUFDdEcsTUFBTSxDQUFVLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDO0lBQ3pFLHVFQUF1RTtJQUN2RSxNQUFNLENBQVUsb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7SUFFN0UsTUFBTSxDQUFVLHdCQUF3QixHQUFHLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDO0lBQ3JGLE1BQU0sQ0FBVSxtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQztJQUMzRSxNQUFNLENBQVUsc0JBQXNCLEdBQUcsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUM7SUFFakYsb0NBQW9DO0lBQ3BDLGlGQUFpRjtJQUNqRiwrRUFBK0U7SUFDL0UsK0NBQStDO0lBQy9DLE1BQU0sQ0FBVSx1QkFBdUIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixJQUFJLGNBQWMsQ0FBQztJQUNoRyxNQUFNLENBQVUscUNBQXFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTztJQUMxSSxNQUFNLENBQVUsa0NBQWtDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLElBQUksT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUTtJQUV0SSx3QkFBd0I7SUFDeEIsTUFBTSxDQUFVLGNBQWMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sQ0FBVSxrQkFBa0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0YsTUFBTSxDQUFVLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixJQUFJLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxRixNQUFNLENBQVUsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hHLE1BQU0sQ0FBVSx3QkFBd0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkcsTUFBTSxDQUFVLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksT0FBTyxDQUFDO0lBRXZGLGlEQUFpRDtJQUNqRCxNQUFNLENBQVUscUJBQXFCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLElBQUksUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUTtJQUU3RyxxRUFBcUU7SUFDckUsTUFBTSxDQUFVLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksd0JBQXdCLENBQUM7SUFDbEcsTUFBTSxDQUFVLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLElBQUksK0JBQStCLENBQUM7SUFFL0csc0NBQXNDO0lBQ3RDLE1BQU0sQ0FBVSxjQUFjLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRixNQUFNLENBQVUsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLE1BQU0sQ0FBVSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFeEcscURBQXFEO0lBQ3JELE1BQU0sQ0FBVSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixJQUFJLGtCQUFrQixDQUFDO0lBRTVGLDREQUE0RDtJQUM1RCxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWEsRUFBRSxJQUFZO1FBQzNDLE9BQU8sR0FBRyxhQUFhLENBQUMsbUJBQW1CLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2pFLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsTUFBTSxDQUFVLGNBQWMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sQ0FBVSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLO0lBQ2hHLE1BQU0sQ0FBVSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsSUFBSSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNO0lBQ2xILE1BQU0sQ0FBVSxtQkFBbUIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLO0lBRXBHLHVCQUF1QjtJQUN2QixNQUFNLENBQVUsMkJBQTJCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTlHLGNBQWM7SUFDZCxNQUFNLENBQVUsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLElBQUksUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUTtJQUN2RyxNQUFNLENBQVUsMEJBQTBCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLElBQUksT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdHLE1BQU0sQ0FBVSwrQkFBK0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsSUFBSSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRO0lBRWhJLFFBQVE7SUFDUixNQUFNLENBQVUseUJBQXlCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLElBQUksT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTTtJQUVsSCxtQ0FBbUM7SUFDbkMsTUFBTSxDQUFVLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtJQUNsSCxNQUFNLENBQVUsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0NBQXNDO0lBQ2hJLE1BQU0sQ0FBVSwwQkFBMEIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQ0FBc0M7SUFDbEosTUFBTSxDQUFVLDJCQUEyQixHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixJQUFJLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztJQUNoSixNQUFNLENBQVUsMEJBQTBCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsMEJBQTBCO0lBQ3JJLE1BQU0sQ0FBVSx1QkFBdUIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsSUFBSSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQywwQkFBMEI7SUFFbEksbUJBQW1CO0lBQ25CLE1BQU0sQ0FBVSwwQkFBMEIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFMUcsNkJBQTZCO0lBQzdCLE1BQU0sQ0FBVSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLGdEQUFnRCxDQUFDO0lBQ3hILE1BQU0sQ0FBVSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixJQUFJLGlEQUFpRCxDQUFDOztBQUcvSDs7OztHQUlHO0FBQ0gsTUFBTSxjQUFjLEdBQW1EO0lBQ3JFLE1BQU0sRUFBRSxnQkFBZ0I7SUFDeEIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsUUFBUSxFQUFFLGtCQUFrQjtJQUM1QixRQUFRLEVBQUUsa0JBQWtCO0lBQzVCLEtBQUssRUFBRSxlQUFlO0lBQ3RCLFdBQVcsRUFBRSxxQkFBcUI7SUFDbEMsWUFBWSxFQUFFLGdCQUFnQjtJQUM5QixhQUFhLEVBQUUsdUJBQXVCO0lBQ3RDLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsR0FBRyxFQUFFLGFBQWE7SUFDbEIsU0FBUyxFQUFFLG1CQUFtQjtJQUM5QixPQUFPLEVBQUUsaUJBQWlCO0NBQzNCLENBQUM7QUFFRixpRkFBaUY7QUFDakYsTUFBTSxpQkFBaUIsR0FBd0U7SUFDN0YsTUFBTSxFQUFFLG9CQUFvQjtDQUM3QixDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLE9BQU8sTUFBTTtJQUNULE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFFM0Q7O09BRUc7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUE0QixPQUFVO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUN2QixNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3QyxJQUFJLFNBQVM7Z0JBQUcsU0FBdUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFpQixDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBNEIsT0FBVSxFQUFFLE9BQThCO1FBQ25GLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FDbEMsQ0FBQztRQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FDbkIsT0FBVSxFQUNWLE9BQThCO1FBRTlCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksU0FBUztnQkFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7O2dCQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsTUFBTTtRQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQjtRQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxZQUFZO1FBQ2pCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFlO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUEwQixDQUFDLENBQUM7SUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IEFsZ29yaXRobSB9IGZyb20gJ2pzb253ZWJ0b2tlbic7XG5pbXBvcnQgeyBsb2FkQmlsbGluZ0NvbmZpZyB9IGZyb20gJy4vYmlsbGluZy1jb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBBcHBDb25maWcgfSBmcm9tICcuL2NvbmZpZy10eXBlcy5qcyc7XG5pbXBvcnQgKiBhcyBIYW5kbGVyQ29uc3RhbnRzIGZyb20gJy4vaGFuZGxlci1jb25zdGFudHMuanMnO1xuaW1wb3J0IHtcbiAgbG9hZFJlZ2lzdHJ5Q29uZmlnLFxuICBsb2FkUmVkaXNDb25maWcsXG4gIGxvYWRQbHVnaW5CdWlsZENvbmZpZyxcbiAgbG9hZERvY2tlckNvbmZpZyxcbiAgbG9hZERhdGFiYXNlQ29uZmlnLFxuICBsb2FkT2JzZXJ2YWJpbGl0eUNvbmZpZyxcbiAgbG9hZENvbXBsaWFuY2VDb25maWcsXG4gIGxvYWRBV1NDb25maWcsXG59IGZyb20gJy4vaW5mcmFzdHJ1Y3R1cmUtY29uZmlnLmpzJztcbmltcG9ydCB7XG4gIGxvYWRTZXJ2ZXJDb25maWcsXG4gIGxvYWRBdXRoQ29uZmlnLFxuICBsb2FkUmF0ZUxpbWl0Q29uZmlnLFxuICB2YWxpZGF0ZVNlcnZlckNvbmZpZyxcbiAgdmFsaWRhdGVBdXRoQ29uZmlnLFxufSBmcm9tICcuL3NlcnZlci1jb25maWcuanMnO1xuXG4vKipcbiAqIENvcmUgY29uc3RhbnRzIOKAlCBjb25maWd1cmFibGUgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHNlbnNpYmxlIGRlZmF1bHRzLlxuICovXG5leHBvcnQgY2xhc3MgQ29yZUNvbnN0YW50cyB7XG4gIHN0YXRpYyByZWFkb25seSBOQU1FX1BBVFRFUk4gPSAvXlthLXowLTktXSskLztcblxuICAvLyBTdXBwb3J0ZWQgSldUIGFsZ29yaXRobXNcbiAgc3RhdGljIHJlYWRvbmx5IEFMTE9XRURfSldUX0FMR09SSVRITVM6IEFsZ29yaXRobVtdID0gWydIUzI1NicsICdSUzI1NicsICdFUzI1NiddO1xuXG4gIC8vIEN1c3RvbSBSZXNvdXJjZSBIYW5kbGVyIGNvbmZpZ3VyYXRpb24gKG11c3QgYmUgbGVzcyB0aGFuIExhbWJkYSB0aW1lb3V0IG9mIDMwcyB0byBhbGxvdyByZXNwb25zZSBoYW5kbGluZykuXG4gIC8vIFNvdXJjZWQgZnJvbSB0aGUgZGVwZW5kZW5jeS1mcmVlIGBoYW5kbGVyLWNvbnN0YW50cy50c2AgbGVhZiDigJQgdGhlIExhbWJkYSBoYW5kbGVyIGltcG9ydHMgdGhhdCBtb2R1bGVcbiAgLy8gZGlyZWN0bHkgKG5vdCB0aGlzIG9uZSkgc28gaXRzIGVzYnVpbGQgYnVuZGxlIG5ldmVyIHB1bGxzIGluIGF3cy1jZGstbGliIHZpYSBpbmZyYXN0cnVjdHVyZS1jb25maWcuXG4gIHN0YXRpYyByZWFkb25seSBIQU5ETEVSX1RJTUVPVVRfTVMgPSBIYW5kbGVyQ29uc3RhbnRzLkhBTkRMRVJfVElNRU9VVF9NUztcbiAgLyoqIERlZmF1bHQgcGxhdGZvcm0gVVJMIGZhbGxiYWNrIHdoZW4gUExBVEZPUk1fQkFTRV9VUkwgaXMgbm90IHNldC4gKi9cbiAgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUExBVEZPUk1fVVJMID0gSGFuZGxlckNvbnN0YW50cy5ERUZBVUxUX1BMQVRGT1JNX1VSTDtcblxuICBzdGF0aWMgcmVhZG9ubHkgSEFORExFUl9ERUZBVUxUX0JBU0VfVVJMID0gSGFuZGxlckNvbnN0YW50cy5IQU5ETEVSX0RFRkFVTFRfQkFTRV9VUkw7XG4gIHN0YXRpYyByZWFkb25seSBIQU5ETEVSX01BWF9SRVRSSUVTID0gSGFuZGxlckNvbnN0YW50cy5IQU5ETEVSX01BWF9SRVRSSUVTO1xuICBzdGF0aWMgcmVhZG9ubHkgSEFORExFUl9SRVRSWV9ERUxBWV9NUyA9IEhhbmRsZXJDb25zdGFudHMuSEFORExFUl9SRVRSWV9ERUxBWV9NUztcblxuICAvLyBQbHVnaW4gYnVpbGQgcXVldWUgY29uZmlndXJhdGlvbi5cbiAgLy8gTk9URTogbWF4QXR0ZW1wdHMgLyBiYWNrb2ZmRGVsYXlNcyAvIHdvcmtlclRpbWVvdXRNcyBhcmUgTk9UIGR1cGxpY2F0ZWQgaGVyZSDigJRcbiAgLy8gYGxvYWRQbHVnaW5CdWlsZENvbmZpZ2AgKGluZnJhc3RydWN0dXJlLWNvbmZpZy50cykgaXMgdGhlaXIgc2luZ2xlIHNvdXJjZSBvZlxuICAvLyB0cnV0aCwgcmVhZCB2aWEgYENvbmZpZy5nZXQoJ3BsdWdpbkJ1aWxkJylgLlxuICBzdGF0aWMgcmVhZG9ubHkgUExVR0lOX0JVSUxEX1FVRVVFX05BTUUgPSBwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfUVVFVUVfTkFNRSB8fCAncGx1Z2luLWJ1aWxkJztcbiAgc3RhdGljIHJlYWRvbmx5IFBMVUdJTl9CVUlMRF9DT01QTEVURURfUkVURU5USU9OX1NFQ1MgPSBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fQlVJTERfQ09NUExFVEVEX1JFVEVOVElPTl9TRUNTIHx8ICczNjAwJywgMTApOyAvLyAxIGhyXG4gIHN0YXRpYyByZWFkb25seSBQTFVHSU5fQlVJTERfRkFJTEVEX1JFVEVOVElPTl9TRUNTID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuUExVR0lOX0JVSUxEX0ZBSUxFRF9SRVRFTlRJT05fU0VDUyB8fCAnODY0MDAnLCAxMCk7IC8vIDI0IGhyXG5cbiAgLy8gUGFnaW5hdGlvbiBhbmQgbGltaXRzXG4gIHN0YXRpYyByZWFkb25seSBNQVhfUEFHRV9MSU1JVCA9IHBhcnNlSW50KHByb2Nlc3MuZW52Lk1BWF9QQUdFX0xJTUlUIHx8ICcxMDAwJywgMTApO1xuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9QQUdFX0xJTUlUID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREVGQVVMVF9QQUdFX0xJTUlUIHx8ICcxMDAnLCAxMCk7XG4gIHN0YXRpYyByZWFkb25seSBNQVhfUFJPTVBUX0xFTkdUSCA9IHBhcnNlSW50KHByb2Nlc3MuZW52Lk1BWF9QUk9NUFRfTEVOR1RIIHx8ICc1MDAwJywgMTApO1xuICBzdGF0aWMgcmVhZG9ubHkgUExVR0lOX01BWF9VUExPQURfTUIgPSBwYXJzZUludChwcm9jZXNzLmVudi5QTFVHSU5fTUFYX1VQTE9BRF9NQiB8fCAnNDA5NicsIDEwKTtcbiAgc3RhdGljIHJlYWRvbmx5IFBJUEVMSU5FX05BTUVfTUFYX0xFTkdUSCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LlBJUEVMSU5FX05BTUVfTUFYX0xFTkdUSCB8fCAnMTAwJywgMTApO1xuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9QTFVHSU5fVkVSU0lPTiA9IHByb2Nlc3MuZW52LkRFRkFVTFRfUExVR0lOX1ZFUlNJT04gfHwgJzEuMC4wJztcblxuICAvLyBTU0Ugc3RyZWFtIHRpbWVvdXQgZm9yIEFJIGdlbmVyYXRpb24gZW5kcG9pbnRzXG4gIHN0YXRpYyByZWFkb25seSBTU0VfU1RSRUFNX1RJTUVPVVRfTVMgPSBwYXJzZUludChwcm9jZXNzLmVudi5TU0VfU1RSRUFNX1RJTUVPVVRfTVMgfHwgJzMwMDAwMCcsIDEwKTsgLy8gNSBtaW5cblxuICAvLyBHaXQgcHJvdmlkZXIgQVBJIGJhc2UgVVJMcyAoY29uZmlndXJhYmxlIGZvciBlbnRlcnByaXNlIGluc3RhbmNlcylcbiAgc3RhdGljIHJlYWRvbmx5IEdJVEhVQl9BUElfQkFTRV9VUkwgPSBwcm9jZXNzLmVudi5HSVRIVUJfQVBJX0JBU0VfVVJMIHx8ICdodHRwczovL2FwaS5naXRodWIuY29tJztcbiAgc3RhdGljIHJlYWRvbmx5IEJJVEJVQ0tFVF9BUElfQkFTRV9VUkwgPSBwcm9jZXNzLmVudi5CSVRCVUNLRVRfQVBJX0JBU0VfVVJMIHx8ICdodHRwczovL2FwaS5iaXRidWNrZXQub3JnLzIuMCc7XG5cbiAgLy8gQnVsayBvcGVyYXRpb25zIGFuZCBldmVudCBpbmdlc3Rpb25cbiAgc3RhdGljIHJlYWRvbmx5IE1BWF9CVUxLX0lURU1TID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuTUFYX0JVTEtfSVRFTVMgfHwgJzEwMCcsIDEwKTtcbiAgc3RhdGljIHJlYWRvbmx5IE1BWF9FVkVOVFNfUEVSX0JBVENIID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuTUFYX0VWRU5UU19QRVJfQkFUQ0ggfHwgJzEwMCcsIDEwKTtcbiAgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUkVQT1JUX1JBTkdFX0RBWVMgPSBwYXJzZUludChwcm9jZXNzLmVudi5ERUZBVUxUX1JFUE9SVF9SQU5HRV9EQVlTIHx8ICczMCcsIDEwKTtcblxuICAvLyBTZWNyZXRzIE1hbmFnZXIgcGF0aCBwcmVmaXggZm9yIG9yZy1zY29wZWQgc2VjcmV0c1xuICBzdGF0aWMgcmVhZG9ubHkgU0VDUkVUU19QQVRIX1BSRUZJWCA9IHByb2Nlc3MuZW52LlNFQ1JFVFNfUEFUSF9QUkVGSVggfHwgJ3BpcGVsaW5lLWJ1aWxkZXInO1xuXG4gIC8qKiBCdWlsZCBhIFNlY3JldHMgTWFuYWdlciBwYXRoOiB7cHJlZml4fS97b3JnSWR9L3tuYW1lfSAqL1xuICBzdGF0aWMgc2VjcmV0UGF0aChvcmdJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtDb3JlQ29uc3RhbnRzLlNFQ1JFVFNfUEFUSF9QUkVGSVh9LyR7b3JnSWR9LyR7bmFtZX1gO1xuICB9XG5cbiAgLy8gRGF0YWJhc2UgY29ubmVjdGlvblxuICBzdGF0aWMgcmVhZG9ubHkgREJfTUFYX1JFVFJJRVMgPSBwYXJzZUludChwcm9jZXNzLmVudi5EQl9NQVhfUkVUUklFUyB8fCAnMycsIDEwKTtcbiAgc3RhdGljIHJlYWRvbmx5IERCX1JFVFJZX0RFTEFZX01TID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREJfUkVUUllfREVMQVlfTVMgfHwgJzEwMDAnLCAxMCk7IC8vIDFzXG4gIHN0YXRpYyByZWFkb25seSBEQl9UUkFOU0FDVElPTl9USU1FT1VUX01TID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuREJfVFJBTlNBQ1RJT05fVElNRU9VVF9NUyB8fCAnMzAwMDAnLCAxMCk7IC8vIDMwc1xuICBzdGF0aWMgcmVhZG9ubHkgREJfQ0xPU0VfVElNRU9VVF9NUyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkRCX0NMT1NFX1RJTUVPVVRfTVMgfHwgJzUwMDAnLCAxMCk7IC8vIDVzXG5cbiAgLy8gUmVzcG9uc2UgY29tcHJlc3Npb25cbiAgc3RhdGljIHJlYWRvbmx5IENPTVBSRVNTSU9OX1RIUkVTSE9MRF9CWVRFUyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkNPTVBSRVNTSU9OX1RIUkVTSE9MRF9CWVRFUyB8fCAnMTAyNCcsIDEwKTtcblxuICAvLyBJZGVtcG90ZW5jeVxuICBzdGF0aWMgcmVhZG9ubHkgSURFTVBPVEVOQ1lfVFRMX01TID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuSURFTVBPVEVOQ1lfVFRMX01TIHx8ICczMDAwMDAnLCAxMCk7IC8vIDUgbWluXG4gIHN0YXRpYyByZWFkb25seSBJREVNUE9URU5DWV9NQVhfU1RPUkVfU0laRSA9IHBhcnNlSW50KHByb2Nlc3MuZW52LklERU1QT1RFTkNZX01BWF9TVE9SRV9TSVpFIHx8ICcxMDAwMCcsIDEwKTtcbiAgc3RhdGljIHJlYWRvbmx5IElERU1QT1RFTkNZX0NMRUFOVVBfSU5URVJWQUxfTVMgPSBwYXJzZUludChwcm9jZXNzLmVudi5JREVNUE9URU5DWV9DTEVBTlVQX0lOVEVSVkFMX01TIHx8ICc2MDAwMCcsIDEwKTsgLy8gMSBtaW5cblxuICAvLyBDYWNoZVxuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfQ0xFQU5VUF9JTlRFUlZBTF9NUyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkNBQ0hFX0NMRUFOVVBfSU5URVJWQUxfTVMgfHwgJzMwMDAwJywgMTApOyAvLyAzMHNcblxuICAvLyBTZXJ2ZXItc2lkZSBjYWNoZSBUVExzIChzZWNvbmRzKVxuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfVFRMX0VOVElUWSA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkNBQ0hFX1RUTF9FTlRJVFkgfHwgJzYwJywgMTApOyAvLyBwbHVnaW4vcGlwZWxpbmUgZmluZEJ5SWRcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX1RUTF9NRVNTQUdFID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuQ0FDSEVfVFRMX01FU1NBR0UgfHwgJzMwMCcsIDEwKTsgLy8gYW5ub3VuY2VtZW50cy9jb252ZXJzYXRpb25zICg1IG1pbilcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX1RUTF9SRVBPUlRfSU5WRU5UT1JZID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuQ0FDSEVfVFRMX1JFUE9SVF9JTlZFTlRPUlkgfHwgJzMwMCcsIDEwKTsgLy8gcGx1Z2luIHN1bW1hcnkvZGlzdHJpYnV0aW9uICg1IG1pbilcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX1RUTF9SRVBPUlRfVElNRVNFUklFUyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkNBQ0hFX1RUTF9SRVBPUlRfVElNRVNFUklFUyB8fCAnMTIwJywgMTApOyAvLyBleGVjdXRpb24vYnVpbGQgbWV0cmljcyAoMiBtaW4pXG4gIHN0YXRpYyByZWFkb25seSBDQUNIRV9UVExfQ09NUExJQU5DRV9SVUxFUyA9IHBhcnNlSW50KHByb2Nlc3MuZW52LkNBQ0hFX1RUTF9DT01QTElBTkNFX1JVTEVTIHx8ICc2MCcsIDEwKTsgLy8gYWN0aXZlIGNvbXBsaWFuY2UgcnVsZXNcbiAgc3RhdGljIHJlYWRvbmx5IENBQ0hFX1RUTF9CSUxMSU5HX1BMQU5TID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuQ0FDSEVfVFRMX0JJTExJTkdfUExBTlMgfHwgJzE0NDAwJywgMTApOyAvLyBiaWxsaW5nIHBsYW5zICg0IGhvdXJzKVxuXG4gIC8vIFNTRSBiYWNrcHJlc3N1cmVcbiAgc3RhdGljIHJlYWRvbmx5IFNTRV9CQUNLUFJFU1NVUkVfVEhSRVNIT0xEID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuU1NFX0JBQ0tQUkVTU1VSRV9USFJFU0hPTEQgfHwgJzEwJywgMTApO1xuXG4gIC8vIEhUVFAgQ2FjaGUtQ29udHJvbCBoZWFkZXJzXG4gIHN0YXRpYyByZWFkb25seSBDQUNIRV9DT05UUk9MX0xJU1QgPSBwcm9jZXNzLmVudi5DQUNIRV9DT05UUk9MX0xJU1QgfHwgJ3ByaXZhdGUsIG1heC1hZ2U9MzAsIHN0YWxlLXdoaWxlLXJldmFsaWRhdGU9NjAnO1xuICBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfQ09OVFJPTF9ERVRBSUwgPSBwcm9jZXNzLmVudi5DQUNIRV9DT05UUk9MX0RFVEFJTCB8fCAncHJpdmF0ZSwgbWF4LWFnZT02MCwgc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZT0xMjAnO1xufVxuXG4vKipcbiAqIFBlci1zZWN0aW9uIGxvYWRlciBtYXAg4oCUIGVhY2ggc2VjdGlvbiBpcyBsb2FkZWQgbGF6aWx5IG9uIGZpcnN0IGFjY2Vzcy5cbiAqIFRoaXMgYXZvaWRzIGxvYWRpbmcgYWxsIGNvbmZpZyBzZWN0aW9ucyAoYW5kIHRoZWlyIHJlcXVpcmVkIGVudiB2YXJzKVxuICogd2hlbiBvbmx5IG9uZSBzZWN0aW9uIGlzIG5lZWRlZCAoZS5nLiBDREsgc3ludGhlc2lzIG9ubHkgbmVlZHMgJ2F3cycpLlxuICovXG5jb25zdCBzZWN0aW9uTG9hZGVyczogeyBbSyBpbiBrZXlvZiBBcHBDb25maWddOiAoKSA9PiBBcHBDb25maWdbS10gfSA9IHtcbiAgc2VydmVyOiBsb2FkU2VydmVyQ29uZmlnLFxuICBhdXRoOiBsb2FkQXV0aENvbmZpZyxcbiAgZGF0YWJhc2U6IGxvYWREYXRhYmFzZUNvbmZpZyxcbiAgcmVnaXN0cnk6IGxvYWRSZWdpc3RyeUNvbmZpZyxcbiAgcmVkaXM6IGxvYWRSZWRpc0NvbmZpZyxcbiAgcGx1Z2luQnVpbGQ6IGxvYWRQbHVnaW5CdWlsZENvbmZpZyxcbiAgZG9ja2VyQ29uZmlnOiBsb2FkRG9ja2VyQ29uZmlnLFxuICBvYnNlcnZhYmlsaXR5OiBsb2FkT2JzZXJ2YWJpbGl0eUNvbmZpZyxcbiAgY29tcGxpYW5jZTogbG9hZENvbXBsaWFuY2VDb25maWcsXG4gIGF3czogbG9hZEFXU0NvbmZpZyxcbiAgcmF0ZUxpbWl0OiBsb2FkUmF0ZUxpbWl0Q29uZmlnLFxuICBiaWxsaW5nOiBsb2FkQmlsbGluZ0NvbmZpZyxcbn07XG5cbi8qKiBQZXItc2VjdGlvbiB2YWxpZGF0b3JzIOKAlCBvbmx5IHJ1biBmb3Igc2VjdGlvbnMgdGhhdCBoYXZlIHZhbGlkYXRpb24gbG9naWMuICovXG5jb25zdCBzZWN0aW9uVmFsaWRhdG9yczogUGFydGlhbDx7IFtLIGluIGtleW9mIEFwcENvbmZpZ106IChjb25maWc6IEFwcENvbmZpZ1tLXSkgPT4gdm9pZCB9PiA9IHtcbiAgc2VydmVyOiB2YWxpZGF0ZVNlcnZlckNvbmZpZyxcbn07XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmYWNhZGUgd2l0aCBsYXp5IHBlci1zZWN0aW9uIGxvYWRpbmcuXG4gKlxuICogRWFjaCBzZWN0aW9uIGlzIGxvYWRlZCBhbmQgdmFsaWRhdGVkIGluZGVwZW5kZW50bHkgb24gZmlyc3QgYWNjZXNzLFxuICogc28gcmVxdWVzdGluZyBgQ29uZmlnLmdldCgnYXdzJylgIGRvZXMgbm90IHRyaWdnZXIgbG9hZGluZyBvZlxuICogc2VydmVyLCBhdXRoLCBvciBiaWxsaW5nIGNvbmZpZyAoYW5kIHRoZWlyIGVudiB2YXIgcmVxdWlyZW1lbnRzKS5cbiAqXG4gKiBVc2FnZTogYENvbmZpZy5nZXQoJ3NlcnZlcicpYCwgYENvbmZpZy5nZXQoJ2F1dGgnKWAsIGV0Yy5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbmZpZyB7XG4gIHByaXZhdGUgc3RhdGljIGNhY2hlID0gbmV3IE1hcDxrZXlvZiBBcHBDb25maWcsIHVua25vd24+KCk7XG5cbiAgLyoqXG4gICAqIEdldCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiAobG9hZGVkIGxhemlseSBvbiBmaXJzdCBhY2Nlc3MpLlxuICAgKi9cbiAgc3RhdGljIGdldDxLIGV4dGVuZHMga2V5b2YgQXBwQ29uZmlnPihzZWN0aW9uOiBLKTogQXBwQ29uZmlnW0tdIHtcbiAgICBpZiAoIXRoaXMuY2FjaGUuaGFzKHNlY3Rpb24pKSB7XG4gICAgICBjb25zdCBsb2FkZXIgPSBzZWN0aW9uTG9hZGVyc1tzZWN0aW9uXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gbG9hZGVyKCk7XG4gICAgICBjb25zdCB2YWxpZGF0b3IgPSBzZWN0aW9uVmFsaWRhdG9yc1tzZWN0aW9uXTtcbiAgICAgIGlmICh2YWxpZGF0b3IpICh2YWxpZGF0b3IgYXMgKHY6IEFwcENvbmZpZ1tLXSkgPT4gdm9pZCkodmFsdWUpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQoc2VjdGlvbiwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWNoZS5nZXQoc2VjdGlvbikgYXMgQXBwQ29uZmlnW0tdO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIGEgcGFydGlhbCBvdmVycmlkZSBpbnRvIGEgY29uZmlnIHNlY3Rpb24sIHRha2luZyBwcmVjZWRlbmNlIG92ZXIgdGhlXG4gICAqIGVudi1sb2FkZWQgdmFsdWVzIGZvciBhbGwgc3Vic2VxdWVudCBgQ29uZmlnLmdldChzZWN0aW9uKWAgY2FsbHMuXG4gICAqXG4gICAqIFVzZWQgYXQgQ0RLIHN5bnRoIHN0YXJ0IHRvIGluamVjdCBwbGF0Zm9ybS1zb3VyY2VkIGluZnJhc3RydWN0dXJlIGNvbmZpZ1xuICAgKiAoZS5nLiB0aGUgcmVnaXN0cnkgcHVsbCBob3N0IGRlcml2ZWQgZnJvbSB0aGUgcGxhdGZvcm0ncyBwdWJsaWMgVVJMKSBzbyB0aGVcbiAgICogc3ludGggZG9lcyBub3Qgc2lsZW50bHkgZGVwZW5kIG9uIHRoZSBvcGVyYXRvcidzIGxvY2FsIGBwcm9jZXNzLmVudmAuXG4gICAqIGB1bmRlZmluZWRgIGZpZWxkcyBpbiBgcGFydGlhbGAgYXJlIGlnbm9yZWQgc28gdGhleSBuZXZlciBjbG9iYmVyIGEgbG9hZGVkXG4gICAqIHZhbHVlLiBMb2FkcyAoYW5kIHZhbGlkYXRlcykgdGhlIHNlY3Rpb24gZmlyc3Qgc28gdGhlIG92ZXJyaWRlIG1lcmdlcyBvbnRvXG4gICAqIHRoZSByZWFsIGRlZmF1bHRzLlxuICAgKi9cbiAgc3RhdGljIG92ZXJyaWRlPEsgZXh0ZW5kcyBrZXlvZiBBcHBDb25maWc+KHNlY3Rpb246IEssIHBhcnRpYWw6IFBhcnRpYWw8QXBwQ29uZmlnW0tdPik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldChzZWN0aW9uKTtcbiAgICBjb25zdCBkZWZpbmVkID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMocGFydGlhbCkuZmlsdGVyKChbLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkKSxcbiAgICApIGFzIFBhcnRpYWw8QXBwQ29uZmlnW0tdPjtcbiAgICB0aGlzLmNhY2hlLnNldChzZWN0aW9uLCB7IC4uLmN1cnJlbnQsIC4uLmRlZmluZWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogTGlrZSB7QGxpbmsgb3ZlcnJpZGV9LCBidXQgc2NvcGVkOiBzbmFwc2hvdHMgdGhlIGN1cnJlbnQgY2FjaGUgc3RhdGUgZm9yXG4gICAqIGBzZWN0aW9uYCBhbmQgcmV0dXJucyBhIHJlc3RvcmUgZnVuY3Rpb24gdGhhdCByZXZlcnRzIGl0LiBVc2UgYXJvdW5kIGFcbiAgICogc2luZ2xlIHVuaXQgb2Ygd29yayAoZS5nLiBvbmUgQ0RLIFBpcGVsaW5lQnVpbGRlcidzIHN5bnRoKSBzbyBhIHBlci1idWlsZGVyXG4gICAqIG92ZXJyaWRlIGRvZXMgTk9UIGxlYWsgaW50byB0aGUgcHJvY2Vzcy13aWRlIGNhY2hlIGFuZCBibGVlZCBpbnRvIHNpYmxpbmdcbiAgICogYnVpbGRlcnMgaW4gYSBtdWx0aS1waXBlbGluZSBDREsgYXBwLiBDYWxsaW5nIHRoZSByZXR1cm5lZCBmdW5jdGlvbiByZXN0b3Jlc1xuICAgKiB0aGUgZXhhY3QgcHJpb3Igc3RhdGUg4oCUIHRoZSBwcmV2aW91c2x5IGNhY2hlZCB2YWx1ZSwgb3IgYW4gdW5sb2FkZWQgc2VjdGlvblxuICAgKiBpZiBpdCBoYWQgbm90IGJlZW4gY2FjaGVkIHlldCAoc28gdGhlIG5leHQgYGdldCgpYCByZS1sb2FkcyBmcm9tIGVudikuXG4gICAqL1xuICBzdGF0aWMgb3ZlcnJpZGVTY29wZWQ8SyBleHRlbmRzIGtleW9mIEFwcENvbmZpZz4oXG4gICAgc2VjdGlvbjogSyxcbiAgICBwYXJ0aWFsOiBQYXJ0aWFsPEFwcENvbmZpZ1tLXT4sXG4gICk6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IGhhZENhY2hlZCA9IHRoaXMuY2FjaGUuaGFzKHNlY3Rpb24pO1xuICAgIGNvbnN0IHByZXZpb3VzID0gaGFkQ2FjaGVkID8gdGhpcy5jYWNoZS5nZXQoc2VjdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5vdmVycmlkZShzZWN0aW9uLCBwYXJ0aWFsKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGhhZENhY2hlZCkgdGhpcy5jYWNoZS5zZXQoc2VjdGlvbiwgcHJldmlvdXMpO1xuICAgICAgZWxzZSB0aGlzLmNhY2hlLmRlbGV0ZShzZWN0aW9uKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjYWNoZWQgY29uZmlnIHNlY3Rpb25zIHNvIHRoZSBuZXh0IGBDb25maWcuZ2V0KClgIHJlLXJlYWRzIHRoZW1cbiAgICogZnJvbSB0aGUgY3VycmVudCBgcHJvY2Vzcy5lbnZgIChyZS1ydW5uaW5nIGVhY2ggc2VjdGlvbidzIGxvYWRlciArIHZhbGlkYXRvcikuXG4gICAqXG4gICAqIFVzZSB3aGVuIGVudiBoYXMgYmVlbiBtdXRhdGVkIGluLXByb2Nlc3MgYW5kIHRoZSBjYWNoZSBpcyBub3cgc3RhbGUg4oCUIGUuZy4gYVxuICAgKiBsb25nLXJ1bm5pbmcgQ0xJIHRoYXQgcmVjb25maWd1cmVzIGJldHdlZW4gb3BlcmF0aW9ucy4gQ0RLIHN5bnRoIHJ1bnMgaW4gYVxuICAgKiBmcmVzaCBzdWJwcm9jZXNzIHRoYXQgYWxyZWFkeSByZWFkcyBlbnYgb24gZmlyc3QgYWNjZXNzLCBzbyBpdCBkb2VzIG5vdCBuZWVkXG4gICAqIHRoaXMuIE5vdGU6IHRoaXMgYWxzbyBkcm9wcyBhbnkgdmFsdWVzIHNldCB2aWEge0BsaW5rIG92ZXJyaWRlfS5cbiAgICovXG4gIHN0YXRpYyByZWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCBSZXNldCBjb25maWd1cmF0aW9uIChmb3IgdGVzdGluZyBvbmx5KS4gQWxpYXMgZm9yIHtAbGluayByZWxvYWR9LlxuICAgKi9cbiAgc3RhdGljIF9yZXNldEZvclRlc3RpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhdXRoIGNvbmZpZ3VyYXRpb24gKEpXVCBzZWNyZXRzLCBhbGdvcml0aG1zLCBleHBpcmF0aW9uKS5cbiAgICogQ2FsbCB0aGlzIGF0IHNlcnZlciBzdGFydHVwLCBub3QgZHVyaW5nIENESyBzeW50aGVzaXMuXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVBdXRoKCk6IHZvaWQge1xuICAgIHZhbGlkYXRlQXV0aENvbmZpZyh0aGlzLmdldCgnYXV0aCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnR5cGVkIGNvbmZpZyBhY2Nlc3Mg4oCUIHVzZSB3aGVuIHRoZSBwdWJsaXNoZWQgcGFja2FnZSB0eXBlcyBkb24ndCBpbmNsdWRlIGEgbmV3IHNlY3Rpb24geWV0LlxuICAgKiBBdm9pZHMgdGhlIGAoQ29uZmlnIGFzIHVua25vd24gYXMgLi4uKS5nZXQoLi4uKWAgY2FzdCBwYXR0ZXJuIGluIGNvbnN1bWVycy5cbiAgICovXG4gIHN0YXRpYyBnZXRBbnkoc2VjdGlvbjogc3RyaW5nKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KHNlY3Rpb24gYXMga2V5b2YgQXBwQ29uZmlnKTtcbiAgfVxufVxuIl19
@@ -109,8 +109,8 @@ export function loadBillingConfig() {
109
109
  || 'For individual power users and production workloads',
110
110
  tier: 'pro',
111
111
  prices: {
112
- monthly: envCents(process.env.BILLING_PLAN_PRO_MONTHLY, 1900),
113
- annual: envCents(process.env.BILLING_PLAN_PRO_ANNUAL, 19000),
112
+ monthly: envCents(process.env.BILLING_PLAN_PRO_MONTHLY, 4900),
113
+ annual: envCents(process.env.BILLING_PLAN_PRO_ANNUAL, 49000),
114
114
  },
115
115
  features: parseFeatures(process.env.BILLING_PLAN_PRO_FEATURES, DEFAULT_PRO_FEATURES),
116
116
  isActive: true,
@@ -124,8 +124,8 @@ export function loadBillingConfig() {
124
124
  || 'For teams collaborating on shared pipelines',
125
125
  tier: 'team',
126
126
  prices: {
127
- monthly: envCents(process.env.BILLING_PLAN_TEAM_MONTHLY, 4900),
128
- annual: envCents(process.env.BILLING_PLAN_TEAM_ANNUAL, 49000),
127
+ monthly: envCents(process.env.BILLING_PLAN_TEAM_MONTHLY, 14900),
128
+ annual: envCents(process.env.BILLING_PLAN_TEAM_ANNUAL, 149000),
129
129
  },
130
130
  features: parseFeatures(process.env.BILLING_PLAN_TEAM_FEATURES, DEFAULT_TEAM_FEATURES),
131
131
  isActive: true,
@@ -139,8 +139,8 @@ export function loadBillingConfig() {
139
139
  || 'Org-wide scale with unlimited seats and priority support',
140
140
  tier: 'enterprise',
141
141
  prices: {
142
- monthly: envCents(process.env.BILLING_PLAN_ENTERPRISE_MONTHLY, 9900),
143
- annual: envCents(process.env.BILLING_PLAN_ENTERPRISE_ANNUAL, 99000),
142
+ monthly: envCents(process.env.BILLING_PLAN_ENTERPRISE_MONTHLY, 39900),
143
+ annual: envCents(process.env.BILLING_PLAN_ENTERPRISE_ANNUAL, 399000),
144
144
  },
145
145
  features: parseFeatures(process.env.BILLING_PLAN_ENTERPRISE_FEATURES, DEFAULT_ENTERPRISE_FEATURES),
146
146
  isActive: true,
@@ -227,13 +227,13 @@ function loadBundles() {
227
227
  // (audit_log/sso) and rate packs stay tier-scoped by default.
228
228
  b('seat_pack', 'Seat Pack (+5)', '5 additional member seats', { seats: 5 }, 2500, ALL, 0),
229
229
  b('pipeline_pack', 'Pipeline Pack (+10)', '10 additional pipelines', { pipelines: 10 }, 1500, ALL, 1),
230
- b('plugin_pack', 'Plugin Pack (+100)', '100 additional plugins', { plugins: 100 }, 1000, ALL, 2),
231
- b('api_pack', 'API Pack (+1M)', '1,000,000 additional API calls / period', { apiCalls: 1_000_000 }, 2000, ['developer', 'pro'], 3),
232
- b('ai_pack', 'AI Pack (+5k)', '5,000 additional AI calls / period', { aiCalls: 5000 }, 3000, ALL, 4),
233
- b('storage_pack', 'Storage Pack (+50 GB)', '50 GB additional registry storage', { storageBytes: 50 * BUNDLE_GB }, 1000, ALL, 5),
230
+ b('plugin_pack', 'Plugin Pack (+100)', '100 additional plugins', { plugins: 100 }, 1500, ALL, 2),
231
+ b('api_pack', 'API Pack (+1M)', '1,000,000 additional API calls / period', { apiCalls: 1_000_000 }, 2000, ALL, 3),
232
+ b('ai_pack', 'AI Pack (+5k)', '5,000 additional AI calls / period', { aiCalls: 5000 }, 7500, ALL, 4),
233
+ b('storage_pack', 'Storage Pack (+50 GB)', '50 GB additional registry storage', { storageBytes: 50 * BUNDLE_GB }, 2500, ALL, 5),
234
234
  b('audit_log', 'Audit Log', 'Audit log capability', {}, 2000, ['pro'], 6, { features: ['audit_log'], stackable: false }),
235
235
  // SSO is INCLUDED in Team (see TIER_FEATURES.team), so the add-on is Pro-only.
236
236
  b('sso', 'SSO / IdP', 'SSO + up to 5 IdP configs', { idpConfigs: 5 }, 4000, ['pro'], 7, { features: ['sso'], stackable: false }),
237
237
  ];
238
238
  }
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2JpbGxpbmctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBd0MsTUFBTSw0QkFBNEIsQ0FBQztBQU8xSixnRkFBZ0Y7QUFDaEYsOEVBQThFO0FBQzlFLGtEQUFrRDtBQUNsRCxrRkFBa0Y7QUFDbEYsaURBQWlEO0FBQ2pELHdFQUF3RTtBQUN4RSwyRUFBMkU7QUFDM0UsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSxpRkFBaUY7QUFDakYsNEVBQTRFO0FBRTVFLHdGQUF3RjtBQUN4RixTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsRUFBRSxNQUFjO0lBQ2hFLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sYUFBYSxNQUFNLEVBQUUsQ0FBQztJQUMvQyxPQUFPLFNBQVMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JGLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFlLEVBQUUsS0FBZTtJQUN2RCxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25DLE9BQU87UUFDTCxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ25DLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUs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L0UsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0tBQ2pJLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogTG9hZCBiaWxsaW5nIHBsYW4gY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiBQZXItcGxhbiBwcmljZXMgYXJlIHRoZSBtb3N0IGxpa2VseSB0byB2YXJ5IGJldHdlZW4gZW52aXJvbm1lbnRzOlxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X01PTlRITFkgLyBCSUxMSU5HX1BMQU5fe1RJRVJ9X0FOTlVBTCAgKGluIGNlbnRzKVxuICpcbiAqIE9wdGlvbmFsIG92ZXJyaWRlcyBmb3IgZGVzY3JpcHRpb25zIGFuZCBmZWF0dXJlczpcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9OQU1FICAgICAgICAgIChwbGFpbiBzdHJpbmcsIGRpc3BsYXkgbmFtZSlcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9ERVNDUklQVElPTiAgIChwbGFpbiBzdHJpbmcpXG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fRkVBVFVSRVMgICAgICAoSlNPTiBzdHJpbmcgYXJyYXkpXG4gKlxuICogQWxsIGRlZmF1bHRzIG1hdGNoIHRoZSBvcmlnaW5hbCBoYXJkY29kZWQgc2VlZCBkYXRhIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5pbXBvcnQgeyBRVU9UQV9USUVSUywgVElFUl9GRUFUVVJFUywgRkVBVFVSRV9NRVRBREFUQSwgVkFMSURfVElFUlMsIGlzVmFsaWRUaWVyLCB0eXBlIFF1b3RhVGllciwgdHlwZSBRdW90YVRpZXJMaW1pdHMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IEJpbGxpbmdDb25maWcsIEJpbGxpbmdQbGFuQ29uZmlnLCBCdW5kbGVDb25maWcgfSBmcm9tICcuL2NvbmZpZy10eXBlcy5qcyc7XG5cbi8qKiBQZXItdW5pdCBxdW90YSBkZWx0YXMgZm9yIGEgYnVuZGxlIOKAlCBrZXlzIGNvbnN0cmFpbmVkIHRvIHJlYWwgcXVvdGEgZmllbGRzXG4gKiAgKG1hdGNoZXMgYEJ1bmRsZUNvbmZpZy5ncmFudHNgKSwgc28gYSB0eXBvJ2QgZGltZW5zaW9uIGZhaWxzIHRvIGNvbXBpbGUuICovXG50eXBlIEdyYW50TWFwID0gUGFydGlhbDxSZWNvcmQ8a2V5b2YgUXVvdGFUaWVyTGltaXRzLCBudW1iZXI+PjtcblxuLy8gLS0gRGVmYXVsdCBmZWF0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZSBtYXJrZXRlZCBmZWF0dXJlIGxpc3QgaXMgYnVpbHQgZnJvbSB0d28gZGVyaXZlZCBzb3VyY2VzIHNvIGl0IGNhbiBuZXZlclxuLy8gZHJpZnQgZnJvbSB3aGF0IHRoZSBwbGF0Zm9ybSBhY3R1YWxseSBlbmZvcmNlczpcbi8vICAgMS4gTElNSVQgbGluZXMgZGVyaXZlZCBmcm9tIGVhY2ggdGllcidzIEVGRkVDVElWRSBxdW90YSBsaW1pdHMgKFFVT1RBX1RJRVJTKSxcbi8vICAgICAgc28gdGhleSB0cmFjayBRVU9UQV9USUVSXyogZW52IG92ZXJyaWRlcy5cbi8vICAgMi4gSU5DTFVERUQtRkVBVFVSRSBsaW5lcyBkZXJpdmVkIGZyb20gdGhlIGVuZm9yY2VkIGVudGl0bGVtZW50IHNldFxuLy8gICAgICAoVElFUl9GRUFUVVJFUykgdmlhIEZFQVRVUkVfTUVUQURBVEEgbGFiZWxzIOKAlCBzbyBhbiBhZHZlcnRpc2VkIGJhc2Vcbi8vICAgICAgZmVhdHVyZSBpcyBhbHdheXMgb25lIGByZXF1aXJlRmVhdHVyZWAgYWN0dWFsbHkgZ3JhbnRzIGZvciB0aGF0IHRpZXIuXG4vLyBPbmx5IGdlbnVpbmVseSBub24tZ2F0ZWQgbWFya2V0aW5nIGNvcHkgKHN1cHBvcnQgbGV2ZWwsIGRhc2hib2FyZHMsIFJCQUMpIGlzXG4vLyBoYW5kLWF1dGhvcmVkLCBwYXNzZWQgYXMgYHBlcmtzYC4gUHVyY2hhc2FibGUgYWRkLW9ucyAoc3NvLCBhdWRpdF9sb2cpIGFyZSBOT1Rcbi8vIGxpc3RlZCBhcyBiYXNlIHBlcmtzIGhlcmUg4oCUIHRoZXkgYXJlIHNvbGQgYXMgYnVuZGxlcyAoc2VlIGxvYWRCdW5kbGVzKCkpLlxuXG4vKiogXCJVcCB0byBOIHBsdWdpbnNcIiAvIFwiVW5saW1pdGVkIHBsdWdpbnNcIiBmcm9tIGFuIGVmZmVjdGl2ZSBsaW1pdCAoLTEgPSB1bmxpbWl0ZWQpLiAqL1xuZnVuY3Rpb24gbGltaXRMaW5lKGxpbWl0OiBudW1iZXIsIHNpbmd1bGFyOiBzdHJpbmcsIHBsdXJhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGxpbWl0ID09PSAtMSkgcmV0dXJuIGBVbmxpbWl0ZWQgJHtwbHVyYWx9YDtcbiAgcmV0dXJuIGBVcCB0byAke2xpbWl0LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycpfSAke2xpbWl0ID09PSAxID8gc2luZ3VsYXIgOiBwbHVyYWx9YDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZlYXR1cmVzKHRpZXI6IFF1b3RhVGllciwgcGVya3M6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBsID0gUVVPVEFfVElFUlNbdGllcl0ubGltaXRzO1xuICByZXR1cm4gW1xuICAgIGxpbWl0TGluZShsLnNlYXRzLCAnc2VhdCcsICdzZWF0cycpLFxuICAgIGxpbWl0TGluZShsLnBsdWdpbnMsICdwbHVnaW4nLCAncGx1Z2lucycpLFxuICAgIGxpbWl0TGluZShsLnBpcGVsaW5lcywgJ3BpcGVsaW5lJywgJ3BpcGVsaW5lcycpLFxuICAgIGxpbWl0TGluZShsLmFwaUNhbGxzLCAnQVBJIGNhbGwnLCAnQVBJIGNhbGxzJyksXG4gICAgbGltaXRMaW5lKGwuYWlDYWxscywgJ0FJIGNhbGwnLCAnQUkgY2FsbHMnKSxcbiAgICAvLyBFbmZvcmNlZCBlbnRpdGxlbWVudHMg4oaSIGN1c3RvbWVyLWZhY2luZyBsYWJlbHMgKHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGgpLlxuICAgIC4uLlRJRVJfRkVBVFVSRVNbdGllcl0ubWFwKChmKSA9PiBGRUFUVVJFX01FVEFEQVRBW2ZdLmxhYmVsKSxcbiAgICAuLi5wZXJrcyxcbiAgXTtcbn1cblxuLy8gTm90ZTogYHBlcmtzYCBhcmUgbm9uLWdhdGVkIG1hcmtldGluZyBsaW5lcyBvbmx5LiBFbmZvcmNlZCBmZWF0dXJlcyAoaW5jbC5cbi8vIFByaW9yaXR5IFN1cHBvcnQgZm9yIHByby90ZWFtL2VudGVycHJpc2UpIGNvbWUgZnJvbSBUSUVSX0ZFQVRVUkVTIGFib3ZlLlxuY29uc3QgREVGQVVMVF9ERVZFTE9QRVJfRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ2RldmVsb3BlcicsIFsnQ29tbXVuaXR5IHN1cHBvcnQnXSk7XG5jb25zdCBERUZBVUxUX1BST19GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygncHJvJywgWydSZXBvcnRpbmcgZGFzaGJvYXJkJ10pO1xuY29uc3QgREVGQVVMVF9URUFNX0ZFQVRVUkVTID0gZGVmYXVsdEZlYXR1cmVzKCd0ZWFtJywgWydSQkFDICYgdGVhbSByb2xlcyddKTtcbmNvbnN0IERFRkFVTFRfRU5URVJQUklTRV9GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygnZW50ZXJwcmlzZScsIFtcbiAgJ1JCQUMgJiB0ZWFtIHJvbGVzJywgJ1JlcG9ydGluZyBkYXNoYm9hcmQnLFxuXSk7XG5cbi8qKlxuICogUGFyc2UgYSBwcmljZSAoaW4gY2VudHMpIGZyb20gYW4gZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIHRoZSBkZWZhdWx0IHdoZW5cbiAqIHVuc2V0IE9SIG1hbGZvcm1lZC4gQSBOYU4gKGUuZy4gYEJJTExJTkdfUExBTl9QUk9fTU9OVEhMWT1hYmNgKSBtdXN0IG5ldmVyXG4gKiBmbG93IGludG8gdGhlIHJldHVybmVkIGNvbmZpZyBhcyBhIHByaWNlLlxuICovXG5mdW5jdGlvbiBlbnZDZW50cyhlbnZWYXI6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChlbnZWYXIgPT09IHVuZGVmaW5lZCB8fCBlbnZWYXIgPT09ICcnKSByZXR1cm4gZmFsbGJhY2s7XG4gIGNvbnN0IG4gPSBwYXJzZUludChlbnZWYXIsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IGZhbGxiYWNrIDogbjtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIEpTT04gYXJyYXkgZnJvbSBhbiBlbnYgdmFyLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VGZWF0dXJlcyhlbnZWYXI6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBpZiAoIWVudlZhcikgcmV0dXJuIGZhbGxiYWNrO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoZW52VmFyKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJzZWQpID8gcGFyc2VkIDogZmFsbGJhY2s7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxufVxuXG4vKipcbiAqIExvYWQgYmlsbGluZyBwbGFuIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQmlsbGluZ0NvbmZpZygpOiBCaWxsaW5nQ29uZmlnIHtcbiAgLy8gS2V5ZWQgYnkgUXVvdGFUaWVyIHNvIHRoZSBjb21waWxlciBmb3JjZXMgYSBwbGFuIGZvciBFVkVSWSB0aWVyIOKAlCBhZGRpbmcgYVxuICAvLyA1dGggUXVvdGFUaWVyIHdpdGhvdXQgYSBwbGFuIGhlcmUgaXMgbm93IGEgY29tcGlsZSBlcnJvciAod2FzIGEgaGFuZC1rZXB0XG4gIC8vIDQtZWxlbWVudCBhcnJheSB0aGF0IHNpbGVudGx5IHNoaXBwZWQgbm8gcGxhbi9wcmljZSBmb3IgYSBuZXcgdGllcikuIFRoZVxuICAvLyBwdWJsaWMgYGNvbmZpZy5wbGFuc2Agc2hhcGUgc3RheXMgYW4gYXJyYXksIGRlcml2ZWQgYmVsb3cgaW4gVkFMSURfVElFUlNcbiAgLy8gb3JkZXIgKGRldmVsb3BlciwgcHJvLCB0ZWFtLCBlbnRlcnByaXNlKSB0byBwcmVzZXJ2ZSBjb25zdW1lciBvcmRlcmluZy5cbiAgY29uc3QgcGxhbkJ5VGllcjogUmVjb3JkPFF1b3RhVGllciwgQmlsbGluZ1BsYW5Db25maWc+ID0ge1xuICAgIGRldmVsb3Blcjoge1xuICAgICAgaWQ6ICdkZXZlbG9wZXInLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9OQU1FIHx8ICdEZXZlbG9wZXInLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ0ZyZWUgc3RhcnRlciB0aWVyIGZvciBpbmRpdmlkdWFsIGRldmVsb3BlcnMnLFxuICAgICAgdGllcjogJ2RldmVsb3BlcicsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9NT05USExZLCAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0FOTlVBTCwgMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfREVWRUxPUEVSX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiB0cnVlLFxuICAgICAgc29ydE9yZGVyOiAwLFxuICAgIH0sXG4gICAgcHJvOiB7XG4gICAgICBpZDogJ3BybycsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fUFJPX05BTUUgfHwgJ1BybycsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19ERVNDUklQVElPTlxuICAgICAgICB8fCAnRm9yIGluZGl2aWR1YWwgcG93ZXIgdXNlcnMgYW5kIHByb2R1Y3Rpb24gd29ya2xvYWRzJyxcbiAgICAgIHRpZXI6ICdwcm8nLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fTU9OVEhMWSwgMTkwMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19BTk5VQUwsIDE5MDAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9QUk9fRkVBVFVSRVMsXG4gICAgICApLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgc29ydE9yZGVyOiAxLFxuICAgIH0sXG4gICAgdGVhbToge1xuICAgICAgaWQ6ICd0ZWFtJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX05BTUUgfHwgJ1RlYW0nLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdGb3IgdGVhbXMgY29sbGFib3JhdGluZyBvbiBzaGFyZWQgcGlwZWxpbmVzJyxcbiAgICAgIHRpZXI6ICd0ZWFtJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9NT05USExZLCA0OTAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9BTk5VQUwsIDQ5MDAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfVEVBTV9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBzb3J0T3JkZXI6IDIsXG4gICAgfSxcbiAgICBlbnRlcnByaXNlOiB7XG4gICAgICBpZDogJ2VudGVycHJpc2UnLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfTkFNRSB8fCAnRW50ZXJwcmlzZScsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ09yZy13aWRlIHNjYWxlIHdpdGggdW5saW1pdGVkIHNlYXRzIGFuZCBwcmlvcml0eSBzdXBwb3J0JyxcbiAgICAgIHRpZXI6ICdlbnRlcnByaXNlJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9NT05USExZLCA5OTAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9BTk5VQUwsIDk5MDAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfRU5URVJQUklTRV9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBzb3J0T3JkZXI6IDMsXG4gICAgfSxcbiAgfTtcblxuICAvLyBEZXJpdmUgdGhlIGFycmF5IGNvbnN1bWVycyByZWFkIChgY29uZmlnLnBsYW5zYCkgaW4gY2Fub25pY2FsIHRpZXIgb3JkZXIuXG4gIGNvbnN0IHBsYW5zOiBCaWxsaW5nUGxhbkNvbmZpZ1tdID0gVkFMSURfVElFUlMubWFwKCh0aWVyKSA9PiBwbGFuQnlUaWVyW3RpZXJdKTtcblxuICByZXR1cm4geyBwbGFucywgYnVuZGxlczogbG9hZEJ1bmRsZXMoKSB9O1xufVxuXG5jb25zdCBCVU5ETEVfR0IgPSAxMDI0ICogMTAyNCAqIDEwMjQ7XG5cbi8qKlxuICogQXBwbHkgYSBwZXItYnVuZGxlIGdyYW50IG92ZXJyaWRlLiBFYWNoIHN0YWNrYWJsZSBwYWNrIGdyYW50cyBleGFjdGx5IG9uZVxuICogcXVvdGEgZGltZW5zaW9uLCBzbyBgQklMTElOR19CVU5ETEVfPElEPl9HUkFOVGAgcmV0dW5lcyB0aGF0IGFtb3VudCAoZS5nLiBtYWtlXG4gKiB0aGUgU2VhdCBQYWNrIGdyYW50ICsxMCBpbnN0ZWFkIG9mICs1KSDigJQgcGFyYWxsZWwgdG8gdGhlIHByaWNlIG92ZXJyaWRlcy5cbiAqIElnbm9yZWQgZm9yIG11bHRpLWRpbWVuc2lvbiBvciBmZWF0dXJlLW9ubHkgKGVtcHR5LWdyYW50KSBidW5kbGVzLCBhbmQgZm9yIGFcbiAqIG1hbGZvcm1lZC9uZWdhdGl2ZSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYXBwbHlHcmFudE92ZXJyaWRlKGlkOiBzdHJpbmcsIGdyYW50czogR3JhbnRNYXApOiBHcmFudE1hcCB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X0dSQU5UYF07XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhncmFudHMpO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQgfHwgcmF3ID09PSAnJyB8fCBrZXlzLmxlbmd0aCAhPT0gMSkgcmV0dXJuIGdyYW50cztcbiAgY29uc3QgbiA9IHBhcnNlSW50KHJhdywgMTApO1xuICBpZiAoTnVtYmVyLmlzTmFOKG4pIHx8IG4gPCAwKSByZXR1cm4gZ3JhbnRzO1xuICAvLyBga2V5c2AgY2FtZSBmcm9tIGEgR3JhbnRNYXAsIHNvIGl0cyBzb2xlIGtleSBpcyBhIFF1b3RhVGllckxpbWl0cyBmaWVsZC5cbiAgcmV0dXJuIHsgW2tleXNbMF0gYXMga2V5b2YgUXVvdGFUaWVyTGltaXRzXTogbiB9O1xufVxuXG4vKipcbiAqIEFwcGx5IGEgcGVyLWJ1bmRsZSB0aWVyLWF2YWlsYWJpbGl0eSBvdmVycmlkZS4gYEJJTExJTkdfQlVORExFXzxJRD5fVElFUlNgIGlzIGFcbiAqIEpTT04gYXJyYXkgb2YgdGllciBJRHMgdGhhdCBtYXkgcHVyY2hhc2UgdGhlIGJ1bmRsZSAoZS5nLiBgW1wiZGV2ZWxvcGVyXCIsXCJwcm9cIl1gKVxuICog4oCUIHBhcmFsbGVsIHRvIHRoZSBwcmljZS9ncmFudCBvdmVycmlkZXMuIEZhbGxzIGJhY2sgdG8gYGRlZmF1bHRUaWVyc2Agd2hlblxuICogdW5zZXQsIG1hbGZvcm1lZCwgZW1wdHksIG9yIGNvbnRhaW5pbmcgYW4gdW5rbm93biB0aWVyLlxuICovXG5mdW5jdGlvbiBhcHBseVRpZXJzT3ZlcnJpZGUoaWQ6IHN0cmluZywgZGVmYXVsdFRpZXJzOiBRdW90YVRpZXJbXSk6IFF1b3RhVGllcltdIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbYEJJTExJTkdfQlVORExFXyR7aWQudG9VcHBlckNhc2UoKX1fVElFUlNgXTtcbiAgaWYgKCFyYXcpIHJldHVybiBkZWZhdWx0VGllcnM7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyYXcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJzZWQpIHx8IHBhcnNlZC5sZW5ndGggPT09IDApIHJldHVybiBkZWZhdWx0VGllcnM7XG4gICAgY29uc3QgdmFsaWQgPSBwYXJzZWQuZmlsdGVyKCh0KTogdCBpcyBRdW90YVRpZXIgPT4gdHlwZW9mIHQgPT09ICdzdHJpbmcnICYmIGlzVmFsaWRUaWVyKHQpKTtcbiAgICByZXR1cm4gdmFsaWQubGVuZ3RoID09PSBwYXJzZWQubGVuZ3RoID8gdmFsaWQgOiBkZWZhdWx0VGllcnM7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VGllcnM7XG4gIH1cbn1cblxuLyoqXG4gKiBQdXJjaGFzYWJsZSBhZGQtb24gYnVuZGxlcyAoZG9jcy9iaWxsaW5nLWJ1bmRsZXMubWQgwqczKS4gR3JhbnRzIGFyZSBwZXItdW5pdFxuICogZGVsdGFzIG9uIFF1b3RhVGllckxpbWl0czsgcHJpY2VzIChjZW50cywgYEJJTExJTkdfQlVORExFXzxJRD5fTU9OVEhMWWAgL1xuICogYF9BTk5VQUxgKSwgdGhlIHNpbmdsZS1kaW1lbnNpb24gZ3JhbnQgYW1vdW50IChgQklMTElOR19CVU5ETEVfPElEPl9HUkFOVGApLFxuICogYW5kIHRoZSBwdXJjaGFzYWJsZS10aWVyIGxpc3QgKGBCSUxMSU5HX0JVTkRMRV88SUQ+X1RJRVJTYCkgYXJlIGFsbFxuICogZW52LW92ZXJyaWRhYmxlLiBBbm51YWwg4omIIDEww5cgbW9udGhseS5cbiAqL1xuZnVuY3Rpb24gbG9hZEJ1bmRsZXMoKTogQnVuZGxlQ29uZmlnW10ge1xuICBjb25zdCBiID0gKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgZ3JhbnRzOiBHcmFudE1hcCxcbiAgICBtb250aGx5OiBudW1iZXIsXG4gICAgYXZhaWxhYmxlRm9yVGllcnM6IFF1b3RhVGllcltdLFxuICAgIHNvcnRPcmRlcjogbnVtYmVyLFxuICAgIGV4dHJhOiB7IGZlYXR1cmVzPzogc3RyaW5nW107IHN0YWNrYWJsZT86IGJvb2xlYW4gfSA9IHt9LFxuICApOiBCdW5kbGVDb25maWcgPT4ge1xuICAgIC8vIFJlc29sdmUgbW9udGhseSBmaXJzdCBzbyB0aGUgYW5udWFsIGZhbGxiYWNrIHRyYWNrcyBhIGBfTU9OVEhMWWAgb3ZlcnJpZGVcbiAgICAvLyAoYW5udWFsIOKJiCAxMMOXIHRoZSAqZWZmZWN0aXZlKiBtb250aGx5LCBub3QgdGhlIGhhcmRjb2RlZCBkZWZhdWx0KS5cbiAgICBjb25zdCByZXNvbHZlZE1vbnRobHkgPSBlbnZDZW50cyhwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9NT05USExZYF0sIG1vbnRobHkpO1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIG5hbWUsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGdyYW50czogYXBwbHlHcmFudE92ZXJyaWRlKGlkLCBncmFudHMpLFxuICAgICAgLi4uKGV4dHJhLmZlYXR1cmVzID8geyBmZWF0dXJlczogZXh0cmEuZmVhdHVyZXMgfSA6IHt9KSxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiByZXNvbHZlZE1vbnRobHksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnZbYEJJTExJTkdfQlVORExFXyR7aWQudG9VcHBlckNhc2UoKX1fQU5OVUFMYF0sIHJlc29sdmVkTW9udGhseSAqIDEwKSxcbiAgICAgIH0sXG4gICAgICBzdGFja2FibGU6IGV4dHJhLnN0YWNrYWJsZSA/PyB0cnVlLFxuICAgICAgYXZhaWxhYmxlRm9yVGllcnM6IGFwcGx5VGllcnNPdmVycmlkZShpZCwgYXZhaWxhYmxlRm9yVGllcnMpLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBzb3J0T3JkZXIsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBBTEw6IFF1b3RhVGllcltdID0gWydkZXZlbG9wZXInLCAncHJvJywgJ3RlYW0nLCAnZW50ZXJwcmlzZSddO1xuICByZXR1cm4gW1xuICAgIC8vIENhcGFjaXR5IHBhY2tzIChzZWF0cy9waXBlbGluZXMvcGx1Z2lucykgYXJlIGF2YWlsYWJsZSBvbiBFVkVSWSB0aWVyIHNvIGFueVxuICAgIC8vIGFjY291bnQg4oCUIGluY2x1ZGluZyBmcmVlIChkZXZlbG9wZXIpIOKAlCBjYW4gZXhwYW5kIGluIHBsYWNlLiBGZWF0dXJlIGJ1bmRsZXNcbiAgICAvLyAoYXVkaXRfbG9nL3NzbykgYW5kIHJhdGUgcGFja3Mgc3RheSB0aWVyLXNjb3BlZCBieSBkZWZhdWx0LlxuICAgIGIoJ3NlYXRfcGFjaycsICdTZWF0IFBhY2sgKCs1KScsICc1IGFkZGl0aW9uYWwgbWVtYmVyIHNlYXRzJywgeyBzZWF0czogNSB9LCAyNTAwLCBBTEwsIDApLFxuICAgIGIoJ3BpcGVsaW5lX3BhY2snLCAnUGlwZWxpbmUgUGFjayAoKzEwKScsICcxMCBhZGRpdGlvbmFsIHBpcGVsaW5lcycsIHsgcGlwZWxpbmVzOiAxMCB9LCAxNTAwLCBBTEwsIDEpLFxuICAgIGIoJ3BsdWdpbl9wYWNrJywgJ1BsdWdpbiBQYWNrICgrMTAwKScsICcxMDAgYWRkaXRpb25hbCBwbHVnaW5zJywgeyBwbHVnaW5zOiAxMDAgfSwgMTAwMCwgQUxMLCAyKSxcbiAgICBiKCdhcGlfcGFjaycsICdBUEkgUGFjayAoKzFNKScsICcxLDAwMCwwMDAgYWRkaXRpb25hbCBBUEkgY2FsbHMgLyBwZXJpb2QnLCB7IGFwaUNhbGxzOiAxXzAwMF8wMDAgfSwgMjAwMCwgWydkZXZlbG9wZXInLCAncHJvJ10sIDMpLFxuICAgIGIoJ2FpX3BhY2snLCAnQUkgUGFjayAoKzVrKScsICc1LDAwMCBhZGRpdGlvbmFsIEFJIGNhbGxzIC8gcGVyaW9kJywgeyBhaUNhbGxzOiA1MDAwIH0sIDMwMDAsIEFMTCwgNCksXG4gICAgYignc3RvcmFnZV9wYWNrJywgJ1N0b3JhZ2UgUGFjayAoKzUwIEdCKScsICc1MCBHQiBhZGRpdGlvbmFsIHJlZ2lzdHJ5IHN0b3JhZ2UnLCB7IHN0b3JhZ2VCeXRlczogNTAgKiBCVU5ETEVfR0IgfSwgMTAwMCwgQUxMLCA1KSxcbiAgICBiKCdhdWRpdF9sb2cnLCAnQXVkaXQgTG9nJywgJ0F1ZGl0IGxvZyBjYXBhYmlsaXR5Jywge30sIDIwMDAsIFsncHJvJ10sIDYsIHsgZmVhdHVyZXM6IFsnYXVkaXRfbG9nJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gICAgLy8gU1NPIGlzIElOQ0xVREVEIGluIFRlYW0gKHNlZSBUSUVSX0ZFQVRVUkVTLnRlYW0pLCBzbyB0aGUgYWRkLW9uIGlzIFByby1vbmx5LlxuICAgIGIoJ3NzbycsICdTU08gLyBJZFAnLCAnU1NPICsgdXAgdG8gNSBJZFAgY29uZmlncycsIHsgaWRwQ29uZmlnczogNSB9LCA0MDAwLCBbJ3BybyddLCA3LCB7IGZlYXR1cmVzOiBbJ3NzbyddLCBzdGFja2FibGU6IGZhbHNlIH0pLFxuICBdO1xufVxuIl19
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2JpbGxpbmctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBd0MsTUFBTSw0QkFBNEIsQ0FBQztBQU8xSixnRkFBZ0Y7QUFDaEYsOEVBQThFO0FBQzlFLGtEQUFrRDtBQUNsRCxrRkFBa0Y7QUFDbEYsaURBQWlEO0FBQ2pELHdFQUF3RTtBQUN4RSwyRUFBMkU7QUFDM0UsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSxpRkFBaUY7QUFDakYsNEVBQTRFO0FBRTVFLHdGQUF3RjtBQUN4RixTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsRUFBRSxNQUFjO0lBQ2hFLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sYUFBYSxNQUFNLEVBQUUsQ0FBQztJQUMvQyxPQUFPLFNBQVMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JGLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFlLEVBQUUsS0FBZTtJQUN2RCxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25DLE9BQU87UUFDTCxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ25DLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUs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QUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUNqSSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIExvYWQgYmlsbGluZyBwbGFuIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogUGVyLXBsYW4gcHJpY2VzIGFyZSB0aGUgbW9zdCBsaWtlbHkgdG8gdmFyeSBiZXR3ZWVuIGVudmlyb25tZW50czpcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9NT05USExZIC8gQklMTElOR19QTEFOX3tUSUVSfV9BTk5VQUwgIChpbiBjZW50cylcbiAqXG4gKiBPcHRpb25hbCBvdmVycmlkZXMgZm9yIGRlc2NyaXB0aW9ucyBhbmQgZmVhdHVyZXM6XG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fTkFNRSAgICAgICAgICAocGxhaW4gc3RyaW5nLCBkaXNwbGF5IG5hbWUpXG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fREVTQ1JJUFRJT04gICAocGxhaW4gc3RyaW5nKVxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X0ZFQVRVUkVTICAgICAgKEpTT04gc3RyaW5nIGFycmF5KVxuICpcbiAqIEFsbCBkZWZhdWx0cyBtYXRjaCB0aGUgb3JpZ2luYWwgaGFyZGNvZGVkIHNlZWQgZGF0YSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuaW1wb3J0IHsgUVVPVEFfVElFUlMsIFRJRVJfRkVBVFVSRVMsIEZFQVRVUkVfTUVUQURBVEEsIFZBTElEX1RJRVJTLCBpc1ZhbGlkVGllciwgdHlwZSBRdW90YVRpZXIsIHR5cGUgUXVvdGFUaWVyTGltaXRzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBCaWxsaW5nQ29uZmlnLCBCaWxsaW5nUGxhbkNvbmZpZywgQnVuZGxlQ29uZmlnIH0gZnJvbSAnLi9jb25maWctdHlwZXMuanMnO1xuXG4vKiogUGVyLXVuaXQgcXVvdGEgZGVsdGFzIGZvciBhIGJ1bmRsZSDigJQga2V5cyBjb25zdHJhaW5lZCB0byByZWFsIHF1b3RhIGZpZWxkc1xuICogIChtYXRjaGVzIGBCdW5kbGVDb25maWcuZ3JhbnRzYCksIHNvIGEgdHlwbydkIGRpbWVuc2lvbiBmYWlscyB0byBjb21waWxlLiAqL1xudHlwZSBHcmFudE1hcCA9IFBhcnRpYWw8UmVjb3JkPGtleW9mIFF1b3RhVGllckxpbWl0cywgbnVtYmVyPj47XG5cbi8vIC0tIERlZmF1bHQgZmVhdHVyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaGUgbWFya2V0ZWQgZmVhdHVyZSBsaXN0IGlzIGJ1aWx0IGZyb20gdHdvIGRlcml2ZWQgc291cmNlcyBzbyBpdCBjYW4gbmV2ZXJcbi8vIGRyaWZ0IGZyb20gd2hhdCB0aGUgcGxhdGZvcm0gYWN0dWFsbHkgZW5mb3JjZXM6XG4vLyAgIDEuIExJTUlUIGxpbmVzIGRlcml2ZWQgZnJvbSBlYWNoIHRpZXIncyBFRkZFQ1RJVkUgcXVvdGEgbGltaXRzIChRVU9UQV9USUVSUyksXG4vLyAgICAgIHNvIHRoZXkgdHJhY2sgUVVPVEFfVElFUl8qIGVudiBvdmVycmlkZXMuXG4vLyAgIDIuIElOQ0xVREVELUZFQVRVUkUgbGluZXMgZGVyaXZlZCBmcm9tIHRoZSBlbmZvcmNlZCBlbnRpdGxlbWVudCBzZXRcbi8vICAgICAgKFRJRVJfRkVBVFVSRVMpIHZpYSBGRUFUVVJFX01FVEFEQVRBIGxhYmVscyDigJQgc28gYW4gYWR2ZXJ0aXNlZCBiYXNlXG4vLyAgICAgIGZlYXR1cmUgaXMgYWx3YXlzIG9uZSBgcmVxdWlyZUZlYXR1cmVgIGFjdHVhbGx5IGdyYW50cyBmb3IgdGhhdCB0aWVyLlxuLy8gT25seSBnZW51aW5lbHkgbm9uLWdhdGVkIG1hcmtldGluZyBjb3B5IChzdXBwb3J0IGxldmVsLCBkYXNoYm9hcmRzLCBSQkFDKSBpc1xuLy8gaGFuZC1hdXRob3JlZCwgcGFzc2VkIGFzIGBwZXJrc2AuIFB1cmNoYXNhYmxlIGFkZC1vbnMgKHNzbywgYXVkaXRfbG9nKSBhcmUgTk9UXG4vLyBsaXN0ZWQgYXMgYmFzZSBwZXJrcyBoZXJlIOKAlCB0aGV5IGFyZSBzb2xkIGFzIGJ1bmRsZXMgKHNlZSBsb2FkQnVuZGxlcygpKS5cblxuLyoqIFwiVXAgdG8gTiBwbHVnaW5zXCIgLyBcIlVubGltaXRlZCBwbHVnaW5zXCIgZnJvbSBhbiBlZmZlY3RpdmUgbGltaXQgKC0xID0gdW5saW1pdGVkKS4gKi9cbmZ1bmN0aW9uIGxpbWl0TGluZShsaW1pdDogbnVtYmVyLCBzaW5ndWxhcjogc3RyaW5nLCBwbHVyYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChsaW1pdCA9PT0gLTEpIHJldHVybiBgVW5saW1pdGVkICR7cGx1cmFsfWA7XG4gIHJldHVybiBgVXAgdG8gJHtsaW1pdC50b0xvY2FsZVN0cmluZygnZW4tVVMnKX0gJHtsaW1pdCA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsfWA7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGZWF0dXJlcyh0aWVyOiBRdW90YVRpZXIsIHBlcmtzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbCA9IFFVT1RBX1RJRVJTW3RpZXJdLmxpbWl0cztcbiAgcmV0dXJuIFtcbiAgICBsaW1pdExpbmUobC5zZWF0cywgJ3NlYXQnLCAnc2VhdHMnKSxcbiAgICBsaW1pdExpbmUobC5wbHVnaW5zLCAncGx1Z2luJywgJ3BsdWdpbnMnKSxcbiAgICBsaW1pdExpbmUobC5waXBlbGluZXMsICdwaXBlbGluZScsICdwaXBlbGluZXMnKSxcbiAgICBsaW1pdExpbmUobC5hcGlDYWxscywgJ0FQSSBjYWxsJywgJ0FQSSBjYWxscycpLFxuICAgIGxpbWl0TGluZShsLmFpQ2FsbHMsICdBSSBjYWxsJywgJ0FJIGNhbGxzJyksXG4gICAgLy8gRW5mb3JjZWQgZW50aXRsZW1lbnRzIOKGkiBjdXN0b21lci1mYWNpbmcgbGFiZWxzIChzaW5nbGUgc291cmNlIG9mIHRydXRoKS5cbiAgICAuLi5USUVSX0ZFQVRVUkVTW3RpZXJdLm1hcCgoZikgPT4gRkVBVFVSRV9NRVRBREFUQVtmXS5sYWJlbCksXG4gICAgLi4ucGVya3MsXG4gIF07XG59XG5cbi8vIE5vdGU6IGBwZXJrc2AgYXJlIG5vbi1nYXRlZCBtYXJrZXRpbmcgbGluZXMgb25seS4gRW5mb3JjZWQgZmVhdHVyZXMgKGluY2wuXG4vLyBQcmlvcml0eSBTdXBwb3J0IGZvciBwcm8vdGVhbS9lbnRlcnByaXNlKSBjb21lIGZyb20gVElFUl9GRUFUVVJFUyBhYm92ZS5cbmNvbnN0IERFRkFVTFRfREVWRUxPUEVSX0ZFQVRVUkVTID0gZGVmYXVsdEZlYXR1cmVzKCdkZXZlbG9wZXInLCBbJ0NvbW11bml0eSBzdXBwb3J0J10pO1xuY29uc3QgREVGQVVMVF9QUk9fRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ3BybycsIFsnUmVwb3J0aW5nIGRhc2hib2FyZCddKTtcbmNvbnN0IERFRkFVTFRfVEVBTV9GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygndGVhbScsIFsnUkJBQyAmIHRlYW0gcm9sZXMnXSk7XG5jb25zdCBERUZBVUxUX0VOVEVSUFJJU0VfRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ2VudGVycHJpc2UnLCBbXG4gICdSQkFDICYgdGVhbSByb2xlcycsICdSZXBvcnRpbmcgZGFzaGJvYXJkJyxcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGEgcHJpY2UgKGluIGNlbnRzKSBmcm9tIGFuIGVudiB2YXIsIGZhbGxpbmcgYmFjayB0byB0aGUgZGVmYXVsdCB3aGVuXG4gKiB1bnNldCBPUiBtYWxmb3JtZWQuIEEgTmFOIChlLmcuIGBCSUxMSU5HX1BMQU5fUFJPX01PTlRITFk9YWJjYCkgbXVzdCBuZXZlclxuICogZmxvdyBpbnRvIHRoZSByZXR1cm5lZCBjb25maWcgYXMgYSBwcmljZS5cbiAqL1xuZnVuY3Rpb24gZW52Q2VudHMoZW52VmFyOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoZW52VmFyID09PSB1bmRlZmluZWQgfHwgZW52VmFyID09PSAnJykgcmV0dXJuIGZhbGxiYWNrO1xuICBjb25zdCBuID0gcGFyc2VJbnQoZW52VmFyLCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBmYWxsYmFjayA6IG47XG59XG5cbi8qKlxuICogUGFyc2UgYSBKU09OIGFycmF5IGZyb20gYW4gZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRmVhdHVyZXMoZW52VmFyOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgaWYgKCFlbnZWYXIpIHJldHVybiBmYWxsYmFjaztcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGVudlZhcik7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKSA/IHBhcnNlZCA6IGZhbGxiYWNrO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkIGJpbGxpbmcgcGxhbiBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEJpbGxpbmdDb25maWcoKTogQmlsbGluZ0NvbmZpZyB7XG4gIC8vIEtleWVkIGJ5IFF1b3RhVGllciBzbyB0aGUgY29tcGlsZXIgZm9yY2VzIGEgcGxhbiBmb3IgRVZFUlkgdGllciDigJQgYWRkaW5nIGFcbiAgLy8gNXRoIFF1b3RhVGllciB3aXRob3V0IGEgcGxhbiBoZXJlIGlzIG5vdyBhIGNvbXBpbGUgZXJyb3IgKHdhcyBhIGhhbmQta2VwdFxuICAvLyA0LWVsZW1lbnQgYXJyYXkgdGhhdCBzaWxlbnRseSBzaGlwcGVkIG5vIHBsYW4vcHJpY2UgZm9yIGEgbmV3IHRpZXIpLiBUaGVcbiAgLy8gcHVibGljIGBjb25maWcucGxhbnNgIHNoYXBlIHN0YXlzIGFuIGFycmF5LCBkZXJpdmVkIGJlbG93IGluIFZBTElEX1RJRVJTXG4gIC8vIG9yZGVyIChkZXZlbG9wZXIsIHBybywgdGVhbSwgZW50ZXJwcmlzZSkgdG8gcHJlc2VydmUgY29uc3VtZXIgb3JkZXJpbmcuXG4gIGNvbnN0IHBsYW5CeVRpZXI6IFJlY29yZDxRdW90YVRpZXIsIEJpbGxpbmdQbGFuQ29uZmlnPiA9IHtcbiAgICBkZXZlbG9wZXI6IHtcbiAgICAgIGlkOiAnZGV2ZWxvcGVyJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfTkFNRSB8fCAnRGV2ZWxvcGVyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdGcmVlIHN0YXJ0ZXIgdGllciBmb3IgaW5kaXZpZHVhbCBkZXZlbG9wZXJzJyxcbiAgICAgIHRpZXI6ICdkZXZlbG9wZXInLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfTU9OVEhMWSwgMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9BTk5VQUwsIDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX0RFVkVMT1BFUl9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogdHJ1ZSxcbiAgICAgIHNvcnRPcmRlcjogMCxcbiAgICB9LFxuICAgIHBybzoge1xuICAgICAgaWQ6ICdwcm8nLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19OQU1FIHx8ICdQcm8nLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ0ZvciBpbmRpdmlkdWFsIHBvd2VyIHVzZXJzIGFuZCBwcm9kdWN0aW9uIHdvcmtsb2FkcycsXG4gICAgICB0aWVyOiAncHJvJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fUFJPX01PTlRITFksIDQ5MDApLFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fQU5OVUFMLCA0OTAwMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfUFJPX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIHNvcnRPcmRlcjogMSxcbiAgICB9LFxuICAgIHRlYW06IHtcbiAgICAgIGlkOiAndGVhbScsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9OQU1FIHx8ICdUZWFtJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9ERVNDUklQVElPTlxuICAgICAgICB8fCAnRm9yIHRlYW1zIGNvbGxhYm9yYXRpbmcgb24gc2hhcmVkIHBpcGVsaW5lcycsXG4gICAgICB0aWVyOiAndGVhbScsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fTU9OVEhMWSwgMTQ5MDApLFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX0FOTlVBTCwgMTQ5MDAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfVEVBTV9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBzb3J0T3JkZXI6IDIsXG4gICAgfSxcbiAgICBlbnRlcnByaXNlOiB7XG4gICAgICBpZDogJ2VudGVycHJpc2UnLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfTkFNRSB8fCAnRW50ZXJwcmlzZScsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ09yZy13aWRlIHNjYWxlIHdpdGggdW5saW1pdGVkIHNlYXRzIGFuZCBwcmlvcml0eSBzdXBwb3J0JyxcbiAgICAgIHRpZXI6ICdlbnRlcnByaXNlJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9NT05USExZLCAzOTkwMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfQU5OVUFMLCAzOTkwMDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9FTlRFUlBSSVNFX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIHNvcnRPcmRlcjogMyxcbiAgICB9LFxuICB9O1xuXG4gIC8vIERlcml2ZSB0aGUgYXJyYXkgY29uc3VtZXJzIHJlYWQgKGBjb25maWcucGxhbnNgKSBpbiBjYW5vbmljYWwgdGllciBvcmRlci5cbiAgY29uc3QgcGxhbnM6IEJpbGxpbmdQbGFuQ29uZmlnW10gPSBWQUxJRF9USUVSUy5tYXAoKHRpZXIpID0+IHBsYW5CeVRpZXJbdGllcl0pO1xuXG4gIHJldHVybiB7IHBsYW5zLCBidW5kbGVzOiBsb2FkQnVuZGxlcygpIH07XG59XG5cbmNvbnN0IEJVTkRMRV9HQiA9IDEwMjQgKiAxMDI0ICogMTAyNDtcblxuLyoqXG4gKiBBcHBseSBhIHBlci1idW5kbGUgZ3JhbnQgb3ZlcnJpZGUuIEVhY2ggc3RhY2thYmxlIHBhY2sgZ3JhbnRzIGV4YWN0bHkgb25lXG4gKiBxdW90YSBkaW1lbnNpb24sIHNvIGBCSUxMSU5HX0JVTkRMRV88SUQ+X0dSQU5UYCByZXR1bmVzIHRoYXQgYW1vdW50IChlLmcuIG1ha2VcbiAqIHRoZSBTZWF0IFBhY2sgZ3JhbnQgKzEwIGluc3RlYWQgb2YgKzUpIOKAlCBwYXJhbGxlbCB0byB0aGUgcHJpY2Ugb3ZlcnJpZGVzLlxuICogSWdub3JlZCBmb3IgbXVsdGktZGltZW5zaW9uIG9yIGZlYXR1cmUtb25seSAoZW1wdHktZ3JhbnQpIGJ1bmRsZXMsIGFuZCBmb3IgYVxuICogbWFsZm9ybWVkL25lZ2F0aXZlIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhcHBseUdyYW50T3ZlcnJpZGUoaWQ6IHN0cmluZywgZ3JhbnRzOiBHcmFudE1hcCk6IEdyYW50TWFwIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbYEJJTExJTkdfQlVORExFXyR7aWQudG9VcHBlckNhc2UoKX1fR1JBTlRgXTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGdyYW50cyk7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnIHx8IGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gZ3JhbnRzO1xuICBjb25zdCBuID0gcGFyc2VJbnQocmF3LCAxMCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obikgfHwgbiA8IDApIHJldHVybiBncmFudHM7XG4gIC8vIGBrZXlzYCBjYW1lIGZyb20gYSBHcmFudE1hcCwgc28gaXRzIHNvbGUga2V5IGlzIGEgUXVvdGFUaWVyTGltaXRzIGZpZWxkLlxuICByZXR1cm4geyBba2V5c1swXSBhcyBrZXlvZiBRdW90YVRpZXJMaW1pdHNdOiBuIH07XG59XG5cbi8qKlxuICogQXBwbHkgYSBwZXItYnVuZGxlIHRpZXItYXZhaWxhYmlsaXR5IG92ZXJyaWRlLiBgQklMTElOR19CVU5ETEVfPElEPl9USUVSU2AgaXMgYVxuICogSlNPTiBhcnJheSBvZiB0aWVyIElEcyB0aGF0IG1heSBwdXJjaGFzZSB0aGUgYnVuZGxlIChlLmcuIGBbXCJkZXZlbG9wZXJcIixcInByb1wiXWApXG4gKiDigJQgcGFyYWxsZWwgdG8gdGhlIHByaWNlL2dyYW50IG92ZXJyaWRlcy4gRmFsbHMgYmFjayB0byBgZGVmYXVsdFRpZXJzYCB3aGVuXG4gKiB1bnNldCwgbWFsZm9ybWVkLCBlbXB0eSwgb3IgY29udGFpbmluZyBhbiB1bmtub3duIHRpZXIuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5VGllcnNPdmVycmlkZShpZDogc3RyaW5nLCBkZWZhdWx0VGllcnM6IFF1b3RhVGllcltdKTogUXVvdGFUaWVyW10ge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9USUVSU2BdO1xuICBpZiAoIXJhdykgcmV0dXJuIGRlZmF1bHRUaWVycztcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnNlZCkgfHwgcGFyc2VkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRlZmF1bHRUaWVycztcbiAgICBjb25zdCB2YWxpZCA9IHBhcnNlZC5maWx0ZXIoKHQpOiB0IGlzIFF1b3RhVGllciA9PiB0eXBlb2YgdCA9PT0gJ3N0cmluZycgJiYgaXNWYWxpZFRpZXIodCkpO1xuICAgIHJldHVybiB2YWxpZC5sZW5ndGggPT09IHBhcnNlZC5sZW5ndGggPyB2YWxpZCA6IGRlZmF1bHRUaWVycztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRUaWVycztcbiAgfVxufVxuXG4vKipcbiAqIFB1cmNoYXNhYmxlIGFkZC1vbiBidW5kbGVzIChkb2NzL2JpbGxpbmctYnVuZGxlcy5tZCDCpzMpLiBHcmFudHMgYXJlIHBlci11bml0XG4gKiBkZWx0YXMgb24gUXVvdGFUaWVyTGltaXRzOyBwcmljZXMgKGNlbnRzLCBgQklMTElOR19CVU5ETEVfPElEPl9NT05USExZYCAvXG4gKiBgX0FOTlVBTGApLCB0aGUgc2luZ2xlLWRpbWVuc2lvbiBncmFudCBhbW91bnQgKGBCSUxMSU5HX0JVTkRMRV88SUQ+X0dSQU5UYCksXG4gKiBhbmQgdGhlIHB1cmNoYXNhYmxlLXRpZXIgbGlzdCAoYEJJTExJTkdfQlVORExFXzxJRD5fVElFUlNgKSBhcmUgYWxsXG4gKiBlbnYtb3ZlcnJpZGFibGUuIEFubnVhbCDiiYggMTDDlyBtb250aGx5LlxuICovXG5mdW5jdGlvbiBsb2FkQnVuZGxlcygpOiBCdW5kbGVDb25maWdbXSB7XG4gIGNvbnN0IGIgPSAoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICBncmFudHM6IEdyYW50TWFwLFxuICAgIG1vbnRobHk6IG51bWJlcixcbiAgICBhdmFpbGFibGVGb3JUaWVyczogUXVvdGFUaWVyW10sXG4gICAgc29ydE9yZGVyOiBudW1iZXIsXG4gICAgZXh0cmE6IHsgZmVhdHVyZXM/OiBzdHJpbmdbXTsgc3RhY2thYmxlPzogYm9vbGVhbiB9ID0ge30sXG4gICk6IEJ1bmRsZUNvbmZpZyA9PiB7XG4gICAgLy8gUmVzb2x2ZSBtb250aGx5IGZpcnN0IHNvIHRoZSBhbm51YWwgZmFsbGJhY2sgdHJhY2tzIGEgYF9NT05USExZYCBvdmVycmlkZVxuICAgIC8vIChhbm51YWwg4omIIDEww5cgdGhlICplZmZlY3RpdmUqIG1vbnRobHksIG5vdCB0aGUgaGFyZGNvZGVkIGRlZmF1bHQpLlxuICAgIGNvbnN0IHJlc29sdmVkTW9udGhseSA9IGVudkNlbnRzKHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X01PTlRITFlgXSwgbW9udGhseSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZ3JhbnRzOiBhcHBseUdyYW50T3ZlcnJpZGUoaWQsIGdyYW50cyksXG4gICAgICAuLi4oZXh0cmEuZmVhdHVyZXMgPyB7IGZlYXR1cmVzOiBleHRyYS5mZWF0dXJlcyB9IDoge30pLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IHJlc29sdmVkTW9udGhseSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9BTk5VQUxgXSwgcmVzb2x2ZWRNb250aGx5ICogMTApLFxuICAgICAgfSxcbiAgICAgIHN0YWNrYWJsZTogZXh0cmEuc3RhY2thYmxlID8/IHRydWUsXG4gICAgICBhdmFpbGFibGVGb3JUaWVyczogYXBwbHlUaWVyc092ZXJyaWRlKGlkLCBhdmFpbGFibGVGb3JUaWVycyksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIHNvcnRPcmRlcixcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IEFMTDogUXVvdGFUaWVyW10gPSBbJ2RldmVsb3BlcicsICdwcm8nLCAndGVhbScsICdlbnRlcnByaXNlJ107XG4gIHJldHVybiBbXG4gICAgLy8gQ2FwYWNpdHkgcGFja3MgKHNlYXRzL3BpcGVsaW5lcy9wbHVnaW5zKSBhcmUgYXZhaWxhYmxlIG9uIEVWRVJZIHRpZXIgc28gYW55XG4gICAgLy8gYWNjb3VudCDigJQgaW5jbHVkaW5nIGZyZWUgKGRldmVsb3Blcikg4oCUIGNhbiBleHBhbmQgaW4gcGxhY2UuIEZlYXR1cmUgYnVuZGxlc1xuICAgIC8vIChhdWRpdF9sb2cvc3NvKSBhbmQgcmF0ZSBwYWNrcyBzdGF5IHRpZXItc2NvcGVkIGJ5IGRlZmF1bHQuXG4gICAgYignc2VhdF9wYWNrJywgJ1NlYXQgUGFjayAoKzUpJywgJzUgYWRkaXRpb25hbCBtZW1iZXIgc2VhdHMnLCB7IHNlYXRzOiA1IH0sIDI1MDAsIEFMTCwgMCksXG4gICAgYigncGlwZWxpbmVfcGFjaycsICdQaXBlbGluZSBQYWNrICgrMTApJywgJzEwIGFkZGl0aW9uYWwgcGlwZWxpbmVzJywgeyBwaXBlbGluZXM6IDEwIH0sIDE1MDAsIEFMTCwgMSksXG4gICAgYigncGx1Z2luX3BhY2snLCAnUGx1Z2luIFBhY2sgKCsxMDApJywgJzEwMCBhZGRpdGlvbmFsIHBsdWdpbnMnLCB7IHBsdWdpbnM6IDEwMCB9LCAxNTAwLCBBTEwsIDIpLFxuICAgIGIoJ2FwaV9wYWNrJywgJ0FQSSBQYWNrICgrMU0pJywgJzEsMDAwLDAwMCBhZGRpdGlvbmFsIEFQSSBjYWxscyAvIHBlcmlvZCcsIHsgYXBpQ2FsbHM6IDFfMDAwXzAwMCB9LCAyMDAwLCBBTEwsIDMpLFxuICAgIGIoJ2FpX3BhY2snLCAnQUkgUGFjayAoKzVrKScsICc1LDAwMCBhZGRpdGlvbmFsIEFJIGNhbGxzIC8gcGVyaW9kJywgeyBhaUNhbGxzOiA1MDAwIH0sIDc1MDAsIEFMTCwgNCksXG4gICAgYignc3RvcmFnZV9wYWNrJywgJ1N0b3JhZ2UgUGFjayAoKzUwIEdCKScsICc1MCBHQiBhZGRpdGlvbmFsIHJlZ2lzdHJ5IHN0b3JhZ2UnLCB7IHN0b3JhZ2VCeXRlczogNTAgKiBCVU5ETEVfR0IgfSwgMjUwMCwgQUxMLCA1KSxcbiAgICBiKCdhdWRpdF9sb2cnLCAnQXVkaXQgTG9nJywgJ0F1ZGl0IGxvZyBjYXBhYmlsaXR5Jywge30sIDIwMDAsIFsncHJvJ10sIDYsIHsgZmVhdHVyZXM6IFsnYXVkaXRfbG9nJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gICAgLy8gU1NPIGlzIElOQ0xVREVEIGluIFRlYW0gKHNlZSBUSUVSX0ZFQVRVUkVTLnRlYW0pLCBzbyB0aGUgYWRkLW9uIGlzIFByby1vbmx5LlxuICAgIGIoJ3NzbycsICdTU08gLyBJZFAnLCAnU1NPICsgdXAgdG8gNSBJZFAgY29uZmlncycsIHsgaWRwQ29uZmlnczogNSB9LCA0MDAwLCBbJ3BybyddLCA3LCB7IGZlYXR1cmVzOiBbJ3NzbyddLCBzdGFja2FibGU6IGZhbHNlIH0pLFxuICBdO1xufVxuIl19
@@ -201,10 +201,14 @@ function validatePluginFilter(pluginFilter) {
201
201
  * ```
202
202
  */
203
203
  export const handler = async (event) => {
204
+ // NOTE: never log event.StackId here — the CloudFormation Stack ARN embeds the
205
+ // AWS account id (arn:aws:cloudformation:<region>:<ACCOUNT_ID>:stack/…), which
206
+ // must never be persisted to CloudWatch. requestId + logicalResourceId are
207
+ // sufficient for correlation. (StackId is still returned in the CFN response
208
+ // body below — that is the mandatory CFN protocol field and is not a log.)
204
209
  lambdaLog.info('START', `${event.RequestType} request received`, {
205
210
  logicalResourceId: event.LogicalResourceId,
206
211
  requestId: event.RequestId,
207
- stackId: event.StackId,
208
212
  });
209
213
  const baseResponse = {
210
214
  StackId: event.StackId,
@@ -285,4 +289,4 @@ export const handler = async (event) => {
285
289
  lambdaLog.info('END', 'Custom resource execution completed');
286
290
  }
287
291
  };
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzlGLE9BQU8sS0FBSyxFQUFFLEVBQXNCLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxtRkFBbUY7QUFDbkYsbUZBQW1GO0FBQ25GLHFGQUFxRjtBQUNyRixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsd0JBQXdCLEdBQ3pCLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEM7OztHQUdHO0FBQ0gsU0FBUyxRQUFRLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxPQUFlLEVBQUUsSUFBYztJQUMzRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RixRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxPQUFPO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDekMsS0FBSyxPQUFPO1lBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxPQUFPO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNO1FBQ2hGLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFN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eEQsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLE1BQU0sRUFBRSxNQUFNO1NBQ3lCLENBQUM7SUFDNUMsQ0FBQztZQUFTLENBQUM7UUFDVCxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7QUFDSCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgR2V0U2VjcmV0VmFsdWVDb21tYW5kLCBTZWNyZXRzTWFuYWdlckNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXInO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5GaWx0ZXIsIFBsdWdpbiB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWRhdGEnO1xuaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQsIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IGF4aW9zLCB7IHR5cGUgQXhpb3NJbnN0YW5jZSwgQXhpb3NFcnJvciB9IGZyb20gJ2F4aW9zJztcbi8vIEltcG9ydCB0aGUgZGVwZW5kZW5jeS1mcmVlIGxlYWYsIE5PVCBgYXBwLWNvbmZpZy5qc2AvYENvcmVDb25zdGFudHNgOiB0aGUgbGF0dGVyXG4vLyB0cmFuc2l0aXZlbHkgcHVsbHMgaW5mcmFzdHJ1Y3R1cmUtY29uZmlnIOKGkiBhd3MtY2RrLWxpYiwgd2hpY2ggZXNidWlsZCB0aGVuIHRyaWVzXG4vLyB0byBidW5kbGUgaW50byB0aGlzIExhbWJkYSAoaHVuZHJlZHMgb2YgTUIg4oaSIE9PTS9TSUdLSUxMIGR1cmluZyBjb2xkLXN0YXJ0IHN5bnRoKS5cbmltcG9ydCB7XG4gIEhBTkRMRVJfVElNRU9VVF9NUyxcbiAgSEFORExFUl9NQVhfUkVUUklFUyxcbiAgSEFORExFUl9SRVRSWV9ERUxBWV9NUyxcbiAgSEFORExFUl9ERUZBVUxUX0JBU0VfVVJMLFxufSBmcm9tICcuLi9jb25maWcvaGFuZGxlci1jb25zdGFudHMuanMnO1xuXG4vKipcbiAqIFN0cnVjdHVyZWQgbG9nZ2VyIGZvciBMYW1iZGEgKG91dHB1dHMgSlNPTiB0byBDbG91ZFdhdGNoKS5cbiAqIERlYnVnIG1lc3NhZ2VzIG9ubHkgZW1pdHRlZCB3aGVuIExPR19MRVZFTD1kZWJ1Zy5cbiAqL1xuZnVuY3Rpb24gbG9nRW50cnkobGV2ZWw6IHN0cmluZywgdGFnOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pIHtcbiAgY29uc3QgbGluZSA9IEpTT04uc3RyaW5naWZ5KHsgbGV2ZWwsIHRhZywgbWVzc2FnZSwgZGF0YSwgdHM6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KTtcbiAgc3dpdGNoIChsZXZlbCkge1xuICAgIGNhc2UgJ0VSUk9SJzogY29uc29sZS5lcnJvcihsaW5lKTsgYnJlYWs7XG4gICAgY2FzZSAnREVCVUcnOiBpZiAocHJvY2Vzcy5lbnYuTE9HX0xFVkVMID09PSAnZGVidWcnKSBjb25zb2xlLmRlYnVnKGxpbmUpOyBicmVhaztcbiAgICBkZWZhdWx0OiBjb25zb2xlLmxvZyhsaW5lKTtcbiAgfVxufVxuXG5jb25zdCBsYW1iZGFMb2cgPSB7XG4gIGluZm86ICh0YWc6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gbG9nRW50cnkoJ0lORk8nLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxuICBlcnJvcjogKHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiBsb2dFbnRyeSgnRVJST1InLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxuICBkZWJ1ZzogKHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSA9PiBsb2dFbnRyeSgnREVCVUcnLCB0YWcsIG1lc3NhZ2UsIGRhdGEpLFxufTtcblxuY29uc3QgUkVUUllBQkxFX1NUQVRVU0VTID0gbmV3IFNldChbNDI5LCA1MDIsIDUwMywgNTA0XSk7XG5jb25zdCBSRVRSWUFCTEVfQ09ERVMgPSBuZXcgU2V0KFsnRUNPTk5SRVNFVCcsICdFQ09OTlJFRlVTRUQnLCAnRVRJTUVET1VUJ10pO1xuXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLyoqIFBsYXRmb3JtIHNlY3JldCBuYW1lIOKAlCBpbmplY3RlZCBhcyBQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyIGJ5IFBsdWdpbkxvb2t1cCBjb25zdHJ1Y3QuICovXG5jb25zdCBQTEFURk9STV9TRUNSRVRfTkFNRSA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFQ1JFVF9OQU1FO1xuaWYgKCFQTEFURk9STV9TRUNSRVRfTkFNRSkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ1BMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHJlcXVpcmVkJyk7XG59XG5cbi8qKiBDYWNoZWQgdG9rZW4gdG8gYXZvaWQgcmVwZWF0ZWQgU2VjcmV0cyBNYW5hZ2VyIGNhbGxzIHdpdGhpbiBhIHNpbmdsZSBpbnZvY2F0aW9uLiAqL1xubGV0IGNhY2hlZFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuLyoqIEBpbnRlcm5hbCBSZXNldCBjYWNoZWQgdG9rZW4gKGZvciB0ZXN0aW5nIG9ubHkpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldENyZWRlbnRpYWxzQ2FjaGUoKTogdm9pZCB7IGNhY2hlZFRva2VuID0gbnVsbDsgfVxuXG4vKipcbiAqIEZldGNoIEpXVCB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIuXG4gKiBDYWNoZXMgdGhlIHJlc3VsdCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBMYW1iZGEgZXhlY3V0aW9uIGNvbnRleHQuXG4gKlxuICogVGhlIHNlY3JldCBuYW1lIGlzIHNldCB2aWEgUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhciAoZS5nLiBge3ByZWZpeH0ve29yZ0lkfS9wbGF0Zm9ybWApXG4gKiBDcmVhdGUgaXQgd2l0aDogYHBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW5gXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFRva2VuKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChjYWNoZWRUb2tlbikgcmV0dXJuIGNhY2hlZFRva2VuO1xuXG4gIGxhbWJkYUxvZy5pbmZvKCdBVVRIJywgYEZldGNoaW5nIHRva2VuIGZyb20gU2VjcmV0cyBNYW5hZ2VyOiAke1BMQVRGT1JNX1NFQ1JFVF9OQU1FfWApO1xuXG4gIGNvbnN0IGNsaWVudCA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh7fSk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7IFNlY3JldElkOiBQTEFURk9STV9TRUNSRVRfTkFNRSB9KSk7XG5cbiAgaWYgKCFyZXNwb25zZS5TZWNyZXRTdHJpbmcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNlY3JldCBcIiR7UExBVEZPUk1fU0VDUkVUX05BTUV9XCIgaXMgZW1wdHlgKTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVzcG9uc2UuU2VjcmV0U3RyaW5nKSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvLyBTY2hlbWEgaXMgYHsgdXNlcm5hbWUsIHBhc3N3b3JkLCAuLi4gfWAg4oCUIHRoZSBgcGFzc3dvcmRgIGZpZWxkIGlzIHRoZVxuICAvLyBwbGF0Zm9ybSBKV1QuIFNhbWUgc2VjcmV0IGlzIHJlYWQgYnkgQ29kZUJ1aWxkJ3MgYHNlY3JldHNNYW5hZ2VyQ3JlZGVudGlhbHNgXG4gIC8vIGZvciByZWdpc3RyeSBwdWxscyAoQmFzaWMgYXV0aDogdXNlcm5hbWU6cGFzc3dvcmQgPSBvcmdJZDpKV1QpLiBUaGVcbiAgLy8gcGlwZWxpbmUtaW1hZ2UtcmVnaXN0cnkgdG9rZW4gZW5kcG9pbnQgdmFsaWRhdGVzIHRoZSBwYXNzd29yZCBhcyBhIEpXVFxuICAvLyBhbmQgaXNzdWVzIGEgcmVnaXN0cnkgdG9rZW4gc2NvcGVkIHRvIHRoZSBKV1QncyBvcmcuXG4gIGlmICghcGFyc2VkLnBhc3N3b3JkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgXCIke1BMQVRGT1JNX1NFQ1JFVF9OQU1FfVwiIG1pc3NpbmcgcGFzc3dvcmQg4oCUIHJ1biBcInBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW5cIiB0byBnZW5lcmF0ZWApO1xuICB9XG5cbiAgY2FjaGVkVG9rZW4gPSBwYXJzZWQucGFzc3dvcmQ7XG4gIGxhbWJkYUxvZy5pbmZvKCdBVVRIJywgJ1Rva2VuIHJldHJpZXZlZCBmcm9tIFNlY3JldHMgTWFuYWdlcicpO1xuICByZXR1cm4gY2FjaGVkVG9rZW47XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByZS1jb25maWd1cmVkIEF4aW9zIGluc3RhbmNlIGZvciBBUEkgcmVxdWVzdHMuXG4gKlxuICogQHBhcmFtIGJhc2VVUkwgLSBCYXNlIFVSTCBvZiB0aGUgdGFyZ2V0IEFQSVxuICogQHBhcmFtIHRva2VuIC0gSldUIHRva2VuIGZvciBhdXRob3JpemF0aW9uXG4gKiBAcmV0dXJucyBDb25maWd1cmVkIEF4aW9zIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShiYXNlVVJMOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBBeGlvc0luc3RhbmNlIHtcbiAgcmV0dXJuIGF4aW9zLmNyZWF0ZSh7XG4gICAgYmFzZVVSTCxcbiAgICB0aW1lb3V0OiBIQU5ETEVSX1RJTUVPVVRfTVMsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBwbHVnaW4gY29uZmlndXJhdGlvbiBmcm9tIHRoZSBleHRlcm5hbCBBUEkgd2l0aCByZXRyeSBsb2dpYy5cbiAqIFJldHJpZXMgb24gdHJhbnNpZW50IGZhaWx1cmVzICg0MjksIDUwMiwgNTAzLCA1MDQsIG5ldHdvcmsgZXJyb3JzKVxuICogd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmLlxuICpcbiAqIEBwYXJhbSBhcGkgLSBDb25maWd1cmVkIEF4aW9zIGluc3RhbmNlXG4gKiBAcGFyYW0gcGx1Z2luRmlsdGVyIC0gRmlsdGVyIGNyaXRlcmlhIGZvciB0aGUgcGx1Z2luIGxvb2t1cFxuICogQHJldHVybnMgVGhlIHBsdWdpbiBkYXRhIHJldHVybmVkIGJ5IHRoZSBBUElcbiAqIEB0aHJvd3MgRXJyb3Igb24gcGVyc2lzdGVudCBmYWlsdXJlLCB0aW1lb3V0IG9yIGludmFsaWQgcmVzcG9uc2VcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2goYXBpOiBBeGlvc0luc3RhbmNlLCBwbHVnaW5GaWx0ZXI6IFBsdWdpbkZpbHRlcik6IFByb21pc2U8UGx1Z2luPiB7XG4gIGxhbWJkYUxvZy5kZWJ1ZygnRkVUQ0gnLCAnU3RhcnRpbmcgcGx1Z2luIGZldGNoJywgeyBmaWx0ZXI6IHBsdWdpbkZpbHRlciB9KTtcblxuICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBIQU5ETEVSX01BWF9SRVRSSUVTOyBhdHRlbXB0KyspIHtcbiAgICBpZiAoYXR0ZW1wdCA+IDApIHtcbiAgICAgIGNvbnN0IGRlbGF5ID0gSEFORExFUl9SRVRSWV9ERUxBWV9NUyAqIE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKTtcbiAgICAgIGxhbWJkYUxvZy5pbmZvKCdSRVRSWScsIGBBdHRlbXB0ICR7YXR0ZW1wdCArIDF9LyR7SEFORExFUl9NQVhfUkVUUklFUyArIDF9IGFmdGVyICR7ZGVsYXl9bXNgKTtcbiAgICAgIGF3YWl0IHNsZWVwKGRlbGF5KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhLCBzdGF0dXMgfSA9IGF3YWl0IGFwaS5wb3N0PFBsdWdpbj4oJy9hcGkvcGx1Z2lucy9sb29rdXAnLCB7XG4gICAgICAgIGZpbHRlcjogcGx1Z2luRmlsdGVyLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IHJlc3BvbnNlIGRhdGEgZnJvbSBBUEknKTtcbiAgICAgIH1cblxuICAgICAgbGFtYmRhTG9nLmluZm8oJ0ZFVENIJywgJ1BsdWdpbiBmZXRjaGVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBwbHVnaW46IGRhdGEubmFtZSxcbiAgICAgICAgdmVyc2lvbjogZGF0YS52ZXJzaW9uLFxuICAgICAgICBpZDogZGF0YS5pZCxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXhpb3NFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gJ0VDT05OQUJPUlRFRCcpIHtcbiAgICAgICAgICBsYW1iZGFMb2cuZXJyb3IoJ0ZFVENIJywgYFBsdWdpbiBsb29rdXAgdGltZWQgb3V0IGFmdGVyICR7SEFORExFUl9USU1FT1VUX01TfW1zYCk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gbG9va3VwIHRpbWVkIG91dCBhZnRlciAke0hBTkRMRVJfVElNRU9VVF9NU31tc2ApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmV0cnlhYmxlID0gZXJyb3IucmVzcG9uc2VcbiAgICAgICAgICA/IFJFVFJZQUJMRV9TVEFUVVNFUy5oYXMoZXJyb3IucmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgICAgIDogUkVUUllBQkxFX0NPREVTLmhhcyhlcnJvci5jb2RlID8/ICcnKTtcblxuICAgICAgICBjb25zdCBtc2cgPSBlcnJvci5yZXNwb25zZVxuICAgICAgICAgID8gYEFQSSBlcnJvciAke2Vycm9yLnJlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3IucmVzcG9uc2Uuc3RhdHVzVGV4dH1gXG4gICAgICAgICAgOiBlcnJvci5jb2RlIHx8IGVycm9yLm1lc3NhZ2U7XG5cbiAgICAgICAgaWYgKHJldHJ5YWJsZSAmJiBhdHRlbXB0IDwgSEFORExFUl9NQVhfUkVUUklFUykge1xuICAgICAgICAgIGxhbWJkYUxvZy5pbmZvKCdSRVRSWScsIGBSZXRyeWFibGUgZXJyb3I6ICR7bXNnfWAsIHsgYXR0ZW1wdDogYXR0ZW1wdCArIDEgfSk7XG4gICAgICAgICAgbGFzdEVycm9yID0gbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcGx1Z2luOiAke21zZ31gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvbid0IGxvZyB0aGUgdXBzdHJlYW0gYm9keSB2ZXJiYXRpbSDigJQgaXQgbWF5IGNhcnJ5IGEgc3RhY2sgdHJhY2UsXG4gICAgICAgIC8vIGEgcmVxdWVzdCBwYXlsb2FkIGVjaG8sIG9yIG90aGVyIHNlbnNpdGl2ZSBkYXRhIHdlIHNob3VsZG4ndCBlY2hvXG4gICAgICAgIC8vIGludG8gTGFtYmRhIENsb3VkV2F0Y2ggbG9ncy4gS2VlcCBqdXN0IHRoZSBoaWdoLWxldmVsIHNoYXBlLlxuICAgICAgICBjb25zdCBzYWZlQm9keSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhICYmIHR5cGVvZiBlcnJvci5yZXNwb25zZS5kYXRhID09PSAnb2JqZWN0J1xuICAgICAgICAgID8geyBjb2RlOiAoZXJyb3IucmVzcG9uc2UuZGF0YSBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSwgbWVzc2FnZTogKGVycm9yLnJlc3BvbnNlLmRhdGEgYXMgeyBtZXNzYWdlPzogc3RyaW5nIH0pLm1lc3NhZ2UgfVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBsYW1iZGFMb2cuZXJyb3IoJ0ZFVENIJywgbXNnLCB7IHJlc3BvbnNlQm9keTogc2FmZUJvZHkgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHBsdWdpbjogJHttc2d9YCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcignVW5rbm93biBlcnJvciBkdXJpbmcgcGx1Z2luIGZldGNoJyk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbGFzdEVycm9yID8/IG5ldyBFcnJvcignRmFpbGVkIHRvIGZldGNoIHBsdWdpbiBhZnRlciByZXRyaWVzJyk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBwbHVnaW4gZmlsdGVyIG9iamVjdFxuICpcbiAqIEBwYXJhbSBwbHVnaW5GaWx0ZXIgLSBGaWx0ZXIgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHRydWUgaWYgdmFsaWRcbiAqIEB0aHJvd3MgRXJyb3IgaWYgaW52YWxpZFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVBsdWdpbkZpbHRlcihwbHVnaW5GaWx0ZXI6IHVua25vd24pOiBwbHVnaW5GaWx0ZXIgaXMgUGx1Z2luRmlsdGVyIHtcbiAgaWYgKCFwbHVnaW5GaWx0ZXIgfHwgdHlwZW9mIHBsdWdpbkZpbHRlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCBwbHVnaW5GaWx0ZXInKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlciA9IHBsdWdpbkZpbHRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKCFmaWx0ZXIubmFtZSAmJiAhZmlsdGVyLmlkICYmICFmaWx0ZXIudmVyc2lvbiAmJiAhZmlsdGVyLm9yZ0lkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQbHVnaW5GaWx0ZXIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBjcml0ZXJpb24gKG5hbWUsIGlkLCB2ZXJzaW9uLCBvciBvcmdJZCknKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIExhbWJkYSBoYW5kbGVyIGZvciBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2UgdGhhdCBwZXJmb3JtcyBwbHVnaW4gbG9va3VwLlxuICpcbiAqIEF1dGhlbnRpY2F0ZXMgdXNpbmcgSldUIHRva2VuIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlciAoUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhcikuXG4gKiBDcmVhdGUgdGhlIHNlY3JldCB3aXRoOiBgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbmBcbiAqXG4gKiBSZXF1ZXN0IFR5cGVzOlxuICogLSBDcmVhdGUvVXBkYXRlOiBmZXRjaGVzIGFuZCByZXR1cm5zIHBsdWdpbiBjb25maWd1cmF0aW9uIGZyb20gQVBJXG4gKiAtIERlbGV0ZTogbm8tb3AgKGFsd2F5cyBzdWNjZWVkcylcbiAqXG4gKiBSZXNwb25zZTpcbiAqIC0gU3VjY2VzczogUmV0dXJucyBiYXNlNjQtZW5jb2RlZCBwbHVnaW4gSlNPTiBpbiBEYXRhLlJlc3VsdFZhbHVlXG4gKiAtIEZhaWx1cmU6IFJldHVybnMgZXJyb3IgbWVzc2FnZSBpbiBSZWFzb25cbiAqXG4gKiBAcGFyYW0gZXZlbnQgLSBDbG91ZEZvcm1hdGlvbiBjdXN0b20gcmVzb3VyY2UgZXZlbnRcbiAqIEByZXR1cm5zIENsb3VkRm9ybWF0aW9uIHJlc3BvbnNlXG4gKlxuICogQGV4YW1wbGVcbiAqIEN1c3RvbSBSZXNvdXJjZSBQcm9wZXJ0aWVzOlxuICogYGBganNvblxuICoge1xuICogICBcImJhc2VVUkxcIjogXCJodHRwczovL2FwaS5leGFtcGxlLmNvbVwiLFxuICogICBcInBsdWdpbkZpbHRlclwiOiB7XG4gKiAgICAgXCJuYW1lXCI6IFwibm9kZWpzLWJ1aWxkXCIsXG4gKiAgICAgXCJ2ZXJzaW9uXCI6IFwiMS4wLjBcIixcbiAqICAgICBcImlzQWN0aXZlXCI6IHRydWVcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKFxuICBldmVudDogQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50LFxuKTogUHJvbWlzZTxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U+ID0+IHtcbiAgbGFtYmRhTG9nLmluZm8oJ1NUQVJUJywgYCR7ZXZlbnQuUmVxdWVzdFR5cGV9IHJlcXVlc3QgcmVjZWl2ZWRgLCB7XG4gICAgbG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIHJlcXVlc3RJZDogZXZlbnQuUmVxdWVzdElkLFxuICAgIHN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gIH0pO1xuXG4gIGNvbnN0IGJhc2VSZXNwb25zZTogUGFydGlhbDxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U+ID0ge1xuICAgIFN0YWNrSWQ6IGV2ZW50LlN0YWNrSWQsXG4gICAgUmVxdWVzdElkOiBldmVudC5SZXF1ZXN0SWQsXG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGV2ZW50LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogZXZlbnQuTG9naWNhbFJlc291cmNlSWQsXG4gIH07XG5cbiAgdHJ5IHtcbiAgICAvLyBIYW5kbGUgRGVsZXRlIC0gYWx3YXlzIHN1Y2NlZWQgKG5vLW9wKVxuICAgIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScpIHtcbiAgICAgIGxhbWJkYUxvZy5pbmZvKCdERUxFVEUnLCAnTm8tb3AgLSByZXR1cm5pbmcgU1VDQ0VTUycpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgICBTdGF0dXM6ICdTVUNDRVNTJyxcbiAgICAgICAgUmVhc29uOiAnRGVsZXRlIGNvbXBsZXRlZCAobm8tb3ApJyxcbiAgICAgIH0gYXMgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgYW5kIHZhbGlkYXRlIHByb3BlcnRpZXNcbiAgICBjb25zdCBwbHVnaW5GaWx0ZXIgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMucGx1Z2luRmlsdGVyO1xuICAgIGNvbnN0IGJhc2VVUkwgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuYmFzZVVSTCB8fCBIQU5ETEVSX0RFRkFVTFRfQkFTRV9VUkw7XG5cbiAgICBpZiAoIWJhc2VVUkwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSAmJiAhYmFzZVVSTC5zdGFydHNXaXRoKCdodHRwOi8vJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBiYXNlVVJMOiBcIiR7YmFzZVVSTH1cIiDigJQgbXVzdCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly9gKTtcbiAgICB9XG5cbiAgICBsYW1iZGFMb2cuaW5mbygnQ09ORklHJywgJ0NvbmZpZ3VyYXRpb24gbG9hZGVkJywgeyBiYXNlVVJMLCBwbHVnaW5GaWx0ZXIgfSk7XG5cbiAgICB2YWxpZGF0ZVBsdWdpbkZpbHRlcihwbHVnaW5GaWx0ZXIpO1xuXG4gICAgLy8gR2V0IHRva2VuIGZyb20gU2VjcmV0cyBNYW5hZ2VyIGFuZCBjcmVhdGUgQVBJIGNsaWVudFxuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0VG9rZW4oKTtcbiAgICBjb25zdCBhcGkgPSBjcmVhdGUoYmFzZVVSTCwgdG9rZW4pO1xuXG4gICAgLy8gRmV0Y2ggcGx1Z2luXG4gICAgbGFtYmRhTG9nLmluZm8oJ0ZFVENIJywgJ0luaXRpYXRpbmcgcGx1Z2luIGxvb2t1cC4uLicpO1xuICAgIGNvbnN0IHBsdWdpbiA9IGF3YWl0IGZldGNoKGFwaSwgcGx1Z2luRmlsdGVyKTtcbiAgICBsYW1iZGFMb2cuaW5mbygnRkVUQ0gnLCAnUGx1Z2luIHJldHJpZXZlZCBzdWNjZXNzZnVsbHknLCB7XG4gICAgICBuYW1lOiBwbHVnaW4ubmFtZSxcbiAgICAgIHZlcnNpb246IHBsdWdpbi52ZXJzaW9uLFxuICAgICAgaWQ6IHBsdWdpbi5pZCxcbiAgICB9KTtcblxuICAgIC8vIFN0cmlwIGxhcmdlIGZpZWxkcyB0byBzdGF5IHdpdGhpbiBDbG91ZEZvcm1hdGlvbidzIDQwOTYtYnl0ZSBEYXRhIGxpbWl0LlxuICAgIC8vIENESyBjb25zdHJ1Y3RzIG9ubHkgbmVlZCB0aGUgZmllbGRzIHVzZWQgYnkgY3JlYXRlQ29kZUJ1aWxkU3RlcCgpLlxuICAgIGNvbnN0IHNsaW0gPSB7XG4gICAgICBpZDogcGx1Z2luLmlkLFxuICAgICAgbmFtZTogcGx1Z2luLm5hbWUsXG4gICAgICB2ZXJzaW9uOiBwbHVnaW4udmVyc2lvbixcbiAgICAgIHBsdWdpblR5cGU6IHBsdWdpbi5wbHVnaW5UeXBlLFxuICAgICAgY29tcHV0ZVR5cGU6IHBsdWdpbi5jb21wdXRlVHlwZSxcbiAgICAgIGNvbW1hbmRzOiBwbHVnaW4uY29tbWFuZHMsXG4gICAgICBpbnN0YWxsQ29tbWFuZHM6IHBsdWdpbi5pbnN0YWxsQ29tbWFuZHMsXG4gICAgICBlbnY6IHBsdWdpbi5lbnYsXG4gICAgICBtZXRhZGF0YTogcGx1Z2luLm1ldGFkYXRhLFxuICAgICAgcHJpbWFyeU91dHB1dERpcmVjdG9yeTogcGx1Z2luLnByaW1hcnlPdXRwdXREaXJlY3RvcnksXG4gICAgICBzZWNyZXRzOiBwbHVnaW4uc2VjcmV0cyxcbiAgICAgIGZhaWx1cmVCZWhhdmlvcjogcGx1Z2luLmZhaWx1cmVCZWhhdmlvcixcbiAgICAgIHRpbWVvdXQ6IHBsdWdpbi50aW1lb3V0LFxuICAgIH07XG5cbiAgICBjb25zdCBlbmNvZGVkID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoc2xpbSksICd1dGYtOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBsYW1iZGFMb2cuZGVidWcoJ0VOQ09ERScsICdFbmNvZGVkIHBsdWdpbiBkYXRhJywgeyBsZW5ndGg6IGVuY29kZWQubGVuZ3RoIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgIFN0YXR1czogJ1NVQ0NFU1MnLFxuICAgICAgUmVhc29uOiBgUGx1Z2luICcke3BsdWdpbi5uYW1lfScgKHYke3BsdWdpbi52ZXJzaW9ufSkgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseWAsXG4gICAgICBEYXRhOiB7XG4gICAgICAgIFJlc3VsdFZhbHVlOiBlbmNvZGVkLFxuICAgICAgfSxcbiAgICB9IGFzIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCByZWFzb24gPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmV4cGVjdGVkIGVycm9yIG9jY3VycmVkJztcbiAgICBsYW1iZGFMb2cuZXJyb3IoJ0VSUk9SJywgJ0hhbmRsZXIgZmFpbGVkJywge1xuICAgICAgcmVhc29uLFxuICAgICAgc3RhY2s6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5iYXNlUmVzcG9uc2UsXG4gICAgICBTdGF0dXM6ICdGQUlMRUQnLFxuICAgICAgUmVhc29uOiByZWFzb24sXG4gICAgfSBhcyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U7XG4gIH0gZmluYWxseSB7XG4gICAgbGFtYmRhTG9nLmluZm8oJ0VORCcsICdDdXN0b20gcmVzb3VyY2UgZXhlY3V0aW9uIGNvbXBsZXRlZCcpO1xuICB9XG59O1xuIl19
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxvb2t1cC1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hhbmRsZXJzL3BsdWdpbi1sb29rdXAtaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzlGLE9BQU8sS0FBSyxFQUFFLEVBQXNCLFVBQVUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM5RCxtRkFBbUY7QUFDbkYsbUZBQW1GO0FBQ25GLHFGQUFxRjtBQUNyRixPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsd0JBQXdCLEdBQ3pCLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEM7OztHQUdHO0FBQ0gsU0FBUyxRQUFRLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxPQUFlLEVBQUUsSUFBYztJQUMzRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RixRQUFRLEtBQUssRUFBRSxDQUFDO1FBQ2QsS0FBSyxPQUFPO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFDLE1BQU07UUFDekMsS0FBSyxPQUFPO1lBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxPQUFPO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxNQUFNO1FBQ2hGLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFNBQVMsR0FBRztJQUNoQixJQUFJLEVBQUUsQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztJQUM1RixLQUFLLEVBQUUsQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztJQUM5RixLQUFLLEVBQUUsQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztDQUMvRixDQUFDO0FBRUYsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekQsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFFN0UsU0FBUyxLQUFLLENBQUMsRUFBVTtJQUN2QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxpR0FBaUc7QUFDakcsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDO0FBQzlELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLElBQUksV0FBVyxHQUFrQixJQUFJLENBQUM7QUFFdEMsdURBQXVEO0FBQ3ZELE1BQU0sVUFBVSxzQkFBc0IsS0FBVyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUV0RTs7Ozs7O0dBTUc7QUFDSCxLQUFLLFVBQVUsUUFBUTtJQUNyQixJQUFJLFdBQVc7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUVwQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSx3Q0FBd0Msb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBRXZGLE1BQU0sTUFBTSxHQUFHLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUkscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbEcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsb0JBQW9CLFlBQVksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQTJCLENBQUM7SUFDM0Usd0VBQXdFO0lBQ3hFLCtFQUErRTtJQUMvRSxzRUFBc0U7SUFDdEUseUVBQXlFO0lBQ3pFLHVEQUF1RDtJQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxvQkFBb0IscUVBQXFFLENBQUMsQ0FBQztJQUN4SCxDQUFDO0lBRUQsV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDOUIsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsc0NBQXNDLENBQUMsQ0FBQztJQUMvRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBUyxNQUFNLENBQUMsT0FBZSxFQUFFLEtBQWE7SUFDNUMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2xCLE9BQU87UUFDUCxPQUFPLEVBQUUsa0JBQWtCO1FBQzNCLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsZUFBZSxFQUFFLFVBQVUsS0FBSyxFQUFFO1NBQ25DO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILEtBQUssVUFBVSxLQUFLLENBQUMsR0FBa0IsRUFBRSxZQUEwQjtJQUNqRSxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBRTVFLElBQUksU0FBNEIsQ0FBQztJQUVqQyxLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLElBQUksbUJBQW1CLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNoRSxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQixNQUFNLEtBQUssR0FBRyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEUsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FBVyxPQUFPLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixHQUFHLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQzlGLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBUyxxQkFBcUIsRUFBRTtnQkFDckUsTUFBTSxFQUFFLFlBQVk7YUFDckIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBRUQsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUU7Z0JBQ3JELE1BQU07Z0JBQ04sTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTthQUNaLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGNBQWMsRUFBRSxDQUFDO29CQUNsQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxpQ0FBaUMsa0JBQWtCLElBQUksQ0FBQyxDQUFDO29CQUNsRixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxrQkFBa0IsSUFBSSxDQUFDLENBQUM7Z0JBQzNFLENBQUM7Z0JBRUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVE7b0JBQzlCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7b0JBQy9DLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRTFDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRO29CQUN4QixDQUFDLENBQUMsYUFBYSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtvQkFDcEUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFFaEMsSUFBSSxTQUFTLElBQUksT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7b0JBQy9DLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLG9CQUFvQixHQUFHLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDN0UsU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUN4RCxTQUFTO2dCQUNYLENBQUM7Z0JBRUQscUVBQXFFO2dCQUNyRSxvRUFBb0U7Z0JBQ3BFLCtEQUErRDtnQkFDL0QsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRO29CQUM5RSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUEwQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUE2QixDQUFDLE9BQU8sRUFBRTtvQkFDM0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDZCxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBRUQsTUFBTSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDeEYsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLFNBQVMsSUFBSSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG9CQUFvQixDQUFDLFlBQXFCO0lBQ2pELElBQUksQ0FBQyxZQUFZLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxZQUF1QyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Qkc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUMxQixLQUF3QyxFQUNPLEVBQUU7SUFDakQsK0VBQStFO0lBQy9FLCtFQUErRTtJQUMvRSwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLDJFQUEyRTtJQUMzRSxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLG1CQUFtQixFQUFFO1FBQy9ELGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7UUFDMUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0tBQzNCLENBQUMsQ0FBQztJQUVILE1BQU0sWUFBWSxHQUFrRDtRQUNsRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1FBQzFCLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7UUFDMUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtLQUM1QyxDQUFDO0lBRUYsSUFBSSxDQUFDO1FBQ0gseUNBQXlDO1FBQ3pDLElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1lBQ3RELE9BQU87Z0JBQ0wsR0FBRyxZQUFZO2dCQUNmLE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsMEJBQTBCO2FBQ0ssQ0FBQztRQUM1QyxDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sSUFBSSx3QkFBd0IsQ0FBQztRQUU3RSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixPQUFPLHlDQUF5QyxDQUFDLENBQUM7UUFDekYsQ0FBQztRQUVELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHNCQUFzQixFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFNUUsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbkMsdURBQXVEO1FBQ3ZELE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVuQyxlQUFlO1FBQ2YsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztRQUN2RCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsK0JBQStCLEVBQUU7WUFDdkQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7U0FDZCxDQUFDLENBQUM7UUFFSCwyRUFBMkU7UUFDM0UscUVBQXFFO1FBQ3JFLE1BQU0sSUFBSSxHQUFHO1lBQ1gsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztZQUN2QixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7WUFDdkMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO1lBQ2YsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1lBQ3pCLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0I7WUFDckQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtZQUN2QyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFN0UsT0FBTztZQUNMLEdBQUcsWUFBWTtZQUNmLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxXQUFXLE1BQU0sQ0FBQyxJQUFJLE9BQU8sTUFBTSxDQUFDLE9BQU8sMEJBQTBCO1lBQzdFLElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUUsT0FBTzthQUNyQjtTQUNzQyxDQUFDO0lBQzVDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxNQUFNLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUM7UUFDcEYsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7WUFDekMsTUFBTTtZQUNOLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3hELENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxHQUFHLFlBQVk7WUFDZixNQUFNLEVBQUUsUUFBUTtZQUNoQixNQUFNLEVBQUUsTUFBTTtTQUN5QixDQUFDO0lBQzVDLENBQUM7WUFBUyxDQUFDO1FBQ1QsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUscUNBQXFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IEdldFNlY3JldFZhbHVlQ29tbWFuZCwgU2VjcmV0c01hbmFnZXJDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luRmlsdGVyLCBQbHVnaW4gfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhJztcbmltcG9ydCB0eXBlIHsgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZUV2ZW50LCBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2UgfSBmcm9tICdhd3MtbGFtYmRhJztcbmltcG9ydCBheGlvcywgeyB0eXBlIEF4aW9zSW5zdGFuY2UsIEF4aW9zRXJyb3IgfSBmcm9tICdheGlvcyc7XG4vLyBJbXBvcnQgdGhlIGRlcGVuZGVuY3ktZnJlZSBsZWFmLCBOT1QgYGFwcC1jb25maWcuanNgL2BDb3JlQ29uc3RhbnRzYDogdGhlIGxhdHRlclxuLy8gdHJhbnNpdGl2ZWx5IHB1bGxzIGluZnJhc3RydWN0dXJlLWNvbmZpZyDihpIgYXdzLWNkay1saWIsIHdoaWNoIGVzYnVpbGQgdGhlbiB0cmllc1xuLy8gdG8gYnVuZGxlIGludG8gdGhpcyBMYW1iZGEgKGh1bmRyZWRzIG9mIE1CIOKGkiBPT00vU0lHS0lMTCBkdXJpbmcgY29sZC1zdGFydCBzeW50aCkuXG5pbXBvcnQge1xuICBIQU5ETEVSX1RJTUVPVVRfTVMsXG4gIEhBTkRMRVJfTUFYX1JFVFJJRVMsXG4gIEhBTkRMRVJfUkVUUllfREVMQVlfTVMsXG4gIEhBTkRMRVJfREVGQVVMVF9CQVNFX1VSTCxcbn0gZnJvbSAnLi4vY29uZmlnL2hhbmRsZXItY29uc3RhbnRzLmpzJztcblxuLyoqXG4gKiBTdHJ1Y3R1cmVkIGxvZ2dlciBmb3IgTGFtYmRhIChvdXRwdXRzIEpTT04gdG8gQ2xvdWRXYXRjaCkuXG4gKiBEZWJ1ZyBtZXNzYWdlcyBvbmx5IGVtaXR0ZWQgd2hlbiBMT0dfTEVWRUw9ZGVidWcuXG4gKi9cbmZ1bmN0aW9uIGxvZ0VudHJ5KGxldmVsOiBzdHJpbmcsIHRhZzogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKSB7XG4gIGNvbnN0IGxpbmUgPSBKU09OLnN0cmluZ2lmeSh7IGxldmVsLCB0YWcsIG1lc3NhZ2UsIGRhdGEsIHRzOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfSk7XG4gIHN3aXRjaCAobGV2ZWwpIHtcbiAgICBjYXNlICdFUlJPUic6IGNvbnNvbGUuZXJyb3IobGluZSk7IGJyZWFrO1xuICAgIGNhc2UgJ0RFQlVHJzogaWYgKHByb2Nlc3MuZW52LkxPR19MRVZFTCA9PT0gJ2RlYnVnJykgY29uc29sZS5kZWJ1ZyhsaW5lKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogY29uc29sZS5sb2cobGluZSk7XG4gIH1cbn1cblxuY29uc3QgbGFtYmRhTG9nID0ge1xuICBpbmZvOiAodGFnOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pID0+IGxvZ0VudHJ5KCdJTkZPJywgdGFnLCBtZXNzYWdlLCBkYXRhKSxcbiAgZXJyb3I6ICh0YWc6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gbG9nRW50cnkoJ0VSUk9SJywgdGFnLCBtZXNzYWdlLCBkYXRhKSxcbiAgZGVidWc6ICh0YWc6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bikgPT4gbG9nRW50cnkoJ0RFQlVHJywgdGFnLCBtZXNzYWdlLCBkYXRhKSxcbn07XG5cbmNvbnN0IFJFVFJZQUJMRV9TVEFUVVNFUyA9IG5ldyBTZXQoWzQyOSwgNTAyLCA1MDMsIDUwNF0pO1xuY29uc3QgUkVUUllBQkxFX0NPREVTID0gbmV3IFNldChbJ0VDT05OUkVTRVQnLCAnRUNPTk5SRUZVU0VEJywgJ0VUSU1FRE9VVCddKTtcblxuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8qKiBQbGF0Zm9ybSBzZWNyZXQgbmFtZSDigJQgaW5qZWN0ZWQgYXMgUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhciBieSBQbHVnaW5Mb29rdXAgY29uc3RydWN0LiAqL1xuY29uc3QgUExBVEZPUk1fU0VDUkVUX05BTUUgPSBwcm9jZXNzLmVudi5QTEFURk9STV9TRUNSRVRfTkFNRTtcbmlmICghUExBVEZPUk1fU0VDUkVUX05BTUUpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdQTEFURk9STV9TRUNSRVRfTkFNRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZXF1aXJlZCcpO1xufVxuXG4vKiogQ2FjaGVkIHRva2VuIHRvIGF2b2lkIHJlcGVhdGVkIFNlY3JldHMgTWFuYWdlciBjYWxscyB3aXRoaW4gYSBzaW5nbGUgaW52b2NhdGlvbi4gKi9cbmxldCBjYWNoZWRUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbi8qKiBAaW50ZXJuYWwgUmVzZXQgY2FjaGVkIHRva2VuIChmb3IgdGVzdGluZyBvbmx5KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRDcmVkZW50aWFsc0NhY2hlKCk6IHZvaWQgeyBjYWNoZWRUb2tlbiA9IG51bGw7IH1cblxuLyoqXG4gKiBGZXRjaCBKV1QgdG9rZW4gZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyLlxuICogQ2FjaGVzIHRoZSByZXN1bHQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgTGFtYmRhIGV4ZWN1dGlvbiBjb250ZXh0LlxuICpcbiAqIFRoZSBzZWNyZXQgbmFtZSBpcyBzZXQgdmlhIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIgKGUuZy4gYHtwcmVmaXh9L3tvcmdJZH0vcGxhdGZvcm1gKVxuICogQ3JlYXRlIGl0IHdpdGg6IGBwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuYFxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRUb2tlbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoY2FjaGVkVG9rZW4pIHJldHVybiBjYWNoZWRUb2tlbjtcblxuICBsYW1iZGFMb2cuaW5mbygnQVVUSCcsIGBGZXRjaGluZyB0b2tlbiBmcm9tIFNlY3JldHMgTWFuYWdlcjogJHtQTEFURk9STV9TRUNSRVRfTkFNRX1gKTtcblxuICBjb25zdCBjbGllbnQgPSBuZXcgU2VjcmV0c01hbmFnZXJDbGllbnQoe30pO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBHZXRTZWNyZXRWYWx1ZUNvbW1hbmQoeyBTZWNyZXRJZDogUExBVEZPUk1fU0VDUkVUX05BTUUgfSkpO1xuXG4gIGlmICghcmVzcG9uc2UuU2VjcmV0U3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgXCIke1BMQVRGT1JNX1NFQ1JFVF9OQU1FfVwiIGlzIGVtcHR5YCk7XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlc3BvbnNlLlNlY3JldFN0cmluZykgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLy8gU2NoZW1hIGlzIGB7IHVzZXJuYW1lLCBwYXNzd29yZCwgLi4uIH1gIOKAlCB0aGUgYHBhc3N3b3JkYCBmaWVsZCBpcyB0aGVcbiAgLy8gcGxhdGZvcm0gSldULiBTYW1lIHNlY3JldCBpcyByZWFkIGJ5IENvZGVCdWlsZCdzIGBzZWNyZXRzTWFuYWdlckNyZWRlbnRpYWxzYFxuICAvLyBmb3IgcmVnaXN0cnkgcHVsbHMgKEJhc2ljIGF1dGg6IHVzZXJuYW1lOnBhc3N3b3JkID0gb3JnSWQ6SldUKS4gVGhlXG4gIC8vIHBpcGVsaW5lLWltYWdlLXJlZ2lzdHJ5IHRva2VuIGVuZHBvaW50IHZhbGlkYXRlcyB0aGUgcGFzc3dvcmQgYXMgYSBKV1RcbiAgLy8gYW5kIGlzc3VlcyBhIHJlZ2lzdHJ5IHRva2VuIHNjb3BlZCB0byB0aGUgSldUJ3Mgb3JnLlxuICBpZiAoIXBhcnNlZC5wYXNzd29yZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU2VjcmV0IFwiJHtQTEFURk9STV9TRUNSRVRfTkFNRX1cIiBtaXNzaW5nIHBhc3N3b3JkIOKAlCBydW4gXCJwaXBlbGluZS1tYW5hZ2VyIHN0b3JlLXRva2VuXCIgdG8gZ2VuZXJhdGVgKTtcbiAgfVxuXG4gIGNhY2hlZFRva2VuID0gcGFyc2VkLnBhc3N3b3JkO1xuICBsYW1iZGFMb2cuaW5mbygnQVVUSCcsICdUb2tlbiByZXRyaWV2ZWQgZnJvbSBTZWNyZXRzIE1hbmFnZXInKTtcbiAgcmV0dXJuIGNhY2hlZFRva2VuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwcmUtY29uZmlndXJlZCBBeGlvcyBpbnN0YW5jZSBmb3IgQVBJIHJlcXVlc3RzLlxuICpcbiAqIEBwYXJhbSBiYXNlVVJMIC0gQmFzZSBVUkwgb2YgdGhlIHRhcmdldCBBUElcbiAqIEBwYXJhbSB0b2tlbiAtIEpXVCB0b2tlbiBmb3IgYXV0aG9yaXphdGlvblxuICogQHJldHVybnMgQ29uZmlndXJlZCBBeGlvcyBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjcmVhdGUoYmFzZVVSTDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKTogQXhpb3NJbnN0YW5jZSB7XG4gIHJldHVybiBheGlvcy5jcmVhdGUoe1xuICAgIGJhc2VVUkwsXG4gICAgdGltZW91dDogSEFORExFUl9USU1FT1VUX01TLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIEZldGNoZXMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZXh0ZXJuYWwgQVBJIHdpdGggcmV0cnkgbG9naWMuXG4gKiBSZXRyaWVzIG9uIHRyYW5zaWVudCBmYWlsdXJlcyAoNDI5LCA1MDIsIDUwMywgNTA0LCBuZXR3b3JrIGVycm9ycylcbiAqIHdpdGggZXhwb25lbnRpYWwgYmFja29mZi5cbiAqXG4gKiBAcGFyYW0gYXBpIC0gQ29uZmlndXJlZCBBeGlvcyBpbnN0YW5jZVxuICogQHBhcmFtIHBsdWdpbkZpbHRlciAtIEZpbHRlciBjcml0ZXJpYSBmb3IgdGhlIHBsdWdpbiBsb29rdXBcbiAqIEByZXR1cm5zIFRoZSBwbHVnaW4gZGF0YSByZXR1cm5lZCBieSB0aGUgQVBJXG4gKiBAdGhyb3dzIEVycm9yIG9uIHBlcnNpc3RlbnQgZmFpbHVyZSwgdGltZW91dCBvciBpbnZhbGlkIHJlc3BvbnNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoKGFwaTogQXhpb3NJbnN0YW5jZSwgcGx1Z2luRmlsdGVyOiBQbHVnaW5GaWx0ZXIpOiBQcm9taXNlPFBsdWdpbj4ge1xuICBsYW1iZGFMb2cuZGVidWcoJ0ZFVENIJywgJ1N0YXJ0aW5nIHBsdWdpbiBmZXRjaCcsIHsgZmlsdGVyOiBwbHVnaW5GaWx0ZXIgfSk7XG5cbiAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gSEFORExFUl9NQVhfUkVUUklFUzsgYXR0ZW1wdCsrKSB7XG4gICAgaWYgKGF0dGVtcHQgPiAwKSB7XG4gICAgICBjb25zdCBkZWxheSA9IEhBTkRMRVJfUkVUUllfREVMQVlfTVMgKiBNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSk7XG4gICAgICBsYW1iZGFMb2cuaW5mbygnUkVUUlknLCBgQXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke0hBTkRMRVJfTUFYX1JFVFJJRVMgKyAxfSBhZnRlciAke2RlbGF5fW1zYCk7XG4gICAgICBhd2FpdCBzbGVlcChkZWxheSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSwgc3RhdHVzIH0gPSBhd2FpdCBhcGkucG9zdDxQbHVnaW4+KCcvYXBpL3BsdWdpbnMvbG9va3VwJywge1xuICAgICAgICBmaWx0ZXI6IHBsdWdpbkZpbHRlcixcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbXB0eSByZXNwb25zZSBkYXRhIGZyb20gQVBJJyk7XG4gICAgICB9XG5cbiAgICAgIGxhbWJkYUxvZy5pbmZvKCdGRVRDSCcsICdQbHVnaW4gZmV0Y2hlZCBzdWNjZXNzZnVsbHknLCB7XG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgcGx1Z2luOiBkYXRhLm5hbWUsXG4gICAgICAgIHZlcnNpb246IGRhdGEudmVyc2lvbixcbiAgICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09ICdFQ09OTkFCT1JURUQnKSB7XG4gICAgICAgICAgbGFtYmRhTG9nLmVycm9yKCdGRVRDSCcsIGBQbHVnaW4gbG9va3VwIHRpbWVkIG91dCBhZnRlciAke0hBTkRMRVJfVElNRU9VVF9NU31tc2ApO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGx1Z2luIGxvb2t1cCB0aW1lZCBvdXQgYWZ0ZXIgJHtIQU5ETEVSX1RJTUVPVVRfTVN9bXNgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJldHJ5YWJsZSA9IGVycm9yLnJlc3BvbnNlXG4gICAgICAgICAgPyBSRVRSWUFCTEVfU1RBVFVTRVMuaGFzKGVycm9yLnJlc3BvbnNlLnN0YXR1cylcbiAgICAgICAgICA6IFJFVFJZQUJMRV9DT0RFUy5oYXMoZXJyb3IuY29kZSA/PyAnJyk7XG5cbiAgICAgICAgY29uc3QgbXNnID0gZXJyb3IucmVzcG9uc2VcbiAgICAgICAgICA/IGBBUEkgZXJyb3IgJHtlcnJvci5yZXNwb25zZS5zdGF0dXN9OiAke2Vycm9yLnJlc3BvbnNlLnN0YXR1c1RleHR9YFxuICAgICAgICAgIDogZXJyb3IuY29kZSB8fCBlcnJvci5tZXNzYWdlO1xuXG4gICAgICAgIGlmIChyZXRyeWFibGUgJiYgYXR0ZW1wdCA8IEhBTkRMRVJfTUFYX1JFVFJJRVMpIHtcbiAgICAgICAgICBsYW1iZGFMb2cuaW5mbygnUkVUUlknLCBgUmV0cnlhYmxlIGVycm9yOiAke21zZ31gLCB7IGF0dGVtcHQ6IGF0dGVtcHQgKyAxIH0pO1xuICAgICAgICAgIGxhc3RFcnJvciA9IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHBsdWdpbjogJHttc2d9YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEb24ndCBsb2cgdGhlIHVwc3RyZWFtIGJvZHkgdmVyYmF0aW0g4oCUIGl0IG1heSBjYXJyeSBhIHN0YWNrIHRyYWNlLFxuICAgICAgICAvLyBhIHJlcXVlc3QgcGF5bG9hZCBlY2hvLCBvciBvdGhlciBzZW5zaXRpdmUgZGF0YSB3ZSBzaG91bGRuJ3QgZWNob1xuICAgICAgICAvLyBpbnRvIExhbWJkYSBDbG91ZFdhdGNoIGxvZ3MuIEtlZXAganVzdCB0aGUgaGlnaC1sZXZlbCBzaGFwZS5cbiAgICAgICAgY29uc3Qgc2FmZUJvZHkgPSBlcnJvci5yZXNwb25zZT8uZGF0YSAmJiB0eXBlb2YgZXJyb3IucmVzcG9uc2UuZGF0YSA9PT0gJ29iamVjdCdcbiAgICAgICAgICA/IHsgY29kZTogKGVycm9yLnJlc3BvbnNlLmRhdGEgYXMgeyBjb2RlPzogc3RyaW5nIH0pLmNvZGUsIG1lc3NhZ2U6IChlcnJvci5yZXNwb25zZS5kYXRhIGFzIHsgbWVzc2FnZT86IHN0cmluZyB9KS5tZXNzYWdlIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgbGFtYmRhTG9nLmVycm9yKCdGRVRDSCcsIG1zZywgeyByZXNwb25zZUJvZHk6IHNhZmVCb2R5IH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBwbHVnaW46ICR7bXNnfWApO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3IgZHVyaW5nIHBsdWdpbiBmZXRjaCcpO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IGxhc3RFcnJvciA/PyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBwbHVnaW4gYWZ0ZXIgcmV0cmllcycpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgcGx1Z2luIGZpbHRlciBvYmplY3RcbiAqXG4gKiBAcGFyYW0gcGx1Z2luRmlsdGVyIC0gRmlsdGVyIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB0cnVlIGlmIHZhbGlkXG4gKiBAdGhyb3dzIEVycm9yIGlmIGludmFsaWRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVQbHVnaW5GaWx0ZXIocGx1Z2luRmlsdGVyOiB1bmtub3duKTogcGx1Z2luRmlsdGVyIGlzIFBsdWdpbkZpbHRlciB7XG4gIGlmICghcGx1Z2luRmlsdGVyIHx8IHR5cGVvZiBwbHVnaW5GaWx0ZXIgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgcGx1Z2luRmlsdGVyJyk7XG4gIH1cblxuICBjb25zdCBmaWx0ZXIgPSBwbHVnaW5GaWx0ZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICghZmlsdGVyLm5hbWUgJiYgIWZpbHRlci5pZCAmJiAhZmlsdGVyLnZlcnNpb24gJiYgIWZpbHRlci5vcmdJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGx1Z2luRmlsdGVyIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgY3JpdGVyaW9uIChuYW1lLCBpZCwgdmVyc2lvbiwgb3Igb3JnSWQpJyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBMYW1iZGEgaGFuZGxlciBmb3IgQ2xvdWRGb3JtYXRpb24gQ3VzdG9tIFJlc291cmNlIHRoYXQgcGVyZm9ybXMgcGx1Z2luIGxvb2t1cC5cbiAqXG4gKiBBdXRoZW50aWNhdGVzIHVzaW5nIEpXVCB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIpLlxuICogQ3JlYXRlIHRoZSBzZWNyZXQgd2l0aDogYHBpcGVsaW5lLW1hbmFnZXIgc3RvcmUtdG9rZW5gXG4gKlxuICogUmVxdWVzdCBUeXBlczpcbiAqIC0gQ3JlYXRlL1VwZGF0ZTogZmV0Y2hlcyBhbmQgcmV0dXJucyBwbHVnaW4gY29uZmlndXJhdGlvbiBmcm9tIEFQSVxuICogLSBEZWxldGU6IG5vLW9wIChhbHdheXMgc3VjY2VlZHMpXG4gKlxuICogUmVzcG9uc2U6XG4gKiAtIFN1Y2Nlc3M6IFJldHVybnMgYmFzZTY0LWVuY29kZWQgcGx1Z2luIEpTT04gaW4gRGF0YS5SZXN1bHRWYWx1ZVxuICogLSBGYWlsdXJlOiBSZXR1cm5zIGVycm9yIG1lc3NhZ2UgaW4gUmVhc29uXG4gKlxuICogQHBhcmFtIGV2ZW50IC0gQ2xvdWRGb3JtYXRpb24gY3VzdG9tIHJlc291cmNlIGV2ZW50XG4gKiBAcmV0dXJucyBDbG91ZEZvcm1hdGlvbiByZXNwb25zZVxuICpcbiAqIEBleGFtcGxlXG4gKiBDdXN0b20gUmVzb3VyY2UgUHJvcGVydGllczpcbiAqIGBgYGpzb25cbiAqIHtcbiAqICAgXCJiYXNlVVJMXCI6IFwiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb21cIixcbiAqICAgXCJwbHVnaW5GaWx0ZXJcIjoge1xuICogICAgIFwibmFtZVwiOiBcIm5vZGVqcy1idWlsZFwiLFxuICogICAgIFwidmVyc2lvblwiOiBcIjEuMC4wXCIsXG4gKiAgICAgXCJpc0FjdGl2ZVwiOiB0cnVlXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jIChcbiAgZXZlbnQ6IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCxcbik6IFByb21pc2U8Q2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlPiA9PiB7XG4gIC8vIE5PVEU6IG5ldmVyIGxvZyBldmVudC5TdGFja0lkIGhlcmUg4oCUIHRoZSBDbG91ZEZvcm1hdGlvbiBTdGFjayBBUk4gZW1iZWRzIHRoZVxuICAvLyBBV1MgYWNjb3VudCBpZCAoYXJuOmF3czpjbG91ZGZvcm1hdGlvbjo8cmVnaW9uPjo8QUNDT1VOVF9JRD46c3RhY2sv4oCmKSwgd2hpY2hcbiAgLy8gbXVzdCBuZXZlciBiZSBwZXJzaXN0ZWQgdG8gQ2xvdWRXYXRjaC4gcmVxdWVzdElkICsgbG9naWNhbFJlc291cmNlSWQgYXJlXG4gIC8vIHN1ZmZpY2llbnQgZm9yIGNvcnJlbGF0aW9uLiAoU3RhY2tJZCBpcyBzdGlsbCByZXR1cm5lZCBpbiB0aGUgQ0ZOIHJlc3BvbnNlXG4gIC8vIGJvZHkgYmVsb3cg4oCUIHRoYXQgaXMgdGhlIG1hbmRhdG9yeSBDRk4gcHJvdG9jb2wgZmllbGQgYW5kIGlzIG5vdCBhIGxvZy4pXG4gIGxhbWJkYUxvZy5pbmZvKCdTVEFSVCcsIGAke2V2ZW50LlJlcXVlc3RUeXBlfSByZXF1ZXN0IHJlY2VpdmVkYCwge1xuICAgIGxvZ2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICByZXF1ZXN0SWQ6IGV2ZW50LlJlcXVlc3RJZCxcbiAgfSk7XG5cbiAgY29uc3QgYmFzZVJlc3BvbnNlOiBQYXJ0aWFsPENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZT4gPSB7XG4gICAgU3RhY2tJZDogZXZlbnQuU3RhY2tJZCxcbiAgICBSZXF1ZXN0SWQ6IGV2ZW50LlJlcXVlc3RJZCxcbiAgICBMb2dpY2FsUmVzb3VyY2VJZDogZXZlbnQuTG9naWNhbFJlc291cmNlSWQsXG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgfTtcblxuICB0cnkge1xuICAgIC8vIEhhbmRsZSBEZWxldGUgLSBhbHdheXMgc3VjY2VlZCAobm8tb3ApXG4gICAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSAnRGVsZXRlJykge1xuICAgICAgbGFtYmRhTG9nLmluZm8oJ0RFTEVURScsICdOby1vcCAtIHJldHVybmluZyBTVUNDRVNTJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlUmVzcG9uc2UsXG4gICAgICAgIFN0YXR1czogJ1NVQ0NFU1MnLFxuICAgICAgICBSZWFzb246ICdEZWxldGUgY29tcGxldGVkIChuby1vcCknLFxuICAgICAgfSBhcyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlUmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCBhbmQgdmFsaWRhdGUgcHJvcGVydGllc1xuICAgIGNvbnN0IHBsdWdpbkZpbHRlciA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5wbHVnaW5GaWx0ZXI7XG4gICAgY29uc3QgYmFzZVVSTCA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5iYXNlVVJMIHx8IEhBTkRMRVJfREVGQVVMVF9CQVNFX1VSTDtcblxuICAgIGlmICghYmFzZVVSTC5zdGFydHNXaXRoKCdodHRwczovLycpICYmICFiYXNlVVJMLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJhc2VVUkw6IFwiJHtiYXNlVVJMfVwiIOKAlCBtdXN0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovL2ApO1xuICAgIH1cblxuICAgIGxhbWJkYUxvZy5pbmZvKCdDT05GSUcnLCAnQ29uZmlndXJhdGlvbiBsb2FkZWQnLCB7IGJhc2VVUkwsIHBsdWdpbkZpbHRlciB9KTtcblxuICAgIHZhbGlkYXRlUGx1Z2luRmlsdGVyKHBsdWdpbkZpbHRlcik7XG5cbiAgICAvLyBHZXQgdG9rZW4gZnJvbSBTZWNyZXRzIE1hbmFnZXIgYW5kIGNyZWF0ZSBBUEkgY2xpZW50XG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRUb2tlbigpO1xuICAgIGNvbnN0IGFwaSA9IGNyZWF0ZShiYXNlVVJMLCB0b2tlbik7XG5cbiAgICAvLyBGZXRjaCBwbHVnaW5cbiAgICBsYW1iZGFMb2cuaW5mbygnRkVUQ0gnLCAnSW5pdGlhdGluZyBwbHVnaW4gbG9va3VwLi4uJyk7XG4gICAgY29uc3QgcGx1Z2luID0gYXdhaXQgZmV0Y2goYXBpLCBwbHVnaW5GaWx0ZXIpO1xuICAgIGxhbWJkYUxvZy5pbmZvKCdGRVRDSCcsICdQbHVnaW4gcmV0cmlldmVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgIG5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgdmVyc2lvbjogcGx1Z2luLnZlcnNpb24sXG4gICAgICBpZDogcGx1Z2luLmlkLFxuICAgIH0pO1xuXG4gICAgLy8gU3RyaXAgbGFyZ2UgZmllbGRzIHRvIHN0YXkgd2l0aGluIENsb3VkRm9ybWF0aW9uJ3MgNDA5Ni1ieXRlIERhdGEgbGltaXQuXG4gICAgLy8gQ0RLIGNvbnN0cnVjdHMgb25seSBuZWVkIHRoZSBmaWVsZHMgdXNlZCBieSBjcmVhdGVDb2RlQnVpbGRTdGVwKCkuXG4gICAgY29uc3Qgc2xpbSA9IHtcbiAgICAgIGlkOiBwbHVnaW4uaWQsXG4gICAgICBuYW1lOiBwbHVnaW4ubmFtZSxcbiAgICAgIHZlcnNpb246IHBsdWdpbi52ZXJzaW9uLFxuICAgICAgcGx1Z2luVHlwZTogcGx1Z2luLnBsdWdpblR5cGUsXG4gICAgICBjb21wdXRlVHlwZTogcGx1Z2luLmNvbXB1dGVUeXBlLFxuICAgICAgY29tbWFuZHM6IHBsdWdpbi5jb21tYW5kcyxcbiAgICAgIGluc3RhbGxDb21tYW5kczogcGx1Z2luLmluc3RhbGxDb21tYW5kcyxcbiAgICAgIGVudjogcGx1Z2luLmVudixcbiAgICAgIG1ldGFkYXRhOiBwbHVnaW4ubWV0YWRhdGEsXG4gICAgICBwcmltYXJ5T3V0cHV0RGlyZWN0b3J5OiBwbHVnaW4ucHJpbWFyeU91dHB1dERpcmVjdG9yeSxcbiAgICAgIHNlY3JldHM6IHBsdWdpbi5zZWNyZXRzLFxuICAgICAgZmFpbHVyZUJlaGF2aW9yOiBwbHVnaW4uZmFpbHVyZUJlaGF2aW9yLFxuICAgICAgdGltZW91dDogcGx1Z2luLnRpbWVvdXQsXG4gICAgfTtcblxuICAgIGNvbnN0IGVuY29kZWQgPSBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShzbGltKSwgJ3V0Zi04JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGxhbWJkYUxvZy5kZWJ1ZygnRU5DT0RFJywgJ0VuY29kZWQgcGx1Z2luIGRhdGEnLCB7IGxlbmd0aDogZW5jb2RlZC5sZW5ndGggfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgU3RhdHVzOiAnU1VDQ0VTUycsXG4gICAgICBSZWFzb246IGBQbHVnaW4gJyR7cGx1Z2luLm5hbWV9JyAodiR7cGx1Z2luLnZlcnNpb259KSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5YCxcbiAgICAgIERhdGE6IHtcbiAgICAgICAgUmVzdWx0VmFsdWU6IGVuY29kZWQsXG4gICAgICB9LFxuICAgIH0gYXMgQ2xvdWRGb3JtYXRpb25DdXN0b21SZXNvdXJjZVJlc3BvbnNlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IHJlYXNvbiA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1VuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQnO1xuICAgIGxhbWJkYUxvZy5lcnJvcignRVJST1InLCAnSGFuZGxlciBmYWlsZWQnLCB7XG4gICAgICByZWFzb24sXG4gICAgICBzdGFjazogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLnN0YWNrIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgIFN0YXR1czogJ0ZBSUxFRCcsXG4gICAgICBSZWFzb246IHJlYXNvbixcbiAgICB9IGFzIENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VSZXNwb25zZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBsYW1iZGFMb2cuaW5mbygnRU5EJywgJ0N1c3RvbSByZXNvdXJjZSBleGVjdXRpb24gY29tcGxldGVkJyk7XG4gIH1cbn07XG4iXX0=