@pipeline-builder/pipeline-core 3.4.108 → 3.4.110
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.
|
@@ -234,6 +234,11 @@ function loadBundles() {
|
|
|
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
|
+
// DORA / advanced delivery analytics. INCLUDED in Enterprise (TIER_FEATURES),
|
|
238
|
+
// so the add-on is offered to every other tier (developer/pro/team). Priced
|
|
239
|
+
// between Audit Log ($20) and SSO ($40) — a higher-value, actively-used
|
|
240
|
+
// analytics surface than the audit log, but below the SSO enterprise gate.
|
|
241
|
+
b('advanced_reporting', 'Advanced Reporting (DORA)', 'DORA delivery metrics — deployment frequency, change failure rate, MTTR, lead-time proxy, performance bands + trend', {}, 3000, ['developer', 'pro', 'team'], 8, { features: ['advanced_reporting'], stackable: false }),
|
|
237
242
|
];
|
|
238
243
|
}
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2JpbGxpbmctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBd0MsTUFBTSw0QkFBNEIsQ0FBQztBQU8xSixnRkFBZ0Y7QUFDaEYsOEVBQThFO0FBQzlFLGtEQUFrRDtBQUNsRCxrRkFBa0Y7QUFDbEYsaURBQWlEO0FBQ2pELHdFQUF3RTtBQUN4RSwyRUFBMkU7QUFDM0UsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSxpRkFBaUY7QUFDakYsNEVBQTRFO0FBRTVFLHdGQUF3RjtBQUN4RixTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsRUFBRSxNQUFjO0lBQ2hFLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sYUFBYSxNQUFNLEVBQUUsQ0FBQztJQUMvQyxPQUFPLFNBQVMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JGLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFlLEVBQUUsS0FBZTtJQUN2RCxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25DLE9BQU87UUFDTCxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ25DLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUs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QUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztLQUNqSSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIExvYWQgYmlsbGluZyBwbGFuIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogUGVyLXBsYW4gcHJpY2VzIGFyZSB0aGUgbW9zdCBsaWtlbHkgdG8gdmFyeSBiZXR3ZWVuIGVudmlyb25tZW50czpcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9NT05USExZIC8gQklMTElOR19QTEFOX3tUSUVSfV9BTk5VQUwgIChpbiBjZW50cylcbiAqXG4gKiBPcHRpb25hbCBvdmVycmlkZXMgZm9yIGRlc2NyaXB0aW9ucyBhbmQgZmVhdHVyZXM6XG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fTkFNRSAgICAgICAgICAocGxhaW4gc3RyaW5nLCBkaXNwbGF5IG5hbWUpXG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fREVTQ1JJUFRJT04gICAocGxhaW4gc3RyaW5nKVxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X0ZFQVRVUkVTICAgICAgKEpTT04gc3RyaW5nIGFycmF5KVxuICpcbiAqIEFsbCBkZWZhdWx0cyBtYXRjaCB0aGUgb3JpZ2luYWwgaGFyZGNvZGVkIHNlZWQgZGF0YSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuaW1wb3J0IHsgUVVPVEFfVElFUlMsIFRJRVJfRkVBVFVSRVMsIEZFQVRVUkVfTUVUQURBVEEsIFZBTElEX1RJRVJTLCBpc1ZhbGlkVGllciwgdHlwZSBRdW90YVRpZXIsIHR5cGUgUXVvdGFUaWVyTGltaXRzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBCaWxsaW5nQ29uZmlnLCBCaWxsaW5nUGxhbkNvbmZpZywgQnVuZGxlQ29uZmlnIH0gZnJvbSAnLi9jb25maWctdHlwZXMuanMnO1xuXG4vKiogUGVyLXVuaXQgcXVvdGEgZGVsdGFzIGZvciBhIGJ1bmRsZSDigJQga2V5cyBjb25zdHJhaW5lZCB0byByZWFsIHF1b3RhIGZpZWxkc1xuICogIChtYXRjaGVzIGBCdW5kbGVDb25maWcuZ3JhbnRzYCksIHNvIGEgdHlwbydkIGRpbWVuc2lvbiBmYWlscyB0byBjb21waWxlLiAqL1xudHlwZSBHcmFudE1hcCA9IFBhcnRpYWw8UmVjb3JkPGtleW9mIFF1b3RhVGllckxpbWl0cywgbnVtYmVyPj47XG5cbi8vIC0tIERlZmF1bHQgZmVhdHVyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaGUgbWFya2V0ZWQgZmVhdHVyZSBsaXN0IGlzIGJ1aWx0IGZyb20gdHdvIGRlcml2ZWQgc291cmNlcyBzbyBpdCBjYW4gbmV2ZXJcbi8vIGRyaWZ0IGZyb20gd2hhdCB0aGUgcGxhdGZvcm0gYWN0dWFsbHkgZW5mb3JjZXM6XG4vLyAgIDEuIExJTUlUIGxpbmVzIGRlcml2ZWQgZnJvbSBlYWNoIHRpZXIncyBFRkZFQ1RJVkUgcXVvdGEgbGltaXRzIChRVU9UQV9USUVSUyksXG4vLyAgICAgIHNvIHRoZXkgdHJhY2sgUVVPVEFfVElFUl8qIGVudiBvdmVycmlkZXMuXG4vLyAgIDIuIElOQ0xVREVELUZFQVRVUkUgbGluZXMgZGVyaXZlZCBmcm9tIHRoZSBlbmZvcmNlZCBlbnRpdGxlbWVudCBzZXRcbi8vICAgICAgKFRJRVJfRkVBVFVSRVMpIHZpYSBGRUFUVVJFX01FVEFEQVRBIGxhYmVscyDigJQgc28gYW4gYWR2ZXJ0aXNlZCBiYXNlXG4vLyAgICAgIGZlYXR1cmUgaXMgYWx3YXlzIG9uZSBgcmVxdWlyZUZlYXR1cmVgIGFjdHVhbGx5IGdyYW50cyBmb3IgdGhhdCB0aWVyLlxuLy8gT25seSBnZW51aW5lbHkgbm9uLWdhdGVkIG1hcmtldGluZyBjb3B5IChzdXBwb3J0IGxldmVsLCBkYXNoYm9hcmRzLCBSQkFDKSBpc1xuLy8gaGFuZC1hdXRob3JlZCwgcGFzc2VkIGFzIGBwZXJrc2AuIFB1cmNoYXNhYmxlIGFkZC1vbnMgKHNzbywgYXVkaXRfbG9nKSBhcmUgTk9UXG4vLyBsaXN0ZWQgYXMgYmFzZSBwZXJrcyBoZXJlIOKAlCB0aGV5IGFyZSBzb2xkIGFzIGJ1bmRsZXMgKHNlZSBsb2FkQnVuZGxlcygpKS5cblxuLyoqIFwiVXAgdG8gTiBwbHVnaW5zXCIgLyBcIlVubGltaXRlZCBwbHVnaW5zXCIgZnJvbSBhbiBlZmZlY3RpdmUgbGltaXQgKC0xID0gdW5saW1pdGVkKS4gKi9cbmZ1bmN0aW9uIGxpbWl0TGluZShsaW1pdDogbnVtYmVyLCBzaW5ndWxhcjogc3RyaW5nLCBwbHVyYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChsaW1pdCA9PT0gLTEpIHJldHVybiBgVW5saW1pdGVkICR7cGx1cmFsfWA7XG4gIHJldHVybiBgVXAgdG8gJHtsaW1pdC50b0xvY2FsZVN0cmluZygnZW4tVVMnKX0gJHtsaW1pdCA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsfWA7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGZWF0dXJlcyh0aWVyOiBRdW90YVRpZXIsIHBlcmtzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgbCA9IFFVT1RBX1RJRVJTW3RpZXJdLmxpbWl0cztcbiAgcmV0dXJuIFtcbiAgICBsaW1pdExpbmUobC5zZWF0cywgJ3NlYXQnLCAnc2VhdHMnKSxcbiAgICBsaW1pdExpbmUobC5wbHVnaW5zLCAncGx1Z2luJywgJ3BsdWdpbnMnKSxcbiAgICBsaW1pdExpbmUobC5waXBlbGluZXMsICdwaXBlbGluZScsICdwaXBlbGluZXMnKSxcbiAgICBsaW1pdExpbmUobC5hcGlDYWxscywgJ0FQSSBjYWxsJywgJ0FQSSBjYWxscycpLFxuICAgIGxpbWl0TGluZShsLmFpQ2FsbHMsICdBSSBjYWxsJywgJ0FJIGNhbGxzJyksXG4gICAgLy8gRW5mb3JjZWQgZW50aXRsZW1lbnRzIOKGkiBjdXN0b21lci1mYWNpbmcgbGFiZWxzIChzaW5nbGUgc291cmNlIG9mIHRydXRoKS5cbiAgICAuLi5USUVSX0ZFQVRVUkVTW3RpZXJdLm1hcCgoZikgPT4gRkVBVFVSRV9NRVRBREFUQVtmXS5sYWJlbCksXG4gICAgLi4ucGVya3MsXG4gIF07XG59XG5cbi8vIE5vdGU6IGBwZXJrc2AgYXJlIG5vbi1nYXRlZCBtYXJrZXRpbmcgbGluZXMgb25seS4gRW5mb3JjZWQgZmVhdHVyZXMgKGluY2wuXG4vLyBQcmlvcml0eSBTdXBwb3J0IGZvciBwcm8vdGVhbS9lbnRlcnByaXNlKSBjb21lIGZyb20gVElFUl9GRUFUVVJFUyBhYm92ZS5cbmNvbnN0IERFRkFVTFRfREVWRUxPUEVSX0ZFQVRVUkVTID0gZGVmYXVsdEZlYXR1cmVzKCdkZXZlbG9wZXInLCBbJ0NvbW11bml0eSBzdXBwb3J0J10pO1xuY29uc3QgREVGQVVMVF9QUk9fRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ3BybycsIFsnUmVwb3J0aW5nIGRhc2hib2FyZCddKTtcbmNvbnN0IERFRkFVTFRfVEVBTV9GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygndGVhbScsIFsnUkJBQyAmIHRlYW0gcm9sZXMnXSk7XG5jb25zdCBERUZBVUxUX0VOVEVSUFJJU0VfRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ2VudGVycHJpc2UnLCBbXG4gICdSQkFDICYgdGVhbSByb2xlcycsICdSZXBvcnRpbmcgZGFzaGJvYXJkJyxcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGEgcHJpY2UgKGluIGNlbnRzKSBmcm9tIGFuIGVudiB2YXIsIGZhbGxpbmcgYmFjayB0byB0aGUgZGVmYXVsdCB3aGVuXG4gKiB1bnNldCBPUiBtYWxmb3JtZWQuIEEgTmFOIChlLmcuIGBCSUxMSU5HX1BMQU5fUFJPX01PTlRITFk9YWJjYCkgbXVzdCBuZXZlclxuICogZmxvdyBpbnRvIHRoZSByZXR1cm5lZCBjb25maWcgYXMgYSBwcmljZS5cbiAqL1xuZnVuY3Rpb24gZW52Q2VudHMoZW52VmFyOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAoZW52VmFyID09PSB1bmRlZmluZWQgfHwgZW52VmFyID09PSAnJykgcmV0dXJuIGZhbGxiYWNrO1xuICBjb25zdCBuID0gcGFyc2VJbnQoZW52VmFyLCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBmYWxsYmFjayA6IG47XG59XG5cbi8qKlxuICogUGFyc2UgYSBKU09OIGFycmF5IGZyb20gYW4gZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRmVhdHVyZXMoZW52VmFyOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZhbGxiYWNrOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgaWYgKCFlbnZWYXIpIHJldHVybiBmYWxsYmFjaztcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGVudlZhcik7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyc2VkKSA/IHBhcnNlZCA6IGZhbGxiYWNrO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2FkIGJpbGxpbmcgcGxhbiBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEJpbGxpbmdDb25maWcoKTogQmlsbGluZ0NvbmZpZyB7XG4gIC8vIEtleWVkIGJ5IFF1b3RhVGllciBzbyB0aGUgY29tcGlsZXIgZm9yY2VzIGEgcGxhbiBmb3IgRVZFUlkgdGllciDigJQgYWRkaW5nIGFcbiAgLy8gNXRoIFF1b3RhVGllciB3aXRob3V0IGEgcGxhbiBoZXJlIGlzIG5vdyBhIGNvbXBpbGUgZXJyb3IgKHdhcyBhIGhhbmQta2VwdFxuICAvLyA0LWVsZW1lbnQgYXJyYXkgdGhhdCBzaWxlbnRseSBzaGlwcGVkIG5vIHBsYW4vcHJpY2UgZm9yIGEgbmV3IHRpZXIpLiBUaGVcbiAgLy8gcHVibGljIGBjb25maWcucGxhbnNgIHNoYXBlIHN0YXlzIGFuIGFycmF5LCBkZXJpdmVkIGJlbG93IGluIFZBTElEX1RJRVJTXG4gIC8vIG9yZGVyIChkZXZlbG9wZXIsIHBybywgdGVhbSwgZW50ZXJwcmlzZSkgdG8gcHJlc2VydmUgY29uc3VtZXIgb3JkZXJpbmcuXG4gIGNvbnN0IHBsYW5CeVRpZXI6IFJlY29yZDxRdW90YVRpZXIsIEJpbGxpbmdQbGFuQ29uZmlnPiA9IHtcbiAgICBkZXZlbG9wZXI6IHtcbiAgICAgIGlkOiAnZGV2ZWxvcGVyJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfTkFNRSB8fCAnRGV2ZWxvcGVyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdGcmVlIHN0YXJ0ZXIgdGllciBmb3IgaW5kaXZpZHVhbCBkZXZlbG9wZXJzJyxcbiAgICAgIHRpZXI6ICdkZXZlbG9wZXInLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfTU9OVEhMWSwgMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9BTk5VQUwsIDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX0RFVkVMT1BFUl9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogdHJ1ZSxcbiAgICAgIHNvcnRPcmRlcjogMCxcbiAgICB9LFxuICAgIHBybzoge1xuICAgICAgaWQ6ICdwcm8nLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19OQU1FIHx8ICdQcm8nLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ0ZvciBpbmRpdmlkdWFsIHBvd2VyIHVzZXJzIGFuZCBwcm9kdWN0aW9uIHdvcmtsb2FkcycsXG4gICAgICB0aWVyOiAncHJvJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fUFJPX01PTlRITFksIDQ5MDApLFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fQU5OVUFMLCA0OTAwMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfUFJPX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIHNvcnRPcmRlcjogMSxcbiAgICB9LFxuICAgIHRlYW06IHtcbiAgICAgIGlkOiAndGVhbScsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9OQU1FIHx8ICdUZWFtJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9ERVNDUklQVElPTlxuICAgICAgICB8fCAnRm9yIHRlYW1zIGNvbGxhYm9yYXRpbmcgb24gc2hhcmVkIHBpcGVsaW5lcycsXG4gICAgICB0aWVyOiAndGVhbScsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fTU9OVEhMWSwgMTQ5MDApLFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX0FOTlVBTCwgMTQ5MDAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfVEVBTV9GRUFUVVJFUyxcbiAgICAgICksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIGlzRGVmYXVsdDogZmFsc2UsXG4gICAgICBzb3J0T3JkZXI6IDIsXG4gICAgfSxcbiAgICBlbnRlcnByaXNlOiB7XG4gICAgICBpZDogJ2VudGVycHJpc2UnLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfTkFNRSB8fCAnRW50ZXJwcmlzZScsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ09yZy13aWRlIHNjYWxlIHdpdGggdW5saW1pdGVkIHNlYXRzIGFuZCBwcmlvcml0eSBzdXBwb3J0JyxcbiAgICAgIHRpZXI6ICdlbnRlcnByaXNlJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9NT05USExZLCAzOTkwMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0VOVEVSUFJJU0VfQU5OVUFMLCAzOTkwMDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9FTlRFUlBSSVNFX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIHNvcnRPcmRlcjogMyxcbiAgICB9LFxuICB9O1xuXG4gIC8vIERlcml2ZSB0aGUgYXJyYXkgY29uc3VtZXJzIHJlYWQgKGBjb25maWcucGxhbnNgKSBpbiBjYW5vbmljYWwgdGllciBvcmRlci5cbiAgY29uc3QgcGxhbnM6IEJpbGxpbmdQbGFuQ29uZmlnW10gPSBWQUxJRF9USUVSUy5tYXAoKHRpZXIpID0+IHBsYW5CeVRpZXJbdGllcl0pO1xuXG4gIHJldHVybiB7IHBsYW5zLCBidW5kbGVzOiBsb2FkQnVuZGxlcygpIH07XG59XG5cbmNvbnN0IEJVTkRMRV9HQiA9IDEwMjQgKiAxMDI0ICogMTAyNDtcblxuLyoqXG4gKiBBcHBseSBhIHBlci1idW5kbGUgZ3JhbnQgb3ZlcnJpZGUuIEVhY2ggc3RhY2thYmxlIHBhY2sgZ3JhbnRzIGV4YWN0bHkgb25lXG4gKiBxdW90YSBkaW1lbnNpb24sIHNvIGBCSUxMSU5HX0JVTkRMRV88SUQ+X0dSQU5UYCByZXR1bmVzIHRoYXQgYW1vdW50IChlLmcuIG1ha2VcbiAqIHRoZSBTZWF0IFBhY2sgZ3JhbnQgKzEwIGluc3RlYWQgb2YgKzUpIOKAlCBwYXJhbGxlbCB0byB0aGUgcHJpY2Ugb3ZlcnJpZGVzLlxuICogSWdub3JlZCBmb3IgbXVsdGktZGltZW5zaW9uIG9yIGZlYXR1cmUtb25seSAoZW1wdHktZ3JhbnQpIGJ1bmRsZXMsIGFuZCBmb3IgYVxuICogbWFsZm9ybWVkL25lZ2F0aXZlIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhcHBseUdyYW50T3ZlcnJpZGUoaWQ6IHN0cmluZywgZ3JhbnRzOiBHcmFudE1hcCk6IEdyYW50TWFwIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbYEJJTExJTkdfQlVORExFXyR7aWQudG9VcHBlckNhc2UoKX1fR1JBTlRgXTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGdyYW50cyk7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnIHx8IGtleXMubGVuZ3RoICE9PSAxKSByZXR1cm4gZ3JhbnRzO1xuICBjb25zdCBuID0gcGFyc2VJbnQocmF3LCAxMCk7XG4gIGlmIChOdW1iZXIuaXNOYU4obikgfHwgbiA8IDApIHJldHVybiBncmFudHM7XG4gIC8vIGBrZXlzYCBjYW1lIGZyb20gYSBHcmFudE1hcCwgc28gaXRzIHNvbGUga2V5IGlzIGEgUXVvdGFUaWVyTGltaXRzIGZpZWxkLlxuICByZXR1cm4geyBba2V5c1swXSBhcyBrZXlvZiBRdW90YVRpZXJMaW1pdHNdOiBuIH07XG59XG5cbi8qKlxuICogQXBwbHkgYSBwZXItYnVuZGxlIHRpZXItYXZhaWxhYmlsaXR5IG92ZXJyaWRlLiBgQklMTElOR19CVU5ETEVfPElEPl9USUVSU2AgaXMgYVxuICogSlNPTiBhcnJheSBvZiB0aWVyIElEcyB0aGF0IG1heSBwdXJjaGFzZSB0aGUgYnVuZGxlIChlLmcuIGBbXCJkZXZlbG9wZXJcIixcInByb1wiXWApXG4gKiDigJQgcGFyYWxsZWwgdG8gdGhlIHByaWNlL2dyYW50IG92ZXJyaWRlcy4gRmFsbHMgYmFjayB0byBgZGVmYXVsdFRpZXJzYCB3aGVuXG4gKiB1bnNldCwgbWFsZm9ybWVkLCBlbXB0eSwgb3IgY29udGFpbmluZyBhbiB1bmtub3duIHRpZXIuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5VGllcnNPdmVycmlkZShpZDogc3RyaW5nLCBkZWZhdWx0VGllcnM6IFF1b3RhVGllcltdKTogUXVvdGFUaWVyW10ge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9USUVSU2BdO1xuICBpZiAoIXJhdykgcmV0dXJuIGRlZmF1bHRUaWVycztcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcnNlZCkgfHwgcGFyc2VkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRlZmF1bHRUaWVycztcbiAgICBjb25zdCB2YWxpZCA9IHBhcnNlZC5maWx0ZXIoKHQpOiB0IGlzIFF1b3RhVGllciA9PiB0eXBlb2YgdCA9PT0gJ3N0cmluZycgJiYgaXNWYWxpZFRpZXIodCkpO1xuICAgIHJldHVybiB2YWxpZC5sZW5ndGggPT09IHBhcnNlZC5sZW5ndGggPyB2YWxpZCA6IGRlZmF1bHRUaWVycztcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGRlZmF1bHRUaWVycztcbiAgfVxufVxuXG4vKipcbiAqIFB1cmNoYXNhYmxlIGFkZC1vbiBidW5kbGVzIChkb2NzL2JpbGxpbmctYnVuZGxlcy5tZCDCpzMpLiBHcmFudHMgYXJlIHBlci11bml0XG4gKiBkZWx0YXMgb24gUXVvdGFUaWVyTGltaXRzOyBwcmljZXMgKGNlbnRzLCBgQklMTElOR19CVU5ETEVfPElEPl9NT05USExZYCAvXG4gKiBgX0FOTlVBTGApLCB0aGUgc2luZ2xlLWRpbWVuc2lvbiBncmFudCBhbW91bnQgKGBCSUxMSU5HX0JVTkRMRV88SUQ+X0dSQU5UYCksXG4gKiBhbmQgdGhlIHB1cmNoYXNhYmxlLXRpZXIgbGlzdCAoYEJJTExJTkdfQlVORExFXzxJRD5fVElFUlNgKSBhcmUgYWxsXG4gKiBlbnYtb3ZlcnJpZGFibGUuIEFubnVhbCDiiYggMTDDlyBtb250aGx5LlxuICovXG5mdW5jdGlvbiBsb2FkQnVuZGxlcygpOiBCdW5kbGVDb25maWdbXSB7XG4gIGNvbnN0IGIgPSAoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICBncmFudHM6IEdyYW50TWFwLFxuICAgIG1vbnRobHk6IG51bWJlcixcbiAgICBhdmFpbGFibGVGb3JUaWVyczogUXVvdGFUaWVyW10sXG4gICAgc29ydE9yZGVyOiBudW1iZXIsXG4gICAgZXh0cmE6IHsgZmVhdHVyZXM/OiBzdHJpbmdbXTsgc3RhY2thYmxlPzogYm9vbGVhbiB9ID0ge30sXG4gICk6IEJ1bmRsZUNvbmZpZyA9PiB7XG4gICAgLy8gUmVzb2x2ZSBtb250aGx5IGZpcnN0IHNvIHRoZSBhbm51YWwgZmFsbGJhY2sgdHJhY2tzIGEgYF9NT05USExZYCBvdmVycmlkZVxuICAgIC8vIChhbm51YWwg4omIIDEww5cgdGhlICplZmZlY3RpdmUqIG1vbnRobHksIG5vdCB0aGUgaGFyZGNvZGVkIGRlZmF1bHQpLlxuICAgIGNvbnN0IHJlc29sdmVkTW9udGhseSA9IGVudkNlbnRzKHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X01PTlRITFlgXSwgbW9udGhseSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgbmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZ3JhbnRzOiBhcHBseUdyYW50T3ZlcnJpZGUoaWQsIGdyYW50cyksXG4gICAgICAuLi4oZXh0cmEuZmVhdHVyZXMgPyB7IGZlYXR1cmVzOiBleHRyYS5mZWF0dXJlcyB9IDoge30pLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IHJlc29sdmVkTW9udGhseSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9BTk5VQUxgXSwgcmVzb2x2ZWRNb250aGx5ICogMTApLFxuICAgICAgfSxcbiAgICAgIHN0YWNrYWJsZTogZXh0cmEuc3RhY2thYmxlID8/IHRydWUsXG4gICAgICBhdmFpbGFibGVGb3JUaWVyczogYXBwbHlUaWVyc092ZXJyaWRlKGlkLCBhdmFpbGFibGVGb3JUaWVycyksXG4gICAgICBpc0FjdGl2ZTogdHJ1ZSxcbiAgICAgIHNvcnRPcmRlcixcbiAgICB9O1xuICB9O1xuXG4gIGNvbnN0IEFMTDogUXVvdGFUaWVyW10gPSBbJ2RldmVsb3BlcicsICdwcm8nLCAndGVhbScsICdlbnRlcnByaXNlJ107XG4gIHJldHVybiBbXG4gICAgLy8gQ2FwYWNpdHkgcGFja3MgKHNlYXRzL3BpcGVsaW5lcy9wbHVnaW5zKSBhcmUgYXZhaWxhYmxlIG9uIEVWRVJZIHRpZXIgc28gYW55XG4gICAgLy8gYWNjb3VudCDigJQgaW5jbHVkaW5nIGZyZWUgKGRldmVsb3Blcikg4oCUIGNhbiBleHBhbmQgaW4gcGxhY2UuIEZlYXR1cmUgYnVuZGxlc1xuICAgIC8vIChhdWRpdF9sb2cvc3NvKSBhbmQgcmF0ZSBwYWNrcyBzdGF5IHRpZXItc2NvcGVkIGJ5IGRlZmF1bHQuXG4gICAgYignc2VhdF9wYWNrJywgJ1NlYXQgUGFjayAoKzUpJywgJzUgYWRkaXRpb25hbCBtZW1iZXIgc2VhdHMnLCB7IHNlYXRzOiA1IH0sIDI1MDAsIEFMTCwgMCksXG4gICAgYigncGlwZWxpbmVfcGFjaycsICdQaXBlbGluZSBQYWNrICgrMTApJywgJzEwIGFkZGl0aW9uYWwgcGlwZWxpbmVzJywgeyBwaXBlbGluZXM6IDEwIH0sIDE1MDAsIEFMTCwgMSksXG4gICAgYigncGx1Z2luX3BhY2snLCAnUGx1Z2luIFBhY2sgKCsxMDApJywgJzEwMCBhZGRpdGlvbmFsIHBsdWdpbnMnLCB7IHBsdWdpbnM6IDEwMCB9LCAxNTAwLCBBTEwsIDIpLFxuICAgIGIoJ2FwaV9wYWNrJywgJ0FQSSBQYWNrICgrMU0pJywgJzEsMDAwLDAwMCBhZGRpdGlvbmFsIEFQSSBjYWxscyAvIHBlcmlvZCcsIHsgYXBpQ2FsbHM6IDFfMDAwXzAwMCB9LCAyMDAwLCBBTEwsIDMpLFxuICAgIGIoJ2FpX3BhY2snLCAnQUkgUGFjayAoKzVrKScsICc1LDAwMCBhZGRpdGlvbmFsIEFJIGNhbGxzIC8gcGVyaW9kJywgeyBhaUNhbGxzOiA1MDAwIH0sIDc1MDAsIEFMTCwgNCksXG4gICAgYignc3RvcmFnZV9wYWNrJywgJ1N0b3JhZ2UgUGFjayAoKzUwIEdCKScsICc1MCBHQiBhZGRpdGlvbmFsIHJlZ2lzdHJ5IHN0b3JhZ2UnLCB7IHN0b3JhZ2VCeXRlczogNTAgKiBCVU5ETEVfR0IgfSwgMjUwMCwgQUxMLCA1KSxcbiAgICBiKCdhdWRpdF9sb2cnLCAnQXVkaXQgTG9nJywgJ0F1ZGl0IGxvZyBjYXBhYmlsaXR5Jywge30sIDIwMDAsIFsncHJvJ10sIDYsIHsgZmVhdHVyZXM6IFsnYXVkaXRfbG9nJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gICAgLy8gU1NPIGlzIElOQ0xVREVEIGluIFRlYW0gKHNlZSBUSUVSX0ZFQVRVUkVTLnRlYW0pLCBzbyB0aGUgYWRkLW9uIGlzIFByby1vbmx5LlxuICAgIGIoJ3NzbycsICdTU08gLyBJZFAnLCAnU1NPICsgdXAgdG8gNSBJZFAgY29uZmlncycsIHsgaWRwQ29uZmlnczogNSB9LCA0MDAwLCBbJ3BybyddLCA3LCB7IGZlYXR1cmVzOiBbJ3NzbyddLCBzdGFja2FibGU6IGZhbHNlIH0pLFxuICBdO1xufVxuIl19
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbGluZy1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2JpbGxpbmctY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBd0MsTUFBTSw0QkFBNEIsQ0FBQztBQU8xSixnRkFBZ0Y7QUFDaEYsOEVBQThFO0FBQzlFLGtEQUFrRDtBQUNsRCxrRkFBa0Y7QUFDbEYsaURBQWlEO0FBQ2pELHdFQUF3RTtBQUN4RSwyRUFBMkU7QUFDM0UsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSxpRkFBaUY7QUFDakYsNEVBQTRFO0FBRTVFLHdGQUF3RjtBQUN4RixTQUFTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsRUFBRSxNQUFjO0lBQ2hFLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztRQUFFLE9BQU8sYUFBYSxNQUFNLEVBQUUsQ0FBQztJQUMvQyxPQUFPLFNBQVMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JGLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFlLEVBQUUsS0FBZTtJQUN2RCxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25DLE9BQU87UUFDTCxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1FBQ25DLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDekMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUs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QUUsV0FBVyxFQUFFLDJCQUEyQixFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNoSSw4RUFBOEU7UUFDOUUsNEVBQTRFO1FBQzVFLHdFQUF3RTtRQUN4RSwyRUFBMkU7UUFDM0UsQ0FBQyxDQUFDLG9CQUFvQixFQUFFLDJCQUEyQixFQUFFLHFIQUFxSCxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0tBQy9RLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogTG9hZCBiaWxsaW5nIHBsYW4gY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiBQZXItcGxhbiBwcmljZXMgYXJlIHRoZSBtb3N0IGxpa2VseSB0byB2YXJ5IGJldHdlZW4gZW52aXJvbm1lbnRzOlxuICogICBCSUxMSU5HX1BMQU5fe1RJRVJ9X01PTlRITFkgLyBCSUxMSU5HX1BMQU5fe1RJRVJ9X0FOTlVBTCAgKGluIGNlbnRzKVxuICpcbiAqIE9wdGlvbmFsIG92ZXJyaWRlcyBmb3IgZGVzY3JpcHRpb25zIGFuZCBmZWF0dXJlczpcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9OQU1FICAgICAgICAgIChwbGFpbiBzdHJpbmcsIGRpc3BsYXkgbmFtZSlcbiAqICAgQklMTElOR19QTEFOX3tUSUVSfV9ERVNDUklQVElPTiAgIChwbGFpbiBzdHJpbmcpXG4gKiAgIEJJTExJTkdfUExBTl97VElFUn1fRkVBVFVSRVMgICAgICAoSlNPTiBzdHJpbmcgYXJyYXkpXG4gKlxuICogQWxsIGRlZmF1bHRzIG1hdGNoIHRoZSBvcmlnaW5hbCBoYXJkY29kZWQgc2VlZCBkYXRhIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICovXG5pbXBvcnQgeyBRVU9UQV9USUVSUywgVElFUl9GRUFUVVJFUywgRkVBVFVSRV9NRVRBREFUQSwgVkFMSURfVElFUlMsIGlzVmFsaWRUaWVyLCB0eXBlIFF1b3RhVGllciwgdHlwZSBRdW90YVRpZXJMaW1pdHMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgdHlwZSB7IEJpbGxpbmdDb25maWcsIEJpbGxpbmdQbGFuQ29uZmlnLCBCdW5kbGVDb25maWcgfSBmcm9tICcuL2NvbmZpZy10eXBlcy5qcyc7XG5cbi8qKiBQZXItdW5pdCBxdW90YSBkZWx0YXMgZm9yIGEgYnVuZGxlIOKAlCBrZXlzIGNvbnN0cmFpbmVkIHRvIHJlYWwgcXVvdGEgZmllbGRzXG4gKiAgKG1hdGNoZXMgYEJ1bmRsZUNvbmZpZy5ncmFudHNgKSwgc28gYSB0eXBvJ2QgZGltZW5zaW9uIGZhaWxzIHRvIGNvbXBpbGUuICovXG50eXBlIEdyYW50TWFwID0gUGFydGlhbDxSZWNvcmQ8a2V5b2YgUXVvdGFUaWVyTGltaXRzLCBudW1iZXI+PjtcblxuLy8gLS0gRGVmYXVsdCBmZWF0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZSBtYXJrZXRlZCBmZWF0dXJlIGxpc3QgaXMgYnVpbHQgZnJvbSB0d28gZGVyaXZlZCBzb3VyY2VzIHNvIGl0IGNhbiBuZXZlclxuLy8gZHJpZnQgZnJvbSB3aGF0IHRoZSBwbGF0Zm9ybSBhY3R1YWxseSBlbmZvcmNlczpcbi8vICAgMS4gTElNSVQgbGluZXMgZGVyaXZlZCBmcm9tIGVhY2ggdGllcidzIEVGRkVDVElWRSBxdW90YSBsaW1pdHMgKFFVT1RBX1RJRVJTKSxcbi8vICAgICAgc28gdGhleSB0cmFjayBRVU9UQV9USUVSXyogZW52IG92ZXJyaWRlcy5cbi8vICAgMi4gSU5DTFVERUQtRkVBVFVSRSBsaW5lcyBkZXJpdmVkIGZyb20gdGhlIGVuZm9yY2VkIGVudGl0bGVtZW50IHNldFxuLy8gICAgICAoVElFUl9GRUFUVVJFUykgdmlhIEZFQVRVUkVfTUVUQURBVEEgbGFiZWxzIOKAlCBzbyBhbiBhZHZlcnRpc2VkIGJhc2Vcbi8vICAgICAgZmVhdHVyZSBpcyBhbHdheXMgb25lIGByZXF1aXJlRmVhdHVyZWAgYWN0dWFsbHkgZ3JhbnRzIGZvciB0aGF0IHRpZXIuXG4vLyBPbmx5IGdlbnVpbmVseSBub24tZ2F0ZWQgbWFya2V0aW5nIGNvcHkgKHN1cHBvcnQgbGV2ZWwsIGRhc2hib2FyZHMsIFJCQUMpIGlzXG4vLyBoYW5kLWF1dGhvcmVkLCBwYXNzZWQgYXMgYHBlcmtzYC4gUHVyY2hhc2FibGUgYWRkLW9ucyAoc3NvLCBhdWRpdF9sb2cpIGFyZSBOT1Rcbi8vIGxpc3RlZCBhcyBiYXNlIHBlcmtzIGhlcmUg4oCUIHRoZXkgYXJlIHNvbGQgYXMgYnVuZGxlcyAoc2VlIGxvYWRCdW5kbGVzKCkpLlxuXG4vKiogXCJVcCB0byBOIHBsdWdpbnNcIiAvIFwiVW5saW1pdGVkIHBsdWdpbnNcIiBmcm9tIGFuIGVmZmVjdGl2ZSBsaW1pdCAoLTEgPSB1bmxpbWl0ZWQpLiAqL1xuZnVuY3Rpb24gbGltaXRMaW5lKGxpbWl0OiBudW1iZXIsIHNpbmd1bGFyOiBzdHJpbmcsIHBsdXJhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGxpbWl0ID09PSAtMSkgcmV0dXJuIGBVbmxpbWl0ZWQgJHtwbHVyYWx9YDtcbiAgcmV0dXJuIGBVcCB0byAke2xpbWl0LnRvTG9jYWxlU3RyaW5nKCdlbi1VUycpfSAke2xpbWl0ID09PSAxID8gc2luZ3VsYXIgOiBwbHVyYWx9YDtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZlYXR1cmVzKHRpZXI6IFF1b3RhVGllciwgcGVya3M6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCBsID0gUVVPVEFfVElFUlNbdGllcl0ubGltaXRzO1xuICByZXR1cm4gW1xuICAgIGxpbWl0TGluZShsLnNlYXRzLCAnc2VhdCcsICdzZWF0cycpLFxuICAgIGxpbWl0TGluZShsLnBsdWdpbnMsICdwbHVnaW4nLCAncGx1Z2lucycpLFxuICAgIGxpbWl0TGluZShsLnBpcGVsaW5lcywgJ3BpcGVsaW5lJywgJ3BpcGVsaW5lcycpLFxuICAgIGxpbWl0TGluZShsLmFwaUNhbGxzLCAnQVBJIGNhbGwnLCAnQVBJIGNhbGxzJyksXG4gICAgbGltaXRMaW5lKGwuYWlDYWxscywgJ0FJIGNhbGwnLCAnQUkgY2FsbHMnKSxcbiAgICAvLyBFbmZvcmNlZCBlbnRpdGxlbWVudHMg4oaSIGN1c3RvbWVyLWZhY2luZyBsYWJlbHMgKHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGgpLlxuICAgIC4uLlRJRVJfRkVBVFVSRVNbdGllcl0ubWFwKChmKSA9PiBGRUFUVVJFX01FVEFEQVRBW2ZdLmxhYmVsKSxcbiAgICAuLi5wZXJrcyxcbiAgXTtcbn1cblxuLy8gTm90ZTogYHBlcmtzYCBhcmUgbm9uLWdhdGVkIG1hcmtldGluZyBsaW5lcyBvbmx5LiBFbmZvcmNlZCBmZWF0dXJlcyAoaW5jbC5cbi8vIFByaW9yaXR5IFN1cHBvcnQgZm9yIHByby90ZWFtL2VudGVycHJpc2UpIGNvbWUgZnJvbSBUSUVSX0ZFQVRVUkVTIGFib3ZlLlxuY29uc3QgREVGQVVMVF9ERVZFTE9QRVJfRkVBVFVSRVMgPSBkZWZhdWx0RmVhdHVyZXMoJ2RldmVsb3BlcicsIFsnQ29tbXVuaXR5IHN1cHBvcnQnXSk7XG5jb25zdCBERUZBVUxUX1BST19GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygncHJvJywgWydSZXBvcnRpbmcgZGFzaGJvYXJkJ10pO1xuY29uc3QgREVGQVVMVF9URUFNX0ZFQVRVUkVTID0gZGVmYXVsdEZlYXR1cmVzKCd0ZWFtJywgWydSQkFDICYgdGVhbSByb2xlcyddKTtcbmNvbnN0IERFRkFVTFRfRU5URVJQUklTRV9GRUFUVVJFUyA9IGRlZmF1bHRGZWF0dXJlcygnZW50ZXJwcmlzZScsIFtcbiAgJ1JCQUMgJiB0ZWFtIHJvbGVzJywgJ1JlcG9ydGluZyBkYXNoYm9hcmQnLFxuXSk7XG5cbi8qKlxuICogUGFyc2UgYSBwcmljZSAoaW4gY2VudHMpIGZyb20gYW4gZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIHRoZSBkZWZhdWx0IHdoZW5cbiAqIHVuc2V0IE9SIG1hbGZvcm1lZC4gQSBOYU4gKGUuZy4gYEJJTExJTkdfUExBTl9QUk9fTU9OVEhMWT1hYmNgKSBtdXN0IG5ldmVyXG4gKiBmbG93IGludG8gdGhlIHJldHVybmVkIGNvbmZpZyBhcyBhIHByaWNlLlxuICovXG5mdW5jdGlvbiBlbnZDZW50cyhlbnZWYXI6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChlbnZWYXIgPT09IHVuZGVmaW5lZCB8fCBlbnZWYXIgPT09ICcnKSByZXR1cm4gZmFsbGJhY2s7XG4gIGNvbnN0IG4gPSBwYXJzZUludChlbnZWYXIsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IGZhbGxiYWNrIDogbjtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIEpTT04gYXJyYXkgZnJvbSBhbiBlbnYgdmFyLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VGZWF0dXJlcyhlbnZWYXI6IHN0cmluZyB8IHVuZGVmaW5lZCwgZmFsbGJhY2s6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBpZiAoIWVudlZhcikgcmV0dXJuIGZhbGxiYWNrO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoZW52VmFyKTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXJzZWQpID8gcGFyc2VkIDogZmFsbGJhY2s7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxufVxuXG4vKipcbiAqIExvYWQgYmlsbGluZyBwbGFuIGNvbmZpZ3VyYXRpb24gZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQmlsbGluZ0NvbmZpZygpOiBCaWxsaW5nQ29uZmlnIHtcbiAgLy8gS2V5ZWQgYnkgUXVvdGFUaWVyIHNvIHRoZSBjb21waWxlciBmb3JjZXMgYSBwbGFuIGZvciBFVkVSWSB0aWVyIOKAlCBhZGRpbmcgYVxuICAvLyA1dGggUXVvdGFUaWVyIHdpdGhvdXQgYSBwbGFuIGhlcmUgaXMgbm93IGEgY29tcGlsZSBlcnJvciAod2FzIGEgaGFuZC1rZXB0XG4gIC8vIDQtZWxlbWVudCBhcnJheSB0aGF0IHNpbGVudGx5IHNoaXBwZWQgbm8gcGxhbi9wcmljZSBmb3IgYSBuZXcgdGllcikuIFRoZVxuICAvLyBwdWJsaWMgYGNvbmZpZy5wbGFuc2Agc2hhcGUgc3RheXMgYW4gYXJyYXksIGRlcml2ZWQgYmVsb3cgaW4gVkFMSURfVElFUlNcbiAgLy8gb3JkZXIgKGRldmVsb3BlciwgcHJvLCB0ZWFtLCBlbnRlcnByaXNlKSB0byBwcmVzZXJ2ZSBjb25zdW1lciBvcmRlcmluZy5cbiAgY29uc3QgcGxhbkJ5VGllcjogUmVjb3JkPFF1b3RhVGllciwgQmlsbGluZ1BsYW5Db25maWc+ID0ge1xuICAgIGRldmVsb3Blcjoge1xuICAgICAgaWQ6ICdkZXZlbG9wZXInLFxuICAgICAgbmFtZTogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9OQU1FIHx8ICdEZXZlbG9wZXInLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfREVTQ1JJUFRJT05cbiAgICAgICAgfHwgJ0ZyZWUgc3RhcnRlciB0aWVyIGZvciBpbmRpdmlkdWFsIGRldmVsb3BlcnMnLFxuICAgICAgdGllcjogJ2RldmVsb3BlcicsXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX0RFVkVMT1BFUl9NT05USExZLCAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fREVWRUxPUEVSX0FOTlVBTCwgMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9ERVZFTE9QRVJfRkVBVFVSRVMsXG4gICAgICAgIERFRkFVTFRfREVWRUxPUEVSX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiB0cnVlLFxuICAgICAgc29ydE9yZGVyOiAwLFxuICAgIH0sXG4gICAgcHJvOiB7XG4gICAgICBpZDogJ3BybycsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fUFJPX05BTUUgfHwgJ1BybycsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19ERVNDUklQVElPTlxuICAgICAgICB8fCAnRm9yIGluZGl2aWR1YWwgcG93ZXIgdXNlcnMgYW5kIHByb2R1Y3Rpb24gd29ya2xvYWRzJyxcbiAgICAgIHRpZXI6ICdwcm8nLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9QUk9fTU9OVEhMWSwgNDkwMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19BTk5VQUwsIDQ5MDAwKSxcbiAgICAgIH0sXG4gICAgICBmZWF0dXJlczogcGFyc2VGZWF0dXJlcyhcbiAgICAgICAgcHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1BST19GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9QUk9fRkVBVFVSRVMsXG4gICAgICApLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgc29ydE9yZGVyOiAxLFxuICAgIH0sXG4gICAgdGVhbToge1xuICAgICAgaWQ6ICd0ZWFtJyxcbiAgICAgIG5hbWU6IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX05BTUUgfHwgJ1RlYW0nLFxuICAgICAgZGVzY3JpcHRpb246IHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9URUFNX0RFU0NSSVBUSU9OXG4gICAgICAgIHx8ICdGb3IgdGVhbXMgY29sbGFib3JhdGluZyBvbiBzaGFyZWQgcGlwZWxpbmVzJyxcbiAgICAgIHRpZXI6ICd0ZWFtJyxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBtb250aGx5OiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9NT05USExZLCAxNDkwMCksXG4gICAgICAgIGFubnVhbDogZW52Q2VudHMocHJvY2Vzcy5lbnYuQklMTElOR19QTEFOX1RFQU1fQU5OVUFMLCAxNDkwMDApLFxuICAgICAgfSxcbiAgICAgIGZlYXR1cmVzOiBwYXJzZUZlYXR1cmVzKFxuICAgICAgICBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fVEVBTV9GRUFUVVJFUyxcbiAgICAgICAgREVGQVVMVF9URUFNX0ZFQVRVUkVTLFxuICAgICAgKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgaXNEZWZhdWx0OiBmYWxzZSxcbiAgICAgIHNvcnRPcmRlcjogMixcbiAgICB9LFxuICAgIGVudGVycHJpc2U6IHtcbiAgICAgIGlkOiAnZW50ZXJwcmlzZScsXG4gICAgICBuYW1lOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9OQU1FIHx8ICdFbnRlcnByaXNlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9ERVNDUklQVElPTlxuICAgICAgICB8fCAnT3JnLXdpZGUgc2NhbGUgd2l0aCB1bmxpbWl0ZWQgc2VhdHMgYW5kIHByaW9yaXR5IHN1cHBvcnQnLFxuICAgICAgdGllcjogJ2VudGVycHJpc2UnLFxuICAgICAgcHJpY2VzOiB7XG4gICAgICAgIG1vbnRobHk6IGVudkNlbnRzKHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX01PTlRITFksIDM5OTAwKSxcbiAgICAgICAgYW5udWFsOiBlbnZDZW50cyhwcm9jZXNzLmVudi5CSUxMSU5HX1BMQU5fRU5URVJQUklTRV9BTk5VQUwsIDM5OTAwMCksXG4gICAgICB9LFxuICAgICAgZmVhdHVyZXM6IHBhcnNlRmVhdHVyZXMoXG4gICAgICAgIHByb2Nlc3MuZW52LkJJTExJTkdfUExBTl9FTlRFUlBSSVNFX0ZFQVRVUkVTLFxuICAgICAgICBERUZBVUxUX0VOVEVSUFJJU0VfRkVBVFVSRVMsXG4gICAgICApLFxuICAgICAgaXNBY3RpdmU6IHRydWUsXG4gICAgICBpc0RlZmF1bHQ6IGZhbHNlLFxuICAgICAgc29ydE9yZGVyOiAzLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gRGVyaXZlIHRoZSBhcnJheSBjb25zdW1lcnMgcmVhZCAoYGNvbmZpZy5wbGFuc2ApIGluIGNhbm9uaWNhbCB0aWVyIG9yZGVyLlxuICBjb25zdCBwbGFuczogQmlsbGluZ1BsYW5Db25maWdbXSA9IFZBTElEX1RJRVJTLm1hcCgodGllcikgPT4gcGxhbkJ5VGllclt0aWVyXSk7XG5cbiAgcmV0dXJuIHsgcGxhbnMsIGJ1bmRsZXM6IGxvYWRCdW5kbGVzKCkgfTtcbn1cblxuY29uc3QgQlVORExFX0dCID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xuXG4vKipcbiAqIEFwcGx5IGEgcGVyLWJ1bmRsZSBncmFudCBvdmVycmlkZS4gRWFjaCBzdGFja2FibGUgcGFjayBncmFudHMgZXhhY3RseSBvbmVcbiAqIHF1b3RhIGRpbWVuc2lvbiwgc28gYEJJTExJTkdfQlVORExFXzxJRD5fR1JBTlRgIHJldHVuZXMgdGhhdCBhbW91bnQgKGUuZy4gbWFrZVxuICogdGhlIFNlYXQgUGFjayBncmFudCArMTAgaW5zdGVhZCBvZiArNSkg4oCUIHBhcmFsbGVsIHRvIHRoZSBwcmljZSBvdmVycmlkZXMuXG4gKiBJZ25vcmVkIGZvciBtdWx0aS1kaW1lbnNpb24gb3IgZmVhdHVyZS1vbmx5IChlbXB0eS1ncmFudCkgYnVuZGxlcywgYW5kIGZvciBhXG4gKiBtYWxmb3JtZWQvbmVnYXRpdmUgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5R3JhbnRPdmVycmlkZShpZDogc3RyaW5nLCBncmFudHM6IEdyYW50TWFwKTogR3JhbnRNYXAge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltgQklMTElOR19CVU5ETEVfJHtpZC50b1VwcGVyQ2FzZSgpfV9HUkFOVGBdO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZ3JhbnRzKTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gJycgfHwga2V5cy5sZW5ndGggIT09IDEpIHJldHVybiBncmFudHM7XG4gIGNvbnN0IG4gPSBwYXJzZUludChyYXcsIDEwKTtcbiAgaWYgKE51bWJlci5pc05hTihuKSB8fCBuIDwgMCkgcmV0dXJuIGdyYW50cztcbiAgLy8gYGtleXNgIGNhbWUgZnJvbSBhIEdyYW50TWFwLCBzbyBpdHMgc29sZSBrZXkgaXMgYSBRdW90YVRpZXJMaW1pdHMgZmllbGQuXG4gIHJldHVybiB7IFtrZXlzWzBdIGFzIGtleW9mIFF1b3RhVGllckxpbWl0c106IG4gfTtcbn1cblxuLyoqXG4gKiBBcHBseSBhIHBlci1idW5kbGUgdGllci1hdmFpbGFiaWxpdHkgb3ZlcnJpZGUuIGBCSUxMSU5HX0JVTkRMRV88SUQ+X1RJRVJTYCBpcyBhXG4gKiBKU09OIGFycmF5IG9mIHRpZXIgSURzIHRoYXQgbWF5IHB1cmNoYXNlIHRoZSBidW5kbGUgKGUuZy4gYFtcImRldmVsb3BlclwiLFwicHJvXCJdYClcbiAqIOKAlCBwYXJhbGxlbCB0byB0aGUgcHJpY2UvZ3JhbnQgb3ZlcnJpZGVzLiBGYWxscyBiYWNrIHRvIGBkZWZhdWx0VGllcnNgIHdoZW5cbiAqIHVuc2V0LCBtYWxmb3JtZWQsIGVtcHR5LCBvciBjb250YWluaW5nIGFuIHVua25vd24gdGllci5cbiAqL1xuZnVuY3Rpb24gYXBwbHlUaWVyc092ZXJyaWRlKGlkOiBzdHJpbmcsIGRlZmF1bHRUaWVyczogUXVvdGFUaWVyW10pOiBRdW90YVRpZXJbXSB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X1RJRVJTYF07XG4gIGlmICghcmF3KSByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmF3KTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyc2VkKSB8fCBwYXJzZWQubGVuZ3RoID09PSAwKSByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICAgIGNvbnN0IHZhbGlkID0gcGFyc2VkLmZpbHRlcigodCk6IHQgaXMgUXVvdGFUaWVyID0+IHR5cGVvZiB0ID09PSAnc3RyaW5nJyAmJiBpc1ZhbGlkVGllcih0KSk7XG4gICAgcmV0dXJuIHZhbGlkLmxlbmd0aCA9PT0gcGFyc2VkLmxlbmd0aCA/IHZhbGlkIDogZGVmYXVsdFRpZXJzO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZGVmYXVsdFRpZXJzO1xuICB9XG59XG5cbi8qKlxuICogUHVyY2hhc2FibGUgYWRkLW9uIGJ1bmRsZXMgKGRvY3MvYmlsbGluZy1idW5kbGVzLm1kIMKnMykuIEdyYW50cyBhcmUgcGVyLXVuaXRcbiAqIGRlbHRhcyBvbiBRdW90YVRpZXJMaW1pdHM7IHByaWNlcyAoY2VudHMsIGBCSUxMSU5HX0JVTkRMRV88SUQ+X01PTlRITFlgIC9cbiAqIGBfQU5OVUFMYCksIHRoZSBzaW5nbGUtZGltZW5zaW9uIGdyYW50IGFtb3VudCAoYEJJTExJTkdfQlVORExFXzxJRD5fR1JBTlRgKSxcbiAqIGFuZCB0aGUgcHVyY2hhc2FibGUtdGllciBsaXN0IChgQklMTElOR19CVU5ETEVfPElEPl9USUVSU2ApIGFyZSBhbGxcbiAqIGVudi1vdmVycmlkYWJsZS4gQW5udWFsIOKJiCAxMMOXIG1vbnRobHkuXG4gKi9cbmZ1bmN0aW9uIGxvYWRCdW5kbGVzKCk6IEJ1bmRsZUNvbmZpZ1tdIHtcbiAgY29uc3QgYiA9IChcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIGdyYW50czogR3JhbnRNYXAsXG4gICAgbW9udGhseTogbnVtYmVyLFxuICAgIGF2YWlsYWJsZUZvclRpZXJzOiBRdW90YVRpZXJbXSxcbiAgICBzb3J0T3JkZXI6IG51bWJlcixcbiAgICBleHRyYTogeyBmZWF0dXJlcz86IHN0cmluZ1tdOyBzdGFja2FibGU/OiBib29sZWFuIH0gPSB7fSxcbiAgKTogQnVuZGxlQ29uZmlnID0+IHtcbiAgICAvLyBSZXNvbHZlIG1vbnRobHkgZmlyc3Qgc28gdGhlIGFubnVhbCBmYWxsYmFjayB0cmFja3MgYSBgX01PTlRITFlgIG92ZXJyaWRlXG4gICAgLy8gKGFubnVhbCDiiYggMTDDlyB0aGUgKmVmZmVjdGl2ZSogbW9udGhseSwgbm90IHRoZSBoYXJkY29kZWQgZGVmYXVsdCkuXG4gICAgY29uc3QgcmVzb2x2ZWRNb250aGx5ID0gZW52Q2VudHMocHJvY2Vzcy5lbnZbYEJJTExJTkdfQlVORExFXyR7aWQudG9VcHBlckNhc2UoKX1fTU9OVEhMWWBdLCBtb250aGx5KTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQsXG4gICAgICBuYW1lLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBncmFudHM6IGFwcGx5R3JhbnRPdmVycmlkZShpZCwgZ3JhbnRzKSxcbiAgICAgIC4uLihleHRyYS5mZWF0dXJlcyA/IHsgZmVhdHVyZXM6IGV4dHJhLmZlYXR1cmVzIH0gOiB7fSksXG4gICAgICBwcmljZXM6IHtcbiAgICAgICAgbW9udGhseTogcmVzb2x2ZWRNb250aGx5LFxuICAgICAgICBhbm51YWw6IGVudkNlbnRzKHByb2Nlc3MuZW52W2BCSUxMSU5HX0JVTkRMRV8ke2lkLnRvVXBwZXJDYXNlKCl9X0FOTlVBTGBdLCByZXNvbHZlZE1vbnRobHkgKiAxMCksXG4gICAgICB9LFxuICAgICAgc3RhY2thYmxlOiBleHRyYS5zdGFja2FibGUgPz8gdHJ1ZSxcbiAgICAgIGF2YWlsYWJsZUZvclRpZXJzOiBhcHBseVRpZXJzT3ZlcnJpZGUoaWQsIGF2YWlsYWJsZUZvclRpZXJzKSxcbiAgICAgIGlzQWN0aXZlOiB0cnVlLFxuICAgICAgc29ydE9yZGVyLFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgQUxMOiBRdW90YVRpZXJbXSA9IFsnZGV2ZWxvcGVyJywgJ3BybycsICd0ZWFtJywgJ2VudGVycHJpc2UnXTtcbiAgcmV0dXJuIFtcbiAgICAvLyBDYXBhY2l0eSBwYWNrcyAoc2VhdHMvcGlwZWxpbmVzL3BsdWdpbnMpIGFyZSBhdmFpbGFibGUgb24gRVZFUlkgdGllciBzbyBhbnlcbiAgICAvLyBhY2NvdW50IOKAlCBpbmNsdWRpbmcgZnJlZSAoZGV2ZWxvcGVyKSDigJQgY2FuIGV4cGFuZCBpbiBwbGFjZS4gRmVhdHVyZSBidW5kbGVzXG4gICAgLy8gKGF1ZGl0X2xvZy9zc28pIGFuZCByYXRlIHBhY2tzIHN0YXkgdGllci1zY29wZWQgYnkgZGVmYXVsdC5cbiAgICBiKCdzZWF0X3BhY2snLCAnU2VhdCBQYWNrICgrNSknLCAnNSBhZGRpdGlvbmFsIG1lbWJlciBzZWF0cycsIHsgc2VhdHM6IDUgfSwgMjUwMCwgQUxMLCAwKSxcbiAgICBiKCdwaXBlbGluZV9wYWNrJywgJ1BpcGVsaW5lIFBhY2sgKCsxMCknLCAnMTAgYWRkaXRpb25hbCBwaXBlbGluZXMnLCB7IHBpcGVsaW5lczogMTAgfSwgMTUwMCwgQUxMLCAxKSxcbiAgICBiKCdwbHVnaW5fcGFjaycsICdQbHVnaW4gUGFjayAoKzEwMCknLCAnMTAwIGFkZGl0aW9uYWwgcGx1Z2lucycsIHsgcGx1Z2luczogMTAwIH0sIDE1MDAsIEFMTCwgMiksXG4gICAgYignYXBpX3BhY2snLCAnQVBJIFBhY2sgKCsxTSknLCAnMSwwMDAsMDAwIGFkZGl0aW9uYWwgQVBJIGNhbGxzIC8gcGVyaW9kJywgeyBhcGlDYWxsczogMV8wMDBfMDAwIH0sIDIwMDAsIEFMTCwgMyksXG4gICAgYignYWlfcGFjaycsICdBSSBQYWNrICgrNWspJywgJzUsMDAwIGFkZGl0aW9uYWwgQUkgY2FsbHMgLyBwZXJpb2QnLCB7IGFpQ2FsbHM6IDUwMDAgfSwgNzUwMCwgQUxMLCA0KSxcbiAgICBiKCdzdG9yYWdlX3BhY2snLCAnU3RvcmFnZSBQYWNrICgrNTAgR0IpJywgJzUwIEdCIGFkZGl0aW9uYWwgcmVnaXN0cnkgc3RvcmFnZScsIHsgc3RvcmFnZUJ5dGVzOiA1MCAqIEJVTkRMRV9HQiB9LCAyNTAwLCBBTEwsIDUpLFxuICAgIGIoJ2F1ZGl0X2xvZycsICdBdWRpdCBMb2cnLCAnQXVkaXQgbG9nIGNhcGFiaWxpdHknLCB7fSwgMjAwMCwgWydwcm8nXSwgNiwgeyBmZWF0dXJlczogWydhdWRpdF9sb2cnXSwgc3RhY2thYmxlOiBmYWxzZSB9KSxcbiAgICAvLyBTU08gaXMgSU5DTFVERUQgaW4gVGVhbSAoc2VlIFRJRVJfRkVBVFVSRVMudGVhbSksIHNvIHRoZSBhZGQtb24gaXMgUHJvLW9ubHkuXG4gICAgYignc3NvJywgJ1NTTyAvIElkUCcsICdTU08gKyB1cCB0byA1IElkUCBjb25maWdzJywgeyBpZHBDb25maWdzOiA1IH0sIDQwMDAsIFsncHJvJ10sIDcsIHsgZmVhdHVyZXM6IFsnc3NvJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gICAgLy8gRE9SQSAvIGFkdmFuY2VkIGRlbGl2ZXJ5IGFuYWx5dGljcy4gSU5DTFVERUQgaW4gRW50ZXJwcmlzZSAoVElFUl9GRUFUVVJFUyksXG4gICAgLy8gc28gdGhlIGFkZC1vbiBpcyBvZmZlcmVkIHRvIGV2ZXJ5IG90aGVyIHRpZXIgKGRldmVsb3Blci9wcm8vdGVhbSkuIFByaWNlZFxuICAgIC8vIGJldHdlZW4gQXVkaXQgTG9nICgkMjApIGFuZCBTU08gKCQ0MCkg4oCUIGEgaGlnaGVyLXZhbHVlLCBhY3RpdmVseS11c2VkXG4gICAgLy8gYW5hbHl0aWNzIHN1cmZhY2UgdGhhbiB0aGUgYXVkaXQgbG9nLCBidXQgYmVsb3cgdGhlIFNTTyBlbnRlcnByaXNlIGdhdGUuXG4gICAgYignYWR2YW5jZWRfcmVwb3J0aW5nJywgJ0FkdmFuY2VkIFJlcG9ydGluZyAoRE9SQSknLCAnRE9SQSBkZWxpdmVyeSBtZXRyaWNzIOKAlCBkZXBsb3ltZW50IGZyZXF1ZW5jeSwgY2hhbmdlIGZhaWx1cmUgcmF0ZSwgTVRUUiwgbGVhZC10aW1lIHByb3h5LCBwZXJmb3JtYW5jZSBiYW5kcyArIHRyZW5kJywge30sIDMwMDAsIFsnZGV2ZWxvcGVyJywgJ3BybycsICd0ZWFtJ10sIDgsIHsgZmVhdHVyZXM6IFsnYWR2YW5jZWRfcmVwb3J0aW5nJ10sIHN0YWNrYWJsZTogZmFsc2UgfSksXG4gIF07XG59XG4iXX0=
|
|
@@ -23,17 +23,22 @@ export function effectiveEntitlements(tier, addons, bundles) {
|
|
|
23
23
|
const bundle = byId.get(bundleId);
|
|
24
24
|
if (!bundle || quantity <= 0)
|
|
25
25
|
continue;
|
|
26
|
+
// Enforce the non-stackable invariant in the CANONICAL math, not just at the
|
|
27
|
+
// purchase route: a `stackable:false` bundle counts once regardless of a
|
|
28
|
+
// stored quantity > 1, so a non-route caller (drift reconciler,
|
|
29
|
+
// subscription-lifecycle) can't over-grant its quota.
|
|
30
|
+
const effectiveQty = bundle.stackable ? quantity : 1;
|
|
26
31
|
for (const [field, delta] of Object.entries(bundle.grants)) {
|
|
27
32
|
// `grants` is a Partial map, so a value can be undefined — skip those.
|
|
28
33
|
if (delta === undefined)
|
|
29
34
|
continue;
|
|
30
35
|
if (limits[field] === -1)
|
|
31
36
|
continue; // already unlimited
|
|
32
|
-
limits[field] = (limits[field] ?? 0) + delta *
|
|
37
|
+
limits[field] = (limits[field] ?? 0) + delta * effectiveQty;
|
|
33
38
|
}
|
|
34
39
|
for (const f of bundle.features ?? [])
|
|
35
40
|
features.add(f);
|
|
36
41
|
}
|
|
37
42
|
return { limits, features: [...features] };
|
|
38
43
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRsZW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9lbnRpdGxlbWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQWtCLE1BQU0sNEJBQTRCLENBQUM7QUFHM0U7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsSUFBZSxFQUNmLE1BQTZELEVBQzdELE9BQWdDO0lBRWhDLE1BQU0sTUFBTSxHQUEyQixFQUFFLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELEtBQUssTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLENBQUM7WUFBRSxTQUFTO1FBQ3ZDLDZFQUE2RTtRQUM3RSx5RUFBeUU7UUFDekUsZ0VBQWdFO1FBQ2hFLHNEQUFzRDtRQUN0RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMzRCx1RUFBdUU7WUFDdkUsSUFBSSxLQUFLLEtBQUssU0FBUztnQkFBRSxTQUFTO1lBQ2xDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFBRSxTQUFTLENBQUMsb0JBQW9CO1lBQ3hELE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDO1FBQzlELENBQUM7UUFDRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRTtZQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBFZmZlY3RpdmUtZW50aXRsZW1lbnQgbWF0aCBmb3IgdGhlIGFjY291bnQvZW50aXRsZW1lbnQgbW9kZWwuXG4gKlxuICogVGhlIGNhbm9uaWNhbCBcImVmZmVjdGl2ZSBsaW1pdHMgPSB0aWVyIGJhc2UgKyDOoyhidW5kbGUgZ3JhbnRzKVwiIGNvbXB1dGF0aW9uXG4gKiBsaXZlcyBoZXJlIOKAlCBuZXh0IHRvIHRoZSBwbGFuL2J1bmRsZSBjb25maWcgaXQgb3BlcmF0ZXMgb24g4oCUIHNvIEFOWVxuICogYWNjb3VudC1zY29wZWQgY29uc3VtZXIgKGJpbGxpbmcsIGFuZCBmdXR1cmUgcXVvdGEvcGxhdGZvcm0gcmVhZGVycykgc2hhcmVzXG4gKiBvbmUgaW1wbGVtZW50YXRpb24gaW5zdGVhZCBvZiByZS1kZXJpdmluZyB0aGUgY29hbGVzY2UuIFB1cmU6IHRoZSB0aWVyIGxpbWl0c1xuICogY29tZSBmcm9tIGFwaS1jb3JlIChgZ2V0VGllckxpbWl0c2ApIGFuZCB0aGUgYnVuZGxlIGNhdGFsb2cgaXMgcGFzc2VkIGluLlxuICovXG5cbmltcG9ydCB7IGdldFRpZXJMaW1pdHMsIHR5cGUgUXVvdGFUaWVyIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBCdW5kbGVDb25maWcgfSBmcm9tICcuL2NvbmZpZy10eXBlcy5qcyc7XG5cbi8qKlxuICogQ29tcHV0ZSBhbiBhY2NvdW50J3MgRUZGRUNUSVZFIGVudGl0bGVtZW50cyA9IHRpZXIgYmFzZSBsaW1pdHMgKyDOoyhidW5kbGVcbiAqIGdyYW50cyDDlyBxdWFudGl0eSksIHBsdXMgdGhlIHVuaW9uIG9mIGJ1bmRsZS1ncmFudGVkIGZlYXR1cmUgZmxhZ3MuIEEgZmllbGRcbiAqIGFscmVhZHkgYC0xYCAodW5saW1pdGVkKSBzdGF5cyBgLTFgLiBQdXJlOyB0aGUgY2F0YWxvZyBpcyBwYXNzZWQgaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlZmZlY3RpdmVFbnRpdGxlbWVudHMoXG4gIHRpZXI6IFF1b3RhVGllcixcbiAgYWRkb25zOiBSZWFkb25seUFycmF5PHsgYnVuZGxlSWQ6IHN0cmluZzsgcXVhbnRpdHk6IG51bWJlciB9PixcbiAgYnVuZGxlczogcmVhZG9ubHkgQnVuZGxlQ29uZmlnW10sXG4pOiB7IGxpbWl0czogUmVjb3JkPHN0cmluZywgbnVtYmVyPjsgZmVhdHVyZXM6IHN0cmluZ1tdIH0ge1xuICBjb25zdCBsaW1pdHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7IC4uLmdldFRpZXJMaW1pdHModGllcikgfTtcbiAgY29uc3QgZmVhdHVyZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgYnlJZCA9IG5ldyBNYXAoYnVuZGxlcy5tYXAoKGIpID0+IFtiLmlkLCBiXSkpO1xuICBmb3IgKGNvbnN0IHsgYnVuZGxlSWQsIHF1YW50aXR5IH0gb2YgYWRkb25zKSB7XG4gICAgY29uc3QgYnVuZGxlID0gYnlJZC5nZXQoYnVuZGxlSWQpO1xuICAgIGlmICghYnVuZGxlIHx8IHF1YW50aXR5IDw9IDApIGNvbnRpbnVlO1xuICAgIC8vIEVuZm9yY2UgdGhlIG5vbi1zdGFja2FibGUgaW52YXJpYW50IGluIHRoZSBDQU5PTklDQUwgbWF0aCwgbm90IGp1c3QgYXQgdGhlXG4gICAgLy8gcHVyY2hhc2Ugcm91dGU6IGEgYHN0YWNrYWJsZTpmYWxzZWAgYnVuZGxlIGNvdW50cyBvbmNlIHJlZ2FyZGxlc3Mgb2YgYVxuICAgIC8vIHN0b3JlZCBxdWFudGl0eSA+IDEsIHNvIGEgbm9uLXJvdXRlIGNhbGxlciAoZHJpZnQgcmVjb25jaWxlcixcbiAgICAvLyBzdWJzY3JpcHRpb24tbGlmZWN5Y2xlKSBjYW4ndCBvdmVyLWdyYW50IGl0cyBxdW90YS5cbiAgICBjb25zdCBlZmZlY3RpdmVRdHkgPSBidW5kbGUuc3RhY2thYmxlID8gcXVhbnRpdHkgOiAxO1xuICAgIGZvciAoY29uc3QgW2ZpZWxkLCBkZWx0YV0gb2YgT2JqZWN0LmVudHJpZXMoYnVuZGxlLmdyYW50cykpIHtcbiAgICAgIC8vIGBncmFudHNgIGlzIGEgUGFydGlhbCBtYXAsIHNvIGEgdmFsdWUgY2FuIGJlIHVuZGVmaW5lZCDigJQgc2tpcCB0aG9zZS5cbiAgICAgIGlmIChkZWx0YSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICAgIGlmIChsaW1pdHNbZmllbGRdID09PSAtMSkgY29udGludWU7IC8vIGFscmVhZHkgdW5saW1pdGVkXG4gICAgICBsaW1pdHNbZmllbGRdID0gKGxpbWl0c1tmaWVsZF0gPz8gMCkgKyBkZWx0YSAqIGVmZmVjdGl2ZVF0eTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBmIG9mIGJ1bmRsZS5mZWF0dXJlcyA/PyBbXSkgZmVhdHVyZXMuYWRkKGYpO1xuICB9XG4gIHJldHVybiB7IGxpbWl0cywgZmVhdHVyZXM6IFsuLi5mZWF0dXJlc10gfTtcbn1cbiJdfQ==
|
|
@@ -15,6 +15,13 @@ export interface BuilderProps {
|
|
|
15
15
|
readonly project: string;
|
|
16
16
|
/** Organization identifier (will be sanitized to lowercase alphanumeric with underscores) */
|
|
17
17
|
readonly organization: string;
|
|
18
|
+
/**
|
|
19
|
+
* Optional deploy environment (e.g. `production`, `staging`). When set, it is
|
|
20
|
+
* applied as an `Environment` tag on the pipeline so the events Lambda can
|
|
21
|
+
* attribute CodePipeline state-change events to a real deployment for DORA
|
|
22
|
+
* metrics. Purely additive — omit it and behavior is unchanged.
|
|
23
|
+
*/
|
|
24
|
+
readonly environment?: string;
|
|
18
25
|
/** Tenant identifier for resolving per-org secrets from AWS Secrets Manager */
|
|
19
26
|
readonly orgId?: string;
|
|
20
27
|
/** Pipeline database record ID — injected as PIPELINE_ID env var for autonomous synth */
|
|
@@ -223,6 +223,13 @@ export class PipelineBuilder extends Construct {
|
|
|
223
223
|
if (props.pipelineId) {
|
|
224
224
|
Tags.of(this.pipeline).add('PIPELINE_EVENT_ID', props.pipelineId);
|
|
225
225
|
}
|
|
226
|
+
// Optional deploy-environment attribution for DORA metrics. Mirrors the
|
|
227
|
+
// PIPELINE_EVENT_ID tag: applied at synth so it's present from stack
|
|
228
|
+
// creation, and read by the events Lambda from the same ListTags call.
|
|
229
|
+
// Absent when `environment` is unset — legacy pipelines report unchanged.
|
|
230
|
+
if (props.environment) {
|
|
231
|
+
Tags.of(this.pipeline).add('Environment', props.environment);
|
|
232
|
+
}
|
|
226
233
|
if (props.tags) {
|
|
227
234
|
for (const [key, value] of Object.entries(props.tags)) {
|
|
228
235
|
Tags.of(this.pipeline).add(key, value);
|
|
@@ -378,4 +385,4 @@ export class PipelineBuilder extends Construct {
|
|
|
378
385
|
};
|
|
379
386
|
}
|
|
380
387
|
}
|
|
381
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9waXBlbGluZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEtBQUssVUFBVSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEcsT0FBTyxLQUFLLE1BQU0sTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssT0FBTyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2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QyxrQkFBa0IsSUFBSSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztZQUNsRixzRUFBc0U7WUFDdEUsdURBQXVEO1lBQ3ZELEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixLQUFLLEdBQUcsSUFBSTtnQkFDdEQsNEJBQTRCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO2FBQzdDLENBQUM7U0FDSCxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUc7WUFDckIsR0FBRyxDQUFDLFlBQVksRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxFQUFFLENBQUM7U0FDcEMsQ0FBQztRQUVGLE9BQU87WUFDTCxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM3RixHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQztZQUNwRCxxRUFBcUU7WUFDckUsd0RBQXdEO1lBQ3hELHVFQUF1RTtZQUN2RSxtRUFBbUU7WUFDbkUsK0RBQStEO1lBQy9ELGlFQUFpRTtZQUNqRSxnQkFBZ0IsRUFBRTtnQkFDaEIsVUFBVSxFQUFFLHdCQUF3QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7Z0JBQ2pELG9CQUFvQixFQUFFLGVBQWU7YUFDdEM7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMsIFBpcGVsaW5lVHlwZSwgVmFyaWFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgeyBDb2RlUGlwZWxpbmUsIHR5cGUgQ29kZUJ1aWxkT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFBpcGVsaW5lQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGlwZWxpbmUtY29uZmlndXJhdGlvbi5qcyc7XG5pbXBvcnQgeyBQbHVnaW5Mb29rdXAgfSBmcm9tICcuL3BsdWdpbi1sb29rdXAuanMnO1xuaW1wb3J0IHsgU291cmNlQnVpbGRlciB9IGZyb20gJy4vc291cmNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgU3RhZ2VCdWlsZGVyIH0gZnJvbSAnLi9zdGFnZS1idWlsZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VPcHRpb25zLCBTeW50aE9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWdpc3RyeUNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9jb25maWctdHlwZXMuanMnO1xuaW1wb3J0IHsgQXJ0aWZhY3RNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9hcnRpZmFjdC1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZS9pZC1nZW5lcmF0b3IuanMnO1xuaW1wb3J0IHtcbiAgYXNJbnQsXG4gIG1ldGFkYXRhRm9yQ29kZVBpcGVsaW5lLFxuICBuZXR3b3JrQ29uZmlnRnJvbU1ldGFkYXRhLFxuICBwYXJzZVBpcGVsaW5lVmFyaWFibGVzLFxuICByb2xlQ29uZmlnRnJvbU1ldGFkYXRhLFxuICBzZWN1cml0eUdyb3VwQ29uZmlnRnJvbU1ldGFkYXRhLFxufSBmcm9tICcuLi9jb3JlL21ldGFkYXRhLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQnVpbGREZWZhdWx0cyB9IGZyb20gJy4uL2NvcmUvbmV0d29yay10eXBlcy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlTmV0d29yaywgbmV0d29ya0NvbmZpZ0Zyb21FbnYgfSBmcm9tICcuLi9jb3JlL25ldHdvcmsuanMnO1xuaW1wb3J0IHsgY3JlYXRlQ29kZUJ1aWxkU3RlcCwgcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS1oZWxwZXJzLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhS2V5cywgVHJpZ2dlclR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTWV0YURhdGFUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJvbGVDb25maWcgfSBmcm9tICcuLi9jb3JlL3JvbGUtdHlwZXMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVJvbGUgfSBmcm9tICcuLi9jb3JlL3JvbGUuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVNlY3VyaXR5R3JvdXAgfSBmcm9tICcuLi9jb3JlL3NlY3VyaXR5LWdyb3VwLmpzJztcblxuY29uc3QgUElQRUxJTkVfRVZFTlRfTUFQOiBSZWNvcmQ8c3RyaW5nLCBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cz4gPSB7XG4gIEZBSUxFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgU1VDQ0VFREVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1VDQ0VFREVELFxuICBTVEFSVEVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1RBUlRFRCxcbiAgQ0FOQ0VMRUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9DQU5DRUxFRCxcbiAgU1VQRVJTRURFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX1NVUEVSU0VERUQsXG59O1xuXG5mdW5jdGlvbiBwYXJzZU5vdGlmaWNhdGlvbkV2ZW50cyh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gIHJldHVybiBbJ0ZBSUxFRCcsICdTVUNDRUVERUQnXTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBQaXBlbGluZUJ1aWxkZXIgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclByb3BzIHtcbiAgLyoqIFByb2plY3QgaWRlbnRpZmllciAod2lsbCBiZSBzYW5pdGl6ZWQgdG8gbG93ZXJjYXNlIGFscGhhbnVtZXJpYyB3aXRoIHVuZGVyc2NvcmVzKSAqL1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG5cbiAgLyoqIE9yZ2FuaXphdGlvbiBpZGVudGlmaWVyICh3aWxsIGJlIHNhbml0aXplZCB0byBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggdW5kZXJzY29yZXMpICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIFBpcGVsaW5lIGRhdGFiYXNlIHJlY29yZCBJRCDigJQgaW5qZWN0ZWQgYXMgUElQRUxJTkVfSUQgZW52IHZhciBmb3IgYXV0b25vbW91cyBzeW50aCAqL1xuICByZWFkb25seSBwaXBlbGluZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBjdXN0b20gcGlwZWxpbmUgbmFtZS4gRGVmYXVsdHMgdG86IHtvcmdhbml6YXRpb259LXtwcm9qZWN0fS1waXBlbGluZSAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIEdsb2JhbCBtZXRhZGF0YSBpbmhlcml0ZWQgYnkgYWxsIHBpcGVsaW5lIHN0ZXBzICovXG4gIHJlYWRvbmx5IGdsb2JhbD86IE1ldGFEYXRhVHlwZTtcblxuICAvKipcbiAgICogUGlwZWxpbmUtbGV2ZWwgdGVtcGxhdGUgdmFyaWFibGVzLCBleHBvc2VkIHRvIGB7eyBwaXBlbGluZS52YXJzLiogfX1gIGluXG4gICAqIHBpcGVsaW5lIGNvbmZpZ3MgYW5kIHBsdWdpbiBzcGVjcyAoc2VlIGBQbHVnaW5TcGVjLnJlcXVpcmVkVmFyc2ApLiBEZWNsYXJlZFxuICAgKiBoZXJlIHNvIHRoZSBgcGlwZWxpbmUudmFyc2AgdGVtcGxhdGUgc2NvcGUgaXMgdHlwZS1jaGVja2VkIGVuZC10by1lbmQuXG4gICAqL1xuICByZWFkb25seSB2YXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIENvZGVCdWlsZCBkZWZhdWx0cyBhcHBsaWVkIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9uc1xuICAgKiAoc3ludGgsIHNlbGYtbXV0YXRpb24sIGFzc2V0IHB1Ymxpc2hpbmcpIHZpYSBgY29kZUJ1aWxkRGVmYXVsdHNgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdHM/OiBDb2RlQnVpbGREZWZhdWx0cztcblxuICAvKipcbiAgICogT3B0aW9uYWwgSUFNIHJvbGUgZm9yIHRoZSBDb2RlUGlwZWxpbmUuXG4gICAqIFdoZW4gcHJvdmlkZWQsIHJlc29sdmVzIHRvIGEgQ0RLIElSb2xlIGFuZCBpcyBwYXNzZWQgdG8gdGhlIENvZGVQaXBlbGluZSBjb25zdHJ1Y3QuXG4gICAqIFdoZW4gb21pdHRlZCwgQ0RLIGF1dG8tY3JlYXRlcyBhIHJvbGUgd2l0aCB0aGUgY29ycmVjdCBjb2RlcGlwZWxpbmUuYW1hem9uYXdzLmNvbSBwcmluY2lwYWwuXG4gICAqL1xuICByZWFkb25seSByb2xlPzogUm9sZUNvbmZpZztcblxuICAvKiogU3ludGhlc2lzIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHNvdXJjZSBhbmQgcGx1Z2luIGRldGFpbHMgKi9cbiAgcmVhZG9ubHkgc3ludGg6IFN5bnRoT3B0aW9ucztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcGlwZWxpbmUgc3RhZ2VzLCBlYWNoIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgQ29kZUJ1aWxkIHN0ZXBzLlxuICAgKiBTdGFnZXMgYXJlIGFkZGVkIGFzIHdhdmVzIHRvIHRoZSBDb2RlUGlwZWxpbmUgYWZ0ZXIgdGhlIHN5bnRoIHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBzdGFnZXM/OiBTdGFnZU9wdGlvbnNbXTtcblxuICAvKiogT3B0aW9uYWwgY3Jvbi9yYXRlIGV4cHJlc3Npb24gZm9yIHNjaGVkdWxlZCBwaXBlbGluZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogc3RyaW5nO1xuXG4gIC8qKiBDdXN0b20gdGFncyBhcHBsaWVkIHRvIGFsbCBwaXBlbGluZSByZXNvdXJjZXMuICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLFxuICAgKiBrZXllZCBieSBgYWxpYXMgfHwgbmFtZWAuIFdoZW4gcHJlc2VudCwgYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAgcmV0dXJuc1xuICAgKiB0aGUgbWF0Y2hpbmcgZW50cnkgZGlyZWN0bHkgYW5kIHNraXBzIHRoZSBjdXN0b20gcmVzb3VyY2Ug4oCUIHNvIHRoZVxuICAgKiBzeW50aGVzaXplZCBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAqIFBvcHVsYXRlZCBieSB0aGUgQ0xJIGJlZm9yZSBpbnZva2luZyB0aGUgYm9pbGVycGxhdGUgYXBwOyBDREsgY29uc3VtZXJzXG4gICAqIHdobyBjb25zdHJ1Y3QgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIC8qKlxuICAgKiBQbGF0Zm9ybS1zb3VyY2VkIHJlZ2lzdHJ5IG92ZXJyaWRlcywgYXBwbGllZCBvdmVyIHRoZSBlbnYtbG9hZGVkIGByZWdpc3RyeWBcbiAgICogY29uZmlnIGF0IHN5bnRoIHN0YXJ0LiBwaXBlbGluZS1tYW5hZ2VyIHBvcHVsYXRlcyB0aGlzIGZyb20gdGhlIHBsYXRmb3JtIFVSTFxuICAgKiBpdCBkZXBsb3lzIGFnYWluc3Qgc28gdGhlIENvZGVCdWlsZCBpbWFnZSBVUklzIHVzZSBhIHB1bGwgaG9zdCBBV1MgQ29kZUJ1aWxkXG4gICAqIGNhbiByZXNvbHZlIChpbnN0ZWFkIG9mIHRoZSBpbi1jbHVzdGVyIGByZWdpc3RyeTo1MDAwYCBkZWZhdWx0KS4gQ0RLXG4gICAqIGNvbnN1bWVycyBjb25zdHJ1Y3RpbmcgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZWdpc3RyeT86IFBhcnRpYWw8UmVnaXN0cnlDb25maWc+O1xufVxuXG4vKipcbiAqIENESyBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGFuZCBjb25maWd1cmVzIGEgQ29kZVBpcGVsaW5lIGZvciBjb250aW51b3VzIGRlcGxveW1lbnQuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIE11bHRpLXNvdXJjZSBzdXBwb3J0IChTMywgR2l0SHViLCBDb2RlU3RhcilcbiAqIC0gUGx1Z2luLWJhc2VkIGJ1aWxkIHN0ZXBzXG4gKiAtIE1ldGFkYXRhLWRyaXZlbiBjb25maWd1cmF0aW9uXG4gKiAtIEF1dG9tYXRpYyB0YWdnaW5nXG4gKiAtIEF1dG9tYXRpYyBzYW5pdGl6YXRpb24gb2YgcHJvamVjdCBhbmQgb3JnYW5pemF0aW9uIG5hbWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG5ldyBQaXBlbGluZUJ1aWxkZXIodGhpcywgJ015UGlwZWxpbmUnLCB7XG4gKiAgIHByb2plY3Q6ICdteS1hcHAnLFxuICogICBvcmdhbml6YXRpb246ICdteS1vcmcnLFxuICogICBzeW50aDoge1xuICogICAgIHNvdXJjZToge1xuICogICAgICAgdHlwZTogJ2dpdGh1YicsXG4gKiAgICAgICBvcHRpb25zOiB7IHJlcG86ICdvd25lci9yZXBvJywgYnJhbmNoOiAnbWFpbicgfVxuICogICAgIH0sXG4gKiAgICAgcGx1Z2luOiB7IG5hbWU6ICdzeW50aCcgfVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVCdWlsZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBDb2RlUGlwZWxpbmU7XG4gIHB1YmxpYyByZWFkb25seSBjb25maWc6IFBpcGVsaW5lQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEFwcGx5IHBsYXRmb3JtLXNvdXJjZWQgcmVnaXN0cnkgb3ZlcnJpZGVzIEJFRk9SRSBhbnkgQ29uZmlnLmdldCgncmVnaXN0cnknKVxuICAgIC8vIChwbHVnaW4vZGVmYXVsdCBidWlsZC1pbWFnZSByZXNvbHV0aW9uIGJlbG93KSBzbyB0aGUgc3ludGggdXNlcyB0aGUgcHVsbFxuICAgIC8vIGhvc3QgdGhlIHBsYXRmb3JtIGRlcGxveXMgYWdhaW5zdCwgbm90IHRoZSBpbi1jbHVzdGVyIGVudiBkZWZhdWx0LiBUaGUgQ0xJXG4gICAgLy8gb25seSBzZXRzIHByb3BzLnJlZ2lzdHJ5IHdoZW4gSU1BR0VfUkVHSVNUUllfUFVMTF9IT1NUIGlzIHVuc2V0LCBzbyBhblxuICAgIC8vIGV4cGxpY2l0IG9wZXJhdG9yIHB1bGwgaG9zdCBpcyBuZXZlciBjbG9iYmVyZWQgKHNlZSBiYWtlUGxhdGZvcm1SZWdpc3RyeSkuXG4gICAgLy9cbiAgICAvLyBTY29wZWQgKyByZXN0b3JlZCBzbyB0aGUgb3ZlcnJpZGUgZG9lcyBOT1QgbGVhayBpbnRvIHRoZSBwcm9jZXNzLXdpZGVcbiAgICAvLyBDb25maWcgY2FjaGU6IGluIGEgbXVsdGktcGlwZWxpbmUgQ0RLIGFwcCwgcGlwZWxpbmUgQidzIHJlZ2lzdHJ5IG11c3Qgbm90XG4gICAgLy8gYmxlZWQgaW50byBwaXBlbGluZSBBJ3MgaW1hZ2UgcmVzb2x1dGlvbi4gQWxsIHJlZ2lzdHJ5IHJlYWRzIGhhcHBlblxuICAgIC8vIHN5bmNocm9ub3VzbHkgYmVsb3cgKGJ1aWxkLWltYWdlIHJlc29sdXRpb24pLCBzbyByZXN0b3JpbmcgYXQgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBrZWVwcyBzaW5nbGUtcGlwZWxpbmUgYmVoYXZpb3IgaWRlbnRpY2FsLlxuICAgIGNvbnN0IHJlc3RvcmVSZWdpc3RyeSA9IHByb3BzLnJlZ2lzdHJ5XG4gICAgICA/IENvbmZpZy5vdmVycmlkZVNjb3BlZCgncmVnaXN0cnknLCBwcm9wcy5yZWdpc3RyeSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgUGlwZWxpbmVDb25maWd1cmF0aW9uIGZvciBhbGwgYnVzaW5lc3MgbG9naWMgKHZhbGlkYXRpb24sIHNhbml0aXphdGlvbiwgbWV0YWRhdGEgbWVyZ2luZylcbiAgICAgIHRoaXMuY29uZmlnID0gbmV3IFBpcGVsaW5lQ29uZmlndXJhdGlvbihwcm9wcyk7XG5cbiAgICAgIGNvbnN0IHNlcnZlckNvbmZpZyA9IENvbmZpZy5nZXQoJ3NlcnZlcicpO1xuICAgICAgY29uc3QgYXdzQ29uZmlnID0gQ29uZmlnLmdldCgnYXdzJyk7XG4gICAgICAvLyBQYXNzIG9yZytwcm9qZWN0IHNvIGxvZyBncm91cCAvIElBTSByb2xlIG5hbWVzIGdldCBhIHN0YWJsZSBoYXNoXG4gICAgICAvLyBzdWZmaXggcGVyIHBpcGVsaW5lLiBQcmV2ZW50cyBgUmVzb3VyY2UgYWxyZWFkeSBleGlzdHNgIGNvbGxpc2lvbnNcbiAgICAgIC8vIGFjcm9zcyBzdGFja3MgZGVwbG95ZWQgdG8gdGhlIHNhbWUgQVdTIGFjY291bnQuXG4gICAgICBjb25zdCB1bmlxdWVJZCA9IG5ldyBVbmlxdWVJZCh7XG4gICAgICAgIG9yZ2FuaXphdGlvbjogdGhpcy5jb25maWcub3JnYW5pemF0aW9uLFxuICAgICAgICBwcm9qZWN0OiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwbHVnaW5Mb29rdXAgPSBuZXcgUGx1Z2luTG9va3VwKFxuICAgICAgICB0aGlzLFxuICAgICAgICB1bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLFxuICAgICAgICB7XG4gICAgICAgICAgb3JnYW5pemF0aW9uOiB0aGlzLmNvbmZpZy5vcmdhbml6YXRpb24sXG4gICAgICAgICAgcHJvamVjdDogdGhpcy5jb25maWcucHJvamVjdCxcbiAgICAgICAgICBwbGF0Zm9ybVVybDogc2VydmVyQ29uZmlnLnBsYXRmb3JtVXJsLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIG9yZ0lkOiBwcm9wcy5vcmdJZCxcbiAgICAgICAgICBydW50aW1lOiBhd3NDb25maWcubGFtYmRhLnJ1bnRpbWUsXG4gICAgICAgICAgdGltZW91dDogYXdzQ29uZmlnLmxhbWJkYS50aW1lb3V0LFxuICAgICAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IGF3c0NvbmZpZy5sYW1iZGEucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICAgICAgICByZXNvbHZlZFBsdWdpbnM6IHByb3BzLnJlc29sdmVkUGx1Z2lucyxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIENyZWF0ZSBzb3VyY2UgYW5kIGJ1aWxkIHN0ZXBcbiAgICAgIGNvbnN0IHNvdXJjZUJ1aWxkZXIgPSBuZXcgU291cmNlQnVpbGRlcih0aGlzLCB0aGlzLmNvbmZpZyk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VCdWlsZGVyLmNyZWF0ZSh1bmlxdWVJZCk7XG5cbiAgICAgIC8vIFN5bnRoLXBsdWdpbiByZXNvbHV0aW9uOlxuICAgICAgLy8gICAxLiBQcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgc3ludGgvZGVwbG95YCBmcm9tIHRoZSBwbGF0Zm9ybVxuICAgICAgLy8gICAgICBBUEkg4oaSIHVzZSBpdC4gU3ludGggc3RlcCBydW5zIG9uIHRoZSByZWFsIGBjZGstc3ludGhgIGltYWdlIHdpdGhcbiAgICAgIC8vICAgICAgcmVhbCBjb21tYW5kcyBiYWtlZCBpbnRvIHRoZSB0ZW1wbGF0ZS5cbiAgICAgIC8vICAgMi4gT3RoZXJ3aXNlIOKGkiBgYm9vdHN0cmFwKClgOiBjb2xkLXN0YXJ0IGBwaXBlbGluZS1tYW5hZ2VyIHN5bnRoYFxuICAgICAgLy8gICAgICBvbiB0aGUgY29uZmlndXJlZCBDT0RFQlVJTERfREVGQVVMVF9JTUFHRSAoZGVmYXVsdFxuICAgICAgLy8gICAgICBwaXBlbGluZS1ib290c3RyYXA6MS4wKS4gVXNlZCB3aGVuIHRoZSBwbGF0Zm9ybSBpc24ndCByZWFjaGFibGVcbiAgICAgIC8vICAgICAgYXQgc3ludGggdGltZSAoQ0xJIGxvZ3MgYSB3YXJuaW5nIHBlciBtaXNzZWQgcGx1Z2luKS5cbiAgICAgIC8vXG4gICAgICAvLyBwbHVnaW5Mb29rdXAucGx1Z2luKCkgcmVhZHMgYHJlc29sdmVkUGx1Z2luc2AgaW50ZXJuYWxseSBhbmQgcmV0dXJuc1xuICAgICAgLy8gdGhlIGNhY2hlZCBlbnRyeSB3aGVuIHByZXNlbnQg4oCUIHNvIGNhbGxpbmcgaXQgYWx3YXlzIHdpbnMgb3ZlclxuICAgICAgLy8gYm9vdHN0cmFwKCkgd2hlbiBwcmUtcmVzb2x1dGlvbiBzdWNjZWVkZWQuXG4gICAgICBjb25zdCBzeW50aENhY2hlS2V5ID1cbiAgICAgIHRoaXMuY29uZmlnLnBsdWdpbi5hbGlhcyB8fCBgJHt0aGlzLmNvbmZpZy5wbHVnaW4ubmFtZX0tYWxpYXNgO1xuICAgICAgY29uc3QgcGx1Z2luID0gcHJvcHMucmVzb2x2ZWRQbHVnaW5zPy5bc3ludGhDYWNoZUtleV1cbiAgICAgICAgPyBwbHVnaW5Mb29rdXAucGx1Z2luKHRoaXMuY29uZmlnLnBsdWdpbilcbiAgICAgICAgOiBwbHVnaW5Mb29rdXAuYm9vdHN0cmFwKCk7XG4gICAgICBjb25zdCBkZWZhdWx0Q29tcHV0ZVR5cGUgPSBhd3NDb25maWcuY29kZUJ1aWxkLmNvbXB1dGVUeXBlO1xuICAgICAgY29uc3QgYXJ0aWZhY3RNYW5hZ2VyID0gbmV3IEFydGlmYWN0TWFuYWdlcigpO1xuICAgICAgY29uc3Qgc3ludGhBbGlhcyA9IHRoaXMuY29uZmlnLnBsdWdpbi5hbGlhcyA/PyB0aGlzLmNvbmZpZy5wbHVnaW4ubmFtZTtcblxuICAgICAgLy8gU2NvcGUgZXhwb3NlZCB0byBwbHVnaW4tc3BlYyB0ZW1wbGF0ZXMgYXMgYHBpcGVsaW5lLipgLiBCdWlsdCBvbmNlXG4gICAgICAvLyBoZXJlIHNvIGJvdGggdGhlIHN5bnRoIHN0ZXAgYW5kIGV2ZXJ5IHN0YWdlIHN0ZXAgcmVzb2x2ZSBhZ2FpbnN0XG4gICAgICAvLyB0aGUgc2FtZSBzbmFwc2hvdC5cbiAgICAgIGNvbnN0IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBwaXBlbGluZToge1xuICAgICAgICAgIHByb2plY3ROYW1lOiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgICAgIHByb2plY3Q6IHRoaXMuY29uZmlnLnByb2plY3QsXG4gICAgICAgICAgb3JnSWQ6IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICBvcmdhbml6YXRpb246IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICBwaXBlbGluZU5hbWU6IHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgICBtZXRhZGF0YTogdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkLFxuICAgICAgICAgIHZhcnM6IHByb3BzLnZhcnMgPz8ge30sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzeW50aCA9IGNyZWF0ZUNvZGVCdWlsZFN0ZXAoe1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5zeW50aEN1c3RvbWl6YXRpb24sXG4gICAgICAgIGlkOiB1bmlxdWVJZC5nZW5lcmF0ZSgnY2RrOnN5bnRoJyksXG4gICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICBwbHVnaW4sXG4gICAgICAgIGlucHV0OiBzb3VyY2UsXG4gICAgICAgIG1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgIG5ldHdvcms6IHRoaXMuY29uZmlnLm5ldHdvcmssXG4gICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICBkZWZhdWx0Q29tcHV0ZVR5cGUsXG4gICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgc3RhZ2VOYW1lOiAnbm8tc3RhZ2UnLFxuICAgICAgICBzdGFnZUFsaWFzOiAnbm8tc3RhZ2UtYWxpYXMnLFxuICAgICAgICBwbHVnaW5BbGlhczogYCR7c3ludGhBbGlhc30tYWxpYXNgLFxuICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgIHBpcGVsaW5lU2NvcGUsXG4gICAgICB9KTtcblxuICAgICAgLy8gUmVzb2x2ZSBwaXBlbGluZS1sZXZlbCBkZWZhdWx0cyBpbnRvIGNvZGVCdWlsZERlZmF1bHRzXG4gICAgICAvLyBCdWlsZCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQgbmFtZSBmb3IgQ29kZUJ1aWxkIGVudiB2YXJzXG4gICAgICBjb25zdCBwbGF0Zm9ybVNlY3JldE5hbWUgPSBwcm9wcy5vcmdJZFxuICAgICAgICA/IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChwcm9wcy5vcmdJZCwgJ3BsYXRmb3JtJylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGNvZGVCdWlsZERlZmF1bHRzID0gdGhpcy5yZXNvbHZlRGVmYXVsdHModGhpcy5jb25maWcuZGVmYXVsdHMsIHVuaXF1ZUlkLCBwcm9wcy5waXBlbGluZUlkLCBwbGF0Zm9ybVNlY3JldE5hbWUsIHNlcnZlckNvbmZpZy5wbGF0Zm9ybVVybCwgcHJvcHMub3JnSWQpO1xuXG4gICAgICAvLyBSZXNvbHZlIElBTSByb2xlOiBleHBsaWNpdCBwcm9wIHdpbnMsIGVsc2UgYGlhbTpyb2xlYCBtZXRhZGF0YSwgZWxzZSBsZXRcbiAgICAgIC8vIENESyBhdXRvLWNyZWF0ZSB0aGUgcGlwZWxpbmUgcm9sZSAoY29kZXBpcGVsaW5lLmFtYXpvbmF3cy5jb20gcHJpbmNpcGFsKS5cbiAgICAgIGNvbnN0IHJvbGVDb25maWcgPSBwcm9wcy5yb2xlID8/IHJvbGVDb25maWdGcm9tTWV0YWRhdGEodGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkKTtcbiAgICAgIGlmIChyb2xlQ29uZmlnPy50eXBlID09PSAnY29kZUJ1aWxkRGVmYXVsdCcpIHtcbiAgICAgICAgY3JlYXRlTG9nZ2VyKCdwaXBlbGluZS1idWlsZGVyJykud2FybihcbiAgICAgICAgICAnY29kZUJ1aWxkRGVmYXVsdCByb2xlIHR5cGUgdXNlcyBjb2RlYnVpbGQuYW1hem9uYXdzLmNvbSB0cnVzdCBwcmluY2lwYWwg4oCUICcgK1xuICAgICAgICAndGhpcyBpcyBub3Qgc3VpdGFibGUgYXMgdGhlIHBpcGVsaW5lLWxldmVsIHJvbGUuIENvbnNpZGVyIHVzaW5nIHJvbGVBcm4vcm9sZU5hbWUgJyArXG4gICAgICAgICdvciBvbWl0dGluZyB0aGUgcm9sZSB0byBsZXQgQ0RLIGF1dG8tY3JlYXRlIG9uZSB3aXRoIGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByb2xlID0gcm9sZUNvbmZpZ1xuICAgICAgICA/IHJlc29sdmVSb2xlKHRoaXMsIHVuaXF1ZUlkLCByb2xlQ29uZmlnKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8g4pSA4pSAIEFydGlmYWN0IGJ1Y2tldCAoS01TIGVuY3J5cHRpb24gKyByZXRlbnRpb24pIOKUgOKUgFxuICAgICAgLy8gV2hlbiBgZW5jcnlwdGlvbi5rbXNLZXlBcm5gIGFuZC9vciBgb3BlcmF0aW9ucy5hcnRpZmFjdFJldGVudGlvbkRheXNgIGFyZVxuICAgICAgLy8gc2V0IHdlIGNyZWF0ZSBhIGN1c3RvbSBhcnRpZmFjdCBidWNrZXQgYW5kIHBhc3MgaXQgdG8gQ29kZVBpcGVsaW5lOyB0aGF0XG4gICAgICAvLyBpcyB0aGUgb25seSB3YXkgdG8gYXR0YWNoIGEgY3VzdG9tZXItbWFuYWdlZCBrZXkgKHRoZSBMMyBjb25zdHJ1Y3QgZXhwb3Nlc1xuICAgICAgLy8gYGFydGlmYWN0QnVja2V0YCwgbm90IGBlbmNyeXB0aW9uS2V5YCkuIEFic2VudCBib3RoIGtleXMsIENESyBhdXRvLWNyZWF0ZXNcbiAgICAgIC8vIHRoZSBidWNrZXQgYW5kIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gdGhpcy5idWlsZEFydGlmYWN0QnVja2V0KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBDb2RlUGlwZWxpbmUgY29uc3RydWN0XG4gICAgICB0aGlzLnBpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCB1bmlxdWVJZC5nZW5lcmF0ZSgncGlwZWxpbmVzOmNvZGVwaXBlbGluZScpLCB7XG4gICAgICAgIC4uLihjb2RlQnVpbGREZWZhdWx0cyAmJiB7IGNvZGVCdWlsZERlZmF1bHRzIH0pLFxuICAgICAgICAuLi4ocm9sZSAmJiB7IHJvbGUgfSksXG4gICAgICAgIC4uLihhcnRpZmFjdEJ1Y2tldCAmJiB7IGFydGlmYWN0QnVja2V0IH0pLFxuICAgICAgICBwaXBlbGluZVR5cGU6IFBpcGVsaW5lVHlwZS5WMixcbiAgICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUsXG4gICAgICAgIHN5bnRoLFxuICAgICAgICAuLi5tZXRhZGF0YUZvckNvZGVQaXBlbGluZSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChwcm9wcy5zdGFnZXMpIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VCdWlsZGVyID0gbmV3IFN0YWdlQnVpbGRlcih7XG4gICAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgICAgcGx1Z2luTG9va3VwLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIGdsb2JhbE1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgICAgZGVmYXVsdENvbXB1dGVUeXBlLFxuICAgICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgICAgcGlwZWxpbmVTY29wZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YWdlQnVpbGRlci5hZGRTdGFnZXModGhpcy5waXBlbGluZSwgcHJvcHMuc3RhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFRhZ3Mg4pSA4pSAXG4gICAgICAvLyBUaGUgZmlyc3QgdGhyZWUgYXJlIG9wZXJhdGlvbnMtZXNzZW50aWFsIGFuZCB1c2VkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyXG4gICAgICAvLyBhdWRpdC1zdGFja3NgIHRvIGRpZmYgQ0ZOIHN0YWNrcyBhZ2FpbnN0IHRoZSBwaXBlbGluZV9yZWdpc3RyeSB0YWJsZS5cbiAgICAgIC8vIGBPcmdJZGAgaXMgdGhlIGNhbm9uaWNhbCBrZXkgZm9yIGNvc3QgYXR0cmlidXRpb24gKEFXUyBDb3N0IEV4cGxvcmVyXG4gICAgICAvLyBncm91cHMgYnkgdGFnIGtleS92YWx1ZSB3aGVuIGFjdGl2YXRlZCBpbiBCaWxsaW5nIHNldHRpbmdzKS5cbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwaXBlbGluZS1idWlsZGVyJywgJ3RydWUnKTtcbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwcm9qZWN0JywgdGhpcy5jb25maWcucHJvamVjdCk7XG4gICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnb3JnYW5pemF0aW9uJywgdGhpcy5jb25maWcub3JnYW5pemF0aW9uKTtcbiAgICAgIGlmIChwcm9wcy5vcmdJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnT3JnSWQnLCBwcm9wcy5vcmdJZCk7XG4gICAgICB9XG4gICAgICAvLyBTdGFibGUgZXZlbnQtcmVwb3J0aW5nIGtleS4gQXBwbGllZCBhdCBzeW50aCAodGhlIHBpcGVsaW5lSWQgaXMga25vd25cbiAgICAgIC8vIGhlcmUpLCBzbyBpdCdzIHByZXNlbnQgZnJvbSBzdGFjayBjcmVhdGlvbiDigJQgdGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhpc1xuICAgICAgLy8gdGFnIHRvIGF0dHJpYnV0ZSBDb2RlUGlwZWxpbmUgc3RhdGUtY2hhbmdlIGV2ZW50cyB0byB0aGUgcGlwZWxpbmUgd2l0aG91dFxuICAgICAgLy8gZXZlciBoYW5kbGluZyB0aGUgQVJOL2FjY291bnQuIFNlZSBwYWNrYWdlcy9waXBlbGluZS1ldmVudHMuXG4gICAgICBpZiAocHJvcHMucGlwZWxpbmVJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnUElQRUxJTkVfRVZFTlRfSUQnLCBwcm9wcy5waXBlbGluZUlkKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy50YWdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLnRhZ3MpKSB7XG4gICAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgdGhlIGludGVybmFsIHBpcGVsaW5lIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIHByb3BlcnRpZXNcbiAgICAgIHRoaXMucGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuICAgICAgY29uc3QgY2RrUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLnBpcGVsaW5lO1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lLWxldmVsIFZhcmlhYmxlcyAoQ29kZVBpcGVsaW5lIFYyKSDilIDilIBcbiAgICAgIGZvciAoY29uc3QgdiBvZiBwYXJzZVBpcGVsaW5lVmFyaWFibGVzKG1ldGFbTWV0YWRhdGFLZXlzLlBJUEVMSU5FX1ZBUklBQkxFU10pKSB7XG4gICAgICAgIGNka1BpcGVsaW5lLmFkZFZhcmlhYmxlKG5ldyBWYXJpYWJsZSh7XG4gICAgICAgICAgdmFyaWFibGVOYW1lOiB2Lm5hbWUsXG4gICAgICAgICAgLi4uKHYuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgeyBkZWZhdWx0VmFsdWU6IHYuZGVmYXVsdFZhbHVlIH0pLFxuICAgICAgICAgIC4uLih2LmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZXNjcmlwdGlvbjogdi5kZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgU05TIE5vdGlmaWNhdGlvbnMg4pSA4pSAXG4gICAgICBjb25zdCBub3RpZmljYXRpb25Ub3BpY0FybiA9IG1ldGFbTWV0YWRhdGFLZXlzLk5PVElGSUNBVElPTl9UT1BJQ19BUk5dO1xuICAgICAgaWYgKHR5cGVvZiBub3RpZmljYXRpb25Ub3BpY0FybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdG9waWMgPSBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdOb3RpZmljYXRpb25Ub3BpYycsIG5vdGlmaWNhdGlvblRvcGljQXJuKTtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uRXZlbnRzID0gcGFyc2VOb3RpZmljYXRpb25FdmVudHMobWV0YVtNZXRhZGF0YUtleXMuTk9USUZJQ0FUSU9OX0VWRU5UU10pXG4gICAgICAgICAgLm1hcChlID0+IFBJUEVMSU5FX0VWRU5UX01BUFtlLnRvVXBwZXJDYXNlKCldKVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgIGlmIChub3RpZmljYXRpb25FdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNka1BpcGVsaW5lLm5vdGlmeU9uKCdQaXBlbGluZU5vdGlmaWNhdGlvbicsIHRvcGljLCB7IGV2ZW50czogbm90aWZpY2F0aW9uRXZlbnRzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOKUgOKUgCBTY2hlZHVsZWQgRXhlY3V0aW9uIOKUgOKUgFxuICAgICAgaWYgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zPy50cmlnZ2VyID09PSBUcmlnZ2VyVHlwZS5TQ0hFRFVMRSB8fCBwcm9wcy5zY2hlZHVsZSkge1xuICAgICAgICBjb25zdCBleHByID0gcHJvcHMuc2NoZWR1bGUgfHwgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zIGFzIHsgc2NoZWR1bGU/OiBzdHJpbmcgfSk/LnNjaGVkdWxlIHx8ICdyYXRlKDEgZGF5KSc7XG4gICAgICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnU2NoZWR1bGVSdWxlJywge1xuICAgICAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbihleHByKSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKGNka1BpcGVsaW5lKV0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgRXhlY3V0aW9uIEV2ZW50IFRyYWNraW5nIChmb3J3YXJkIHBpcGVsaW5lIHN0YXRlIGNoYW5nZXMgdG8gU05TKSDilIDilIBcbiAgICAgIGlmIChtZXRhW01ldGFkYXRhS2V5cy5FTkFCTEVfRVhFQ1VUSU9OX0VWRU5UU10gJiYgdHlwZW9mIG5vdGlmaWNhdGlvblRvcGljQXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0V4ZWN1dGlvbkV2ZW50UnVsZScsIHtcbiAgICAgICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgICAgIHNvdXJjZTogWydhd3MuY29kZXBpcGVsaW5lJ10sXG4gICAgICAgICAgICBkZXRhaWxUeXBlOiBbJ0NvZGVQaXBlbGluZSBQaXBlbGluZSBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJ10sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtjZGtQaXBlbGluZS5waXBlbGluZUFybl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuU25zVG9waWMoXG4gICAgICAgICAgICBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdFeGVjdXRpb25FdmVudFRvcGljJywgbm90aWZpY2F0aW9uVG9waWNBcm4pLFxuICAgICAgICAgICldLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lIE1ldHJpY3MgJiBBbGFybXMg4pSA4pSAXG4gICAgICBjb25zdCBlbmFibGVNZXRyaWNzID0gdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkW01ldGFkYXRhS2V5cy5FTkFCTEVfTUVUUklDU107XG4gICAgICBpZiAoZW5hYmxlTWV0cmljcykge1xuICAgICAgICBuZXcgY2xvdWR3YXRjaC5BbGFybSh0aGlzLCAnUGlwZWxpbmVGYWlsdXJlQWxhcm0nLCB7XG4gICAgICAgICAgbWV0cmljOiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiAnQVdTL0NvZGVQaXBlbGluZScsXG4gICAgICAgICAgICBtZXRyaWNOYW1lOiAnRmFpbGVkUGlwZWxpbmVFeGVjdXRpb25Db3VudCcsXG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7IFBpcGVsaW5lTmFtZTogdGhpcy5jb25maWcucGlwZWxpbmVOYW1lIH0sXG4gICAgICAgICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBgUGlwZWxpbmUgJHt0aGlzLmNvbmZpZy5waXBlbGluZU5hbWV9IGV4ZWN1dGlvbiBmYWlsZWRgLFxuICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBjbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJldmVydCB0aGUgcGVyLWJ1aWxkZXIgcmVnaXN0cnkgb3ZlcnJpZGUgc28gaXQgbmV2ZXIgbGVha3MgaW50byB0aGVcbiAgICAgIC8vIHByb2Nlc3Mtd2lkZSBDb25maWcgY2FjaGUgKHNlZSB0aGUgb3ZlcnJpZGUgYXQgdGhlIHRvcCBvZiB0aGUgY29uc3RydWN0b3IpLlxuICAgICAgcmVzdG9yZVJlZ2lzdHJ5Py4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjdXN0b20gYXJ0aWZhY3QgYnVja2V0IHdoZW4gYGVuY3J5cHRpb24ua21zS2V5QXJuYCBhbmQvb3JcbiAgICogYG9wZXJhdGlvbnMuYXJ0aWZhY3RSZXRlbnRpb25EYXlzYCBhcmUgc2V0LiBSZXR1cm5zIHVuZGVmaW5lZCBvdGhlcndpc2Ugc29cbiAgICogQ0RLIGF1dG8tY3JlYXRlcyB0aGUgZGVmYXVsdCBhcnRpZmFjdCBidWNrZXQgKHVuY2hhbmdlZCBiZWhhdmlvcikuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQXJ0aWZhY3RCdWNrZXQoKTogczMuSUJ1Y2tldCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcbiAgICBjb25zdCBrbXNLZXlBcm4gPSB0eXBlb2YgbWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dID09PSAnc3RyaW5nJ1xuICAgICAgPyAobWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dIGFzIHN0cmluZylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJldGVudGlvbkRheXMgPSBhc0ludChtZXRhW01ldGFkYXRhS2V5cy5BUlRJRkFDVF9SRVRFTlRJT05fREFZU10pO1xuXG4gICAgaWYgKCFrbXNLZXlBcm4gJiYgcmV0ZW50aW9uRGF5cyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGttc0tleUFyblxuICAgICAgPyBrbXMuS2V5LmZyb21LZXlBcm4odGhpcywgJ0FydGlmYWN0S2V5Jywga21zS2V5QXJuKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBidWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsICdBcnRpZmFjdEJ1Y2tldCcsIHtcbiAgICAgIGVuY3J5cHRpb246IGVuY3J5cHRpb25LZXkgPyBzMy5CdWNrZXRFbmNyeXB0aW9uLktNUyA6IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIC4uLihlbmNyeXB0aW9uS2V5ICYmIHsgZW5jcnlwdGlvbktleSB9KSxcbiAgICAgIC4uLihyZXRlbnRpb25EYXlzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBsaWZlY3ljbGVSdWxlczogW3sgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cyhyZXRlbnRpb25EYXlzKSB9XSxcbiAgICAgIH0pLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKGJ1Y2tldCkuYWRkKCdwaXBlbGluZScsIHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSk7XG4gICAgcmV0dXJuIGJ1Y2tldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBDb2RlQnVpbGREZWZhdWx0cyBpbnRvIHRoZSBzaGFwZSBleHBlY3RlZCBieSBDREsncyBjb2RlQnVpbGREZWZhdWx0cy5cbiAgICogQ29tYmluZXMgbmV0d29yayBjb25maWcsIHNlY3VyaXR5IGdyb3VwcywgYW5kIHBpcGVsaW5lLWxldmVsIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiAoUElQRUxJTkVfSUQsIEVYRUNVVElPTl9JRCwgUExBVEZPUk1fQkFTRV9VUkwpIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVEZWZhdWx0cyhcbiAgICBkZWZhdWx0czogQ29kZUJ1aWxkRGVmYXVsdHMgfCB1bmRlZmluZWQsXG4gICAgaWQ6IFVuaXF1ZUlkLFxuICAgIHBpcGVsaW5lSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVNlY3JldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVVybDogc3RyaW5nLFxuICAgIG9yZ0lkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IENvZGVCdWlsZE9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIC8vIFBlci1waXBlbGluZSBuZXR3b3JrIGNvbmZpZyB3aW5zOyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFuIGVudi1kcml2ZW5cbiAgICAvLyBnbG9iYWwgVlBDIChpbnRlcm5hbCAvIGluc2lkZS1BV1Mtb25seSBtb2RlKSBzbyBldmVyeSBwaXBlbGluZSdzXG4gICAgLy8gQ29kZUJ1aWxkIHJ1bnMgaW4gdGhlIFZQQyBhbmQgY2FuIHJlYWNoIHRoZSBwcml2YXRlIGdhdGV3YXkuIFVuc2V0IGluXG4gICAgLy8gcHVibGljIGRlcGxveXMg4oaSIENvZGVCdWlsZCBzdGF5cyBpbiB0aGUgQVdTLW1hbmFnZWQgbmV0d29yay5cbiAgICAvLyBQcmVjZWRlbmNlOiBleHBsaWNpdCBwcm9wID4gYGVjMjpuZXR3b3JrYCBtZXRhZGF0YSA+IGVudi1kcml2ZW4gZ2xvYmFsIFZQQy5cbiAgICBjb25zdCBuZXR3b3JrID0gZGVmYXVsdHM/Lm5ldHdvcmsgPz8gbmV0d29ya0NvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpID8/IG5ldHdvcmtDb25maWdGcm9tRW52KCk7XG4gICAgY29uc3QgbmV0d29ya1Byb3BzID0gbmV0d29ya1xuICAgICAgPyByZXNvbHZlTmV0d29yayh0aGlzLCBpZCwgbmV0d29yaylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gU2FtZSBwcmVjZWRlbmNlIGZvciBzdGFuZGFsb25lIHNlY3VyaXR5IGdyb3VwcyAocHJvcCA+IGBlYzI6c2VjdXJpdHlncm91cGAgbWV0YWRhdGEpLlxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBDb25maWcgPSBkZWZhdWx0cz8uc2VjdXJpdHlHcm91cHMgPz8gc2VjdXJpdHlHcm91cENvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpO1xuICAgIGNvbnN0IHN0YW5kYWxvbmVTZWN1cml0eUdyb3VwcyA9IHNlY3VyaXR5R3JvdXBDb25maWdcbiAgICAgID8gcmVzb2x2ZVNlY3VyaXR5R3JvdXAodGhpcywgaWQsIHNlY3VyaXR5R3JvdXBDb25maWcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFBpcGVsaW5lLWxldmVsIGVudiB2YXJzIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnNcbiAgICAvLyBOb3RlOiAje2NvZGVwaXBlbGluZS4qfSByZXNvbHZlZCB2YXJpYWJsZXMgbXVzdCBnbyB0aHJvdWdoIENvZGVCdWlsZFN0ZXAuZW52XG4gICAgLy8gKGFjdGlvbi1sZXZlbCksIG5vdCBidWlsZEVudmlyb25tZW50LmVudmlyb25tZW50VmFyaWFibGVzIChwcm9qZWN0LWxldmVsKS5cbiAgICBjb25zdCBwaXBlbGluZUVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiA9IHtcbiAgICAgIFBMQVRGT1JNX0JBU0VfVVJMOiB7IHZhbHVlOiBwbGF0Zm9ybVVybCB9LFxuICAgICAgLi4uKHBpcGVsaW5lSWQgJiYgeyBQSVBFTElORV9JRDogeyB2YWx1ZTogcGlwZWxpbmVJZCB9IH0pLFxuICAgICAgLi4uKHBsYXRmb3JtU2VjcmV0TmFtZSAmJiB7IFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiB7IHZhbHVlOiBwbGF0Zm9ybVNlY3JldE5hbWUgfSB9KSxcbiAgICAgIC8vIFByb3BhZ2F0ZSBUTFMgdmVyaWZpY2F0aW9uIHNldHRpbmcgc28gYWxsIENvZGVCdWlsZCBzdGVwcyBjYW4gcmVhY2hcbiAgICAgIC8vIHRoZSBwbGF0Zm9ybSBBUEkgd2hlbiB1c2luZyBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXNcbiAgICAgIC4uLihwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCcgJiYge1xuICAgICAgICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEOiB7IHZhbHVlOiAnMCcgfSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IFtcbiAgICAgIC4uLihuZXR3b3JrUHJvcHM/LnNlY3VyaXR5R3JvdXBzID8/IFtdKSxcbiAgICAgIC4uLihzdGFuZGFsb25lU2VjdXJpdHlHcm91cHMgPz8gW10pLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKG5ldHdvcmtQcm9wcyAmJiB7IHZwYzogbmV0d29ya1Byb3BzLnZwYywgc3VibmV0U2VsZWN0aW9uOiBuZXR3b3JrUHJvcHMuc3VibmV0U2VsZWN0aW9uIH0pLFxuICAgICAgLi4uKHNlY3VyaXR5R3JvdXBzLmxlbmd0aCA+IDAgJiYgeyBzZWN1cml0eUdyb3VwcyB9KSxcbiAgICAgIC8vIGJ1aWxkSW1hZ2UgYXQgdGhpcyBsZXZlbCByZWFjaGVzIENESyBQaXBlbGluZXMnIGludGVybmFsbHktd3JhcHBlZFxuICAgICAgLy8gU2hlbGxTdGVwIENvZGVCdWlsZCBhY3Rpb24sIHdoaWNoIG90aGVyd2lzZSBoYXJkY29kZXNcbiAgICAgIC8vIENESydzIGRlZmF1bHQgY3VyYXRlZCBzdGFuZGFyZCBpbWFnZS4gU2V0dGluZyBpdCBoZXJlIGNsb3NlcyB0aGUgZ2FwXG4gICAgICAvLyBleHBvc2VkIGluIHRoZSBzYW1lIGVudiB2YXIgKGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWApIHRoYXQgdGhlXG4gICAgICAvLyBDb2RlQnVpbGRTdGVwIHBhdGggYWxyZWFkeSBob25vcnMgdmlhIHJlc29sdmVQbHVnaW5JbWFnZSgpJ3NcbiAgICAgIC8vIGZhbGxiYWNrLiBQZXItc3RlcCBgYnVpbGRJbWFnZWAgb24gYSBDb2RlQnVpbGRTdGVwIHN0aWxsIHdpbnMuXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZSh0aGlzLCBvcmdJZCksXG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiBwaXBlbGluZUVudlZhcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
388
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9waXBlbGluZS9waXBlbGluZS1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTFELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEtBQUssVUFBVSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEcsT0FBTyxLQUFLLE1BQU0sTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEtBQUssT0FBTyxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6QyxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQXlCLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2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c291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtZGF0YSc7XG5pbXBvcnQgeyBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSwgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnO1xuaW1wb3J0IHsgUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMsIFBpcGVsaW5lVHlwZSwgVmFyaWFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgeyBDb2RlUGlwZWxpbmUsIHR5cGUgQ29kZUJ1aWxkT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFBpcGVsaW5lQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGlwZWxpbmUtY29uZmlndXJhdGlvbi5qcyc7XG5pbXBvcnQgeyBQbHVnaW5Mb29rdXAgfSBmcm9tICcuL3BsdWdpbi1sb29rdXAuanMnO1xuaW1wb3J0IHsgU291cmNlQnVpbGRlciB9IGZyb20gJy4vc291cmNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgU3RhZ2VCdWlsZGVyIH0gZnJvbSAnLi9zdGFnZS1idWlsZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VPcHRpb25zLCBTeW50aE9wdGlvbnMgfSBmcm9tICcuL3N0ZXAtdHlwZXMuanMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDb3JlQ29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWdpc3RyeUNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZy9jb25maWctdHlwZXMuanMnO1xuaW1wb3J0IHsgQXJ0aWZhY3RNYW5hZ2VyIH0gZnJvbSAnLi4vY29yZS9hcnRpZmFjdC1tYW5hZ2VyLmpzJztcbmltcG9ydCB7IFVuaXF1ZUlkIH0gZnJvbSAnLi4vY29yZS9pZC1nZW5lcmF0b3IuanMnO1xuaW1wb3J0IHtcbiAgYXNJbnQsXG4gIG1ldGFkYXRhRm9yQ29kZVBpcGVsaW5lLFxuICBuZXR3b3JrQ29uZmlnRnJvbU1ldGFkYXRhLFxuICBwYXJzZVBpcGVsaW5lVmFyaWFibGVzLFxuICByb2xlQ29uZmlnRnJvbU1ldGFkYXRhLFxuICBzZWN1cml0eUdyb3VwQ29uZmlnRnJvbU1ldGFkYXRhLFxufSBmcm9tICcuLi9jb3JlL21ldGFkYXRhLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBDb2RlQnVpbGREZWZhdWx0cyB9IGZyb20gJy4uL2NvcmUvbmV0d29yay10eXBlcy5qcyc7XG5pbXBvcnQgeyByZXNvbHZlTmV0d29yaywgbmV0d29ya0NvbmZpZ0Zyb21FbnYgfSBmcm9tICcuLi9jb3JlL25ldHdvcmsuanMnO1xuaW1wb3J0IHsgY3JlYXRlQ29kZUJ1aWxkU3RlcCwgcmVzb2x2ZURlZmF1bHRCdWlsZEltYWdlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS1oZWxwZXJzLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhS2V5cywgVHJpZ2dlclR5cGUgfSBmcm9tICcuLi9jb3JlL3BpcGVsaW5lLXR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTWV0YURhdGFUeXBlIH0gZnJvbSAnLi4vY29yZS9waXBlbGluZS10eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJvbGVDb25maWcgfSBmcm9tICcuLi9jb3JlL3JvbGUtdHlwZXMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVJvbGUgfSBmcm9tICcuLi9jb3JlL3JvbGUuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVNlY3VyaXR5R3JvdXAgfSBmcm9tICcuLi9jb3JlL3NlY3VyaXR5LWdyb3VwLmpzJztcblxuY29uc3QgUElQRUxJTkVfRVZFTlRfTUFQOiBSZWNvcmQ8c3RyaW5nLCBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cz4gPSB7XG4gIEZBSUxFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX0ZBSUxFRCxcbiAgU1VDQ0VFREVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1VDQ0VFREVELFxuICBTVEFSVEVEOiBQaXBlbGluZU5vdGlmaWNhdGlvbkV2ZW50cy5QSVBFTElORV9FWEVDVVRJT05fU1RBUlRFRCxcbiAgQ0FOQ0VMRUQ6IFBpcGVsaW5lTm90aWZpY2F0aW9uRXZlbnRzLlBJUEVMSU5FX0VYRUNVVElPTl9DQU5DRUxFRCxcbiAgU1VQRVJTRURFRDogUGlwZWxpbmVOb3RpZmljYXRpb25FdmVudHMuUElQRUxJTkVfRVhFQ1VUSU9OX1NVUEVSU0VERUQsXG59O1xuXG5mdW5jdGlvbiBwYXJzZU5vdGlmaWNhdGlvbkV2ZW50cyh2YWx1ZTogdW5rbm93bik6IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWUuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gIHJldHVybiBbJ0ZBSUxFRCcsICdTVUNDRUVERUQnXTtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBQaXBlbGluZUJ1aWxkZXIgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRlclByb3BzIHtcbiAgLyoqIFByb2plY3QgaWRlbnRpZmllciAod2lsbCBiZSBzYW5pdGl6ZWQgdG8gbG93ZXJjYXNlIGFscGhhbnVtZXJpYyB3aXRoIHVuZGVyc2NvcmVzKSAqL1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG5cbiAgLyoqIE9yZ2FuaXphdGlvbiBpZGVudGlmaWVyICh3aWxsIGJlIHNhbml0aXplZCB0byBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggdW5kZXJzY29yZXMpICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBkZXBsb3kgZW52aXJvbm1lbnQgKGUuZy4gYHByb2R1Y3Rpb25gLCBgc3RhZ2luZ2ApLiBXaGVuIHNldCwgaXQgaXNcbiAgICogYXBwbGllZCBhcyBhbiBgRW52aXJvbm1lbnRgIHRhZyBvbiB0aGUgcGlwZWxpbmUgc28gdGhlIGV2ZW50cyBMYW1iZGEgY2FuXG4gICAqIGF0dHJpYnV0ZSBDb2RlUGlwZWxpbmUgc3RhdGUtY2hhbmdlIGV2ZW50cyB0byBhIHJlYWwgZGVwbG95bWVudCBmb3IgRE9SQVxuICAgKiBtZXRyaWNzLiBQdXJlbHkgYWRkaXRpdmUg4oCUIG9taXQgaXQgYW5kIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBUZW5hbnQgaWRlbnRpZmllciBmb3IgcmVzb2x2aW5nIHBlci1vcmcgc2VjcmV0cyBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKi9cbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIFBpcGVsaW5lIGRhdGFiYXNlIHJlY29yZCBJRCDigJQgaW5qZWN0ZWQgYXMgUElQRUxJTkVfSUQgZW52IHZhciBmb3IgYXV0b25vbW91cyBzeW50aCAqL1xuICByZWFkb25seSBwaXBlbGluZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBPcHRpb25hbCBjdXN0b20gcGlwZWxpbmUgbmFtZS4gRGVmYXVsdHMgdG86IHtvcmdhbml6YXRpb259LXtwcm9qZWN0fS1waXBlbGluZSAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIEdsb2JhbCBtZXRhZGF0YSBpbmhlcml0ZWQgYnkgYWxsIHBpcGVsaW5lIHN0ZXBzICovXG4gIHJlYWRvbmx5IGdsb2JhbD86IE1ldGFEYXRhVHlwZTtcblxuICAvKipcbiAgICogUGlwZWxpbmUtbGV2ZWwgdGVtcGxhdGUgdmFyaWFibGVzLCBleHBvc2VkIHRvIGB7eyBwaXBlbGluZS52YXJzLiogfX1gIGluXG4gICAqIHBpcGVsaW5lIGNvbmZpZ3MgYW5kIHBsdWdpbiBzcGVjcyAoc2VlIGBQbHVnaW5TcGVjLnJlcXVpcmVkVmFyc2ApLiBEZWNsYXJlZFxuICAgKiBoZXJlIHNvIHRoZSBgcGlwZWxpbmUudmFyc2AgdGVtcGxhdGUgc2NvcGUgaXMgdHlwZS1jaGVja2VkIGVuZC10by1lbmQuXG4gICAqL1xuICByZWFkb25seSB2YXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFBpcGVsaW5lLWxldmVsIENvZGVCdWlsZCBkZWZhdWx0cyBhcHBsaWVkIHRvIGFsbCBDb2RlQnVpbGQgYWN0aW9uc1xuICAgKiAoc3ludGgsIHNlbGYtbXV0YXRpb24sIGFzc2V0IHB1Ymxpc2hpbmcpIHZpYSBgY29kZUJ1aWxkRGVmYXVsdHNgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdHM/OiBDb2RlQnVpbGREZWZhdWx0cztcblxuICAvKipcbiAgICogT3B0aW9uYWwgSUFNIHJvbGUgZm9yIHRoZSBDb2RlUGlwZWxpbmUuXG4gICAqIFdoZW4gcHJvdmlkZWQsIHJlc29sdmVzIHRvIGEgQ0RLIElSb2xlIGFuZCBpcyBwYXNzZWQgdG8gdGhlIENvZGVQaXBlbGluZSBjb25zdHJ1Y3QuXG4gICAqIFdoZW4gb21pdHRlZCwgQ0RLIGF1dG8tY3JlYXRlcyBhIHJvbGUgd2l0aCB0aGUgY29ycmVjdCBjb2RlcGlwZWxpbmUuYW1hem9uYXdzLmNvbSBwcmluY2lwYWwuXG4gICAqL1xuICByZWFkb25seSByb2xlPzogUm9sZUNvbmZpZztcblxuICAvKiogU3ludGhlc2lzIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIHNvdXJjZSBhbmQgcGx1Z2luIGRldGFpbHMgKi9cbiAgcmVhZG9ubHkgc3ludGg6IFN5bnRoT3B0aW9ucztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcGlwZWxpbmUgc3RhZ2VzLCBlYWNoIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgQ29kZUJ1aWxkIHN0ZXBzLlxuICAgKiBTdGFnZXMgYXJlIGFkZGVkIGFzIHdhdmVzIHRvIHRoZSBDb2RlUGlwZWxpbmUgYWZ0ZXIgdGhlIHN5bnRoIHN0ZXAuXG4gICAqL1xuICByZWFkb25seSBzdGFnZXM/OiBTdGFnZU9wdGlvbnNbXTtcblxuICAvKiogT3B0aW9uYWwgY3Jvbi9yYXRlIGV4cHJlc3Npb24gZm9yIHNjaGVkdWxlZCBwaXBlbGluZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogc3RyaW5nO1xuXG4gIC8qKiBDdXN0b20gdGFncyBhcHBsaWVkIHRvIGFsbCBwaXBlbGluZSByZXNvdXJjZXMuICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBQbHVnaW5zIHByZS1yZXNvbHZlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBzeW50aGAgZnJvbSB0aGUgcGxhdGZvcm0gQVBJLFxuICAgKiBrZXllZCBieSBgYWxpYXMgfHwgbmFtZWAuIFdoZW4gcHJlc2VudCwgYFBsdWdpbkxvb2t1cC5wbHVnaW4oKWAgcmV0dXJuc1xuICAgKiB0aGUgbWF0Y2hpbmcgZW50cnkgZGlyZWN0bHkgYW5kIHNraXBzIHRoZSBjdXN0b20gcmVzb3VyY2Ug4oCUIHNvIHRoZVxuICAgKiBzeW50aGVzaXplZCBDRk4gdGVtcGxhdGUgc2hpcHMgd2l0aCB0aGUgcmVhbCBDb2RlQnVpbGQgaW1hZ2UgYmFrZWQgaW4uXG4gICAqIFBvcHVsYXRlZCBieSB0aGUgQ0xJIGJlZm9yZSBpbnZva2luZyB0aGUgYm9pbGVycGxhdGUgYXBwOyBDREsgY29uc3VtZXJzXG4gICAqIHdobyBjb25zdHJ1Y3QgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlZFBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBQbHVnaW4+O1xuXG4gIC8qKlxuICAgKiBQbGF0Zm9ybS1zb3VyY2VkIHJlZ2lzdHJ5IG92ZXJyaWRlcywgYXBwbGllZCBvdmVyIHRoZSBlbnYtbG9hZGVkIGByZWdpc3RyeWBcbiAgICogY29uZmlnIGF0IHN5bnRoIHN0YXJ0LiBwaXBlbGluZS1tYW5hZ2VyIHBvcHVsYXRlcyB0aGlzIGZyb20gdGhlIHBsYXRmb3JtIFVSTFxuICAgKiBpdCBkZXBsb3lzIGFnYWluc3Qgc28gdGhlIENvZGVCdWlsZCBpbWFnZSBVUklzIHVzZSBhIHB1bGwgaG9zdCBBV1MgQ29kZUJ1aWxkXG4gICAqIGNhbiByZXNvbHZlIChpbnN0ZWFkIG9mIHRoZSBpbi1jbHVzdGVyIGByZWdpc3RyeTo1MDAwYCBkZWZhdWx0KS4gQ0RLXG4gICAqIGNvbnN1bWVycyBjb25zdHJ1Y3RpbmcgUGlwZWxpbmVCdWlsZGVyIGRpcmVjdGx5IG5vcm1hbGx5IGxlYXZlIHRoaXMgdW5zZXQuXG4gICAqL1xuICByZWFkb25seSByZWdpc3RyeT86IFBhcnRpYWw8UmVnaXN0cnlDb25maWc+O1xufVxuXG4vKipcbiAqIENESyBjb25zdHJ1Y3QgdGhhdCBjcmVhdGVzIGFuZCBjb25maWd1cmVzIGEgQ29kZVBpcGVsaW5lIGZvciBjb250aW51b3VzIGRlcGxveW1lbnQuXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIE11bHRpLXNvdXJjZSBzdXBwb3J0IChTMywgR2l0SHViLCBDb2RlU3RhcilcbiAqIC0gUGx1Z2luLWJhc2VkIGJ1aWxkIHN0ZXBzXG4gKiAtIE1ldGFkYXRhLWRyaXZlbiBjb25maWd1cmF0aW9uXG4gKiAtIEF1dG9tYXRpYyB0YWdnaW5nXG4gKiAtIEF1dG9tYXRpYyBzYW5pdGl6YXRpb24gb2YgcHJvamVjdCBhbmQgb3JnYW5pemF0aW9uIG5hbWVzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIG5ldyBQaXBlbGluZUJ1aWxkZXIodGhpcywgJ015UGlwZWxpbmUnLCB7XG4gKiAgIHByb2plY3Q6ICdteS1hcHAnLFxuICogICBvcmdhbml6YXRpb246ICdteS1vcmcnLFxuICogICBzeW50aDoge1xuICogICAgIHNvdXJjZToge1xuICogICAgICAgdHlwZTogJ2dpdGh1YicsXG4gKiAgICAgICBvcHRpb25zOiB7IHJlcG86ICdvd25lci9yZXBvJywgYnJhbmNoOiAnbWFpbicgfVxuICogICAgIH0sXG4gKiAgICAgcGx1Z2luOiB7IG5hbWU6ICdzeW50aCcgfVxuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVCdWlsZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHBpcGVsaW5lOiBDb2RlUGlwZWxpbmU7XG4gIHB1YmxpYyByZWFkb25seSBjb25maWc6IFBpcGVsaW5lQ29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIEFwcGx5IHBsYXRmb3JtLXNvdXJjZWQgcmVnaXN0cnkgb3ZlcnJpZGVzIEJFRk9SRSBhbnkgQ29uZmlnLmdldCgncmVnaXN0cnknKVxuICAgIC8vIChwbHVnaW4vZGVmYXVsdCBidWlsZC1pbWFnZSByZXNvbHV0aW9uIGJlbG93KSBzbyB0aGUgc3ludGggdXNlcyB0aGUgcHVsbFxuICAgIC8vIGhvc3QgdGhlIHBsYXRmb3JtIGRlcGxveXMgYWdhaW5zdCwgbm90IHRoZSBpbi1jbHVzdGVyIGVudiBkZWZhdWx0LiBUaGUgQ0xJXG4gICAgLy8gb25seSBzZXRzIHByb3BzLnJlZ2lzdHJ5IHdoZW4gSU1BR0VfUkVHSVNUUllfUFVMTF9IT1NUIGlzIHVuc2V0LCBzbyBhblxuICAgIC8vIGV4cGxpY2l0IG9wZXJhdG9yIHB1bGwgaG9zdCBpcyBuZXZlciBjbG9iYmVyZWQgKHNlZSBiYWtlUGxhdGZvcm1SZWdpc3RyeSkuXG4gICAgLy9cbiAgICAvLyBTY29wZWQgKyByZXN0b3JlZCBzbyB0aGUgb3ZlcnJpZGUgZG9lcyBOT1QgbGVhayBpbnRvIHRoZSBwcm9jZXNzLXdpZGVcbiAgICAvLyBDb25maWcgY2FjaGU6IGluIGEgbXVsdGktcGlwZWxpbmUgQ0RLIGFwcCwgcGlwZWxpbmUgQidzIHJlZ2lzdHJ5IG11c3Qgbm90XG4gICAgLy8gYmxlZWQgaW50byBwaXBlbGluZSBBJ3MgaW1hZ2UgcmVzb2x1dGlvbi4gQWxsIHJlZ2lzdHJ5IHJlYWRzIGhhcHBlblxuICAgIC8vIHN5bmNocm9ub3VzbHkgYmVsb3cgKGJ1aWxkLWltYWdlIHJlc29sdXRpb24pLCBzbyByZXN0b3JpbmcgYXQgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBrZWVwcyBzaW5nbGUtcGlwZWxpbmUgYmVoYXZpb3IgaWRlbnRpY2FsLlxuICAgIGNvbnN0IHJlc3RvcmVSZWdpc3RyeSA9IHByb3BzLnJlZ2lzdHJ5XG4gICAgICA/IENvbmZpZy5vdmVycmlkZVNjb3BlZCgncmVnaXN0cnknLCBwcm9wcy5yZWdpc3RyeSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgUGlwZWxpbmVDb25maWd1cmF0aW9uIGZvciBhbGwgYnVzaW5lc3MgbG9naWMgKHZhbGlkYXRpb24sIHNhbml0aXphdGlvbiwgbWV0YWRhdGEgbWVyZ2luZylcbiAgICAgIHRoaXMuY29uZmlnID0gbmV3IFBpcGVsaW5lQ29uZmlndXJhdGlvbihwcm9wcyk7XG5cbiAgICAgIGNvbnN0IHNlcnZlckNvbmZpZyA9IENvbmZpZy5nZXQoJ3NlcnZlcicpO1xuICAgICAgY29uc3QgYXdzQ29uZmlnID0gQ29uZmlnLmdldCgnYXdzJyk7XG4gICAgICAvLyBQYXNzIG9yZytwcm9qZWN0IHNvIGxvZyBncm91cCAvIElBTSByb2xlIG5hbWVzIGdldCBhIHN0YWJsZSBoYXNoXG4gICAgICAvLyBzdWZmaXggcGVyIHBpcGVsaW5lLiBQcmV2ZW50cyBgUmVzb3VyY2UgYWxyZWFkeSBleGlzdHNgIGNvbGxpc2lvbnNcbiAgICAgIC8vIGFjcm9zcyBzdGFja3MgZGVwbG95ZWQgdG8gdGhlIHNhbWUgQVdTIGFjY291bnQuXG4gICAgICBjb25zdCB1bmlxdWVJZCA9IG5ldyBVbmlxdWVJZCh7XG4gICAgICAgIG9yZ2FuaXphdGlvbjogdGhpcy5jb25maWcub3JnYW5pemF0aW9uLFxuICAgICAgICBwcm9qZWN0OiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwbHVnaW5Mb29rdXAgPSBuZXcgUGx1Z2luTG9va3VwKFxuICAgICAgICB0aGlzLFxuICAgICAgICB1bmlxdWVJZC5nZW5lcmF0ZSgncGx1Z2luOmxvb2t1cCcpLFxuICAgICAgICB7XG4gICAgICAgICAgb3JnYW5pemF0aW9uOiB0aGlzLmNvbmZpZy5vcmdhbml6YXRpb24sXG4gICAgICAgICAgcHJvamVjdDogdGhpcy5jb25maWcucHJvamVjdCxcbiAgICAgICAgICBwbGF0Zm9ybVVybDogc2VydmVyQ29uZmlnLnBsYXRmb3JtVXJsLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIG9yZ0lkOiBwcm9wcy5vcmdJZCxcbiAgICAgICAgICBydW50aW1lOiBhd3NDb25maWcubGFtYmRhLnJ1bnRpbWUsXG4gICAgICAgICAgdGltZW91dDogYXdzQ29uZmlnLmxhbWJkYS50aW1lb3V0LFxuICAgICAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM6IGF3c0NvbmZpZy5sYW1iZGEucmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICAgICAgICByZXNvbHZlZFBsdWdpbnM6IHByb3BzLnJlc29sdmVkUGx1Z2lucyxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIENyZWF0ZSBzb3VyY2UgYW5kIGJ1aWxkIHN0ZXBcbiAgICAgIGNvbnN0IHNvdXJjZUJ1aWxkZXIgPSBuZXcgU291cmNlQnVpbGRlcih0aGlzLCB0aGlzLmNvbmZpZyk7XG4gICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VCdWlsZGVyLmNyZWF0ZSh1bmlxdWVJZCk7XG5cbiAgICAgIC8vIFN5bnRoLXBsdWdpbiByZXNvbHV0aW9uOlxuICAgICAgLy8gICAxLiBQcmUtcmVzb2x2ZWQgYnkgYHBpcGVsaW5lLW1hbmFnZXIgc3ludGgvZGVwbG95YCBmcm9tIHRoZSBwbGF0Zm9ybVxuICAgICAgLy8gICAgICBBUEkg4oaSIHVzZSBpdC4gU3ludGggc3RlcCBydW5zIG9uIHRoZSByZWFsIGBjZGstc3ludGhgIGltYWdlIHdpdGhcbiAgICAgIC8vICAgICAgcmVhbCBjb21tYW5kcyBiYWtlZCBpbnRvIHRoZSB0ZW1wbGF0ZS5cbiAgICAgIC8vICAgMi4gT3RoZXJ3aXNlIOKGkiBgYm9vdHN0cmFwKClgOiBjb2xkLXN0YXJ0IGBwaXBlbGluZS1tYW5hZ2VyIHN5bnRoYFxuICAgICAgLy8gICAgICBvbiB0aGUgY29uZmlndXJlZCBDT0RFQlVJTERfREVGQVVMVF9JTUFHRSAoZGVmYXVsdFxuICAgICAgLy8gICAgICBwaXBlbGluZS1ib290c3RyYXA6MS4wKS4gVXNlZCB3aGVuIHRoZSBwbGF0Zm9ybSBpc24ndCByZWFjaGFibGVcbiAgICAgIC8vICAgICAgYXQgc3ludGggdGltZSAoQ0xJIGxvZ3MgYSB3YXJuaW5nIHBlciBtaXNzZWQgcGx1Z2luKS5cbiAgICAgIC8vXG4gICAgICAvLyBwbHVnaW5Mb29rdXAucGx1Z2luKCkgcmVhZHMgYHJlc29sdmVkUGx1Z2luc2AgaW50ZXJuYWxseSBhbmQgcmV0dXJuc1xuICAgICAgLy8gdGhlIGNhY2hlZCBlbnRyeSB3aGVuIHByZXNlbnQg4oCUIHNvIGNhbGxpbmcgaXQgYWx3YXlzIHdpbnMgb3ZlclxuICAgICAgLy8gYm9vdHN0cmFwKCkgd2hlbiBwcmUtcmVzb2x1dGlvbiBzdWNjZWVkZWQuXG4gICAgICBjb25zdCBzeW50aENhY2hlS2V5ID1cbiAgICAgIHRoaXMuY29uZmlnLnBsdWdpbi5hbGlhcyB8fCBgJHt0aGlzLmNvbmZpZy5wbHVnaW4ubmFtZX0tYWxpYXNgO1xuICAgICAgY29uc3QgcGx1Z2luID0gcHJvcHMucmVzb2x2ZWRQbHVnaW5zPy5bc3ludGhDYWNoZUtleV1cbiAgICAgICAgPyBwbHVnaW5Mb29rdXAucGx1Z2luKHRoaXMuY29uZmlnLnBsdWdpbilcbiAgICAgICAgOiBwbHVnaW5Mb29rdXAuYm9vdHN0cmFwKCk7XG4gICAgICBjb25zdCBkZWZhdWx0Q29tcHV0ZVR5cGUgPSBhd3NDb25maWcuY29kZUJ1aWxkLmNvbXB1dGVUeXBlO1xuICAgICAgY29uc3QgYXJ0aWZhY3RNYW5hZ2VyID0gbmV3IEFydGlmYWN0TWFuYWdlcigpO1xuICAgICAgY29uc3Qgc3ludGhBbGlhcyA9IHRoaXMuY29uZmlnLnBsdWdpbi5hbGlhcyA/PyB0aGlzLmNvbmZpZy5wbHVnaW4ubmFtZTtcblxuICAgICAgLy8gU2NvcGUgZXhwb3NlZCB0byBwbHVnaW4tc3BlYyB0ZW1wbGF0ZXMgYXMgYHBpcGVsaW5lLipgLiBCdWlsdCBvbmNlXG4gICAgICAvLyBoZXJlIHNvIGJvdGggdGhlIHN5bnRoIHN0ZXAgYW5kIGV2ZXJ5IHN0YWdlIHN0ZXAgcmVzb2x2ZSBhZ2FpbnN0XG4gICAgICAvLyB0aGUgc2FtZSBzbmFwc2hvdC5cbiAgICAgIGNvbnN0IHBpcGVsaW5lU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgICBwaXBlbGluZToge1xuICAgICAgICAgIHByb2plY3ROYW1lOiB0aGlzLmNvbmZpZy5wcm9qZWN0LFxuICAgICAgICAgIHByb2plY3Q6IHRoaXMuY29uZmlnLnByb2plY3QsXG4gICAgICAgICAgb3JnSWQ6IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICBvcmdhbml6YXRpb246IHRoaXMuY29uZmlnLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICBwaXBlbGluZU5hbWU6IHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgICBtZXRhZGF0YTogdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkLFxuICAgICAgICAgIHZhcnM6IHByb3BzLnZhcnMgPz8ge30sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBzeW50aCA9IGNyZWF0ZUNvZGVCdWlsZFN0ZXAoe1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5zeW50aEN1c3RvbWl6YXRpb24sXG4gICAgICAgIGlkOiB1bmlxdWVJZC5nZW5lcmF0ZSgnY2RrOnN5bnRoJyksXG4gICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICBwbHVnaW4sXG4gICAgICAgIGlucHV0OiBzb3VyY2UsXG4gICAgICAgIG1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgIG5ldHdvcms6IHRoaXMuY29uZmlnLm5ldHdvcmssXG4gICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICBkZWZhdWx0Q29tcHV0ZVR5cGUsXG4gICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgc3RhZ2VOYW1lOiAnbm8tc3RhZ2UnLFxuICAgICAgICBzdGFnZUFsaWFzOiAnbm8tc3RhZ2UtYWxpYXMnLFxuICAgICAgICBwbHVnaW5BbGlhczogYCR7c3ludGhBbGlhc30tYWxpYXNgLFxuICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgIHBpcGVsaW5lU2NvcGUsXG4gICAgICB9KTtcblxuICAgICAgLy8gUmVzb2x2ZSBwaXBlbGluZS1sZXZlbCBkZWZhdWx0cyBpbnRvIGNvZGVCdWlsZERlZmF1bHRzXG4gICAgICAvLyBCdWlsZCB0aGUgcGVyLW9yZyBwbGF0Zm9ybSBzZWNyZXQgbmFtZSBmb3IgQ29kZUJ1aWxkIGVudiB2YXJzXG4gICAgICBjb25zdCBwbGF0Zm9ybVNlY3JldE5hbWUgPSBwcm9wcy5vcmdJZFxuICAgICAgICA/IENvcmVDb25zdGFudHMuc2VjcmV0UGF0aChwcm9wcy5vcmdJZCwgJ3BsYXRmb3JtJylcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGNvZGVCdWlsZERlZmF1bHRzID0gdGhpcy5yZXNvbHZlRGVmYXVsdHModGhpcy5jb25maWcuZGVmYXVsdHMsIHVuaXF1ZUlkLCBwcm9wcy5waXBlbGluZUlkLCBwbGF0Zm9ybVNlY3JldE5hbWUsIHNlcnZlckNvbmZpZy5wbGF0Zm9ybVVybCwgcHJvcHMub3JnSWQpO1xuXG4gICAgICAvLyBSZXNvbHZlIElBTSByb2xlOiBleHBsaWNpdCBwcm9wIHdpbnMsIGVsc2UgYGlhbTpyb2xlYCBtZXRhZGF0YSwgZWxzZSBsZXRcbiAgICAgIC8vIENESyBhdXRvLWNyZWF0ZSB0aGUgcGlwZWxpbmUgcm9sZSAoY29kZXBpcGVsaW5lLmFtYXpvbmF3cy5jb20gcHJpbmNpcGFsKS5cbiAgICAgIGNvbnN0IHJvbGVDb25maWcgPSBwcm9wcy5yb2xlID8/IHJvbGVDb25maWdGcm9tTWV0YWRhdGEodGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkKTtcbiAgICAgIGlmIChyb2xlQ29uZmlnPy50eXBlID09PSAnY29kZUJ1aWxkRGVmYXVsdCcpIHtcbiAgICAgICAgY3JlYXRlTG9nZ2VyKCdwaXBlbGluZS1idWlsZGVyJykud2FybihcbiAgICAgICAgICAnY29kZUJ1aWxkRGVmYXVsdCByb2xlIHR5cGUgdXNlcyBjb2RlYnVpbGQuYW1hem9uYXdzLmNvbSB0cnVzdCBwcmluY2lwYWwg4oCUICcgK1xuICAgICAgICAndGhpcyBpcyBub3Qgc3VpdGFibGUgYXMgdGhlIHBpcGVsaW5lLWxldmVsIHJvbGUuIENvbnNpZGVyIHVzaW5nIHJvbGVBcm4vcm9sZU5hbWUgJyArXG4gICAgICAgICdvciBvbWl0dGluZyB0aGUgcm9sZSB0byBsZXQgQ0RLIGF1dG8tY3JlYXRlIG9uZSB3aXRoIGNvZGVwaXBlbGluZS5hbWF6b25hd3MuY29tLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCByb2xlID0gcm9sZUNvbmZpZ1xuICAgICAgICA/IHJlc29sdmVSb2xlKHRoaXMsIHVuaXF1ZUlkLCByb2xlQ29uZmlnKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8g4pSA4pSAIEFydGlmYWN0IGJ1Y2tldCAoS01TIGVuY3J5cHRpb24gKyByZXRlbnRpb24pIOKUgOKUgFxuICAgICAgLy8gV2hlbiBgZW5jcnlwdGlvbi5rbXNLZXlBcm5gIGFuZC9vciBgb3BlcmF0aW9ucy5hcnRpZmFjdFJldGVudGlvbkRheXNgIGFyZVxuICAgICAgLy8gc2V0IHdlIGNyZWF0ZSBhIGN1c3RvbSBhcnRpZmFjdCBidWNrZXQgYW5kIHBhc3MgaXQgdG8gQ29kZVBpcGVsaW5lOyB0aGF0XG4gICAgICAvLyBpcyB0aGUgb25seSB3YXkgdG8gYXR0YWNoIGEgY3VzdG9tZXItbWFuYWdlZCBrZXkgKHRoZSBMMyBjb25zdHJ1Y3QgZXhwb3Nlc1xuICAgICAgLy8gYGFydGlmYWN0QnVja2V0YCwgbm90IGBlbmNyeXB0aW9uS2V5YCkuIEFic2VudCBib3RoIGtleXMsIENESyBhdXRvLWNyZWF0ZXNcbiAgICAgIC8vIHRoZSBidWNrZXQgYW5kIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gdGhpcy5idWlsZEFydGlmYWN0QnVja2V0KCk7XG5cbiAgICAgIC8vIENyZWF0ZSBDb2RlUGlwZWxpbmUgY29uc3RydWN0XG4gICAgICB0aGlzLnBpcGVsaW5lID0gbmV3IENvZGVQaXBlbGluZSh0aGlzLCB1bmlxdWVJZC5nZW5lcmF0ZSgncGlwZWxpbmVzOmNvZGVwaXBlbGluZScpLCB7XG4gICAgICAgIC4uLihjb2RlQnVpbGREZWZhdWx0cyAmJiB7IGNvZGVCdWlsZERlZmF1bHRzIH0pLFxuICAgICAgICAuLi4ocm9sZSAmJiB7IHJvbGUgfSksXG4gICAgICAgIC4uLihhcnRpZmFjdEJ1Y2tldCAmJiB7IGFydGlmYWN0QnVja2V0IH0pLFxuICAgICAgICBwaXBlbGluZVR5cGU6IFBpcGVsaW5lVHlwZS5WMixcbiAgICAgICAgcGlwZWxpbmVOYW1lOiB0aGlzLmNvbmZpZy5waXBlbGluZU5hbWUsXG4gICAgICAgIHN5bnRoLFxuICAgICAgICAuLi5tZXRhZGF0YUZvckNvZGVQaXBlbGluZSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChwcm9wcy5zdGFnZXMpIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VCdWlsZGVyID0gbmV3IFN0YWdlQnVpbGRlcih7XG4gICAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgICAgcGx1Z2luTG9va3VwLFxuICAgICAgICAgIHVuaXF1ZUlkLFxuICAgICAgICAgIGdsb2JhbE1ldGFkYXRhOiB0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQsXG4gICAgICAgICAgZGVmYXVsdENvbXB1dGVUeXBlLFxuICAgICAgICAgIGFydGlmYWN0TWFuYWdlcixcbiAgICAgICAgICBvcmdJZDogcHJvcHMub3JnSWQsXG4gICAgICAgICAgcGlwZWxpbmVTY29wZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHN0YWdlQnVpbGRlci5hZGRTdGFnZXModGhpcy5waXBlbGluZSwgcHJvcHMuc3RhZ2VzKTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFRhZ3Mg4pSA4pSAXG4gICAgICAvLyBUaGUgZmlyc3QgdGhyZWUgYXJlIG9wZXJhdGlvbnMtZXNzZW50aWFsIGFuZCB1c2VkIGJ5IGBwaXBlbGluZS1tYW5hZ2VyXG4gICAgICAvLyBhdWRpdC1zdGFja3NgIHRvIGRpZmYgQ0ZOIHN0YWNrcyBhZ2FpbnN0IHRoZSBwaXBlbGluZV9yZWdpc3RyeSB0YWJsZS5cbiAgICAgIC8vIGBPcmdJZGAgaXMgdGhlIGNhbm9uaWNhbCBrZXkgZm9yIGNvc3QgYXR0cmlidXRpb24gKEFXUyBDb3N0IEV4cGxvcmVyXG4gICAgICAvLyBncm91cHMgYnkgdGFnIGtleS92YWx1ZSB3aGVuIGFjdGl2YXRlZCBpbiBCaWxsaW5nIHNldHRpbmdzKS5cbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwaXBlbGluZS1idWlsZGVyJywgJ3RydWUnKTtcbiAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdwcm9qZWN0JywgdGhpcy5jb25maWcucHJvamVjdCk7XG4gICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnb3JnYW5pemF0aW9uJywgdGhpcy5jb25maWcub3JnYW5pemF0aW9uKTtcbiAgICAgIGlmIChwcm9wcy5vcmdJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnT3JnSWQnLCBwcm9wcy5vcmdJZCk7XG4gICAgICB9XG4gICAgICAvLyBTdGFibGUgZXZlbnQtcmVwb3J0aW5nIGtleS4gQXBwbGllZCBhdCBzeW50aCAodGhlIHBpcGVsaW5lSWQgaXMga25vd25cbiAgICAgIC8vIGhlcmUpLCBzbyBpdCdzIHByZXNlbnQgZnJvbSBzdGFjayBjcmVhdGlvbiDigJQgdGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhpc1xuICAgICAgLy8gdGFnIHRvIGF0dHJpYnV0ZSBDb2RlUGlwZWxpbmUgc3RhdGUtY2hhbmdlIGV2ZW50cyB0byB0aGUgcGlwZWxpbmUgd2l0aG91dFxuICAgICAgLy8gZXZlciBoYW5kbGluZyB0aGUgQVJOL2FjY291bnQuIFNlZSBwYWNrYWdlcy9waXBlbGluZS1ldmVudHMuXG4gICAgICBpZiAocHJvcHMucGlwZWxpbmVJZCkge1xuICAgICAgICBUYWdzLm9mKHRoaXMucGlwZWxpbmUpLmFkZCgnUElQRUxJTkVfRVZFTlRfSUQnLCBwcm9wcy5waXBlbGluZUlkKTtcbiAgICAgIH1cbiAgICAgIC8vIE9wdGlvbmFsIGRlcGxveS1lbnZpcm9ubWVudCBhdHRyaWJ1dGlvbiBmb3IgRE9SQSBtZXRyaWNzLiBNaXJyb3JzIHRoZVxuICAgICAgLy8gUElQRUxJTkVfRVZFTlRfSUQgdGFnOiBhcHBsaWVkIGF0IHN5bnRoIHNvIGl0J3MgcHJlc2VudCBmcm9tIHN0YWNrXG4gICAgICAvLyBjcmVhdGlvbiwgYW5kIHJlYWQgYnkgdGhlIGV2ZW50cyBMYW1iZGEgZnJvbSB0aGUgc2FtZSBMaXN0VGFncyBjYWxsLlxuICAgICAgLy8gQWJzZW50IHdoZW4gYGVudmlyb25tZW50YCBpcyB1bnNldCDigJQgbGVnYWN5IHBpcGVsaW5lcyByZXBvcnQgdW5jaGFuZ2VkLlxuICAgICAgaWYgKHByb3BzLmVudmlyb25tZW50KSB7XG4gICAgICAgIFRhZ3Mub2YodGhpcy5waXBlbGluZSkuYWRkKCdFbnZpcm9ubWVudCcsIHByb3BzLmVudmlyb25tZW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy50YWdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLnRhZ3MpKSB7XG4gICAgICAgICAgVGFncy5vZih0aGlzLnBpcGVsaW5lKS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgdGhlIGludGVybmFsIHBpcGVsaW5lIGJlZm9yZSBhY2Nlc3NpbmcgaXRzIHByb3BlcnRpZXNcbiAgICAgIHRoaXMucGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuICAgICAgY29uc3QgY2RrUGlwZWxpbmUgPSB0aGlzLnBpcGVsaW5lLnBpcGVsaW5lO1xuICAgICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lLWxldmVsIFZhcmlhYmxlcyAoQ29kZVBpcGVsaW5lIFYyKSDilIDilIBcbiAgICAgIGZvciAoY29uc3QgdiBvZiBwYXJzZVBpcGVsaW5lVmFyaWFibGVzKG1ldGFbTWV0YWRhdGFLZXlzLlBJUEVMSU5FX1ZBUklBQkxFU10pKSB7XG4gICAgICAgIGNka1BpcGVsaW5lLmFkZFZhcmlhYmxlKG5ldyBWYXJpYWJsZSh7XG4gICAgICAgICAgdmFyaWFibGVOYW1lOiB2Lm5hbWUsXG4gICAgICAgICAgLi4uKHYuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgeyBkZWZhdWx0VmFsdWU6IHYuZGVmYXVsdFZhbHVlIH0pLFxuICAgICAgICAgIC4uLih2LmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZXNjcmlwdGlvbjogdi5kZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgU05TIE5vdGlmaWNhdGlvbnMg4pSA4pSAXG4gICAgICBjb25zdCBub3RpZmljYXRpb25Ub3BpY0FybiA9IG1ldGFbTWV0YWRhdGFLZXlzLk5PVElGSUNBVElPTl9UT1BJQ19BUk5dO1xuICAgICAgaWYgKHR5cGVvZiBub3RpZmljYXRpb25Ub3BpY0FybiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgdG9waWMgPSBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdOb3RpZmljYXRpb25Ub3BpYycsIG5vdGlmaWNhdGlvblRvcGljQXJuKTtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uRXZlbnRzID0gcGFyc2VOb3RpZmljYXRpb25FdmVudHMobWV0YVtNZXRhZGF0YUtleXMuTk9USUZJQ0FUSU9OX0VWRU5UU10pXG4gICAgICAgICAgLm1hcChlID0+IFBJUEVMSU5FX0VWRU5UX01BUFtlLnRvVXBwZXJDYXNlKCldKVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgIGlmIChub3RpZmljYXRpb25FdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNka1BpcGVsaW5lLm5vdGlmeU9uKCdQaXBlbGluZU5vdGlmaWNhdGlvbicsIHRvcGljLCB7IGV2ZW50czogbm90aWZpY2F0aW9uRXZlbnRzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIOKUgOKUgCBTY2hlZHVsZWQgRXhlY3V0aW9uIOKUgOKUgFxuICAgICAgaWYgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zPy50cmlnZ2VyID09PSBUcmlnZ2VyVHlwZS5TQ0hFRFVMRSB8fCBwcm9wcy5zY2hlZHVsZSkge1xuICAgICAgICBjb25zdCBleHByID0gcHJvcHMuc2NoZWR1bGUgfHwgKHByb3BzLnN5bnRoLnNvdXJjZS5vcHRpb25zIGFzIHsgc2NoZWR1bGU/OiBzdHJpbmcgfSk/LnNjaGVkdWxlIHx8ICdyYXRlKDEgZGF5KSc7XG4gICAgICAgIG5ldyBldmVudHMuUnVsZSh0aGlzLCAnU2NoZWR1bGVSdWxlJywge1xuICAgICAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbihleHByKSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKGNka1BpcGVsaW5lKV0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyDilIDilIAgRXhlY3V0aW9uIEV2ZW50IFRyYWNraW5nIChmb3J3YXJkIHBpcGVsaW5lIHN0YXRlIGNoYW5nZXMgdG8gU05TKSDilIDilIBcbiAgICAgIGlmIChtZXRhW01ldGFkYXRhS2V5cy5FTkFCTEVfRVhFQ1VUSU9OX0VWRU5UU10gJiYgdHlwZW9mIG5vdGlmaWNhdGlvblRvcGljQXJuID09PSAnc3RyaW5nJykge1xuICAgICAgICBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ0V4ZWN1dGlvbkV2ZW50UnVsZScsIHtcbiAgICAgICAgICBldmVudFBhdHRlcm46IHtcbiAgICAgICAgICAgIHNvdXJjZTogWydhd3MuY29kZXBpcGVsaW5lJ10sXG4gICAgICAgICAgICBkZXRhaWxUeXBlOiBbJ0NvZGVQaXBlbGluZSBQaXBlbGluZSBFeGVjdXRpb24gU3RhdGUgQ2hhbmdlJ10sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtjZGtQaXBlbGluZS5waXBlbGluZUFybl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0YXJnZXRzOiBbbmV3IHRhcmdldHMuU25zVG9waWMoXG4gICAgICAgICAgICBzbnMuVG9waWMuZnJvbVRvcGljQXJuKHRoaXMsICdFeGVjdXRpb25FdmVudFRvcGljJywgbm90aWZpY2F0aW9uVG9waWNBcm4pLFxuICAgICAgICAgICldLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8g4pSA4pSAIFBpcGVsaW5lIE1ldHJpY3MgJiBBbGFybXMg4pSA4pSAXG4gICAgICBjb25zdCBlbmFibGVNZXRyaWNzID0gdGhpcy5jb25maWcubWV0YWRhdGEubWVyZ2VkW01ldGFkYXRhS2V5cy5FTkFCTEVfTUVUUklDU107XG4gICAgICBpZiAoZW5hYmxlTWV0cmljcykge1xuICAgICAgICBuZXcgY2xvdWR3YXRjaC5BbGFybSh0aGlzLCAnUGlwZWxpbmVGYWlsdXJlQWxhcm0nLCB7XG4gICAgICAgICAgbWV0cmljOiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgICAgICAgbmFtZXNwYWNlOiAnQVdTL0NvZGVQaXBlbGluZScsXG4gICAgICAgICAgICBtZXRyaWNOYW1lOiAnRmFpbGVkUGlwZWxpbmVFeGVjdXRpb25Db3VudCcsXG4gICAgICAgICAgICBkaW1lbnNpb25zTWFwOiB7IFBpcGVsaW5lTmFtZTogdGhpcy5jb25maWcucGlwZWxpbmVOYW1lIH0sXG4gICAgICAgICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgICAgICAgICAgcGVyaW9kOiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBgUGlwZWxpbmUgJHt0aGlzLmNvbmZpZy5waXBlbGluZU5hbWV9IGV4ZWN1dGlvbiBmYWlsZWRgLFxuICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBjbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJldmVydCB0aGUgcGVyLWJ1aWxkZXIgcmVnaXN0cnkgb3ZlcnJpZGUgc28gaXQgbmV2ZXIgbGVha3MgaW50byB0aGVcbiAgICAgIC8vIHByb2Nlc3Mtd2lkZSBDb25maWcgY2FjaGUgKHNlZSB0aGUgb3ZlcnJpZGUgYXQgdGhlIHRvcCBvZiB0aGUgY29uc3RydWN0b3IpLlxuICAgICAgcmVzdG9yZVJlZ2lzdHJ5Py4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBjdXN0b20gYXJ0aWZhY3QgYnVja2V0IHdoZW4gYGVuY3J5cHRpb24ua21zS2V5QXJuYCBhbmQvb3JcbiAgICogYG9wZXJhdGlvbnMuYXJ0aWZhY3RSZXRlbnRpb25EYXlzYCBhcmUgc2V0LiBSZXR1cm5zIHVuZGVmaW5lZCBvdGhlcndpc2Ugc29cbiAgICogQ0RLIGF1dG8tY3JlYXRlcyB0aGUgZGVmYXVsdCBhcnRpZmFjdCBidWNrZXQgKHVuY2hhbmdlZCBiZWhhdmlvcikuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQXJ0aWZhY3RCdWNrZXQoKTogczMuSUJ1Y2tldCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuY29uZmlnLm1ldGFkYXRhLm1lcmdlZDtcbiAgICBjb25zdCBrbXNLZXlBcm4gPSB0eXBlb2YgbWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dID09PSAnc3RyaW5nJ1xuICAgICAgPyAobWV0YVtNZXRhZGF0YUtleXMuS01TX0tFWV9BUk5dIGFzIHN0cmluZylcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJldGVudGlvbkRheXMgPSBhc0ludChtZXRhW01ldGFkYXRhS2V5cy5BUlRJRkFDVF9SRVRFTlRJT05fREFZU10pO1xuXG4gICAgaWYgKCFrbXNLZXlBcm4gJiYgcmV0ZW50aW9uRGF5cyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbktleSA9IGttc0tleUFyblxuICAgICAgPyBrbXMuS2V5LmZyb21LZXlBcm4odGhpcywgJ0FydGlmYWN0S2V5Jywga21zS2V5QXJuKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBidWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsICdBcnRpZmFjdEJ1Y2tldCcsIHtcbiAgICAgIGVuY3J5cHRpb246IGVuY3J5cHRpb25LZXkgPyBzMy5CdWNrZXRFbmNyeXB0aW9uLktNUyA6IHMzLkJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICAgIC4uLihlbmNyeXB0aW9uS2V5ICYmIHsgZW5jcnlwdGlvbktleSB9KSxcbiAgICAgIC4uLihyZXRlbnRpb25EYXlzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBsaWZlY3ljbGVSdWxlczogW3sgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cyhyZXRlbnRpb25EYXlzKSB9XSxcbiAgICAgIH0pLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIGJsb2NrUHVibGljQWNjZXNzOiBzMy5CbG9ja1B1YmxpY0FjY2Vzcy5CTE9DS19BTEwsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogdHJ1ZSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKGJ1Y2tldCkuYWRkKCdwaXBlbGluZScsIHRoaXMuY29uZmlnLnBpcGVsaW5lTmFtZSk7XG4gICAgcmV0dXJuIGJ1Y2tldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBDb2RlQnVpbGREZWZhdWx0cyBpbnRvIHRoZSBzaGFwZSBleHBlY3RlZCBieSBDREsncyBjb2RlQnVpbGREZWZhdWx0cy5cbiAgICogQ29tYmluZXMgbmV0d29yayBjb25maWcsIHNlY3VyaXR5IGdyb3VwcywgYW5kIHBpcGVsaW5lLWxldmVsIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgKiAoUElQRUxJTkVfSUQsIEVYRUNVVElPTl9JRCwgUExBVEZPUk1fQkFTRV9VUkwpIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVEZWZhdWx0cyhcbiAgICBkZWZhdWx0czogQ29kZUJ1aWxkRGVmYXVsdHMgfCB1bmRlZmluZWQsXG4gICAgaWQ6IFVuaXF1ZUlkLFxuICAgIHBpcGVsaW5lSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVNlY3JldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBwbGF0Zm9ybVVybDogc3RyaW5nLFxuICAgIG9yZ0lkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IENvZGVCdWlsZE9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIC8vIFBlci1waXBlbGluZSBuZXR3b3JrIGNvbmZpZyB3aW5zOyBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFuIGVudi1kcml2ZW5cbiAgICAvLyBnbG9iYWwgVlBDIChpbnRlcm5hbCAvIGluc2lkZS1BV1Mtb25seSBtb2RlKSBzbyBldmVyeSBwaXBlbGluZSdzXG4gICAgLy8gQ29kZUJ1aWxkIHJ1bnMgaW4gdGhlIFZQQyBhbmQgY2FuIHJlYWNoIHRoZSBwcml2YXRlIGdhdGV3YXkuIFVuc2V0IGluXG4gICAgLy8gcHVibGljIGRlcGxveXMg4oaSIENvZGVCdWlsZCBzdGF5cyBpbiB0aGUgQVdTLW1hbmFnZWQgbmV0d29yay5cbiAgICAvLyBQcmVjZWRlbmNlOiBleHBsaWNpdCBwcm9wID4gYGVjMjpuZXR3b3JrYCBtZXRhZGF0YSA+IGVudi1kcml2ZW4gZ2xvYmFsIFZQQy5cbiAgICBjb25zdCBuZXR3b3JrID0gZGVmYXVsdHM/Lm5ldHdvcmsgPz8gbmV0d29ya0NvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpID8/IG5ldHdvcmtDb25maWdGcm9tRW52KCk7XG4gICAgY29uc3QgbmV0d29ya1Byb3BzID0gbmV0d29ya1xuICAgICAgPyByZXNvbHZlTmV0d29yayh0aGlzLCBpZCwgbmV0d29yaylcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gU2FtZSBwcmVjZWRlbmNlIGZvciBzdGFuZGFsb25lIHNlY3VyaXR5IGdyb3VwcyAocHJvcCA+IGBlYzI6c2VjdXJpdHlncm91cGAgbWV0YWRhdGEpLlxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXBDb25maWcgPSBkZWZhdWx0cz8uc2VjdXJpdHlHcm91cHMgPz8gc2VjdXJpdHlHcm91cENvbmZpZ0Zyb21NZXRhZGF0YSh0aGlzLmNvbmZpZy5tZXRhZGF0YS5tZXJnZWQpO1xuICAgIGNvbnN0IHN0YW5kYWxvbmVTZWN1cml0eUdyb3VwcyA9IHNlY3VyaXR5R3JvdXBDb25maWdcbiAgICAgID8gcmVzb2x2ZVNlY3VyaXR5R3JvdXAodGhpcywgaWQsIHNlY3VyaXR5R3JvdXBDb25maWcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFBpcGVsaW5lLWxldmVsIGVudiB2YXJzIGF2YWlsYWJsZSB0byBhbGwgQ29kZUJ1aWxkIGFjdGlvbnNcbiAgICAvLyBOb3RlOiAje2NvZGVwaXBlbGluZS4qfSByZXNvbHZlZCB2YXJpYWJsZXMgbXVzdCBnbyB0aHJvdWdoIENvZGVCdWlsZFN0ZXAuZW52XG4gICAgLy8gKGFjdGlvbi1sZXZlbCksIG5vdCBidWlsZEVudmlyb25tZW50LmVudmlyb25tZW50VmFyaWFibGVzIChwcm9qZWN0LWxldmVsKS5cbiAgICBjb25zdCBwaXBlbGluZUVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHN0cmluZyB9PiA9IHtcbiAgICAgIFBMQVRGT1JNX0JBU0VfVVJMOiB7IHZhbHVlOiBwbGF0Zm9ybVVybCB9LFxuICAgICAgLi4uKHBpcGVsaW5lSWQgJiYgeyBQSVBFTElORV9JRDogeyB2YWx1ZTogcGlwZWxpbmVJZCB9IH0pLFxuICAgICAgLi4uKHBsYXRmb3JtU2VjcmV0TmFtZSAmJiB7IFBMQVRGT1JNX1NFQ1JFVF9OQU1FOiB7IHZhbHVlOiBwbGF0Zm9ybVNlY3JldE5hbWUgfSB9KSxcbiAgICAgIC8vIFByb3BhZ2F0ZSBUTFMgdmVyaWZpY2F0aW9uIHNldHRpbmcgc28gYWxsIENvZGVCdWlsZCBzdGVwcyBjYW4gcmVhY2hcbiAgICAgIC8vIHRoZSBwbGF0Zm9ybSBBUEkgd2hlbiB1c2luZyBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXNcbiAgICAgIC4uLihwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCcgJiYge1xuICAgICAgICBOT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEOiB7IHZhbHVlOiAnMCcgfSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IFtcbiAgICAgIC4uLihuZXR3b3JrUHJvcHM/LnNlY3VyaXR5R3JvdXBzID8/IFtdKSxcbiAgICAgIC4uLihzdGFuZGFsb25lU2VjdXJpdHlHcm91cHMgPz8gW10pLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKG5ldHdvcmtQcm9wcyAmJiB7IHZwYzogbmV0d29ya1Byb3BzLnZwYywgc3VibmV0U2VsZWN0aW9uOiBuZXR3b3JrUHJvcHMuc3VibmV0U2VsZWN0aW9uIH0pLFxuICAgICAgLi4uKHNlY3VyaXR5R3JvdXBzLmxlbmd0aCA+IDAgJiYgeyBzZWN1cml0eUdyb3VwcyB9KSxcbiAgICAgIC8vIGJ1aWxkSW1hZ2UgYXQgdGhpcyBsZXZlbCByZWFjaGVzIENESyBQaXBlbGluZXMnIGludGVybmFsbHktd3JhcHBlZFxuICAgICAgLy8gU2hlbGxTdGVwIENvZGVCdWlsZCBhY3Rpb24sIHdoaWNoIG90aGVyd2lzZSBoYXJkY29kZXNcbiAgICAgIC8vIENESydzIGRlZmF1bHQgY3VyYXRlZCBzdGFuZGFyZCBpbWFnZS4gU2V0dGluZyBpdCBoZXJlIGNsb3NlcyB0aGUgZ2FwXG4gICAgICAvLyBleHBvc2VkIGluIHRoZSBzYW1lIGVudiB2YXIgKGBDT0RFQlVJTERfREVGQVVMVF9JTUFHRWApIHRoYXQgdGhlXG4gICAgICAvLyBDb2RlQnVpbGRTdGVwIHBhdGggYWxyZWFkeSBob25vcnMgdmlhIHJlc29sdmVQbHVnaW5JbWFnZSgpJ3NcbiAgICAgIC8vIGZhbGxiYWNrLiBQZXItc3RlcCBgYnVpbGRJbWFnZWAgb24gYSBDb2RlQnVpbGRTdGVwIHN0aWxsIHdpbnMuXG4gICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgIGJ1aWxkSW1hZ2U6IHJlc29sdmVEZWZhdWx0QnVpbGRJbWFnZSh0aGlzLCBvcmdJZCksXG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiBwaXBlbGluZUVudlZhcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"constructs": "10.7.0",
|
|
30
30
|
"jsonwebtoken": "9.0.3",
|
|
31
31
|
"uuid": "14.0.1",
|
|
32
|
-
"@pipeline-builder/api-core": "3.4.
|
|
33
|
-
"@pipeline-builder/pipeline-data": "3.4.
|
|
32
|
+
"@pipeline-builder/api-core": "3.4.93",
|
|
33
|
+
"@pipeline-builder/pipeline-data": "3.4.96"
|
|
34
34
|
},
|
|
35
35
|
"keywords": [
|
|
36
36
|
"ci-cd",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"access": "public",
|
|
87
87
|
"registry": "https://registry.npmjs.org/"
|
|
88
88
|
},
|
|
89
|
-
"version": "3.4.
|
|
89
|
+
"version": "3.4.110",
|
|
90
90
|
"bugs": {
|
|
91
91
|
"url": "https://github.com/mwashburn160/pipeline-builder/issues"
|
|
92
92
|
},
|