@fjall/components-infrastructure 0.82.0 → 0.83.1

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.
package/dist/lib/app.js CHANGED
@@ -118,7 +118,9 @@ class App extends aws_cdk_lib_1.App {
118
118
  if (options?.network === false) {
119
119
  App.instance.networkDisabled = true;
120
120
  }
121
- else if (options?.network && !App.instance.vpc && !App.instance.networkDisabled) {
121
+ else if (options?.network &&
122
+ !App.instance.vpc &&
123
+ !App.instance.networkDisabled) {
122
124
  App.instance.initialiseNetwork(options.network);
123
125
  }
124
126
  }
@@ -460,4 +462,4 @@ class App extends aws_cdk_lib_1.App {
460
462
  exports.App = App;
461
463
  App.instance = null;
462
464
  exports.default = App;
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FLcUI7QUFHckIsd0RBQXFEO0FBR3JELDJDQUF1QztBQUN2QyxxREFBbUU7QUFFbkUsb0RBSWdDO0FBQ2hDLG1FQUFnRTtBQUtoRSxpREFBOEM7QUFDOUMsOEVBQThFO0FBQzlFLG9EQUE4RDtBQUM5RCwrREFBK0Q7QUFDL0QsMENBQW9EO0FBK0JwRDs7OztHQUlHO0FBQ0gsTUFBYSxHQUFJLFNBQVEsaUJBQU07SUFpQjdCLFlBQW9CLElBQWEsRUFBRSxPQUFxQjtRQUN0RCxLQUFLLEVBQUUsQ0FBQztRQWRGLFdBQU0sR0FBZ0MsRUFBRSxDQUFDO1FBR3pDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUM7UUFLekMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsZUFBVSxHQUE4QixFQUFFLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFNNUIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7O1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBRTVCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlCLCtDQUErQztRQUMvQyxJQUFJLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQixDQUN2QixNQUErQztRQUUvQyxNQUFNLFlB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QUM7UUFFdEMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQztZQUNILDRCQUE0QjtZQUM1QixnQ0FBZ0M7WUFDaEMsb0RBQW9EO1lBQ3BELG1DQUFtQztZQUNuQyx3QkFBd0I7WUFDeEIsOEJBQThCO1lBQzlCLEtBQUs7WUFDTCx1RUFBdUU7UUFDekUsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZiw2Q0FBNkM7WUFDN0MsT0FBTyxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs7QUFqaEJILGtCQWtoQkM7QUFqaEJnQixZQUFRLEdBQWUsSUFBSSxBQUFuQixDQUFvQjtBQW1oQjdDLGtCQUFlLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcCBhcyBDZGtBcHAsXG4gIEFzcGVjdHMsXG4gIFRhZ3MsXG4gIHR5cGUgU3RhZ2VTeW50aGVzaXNPcHRpb25zXG59IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgdHlwZSBDbG91ZEFzc2VtYmx5IH0gZnJvbSBcImF3cy1jZGstbGliL2N4LWFwaVwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVnBjIH0gZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY1wiO1xuaW1wb3J0IHsgdHlwZSBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IHR5cGUgUm9sZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuL3Jlc291cmNlc1wiO1xuaW1wb3J0IHsgdHlwZSBFY3IsIEVjckZhY3RvcnkgfSBmcm9tIFwiLi9yZXNvdXJjZXMvYXdzL3N0b3JhZ2UvZWNyXCI7XG5pbXBvcnQgeyB0eXBlIERhdGFiYXNlIH0gZnJvbSBcIi4vcGF0dGVybnMvYXdzL2RhdGFiYXNlXCI7XG5pbXBvcnQge1xuICB0eXBlIElOZXR3b3JrUHJvcHMsXG4gIE5ldHdvcmtGYWN0b3J5LFxuICB0eXBlIE5ldHdvcmtcbn0gZnJvbSBcIi4vcGF0dGVybnMvYXdzL25ldHdvcmtcIjtcbmltcG9ydCB7IFN0YW5kYXJkVGFnc0FzcGVjdCB9IGZyb20gXCIuL3V0aWxzL3N0YW5kYXJkVGFnc0FzcGVjdFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBSZXNvdXJjZUludmVudG9yeUFzcGVjdCxcbiAgdHlwZSBSZXNvdXJjZUludmVudG9yeVxufSBmcm9tIFwiLi9hc3BlY3RzL3Jlc291cmNlSW52ZW50b3J5XCI7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tIFwiLi91dGlscy9nZXRDb25maWdcIjtcbmltcG9ydCBNb25pdG9yaW5nUm9sZUZhY3RvcnkgZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9tb25pdG9yaW5nL21vbml0b3JpbmdSb2xlXCI7XG5pbXBvcnQgeyBGSkFMTF9NT05JVE9SSU5HX0NPTkZJRyB9IGZyb20gXCIuL2NvbmZpZy9tb25pdG9yaW5nXCI7XG5pbXBvcnQgQXVkaXRSb2xlRmFjdG9yeSBmcm9tIFwiLi9yZXNvdXJjZXMvYXdzL2F1ZGl0L2F1ZGl0Um9sZVwiO1xuaW1wb3J0IHsgRkpBTExfQVVESVRfQ09ORklHIH0gZnJvbSBcIi4vY29uZmlnL2F1ZGl0XCI7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBcHAuZ2V0QXBwKCkuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhcHAgd2l0aCBuZXcgVlBDXG4gKiBjb25zdCBhcHAgPSBBcHAuZ2V0QXBwKGFwcE5hbWUsIHtcbiAqICAgbmV0d29yazogeyBtYXhBenM6IDIsIG5hdEdhdGV3YXlzOiBmYWxzZSB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFwcCB1c2luZyBleGlzdGluZyBWUENcbiAqIGNvbnN0IGFwcCA9IEFwcC5nZXRBcHAoYXBwTmFtZSwge1xuICogICBuZXR3b3JrOiB7IHVzZUV4aXN0aW5nOiBcInZwYy0xMjM0NTY3OFwiIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYXBwIHdpdGhvdXQgbmV0d29yayAoUzMtb25seSBhcHBzKVxuICogY29uc3QgYXBwID0gQXBwLmdldEFwcChhcHBOYW1lLCB7IG5ldHdvcms6IGZhbHNlIH0pO1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBPcHRpb25zIHtcbiAgLyoqXG4gICAqIE5ldHdvcmsgY29uZmlndXJhdGlvbi5cbiAgICogLSBPYmplY3Qgd2l0aCBJTmV0d29ya1Byb3BzOiBDcmVhdGUgbmV3IFZQQyB3aXRoIGNvbmZpZ1xuICAgKiAtIGZhbHNlOiBObyBuZXR3b3JrIChmb3IgUzMtb25seSBhcHBzKVxuICAgKiAtIHsgdXNlRXhpc3Rpbmc6IHN0cmluZyB9OiBVc2UgZXhpc3RpbmcgVlBDIGJ5IElEXG4gICAqL1xuICBuZXR3b3JrPzogSU5ldHdvcmtQcm9wcyB8IGZhbHNlIHwgeyB1c2VFeGlzdGluZzogc3RyaW5nIH07XG59XG5cbi8qKlxuICogVGhlIGJhc2ljIGNvcm5lci1zdG9uZSBvZiBhbGwgRmphbGwtaG9zdGVkIGFwcGxpY2F0aW9ucy5cbiAqICBUaGlzIGNsYXNzIGlzIGEgc2luZ2xldG9uIGFuZCBzaG91bGQgYmUgdXNlZCB0byBjcmVhdGUgYW5kIG1hbmFnZVxuICogICBhbGwgcmVzb3VyY2VzIGluIGEgRmphbGwgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHAgZXh0ZW5kcyBDZGtBcHAge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQXBwIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhY2tzOiB7IFtrZXk6IHN0cmluZ106IEF3c1N0YWNrIH0gPSB7fTtcblxuICBwcml2YXRlIHZwYz86IElWcGM7XG4gIHByaXZhdGUgYWRkaXRpb25hbFZwY3MgPSBuZXcgTWFwPHN0cmluZywgSVZwYz4oKTtcbiAgcHJpdmF0ZSBkZWZhdWx0RWNyOiBFY3I7XG4gIHByaXZhdGUgZGVmYXVsdE1vbml0b3JpbmdSb2xlOiBSb2xlO1xuICBwcml2YXRlIGRlZmF1bHRBdWRpdFJvbGU6IFJvbGU7XG4gIHByaXZhdGUgYXVkaXRSb2xlRXh0ZXJuYWxJZD86IHN0cmluZztcbiAgcHJpdmF0ZSBuZXR3b3JrRGlzYWJsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBnbG9iYWxUYWdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIHByaXZhdGUgYXNwZWN0QXBwbGllZCA9IGZhbHNlO1xuICBwcml2YXRlIHJlc291cmNlSW52ZW50b3J5OiBSZXNvdXJjZUludmVudG9yeUFzcGVjdDtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBJQXBwT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBBcHAuaW5zdGFuY2UgPSB0aGlzO1xuXG4gICAgaWYgKG5hbWUpIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgZWxzZSB0aGlzLm5hbWUgPSBcIkZqYWxsQXBwXCI7XG5cbiAgICB0aGlzLmluaXRpYWxpc2VTdGFuZGFyZFRhZ3MoKTtcblxuICAgIC8vIEluaXRpYWxpc2UgbmV0d29yayBpbW1lZGlhdGVseSBpZiBjb25maWd1cmVkXG4gICAgaWYgKG9wdGlvbnM/Lm5ldHdvcmsgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm5ldHdvcmtEaXNhYmxlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zPy5uZXR3b3JrKSB7XG4gICAgICB0aGlzLmluaXRpYWxpc2VOZXR3b3JrKG9wdGlvbnMubmV0d29yayk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2UgdGhlIG5ldHdvcmsgKFZQQykgZm9yIHRoaXMgYXBwbGljYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpc2VOZXR3b3JrKFxuICAgIGNvbmZpZzogSU5ldHdvcmtQcm9wcyB8IHsgdXNlRXhpc3Rpbmc6IHN0cmluZyB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgaWYgKFwidXNlRXhpc3RpbmdcIiBpbiBjb25maWcpIHtcbiAgICAgIHRoaXMudnBjID0gVnBjLmZyb21Mb29rdXAoXG4gICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpLFxuICAgICAgICBgJHt0aGlzLm5hbWV9SW1wb3J0ZWRWcGNgLFxuICAgICAgICB7XG4gICAgICAgICAgdnBjSWQ6IGNvbmZpZy51c2VFeGlzdGluZ1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXR3b3JrID0gTmV0d29ya0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5uYW1lfVZwY2AsIGNvbmZpZykoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpXG4gICAgICApO1xuICAgICAgdGhpcy52cGMgPSBuZXR3b3JrLmdldFZwYygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFwcGxpY2F0aW9uIG5hbWUuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhcHBsaWNhdGlvbiBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0L0NyZWF0ZSBhIGJhc2ljIEZqYWxsIEFwcGxpY2F0aW9uIHdpdGggc3RhbmRhcmQgdGFncyBhcHBsaWVkLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBBcHBsaWNhdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbmNsdWRpbmcgbmV0d29yayBzZXR0aW5nc1xuICAgKiBAcmV0dXJucyB7QXBwfVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDcmVhdGUgYXBwIHdpdGggbmV3IFZQQ1xuICAgKiBjb25zdCBhcHAgPSBBcHAuZ2V0QXBwKGFwcE5hbWUsIHtcbiAgICogICBuZXR3b3JrOiB7IG1heEF6czogMiwgbmF0R2F0ZXdheXM6IGZhbHNlIH1cbiAgICogfSk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENyZWF0ZSBhcHAgdXNpbmcgZXhpc3RpbmcgVlBDXG4gICAqIGNvbnN0IGFwcCA9IEFwcC5nZXRBcHAoYXBwTmFtZSwge1xuICAgKiAgIG5ldHdvcms6IHsgdXNlRXhpc3Rpbmc6IFwidnBjLTEyMzQ1Njc4XCIgfVxuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gQ3JlYXRlIGFwcCB3aXRob3V0IG5ldHdvcmsgKFMzLW9ubHkgYXBwcylcbiAgICogY29uc3QgYXBwID0gQXBwLmdldEFwcChhcHBOYW1lLCB7IG5ldHdvcms6IGZhbHNlIH0pO1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRBcHAobmFtZT86IHN0cmluZywgb3B0aW9ucz86IElBcHBPcHRpb25zKTogQXBwIHtcbiAgICBjb25zdCBhcHAgPSBBcHAuZ2V0SW5zdGFuY2UobmFtZSwgb3B0aW9ucyk7XG4gICAgYXBwLmluaXRpYWxpc2VTdGFuZGFyZFRhZ3MoKTtcbiAgICByZXR1cm4gYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldC9DcmVhdGUgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgQXBwXG4gICAqIEBwYXJhbSBuYW1lIEFwcGxpY2F0aW9uIG5hbWVcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGluY2x1ZGluZyBuZXR3b3JrIHNldHRpbmdzXG4gICAqIEByZXR1cm5zIHtBcHB9XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBJQXBwT3B0aW9ucyk6IEFwcCB7XG4gICAgLy8gRGVzcGl0ZSBzdXBwb3J0aW5nIG11bHRpcGxlIHN0YWNrcyB5b3UgY2FuIHN0aWxsIG9ubHkgZXZlclxuICAgIC8vIGhhdmUgYSBzaW5nbGUgQXBwbGljYXRpb24gcGVyIENESyBkZXBsb3ltZW50XG4gICAgaWYgKCFBcHAuaW5zdGFuY2UpIHtcbiAgICAgIEFwcC5pbnN0YW5jZSA9IG5ldyBBcHAobmFtZSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHNpbmdsZXRvbiBleGlzdHMgYnV0IG5hbWUgZGlmZmVycywgdXBkYXRlIGl0IChiZWZvcmUgYW55IGluZnJhIGlzIGRlZmluZWQpXG4gICAgICBpZiAobmFtZSAmJiBBcHAuaW5zdGFuY2UubmFtZSAhPT0gbmFtZSkge1xuICAgICAgICAvLyBXYXJuIGlmIG5ldHdvcmsgYWxyZWFkeSBpbml0aWFsaXplZCAtIGNoYW5naW5nIG5hbWUgYWZ0ZXIgbmV0d29yayBleGlzdHMgY3JlYXRlcyBhIG1pc21hdGNoXG4gICAgICAgIGlmIChBcHAuaW5zdGFuY2UudnBjKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFdhcm5pbmc6IEFwcCBuYW1lIGNoYW5nZWQgZnJvbSBcIiR7QXBwLmluc3RhbmNlLm5hbWV9XCIgdG8gXCIke25hbWV9XCIgYWZ0ZXIgbmV0d29yayB3YXMgaW5pdGlhbGl6ZWQuIGAgK1xuICAgICAgICAgICAgICBgVlBDIHdpbGwgaGF2ZSBuYW1lIFwiJHtBcHAuaW5zdGFuY2UubmFtZX1WcGNcIiBidXQgYXBwIG5hbWUgaXMgXCIke25hbWV9XCIuIGAgK1xuICAgICAgICAgICAgICBgRW5zdXJlIEFwcC5nZXRBcHAoKSBpcyBjYWxsZWQgd2l0aCB0aGUgZmluYWwgbmFtZSBiZWZvcmUgaW5pdGlhbGl6aW5nIG5ldHdvcmsuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgQXBwLmluc3RhbmNlLm5hbWUgPSBuYW1lO1xuICAgICAgICAvLyBSZWluaXRpYWxpemUgc3RhbmRhcmQgdGFncyB3aXRoIHRoZSBuZXcgbmFtZVxuICAgICAgICBBcHAuaW5zdGFuY2UuaW5pdGlhbGlzZVN0YW5kYXJkVGFncygpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBvcHRpb25zIHByb3ZpZGVkIGJ1dCBuZXR3b3JrIG5vdCB5ZXQgaW5pdGlhbGl6ZWQsIGluaXRpYWxpemUgaXQgbm93XG4gICAgICBpZiAob3B0aW9ucz8ubmV0d29yayA9PT0gZmFsc2UpIHtcbiAgICAgICAgQXBwLmluc3RhbmNlLm5ldHdvcmtEaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/Lm5ldHdvcmsgJiYgIUFwcC5pbnN0YW5jZS52cGMgJiYgIUFwcC5pbnN0YW5jZS5uZXR3b3JrRGlzYWJsZWQpIHtcbiAgICAgICAgQXBwLmluc3RhbmNlLmluaXRpYWxpc2VOZXR3b3JrKG9wdGlvbnMubmV0d29yayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEFwcC5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHN0YWNrIGJ5IGtleS4gSWYgdGhlIHN0YWNrIGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqICBEZXBlbmRlbmNpZXMgYXJlIG9ubHkgYXBwbGllZCB0aGUgZmlyc3QgdGltZSBhIHN0YWNrIGlzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IG9mIHRoZSBzdGFja1xuICAgKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIHN0YWNrKHMpIHRoYXQgdGhpcyBzdGFjayBkZXBlbmRzIG9uXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXRTdGFjayhrZXk6IHN0cmluZywgZGVwZW5kZW5jaWVzPzogQXdzU3RhY2sgfCBBd3NTdGFja1tdKTogQXdzU3RhY2sge1xuICAgIC8vIEFwcGx5IHRoZSBhc3BlY3Qgb25jZSBiZWZvcmUgY3JlYXRpbmcgdGhlIGZpcnN0IHN0YWNrXG4gICAgaWYgKFxuICAgICAgIXRoaXMuYXNwZWN0QXBwbGllZCAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5zdGFja3MpLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5nbG9iYWxUYWdzKS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmFwcGx5VGFnc0FzcGVjdCgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zdGFja3Nba2V5XSkge1xuICAgICAgdGhpcy5zdGFja3Nba2V5XSA9IG5ldyBBd3NTdGFjayhrZXksIGRlcGVuZGVuY2llcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhY2tzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCBjb21wdXRlIHN0YWNrIC0gbmFtZWQgYXMgYCR7dGhpcy5uYW1lfUNvbXB1dGVgXG4gICAqXG4gICAqIE9ubHkgZGVwZW5kcyBvbiBOZXR3b3JrLiBEYXRhYmFzZSBkZXBlbmRlbmN5IGlzIGFkZGVkIGF1dG9tYXRpY2FsbHlcbiAgICogYnkgQ0RLIHdoZW4gY29tcHV0ZSByZXNvdXJjZXMgcmVmZXJlbmNlIGRhdGFiYXNlIHJlc291cmNlcy5cbiAgICpcbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHRDb21wdXRlU3RhY2soKTogQXdzU3RhY2sge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrKGAke3RoaXMubmFtZX1Db21wdXRlYCwgdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRlZmF1bHQgbmV0d29yayBzdGFjayAtIG5hbWVkIGFzIGAke3RoaXMubmFtZX1OZXR3b3JrYFxuICAgKiBAcmV0dXJucyB7QXdzU3RhY2t9XG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfU5ldHdvcmtgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZWZhdWx0IGRhdGFiYXNlIHN0YWNrIC0gbmFtZWQgYXMgYCR7dGhpcy5uYW1lfURhdGFiYXNlYFxuICAgKiBAcmV0dXJucyB7QXdzU3RhY2t9XG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdERhdGFiYXNlU3RhY2soKTogQXdzU3RhY2sge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrKGAke3RoaXMubmFtZX1EYXRhYmFzZWAsIHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZWZhdWx0IHN0b3JhZ2Ugc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9U3RvcmFnZWBcbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHRTdG9yYWdlU3RhY2soKTogQXdzU3RhY2sge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrKGAke3RoaXMubmFtZX1TdG9yYWdlYCwgdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIFZQQyBieSBuYW1lLiBJZiBubyBuYW1lIGlzIHByb3ZpZGVkLCByZXR1cm5zIHRoZSBkZWZhdWx0IFZQQy5cbiAgICpcbiAgICogVGhpcyBpcyBhIHB1cmUgZ2V0dGVyIC0gaXQgbmV2ZXIgY3JlYXRlcyBpbmZyYXN0cnVjdHVyZS5cbiAgICogTmV0d29yayBtdXN0IGJlIGNvbmZpZ3VyZWQgdmlhIEFwcC5nZXRBcHAoKSBvcHRpb25zIG9yIGFwcC5hZGROZXR3b3JrKCkuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gT3B0aW9uYWwgbmFtZSBvZiB0aGUgVlBDIHRvIHJldHJpZXZlLiBJZiBub3QgcHJvdmlkZWQsIHJldHVybnMgdGhlIGRlZmF1bHQgVlBDLlxuICAgKiBAcmV0dXJucyB7SVZwY30gVGhlIGNvbmZpZ3VyZWQgVlBDXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBuZXR3b3JrIGlzIGRpc2FibGVkLCBub3QgY29uZmlndXJlZCwgb3IgbmFtZWQgVlBDIG5vdCBmb3VuZFxuICAgKi9cbiAgcHVibGljIGdldFZwYyhuYW1lPzogc3RyaW5nKTogSVZwYyB7XG4gICAgaWYgKHRoaXMubmV0d29ya0Rpc2FibGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTmV0d29yayBpcyBkaXNhYmxlZCBmb3IgdGhpcyBhcHAuIENhbm5vdCBnZXQgVlBDLiBcIiArXG4gICAgICAgICAgXCJQYXNzIG5ldHdvcmsgY29uZmlnIHRvIEFwcC5nZXRBcHAoKSB0byBlbmFibGUgbmV0d29ya2luZy5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJZiBuYW1lIGlzIHByb3ZpZGVkLCBsb29rIGluIGFkZGl0aW9uYWwgVlBDcyBmaXJzdFxuICAgIGlmIChuYW1lKSB7XG4gICAgICBjb25zdCBhZGRpdGlvbmFsVnBjID0gdGhpcy5hZGRpdGlvbmFsVnBjcy5nZXQobmFtZSk7XG4gICAgICBpZiAoYWRkaXRpb25hbFZwYykge1xuICAgICAgICByZXR1cm4gYWRkaXRpb25hbFZwYztcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFZQQyAnJHtuYW1lfScgbm90IGZvdW5kLiBBdmFpbGFibGUgVlBDczogJHt0aGlzLmdldFZwY05hbWVzKCkuam9pbihcIiwgXCIpfS4gYCArXG4gICAgICAgICAgXCJDcmVhdGUgYWRkaXRpb25hbCBWUENzIHVzaW5nIGFwcC5hZGROZXR3b3JrKE5ldHdvcmtGYWN0b3J5LmJ1aWxkKC4uLikpLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBkZWZhdWx0IFZQQ1xuICAgIGlmICghdGhpcy52cGMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJOZXR3b3JrIG5vdCBjb25maWd1cmVkLiBQYXNzIG5ldHdvcmsgY29uZmlnIHRvIEFwcC5nZXRBcHAoKS4gXCIgK1xuICAgICAgICAgIFwiRXhhbXBsZTogQXBwLmdldEFwcChhcHBOYW1lLCB7IG5ldHdvcms6IHsgbWF4QXpzOiAyIH0gfSlcIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudnBjO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmFtZXMgb2YgYWxsIGF2YWlsYWJsZSBWUENzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119IEFycmF5IG9mIFZQQyBuYW1lcy4gSW5jbHVkZXMgXCJkZWZhdWx0XCIgaWYgdGhlIGRlZmF1bHQgVlBDIGlzIGNvbmZpZ3VyZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0VnBjTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IG5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLnZwYykge1xuICAgICAgbmFtZXMucHVzaChcImRlZmF1bHRcIik7XG4gICAgfVxuICAgIG5hbWVzLnB1c2goLi4udGhpcy5hZGRpdGlvbmFsVnBjcy5rZXlzKCkpO1xuICAgIHJldHVybiBuYW1lcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyZWl2ZSB0aGUgZGVmYXVsdCBhcHBsaWNhdGlvbiBjb250YWluZXIgcmVnaXN0cnkuIElmIHRoZSByZWdpc3RyeSBkb2VzIG5vdCBleGlzdFxuICAgKiAgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHRDb250YWluZXJSZWdpc3RyeSgpOiBFY3Ige1xuICAgIGlmICghdGhpcy5kZWZhdWx0RWNyKSB7XG4gICAgICBjb25zdCBuZXR3b3JrU3RhY2sgPSB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKTtcblxuICAgICAgdGhpcy5kZWZhdWx0RWNyID0gRWNyRmFjdG9yeS5idWlsZChgJHt0aGlzLm5hbWV9RWNyYCkoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRFY3I7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3Jvc3MtYWNjb3VudCBtb25pdG9yaW5nIHJvbGUgaW4gdGhlIE5ldHdvcmsgc3RhY2sgdGhhdCBhbGxvd3NcbiAgICogdGhlIEZqYWxsIHdlYmFwcCB0byBxdWVyeSBDbG91ZFdhdGNoIG1ldHJpY3MgYW5kIEVDUyBzdGF0dXMuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJhcHBBY2NvdW50SWQgLSBPcHRpb25hbCBBV1MgYWNjb3VudCBJRCBvZiB0aGUgRmphbGwgd2ViYXBwLiBEZWZhdWx0cyB0byBjb25maWd1cmVkIHBsYXRmb3JtIGFjY291bnQuXG4gICAqIEByZXR1cm5zIHtSb2xlfSBUaGUgY3JlYXRlZCBtb25pdG9yaW5nIHJvbGVcbiAgICovXG4gIHB1YmxpYyBjcmVhdGVNb25pdG9yaW5nUm9sZSh3ZWJhcHBBY2NvdW50SWQ/OiBzdHJpbmcpOiBSb2xlIHtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdE1vbml0b3JpbmdSb2xlKSB7XG4gICAgICBjb25zdCBuZXR3b3JrU3RhY2sgPSB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKTtcbiAgICAgIGNvbnN0IGFjY291bnRJZCA9XG4gICAgICAgIHdlYmFwcEFjY291bnRJZCB8fCBGSkFMTF9NT05JVE9SSU5HX0NPTkZJRy53ZWJhcHBBd3NBY2NvdW50SWQ7XG5cbiAgICAgIHRoaXMuZGVmYXVsdE1vbml0b3JpbmdSb2xlID0gTW9uaXRvcmluZ1JvbGVGYWN0b3J5LmJ1aWxkKFxuICAgICAgICBgJHt0aGlzLm5hbWV9TW9uaXRvcmluZ1JvbGVgLFxuICAgICAgICB7XG4gICAgICAgICAgd2ViYXBwQWNjb3VudElkOiBhY2NvdW50SWQsXG4gICAgICAgICAgYXBwTmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgIHJvbGVOYW1lUHJlZml4OiBGSkFMTF9NT05JVE9SSU5HX0NPTkZJRy5yb2xlTmFtZVByZWZpeCxcbiAgICAgICAgICByb2xlUGF0aDogRkpBTExfTU9OSVRPUklOR19DT05GSUcucm9sZVBhdGhcbiAgICAgICAgfVxuICAgICAgKSh0aGlzLCBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKSk7XG5cbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSByb2xlIHdpdGggdGhlIG5ldHdvcmsgc3RhY2tcbiAgICAgIG5ldHdvcmtTdGFjay5hZGRDb25zdHJ1Y3QodGhpcy5kZWZhdWx0TW9uaXRvcmluZ1JvbGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRNb25pdG9yaW5nUm9sZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcm9zcy1hY2NvdW50IGF1ZGl0IHJvbGUgaW4gdGhlIE5ldHdvcmsgc3RhY2sgdGhhdCBhbGxvd3NcbiAgICogdGhlIEZqYWxsIHBsYXRmb3JtIHRvIHVzZSBDbG91ZFF1ZXJ5IGZvciBjb21wcmVoZW5zaXZlIEFXUyByZXNvdXJjZSBhdWRpdGluZy5cbiAgICpcbiAgICogVGhpcyBpcyBhbiBleHBsaWNpdCBvcHQtaW4gZmVhdHVyZS4gQ2FsbCB0aGlzIG1ldGhvZCB0byBlbmFibGUgQ2xvdWRRdWVyeVxuICAgKiBhdWRpdCBjYXBhYmlsaXRpZXMgZm9yIHlvdXIgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJhcHBBY2NvdW50SWQgLSBPcHRpb25hbCBBV1MgYWNjb3VudCBJRCBvZiB0aGUgRmphbGwgd2ViYXBwLiBEZWZhdWx0cyB0byBjb25maWd1cmVkIHBsYXRmb3JtIGFjY291bnQuXG4gICAqIEBwYXJhbSBleHRlcm5hbElkIC0gT3B0aW9uYWwgZXh0ZXJuYWwgSUQgZm9yIGFkZGl0aW9uYWwgc2VjdXJpdHkuIElmIG5vdCBwcm92aWRlZCwgYSB1bmlxdWUgSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEByZXR1cm5zIHtSb2xlfSBUaGUgY3JlYXRlZCBhdWRpdCByb2xlXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlQXVkaXRSb2xlKHdlYmFwcEFjY291bnRJZD86IHN0cmluZywgZXh0ZXJuYWxJZD86IHN0cmluZyk6IFJvbGUge1xuICAgIGlmICghdGhpcy5kZWZhdWx0QXVkaXRSb2xlKSB7XG4gICAgICBjb25zdCBuZXR3b3JrU3RhY2sgPSB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKTtcbiAgICAgIGNvbnN0IGFjY291bnRJZCA9XG4gICAgICAgIHdlYmFwcEFjY291bnRJZCB8fCBGSkFMTF9BVURJVF9DT05GSUcud2ViYXBwQXdzQWNjb3VudElkO1xuXG4gICAgICAvLyBHZW5lcmF0ZSBvciB1c2UgcHJvdmlkZWQgZXh0ZXJuYWwgSURcbiAgICAgIHRoaXMuYXVkaXRSb2xlRXh0ZXJuYWxJZCA9IGV4dGVybmFsSWQgfHwgdGhpcy5nZW5lcmF0ZUF1ZGl0RXh0ZXJuYWxJZCgpO1xuXG4gICAgICB0aGlzLmRlZmF1bHRBdWRpdFJvbGUgPSBBdWRpdFJvbGVGYWN0b3J5LmJ1aWxkKGAke3RoaXMubmFtZX1BdWRpdFJvbGVgLCB7XG4gICAgICAgIHdlYmFwcEFjY291bnRJZDogYWNjb3VudElkLFxuICAgICAgICBhcHBOYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIGV4dGVybmFsSWQ6IHRoaXMuYXVkaXRSb2xlRXh0ZXJuYWxJZCxcbiAgICAgICAgcm9sZU5hbWVQcmVmaXg6IEZKQUxMX0FVRElUX0NPTkZJRy5yb2xlTmFtZVByZWZpeCxcbiAgICAgICAgcm9sZVBhdGg6IEZKQUxMX0FVRElUX0NPTkZJRy5yb2xlUGF0aFxuICAgICAgfSkodGhpcywgbmV0d29ya1N0YWNrLmdldFN0YWNrKCkpO1xuXG4gICAgICAvLyBSZWdpc3RlciB0aGUgcm9sZSB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrXG4gICAgICBuZXR3b3JrU3RhY2suYWRkQ29uc3RydWN0KHRoaXMuZGVmYXVsdEF1ZGl0Um9sZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEF1ZGl0Um9sZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGV4dGVybmFsIElEIHVzZWQgZm9yIHRoZSBhdWRpdCByb2xlXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSBleHRlcm5hbCBJRCBpZiBhdWRpdCByb2xlIGhhcyBiZWVuIGNyZWF0ZWRcbiAgICovXG4gIHB1YmxpYyBnZXRBdWRpdFJvbGVFeHRlcm5hbElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXVkaXRSb2xlRXh0ZXJuYWxJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHVuaXF1ZSBleHRlcm5hbCBJRCBmb3IgYXVkaXQgcm9sZVxuICAgKiBGb3JtYXQ6IGZqYWxsLWF1ZGl0LXthcHBOYW1lfS17dGltZXN0YW1wfVxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUF1ZGl0RXh0ZXJuYWxJZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgcmV0dXJuIGBmamFsbC1hdWRpdC0ke3RoaXMubmFtZS50b0xvd2VyQ2FzZSgpfS0ke3RpbWVzdGFtcH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNvbXB1dGUgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgY29tcHV0ZSBzdGFjayB1c2luZyB0aGUgZmFjdG9yeSBwYXR0ZXJuLlxuICAgKiBBdXRvbWF0aWNhbGx5IGNyZWF0ZXMgbW9uaXRvcmluZyByb2xlIGlmIG5vdCBhbHJlYWR5IGNyZWF0ZWQuXG4gICAqXG4gICAqIFN1cHBvcnRzIENvbXB1dGVGYWN0b3J5IChFQ1MsIEVDMiwgTGFtYmRhKS5cbiAgICovXG4gIHB1YmxpYyBhZGRDb21wdXRlPFQgZXh0ZW5kcyBDb25zdHJ1Y3Q+KFxuICAgIGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFRcbiAgKTogVCB7XG4gICAgLy8gQXV0by1jcmVhdGUgbW9uaXRvcmluZyByb2xlIHdoZW4gY29tcHV0ZSBpcyBhZGRlZFxuICAgIGlmICghdGhpcy5kZWZhdWx0TW9uaXRvcmluZ1JvbGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlTW9uaXRvcmluZ1JvbGUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wdXRlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRDb21wdXRlU3RhY2soKTtcbiAgICBjb25zdCBjb25zdHJ1Y3QgPSBmbih0aGlzLCBjb21wdXRlU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgY29tcHV0ZVN0YWNrLmFkZENvbnN0cnVjdChjb25zdHJ1Y3QpO1xuICAgIHJldHVybiBjb25zdHJ1Y3Q7XG4gIH1cblxuICAvKipcbiAgICogTWFudWFsbHkgYWRkIGEgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgY29tcHV0ZSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBhZGRDb21wdXRlUmVzb3VyY2UocmVzb3VyY2U6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXB1dGVTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdENvbXB1dGVTdGFjaygpO1xuICAgIGNvbXB1dGVTdGFjay5hZGRDb25zdHJ1Y3QocmVzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGRhdGFiYXNlIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IGRhdGFiYXNlIHN0YWNrIHVzaW5nIHRoZSBmYWN0b3J5IHBhdHRlcm4uXG4gICAqL1xuICBwdWJsaWMgYWRkRGF0YWJhc2UoZm46IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQ29uc3RydWN0KTogRGF0YWJhc2Uge1xuICAgIGNvbnN0IGRhdGFiYXNlU3RhY2sgPSB0aGlzLmdldERlZmF1bHREYXRhYmFzZVN0YWNrKCk7XG4gICAgY29uc3QgZGF0YWJhc2VDb25zdHJ1Y3QgPSBmbih0aGlzLCBkYXRhYmFzZVN0YWNrLmdldFN0YWNrKCkpO1xuICAgIGRhdGFiYXNlU3RhY2suYWRkQ29uc3RydWN0KGRhdGFiYXNlQ29uc3RydWN0KTtcblxuICAgIHJldHVybiBkYXRhYmFzZUNvbnN0cnVjdCBhcyB1bmtub3duIGFzIERhdGFiYXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHN0b3JhZ2UgcmVzb3VyY2UgKFMzKSB0byB0aGUgZGVmYXVsdCBzdG9yYWdlIHN0YWNrIHVzaW5nIHRoZSBmYWN0b3J5IHBhdHRlcm4uXG4gICAqL1xuICBwdWJsaWMgYWRkU3RvcmFnZShmbjogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBDb25zdHJ1Y3QpOiBDb25zdHJ1Y3Qge1xuICAgIGNvbnN0IHN0b3JhZ2VTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpO1xuICAgIGNvbnN0IHN0b3JhZ2VDb25zdHJ1Y3QgPSBmbih0aGlzLCBzdG9yYWdlU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgc3RvcmFnZVN0YWNrLmFkZENvbnN0cnVjdChzdG9yYWdlQ29uc3RydWN0KTtcblxuICAgIHJldHVybiBzdG9yYWdlQ29uc3RydWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBhZGRpdGlvbmFsIG5ldHdvcmsgKFZQQykgdG8gdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBjcmVhdGUgYWRkaXRpb25hbCBWUENzIGJleW9uZCB0aGUgZGVmYXVsdCBWUEMgY29uZmlndXJlZCB2aWEgQXBwLmdldEFwcCgpLlxuICAgKiBBZGRpdGlvbmFsIFZQQ3MgY2FuIGJlIHJldHJpZXZlZCBieSBuYW1lIHVzaW5nIGFwcC5nZXRWcGMobmFtZSkuXG4gICAqXG4gICAqIEBwYXJhbSBmbiAtIEZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIHRoZSBOZXR3b3JrIGNvbnN0cnVjdFxuICAgKiBAcmV0dXJucyB7TmV0d29ya30gVGhlIGNyZWF0ZWQgTmV0d29yayBjb25zdHJ1Y3RcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgaXNvbGF0ZWRWcGMgPSBhcHAuYWRkTmV0d29yayhcbiAgICogICBOZXR3b3JrRmFjdG9yeS5idWlsZChcIklzb2xhdGVkVnBjXCIsIHsgbWF4QXpzOiAyLCBuYXRHYXRld2F5czogZmFsc2UgfSlcbiAgICogKTtcbiAgICovXG4gIHB1YmxpYyBhZGROZXR3b3JrKGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IE5ldHdvcmspOiBOZXR3b3JrIHtcbiAgICBjb25zdCBuZXR3b3JrU3RhY2sgPSB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKTtcbiAgICBjb25zdCBuZXR3b3JrID0gZm4odGhpcywgbmV0d29ya1N0YWNrLmdldFN0YWNrKCkpO1xuICAgIGNvbnN0IHZwY05hbWUgPSBuZXR3b3JrLm5vZGUuaWQ7XG5cbiAgICAvLyBTdG9yZSBpbiBhZGRpdGlvbmFsIFZQQ3MgbWFwIGZvciByZXRyaWV2YWwgdmlhIGdldFZwYyhuYW1lKVxuICAgIHRoaXMuYWRkaXRpb25hbFZwY3Muc2V0KHZwY05hbWUsIG5ldHdvcmsuZ2V0VnBjKCkpO1xuICAgIG5ldHdvcmtTdGFjay5hZGRDb25zdHJ1Y3QobmV0d29yayk7XG5cbiAgICByZXR1cm4gbmV0d29yaztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBhZGQgYSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBkYXRhYmFzZSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBhZGREYXRhYmFzZVJlc291cmNlKHJlc291cmNlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhYmFzZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0RGF0YWJhc2VTdGFjaygpO1xuICAgIGRhdGFiYXNlU3RhY2suYWRkQ29uc3RydWN0KHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBhZGQgYSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBzdG9yYWdlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGFkZFN0b3JhZ2VSZXNvdXJjZShyZXNvdXJjZTogQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmFnZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0U3RvcmFnZVN0YWNrKCk7XG4gICAgc3RvcmFnZVN0YWNrLmFkZENvbnN0cnVjdChyZXNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBzdGFuZGFyZCB0YWdzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpc2VTdGFuZGFyZFRhZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgdGhpcy5nbG9iYWxUYWdzID0ge1xuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBjb25maWcuZW52aXJvbm1lbnQsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogdGhpcy5uYW1lXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgdGFncyB1c2luZyBDREsncyBuYXRpdmUgVGFncy5vZigpLmFkZCgpIEFQSVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVRhZ3NBc3BlY3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFzcGVjdEFwcGxpZWQgJiYgT2JqZWN0LmtleXModGhpcy5nbG9iYWxUYWdzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBcHBseSBzdGFuZGFyZCB0YWdzIHVzaW5nIFRhZ3Mub2YodGhpcykuYWRkKClcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZ2xvYmFsVGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIFRhZ3Mub2YodGhpcykuYWRkKGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEFwcGx5IGFzcGVjdCBmb3IgcmVzb3VyY2Utc3BlY2lmaWMgdGFncyAoSVBBTSBwb29sLCBiYWNrdXAgdGllcilcbiAgICAgIEFzcGVjdHMub2YodGhpcykuYWRkKG5ldyBTdGFuZGFyZFRhZ3NBc3BlY3QoKSk7XG5cbiAgICAgIHRoaXMuYXNwZWN0QXBwbGllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBjdXN0b20gdGFncyB0byBhbGwgcmVzb3VyY2VzIGluIHRoZSBhcHAuXG4gICAqXG4gICAqIEBwYXJhbSB0YWdzIEN1c3RvbSB0YWdzIHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZXNcbiAgICogQGV4YW1wbGVcbiAgICogYXBwLmFkZFRhZ3Moe1xuICAgKiAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogXCJwbGF0Zm9ybS10ZWFtXCIsXG4gICAqICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpjb3N0LWNlbnRlclwiOiBcIkNDLTEyM1wiLFxuICAgKiAgIFwidGVhbTpzbGFjay1jaGFubmVsXCI6IFwiI3BsYXRmb3JtLWFsZXJ0c1wiXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZFRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IEFwcCB7XG4gICAgLy8gTWVyZ2UgdGFncyBpbnRvIGdsb2JhbFRhZ3MgZm9yIHRyYWNraW5nXG4gICAgdGhpcy5nbG9iYWxUYWdzID0ge1xuICAgICAgLi4udGhpcy5nbG9iYWxUYWdzLFxuICAgICAgLi4udGFnc1xuICAgIH07XG4gICAgT2JqZWN0LmVudHJpZXModGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCByZXNvdXJjZSBpbnZlbnRvcnkgY29sbGVjdGVkIGR1cmluZyBzeW50aGVzaXNcbiAgICogQ2FsbCB0aGlzIGFmdGVyIGFwcC5zeW50aCgpIHRvIGdldCBjb21wbGV0ZSByZXNvdXJjZSBpbnZlbnRvcnlcbiAgICogQHJldHVybnMge1Jlc291cmNlSW52ZW50b3J5fSBDb21wbGV0ZSBpbnZlbnRvcnkgb2YgYWxsIHJlc291cmNlcyBpbiB0aGUgYXBwXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0UmVzb3VyY2VJbnZlbnRvcnkoKTogUmVzb3VyY2VJbnZlbnRvcnkge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvdXJjZXM6IHRoaXMucmVzb3VyY2VJbnZlbnRvcnkuZ2V0SW52ZW50b3J5KCksXG4gICAgICBnZW5lcmF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGFwcF9uYW1lOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHN5bnRoIHRvIGF1dG9tYXRpY2FsbHkgZXhwb3J0IHJlc291cmNlIGludmVudG9yeVxuICAgKi9cbiAgcHVibGljIHN5bnRoKG9wdGlvbnM/OiBTdGFnZVN5bnRoZXNpc09wdGlvbnMpOiBDbG91ZEFzc2VtYmx5IHtcbiAgICAvLyBDYWxsIHBhcmVudCBzeW50aCBmaXJzdFxuICAgIGNvbnN0IGFzc2VtYmx5ID0gc3VwZXIuc3ludGgob3B0aW9ucyk7XG5cbiAgICAvLyBBZnRlciBzeW50aGVzaXMsIHdyaXRlIHJlc291cmNlIGludmVudG9yeSB0byBjZGsub3V0XG4gICAgdHJ5IHtcbiAgICAgIC8vIGNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuICAgICAgLy8gY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xuICAgICAgLy8gY29uc3QgaW52ZW50b3J5ID0gdGhpcy5leHBvcnRSZXNvdXJjZUludmVudG9yeSgpO1xuICAgICAgLy8gY29uc3QgaW52ZW50b3J5UGF0aCA9IHBhdGguam9pbihcbiAgICAgIC8vICAgYXNzZW1ibHkuZGlyZWN0b3J5LFxuICAgICAgLy8gICBcInJlc291cmNlLWludmVudG9yeS5qc29uXCJcbiAgICAgIC8vICk7XG4gICAgICAvLyBmcy53cml0ZUZpbGVTeW5jKGludmVudG9yeVBhdGgsIEpTT04uc3RyaW5naWZ5KGludmVudG9yeSwgbnVsbCwgMikpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBEb24ndCBmYWlsIHN5bnRoIGlmIGludmVudG9yeSBleHBvcnQgZmFpbHNcbiAgICAgIGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBleHBvcnQgcmVzb3VyY2UgaW52ZW50b3J5OlwiLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzc2VtYmx5O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcDtcbiJdfQ==
465
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FLcUI7QUFHckIsd0RBQXFEO0FBR3JELDJDQUF1QztBQUN2QyxxREFBbUU7QUFFbkUsb0RBSWdDO0FBQ2hDLG1FQUFnRTtBQUtoRSxpREFBOEM7QUFDOUMsOEVBQThFO0FBQzlFLG9EQUE4RDtBQUM5RCwrREFBK0Q7QUFDL0QsMENBQW9EO0FBK0JwRDs7OztHQUlHO0FBQ0gsTUFBYSxHQUFJLFNBQVEsaUJBQU07SUFpQjdCLFlBQW9CLElBQWEsRUFBRSxPQUFxQjtRQUN0RCxLQUFLLEVBQUUsQ0FBQztRQWRGLFdBQU0sR0FBZ0MsRUFBRSxDQUFDO1FBR3pDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUM7UUFLekMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsZUFBVSxHQUE4QixFQUFFLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFNNUIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7O1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBRTVCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlCLCtDQUErQztRQUMvQyxJQUFJLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQixDQUN2QixNQUErQztRQUUvQyxNQUFNLFlB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QyxDQUFDO1FBRXRDLHVEQUF1RDtRQUN2RCxJQUFJLENBQUM7WUFDSCw0QkFBNEI7WUFDNUIsZ0NBQWdDO1lBQ2hDLG9EQUFvRDtZQUNwRCxtQ0FBbUM7WUFDbkMsd0JBQXdCO1lBQ3hCLDhCQUE4QjtZQUM5QixLQUFLO1lBQ0wsdUVBQXVFO1FBQ3pFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsNkNBQTZDO1lBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7O0FBcmhCSCxrQkFzaEJDO0FBcmhCZ0IsWUFBUSxHQUFlLElBQUksQUFBbkIsQ0FBb0I7QUF1aEI3QyxrQkFBZSxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHAgYXMgQ2RrQXBwLFxuICBBc3BlY3RzLFxuICBUYWdzLFxuICB0eXBlIFN0YWdlU3ludGhlc2lzT3B0aW9uc1xufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgQ2xvdWRBc3NlbWJseSB9IGZyb20gXCJhd3MtY2RrLWxpYi9jeC1hcGlcIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcbmltcG9ydCB7IHR5cGUgSVZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyB0eXBlIFJvbGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi9yZXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgRWNyLCBFY3JGYWN0b3J5IH0gZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlL2VjclwiO1xuaW1wb3J0IHsgdHlwZSBEYXRhYmFzZSB9IGZyb20gXCIuL3BhdHRlcm5zL2F3cy9kYXRhYmFzZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBJTmV0d29ya1Byb3BzLFxuICBOZXR3b3JrRmFjdG9yeSxcbiAgdHlwZSBOZXR3b3JrXG59IGZyb20gXCIuL3BhdHRlcm5zL2F3cy9uZXR3b3JrXCI7XG5pbXBvcnQgeyBTdGFuZGFyZFRhZ3NBc3BlY3QgfSBmcm9tIFwiLi91dGlscy9zdGFuZGFyZFRhZ3NBc3BlY3RcIjtcbmltcG9ydCB7XG4gIHR5cGUgUmVzb3VyY2VJbnZlbnRvcnlBc3BlY3QsXG4gIHR5cGUgUmVzb3VyY2VJbnZlbnRvcnlcbn0gZnJvbSBcIi4vYXNwZWN0cy9yZXNvdXJjZUludmVudG9yeVwiO1xuaW1wb3J0IHsgZ2V0Q29uZmlnIH0gZnJvbSBcIi4vdXRpbHMvZ2V0Q29uZmlnXCI7XG5pbXBvcnQgTW9uaXRvcmluZ1JvbGVGYWN0b3J5IGZyb20gXCIuL3Jlc291cmNlcy9hd3MvbW9uaXRvcmluZy9tb25pdG9yaW5nUm9sZVwiO1xuaW1wb3J0IHsgRkpBTExfTU9OSVRPUklOR19DT05GSUcgfSBmcm9tIFwiLi9jb25maWcvbW9uaXRvcmluZ1wiO1xuaW1wb3J0IEF1ZGl0Um9sZUZhY3RvcnkgZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9hdWRpdC9hdWRpdFJvbGVcIjtcbmltcG9ydCB7IEZKQUxMX0FVRElUX0NPTkZJRyB9IGZyb20gXCIuL2NvbmZpZy9hdWRpdFwiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgQXBwLmdldEFwcCgpLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYXBwIHdpdGggbmV3IFZQQ1xuICogY29uc3QgYXBwID0gQXBwLmdldEFwcChhcHBOYW1lLCB7XG4gKiAgIG5ldHdvcms6IHsgbWF4QXpzOiAyLCBuYXRHYXRld2F5czogZmFsc2UgfVxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhcHAgdXNpbmcgZXhpc3RpbmcgVlBDXG4gKiBjb25zdCBhcHAgPSBBcHAuZ2V0QXBwKGFwcE5hbWUsIHtcbiAqICAgbmV0d29yazogeyB1c2VFeGlzdGluZzogXCJ2cGMtMTIzNDU2NzhcIiB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFwcCB3aXRob3V0IG5ldHdvcmsgKFMzLW9ubHkgYXBwcylcbiAqIGNvbnN0IGFwcCA9IEFwcC5nZXRBcHAoYXBwTmFtZSwgeyBuZXR3b3JrOiBmYWxzZSB9KTtcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXBwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24uXG4gICAqIC0gT2JqZWN0IHdpdGggSU5ldHdvcmtQcm9wczogQ3JlYXRlIG5ldyBWUEMgd2l0aCBjb25maWdcbiAgICogLSBmYWxzZTogTm8gbmV0d29yayAoZm9yIFMzLW9ubHkgYXBwcylcbiAgICogLSB7IHVzZUV4aXN0aW5nOiBzdHJpbmcgfTogVXNlIGV4aXN0aW5nIFZQQyBieSBJRFxuICAgKi9cbiAgbmV0d29yaz86IElOZXR3b3JrUHJvcHMgfCBmYWxzZSB8IHsgdXNlRXhpc3Rpbmc6IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFRoZSBiYXNpYyBjb3JuZXItc3RvbmUgb2YgYWxsIEZqYWxsLWhvc3RlZCBhcHBsaWNhdGlvbnMuXG4gKiAgVGhpcyBjbGFzcyBpcyBhIHNpbmdsZXRvbiBhbmQgc2hvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIGFuZCBtYW5hZ2VcbiAqICAgYWxsIHJlc291cmNlcyBpbiBhIEZqYWxsIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQXBwIGV4dGVuZHMgQ2RrQXBwIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IEFwcCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHN0YWNrczogeyBba2V5OiBzdHJpbmddOiBBd3NTdGFjayB9ID0ge307XG5cbiAgcHJpdmF0ZSB2cGM/OiBJVnBjO1xuICBwcml2YXRlIGFkZGl0aW9uYWxWcGNzID0gbmV3IE1hcDxzdHJpbmcsIElWcGM+KCk7XG4gIHByaXZhdGUgZGVmYXVsdEVjcjogRWNyO1xuICBwcml2YXRlIGRlZmF1bHRNb25pdG9yaW5nUm9sZTogUm9sZTtcbiAgcHJpdmF0ZSBkZWZhdWx0QXVkaXRSb2xlOiBSb2xlO1xuICBwcml2YXRlIGF1ZGl0Um9sZUV4dGVybmFsSWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgbmV0d29ya0Rpc2FibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgZ2xvYmFsVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwcml2YXRlIGFzcGVjdEFwcGxpZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXNvdXJjZUludmVudG9yeTogUmVzb3VyY2VJbnZlbnRvcnlBc3BlY3Q7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihuYW1lPzogc3RyaW5nLCBvcHRpb25zPzogSUFwcE9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgQXBwLmluc3RhbmNlID0gdGhpcztcblxuICAgIGlmIChuYW1lKSB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIGVsc2UgdGhpcy5uYW1lID0gXCJGamFsbEFwcFwiO1xuXG4gICAgdGhpcy5pbml0aWFsaXNlU3RhbmRhcmRUYWdzKCk7XG5cbiAgICAvLyBJbml0aWFsaXNlIG5ldHdvcmsgaW1tZWRpYXRlbHkgaWYgY29uZmlndXJlZFxuICAgIGlmIChvcHRpb25zPy5uZXR3b3JrID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5uZXR3b3JrRGlzYWJsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucz8ubmV0d29yaykge1xuICAgICAgdGhpcy5pbml0aWFsaXNlTmV0d29yayhvcHRpb25zLm5ldHdvcmspO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXNlIHRoZSBuZXR3b3JrIChWUEMpIGZvciB0aGlzIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXNlTmV0d29yayhcbiAgICBjb25maWc6IElOZXR3b3JrUHJvcHMgfCB7IHVzZUV4aXN0aW5nOiBzdHJpbmcgfVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBuZXR3b3JrU3RhY2sgPSB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKTtcblxuICAgIGlmIChcInVzZUV4aXN0aW5nXCIgaW4gY29uZmlnKSB7XG4gICAgICB0aGlzLnZwYyA9IFZwYy5mcm9tTG9va3VwKFxuICAgICAgICBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKSxcbiAgICAgICAgYCR7dGhpcy5uYW1lfUltcG9ydGVkVnBjYCxcbiAgICAgICAge1xuICAgICAgICAgIHZwY0lkOiBjb25maWcudXNlRXhpc3RpbmdcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV0d29yayA9IE5ldHdvcmtGYWN0b3J5LmJ1aWxkKGAke3RoaXMubmFtZX1WcGNgLCBjb25maWcpKFxuICAgICAgICB0aGlzLFxuICAgICAgICBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKVxuICAgICAgKTtcbiAgICAgIHRoaXMudnBjID0gbmV0d29yay5nZXRWcGMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhcHBsaWNhdGlvbiBuYW1lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYXBwbGljYXRpb24gbmFtZVxuICAgKi9cbiAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldC9DcmVhdGUgYSBiYXNpYyBGamFsbCBBcHBsaWNhdGlvbiB3aXRoIHN0YW5kYXJkIHRhZ3MgYXBwbGllZC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgQXBwbGljYXRpb24gbmFtZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgaW5jbHVkaW5nIG5ldHdvcmsgc2V0dGluZ3NcbiAgICogQHJldHVybnMge0FwcH1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gQ3JlYXRlIGFwcCB3aXRoIG5ldyBWUENcbiAgICogY29uc3QgYXBwID0gQXBwLmdldEFwcChhcHBOYW1lLCB7XG4gICAqICAgbmV0d29yazogeyBtYXhBenM6IDIsIG5hdEdhdGV3YXlzOiBmYWxzZSB9XG4gICAqIH0pO1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDcmVhdGUgYXBwIHVzaW5nIGV4aXN0aW5nIFZQQ1xuICAgKiBjb25zdCBhcHAgPSBBcHAuZ2V0QXBwKGFwcE5hbWUsIHtcbiAgICogICBuZXR3b3JrOiB7IHVzZUV4aXN0aW5nOiBcInZwYy0xMjM0NTY3OFwiIH1cbiAgICogfSk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENyZWF0ZSBhcHAgd2l0aG91dCBuZXR3b3JrIChTMy1vbmx5IGFwcHMpXG4gICAqIGNvbnN0IGFwcCA9IEFwcC5nZXRBcHAoYXBwTmFtZSwgeyBuZXR3b3JrOiBmYWxzZSB9KTtcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0QXBwKG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBJQXBwT3B0aW9ucyk6IEFwcCB7XG4gICAgY29uc3QgYXBwID0gQXBwLmdldEluc3RhbmNlKG5hbWUsIG9wdGlvbnMpO1xuICAgIGFwcC5pbml0aWFsaXNlU3RhbmRhcmRUYWdzKCk7XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQvQ3JlYXRlIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEFwcFxuICAgKiBAcGFyYW0gbmFtZSBBcHBsaWNhdGlvbiBuYW1lXG4gICAqIEBwYXJhbSBvcHRpb25zIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbmNsdWRpbmcgbmV0d29yayBzZXR0aW5nc1xuICAgKiBAcmV0dXJucyB7QXBwfVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZShuYW1lPzogc3RyaW5nLCBvcHRpb25zPzogSUFwcE9wdGlvbnMpOiBBcHAge1xuICAgIC8vIERlc3BpdGUgc3VwcG9ydGluZyBtdWx0aXBsZSBzdGFja3MgeW91IGNhbiBzdGlsbCBvbmx5IGV2ZXJcbiAgICAvLyBoYXZlIGEgc2luZ2xlIEFwcGxpY2F0aW9uIHBlciBDREsgZGVwbG95bWVudFxuICAgIGlmICghQXBwLmluc3RhbmNlKSB7XG4gICAgICBBcHAuaW5zdGFuY2UgPSBuZXcgQXBwKG5hbWUsIG9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBzaW5nbGV0b24gZXhpc3RzIGJ1dCBuYW1lIGRpZmZlcnMsIHVwZGF0ZSBpdCAoYmVmb3JlIGFueSBpbmZyYSBpcyBkZWZpbmVkKVxuICAgICAgaWYgKG5hbWUgJiYgQXBwLmluc3RhbmNlLm5hbWUgIT09IG5hbWUpIHtcbiAgICAgICAgLy8gV2FybiBpZiBuZXR3b3JrIGFscmVhZHkgaW5pdGlhbGl6ZWQgLSBjaGFuZ2luZyBuYW1lIGFmdGVyIG5ldHdvcmsgZXhpc3RzIGNyZWF0ZXMgYSBtaXNtYXRjaFxuICAgICAgICBpZiAoQXBwLmluc3RhbmNlLnZwYykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBXYXJuaW5nOiBBcHAgbmFtZSBjaGFuZ2VkIGZyb20gXCIke0FwcC5pbnN0YW5jZS5uYW1lfVwiIHRvIFwiJHtuYW1lfVwiIGFmdGVyIG5ldHdvcmsgd2FzIGluaXRpYWxpemVkLiBgICtcbiAgICAgICAgICAgICAgYFZQQyB3aWxsIGhhdmUgbmFtZSBcIiR7QXBwLmluc3RhbmNlLm5hbWV9VnBjXCIgYnV0IGFwcCBuYW1lIGlzIFwiJHtuYW1lfVwiLiBgICtcbiAgICAgICAgICAgICAgYEVuc3VyZSBBcHAuZ2V0QXBwKCkgaXMgY2FsbGVkIHdpdGggdGhlIGZpbmFsIG5hbWUgYmVmb3JlIGluaXRpYWxpemluZyBuZXR3b3JrLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIEFwcC5pbnN0YW5jZS5uYW1lID0gbmFtZTtcbiAgICAgICAgLy8gUmVpbml0aWFsaXplIHN0YW5kYXJkIHRhZ3Mgd2l0aCB0aGUgbmV3IG5hbWVcbiAgICAgICAgQXBwLmluc3RhbmNlLmluaXRpYWxpc2VTdGFuZGFyZFRhZ3MoKTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgb3B0aW9ucyBwcm92aWRlZCBidXQgbmV0d29yayBub3QgeWV0IGluaXRpYWxpemVkLCBpbml0aWFsaXplIGl0IG5vd1xuICAgICAgaWYgKG9wdGlvbnM/Lm5ldHdvcmsgPT09IGZhbHNlKSB7XG4gICAgICAgIEFwcC5pbnN0YW5jZS5uZXR3b3JrRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgb3B0aW9ucz8ubmV0d29yayAmJlxuICAgICAgICAhQXBwLmluc3RhbmNlLnZwYyAmJlxuICAgICAgICAhQXBwLmluc3RhbmNlLm5ldHdvcmtEaXNhYmxlZFxuICAgICAgKSB7XG4gICAgICAgIEFwcC5pbnN0YW5jZS5pbml0aWFsaXNlTmV0d29yayhvcHRpb25zLm5ldHdvcmspO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBBcHAuaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBzdGFjayBieSBrZXkuIElmIHRoZSBzdGFjayBkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKiAgRGVwZW5kZW5jaWVzIGFyZSBvbmx5IGFwcGxpZWQgdGhlIGZpcnN0IHRpbWUgYSBzdGFjayBpcyBjcmVhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSBvZiB0aGUgc3RhY2tcbiAgICogQHBhcmFtIGRlcGVuZGVuY2llcyAtIFRoZSBzdGFjayhzKSB0aGF0IHRoaXMgc3RhY2sgZGVwZW5kcyBvblxuICAgKiBAcmV0dXJucyB7QXdzU3RhY2t9XG4gICAqL1xuICBwdWJsaWMgZ2V0U3RhY2soa2V5OiBzdHJpbmcsIGRlcGVuZGVuY2llcz86IEF3c1N0YWNrIHwgQXdzU3RhY2tbXSk6IEF3c1N0YWNrIHtcbiAgICAvLyBBcHBseSB0aGUgYXNwZWN0IG9uY2UgYmVmb3JlIGNyZWF0aW5nIHRoZSBmaXJzdCBzdGFja1xuICAgIGlmIChcbiAgICAgICF0aGlzLmFzcGVjdEFwcGxpZWQgJiZcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3RhY2tzKS5sZW5ndGggPT09IDAgJiZcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZ2xvYmFsVGFncykubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5hcHBseVRhZ3NBc3BlY3QoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc3RhY2tzW2tleV0pIHtcbiAgICAgIHRoaXMuc3RhY2tzW2tleV0gPSBuZXcgQXdzU3RhY2soa2V5LCBkZXBlbmRlbmNpZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YWNrc1trZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRlZmF1bHQgY29tcHV0ZSBzdGFjayAtIG5hbWVkIGFzIGAke3RoaXMubmFtZX1Db21wdXRlYFxuICAgKlxuICAgKiBPbmx5IGRlcGVuZHMgb24gTmV0d29yay4gRGF0YWJhc2UgZGVwZW5kZW5jeSBpcyBhZGRlZCBhdXRvbWF0aWNhbGx5XG4gICAqIGJ5IENESyB3aGVuIGNvbXB1dGUgcmVzb3VyY2VzIHJlZmVyZW5jZSBkYXRhYmFzZSByZXNvdXJjZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9Q29tcHV0ZWAsIHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZWZhdWx0IG5ldHdvcmsgc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9TmV0d29ya2BcbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHROZXR3b3JrU3RhY2soKTogQXdzU3RhY2sge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrKGAke3RoaXMubmFtZX1OZXR3b3JrYCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCBkYXRhYmFzZSBzdGFjayAtIG5hbWVkIGFzIGAke3RoaXMubmFtZX1EYXRhYmFzZWBcbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldERlZmF1bHREYXRhYmFzZVN0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9RGF0YWJhc2VgLCB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCBzdG9yYWdlIHN0YWNrIC0gbmFtZWQgYXMgYCR7dGhpcy5uYW1lfVN0b3JhZ2VgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0U3RvcmFnZVN0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9U3RvcmFnZWAsIHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBWUEMgYnkgbmFtZS4gSWYgbm8gbmFtZSBpcyBwcm92aWRlZCwgcmV0dXJucyB0aGUgZGVmYXVsdCBWUEMuXG4gICAqXG4gICAqIFRoaXMgaXMgYSBwdXJlIGdldHRlciAtIGl0IG5ldmVyIGNyZWF0ZXMgaW5mcmFzdHJ1Y3R1cmUuXG4gICAqIE5ldHdvcmsgbXVzdCBiZSBjb25maWd1cmVkIHZpYSBBcHAuZ2V0QXBwKCkgb3B0aW9ucyBvciBhcHAuYWRkTmV0d29yaygpLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIE9wdGlvbmFsIG5hbWUgb2YgdGhlIFZQQyB0byByZXRyaWV2ZS4gSWYgbm90IHByb3ZpZGVkLCByZXR1cm5zIHRoZSBkZWZhdWx0IFZQQy5cbiAgICogQHJldHVybnMge0lWcGN9IFRoZSBjb25maWd1cmVkIFZQQ1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgbmV0d29yayBpcyBkaXNhYmxlZCwgbm90IGNvbmZpZ3VyZWQsIG9yIG5hbWVkIFZQQyBub3QgZm91bmRcbiAgICovXG4gIHB1YmxpYyBnZXRWcGMobmFtZT86IHN0cmluZyk6IElWcGMge1xuICAgIGlmICh0aGlzLm5ldHdvcmtEaXNhYmxlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIk5ldHdvcmsgaXMgZGlzYWJsZWQgZm9yIHRoaXMgYXBwLiBDYW5ub3QgZ2V0IFZQQy4gXCIgK1xuICAgICAgICAgIFwiUGFzcyBuZXR3b3JrIGNvbmZpZyB0byBBcHAuZ2V0QXBwKCkgdG8gZW5hYmxlIG5ldHdvcmtpbmcuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSWYgbmFtZSBpcyBwcm92aWRlZCwgbG9vayBpbiBhZGRpdGlvbmFsIFZQQ3MgZmlyc3RcbiAgICBpZiAobmFtZSkge1xuICAgICAgY29uc3QgYWRkaXRpb25hbFZwYyA9IHRoaXMuYWRkaXRpb25hbFZwY3MuZ2V0KG5hbWUpO1xuICAgICAgaWYgKGFkZGl0aW9uYWxWcGMpIHtcbiAgICAgICAgcmV0dXJuIGFkZGl0aW9uYWxWcGM7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBWUEMgJyR7bmFtZX0nIG5vdCBmb3VuZC4gQXZhaWxhYmxlIFZQQ3M6ICR7dGhpcy5nZXRWcGNOYW1lcygpLmpvaW4oXCIsIFwiKX0uIGAgK1xuICAgICAgICAgIFwiQ3JlYXRlIGFkZGl0aW9uYWwgVlBDcyB1c2luZyBhcHAuYWRkTmV0d29yayhOZXR3b3JrRmFjdG9yeS5idWlsZCguLi4pKS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gZGVmYXVsdCBWUENcbiAgICBpZiAoIXRoaXMudnBjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTmV0d29yayBub3QgY29uZmlndXJlZC4gUGFzcyBuZXR3b3JrIGNvbmZpZyB0byBBcHAuZ2V0QXBwKCkuIFwiICtcbiAgICAgICAgICBcIkV4YW1wbGU6IEFwcC5nZXRBcHAoYXBwTmFtZSwgeyBuZXR3b3JrOiB7IG1heEF6czogMiB9IH0pXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnZwYztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG5hbWVzIG9mIGFsbCBhdmFpbGFibGUgVlBDcy5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ1tdfSBBcnJheSBvZiBWUEMgbmFtZXMuIEluY2x1ZGVzIFwiZGVmYXVsdFwiIGlmIHRoZSBkZWZhdWx0IFZQQyBpcyBjb25maWd1cmVkLlxuICAgKi9cbiAgcHVibGljIGdldFZwY05hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBuYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy52cGMpIHtcbiAgICAgIG5hbWVzLnB1c2goXCJkZWZhdWx0XCIpO1xuICAgIH1cbiAgICBuYW1lcy5wdXNoKC4uLnRoaXMuYWRkaXRpb25hbFZwY3Mua2V5cygpKTtcbiAgICByZXR1cm4gbmFtZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmVpdmUgdGhlIGRlZmF1bHQgYXBwbGljYXRpb24gY29udGFpbmVyIHJlZ2lzdHJ5LiBJZiB0aGUgcmVnaXN0cnkgZG9lcyBub3QgZXhpc3RcbiAgICogIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0Q29udGFpbmVyUmVnaXN0cnkoKTogRWNyIHtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdEVjcikge1xuICAgICAgY29uc3QgbmV0d29ya1N0YWNrID0gdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCk7XG5cbiAgICAgIHRoaXMuZGVmYXVsdEVjciA9IEVjckZhY3RvcnkuYnVpbGQoYCR7dGhpcy5uYW1lfUVjcmApKFxuICAgICAgICB0aGlzLFxuICAgICAgICBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0RWNyO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNyb3NzLWFjY291bnQgbW9uaXRvcmluZyByb2xlIGluIHRoZSBOZXR3b3JrIHN0YWNrIHRoYXQgYWxsb3dzXG4gICAqIHRoZSBGamFsbCB3ZWJhcHAgdG8gcXVlcnkgQ2xvdWRXYXRjaCBtZXRyaWNzIGFuZCBFQ1Mgc3RhdHVzLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViYXBwQWNjb3VudElkIC0gT3B0aW9uYWwgQVdTIGFjY291bnQgSUQgb2YgdGhlIEZqYWxsIHdlYmFwcC4gRGVmYXVsdHMgdG8gY29uZmlndXJlZCBwbGF0Zm9ybSBhY2NvdW50LlxuICAgKiBAcmV0dXJucyB7Um9sZX0gVGhlIGNyZWF0ZWQgbW9uaXRvcmluZyByb2xlXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlTW9uaXRvcmluZ1JvbGUod2ViYXBwQWNjb3VudElkPzogc3RyaW5nKTogUm9sZSB7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRNb25pdG9yaW5nUm9sZSkge1xuICAgICAgY29uc3QgbmV0d29ya1N0YWNrID0gdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCk7XG4gICAgICBjb25zdCBhY2NvdW50SWQgPVxuICAgICAgICB3ZWJhcHBBY2NvdW50SWQgfHwgRkpBTExfTU9OSVRPUklOR19DT05GSUcud2ViYXBwQXdzQWNjb3VudElkO1xuXG4gICAgICB0aGlzLmRlZmF1bHRNb25pdG9yaW5nUm9sZSA9IE1vbml0b3JpbmdSb2xlRmFjdG9yeS5idWlsZChcbiAgICAgICAgYCR7dGhpcy5uYW1lfU1vbml0b3JpbmdSb2xlYCxcbiAgICAgICAge1xuICAgICAgICAgIHdlYmFwcEFjY291bnRJZDogYWNjb3VudElkLFxuICAgICAgICAgIGFwcE5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICByb2xlTmFtZVByZWZpeDogRkpBTExfTU9OSVRPUklOR19DT05GSUcucm9sZU5hbWVQcmVmaXgsXG4gICAgICAgICAgcm9sZVBhdGg6IEZKQUxMX01PTklUT1JJTkdfQ09ORklHLnJvbGVQYXRoXG4gICAgICAgIH1cbiAgICAgICkodGhpcywgbmV0d29ya1N0YWNrLmdldFN0YWNrKCkpO1xuXG4gICAgICAvLyBSZWdpc3RlciB0aGUgcm9sZSB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrXG4gICAgICBuZXR3b3JrU3RhY2suYWRkQ29uc3RydWN0KHRoaXMuZGVmYXVsdE1vbml0b3JpbmdSb2xlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0TW9uaXRvcmluZ1JvbGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY3Jvc3MtYWNjb3VudCBhdWRpdCByb2xlIGluIHRoZSBOZXR3b3JrIHN0YWNrIHRoYXQgYWxsb3dzXG4gICAqIHRoZSBGamFsbCBwbGF0Zm9ybSB0byB1c2UgQ2xvdWRRdWVyeSBmb3IgY29tcHJlaGVuc2l2ZSBBV1MgcmVzb3VyY2UgYXVkaXRpbmcuXG4gICAqXG4gICAqIFRoaXMgaXMgYW4gZXhwbGljaXQgb3B0LWluIGZlYXR1cmUuIENhbGwgdGhpcyBtZXRob2QgdG8gZW5hYmxlIENsb3VkUXVlcnlcbiAgICogYXVkaXQgY2FwYWJpbGl0aWVzIGZvciB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViYXBwQWNjb3VudElkIC0gT3B0aW9uYWwgQVdTIGFjY291bnQgSUQgb2YgdGhlIEZqYWxsIHdlYmFwcC4gRGVmYXVsdHMgdG8gY29uZmlndXJlZCBwbGF0Zm9ybSBhY2NvdW50LlxuICAgKiBAcGFyYW0gZXh0ZXJuYWxJZCAtIE9wdGlvbmFsIGV4dGVybmFsIElEIGZvciBhZGRpdGlvbmFsIHNlY3VyaXR5LiBJZiBub3QgcHJvdmlkZWQsIGEgdW5pcXVlIElEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcmV0dXJucyB7Um9sZX0gVGhlIGNyZWF0ZWQgYXVkaXQgcm9sZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZUF1ZGl0Um9sZSh3ZWJhcHBBY2NvdW50SWQ/OiBzdHJpbmcsIGV4dGVybmFsSWQ/OiBzdHJpbmcpOiBSb2xlIHtcbiAgICBpZiAoIXRoaXMuZGVmYXVsdEF1ZGl0Um9sZSkge1xuICAgICAgY29uc3QgbmV0d29ya1N0YWNrID0gdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCk7XG4gICAgICBjb25zdCBhY2NvdW50SWQgPVxuICAgICAgICB3ZWJhcHBBY2NvdW50SWQgfHwgRkpBTExfQVVESVRfQ09ORklHLndlYmFwcEF3c0FjY291bnRJZDtcblxuICAgICAgLy8gR2VuZXJhdGUgb3IgdXNlIHByb3ZpZGVkIGV4dGVybmFsIElEXG4gICAgICB0aGlzLmF1ZGl0Um9sZUV4dGVybmFsSWQgPSBleHRlcm5hbElkIHx8IHRoaXMuZ2VuZXJhdGVBdWRpdEV4dGVybmFsSWQoKTtcblxuICAgICAgdGhpcy5kZWZhdWx0QXVkaXRSb2xlID0gQXVkaXRSb2xlRmFjdG9yeS5idWlsZChgJHt0aGlzLm5hbWV9QXVkaXRSb2xlYCwge1xuICAgICAgICB3ZWJhcHBBY2NvdW50SWQ6IGFjY291bnRJZCxcbiAgICAgICAgYXBwTmFtZTogdGhpcy5uYW1lLFxuICAgICAgICBleHRlcm5hbElkOiB0aGlzLmF1ZGl0Um9sZUV4dGVybmFsSWQsXG4gICAgICAgIHJvbGVOYW1lUHJlZml4OiBGSkFMTF9BVURJVF9DT05GSUcucm9sZU5hbWVQcmVmaXgsXG4gICAgICAgIHJvbGVQYXRoOiBGSkFMTF9BVURJVF9DT05GSUcucm9sZVBhdGhcbiAgICAgIH0pKHRoaXMsIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpKTtcblxuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHJvbGUgd2l0aCB0aGUgbmV0d29yayBzdGFja1xuICAgICAgbmV0d29ya1N0YWNrLmFkZENvbnN0cnVjdCh0aGlzLmRlZmF1bHRBdWRpdFJvbGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRBdWRpdFJvbGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBleHRlcm5hbCBJRCB1c2VkIGZvciB0aGUgYXVkaXQgcm9sZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBUaGUgZXh0ZXJuYWwgSUQgaWYgYXVkaXQgcm9sZSBoYXMgYmVlbiBjcmVhdGVkXG4gICAqL1xuICBwdWJsaWMgZ2V0QXVkaXRSb2xlRXh0ZXJuYWxJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmF1ZGl0Um9sZUV4dGVybmFsSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSB1bmlxdWUgZXh0ZXJuYWwgSUQgZm9yIGF1ZGl0IHJvbGVcbiAgICogRm9ybWF0OiBmamFsbC1hdWRpdC17YXBwTmFtZX0te3RpbWVzdGFtcH1cbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVBdWRpdEV4dGVybmFsSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBgZmphbGwtYXVkaXQtJHt0aGlzLm5hbWUudG9Mb3dlckNhc2UoKX0tJHt0aW1lc3RhbXB9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBjb21wdXRlIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IGNvbXB1dGUgc3RhY2sgdXNpbmcgdGhlIGZhY3RvcnkgcGF0dGVybi5cbiAgICogQXV0b21hdGljYWxseSBjcmVhdGVzIG1vbml0b3Jpbmcgcm9sZSBpZiBub3QgYWxyZWFkeSBjcmVhdGVkLlxuICAgKlxuICAgKiBTdXBwb3J0cyBDb21wdXRlRmFjdG9yeSAoRUNTLCBFQzIsIExhbWJkYSkuXG4gICAqL1xuICBwdWJsaWMgYWRkQ29tcHV0ZTxUIGV4dGVuZHMgQ29uc3RydWN0PihcbiAgICBmbjogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBUXG4gICk6IFQge1xuICAgIC8vIEF1dG8tY3JlYXRlIG1vbml0b3Jpbmcgcm9sZSB3aGVuIGNvbXB1dGUgaXMgYWRkZWRcbiAgICBpZiAoIXRoaXMuZGVmYXVsdE1vbml0b3JpbmdSb2xlKSB7XG4gICAgICB0aGlzLmNyZWF0ZU1vbml0b3JpbmdSb2xlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcHV0ZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk7XG4gICAgY29uc3QgY29uc3RydWN0ID0gZm4odGhpcywgY29tcHV0ZVN0YWNrLmdldFN0YWNrKCkpO1xuICAgIGNvbXB1dGVTdGFjay5hZGRDb25zdHJ1Y3QoY29uc3RydWN0KTtcbiAgICByZXR1cm4gY29uc3RydWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGFkZCBhIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IGNvbXB1dGUgc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYWRkQ29tcHV0ZVJlc291cmNlKHJlc291cmNlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBjb21wdXRlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRDb21wdXRlU3RhY2soKTtcbiAgICBjb21wdXRlU3RhY2suYWRkQ29uc3RydWN0KHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBkYXRhYmFzZSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBkYXRhYmFzZSBzdGFjayB1c2luZyB0aGUgZmFjdG9yeSBwYXR0ZXJuLlxuICAgKi9cbiAgcHVibGljIGFkZERhdGFiYXNlKGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IENvbnN0cnVjdCk6IERhdGFiYXNlIHtcbiAgICBjb25zdCBkYXRhYmFzZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0RGF0YWJhc2VTdGFjaygpO1xuICAgIGNvbnN0IGRhdGFiYXNlQ29uc3RydWN0ID0gZm4odGhpcywgZGF0YWJhc2VTdGFjay5nZXRTdGFjaygpKTtcbiAgICBkYXRhYmFzZVN0YWNrLmFkZENvbnN0cnVjdChkYXRhYmFzZUNvbnN0cnVjdCk7XG5cbiAgICByZXR1cm4gZGF0YWJhc2VDb25zdHJ1Y3QgYXMgdW5rbm93biBhcyBEYXRhYmFzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzdG9yYWdlIHJlc291cmNlIChTMykgdG8gdGhlIGRlZmF1bHQgc3RvcmFnZSBzdGFjayB1c2luZyB0aGUgZmFjdG9yeSBwYXR0ZXJuLlxuICAgKi9cbiAgcHVibGljIGFkZFN0b3JhZ2UoZm46IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQ29uc3RydWN0KTogQ29uc3RydWN0IHtcbiAgICBjb25zdCBzdG9yYWdlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRTdG9yYWdlU3RhY2soKTtcbiAgICBjb25zdCBzdG9yYWdlQ29uc3RydWN0ID0gZm4odGhpcywgc3RvcmFnZVN0YWNrLmdldFN0YWNrKCkpO1xuICAgIHN0b3JhZ2VTdGFjay5hZGRDb25zdHJ1Y3Qoc3RvcmFnZUNvbnN0cnVjdCk7XG5cbiAgICByZXR1cm4gc3RvcmFnZUNvbnN0cnVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gYWRkaXRpb25hbCBuZXR3b3JrIChWUEMpIHRvIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgdG8gY3JlYXRlIGFkZGl0aW9uYWwgVlBDcyBiZXlvbmQgdGhlIGRlZmF1bHQgVlBDIGNvbmZpZ3VyZWQgdmlhIEFwcC5nZXRBcHAoKS5cbiAgICogQWRkaXRpb25hbCBWUENzIGNhbiBiZSByZXRyaWV2ZWQgYnkgbmFtZSB1c2luZyBhcHAuZ2V0VnBjKG5hbWUpLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gLSBGYWN0b3J5IGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyB0aGUgTmV0d29yayBjb25zdHJ1Y3RcbiAgICogQHJldHVybnMge05ldHdvcmt9IFRoZSBjcmVhdGVkIE5ldHdvcmsgY29uc3RydWN0XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IGlzb2xhdGVkVnBjID0gYXBwLmFkZE5ldHdvcmsoXG4gICAqICAgTmV0d29ya0ZhY3RvcnkuYnVpbGQoXCJJc29sYXRlZFZwY1wiLCB7IG1heEF6czogMiwgbmF0R2F0ZXdheXM6IGZhbHNlIH0pXG4gICAqICk7XG4gICAqL1xuICBwdWJsaWMgYWRkTmV0d29yayhmbjogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBOZXR3b3JrKTogTmV0d29yayB7XG4gICAgY29uc3QgbmV0d29ya1N0YWNrID0gdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCk7XG4gICAgY29uc3QgbmV0d29yayA9IGZuKHRoaXMsIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpKTtcbiAgICBjb25zdCB2cGNOYW1lID0gbmV0d29yay5ub2RlLmlkO1xuXG4gICAgLy8gU3RvcmUgaW4gYWRkaXRpb25hbCBWUENzIG1hcCBmb3IgcmV0cmlldmFsIHZpYSBnZXRWcGMobmFtZSlcbiAgICB0aGlzLmFkZGl0aW9uYWxWcGNzLnNldCh2cGNOYW1lLCBuZXR3b3JrLmdldFZwYygpKTtcbiAgICBuZXR3b3JrU3RhY2suYWRkQ29uc3RydWN0KG5ldHdvcmspO1xuXG4gICAgcmV0dXJuIG5ldHdvcms7XG4gIH1cblxuICAvKipcbiAgICogTWFudWFsbHkgYWRkIGEgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgZGF0YWJhc2Ugc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYWRkRGF0YWJhc2VSZXNvdXJjZShyZXNvdXJjZTogQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3QgZGF0YWJhc2VTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdERhdGFiYXNlU3RhY2soKTtcbiAgICBkYXRhYmFzZVN0YWNrLmFkZENvbnN0cnVjdChyZXNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogTWFudWFsbHkgYWRkIGEgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgc3RvcmFnZSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBhZGRTdG9yYWdlUmVzb3VyY2UocmVzb3VyY2U6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNvbnN0IHN0b3JhZ2VTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpO1xuICAgIHN0b3JhZ2VTdGFjay5hZGRDb25zdHJ1Y3QocmVzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgc3RhbmRhcmQgdGFnc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXNlU3RhbmRhcmRUYWdzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIHRoaXMuZ2xvYmFsVGFncyA9IHtcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246ZW52aXJvbm1lbnRcIjogY29uZmlnLmVudmlyb25tZW50LFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpzZXJ2aWNlXCI6IHRoaXMubmFtZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYWxsIHRhZ3MgdXNpbmcgQ0RLJ3MgbmF0aXZlIFRhZ3Mub2YoKS5hZGQoKSBBUElcbiAgICovXG4gIHByaXZhdGUgYXBwbHlUYWdzQXNwZWN0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hc3BlY3RBcHBsaWVkICYmIE9iamVjdC5rZXlzKHRoaXMuZ2xvYmFsVGFncykubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQXBwbHkgc3RhbmRhcmQgdGFncyB1c2luZyBUYWdzLm9mKHRoaXMpLmFkZCgpXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLmdsb2JhbFRhZ3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBUYWdzLm9mKHRoaXMpLmFkZChrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBcHBseSBhc3BlY3QgZm9yIHJlc291cmNlLXNwZWNpZmljIHRhZ3MgKElQQU0gcG9vbCwgYmFja3VwIHRpZXIpXG4gICAgICBBc3BlY3RzLm9mKHRoaXMpLmFkZChuZXcgU3RhbmRhcmRUYWdzQXNwZWN0KCkpO1xuXG4gICAgICB0aGlzLmFzcGVjdEFwcGxpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY3VzdG9tIHRhZ3MgdG8gYWxsIHJlc291cmNlcyBpbiB0aGUgYXBwLlxuICAgKlxuICAgKiBAcGFyYW0gdGFncyBDdXN0b20gdGFncyB0byBhcHBseSB0byBhbGwgcmVzb3VyY2VzXG4gICAqIEBleGFtcGxlXG4gICAqIGFwcC5hZGRUYWdzKHtcbiAgICogICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOm93bmVyXCI6IFwicGxhdGZvcm0tdGVhbVwiLFxuICAgKiAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246Y29zdC1jZW50ZXJcIjogXCJDQy0xMjNcIixcbiAgICogICBcInRlYW06c2xhY2stY2hhbm5lbFwiOiBcIiNwbGF0Zm9ybS1hbGVydHNcIlxuICAgKiB9KTtcbiAgICovXG4gIHB1YmxpYyBhZGRUYWdzKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBBcHAge1xuICAgIC8vIE1lcmdlIHRhZ3MgaW50byBnbG9iYWxUYWdzIGZvciB0cmFja2luZ1xuICAgIHRoaXMuZ2xvYmFsVGFncyA9IHtcbiAgICAgIC4uLnRoaXMuZ2xvYmFsVGFncyxcbiAgICAgIC4uLnRhZ3NcbiAgICB9O1xuICAgIE9iamVjdC5lbnRyaWVzKHRhZ3MpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgcmVzb3VyY2UgaW52ZW50b3J5IGNvbGxlY3RlZCBkdXJpbmcgc3ludGhlc2lzXG4gICAqIENhbGwgdGhpcyBhZnRlciBhcHAuc3ludGgoKSB0byBnZXQgY29tcGxldGUgcmVzb3VyY2UgaW52ZW50b3J5XG4gICAqIEByZXR1cm5zIHtSZXNvdXJjZUludmVudG9yeX0gQ29tcGxldGUgaW52ZW50b3J5IG9mIGFsbCByZXNvdXJjZXMgaW4gdGhlIGFwcFxuICAgKi9cbiAgcHVibGljIGV4cG9ydFJlc291cmNlSW52ZW50b3J5KCk6IFJlc291cmNlSW52ZW50b3J5IHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb3VyY2VzOiB0aGlzLnJlc291cmNlSW52ZW50b3J5LmdldEludmVudG9yeSgpLFxuICAgICAgZ2VuZXJhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBhcHBfbmFtZTogdGhpcy5uYW1lXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBzeW50aCB0byBhdXRvbWF0aWNhbGx5IGV4cG9ydCByZXNvdXJjZSBpbnZlbnRvcnlcbiAgICovXG4gIHB1YmxpYyBzeW50aChvcHRpb25zPzogU3RhZ2VTeW50aGVzaXNPcHRpb25zKTogQ2xvdWRBc3NlbWJseSB7XG4gICAgLy8gQ2FsbCBwYXJlbnQgc3ludGggZmlyc3RcbiAgICBjb25zdCBhc3NlbWJseSA9IHN1cGVyLnN5bnRoKG9wdGlvbnMpO1xuXG4gICAgLy8gQWZ0ZXIgc3ludGhlc2lzLCB3cml0ZSByZXNvdXJjZSBpbnZlbnRvcnkgdG8gY2RrLm91dFxuICAgIHRyeSB7XG4gICAgICAvLyBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcbiAgICAgIC8vIGNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcbiAgICAgIC8vIGNvbnN0IGludmVudG9yeSA9IHRoaXMuZXhwb3J0UmVzb3VyY2VJbnZlbnRvcnkoKTtcbiAgICAgIC8vIGNvbnN0IGludmVudG9yeVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAvLyAgIGFzc2VtYmx5LmRpcmVjdG9yeSxcbiAgICAgIC8vICAgXCJyZXNvdXJjZS1pbnZlbnRvcnkuanNvblwiXG4gICAgICAvLyApO1xuICAgICAgLy8gZnMud3JpdGVGaWxlU3luYyhpbnZlbnRvcnlQYXRoLCBKU09OLnN0cmluZ2lmeShpbnZlbnRvcnksIG51bGwsIDIpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRG9uJ3QgZmFpbCBzeW50aCBpZiBpbnZlbnRvcnkgZXhwb3J0IGZhaWxzXG4gICAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gZXhwb3J0IHJlc291cmNlIGludmVudG9yeTpcIiwgZXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiBhc3NlbWJseTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcHA7XG4iXX0=
@@ -0,0 +1,67 @@
1
+ import { Construct } from "constructs";
2
+ import { type Role } from "aws-cdk-lib/aws-iam";
3
+ import { type CICDProvider } from "../../resources/aws/cicd/cicdRole";
4
+ export interface CICDRoleProps {
5
+ /**
6
+ * The CI/CD provider (github-actions, buildkite, gitlab-ci)
7
+ */
8
+ provider: CICDProvider;
9
+ /**
10
+ * For GitHub Actions: repository in format "org/repo"
11
+ * For Buildkite: organization slug
12
+ * For GitLab CI: project path in format "group/project"
13
+ */
14
+ repositoryOrOrg: string;
15
+ /**
16
+ * Optional custom role name
17
+ * Defaults to "FjallDeploy-{provider}-{appName}"
18
+ */
19
+ roleName?: string;
20
+ /**
21
+ * Optional ARN of existing OIDC provider (skips creation)
22
+ * Useful when OIDC provider already exists in the account
23
+ */
24
+ existingProviderArn?: string;
25
+ }
26
+ /**
27
+ * High-level pattern for adding CI/CD OIDC authentication to an application.
28
+ *
29
+ * This creates an OIDC provider (if needed) and a deploy role that can be assumed
30
+ * by your CI/CD system without long-lived credentials.
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * import { App, CICDRole } from "@fjall/components-infrastructure";
35
+ *
36
+ * const app = App.getApp("MyApp");
37
+ *
38
+ * // Add GitHub Actions OIDC authentication
39
+ * const cicdRole = new CICDRole(app, "GitHubDeployRole", {
40
+ * provider: "github-actions",
41
+ * repositoryOrOrg: "myorg/myrepo"
42
+ * });
43
+ *
44
+ * // Continue with normal application setup
45
+ * app.addCompute(/* ... *\/);
46
+ * ```
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * // Use existing OIDC provider (created via fjall cicd setup)
51
+ * const cicdRole = new CICDRole(app, "GitHubDeployRole", {
52
+ * provider: "github-actions",
53
+ * repositoryOrOrg: "myorg/myrepo",
54
+ * existingProviderArn: "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
55
+ * });
56
+ * ```
57
+ */
58
+ export declare class CICDRole extends Construct {
59
+ readonly role: Role;
60
+ readonly provider: CICDProvider;
61
+ constructor(scope: Construct, id: string, props: CICDRoleProps);
62
+ /**
63
+ * Get the role ARN for use in CI/CD configuration
64
+ */
65
+ getRoleArn(): string;
66
+ }
67
+ export default CICDRole;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CICDRole = void 0;
4
+ const constructs_1 = require("constructs");
5
+ const app_1 = require("../../app");
6
+ const cicdRole_1 = require("../../resources/aws/cicd/cicdRole");
7
+ /**
8
+ * High-level pattern for adding CI/CD OIDC authentication to an application.
9
+ *
10
+ * This creates an OIDC provider (if needed) and a deploy role that can be assumed
11
+ * by your CI/CD system without long-lived credentials.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { App, CICDRole } from "@fjall/components-infrastructure";
16
+ *
17
+ * const app = App.getApp("MyApp");
18
+ *
19
+ * // Add GitHub Actions OIDC authentication
20
+ * const cicdRole = new CICDRole(app, "GitHubDeployRole", {
21
+ * provider: "github-actions",
22
+ * repositoryOrOrg: "myorg/myrepo"
23
+ * });
24
+ *
25
+ * // Continue with normal application setup
26
+ * app.addCompute(/* ... *\/);
27
+ * ```
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * // Use existing OIDC provider (created via fjall cicd setup)
32
+ * const cicdRole = new CICDRole(app, "GitHubDeployRole", {
33
+ * provider: "github-actions",
34
+ * repositoryOrOrg: "myorg/myrepo",
35
+ * existingProviderArn: "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
36
+ * });
37
+ * ```
38
+ */
39
+ class CICDRole extends constructs_1.Construct {
40
+ constructor(scope, id, props) {
41
+ super(scope, id);
42
+ // Get the App instance
43
+ const app = scope instanceof app_1.default ? scope : app_1.default.getInstance();
44
+ const networkStack = app.getDefaultNetworkStack();
45
+ this.provider = props.provider;
46
+ // Build the config for the factory
47
+ const config = {
48
+ provider: props.provider,
49
+ appName: app["name"],
50
+ repositoryOrOrg: props.repositoryOrOrg,
51
+ roleName: props.roleName,
52
+ existingProviderArn: props.existingProviderArn
53
+ };
54
+ // Create the CI/CD role using the factory
55
+ this.role = cicdRole_1.default.build(`${app["name"]}CICDRole`, config)(app, networkStack.getStack());
56
+ // Register the role with the network stack
57
+ networkStack.addConstruct(this.role);
58
+ }
59
+ /**
60
+ * Get the role ARN for use in CI/CD configuration
61
+ */
62
+ getRoleArn() {
63
+ return this.role.roleArn;
64
+ }
65
+ }
66
+ exports.CICDRole = CICDRole;
67
+ exports.default = CICDRole;
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ljZFJvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL2NpY2RSb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUV2QyxtQ0FBNEI7QUFDNUIsZ0VBRzJDO0FBNEIzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCRztBQUNILE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBSXJDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQix1QkFBdUI7UUFDdkIsTUFBTSxHQUFHLEdBQUcsS0FBSyxZQUFZLGFBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDN0QsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBRS9CLG1DQUFtQztRQUNuQyxNQUFNLE1BQU0sR0FBbUI7WUFDN0IsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLE9BQU8sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQ3BCLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZTtZQUN0QyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLG1CQUFtQjtTQUMvQyxDQUFDO1FBRUYsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FDakUsR0FBRyxFQUNILFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FDeEIsQ0FBQztRQUVGLDJDQUEyQztRQUMzQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUF0Q0QsNEJBc0NDO0FBRUQsa0JBQWUsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IHR5cGUgUm9sZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCBDSUNEUm9sZUZhY3RvcnksIHtcbiAgdHlwZSBDSUNEUHJvdmlkZXIsXG4gIHR5cGUgQ0lDRFJvbGVDb25maWdcbn0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvY2ljZC9jaWNkUm9sZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENJQ0RSb2xlUHJvcHMge1xuICAvKipcbiAgICogVGhlIENJL0NEIHByb3ZpZGVyIChnaXRodWItYWN0aW9ucywgYnVpbGRraXRlLCBnaXRsYWItY2kpXG4gICAqL1xuICBwcm92aWRlcjogQ0lDRFByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBGb3IgR2l0SHViIEFjdGlvbnM6IHJlcG9zaXRvcnkgaW4gZm9ybWF0IFwib3JnL3JlcG9cIlxuICAgKiBGb3IgQnVpbGRraXRlOiBvcmdhbml6YXRpb24gc2x1Z1xuICAgKiBGb3IgR2l0TGFiIENJOiBwcm9qZWN0IHBhdGggaW4gZm9ybWF0IFwiZ3JvdXAvcHJvamVjdFwiXG4gICAqL1xuICByZXBvc2l0b3J5T3JPcmc6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIHJvbGUgbmFtZVxuICAgKiBEZWZhdWx0cyB0byBcIkZqYWxsRGVwbG95LXtwcm92aWRlcn0te2FwcE5hbWV9XCJcbiAgICovXG4gIHJvbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBBUk4gb2YgZXhpc3RpbmcgT0lEQyBwcm92aWRlciAoc2tpcHMgY3JlYXRpb24pXG4gICAqIFVzZWZ1bCB3aGVuIE9JREMgcHJvdmlkZXIgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGFjY291bnRcbiAgICovXG4gIGV4aXN0aW5nUHJvdmlkZXJBcm4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGlnaC1sZXZlbCBwYXR0ZXJuIGZvciBhZGRpbmcgQ0kvQ0QgT0lEQyBhdXRoZW50aWNhdGlvbiB0byBhbiBhcHBsaWNhdGlvbi5cbiAqXG4gKiBUaGlzIGNyZWF0ZXMgYW4gT0lEQyBwcm92aWRlciAoaWYgbmVlZGVkKSBhbmQgYSBkZXBsb3kgcm9sZSB0aGF0IGNhbiBiZSBhc3N1bWVkXG4gKiBieSB5b3VyIENJL0NEIHN5c3RlbSB3aXRob3V0IGxvbmctbGl2ZWQgY3JlZGVudGlhbHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IEFwcCwgQ0lDRFJvbGUgfSBmcm9tIFwiQGZqYWxsL2NvbXBvbmVudHMtaW5mcmFzdHJ1Y3R1cmVcIjtcbiAqXG4gKiBjb25zdCBhcHAgPSBBcHAuZ2V0QXBwKFwiTXlBcHBcIik7XG4gKlxuICogLy8gQWRkIEdpdEh1YiBBY3Rpb25zIE9JREMgYXV0aGVudGljYXRpb25cbiAqIGNvbnN0IGNpY2RSb2xlID0gbmV3IENJQ0RSb2xlKGFwcCwgXCJHaXRIdWJEZXBsb3lSb2xlXCIsIHtcbiAqICAgcHJvdmlkZXI6IFwiZ2l0aHViLWFjdGlvbnNcIixcbiAqICAgcmVwb3NpdG9yeU9yT3JnOiBcIm15b3JnL215cmVwb1wiXG4gKiB9KTtcbiAqXG4gKiAvLyBDb250aW51ZSB3aXRoIG5vcm1hbCBhcHBsaWNhdGlvbiBzZXR1cFxuICogYXBwLmFkZENvbXB1dGUoLyogLi4uICpcXC8pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFVzZSBleGlzdGluZyBPSURDIHByb3ZpZGVyIChjcmVhdGVkIHZpYSBmamFsbCBjaWNkIHNldHVwKVxuICogY29uc3QgY2ljZFJvbGUgPSBuZXcgQ0lDRFJvbGUoYXBwLCBcIkdpdEh1YkRlcGxveVJvbGVcIiwge1xuICogICBwcm92aWRlcjogXCJnaXRodWItYWN0aW9uc1wiLFxuICogICByZXBvc2l0b3J5T3JPcmc6IFwibXlvcmcvbXlyZXBvXCIsXG4gKiAgIGV4aXN0aW5nUHJvdmlkZXJBcm46IFwiYXJuOmF3czppYW06OjEyMzQ1Njc4OTAxMjpvaWRjLXByb3ZpZGVyL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tXCJcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDSUNEUm9sZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSByb2xlOiBSb2xlO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlkZXI6IENJQ0RQcm92aWRlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ0lDRFJvbGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBHZXQgdGhlIEFwcCBpbnN0YW5jZVxuICAgIGNvbnN0IGFwcCA9IHNjb3BlIGluc3RhbmNlb2YgQXBwID8gc2NvcGUgOiBBcHAuZ2V0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBuZXR3b3JrU3RhY2sgPSBhcHAuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgdGhpcy5wcm92aWRlciA9IHByb3BzLnByb3ZpZGVyO1xuXG4gICAgLy8gQnVpbGQgdGhlIGNvbmZpZyBmb3IgdGhlIGZhY3RvcnlcbiAgICBjb25zdCBjb25maWc6IENJQ0RSb2xlQ29uZmlnID0ge1xuICAgICAgcHJvdmlkZXI6IHByb3BzLnByb3ZpZGVyLFxuICAgICAgYXBwTmFtZTogYXBwW1wibmFtZVwiXSxcbiAgICAgIHJlcG9zaXRvcnlPck9yZzogcHJvcHMucmVwb3NpdG9yeU9yT3JnLFxuICAgICAgcm9sZU5hbWU6IHByb3BzLnJvbGVOYW1lLFxuICAgICAgZXhpc3RpbmdQcm92aWRlckFybjogcHJvcHMuZXhpc3RpbmdQcm92aWRlckFyblxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgdGhlIENJL0NEIHJvbGUgdXNpbmcgdGhlIGZhY3RvcnlcbiAgICB0aGlzLnJvbGUgPSBDSUNEUm9sZUZhY3RvcnkuYnVpbGQoYCR7YXBwW1wibmFtZVwiXX1DSUNEUm9sZWAsIGNvbmZpZykoXG4gICAgICBhcHAsXG4gICAgICBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKVxuICAgICk7XG5cbiAgICAvLyBSZWdpc3RlciB0aGUgcm9sZSB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrXG4gICAgbmV0d29ya1N0YWNrLmFkZENvbnN0cnVjdCh0aGlzLnJvbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcm9sZSBBUk4gZm9yIHVzZSBpbiBDSS9DRCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0Um9sZUFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJvbGUucm9sZUFybjtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBDSUNEUm9sZTtcbiJdfQ==
@@ -0,0 +1,65 @@
1
+ import { Role, PolicyStatement } from "aws-cdk-lib/aws-iam";
2
+ import { type Construct } from "constructs";
3
+ /**
4
+ * Supported CI/CD providers
5
+ */
6
+ export type CICDProvider = "github-actions" | "buildkite" | "gitlab-ci";
7
+ /**
8
+ * Configuration for creating a CI/CD deploy role
9
+ */
10
+ export interface CICDRoleConfig {
11
+ /**
12
+ * The CI/CD provider (github-actions, buildkite, gitlab-ci)
13
+ */
14
+ provider: CICDProvider;
15
+ /**
16
+ * The application name to scope the role's permissions to
17
+ */
18
+ appName: string;
19
+ /**
20
+ * For GitHub Actions: repository (org/repo)
21
+ * For Buildkite: organization slug
22
+ * For GitLab CI: project path (group/project)
23
+ */
24
+ repositoryOrOrg: string;
25
+ /**
26
+ * Optional role name. Defaults to "FjallDeploy-{provider}-{appName}"
27
+ */
28
+ roleName?: string;
29
+ /**
30
+ * Optional IAM path for the role. Defaults to "/"
31
+ */
32
+ rolePath?: string;
33
+ /**
34
+ * Optional custom permissions. If not provided, default deployment permissions will be used.
35
+ */
36
+ customPermissions?: PolicyStatement[];
37
+ /**
38
+ * Whether to use existing OIDC provider or create a new one
39
+ * If true, will look for existing provider by URL
40
+ */
41
+ useExistingProvider?: boolean;
42
+ /**
43
+ * Optional ARN of existing OIDC provider (skips creation)
44
+ */
45
+ existingProviderArn?: string;
46
+ }
47
+ /**
48
+ * Factory to build a CI/CD deploy IAM role with OIDC authentication.
49
+ * Creates both the OIDC provider (if needed) and the deploy role with appropriate permissions.
50
+ */
51
+ export declare class CICDRoleFactory {
52
+ /**
53
+ * Build a CI/CD deploy role with OIDC authentication
54
+ */
55
+ static build(id: string, config: CICDRoleConfig): (app: Construct, scope: Construct) => Role;
56
+ /**
57
+ * Build trust policy conditions based on CI/CD provider
58
+ */
59
+ private static buildTrustConditions;
60
+ /**
61
+ * Add default deployment permissions to the role
62
+ */
63
+ private static addDefaultDeployPermissions;
64
+ }
65
+ export default CICDRoleFactory;
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CICDRoleFactory = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
6
+ /**
7
+ * OIDC provider configurations for different CI/CD systems
8
+ */
9
+ const OIDC_CONFIGS = {
10
+ "github-actions": {
11
+ url: "https://token.actions.githubusercontent.com",
12
+ clientIds: ["sts.amazonaws.com"],
13
+ thumbprints: [
14
+ "6938fd4d98bab03faadb97b34396831e3780aea1",
15
+ "1c58a3a8518e8759bf075b76b750d4f2df264fcd"
16
+ ]
17
+ },
18
+ buildkite: {
19
+ url: "https://agent.buildkite.com",
20
+ clientIds: ["sts.amazonaws.com"],
21
+ thumbprints: ["9e99a48a9960b14926bb7f3b02e22da2b0ab7280"]
22
+ },
23
+ "gitlab-ci": {
24
+ url: "https://gitlab.com",
25
+ clientIds: ["https://gitlab.com"],
26
+ thumbprints: ["b3dd7606d2b5a8b4a13771dbecc9ee1cecafa38a"]
27
+ }
28
+ };
29
+ /**
30
+ * Factory to build a CI/CD deploy IAM role with OIDC authentication.
31
+ * Creates both the OIDC provider (if needed) and the deploy role with appropriate permissions.
32
+ */
33
+ class CICDRoleFactory {
34
+ /**
35
+ * Build a CI/CD deploy role with OIDC authentication
36
+ */
37
+ static build(id, config) {
38
+ return (_app, scope) => {
39
+ const providerConfig = OIDC_CONFIGS[config.provider];
40
+ const roleName = config.roleName || `FjallDeploy-${config.provider}-${config.appName}`;
41
+ // Create or reference OIDC provider
42
+ let oidcProvider;
43
+ if (config.existingProviderArn) {
44
+ // Use existing provider by ARN
45
+ oidcProvider = aws_iam_1.OpenIdConnectProvider.fromOpenIdConnectProviderArn(scope, `${id}OidcProvider`, config.existingProviderArn);
46
+ }
47
+ else {
48
+ // Create new OIDC provider
49
+ oidcProvider = new aws_iam_1.OpenIdConnectProvider(scope, `${id}OidcProvider`, {
50
+ url: providerConfig.url,
51
+ clientIds: providerConfig.clientIds,
52
+ thumbprints: providerConfig.thumbprints
53
+ });
54
+ }
55
+ // Build trust policy conditions based on provider
56
+ const conditions = this.buildTrustConditions(config.provider, config.repositoryOrOrg, oidcProvider.openIdConnectProviderIssuer);
57
+ // Create the role with OIDC web identity principal
58
+ const role = new aws_iam_1.Role(scope, id, {
59
+ roleName: roleName,
60
+ path: config.rolePath || "/",
61
+ assumedBy: new aws_iam_1.WebIdentityPrincipal(oidcProvider.openIdConnectProviderArn, conditions),
62
+ description: `CI/CD deploy role for ${config.provider} - ${config.appName}`
63
+ });
64
+ // Add permissions
65
+ if (config.customPermissions) {
66
+ config.customPermissions.forEach((statement) => {
67
+ role.addToPolicy(statement);
68
+ });
69
+ }
70
+ else {
71
+ this.addDefaultDeployPermissions(role);
72
+ }
73
+ // Export the role ARN
74
+ new aws_cdk_lib_1.CfnOutput(scope, `${id}Arn`, {
75
+ value: role.roleArn,
76
+ description: `ARN of the CI/CD deploy role for ${config.appName}`,
77
+ exportName: `${config.appName}-CICDRoleArn`
78
+ });
79
+ // Export the OIDC provider ARN
80
+ new aws_cdk_lib_1.CfnOutput(scope, `${id}ProviderArn`, {
81
+ value: oidcProvider.openIdConnectProviderArn,
82
+ description: `ARN of the OIDC provider for ${config.provider}`,
83
+ exportName: `${config.appName}-CICDProviderArn`
84
+ });
85
+ return role;
86
+ };
87
+ }
88
+ /**
89
+ * Build trust policy conditions based on CI/CD provider
90
+ */
91
+ static buildTrustConditions(provider, repositoryOrOrg, issuer) {
92
+ const conditions = {
93
+ StringEquals: {
94
+ [`${issuer}:aud`]: OIDC_CONFIGS[provider].clientIds[0]
95
+ }
96
+ };
97
+ // Add provider-specific subject claim conditions
98
+ switch (provider) {
99
+ case "github-actions":
100
+ conditions.StringLike = {
101
+ [`${issuer}:sub`]: `repo:${repositoryOrOrg}:*`
102
+ };
103
+ break;
104
+ case "buildkite":
105
+ conditions.StringLike = {
106
+ [`${issuer}:sub`]: `organization:${repositoryOrOrg}:*`
107
+ };
108
+ break;
109
+ case "gitlab-ci":
110
+ conditions.StringLike = {
111
+ [`${issuer}:sub`]: `project_path:${repositoryOrOrg}:*`
112
+ };
113
+ break;
114
+ }
115
+ return conditions;
116
+ }
117
+ /**
118
+ * Add default deployment permissions to the role
119
+ */
120
+ static addDefaultDeployPermissions(role) {
121
+ // CloudFormation permissions for CDK deployments
122
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
123
+ effect: aws_iam_1.Effect.ALLOW,
124
+ actions: ["cloudformation:*"],
125
+ resources: ["*"]
126
+ }));
127
+ // S3 permissions for CDK assets
128
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
129
+ effect: aws_iam_1.Effect.ALLOW,
130
+ actions: ["s3:*"],
131
+ resources: ["*"]
132
+ }));
133
+ // ECR permissions for container images
134
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
135
+ effect: aws_iam_1.Effect.ALLOW,
136
+ actions: ["ecr:*"],
137
+ resources: ["*"]
138
+ }));
139
+ // ECS permissions for service deployments
140
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
141
+ effect: aws_iam_1.Effect.ALLOW,
142
+ actions: ["ecs:*"],
143
+ resources: ["*"]
144
+ }));
145
+ // CloudWatch Logs permissions
146
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
147
+ effect: aws_iam_1.Effect.ALLOW,
148
+ actions: ["logs:*"],
149
+ resources: ["*"]
150
+ }));
151
+ // IAM permissions for role management
152
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
153
+ effect: aws_iam_1.Effect.ALLOW,
154
+ actions: [
155
+ "iam:PassRole",
156
+ "iam:GetRole",
157
+ "iam:CreateRole",
158
+ "iam:DeleteRole",
159
+ "iam:AttachRolePolicy",
160
+ "iam:DetachRolePolicy",
161
+ "iam:PutRolePolicy",
162
+ "iam:DeleteRolePolicy"
163
+ ],
164
+ resources: ["*"]
165
+ }));
166
+ // SSM and Secrets Manager for runtime configuration
167
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
168
+ effect: aws_iam_1.Effect.ALLOW,
169
+ actions: [
170
+ "ssm:GetParameter",
171
+ "ssm:GetParameters",
172
+ "secretsmanager:GetSecretValue"
173
+ ],
174
+ resources: ["*"]
175
+ }));
176
+ // EC2 permissions for VPC/networking queries
177
+ role.addToPolicy(new aws_iam_1.PolicyStatement({
178
+ effect: aws_iam_1.Effect.ALLOW,
179
+ actions: [
180
+ "ec2:DescribeAvailabilityZones",
181
+ "ec2:DescribeVpcs",
182
+ "ec2:DescribeSubnets",
183
+ "ec2:DescribeSecurityGroups"
184
+ ],
185
+ resources: ["*"]
186
+ }));
187
+ }
188
+ }
189
+ exports.CICDRoleFactory = CICDRoleFactory;
190
+ exports.default = CICDRoleFactory;
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2ljZFJvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9jaWNkL2NpY2RSb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF3QztBQUN4QyxpREFNNkI7QUFpRTdCOztHQUVHO0FBQ0gsTUFBTSxZQUFZLEdBQTZDO0lBQzdELGdCQUFnQixFQUFFO1FBQ2hCLEdBQUcsRUFBRSw2Q0FBNkM7UUFDbEQsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUM7UUFDaEMsV0FBVyxFQUFFO1lBQ1gsMENBQTBDO1lBQzFDLDBDQUEwQztTQUMzQztLQUNGO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsR0FBRyxFQUFFLDZCQUE2QjtRQUNsQyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztRQUNoQyxXQUFXLEVBQUUsQ0FBQywwQ0FBMEMsQ0FBQztLQUMxRDtJQUNELFdBQVcsRUFBRTtRQUNYLEdBQUcsRUFBRSxvQkFBb0I7UUFDekIsU0FBUyxFQUFFLENBQUMsb0JBQW9CLENBQUM7UUFDakMsV0FBVyxFQUFFLENBQUMsMENBQTBDLENBQUM7S0FDMUQ7Q0FDRixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBYSxlQUFlO0lBQzFCOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FDakIsRUFBVSxFQUNWLE1BQXNCO1FBRXRCLE9BQU8sQ0FBQyxJQUFlLEVBQUUsS0FBZ0IsRUFBRSxFQUFFO1lBQzNDLE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckQsTUFBTSxRQUFRLEdBQ1osTUFBTSxDQUFDLFFBQVEsSUFBSSxlQUFlLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRXhFLG9DQUFvQztZQUNwQyxJQUFJLFlBQW1DLENBQUM7WUFFeEMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFD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QUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWpORCwwQ0FpTkM7QUFFRCxrQkFBZSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIFJvbGUsXG4gIFdlYklkZW50aXR5UHJpbmNpcGFsLFxuICBPcGVuSWRDb25uZWN0UHJvdmlkZXIsXG4gIFBvbGljeVN0YXRlbWVudCxcbiAgRWZmZWN0XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8qKlxuICogU3VwcG9ydGVkIENJL0NEIHByb3ZpZGVyc1xuICovXG5leHBvcnQgdHlwZSBDSUNEUHJvdmlkZXIgPSBcImdpdGh1Yi1hY3Rpb25zXCIgfCBcImJ1aWxka2l0ZVwiIHwgXCJnaXRsYWItY2lcIjtcblxuLyoqXG4gKiBPSURDIHByb3ZpZGVyIGNvbmZpZ3VyYXRpb25cbiAqL1xuaW50ZXJmYWNlIE9JRENQcm92aWRlckNvbmZpZyB7XG4gIHVybDogc3RyaW5nO1xuICBjbGllbnRJZHM6IHN0cmluZ1tdO1xuICB0aHVtYnByaW50czogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgY3JlYXRpbmcgYSBDSS9DRCBkZXBsb3kgcm9sZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENJQ0RSb2xlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBDSS9DRCBwcm92aWRlciAoZ2l0aHViLWFjdGlvbnMsIGJ1aWxka2l0ZSwgZ2l0bGFiLWNpKVxuICAgKi9cbiAgcHJvdmlkZXI6IENJQ0RQcm92aWRlcjtcblxuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIG5hbWUgdG8gc2NvcGUgdGhlIHJvbGUncyBwZXJtaXNzaW9ucyB0b1xuICAgKi9cbiAgYXBwTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb3IgR2l0SHViIEFjdGlvbnM6IHJlcG9zaXRvcnkgKG9yZy9yZXBvKVxuICAgKiBGb3IgQnVpbGRraXRlOiBvcmdhbml6YXRpb24gc2x1Z1xuICAgKiBGb3IgR2l0TGFiIENJOiBwcm9qZWN0IHBhdGggKGdyb3VwL3Byb2plY3QpXG4gICAqL1xuICByZXBvc2l0b3J5T3JPcmc6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgcm9sZSBuYW1lLiBEZWZhdWx0cyB0byBcIkZqYWxsRGVwbG95LXtwcm92aWRlcn0te2FwcE5hbWV9XCJcbiAgICovXG4gIHJvbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBJQU0gcGF0aCBmb3IgdGhlIHJvbGUuIERlZmF1bHRzIHRvIFwiL1wiXG4gICAqL1xuICByb2xlUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIHBlcm1pc3Npb25zLiBJZiBub3QgcHJvdmlkZWQsIGRlZmF1bHQgZGVwbG95bWVudCBwZXJtaXNzaW9ucyB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBjdXN0b21QZXJtaXNzaW9ucz86IFBvbGljeVN0YXRlbWVudFtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSBleGlzdGluZyBPSURDIHByb3ZpZGVyIG9yIGNyZWF0ZSBhIG5ldyBvbmVcbiAgICogSWYgdHJ1ZSwgd2lsbCBsb29rIGZvciBleGlzdGluZyBwcm92aWRlciBieSBVUkxcbiAgICovXG4gIHVzZUV4aXN0aW5nUHJvdmlkZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBBUk4gb2YgZXhpc3RpbmcgT0lEQyBwcm92aWRlciAoc2tpcHMgY3JlYXRpb24pXG4gICAqL1xuICBleGlzdGluZ1Byb3ZpZGVyQXJuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9JREMgcHJvdmlkZXIgY29uZmlndXJhdGlvbnMgZm9yIGRpZmZlcmVudCBDSS9DRCBzeXN0ZW1zXG4gKi9cbmNvbnN0IE9JRENfQ09ORklHUzogUmVjb3JkPENJQ0RQcm92aWRlciwgT0lEQ1Byb3ZpZGVyQ29uZmlnPiA9IHtcbiAgXCJnaXRodWItYWN0aW9uc1wiOiB7XG4gICAgdXJsOiBcImh0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb21cIixcbiAgICBjbGllbnRJZHM6IFtcInN0cy5hbWF6b25hd3MuY29tXCJdLFxuICAgIHRodW1icHJpbnRzOiBbXG4gICAgICBcIjY5MzhmZDRkOThiYWIwM2ZhYWRiOTdiMzQzOTY4MzFlMzc4MGFlYTFcIixcbiAgICAgIFwiMWM1OGEzYTg1MThlODc1OWJmMDc1Yjc2Yjc1MGQ0ZjJkZjI2NGZjZFwiXG4gICAgXVxuICB9LFxuICBidWlsZGtpdGU6IHtcbiAgICB1cmw6IFwiaHR0cHM6Ly9hZ2VudC5idWlsZGtpdGUuY29tXCIsXG4gICAgY2xpZW50SWRzOiBbXCJzdHMuYW1hem9uYXdzLmNvbVwiXSxcbiAgICB0aHVtYnByaW50czogW1wiOWU5OWE0OGE5OTYwYjE0OTI2YmI3ZjNiMDJlMjJkYTJiMGFiNzI4MFwiXVxuICB9LFxuICBcImdpdGxhYi1jaVwiOiB7XG4gICAgdXJsOiBcImh0dHBzOi8vZ2l0bGFiLmNvbVwiLFxuICAgIGNsaWVudElkczogW1wiaHR0cHM6Ly9naXRsYWIuY29tXCJdLFxuICAgIHRodW1icHJpbnRzOiBbXCJiM2RkNzYwNmQyYjVhOGI0YTEzNzcxZGJlY2M5ZWUxY2VjYWZhMzhhXCJdXG4gIH1cbn07XG5cbi8qKlxuICogRmFjdG9yeSB0byBidWlsZCBhIENJL0NEIGRlcGxveSBJQU0gcm9sZSB3aXRoIE9JREMgYXV0aGVudGljYXRpb24uXG4gKiBDcmVhdGVzIGJvdGggdGhlIE9JREMgcHJvdmlkZXIgKGlmIG5lZWRlZCkgYW5kIHRoZSBkZXBsb3kgcm9sZSB3aXRoIGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zLlxuICovXG5leHBvcnQgY2xhc3MgQ0lDRFJvbGVGYWN0b3J5IHtcbiAgLyoqXG4gICAqIEJ1aWxkIGEgQ0kvQ0QgZGVwbG95IHJvbGUgd2l0aCBPSURDIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGJ1aWxkKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY29uZmlnOiBDSUNEUm9sZUNvbmZpZ1xuICApOiAoYXBwOiBDb25zdHJ1Y3QsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFJvbGUge1xuICAgIHJldHVybiAoX2FwcDogQ29uc3RydWN0LCBzY29wZTogQ29uc3RydWN0KSA9PiB7XG4gICAgICBjb25zdCBwcm92aWRlckNvbmZpZyA9IE9JRENfQ09ORklHU1tjb25maWcucHJvdmlkZXJdO1xuICAgICAgY29uc3Qgcm9sZU5hbWUgPVxuICAgICAgICBjb25maWcucm9sZU5hbWUgfHwgYEZqYWxsRGVwbG95LSR7Y29uZmlnLnByb3ZpZGVyfS0ke2NvbmZpZy5hcHBOYW1lfWA7XG5cbiAgICAgIC8vIENyZWF0ZSBvciByZWZlcmVuY2UgT0lEQyBwcm92aWRlclxuICAgICAgbGV0IG9pZGNQcm92aWRlcjogT3BlbklkQ29ubmVjdFByb3ZpZGVyO1xuXG4gICAgICBpZiAoY29uZmlnLmV4aXN0aW5nUHJvdmlkZXJBcm4pIHtcbiAgICAgICAgLy8gVXNlIGV4aXN0aW5nIHByb3ZpZGVyIGJ5IEFSTlxuICAgICAgICBvaWRjUHJvdmlkZXIgPSBPcGVuSWRDb25uZWN0UHJvdmlkZXIuZnJvbU9wZW5JZENvbm5lY3RQcm92aWRlckFybihcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgICBgJHtpZH1PaWRjUHJvdmlkZXJgLFxuICAgICAgICAgIGNvbmZpZy5leGlzdGluZ1Byb3ZpZGVyQXJuXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgbmV3IE9JREMgcHJvdmlkZXJcbiAgICAgICAgb2lkY1Byb3ZpZGVyID0gbmV3IE9wZW5JZENvbm5lY3RQcm92aWRlcihzY29wZSwgYCR7aWR9T2lkY1Byb3ZpZGVyYCwge1xuICAgICAgICAgIHVybDogcHJvdmlkZXJDb25maWcudXJsLFxuICAgICAgICAgIGNsaWVudElkczogcHJvdmlkZXJDb25maWcuY2xpZW50SWRzLFxuICAgICAgICAgIHRodW1icHJpbnRzOiBwcm92aWRlckNvbmZpZy50aHVtYnByaW50c1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgdHJ1c3QgcG9saWN5IGNvbmRpdGlvbnMgYmFzZWQgb24gcHJvdmlkZXJcbiAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSB0aGlzLmJ1aWxkVHJ1c3RDb25kaXRpb25zKFxuICAgICAgICBjb25maWcucHJvdmlkZXIsXG4gICAgICAgIGNvbmZpZy5yZXBvc2l0b3J5T3JPcmcsXG4gICAgICAgIG9pZGNQcm92aWRlci5vcGVuSWRDb25uZWN0UHJvdmlkZXJJc3N1ZXJcbiAgICAgICk7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgcm9sZSB3aXRoIE9JREMgd2ViIGlkZW50aXR5IHByaW5jaXBhbFxuICAgICAgY29uc3Qgcm9sZSA9IG5ldyBSb2xlKHNjb3BlLCBpZCwge1xuICAgICAgICByb2xlTmFtZTogcm9sZU5hbWUsXG4gICAgICAgIHBhdGg6IGNvbmZpZy5yb2xlUGF0aCB8fCBcIi9cIixcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgV2ViSWRlbnRpdHlQcmluY2lwYWwoXG4gICAgICAgICAgb2lkY1Byb3ZpZGVyLm9wZW5JZENvbm5lY3RQcm92aWRlckFybixcbiAgICAgICAgICBjb25kaXRpb25zXG4gICAgICAgICksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQ0kvQ0QgZGVwbG95IHJvbGUgZm9yICR7Y29uZmlnLnByb3ZpZGVyfSAtICR7Y29uZmlnLmFwcE5hbWV9YFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEFkZCBwZXJtaXNzaW9uc1xuICAgICAgaWYgKGNvbmZpZy5jdXN0b21QZXJtaXNzaW9ucykge1xuICAgICAgICBjb25maWcuY3VzdG9tUGVybWlzc2lvbnMuZm9yRWFjaCgoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgcm9sZS5hZGRUb1BvbGljeShzdGF0ZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkRGVmYXVsdERlcGxveVBlcm1pc3Npb25zKHJvbGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBFeHBvcnQgdGhlIHJvbGUgQVJOXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHNjb3BlLCBgJHtpZH1Bcm5gLCB7XG4gICAgICAgIHZhbHVlOiByb2xlLnJvbGVBcm4sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgQVJOIG9mIHRoZSBDSS9DRCBkZXBsb3kgcm9sZSBmb3IgJHtjb25maWcuYXBwTmFtZX1gLFxuICAgICAgICBleHBvcnROYW1lOiBgJHtjb25maWcuYXBwTmFtZX0tQ0lDRFJvbGVBcm5gXG4gICAgICB9KTtcblxuICAgICAgLy8gRXhwb3J0IHRoZSBPSURDIHByb3ZpZGVyIEFSTlxuICAgICAgbmV3IENmbk91dHB1dChzY29wZSwgYCR7aWR9UHJvdmlkZXJBcm5gLCB7XG4gICAgICAgIHZhbHVlOiBvaWRjUHJvdmlkZXIub3BlbklkQ29ubmVjdFByb3ZpZGVyQXJuLFxuICAgICAgICBkZXNjcmlwdGlvbjogYEFSTiBvZiB0aGUgT0lEQyBwcm92aWRlciBmb3IgJHtjb25maWcucHJvdmlkZXJ9YCxcbiAgICAgICAgZXhwb3J0TmFtZTogYCR7Y29uZmlnLmFwcE5hbWV9LUNJQ0RQcm92aWRlckFybmBcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcm9sZTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRydXN0IHBvbGljeSBjb25kaXRpb25zIGJhc2VkIG9uIENJL0NEIHByb3ZpZGVyXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBidWlsZFRydXN0Q29uZGl0aW9ucyhcbiAgICBwcm92aWRlcjogQ0lDRFByb3ZpZGVyLFxuICAgIHJlcG9zaXRvcnlPck9yZzogc3RyaW5nLFxuICAgIGlzc3Vlcjogc3RyaW5nXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBjb25kaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICBbYCR7aXNzdWVyfTphdWRgXTogT0lEQ19DT05GSUdTW3Byb3ZpZGVyXS5jbGllbnRJZHNbMF1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gQWRkIHByb3ZpZGVyLXNwZWNpZmljIHN1YmplY3QgY2xhaW0gY29uZGl0aW9uc1xuICAgIHN3aXRjaCAocHJvdmlkZXIpIHtcbiAgICAgIGNhc2UgXCJnaXRodWItYWN0aW9uc1wiOlxuICAgICAgICBjb25kaXRpb25zLlN0cmluZ0xpa2UgPSB7XG4gICAgICAgICAgW2Ake2lzc3Vlcn06c3ViYF06IGByZXBvOiR7cmVwb3NpdG9yeU9yT3JnfToqYFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImJ1aWxka2l0ZVwiOlxuICAgICAgICBjb25kaXRpb25zLlN0cmluZ0xpa2UgPSB7XG4gICAgICAgICAgW2Ake2lzc3Vlcn06c3ViYF06IGBvcmdhbml6YXRpb246JHtyZXBvc2l0b3J5T3JPcmd9OipgXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZ2l0bGFiLWNpXCI6XG4gICAgICAgIGNvbmRpdGlvbnMuU3RyaW5nTGlrZSA9IHtcbiAgICAgICAgICBbYCR7aXNzdWVyfTpzdWJgXTogYHByb2plY3RfcGF0aDoke3JlcG9zaXRvcnlPck9yZ306KmBcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGRlZmF1bHQgZGVwbG95bWVudCBwZXJtaXNzaW9ucyB0byB0aGUgcm9sZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYWRkRGVmYXVsdERlcGxveVBlcm1pc3Npb25zKHJvbGU6IFJvbGUpOiB2b2lkIHtcbiAgICAvLyBDbG91ZEZvcm1hdGlvbiBwZXJtaXNzaW9ucyBmb3IgQ0RLIGRlcGxveW1lbnRzXG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wiY2xvdWRmb3JtYXRpb246KlwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBTMyBwZXJtaXNzaW9ucyBmb3IgQ0RLIGFzc2V0c1xuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcInMzOipcIl0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gRUNSIHBlcm1pc3Npb25zIGZvciBjb250YWluZXIgaW1hZ2VzXG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wiZWNyOipcIl0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gRUNTIHBlcm1pc3Npb25zIGZvciBzZXJ2aWNlIGRlcGxveW1lbnRzXG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wiZWNzOipcIl0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gQ2xvdWRXYXRjaCBMb2dzIHBlcm1pc3Npb25zXG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wibG9nczoqXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIElBTSBwZXJtaXNzaW9ucyBmb3Igcm9sZSBtYW5hZ2VtZW50XG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiaWFtOlBhc3NSb2xlXCIsXG4gICAgICAgICAgXCJpYW06R2V0Um9sZVwiLFxuICAgICAgICAgIFwiaWFtOkNyZWF0ZVJvbGVcIixcbiAgICAgICAgICBcImlhbTpEZWxldGVSb2xlXCIsXG4gICAgICAgICAgXCJpYW06QXR0YWNoUm9sZVBvbGljeVwiLFxuICAgICAgICAgIFwiaWFtOkRldGFjaFJvbGVQb2xpY3lcIixcbiAgICAgICAgICBcImlhbTpQdXRSb2xlUG9saWN5XCIsXG4gICAgICAgICAgXCJpYW06RGVsZXRlUm9sZVBvbGljeVwiXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gU1NNIGFuZCBTZWNyZXRzIE1hbmFnZXIgZm9yIHJ1bnRpbWUgY29uZmlndXJhdGlvblxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcInNzbTpHZXRQYXJhbWV0ZXJcIixcbiAgICAgICAgICBcInNzbTpHZXRQYXJhbWV0ZXJzXCIsXG4gICAgICAgICAgXCJzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZVwiXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gRUMyIHBlcm1pc3Npb25zIGZvciBWUEMvbmV0d29ya2luZyBxdWVyaWVzXG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwiZWMyOkRlc2NyaWJlQXZhaWxhYmlsaXR5Wm9uZXNcIixcbiAgICAgICAgICBcImVjMjpEZXNjcmliZVZwY3NcIixcbiAgICAgICAgICBcImVjMjpEZXNjcmliZVN1Ym5ldHNcIixcbiAgICAgICAgICBcImVjMjpEZXNjcmliZVNlY3VyaXR5R3JvdXBzXCJcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ0lDRFJvbGVGYWN0b3J5O1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fjall/components-infrastructure",
3
- "version": "0.82.0",
3
+ "version": "0.83.1",
4
4
  "bin": {
5
5
  "infrastructure": "bin/infrastructure.js"
6
6
  },
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "dependencies": {
38
38
  "@aws-sdk/client-organizations": "^3.716.0",
39
- "@fjall/util": "^0.82.0",
39
+ "@fjall/util": "^0.83.1",
40
40
  "@pepperize/cdk-organizations": "^0.7.135",
41
41
  "cdk-time-sleep": "^1.0.0",
42
42
  "constructs": "^10.0.0",
@@ -45,7 +45,7 @@
45
45
  "overrides": {
46
46
  "@smithy/core": "2.5.5"
47
47
  },
48
- "gitHead": "c5e406a6661d858023d507164fd31ec3c39d90df",
48
+ "gitHead": "d36d3b0b4667823d404abe246d4e3a281296d255",
49
49
  "peerDependencies": {
50
50
  "aws-cdk": "^2.206.0",
51
51
  "aws-cdk-lib": "^2.206.0",