aws-delivlib 14.5.8 → 14.6.0
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/lib/pipeline.d.ts +8 -0
- package/lib/pipeline.js +23 -1
- package/lib/signing/nuget/sign.sh +64 -0
- package/lib/signing.d.ts +52 -0
- package/lib/signing.js +73 -0
- package/package.json +1 -1
package/lib/pipeline.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { AutoBump, AutoBumpProps } from './pull-request';
|
|
|
8
8
|
import { AutoMergeBackPipelineOptions } from './pull-request/merge-back';
|
|
9
9
|
import { IRepo } from './repo';
|
|
10
10
|
import { Shellable, ShellableProps } from './shellable';
|
|
11
|
+
import * as signing from './signing';
|
|
11
12
|
export interface PipelineProps {
|
|
12
13
|
/**
|
|
13
14
|
* The source repository to build (e.g. GitHubRepo).
|
|
@@ -158,6 +159,7 @@ export declare class Pipeline extends Construct {
|
|
|
158
159
|
private readonly branch;
|
|
159
160
|
private readonly notify?;
|
|
160
161
|
private stages;
|
|
162
|
+
private _signingOutput?;
|
|
161
163
|
private readonly concurrency?;
|
|
162
164
|
private readonly repo;
|
|
163
165
|
private readonly dryRun;
|
|
@@ -165,6 +167,10 @@ export declare class Pipeline extends Construct {
|
|
|
165
167
|
private readonly buildSpec?;
|
|
166
168
|
private firstPublishStageName?;
|
|
167
169
|
constructor(parent: Construct, name: string, props: PipelineProps);
|
|
170
|
+
/**
|
|
171
|
+
* Signing output artifact
|
|
172
|
+
*/
|
|
173
|
+
get signingOutput(): cpipeline.Artifact | undefined;
|
|
168
174
|
notifyOnFailure(notification: IPipelineNotification): void;
|
|
169
175
|
/**
|
|
170
176
|
* Add an action to run a shell script to the pipeline
|
|
@@ -191,6 +197,8 @@ export declare class Pipeline extends Construct {
|
|
|
191
197
|
* @param options the options to configure the change control policy.
|
|
192
198
|
*/
|
|
193
199
|
addChangeControl(options?: AddChangeControlOptions): ChangeController;
|
|
200
|
+
addSigning(signer: signing.ISigner, options?: signing.AddSigningOptions): void;
|
|
201
|
+
signNuGetWithSigner(options: signing.SignNuGetWithSignerProps & signing.AddSigningOptions): void;
|
|
194
202
|
publishToNpm(options: publishing.PublishToNpmProjectProps & AddPublishOptions): void;
|
|
195
203
|
publishToMaven(options: publishing.PublishToMavenProjectProps & AddPublishOptions): void;
|
|
196
204
|
publishToNuGet(options: publishing.PublishToNuGetProjectProps & AddPublishOptions): void;
|
package/lib/pipeline.js
CHANGED
|
@@ -36,8 +36,10 @@ const publishing = __importStar(require("./publishing"));
|
|
|
36
36
|
const pull_request_1 = require("./pull-request");
|
|
37
37
|
const repo_1 = require("./repo");
|
|
38
38
|
const shellable_1 = require("./shellable");
|
|
39
|
+
const signing = __importStar(require("./signing"));
|
|
39
40
|
const util_1 = require("./util");
|
|
40
41
|
const PUBLISH_STAGE_NAME = 'Publish';
|
|
42
|
+
const SIGINING_STAGE_NAME = 'Sign';
|
|
41
43
|
const TEST_STAGE_NAME = 'Test';
|
|
42
44
|
const METRIC_NAMESPACE = 'CDK/Delivlib';
|
|
43
45
|
const FAILURE_METRIC_NAME = 'Failures';
|
|
@@ -102,6 +104,12 @@ class Pipeline extends constructs_1.Construct {
|
|
|
102
104
|
this.autoBuildProject = this.autoBuild(props.autoBuildOptions).project;
|
|
103
105
|
}
|
|
104
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Signing output artifact
|
|
109
|
+
*/
|
|
110
|
+
get signingOutput() {
|
|
111
|
+
return this._signingOutput;
|
|
112
|
+
}
|
|
105
113
|
notifyOnFailure(notification) {
|
|
106
114
|
notification.bind({
|
|
107
115
|
pipeline: this,
|
|
@@ -163,6 +171,20 @@ class Pipeline extends constructs_1.Construct {
|
|
|
163
171
|
pipelineStage: publishStage,
|
|
164
172
|
});
|
|
165
173
|
}
|
|
174
|
+
addSigning(signer, options = {}) {
|
|
175
|
+
var _a;
|
|
176
|
+
const signingStageName = (_a = options.stageName) !== null && _a !== void 0 ? _a : SIGINING_STAGE_NAME;
|
|
177
|
+
const stage = this.getOrCreateStage(signingStageName);
|
|
178
|
+
this._signingOutput = signer.addToPipeline(stage, `${signer.node.id}Sign`, {
|
|
179
|
+
inputArtifact: options.inputArtifact || this.buildOutput,
|
|
180
|
+
runOrder: this.determineRunOrderForNewAction(stage),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
signNuGetWithSigner(options) {
|
|
184
|
+
this.addSigning(new signing.SignNuGetWithSigner(this, 'NuGetSigning', {
|
|
185
|
+
...options,
|
|
186
|
+
}), options);
|
|
187
|
+
}
|
|
166
188
|
publishToNpm(options) {
|
|
167
189
|
this.addPublish(new publishing.PublishToNpmProject(this, 'Npm', {
|
|
168
190
|
dryRun: this.dryRun,
|
|
@@ -342,4 +364,4 @@ class Pipeline extends constructs_1.Construct {
|
|
|
342
364
|
}
|
|
343
365
|
}
|
|
344
366
|
exports.Pipeline = Pipeline;
|
|
345
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQVdxQjtBQUNyQiwyQ0FBbUQ7QUFFbkQsNkNBQTJEO0FBQzNELDJDQUFxRDtBQUNyRCxxQ0FBK0M7QUFDL0MsMkRBQXVEO0FBQ3ZELHFEQUFpRDtBQUNqRCx5REFBcUQ7QUFDckQseURBQTJDO0FBQzNDLGlEQUF3RTtBQUV4RSxpQ0FBbUQ7QUFDbkQsMkNBQXdEO0FBQ3hELGlDQUFvRDtBQUVwRCxNQUFNLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztBQUNyQyxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUM7QUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRyxVQUFVLENBQUM7QUF3SnZDOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsc0JBQVM7SUErQnJDLFlBQVksTUFBaUIsRUFBRSxJQUFZLEVBQUUsS0FBb0I7O1FBQy9ELEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFWZCxXQUFNLEdBQXlDLEVBQUcsQ0FBQztRQVl6RCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFFN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDhCQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDNUQsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO1lBQ2hDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMs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QUFTO2FBQ1YsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDaEM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyw2QkFBNkIsQ0FBQyxLQUF1QjtRQUMzRCxPQUFPLElBQUEsd0JBQWlCLEVBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FDRjtBQXhYRCw0QkF3WEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEdXJhdGlvbixcbiAgYXdzX2Nsb3Vkd2F0Y2ggYXMgY2xvdWR3YXRjaCxcbiAgYXdzX2NvZGVidWlsZCBhcyBjYnVpbGQsXG4gIGF3c19jb2RlcGlwZWxpbmUgYXMgY3BpcGVsaW5lLFxuICBhd3NfY29kZXBpcGVsaW5lX2FjdGlvbnMgYXMgY3BpcGVsaW5lX2FjdGlvbnMsXG4gIGF3c19ldmVudHMgYXMgZXZlbnRzLFxuICBhd3NfZXZlbnRzX3RhcmdldHMgYXMgZXZlbnRzX3RhcmdldHMsXG4gIGF3c19pYW0gYXMgaWFtLCBhd3NfczMgYXMgczMsXG4gIGF3c19zbnMgYXMgc25zLFxuICBhd3Nfc25zX3N1YnNjcmlwdGlvbnMgYXMgc25zX3N1YnMsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5pbXBvcnQgeyBBdXRvQnVpbGQsIEF1dG9CdWlsZE9wdGlvbnMgfSBmcm9tICcuL2F1dG8tYnVpbGQnO1xuaW1wb3J0IHsgY3JlYXRlQnVpbGRFbnZpcm9ubWVudCB9IGZyb20gJy4vYnVpbGQtZW52JztcbmltcG9ydCB7IENhbmFyeSwgQ2FuYXJ5UHJvcHMgfSBmcm9tICcuL2NhbmFyeSc7XG5pbXBvcnQgeyBDaGFuZ2VDb250cm9sbGVyIH0gZnJvbSAnLi9jaGFuZ2UtY29udHJvbGxlcic7XG5pbXBvcnQgeyBDaGltZU5vdGlmaWVyIH0gZnJvbSAnLi9jaGltZS1ub3RpZmllcic7XG5pbXBvcnQgeyBQaXBlbGluZVdhdGNoZXIgfSBmcm9tICcuL3BpcGVsaW5lLXdhdGNoZXInO1xuaW1wb3J0ICogYXMgcHVibGlzaGluZyBmcm9tICcuL3B1Ymxpc2hpbmcnO1xuaW1wb3J0IHsgQXV0b0J1bXAsIEF1dG9NZXJnZUJhY2ssIEF1dG9CdW1wUHJvcHMgfSBmcm9tICcuL3B1bGwtcmVxdWVzdCc7XG5pbXBvcnQgeyBBdXRvTWVyZ2VCYWNrUGlwZWxpbmVPcHRpb25zIH0gZnJvbSAnLi9wdWxsLXJlcXVlc3QvbWVyZ2UtYmFjayc7XG5pbXBvcnQgeyBJUmVwbywgV3JpdGFibGVHaXRIdWJSZXBvIH0gZnJvbSAnLi9yZXBvJztcbmltcG9ydCB7IFNoZWxsYWJsZSwgU2hlbGxhYmxlUHJvcHMgfSBmcm9tICcuL3NoZWxsYWJsZSc7XG5pbXBvcnQgeyBkZXRlcm1pbmVSdW5PcmRlciwgZmxhdE1hcCB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IFBVQkxJU0hfU1RBR0VfTkFNRSA9ICdQdWJsaXNoJztcbmNvbnN0IFRFU1RfU1RBR0VfTkFNRSA9ICdUZXN0JztcbmNvbnN0IE1FVFJJQ19OQU1FU1BBQ0UgPSAnQ0RLL0RlbGl2bGliJztcbmNvbnN0IEZBSUxVUkVfTUVUUklDX05BTUUgPSAnRmFpbHVyZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lUHJvcHMge1xuICAvKipcbiAgICogVGhlIHNvdXJjZSByZXBvc2l0b3J5IHRvIGJ1aWxkIChlLmcuIEdpdEh1YlJlcG8pLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbzogSVJlcG87XG5cbiAgLyoqXG4gICAqIEEgZGlzcGxheSBuYW1lIGZvciB0aGlzIHBpcGVsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgcGh5c2ljYWwgbmFtZSBmb3IgdGhpcyBwaXBlbGluZS5cbiAgICogQGRlZmF1bHQgLSBhIG5ldyBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCcmFuY2ggdG8gYnVpbGQuXG4gICAqIEBkZWZhdWx0IG1hc3RlclxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbWFpbCB0byBzZW5kIGZhaWx1cmUgbm90aWZpY2F0aW9ucy5cbiAgICogQGRlZmF1bHQgLSBObyBlbWFpbCBub3RpZmljYXRpb25zXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25FbWFpbD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGltYWdlIHVzZWQgZm9yIHRoZSBidWlsZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGpzaWkvc3VwZXJjaGFpbiAoc2VlIGRvY3MpXG4gICAqL1xuICByZWFkb25seSBidWlsZEltYWdlPzogY2J1aWxkLklCdWlsZEltYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQ29kZUJ1aWxkIHByb2plY3QgdGhhdCB3aWxsIGJlIHBhcnQgb2YgdGhpcyBwaXBlbGluZS5cbiAgICogQGRlZmF1bHQgLSBgJHtwaXBlbGluZU5hbWV9LUJ1aWxkYCwgaWYgYHBpcGVsaW5lTmFtZWAgcHJvcGVydHkgaXMgc3BlY2lmaWVkOyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCwgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRQcm9qZWN0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgY29tcHV0ZSB0byB1c2UgZm9yIHRoaXMgYnVpbGQuXG4gICAqIFNlZSB0aGUge0BsaW5rIENvbXB1dGVUeXBlfSBlbnVtIGZvciB0aGUgcG9zc2libGUgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0YWtlbiBmcm9tIHtAbGluayAjYnVpbGRJbWFnZSNkZWZhdWx0Q29tcHV0ZVR5cGV9XG4gICAqL1xuICByZWFkb25seSBjb21wdXRlVHlwZT86IGNidWlsZC5Db21wdXRlVHlwZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGhvdyB0aGUgcHJvamVjdCBidWlsZHMgRG9ja2VyIGltYWdlcy4gU3BlY2lmeSB0cnVlIHRvIGVuYWJsZVxuICAgKiBydW5uaW5nIHRoZSBEb2NrZXIgZGFlbW9uIGluc2lkZSBhIERvY2tlciBjb250YWluZXIuIFRoaXMgdmFsdWUgbXVzdCBiZVxuICAgKiBzZXQgdG8gdHJ1ZSBvbmx5IGlmIHRoaXMgYnVpbGQgcHJvamVjdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgRG9ja2VyXG4gICAqIGltYWdlcywgYW5kIHRoZSBzcGVjaWZpZWQgYnVpbGQgZW52aXJvbm1lbnQgaW1hZ2UgaXMgbm90IG9uZSBwcm92aWRlZCBieVxuICAgKiBBV1MgQ29kZUJ1aWxkIHdpdGggRG9ja2VyIHN1cHBvcnQuIE90aGVyd2lzZSwgYWxsIGFzc29jaWF0ZWQgYnVpbGRzIHRoYXRcbiAgICogYXR0ZW1wdCB0byBpbnRlcmFjdCB3aXRoIHRoZSBEb2NrZXIgZGFlbW9uIHdpbGwgZmFpbC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByaXZpbGVnZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byBidWlsZFxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBidWlsZHNwZWMsIGFzIGFuIGFsdGVybmF0aXZlIHRvIGEgYnVpbGRzcGVjLnltbCBmaWxlXG4gICAqL1xuICByZWFkb25seSBidWlsZFNwZWM/OiBjYnVpbGQuQnVpbGRTcGVjO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byByZS1ydW4gdGhlIHBpcGVsaW5lIGFmdGVyIHlvdSd2ZSB1cGRhdGVkIGl0LlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSByZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGNvbmN1cnJlbmN5IGxpbWl0IHRlc3QgYW5kIHB1Ymxpc2ggc3RhZ2VzLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhpcyB2YWx1ZSBpcyAyLCB0aGVuIG9ubHkgdHdvIGFjdGlvbnMgd2lsbCBleGVjdXRlIGNvbmN1cnJlbnRseS5cbiAgICogSWYgdGhpcyB2YWx1ZSBpcyAxLCB0aGUgcGlwZWxpbmUgd2lsbCBub3QgaGF2ZSBhbnkgY29uY3VycmVudCBleGVjdXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbGltaXRcbiAgICovXG4gIHJlYWRvbmx5IGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgZHJ5UnVuIGZvciBhbGwgcHVibGlzaGluZyBzdGVwc1xuICAgKlxuICAgKiAoQ2FuIHN0aWxsIGJlIGNoYW5nZWQgd2hlbiBhZGRpbmcgYSBzdGVwKS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgYnVpbGQgY29tbWl0cyB0aGF0IGFyZSBwdXNoZWQgdG8gdGhpcyByZXBvc2l0b3J5LCBpbmNsdWRpbmcgUFIgYnVpbGRzIG9uIGdpdGh1Yi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGF1dG9CdWlsZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGF1dG8tYnVpbGRcbiAgICpcbiAgICogQGRlZmF1bHQgLSAnYXV0b0J1aWxkT3B0aW9ucy5wdWJsaWNMb2dzJyB3aWxsIGJlIHNldCB0byBpdHMgZGVmYXVsdC4gJ2F1dG9CdWlsZE9wdGlvbnMuYnVpbGRzcGVjJyB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gbWF0Y2ggd2l0aCB0aGVcbiAgICogJ2J1aWxkU3BlYycgcHJvcGVydHkuXG4gICAqL1xuICByZWFkb25seSBhdXRvQnVpbGRPcHRpb25zPzogQXV0b0J1aWxkT3B0aW9ucztcblxuICAvKipcbiAgICogUG9zdCBhIG5vdGlmaWNhdGlvbiB0byB0aGUgZ2l2ZW4gQ2hpbWUgd2ViaG9va3MgaWYgdGhlIHBpcGVsaW5lIGZhaWxzXG4gICAqIEBkZWZhdWx0IC0gbm8gQ2hpbWUgbm90aWZpY2F0aW9ucyBvbiBwaXBlbGluZSBmYWlsdXJlXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGBub3RpZnlPbkZhaWx1cmUoKWAgaW5zdGVhZCBpbiBjb21iaW5hdGlvbiB3aXRoIGBQaXBlbGluZU5vdGlmaWNhdGlvbi5jaGltZSgpYC5cbiAgICovXG4gIHJlYWRvbmx5IGNoaW1lRmFpbHVyZVdlYmhvb2tzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBDaGltZSBtZXNzYWdlIHRvIHBvc3RcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIGRlZmF1bHQgbWVzc2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbWVNZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCdWlsZCB0aW1lb3V0XG4gICAqXG4gICAqIEhvdyBsb25nIHRoZSBidWlsZCBjYW4gdGFrZSBhdCBtYXhpbXVtIChiZWZvcmUgZmFpbGluZyB3aXRoIGFuIGVycm9yKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEdXJhdGlvbi5ob3Vycyg4KVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRUaW1lb3V0PzogRHVyYXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVOb3RpZmljYXRpb25CaW5kT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBpcGVsaW5lOiBQaXBlbGluZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGlwZWxpbmVOb3RpZmljYXRpb24ge1xuICBiaW5kKHBpcGVsaW5lOiBQaXBlbGluZU5vdGlmaWNhdGlvbkJpbmRPcHRpb25zKTogdm9pZDtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhbiBhdXRvIGJ1bXAgZm9yIHRoaXMgcGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0b0J1bXBPcHRpb25zIGV4dGVuZHMgT21pdDxBdXRvQnVtcFByb3BzLCAncmVwbyc+IHtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgZGVsaXZsaWIgQ0kvQ0QgcGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBQaXBlbGluZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyBidWlsZFJvbGU/OiBpYW0uSVJvbGU7XG4gIHB1YmxpYyByZWFkb25seSBmYWlsdXJlQWxhcm06IGNsb3Vkd2F0Y2guQWxhcm07XG4gIHB1YmxpYyByZWFkb25seSBidWlsZE91dHB1dDogY3BpcGVsaW5lLkFydGlmYWN0O1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlQXJ0aWZhY3Q6IGNwaXBlbGluZS5BcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIHByaW1hcnkgQ29kZUJ1aWxkIHByb2plY3Qgb2YgdGhpcyBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWlsZFByb2plY3Q6IGNidWlsZC5JUHJvamVjdDtcblxuICAvKipcbiAgICogVGhlIGF1dG8gYnVpbGQgcHJvamVjdC4gdW5kZWZpbmVkIGlmICdhdXRvQnVpbGQnIGlzIGRpc2FibGVkIGZvciB0aGlzIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF1dG9CdWlsZFByb2plY3Q/OiBjYnVpbGQuUHJvamVjdDtcblxuICAvKlxuICAgKiBUaGUgdW5kZXJseWluZyBDb2RlUGlwZWxpbmUgUGlwZWxpbmUgb2JqZWN0IHRoYXQgbW9kZWxzIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGlwZWxpbmU6IGNwaXBlbGluZS5QaXBlbGluZTtcbiAgcHJpdmF0ZSByZWFkb25seSBicmFuY2g6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBub3RpZnk/OiBzbnMuVG9waWM7XG4gIHByaXZhdGUgc3RhZ2VzOiB7IFtuYW1lOiBzdHJpbmddOiBjcGlwZWxpbmUuSVN0YWdlIH0gPSB7IH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25jdXJyZW5jeT86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvOiBJUmVwbztcbiAgcHJpdmF0ZSByZWFkb25seSBkcnlSdW46IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVpbGRFbnZpcm9ubWVudDogY2J1aWxkLkJ1aWxkRW52aXJvbm1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVpbGRTcGVjPzogY2J1aWxkLkJ1aWxkU3BlYztcbiAgcHJpdmF0ZSBmaXJzdFB1Ymxpc2hTdGFnZU5hbWU/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocGFyZW50OiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lUHJvcHMpIHtcbiAgICBzdXBlcihwYXJlbnQsIG5hbWUpO1xuXG4gICAgdGhpcy5jb25jdXJyZW5jeSA9IHByb3BzLmNvbmN1cnJlbmN5O1xuICAgIHRoaXMucmVwbyA9IHByb3BzLnJlcG87XG4gICAgdGhpcy5kcnlSdW4gPSAhIXByb3BzLmRyeVJ1bjtcblxuICAgIHRoaXMucGlwZWxpbmUgPSBuZXcgY3BpcGVsaW5lLlBpcGVsaW5lKHRoaXMsICdCdWlsZFBpcGVsaW5lJywge1xuICAgICAgcGlwZWxpbmVOYW1lOiBwcm9wcy5waXBlbGluZU5hbWUsXG4gICAgICByZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGU6IHByb3BzLnJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHByb3BzLnJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuYnJhbmNoID0gcHJvcHMuYnJhbmNoIHx8ICdtYXN0ZXInO1xuICAgIHRoaXMuc291cmNlQXJ0aWZhY3QgPSBwcm9wcy5yZXBvLmNyZWF0ZVNvdXJjZVN0YWdlKHRoaXMucGlwZWxpbmUsIHRoaXMuYnJhbmNoKTtcblxuICAgIHRoaXMuYnVpbGRFbnZpcm9ubWVudCA9IGNyZWF0ZUJ1aWxkRW52aXJvbm1lbnQocHJvcHMpO1xuICAgIHRoaXMuYnVpbGRTcGVjID0gcHJvcHMuYnVpbGRTcGVjO1xuXG4gICAgbGV0IGJ1aWxkUHJvamVjdE5hbWUgPSBwcm9wcy5idWlsZFByb2plY3ROYW1lO1xuICAgIGlmIChidWlsZFByb2plY3ROYW1lID09PSB1bmRlZmluZWQgJiYgcHJvcHMucGlwZWxpbmVOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGJ1aWxkUHJvamVjdE5hbWUgPSBgJHtwcm9wcy5waXBlbGluZU5hbWV9LUJ1aWxkYDtcbiAgICB9XG4gICAgdGhpcy5idWlsZFByb2plY3QgPSBuZXcgY2J1aWxkLlBpcGVsaW5lUHJvamVjdCh0aGlzLCAnQnVpbGRQcm9qZWN0Jywge1xuICAgICAgcHJvamVjdE5hbWU6IGJ1aWxkUHJvamVjdE5hbWUsXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5idWlsZEVudmlyb25tZW50LFxuICAgICAgYnVpbGRTcGVjOiB0aGlzLmJ1aWxkU3BlYyxcbiAgICAgIHRpbWVvdXQ6IHByb3BzLmJ1aWxkVGltZW91dCA/PyBEdXJhdGlvbi5ob3Vycyg4KSxcbiAgICAgIHNzbVNlc3Npb25QZXJtaXNzaW9uczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuYnVpbGRSb2xlID0gdGhpcy5idWlsZFByb2plY3Qucm9sZTtcbiAgICB0aGlzLmJ1aWxkUm9sZSEuYWRkTWFuYWdlZFBvbGljeShpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ0FtYXpvbkVsYXN0aWNDb250YWluZXJSZWdpc3RyeVB1YmxpY1JlYWRPbmx5JykpO1xuXG4gICAgY29uc3QgYnVpbGRTdGFnZSA9IHRoaXMuZ2V0T3JDcmVhdGVTdGFnZSgnQnVpbGQnKTtcbiAgICBjb25zdCBidWlsZE91dHB1dCA9IG5ldyBjcGlwZWxpbmUuQXJ0aWZhY3QoKTtcbiAgICBidWlsZFN0YWdlLmFkZEFjdGlvbihuZXcgY3BpcGVsaW5lX2FjdGlvbnMuQ29kZUJ1aWxkQWN0aW9uKHtcbiAgICAgIGFjdGlvbk5hbWU6ICdCdWlsZCcsXG4gICAgICBwcm9qZWN0OiB0aGlzLmJ1aWxkUHJvamVjdCxcbiAgICAgIGlucHV0OiB0aGlzLnNvdXJjZUFydGlmYWN0LFxuICAgICAgb3V0cHV0czogW2J1aWxkT3V0cHV0XSxcbiAgICB9KSk7XG4gICAgdGhpcy5idWlsZE91dHB1dCA9IGJ1aWxkT3V0cHV0O1xuXG4gICAgaWYgKHByb3BzLm5vdGlmaWNhdGlvbkVtYWlsKSB7XG4gICAgICB0aGlzLm5vdGlmeSA9IG5ldyBzbnMuVG9waWModGhpcywgJ05vdGlmaWNhdGlvbnNUb3BpYycpO1xuICAgICAgdGhpcy5ub3RpZnkuYWRkU3Vic2NyaXB0aW9uKG5ldyBzbnNfc3Vicy5FbWFpbFN1YnNjcmlwdGlvbihwcm9wcy5ub3RpZmljYXRpb25FbWFpbCkpO1xuICAgIH1cblxuICAgIC8vIGFkZCBhIGZhaWx1cmUgYWxhcm0gZm9yIHRoZSBlbnRpcmUgcGlwZWxpbmUuXG4gICAgdGhpcy5mYWlsdXJlQWxhcm0gPSB0aGlzLmFkZEZhaWx1cmVBbGFybShwcm9wcy50aXRsZSk7XG5cbiAgICAvLyBlbWl0IGFuIFNOUyBub3RpZmljYXRpb24gZXZlcnkgdGltZSBidWlsZCBmYWlscy5cbiAgICB0aGlzLmFkZEJ1aWxkRmFpbHVyZU5vdGlmaWNhdGlvbih0aGlzLmJ1aWxkUHJvamVjdCwgYCR7cHJvcHMudGl0bGV9IGJ1aWxkIGZhaWxlZGApO1xuXG4gICAgLy8gQWxzbyBlbWl0IHRvIENoaW1lIHdlYmhvb2tzIGlmIGNvbmZpZ3VyZWRcbiAgICBpZiAocHJvcHMuY2hpbWVGYWlsdXJlV2ViaG9va3MpIHtcbiAgICAgIG5ldyBDaGltZU5vdGlmaWVyKHRoaXMsICdDaGltZU5vdGlmaWVyJywge1xuICAgICAgICBwaXBlbGluZTogdGhpcy5waXBlbGluZSxcbiAgICAgICAgbWVzc2FnZTogcHJvcHMuY2hpbWVNZXNzYWdlLFxuICAgICAgICB3ZWJob29rVXJsczogcHJvcHMuY2hpbWVGYWlsdXJlV2ViaG9va3MsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuYXV0b0J1aWxkKSB7XG4gICAgICB0aGlzLmF1dG9CdWlsZFByb2plY3QgPSB0aGlzLmF1dG9CdWlsZChwcm9wcy5hdXRvQnVpbGRPcHRpb25zKS5wcm9qZWN0O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBub3RpZnlPbkZhaWx1cmUobm90aWZpY2F0aW9uOiBJUGlwZWxpbmVOb3RpZmljYXRpb24pIHtcbiAgICBub3RpZmljYXRpb24uYmluZCh7XG4gICAgICBwaXBlbGluZTogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gYWN0aW9uIHRvIHJ1biBhIHNoZWxsIHNjcmlwdCB0byB0aGUgcGlwZWxpbmVcbiAgICpcbiAgICogQHJldHVybiBUaGUgU2hlbGxhYmxlIGFuZCB0aGUgQWN0aW9uIGFkZGVkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyBhZGRTaGVsbGFibGUoc3RhZ2VOYW1lOiBzdHJpbmcsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IEFkZFNoZWxsYWJsZU9wdGlvbnMpOiB7XG4gICAgc2hlbGxhYmxlOiBTaGVsbGFibGU7IGFjdGlvbjogY3BpcGVsaW5lX2FjdGlvbnMuQ29kZUJ1aWxkQWN0aW9uO30ge1xuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHN0YWdlTmFtZSk7XG5cbiAgICBjb25zdCBzaCA9IG5ldyBTaGVsbGFibGUodGhpcywgaWQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHNoLmFkZFRvUGlwZWxpbmUoXG4gICAgICBzdGFnZSxcbiAgICAgIG9wdGlvbnMuYWN0aW9uTmFtZSB8fCBgQWN0aW9uJHtpZH1gLFxuICAgICAgb3B0aW9ucy5pbnB1dEFydGlmYWN0IHx8IHRoaXMuYnVpbGRPdXRwdXQsXG4gICAgICB0aGlzLmRldGVybWluZVJ1bk9yZGVyRm9yTmV3QWN0aW9uKHN0YWdlKSk7XG5cbiAgICBpZiAob3B0aW9ucy5mYWlsdXJlTm90aWZpY2F0aW9uKSB7XG4gICAgICB0aGlzLmFkZEJ1aWxkRmFpbHVyZU5vdGlmaWNhdGlvbihzaC5wcm9qZWN0LCBvcHRpb25zLmZhaWx1cmVOb3RpZmljYXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7IHNoZWxsYWJsZTogc2gsIGFjdGlvbiB9O1xuICB9XG5cbiAgcHVibGljIGFkZFRlc3QoaWQ6IHN0cmluZywgcHJvcHM6IFNoZWxsYWJsZVByb3BzKToge3NoZWxsYWJsZTogU2hlbGxhYmxlOyBhY3Rpb246IGNwaXBlbGluZV9hY3Rpb25zLkNvZGVCdWlsZEFjdGlvbn0ge1xuICAgIHJldHVybiB0aGlzLmFkZFNoZWxsYWJsZShURVNUX1NUQUdFX05BTUUsIGlkLCB7XG4gICAgICBhY3Rpb25OYW1lOiBgVGVzdCR7aWR9YCxcbiAgICAgIGZhaWx1cmVOb3RpZmljYXRpb246IGBUZXN0ICR7aWR9IGZhaWxlZGAsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZS9kaXNjb3ZlcnkgbWV0aG9kIHRoYXQgZGVmaW5lcyBhIGNhbmFyeSB0ZXN0IGluIHlvdXIgYWNjb3VudC5cbiAgICogQHBhcmFtIGlkIHRoZSBjb25zdHJ1Y3QgaWRcbiAgICogQHBhcmFtIHByb3BzIGNhbmFyeSBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkQ2FuYXJ5KGlkOiBzdHJpbmcsIHByb3BzOiBDYW5hcnlQcm9wcykge1xuICAgIHJldHVybiBuZXcgQ2FuYXJ5KHRoaXMsIGBDYW5hcnkke2lkfWAsIHByb3BzKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRQdWJsaXNoKHB1Ymxpc2hlcjogSVB1Ymxpc2hlciwgb3B0aW9uczogQWRkUHVibGlzaE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHB1Ymxpc2hTdGFnZU5hbWUgPSBvcHRpb25zLnN0YWdlTmFtZSA/PyBQVUJMSVNIX1NUQUdFX05BTUU7XG4gICAgaWYgKCF0aGlzLmZpcnN0UHVibGlzaFN0YWdlTmFtZSkge1xuICAgICAgdGhpcy5maXJzdFB1Ymxpc2hTdGFnZU5hbWUgPSBwdWJsaXNoU3RhZ2VOYW1lO1xuICAgIH1cbiAgICBjb25zdCBzdGFnZSA9IHRoaXMuZ2V0T3JDcmVhdGVTdGFnZShwdWJsaXNoU3RhZ2VOYW1lKTtcblxuICAgIHB1Ymxpc2hlci5hZGRUb1BpcGVsaW5lKHN0YWdlLCBgJHtwdWJsaXNoZXIubm9kZS5pZH1QdWJsaXNoYCwge1xuICAgICAgaW5wdXRBcnRpZmFjdDogb3B0aW9ucy5pbnB1dEFydGlmYWN0IHx8IHRoaXMuYnVpbGRPdXRwdXQsXG4gICAgICBydW5PcmRlcjogdGhpcy5kZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNoYW5nZSBjb250cm9sIHBvbGljeSB0byBibG9jayB0cmFuc2l0aW9ucyBpbnRvIHRoZSBwdWJsaXNoIHN0YWdlIGR1cmluZyBjZXJ0YWluIHRpbWUgd2luZG93cy5cbiAgICogQHBhcmFtIG9wdGlvbnMgdGhlIG9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBjaGFuZ2UgY29udHJvbCBwb2xpY3kuXG4gICAqL1xuICBwdWJsaWMgYWRkQ2hhbmdlQ29udHJvbChvcHRpb25zOiBBZGRDaGFuZ2VDb250cm9sT3B0aW9ucyA9IHsgfSk6IENoYW5nZUNvbnRyb2xsZXIge1xuICAgIGNvbnN0IHB1Ymxpc2hTdGFnZSA9IHRoaXMuZ2V0U3RhZ2UodGhpcy5maXJzdFB1Ymxpc2hTdGFnZU5hbWUgPz8gUFVCTElTSF9TVEFHRV9OQU1FKTtcbiAgICBpZiAoIXB1Ymxpc2hTdGFnZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGlzIHBpcGVsaW5lIGRvZXMgbm90IGhhdmUgYSAke1BVQkxJU0hfU1RBR0VfTkFNRX0gc3RhZ2UgeWV0LiBBZGQgb25lIGZpcnN0LmApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQ2hhbmdlQ29udHJvbGxlcih0aGlzLCAnQ2hhbmdlQ29udHJvbGxlcicsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBwaXBlbGluZVN0YWdlOiBwdWJsaXNoU3RhZ2UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvTnBtKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvTnBtUHJvamVjdFByb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvTnBtUHJvamVjdCh0aGlzLCAnTnBtJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb01hdmVuKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvTWF2ZW5Qcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9NYXZlblByb2plY3QodGhpcywgJ01hdmVuJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb051R2V0KG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvTnVHZXRQcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9OdUdldFByb2plY3QodGhpcywgJ051R2V0Jywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb0dpdEh1YlBhZ2VzKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaERvY3NUb0dpdEh1YlByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hEb2NzVG9HaXRIdWJQcm9qZWN0KHRoaXMsICdHaXRIdWJQYWdlcycsIHtcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoVG9HaXRIdWIob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9HaXRIdWJQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb0dpdEh1Yih0aGlzLCAnR2l0SHViJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb1B5UEkob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9QeVBpUHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9QeVBpKHRoaXMsICdQeVBJJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb1MzKGlkOiBzdHJpbmcsIG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvUzNQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb1MzKHRoaXMsIGlkLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaCBHb2xhbmcgY29kZSBmcm9tIGBnb2AgZGlyZWN0b3J5IGluIGJ1aWxkIGFydGlmYWN0IHRvIGEgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwdWJsaWMgcHVibGlzaFRvR29sYW5nKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvR29sYW5nUHJvcHMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvR29sYW5nKHRoaXMsICdHb2xhbmcnLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBhdXRvbWF0aWMgYnVtcHMgZm9yIHRoZSBzb3VyY2UgcmVwby5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgYXV0byBidW1wIChzZWUgQXV0b0J1bXBPcHRpb25zIGZvciBkZXNjcmlwdGlvbiBvZiBkZWZhdWx0cylcbiAgICovXG4gIHB1YmxpYyBhdXRvQnVtcChvcHRpb25zPzogQXV0b0J1bXBPcHRpb25zKTogQXV0b0J1bXAge1xuICAgIGlmICghV3JpdGFibGVHaXRIdWJSZXBvLmlzV3JpdGFibGVHaXRIdWJSZXBvKHRoaXMucmVwbykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCJyZXBvXCIgbXVzdCBiZSBhIFdyaXRhYmxlR2l0SHViUmVwbyBpbiBvcmRlciB0byBlbmFibGUgYXV0by1idW1wJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXV0b0J1bXAgPSBuZXcgQXV0b0J1bXAodGhpcywgJ0F1dG9CdW1wJywge1xuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIHJldHVybiBhdXRvQnVtcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGF1dG9tYXRpYyBtZXJnZSBiYWNrcyBmb3IgdGhlIHNvdXJjZSByZXBvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBhdXRvIGJ1bXAgKHNlZSBBdXRvTWVyZ2VCYWNrUGlwZWxpbmVPcHRpb25zIGZvciBkZXNjcmlwdGlvbiBvZiBkZWZhdWx0cylcbiAgICovXG4gIHB1YmxpYyBhdXRvTWVyZ2VCYWNrKG9wdGlvbnM/OiBBdXRvTWVyZ2VCYWNrUGlwZWxpbmVPcHRpb25zKSB7XG4gICAgaWYgKCFXcml0YWJsZUdpdEh1YlJlcG8uaXNXcml0YWJsZUdpdEh1YlJlcG8odGhpcy5yZXBvKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJlcG9cIiBtdXN0IGJlIGEgV3JpdGFibGVHaXRIdWJSZXBvIGluIG9yZGVyIHRvIGVuYWJsZSBhdXRvLW1lcmdlLWJhY2snKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZUJhY2sgPSBuZXcgQXV0b01lcmdlQmFjayh0aGlzLCAnTWVyZ2VCYWNrJywge1xuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb25zPy5zdGFnZSkge1xuXG4gICAgICBjb25zdCBhZnRlclN0YWdlID0gdGhpcy5nZXRTdGFnZShvcHRpb25zLnN0YWdlLmFmdGVyKTtcblxuICAgICAgaWYgKCFhZnRlclN0YWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJ29wdGlvbnMuc3RhZ2UuYWZ0ZXInIG11c3QgYmUgY29uZmlndXJlZCB0byBhbiBleGlzdGluZyBzdGFnZTogJHtvcHRpb25zLnN0YWdlLmFmdGVyfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFnZSA9IHRoaXMuZ2V0T3JDcmVhdGVTdGFnZShvcHRpb25zLnN0YWdlLm5hbWUgPz8gJ01lcmdlQmFjaycsIHsganVzdEFmdGVyOiBhZnRlclN0YWdlIH0pO1xuICAgICAgc3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb24oe1xuICAgICAgICBhY3Rpb25OYW1lOiAnQ3JlYXRlTWVyZ2VCYWNrUHVsbFJlcXVlc3QnLFxuICAgICAgICBwcm9qZWN0OiBtZXJnZUJhY2sucHIucHJvamVjdCxcbiAgICAgICAgaW5wdXQ6IHRoaXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgYXV0b21hdGljIGJ1aWxkcyBvZiBwdWxsIHJlcXVlc3RzIGluIHRoZSBHaXRodWIgcmVwb3NpdG9yeSBhbmQgcG9zdHMgdGhlXG4gICAqIHJlc3VsdHMgYmFjayBhcyBhIGNvbW1lbnQgd2l0aCBhIHB1YmxpYyBsaW5rIHRvIHRoZSBidWlsZCBsb2dzLlxuICAgKi9cbiAgcHVibGljIGF1dG9CdWlsZChvcHRpb25zOiBBdXRvQnVpbGRPcHRpb25zID0geyB9KTogQXV0b0J1aWxkIHtcbiAgICByZXR1cm4gbmV3IEF1dG9CdWlsZCh0aGlzLCAnQXV0b0J1aWxkJywge1xuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIHJlcG86IHRoaXMucmVwbyxcbiAgICAgIGJ1aWxkU3BlYzogb3B0aW9ucy5idWlsZFNwZWMgfHwgdGhpcy5idWlsZFNwZWMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRyaWMgdGhhdCB0cmFja3MgcGlwZWxpbmUgZmFpbHVyZXMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRmFpbHVyZXMob3B0aW9uczogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNfTkFNRVNQQUNFLFxuICAgICAgbWV0cmljTmFtZTogRkFJTFVSRV9NRVRSSUNfTkFNRSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgfSxcbiAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRyaWNzIHRoYXQgdHJhY2sgZmFpbHVyZSBvZiBlYWNoIGFjdGlvbiB3aXRoaW4gdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0FjdGlvbkZhaWx1cmVzKG9wdGlvbnM6IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljW10ge1xuICAgIHJldHVybiBmbGF0TWFwKHRoaXMucGlwZWxpbmUuc3RhZ2VzLCBzdGFnZSA9PiBzdGFnZS5hY3Rpb25zLm1hcChhY3Rpb24gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAgIG5hbWVzcGFjZTogTUVUUklDX05BTUVTUEFDRSxcbiAgICAgICAgbWV0cmljTmFtZTogRkFJTFVSRV9NRVRSSUNfTkFNRSxcbiAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgIFBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgICBBY3Rpb246IGFjdGlvbi5hY3Rpb25Qcm9wZXJ0aWVzLmFjdGlvbk5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgYWRkTWFudWFsQXBwcm92YWxUb1N0YWdlKHN0YWdlTmFtZTogc3RyaW5nLCBwcm9wcz86IGNwaXBlbGluZV9hY3Rpb25zLk1hbnVhbEFwcHJvdmFsQWN0aW9uUHJvcHMpIHtcbiAgICBjb25zdCBzdGFnZSA9IHRoaXMuZ2V0T3JDcmVhdGVTdGFnZShzdGFnZU5hbWUpO1xuICAgIHN0YWdlLmFkZEFjdGlvbihuZXcgY3BpcGVsaW5lX2FjdGlvbnMuTWFudWFsQXBwcm92YWxBY3Rpb24ocHJvcHMgPz8ge1xuICAgICAgYWN0aW9uTmFtZTogJ01hbnVhbEFwcHJvdmFsQWN0aW9uJyxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEZhaWx1cmVBbGFybSh0aXRsZT86IHN0cmluZyk6IGNsb3Vkd2F0Y2guQWxhcm0ge1xuICAgIHJldHVybiBuZXcgUGlwZWxpbmVXYXRjaGVyKHRoaXMsICdQaXBlbGluZVdhdGNoZXInLCB7XG4gICAgICBwaXBlbGluZTogdGhpcy5waXBlbGluZSxcbiAgICAgIG1ldHJpY05hbWVzcGFjZTogTUVUUklDX05BTUVTUEFDRSxcbiAgICAgIGZhaWx1cmVNZXRyaWNOYW1lOiBGQUlMVVJFX01FVFJJQ19OQU1FLFxuICAgICAgdGl0bGUsXG4gICAgfSkuYWxhcm07XG4gIH1cblxuICBwcml2YXRlIGFkZEJ1aWxkRmFpbHVyZU5vdGlmaWNhdGlvbihidWlsZFByb2plY3Q6IGNidWlsZC5JUHJvamVjdCwgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm5vdGlmeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1aWxkUHJvamVjdC5vbkJ1aWxkRmFpbGVkKCdPbkJ1aWxkRmFpbGVkJykuYWRkVGFyZ2V0KG5ldyBldmVudHNfdGFyZ2V0cy5TbnNUb3BpYyh0aGlzLm5vdGlmeSwge1xuICAgICAgbWVzc2FnZTogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tVGV4dChtZXNzYWdlKSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgdGhlIHN0YWdlIG9yIHVuZGVmaW5lZCBpZiB0aGUgc3RhZ2UgZG9lc24ndCBleGlzdFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdGFnZShzdGFnZU5hbWU6IHN0cmluZyk6IGNwaXBlbGluZS5JU3RhZ2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0YWdlc1tzdGFnZU5hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPckNyZWF0ZVN0YWdlKHN0YWdlTmFtZTogc3RyaW5nLCBwbGFjZW1lbnQ/OiBjcGlwZWxpbmUuU3RhZ2VQbGFjZW1lbnQpOiBjcGlwZWxpbmUuSVN0YWdlIHtcbiAgICAvLyBvdGhlcndpc2UsIGdyb3VwIGFsbCBhY3Rpb25zIHNvIHRoZXkgcnVuIGNvbmN1cnJlbnRseS5cbiAgICBsZXQgc3RhZ2UgPSB0aGlzLmdldFN0YWdlKHN0YWdlTmFtZSk7XG4gICAgaWYgKCFzdGFnZSkge1xuICAgICAgc3RhZ2UgPSB0aGlzLnBpcGVsaW5lLmFkZFN0YWdlKHtcbiAgICAgICAgc3RhZ2VOYW1lLFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3RhZ2VzW3N0YWdlTmFtZV0gPSBzdGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZTogY3BpcGVsaW5lLklTdGFnZSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGRldGVybWluZVJ1bk9yZGVyKHN0YWdlLmFjdGlvbnMubGVuZ3RoLCB0aGlzLmNvbmN1cnJlbmN5KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQdWJsaXNoZXIgZXh0ZW5kcyBJQ29uc3RydWN0IHtcbiAgYWRkVG9QaXBlbGluZShzdGFnZTogY3BpcGVsaW5lLklTdGFnZSwgaWQ6IHN0cmluZywgb3B0aW9uczogQWRkVG9QaXBlbGluZU9wdGlvbnMpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFRvUGlwZWxpbmVPcHRpb25zIHtcbiAgaW5wdXRBcnRpZmFjdD86IGNwaXBlbGluZS5BcnRpZmFjdDtcbiAgcnVuT3JkZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQ2hhbmdlQ29udHJvbE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCBpbiB3aGljaCB0aGUgQ2hhbmdlQ29udHJvbCBpQ2FsIGRvY3VtZW50IHdpbGwgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhIG5ldyBidWNrZXQgd2lsbCBiZSBwcm92aXNpb25lZC5cbiAgICovXG4gIGNoYW5nZUNvbnRyb2xCdWNrZXQ/OiBzMy5JQnVja2V0O1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IGluIHdoaWNoIHRoZSBpQ2FsIGZpbGxlIHdpbGwgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnY2hhbmdlLWNvbnRyb2wuaWNhbCdcbiAgICovXG4gIGNoYW5nZUNvbnRyb2xPYmplY3RLZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIHRvIHJ1biB0aGUgY2hhbmdlIGNvbnRyb2xsZXIgb25cbiAgICpcbiAgICogQGRlZmF1bHQgcmF0ZSgxNSBtaW51dGVzKVxuICAgKi9cbiAgc2NoZWR1bGVFeHByZXNzaW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFB1Ymxpc2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBhcnRpZmFjdCB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgQnVpbGQgb3V0cHV0IGFydGlmYWN0XG4gICAqL1xuICBpbnB1dEFydGlmYWN0PzogY3BpcGVsaW5lLkFydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBTdGFnZSBuYW1lIHRvIGFkZCBwdWJsaXNoaW5nIGpvYiB0b1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgYmUgdGhlIHN0YWdlIG5hbWUgYCdQdWJsaXNoJ2AsIGJ1dCBpZiB5b3Ugd2FudCB0b1xuICAgKiBzZXBhcmF0ZSBvdXQgdGhlIHB1Ymxpc2hpbmcgYWN0aW9ucyBpbnRvIGRpZmZlcmVudCBzdGFnZXMgKGluIG9yZGVyIHRvXG4gICAqIGJsb2NrL3VuYmxvY2sgdGhlbSBzZXBhcmF0ZWx5IGZvciBleGFtcGxlKSB5b3UgY2FuIGNoYW5nZSB0aGlzLlxuICAgKlxuICAgKiBTdGFnZXMgYXBwZWFyIGluIHRoZSBwaXBlbGluZSBpbiB0aGUgb3JkZXIgdGhleSBhcmUgcmVmZXJlbmNlZCBmb3JcbiAgICogdGhlIGZpcnN0IHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiUHVibGlzaFwiXG4gICAqL1xuICByZWFkb25seSBzdGFnZU5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkU2hlbGxhYmxlT3B0aW9ucyBleHRlbmRzIFNoZWxsYWJsZVByb3BzIHtcbiAgLyoqXG4gICAqIFN0cmluZyB0byB1c2UgYXMgYWN0aW9uIG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgSWRcbiAgICovXG4gIGFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgdG8gdXNlIGFzIGZhaWx1cmUgbm90aWZpY2F0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIG5vdGlmaWNhdGlvblxuICAgKi9cbiAgZmFpbHVyZU5vdGlmaWNhdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlucHV0IGFydGlmYWN0IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBCdWlsZCBvdXRwdXQgYXJ0aWZhY3RcbiAgICovXG4gIGlucHV0QXJ0aWZhY3Q/OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG59XG4iXX0=
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwaXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQVdxQjtBQUNyQiwyQ0FBbUQ7QUFFbkQsNkNBQTJEO0FBQzNELDJDQUFxRDtBQUNyRCxxQ0FBK0M7QUFDL0MsMkRBQXVEO0FBQ3ZELHFEQUFpRDtBQUNqRCx5REFBcUQ7QUFDckQseURBQTJDO0FBQzNDLGlEQUF3RTtBQUV4RSxpQ0FBbUQ7QUFDbkQsMkNBQXdEO0FBQ3hELG1EQUFxQztBQUNyQyxpQ0FBb0Q7QUFFcEQsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFDckMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUM7QUFDbkMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDO0FBd0p2Qzs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBZ0NyQyxZQUFZLE1BQWlCLEVBQUUsSUFBWSxFQUFFLEtBQW9COztRQUMvRCxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBWGQsV0FBTSxHQUF5QyxFQUFHLENBQUM7UUFhekQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRTdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSw4QkFBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQzVELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsd0JBQXdC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bnQiOlsiaW1wb3J0IHtcbiAgRHVyYXRpb24sXG4gIGF3c19jbG91ZHdhdGNoIGFzIGNsb3Vkd2F0Y2gsXG4gIGF3c19jb2RlYnVpbGQgYXMgY2J1aWxkLFxuICBhd3NfY29kZXBpcGVsaW5lIGFzIGNwaXBlbGluZSxcbiAgYXdzX2NvZGVwaXBlbGluZV9hY3Rpb25zIGFzIGNwaXBlbGluZV9hY3Rpb25zLFxuICBhd3NfZXZlbnRzIGFzIGV2ZW50cyxcbiAgYXdzX2V2ZW50c190YXJnZXRzIGFzIGV2ZW50c190YXJnZXRzLFxuICBhd3NfaWFtIGFzIGlhbSwgYXdzX3MzIGFzIHMzLFxuICBhd3Nfc25zIGFzIHNucyxcbiAgYXdzX3Nuc19zdWJzY3JpcHRpb25zIGFzIHNuc19zdWJzLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuaW1wb3J0IHsgQXV0b0J1aWxkLCBBdXRvQnVpbGRPcHRpb25zIH0gZnJvbSAnLi9hdXRvLWJ1aWxkJztcbmltcG9ydCB7IGNyZWF0ZUJ1aWxkRW52aXJvbm1lbnQgfSBmcm9tICcuL2J1aWxkLWVudic7XG5pbXBvcnQgeyBDYW5hcnksIENhbmFyeVByb3BzIH0gZnJvbSAnLi9jYW5hcnknO1xuaW1wb3J0IHsgQ2hhbmdlQ29udHJvbGxlciB9IGZyb20gJy4vY2hhbmdlLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgQ2hpbWVOb3RpZmllciB9IGZyb20gJy4vY2hpbWUtbm90aWZpZXInO1xuaW1wb3J0IHsgUGlwZWxpbmVXYXRjaGVyIH0gZnJvbSAnLi9waXBlbGluZS13YXRjaGVyJztcbmltcG9ydCAqIGFzIHB1Ymxpc2hpbmcgZnJvbSAnLi9wdWJsaXNoaW5nJztcbmltcG9ydCB7IEF1dG9CdW1wLCBBdXRvTWVyZ2VCYWNrLCBBdXRvQnVtcFByb3BzIH0gZnJvbSAnLi9wdWxsLXJlcXVlc3QnO1xuaW1wb3J0IHsgQXV0b01lcmdlQmFja1BpcGVsaW5lT3B0aW9ucyB9IGZyb20gJy4vcHVsbC1yZXF1ZXN0L21lcmdlLWJhY2snO1xuaW1wb3J0IHsgSVJlcG8sIFdyaXRhYmxlR2l0SHViUmVwbyB9IGZyb20gJy4vcmVwbyc7XG5pbXBvcnQgeyBTaGVsbGFibGUsIFNoZWxsYWJsZVByb3BzIH0gZnJvbSAnLi9zaGVsbGFibGUnO1xuaW1wb3J0ICogYXMgc2lnbmluZyBmcm9tICcuL3NpZ25pbmcnO1xuaW1wb3J0IHsgZGV0ZXJtaW5lUnVuT3JkZXIsIGZsYXRNYXAgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBQVUJMSVNIX1NUQUdFX05BTUUgPSAnUHVibGlzaCc7XG5jb25zdCBTSUdJTklOR19TVEFHRV9OQU1FID0gJ1NpZ24nO1xuY29uc3QgVEVTVF9TVEFHRV9OQU1FID0gJ1Rlc3QnO1xuY29uc3QgTUVUUklDX05BTUVTUEFDRSA9ICdDREsvRGVsaXZsaWInO1xuY29uc3QgRkFJTFVSRV9NRVRSSUNfTkFNRSA9ICdGYWlsdXJlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHJlcG9zaXRvcnkgdG8gYnVpbGQgKGUuZy4gR2l0SHViUmVwbykuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBJUmVwbztcblxuICAvKipcbiAgICogQSBkaXNwbGF5IG5hbWUgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBwaHlzaWNhbCBuYW1lIGZvciB0aGlzIHBpcGVsaW5lLlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJyYW5jaCB0byBidWlsZC5cbiAgICogQGRlZmF1bHQgbWFzdGVyXG4gICAqL1xuICByZWFkb25seSBicmFuY2g/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVtYWlsIHRvIHNlbmQgZmFpbHVyZSBub3RpZmljYXRpb25zLlxuICAgKiBAZGVmYXVsdCAtIE5vIGVtYWlsIG5vdGlmaWNhdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbkVtYWlsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgdXNlZCBmb3IgdGhlIGJ1aWxkcy5cbiAgICpcbiAgICogQGRlZmF1bHQganNpaS9zdXBlcmNoYWluIChzZWUgZG9jcylcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkSW1hZ2U/OiBjYnVpbGQuSUJ1aWxkSW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBDb2RlQnVpbGQgcHJvamVjdCB0aGF0IHdpbGwgYmUgcGFydCBvZiB0aGlzIHBpcGVsaW5lLlxuICAgKiBAZGVmYXVsdCAtIGAke3BpcGVsaW5lTmFtZX0tQnVpbGRgLCBpZiBgcGlwZWxpbmVOYW1lYCBwcm9wZXJ0eSBpcyBzcGVjaWZpZWQ7IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLCBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBidWlsZFByb2plY3ROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBjb21wdXRlIHRvIHVzZSBmb3IgdGhpcyBidWlsZC5cbiAgICogU2VlIHRoZSB7QGxpbmsgQ29tcHV0ZVR5cGV9IGVudW0gZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRha2VuIGZyb20ge0BsaW5rICNidWlsZEltYWdlI2RlZmF1bHRDb21wdXRlVHlwZX1cbiAgICovXG4gIHJlYWRvbmx5IGNvbXB1dGVUeXBlPzogY2J1aWxkLkNvbXB1dGVUeXBlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaG93IHRoZSBwcm9qZWN0IGJ1aWxkcyBEb2NrZXIgaW1hZ2VzLiBTcGVjaWZ5IHRydWUgdG8gZW5hYmxlXG4gICAqIHJ1bm5pbmcgdGhlIERvY2tlciBkYWVtb24gaW5zaWRlIGEgRG9ja2VyIGNvbnRhaW5lci4gVGhpcyB2YWx1ZSBtdXN0IGJlXG4gICAqIHNldCB0byB0cnVlIG9ubHkgaWYgdGhpcyBidWlsZCBwcm9qZWN0IHdpbGwgYmUgdXNlZCB0byBidWlsZCBEb2NrZXJcbiAgICogaW1hZ2VzLCBhbmQgdGhlIHNwZWNpZmllZCBidWlsZCBlbnZpcm9ubWVudCBpbWFnZSBpcyBub3Qgb25lIHByb3ZpZGVkIGJ5XG4gICAqIEFXUyBDb2RlQnVpbGQgd2l0aCBEb2NrZXIgc3VwcG9ydC4gT3RoZXJ3aXNlLCBhbGwgYXNzb2NpYXRlZCBidWlsZHMgdGhhdFxuICAgKiBhdHRlbXB0IHRvIGludGVyYWN0IHdpdGggdGhlIERvY2tlciBkYWVtb24gd2lsbCBmYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmlsZWdlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwYXNzIHRvIGJ1aWxkXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJ1aWxkc3BlYywgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gYSBidWlsZHNwZWMueW1sIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkU3BlYz86IGNidWlsZC5CdWlsZFNwZWM7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHJlLXJ1biB0aGUgcGlwZWxpbmUgYWZ0ZXIgeW91J3ZlIHVwZGF0ZWQgaXQuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29uY3VycmVuY3kgbGltaXQgdGVzdCBhbmQgcHVibGlzaCBzdGFnZXMuXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCBpZiB0aGlzIHZhbHVlIGlzIDIsIHRoZW4gb25seSB0d28gYWN0aW9ucyB3aWxsIGV4ZWN1dGUgY29uY3VycmVudGx5LlxuICAgKiBJZiB0aGlzIHZhbHVlIGlzIDEsIHRoZSBwaXBlbGluZSB3aWxsIG5vdCBoYXZlIGFueSBjb25jdXJyZW50IGV4ZWN1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBsaW1pdFxuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVuY3k/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBkcnlSdW4gZm9yIGFsbCBwdWJsaXNoaW5nIHN0ZXBzXG4gICAqXG4gICAqIChDYW4gc3RpbGwgYmUgY2hhbmdlZCB3aGVuIGFkZGluZyBhIHN0ZXApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZHJ5UnVuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBidWlsZCBjb21taXRzIHRoYXQgYXJlIHB1c2hlZCB0byB0aGlzIHJlcG9zaXRvcnksIGluY2x1ZGluZyBQUiBidWlsZHMgb24gZ2l0aHViLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0J1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgYXV0by1idWlsZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtICdhdXRvQnVpbGRPcHRpb25zLnB1YmxpY0xvZ3MnIHdpbGwgYmUgc2V0IHRvIGl0cyBkZWZhdWx0LiAnYXV0b0J1aWxkT3B0aW9ucy5idWlsZHNwZWMnIHdpbGwgYmUgY29uZmlndXJlZCB0byBtYXRjaCB3aXRoIHRoZVxuICAgKiAnYnVpbGRTcGVjJyBwcm9wZXJ0eS5cbiAgICovXG4gIHJlYWRvbmx5IGF1dG9CdWlsZE9wdGlvbnM/OiBBdXRvQnVpbGRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQb3N0IGEgbm90aWZpY2F0aW9uIHRvIHRoZSBnaXZlbiBDaGltZSB3ZWJob29rcyBpZiB0aGUgcGlwZWxpbmUgZmFpbHNcbiAgICogQGRlZmF1bHQgLSBubyBDaGltZSBub3RpZmljYXRpb25zIG9uIHBpcGVsaW5lIGZhaWx1cmVcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgYG5vdGlmeU9uRmFpbHVyZSgpYCBpbnN0ZWFkIGluIGNvbWJpbmF0aW9uIHdpdGggYFBpcGVsaW5lTm90aWZpY2F0aW9uLmNoaW1lKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbWVGYWlsdXJlV2ViaG9va3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIENoaW1lIG1lc3NhZ2UgdG8gcG9zdFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgZGVmYXVsdCBtZXNzYWdlXG4gICAqL1xuICByZWFkb25seSBjaGltZU1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRpbWVvdXRcbiAgICpcbiAgICogSG93IGxvbmcgdGhlIGJ1aWxkIGNhbiB0YWtlIGF0IG1heGltdW0gKGJlZm9yZSBmYWlsaW5nIHdpdGggYW4gZXJyb3IpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIER1cmF0aW9uLmhvdXJzKDgpXG4gICAqL1xuICByZWFkb25seSBidWlsZFRpbWVvdXQ/OiBEdXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZU5vdGlmaWNhdGlvbkJpbmRPcHRpb25zIHtcbiAgcmVhZG9ubHkgcGlwZWxpbmU6IFBpcGVsaW5lO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQaXBlbGluZU5vdGlmaWNhdGlvbiB7XG4gIGJpbmQocGlwZWxpbmU6IFBpcGVsaW5lTm90aWZpY2F0aW9uQmluZE9wdGlvbnMpOiB2b2lkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGFuIGF1dG8gYnVtcCBmb3IgdGhpcyBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvQnVtcE9wdGlvbnMgZXh0ZW5kcyBPbWl0PEF1dG9CdW1wUHJvcHMsICdyZXBvJz4ge1xufVxuXG4vKipcbiAqIERlZmluZXMgYSBkZWxpdmxpYiBDSS9DRCBwaXBlbGluZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFBpcGVsaW5lIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIGJ1aWxkUm9sZT86IGlhbS5JUm9sZTtcbiAgcHVibGljIHJlYWRvbmx5IGZhaWx1cmVBbGFybTogY2xvdWR3YXRjaC5BbGFybTtcbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkT3V0cHV0OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VBcnRpZmFjdDogY3BpcGVsaW5lLkFydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBDb2RlQnVpbGQgcHJvamVjdCBvZiB0aGlzIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJ1aWxkUHJvamVjdDogY2J1aWxkLklQcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0byBidWlsZCBwcm9qZWN0LiB1bmRlZmluZWQgaWYgJ2F1dG9CdWlsZCcgaXMgZGlzYWJsZWQgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0b0J1aWxkUHJvamVjdD86IGNidWlsZC5Qcm9qZWN0O1xuXG4gIC8qXG4gICAqIFRoZSB1bmRlcmx5aW5nIENvZGVQaXBlbGluZSBQaXBlbGluZSBvYmplY3QgdGhhdCBtb2RlbHMgdGhpcyBwaXBlbGluZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwaXBlbGluZTogY3BpcGVsaW5lLlBpcGVsaW5lO1xuICBwcml2YXRlIHJlYWRvbmx5IGJyYW5jaDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmeT86IHNucy5Ub3BpYztcbiAgcHJpdmF0ZSBzdGFnZXM6IHsgW25hbWU6IHN0cmluZ106IGNwaXBlbGluZS5JU3RhZ2UgfSA9IHsgfTtcbiAgcHJpdmF0ZSBfc2lnbmluZ091dHB1dD86IGNwaXBlbGluZS5BcnRpZmFjdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG86IElSZXBvO1xuICBwcml2YXRlIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZEVudmlyb25tZW50OiBjYnVpbGQuQnVpbGRFbnZpcm9ubWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZFNwZWM/OiBjYnVpbGQuQnVpbGRTcGVjO1xuICBwcml2YXRlIGZpcnN0UHVibGlzaFN0YWdlTmFtZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwYXJlbnQ6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVQcm9wcykge1xuICAgIHN1cGVyKHBhcmVudCwgbmFtZSk7XG5cbiAgICB0aGlzLmNvbmN1cnJlbmN5ID0gcHJvcHMuY29uY3VycmVuY3k7XG4gICAgdGhpcy5yZXBvID0gcHJvcHMucmVwbztcbiAgICB0aGlzLmRyeVJ1biA9ICEhcHJvcHMuZHJ5UnVuO1xuXG4gICAgdGhpcy5waXBlbGluZSA9IG5ldyBjcGlwZWxpbmUuUGlwZWxpbmUodGhpcywgJ0J1aWxkUGlwZWxpbmUnLCB7XG4gICAgICBwaXBlbGluZU5hbWU6IHByb3BzLnBpcGVsaW5lTmFtZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogcHJvcHMucmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlID09PSB1bmRlZmluZWQgPyB0cnVlIDogcHJvcHMucmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5icmFuY2ggPSBwcm9wcy5icmFuY2ggfHwgJ21hc3Rlcic7XG4gICAgdGhpcy5zb3VyY2VBcnRpZmFjdCA9IHByb3BzLnJlcG8uY3JlYXRlU291cmNlU3RhZ2UodGhpcy5waXBlbGluZSwgdGhpcy5icmFuY2gpO1xuXG4gICAgdGhpcy5idWlsZEVudmlyb25tZW50ID0gY3JlYXRlQnVpbGRFbnZpcm9ubWVudChwcm9wcyk7XG4gICAgdGhpcy5idWlsZFNwZWMgPSBwcm9wcy5idWlsZFNwZWM7XG5cbiAgICBsZXQgYnVpbGRQcm9qZWN0TmFtZSA9IHByb3BzLmJ1aWxkUHJvamVjdE5hbWU7XG4gICAgaWYgKGJ1aWxkUHJvamVjdE5hbWUgPT09IHVuZGVmaW5lZCAmJiBwcm9wcy5waXBlbGluZU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYnVpbGRQcm9qZWN0TmFtZSA9IGAke3Byb3BzLnBpcGVsaW5lTmFtZX0tQnVpbGRgO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUHJvamVjdCA9IG5ldyBjYnVpbGQuUGlwZWxpbmVQcm9qZWN0KHRoaXMsICdCdWlsZFByb2plY3QnLCB7XG4gICAgICBwcm9qZWN0TmFtZTogYnVpbGRQcm9qZWN0TmFtZSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmJ1aWxkRW52aXJvbm1lbnQsXG4gICAgICBidWlsZFNwZWM6IHRoaXMuYnVpbGRTcGVjLFxuICAgICAgdGltZW91dDogcHJvcHMuYnVpbGRUaW1lb3V0ID8/IER1cmF0aW9uLmhvdXJzKDgpLFxuICAgICAgc3NtU2Vzc2lvblBlcm1pc3Npb25zOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWlsZFJvbGUgPSB0aGlzLmJ1aWxkUHJvamVjdC5yb2xlO1xuICAgIHRoaXMuYnVpbGRSb2xlIS5hZGRNYW5hZ2VkUG9saWN5KGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnQW1hem9uRWxhc3RpY0NvbnRhaW5lclJlZ2lzdHJ5UHVibGljUmVhZE9ubHknKSk7XG5cbiAgICBjb25zdCBidWlsZFN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKCdCdWlsZCcpO1xuICAgIGNvbnN0IGJ1aWxkT3V0cHV0ID0gbmV3IGNwaXBlbGluZS5BcnRpZmFjdCgpO1xuICAgIGJ1aWxkU3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb24oe1xuICAgICAgYWN0aW9uTmFtZTogJ0J1aWxkJyxcbiAgICAgIHByb2plY3Q6IHRoaXMuYnVpbGRQcm9qZWN0LFxuICAgICAgaW5wdXQ6IHRoaXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICBvdXRwdXRzOiBbYnVpbGRPdXRwdXRdLFxuICAgIH0pKTtcbiAgICB0aGlzLmJ1aWxkT3V0cHV0ID0gYnVpbGRPdXRwdXQ7XG5cbiAgICBpZiAocHJvcHMubm90aWZpY2F0aW9uRW1haWwpIHtcbiAgICAgIHRoaXMubm90aWZ5ID0gbmV3IHNucy5Ub3BpYyh0aGlzLCAnTm90aWZpY2F0aW9uc1RvcGljJyk7XG4gICAgICB0aGlzLm5vdGlmeS5hZGRTdWJzY3JpcHRpb24obmV3IHNuc19zdWJzLkVtYWlsU3Vic2NyaXB0aW9uKHByb3BzLm5vdGlmaWNhdGlvbkVtYWlsKSk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgZmFpbHVyZSBhbGFybSBmb3IgdGhlIGVudGlyZSBwaXBlbGluZS5cbiAgICB0aGlzLmZhaWx1cmVBbGFybSA9IHRoaXMuYWRkRmFpbHVyZUFsYXJtKHByb3BzLnRpdGxlKTtcblxuICAgIC8vIGVtaXQgYW4gU05TIG5vdGlmaWNhdGlvbiBldmVyeSB0aW1lIGJ1aWxkIGZhaWxzLlxuICAgIHRoaXMuYWRkQnVpbGRGYWlsdXJlTm90aWZpY2F0aW9uKHRoaXMuYnVpbGRQcm9qZWN0LCBgJHtwcm9wcy50aXRsZX0gYnVpbGQgZmFpbGVkYCk7XG5cbiAgICAvLyBBbHNvIGVtaXQgdG8gQ2hpbWUgd2ViaG9va3MgaWYgY29uZmlndXJlZFxuICAgIGlmIChwcm9wcy5jaGltZUZhaWx1cmVXZWJob29rcykge1xuICAgICAgbmV3IENoaW1lTm90aWZpZXIodGhpcywgJ0NoaW1lTm90aWZpZXInLCB7XG4gICAgICAgIHBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLFxuICAgICAgICBtZXNzYWdlOiBwcm9wcy5jaGltZU1lc3NhZ2UsXG4gICAgICAgIHdlYmhvb2tVcmxzOiBwcm9wcy5jaGltZUZhaWx1cmVXZWJob29rcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5hdXRvQnVpbGQpIHtcbiAgICAgIHRoaXMuYXV0b0J1aWxkUHJvamVjdCA9IHRoaXMuYXV0b0J1aWxkKHByb3BzLmF1dG9CdWlsZE9wdGlvbnMpLnByb2plY3Q7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25pbmcgb3V0cHV0IGFydGlmYWN0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNpZ25pbmdPdXRwdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpZ25pbmdPdXRwdXQ7XG4gIH1cblxuICBwdWJsaWMgbm90aWZ5T25GYWlsdXJlKG5vdGlmaWNhdGlvbjogSVBpcGVsaW5lTm90aWZpY2F0aW9uKSB7XG4gICAgbm90aWZpY2F0aW9uLmJpbmQoe1xuICAgICAgcGlwZWxpbmU6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGFjdGlvbiB0byBydW4gYSBzaGVsbCBzY3JpcHQgdG8gdGhlIHBpcGVsaW5lXG4gICAqXG4gICAqIEByZXR1cm4gVGhlIFNoZWxsYWJsZSBhbmQgdGhlIEFjdGlvbiBhZGRlZCB0byB0aGUgcGlwZWxpbmUuXG4gICAqL1xuICBwdWJsaWMgYWRkU2hlbGxhYmxlKHN0YWdlTmFtZTogc3RyaW5nLCBpZDogc3RyaW5nLCBvcHRpb25zOiBBZGRTaGVsbGFibGVPcHRpb25zKToge1xuICAgIHNoZWxsYWJsZTogU2hlbGxhYmxlOyBhY3Rpb246IGNwaXBlbGluZV9hY3Rpb25zLkNvZGVCdWlsZEFjdGlvbjt9IHtcbiAgICBjb25zdCBzdGFnZSA9IHRoaXMuZ2V0T3JDcmVhdGVTdGFnZShzdGFnZU5hbWUpO1xuXG4gICAgY29uc3Qgc2ggPSBuZXcgU2hlbGxhYmxlKHRoaXMsIGlkLCBvcHRpb25zKTtcbiAgICBjb25zdCBhY3Rpb24gPSBzaC5hZGRUb1BpcGVsaW5lKFxuICAgICAgc3RhZ2UsXG4gICAgICBvcHRpb25zLmFjdGlvbk5hbWUgfHwgYEFjdGlvbiR7aWR9YCxcbiAgICAgIG9wdGlvbnMuaW5wdXRBcnRpZmFjdCB8fCB0aGlzLmJ1aWxkT3V0cHV0LFxuICAgICAgdGhpcy5kZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZSkpO1xuXG4gICAgaWYgKG9wdGlvbnMuZmFpbHVyZU5vdGlmaWNhdGlvbikge1xuICAgICAgdGhpcy5hZGRCdWlsZEZhaWx1cmVOb3RpZmljYXRpb24oc2gucHJvamVjdCwgb3B0aW9ucy5mYWlsdXJlTm90aWZpY2F0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzaGVsbGFibGU6IHNoLCBhY3Rpb24gfTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUZXN0KGlkOiBzdHJpbmcsIHByb3BzOiBTaGVsbGFibGVQcm9wcyk6IHtzaGVsbGFibGU6IFNoZWxsYWJsZTsgYWN0aW9uOiBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb259IHtcbiAgICByZXR1cm4gdGhpcy5hZGRTaGVsbGFibGUoVEVTVF9TVEFHRV9OQU1FLCBpZCwge1xuICAgICAgYWN0aW9uTmFtZTogYFRlc3Qke2lkfWAsXG4gICAgICBmYWlsdXJlTm90aWZpY2F0aW9uOiBgVGVzdCAke2lkfSBmYWlsZWRgLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVuaWVuY2UvZGlzY292ZXJ5IG1ldGhvZCB0aGF0IGRlZmluZXMgYSBjYW5hcnkgdGVzdCBpbiB5b3VyIGFjY291bnQuXG4gICAqIEBwYXJhbSBpZCB0aGUgY29uc3RydWN0IGlkXG4gICAqIEBwYXJhbSBwcm9wcyBjYW5hcnkgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFkZENhbmFyeShpZDogc3RyaW5nLCBwcm9wczogQ2FuYXJ5UHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IENhbmFyeSh0aGlzLCBgQ2FuYXJ5JHtpZH1gLCBwcm9wcyk7XG4gIH1cblxuICBwdWJsaWMgYWRkUHVibGlzaChwdWJsaXNoZXI6IElQdWJsaXNoZXIsIG9wdGlvbnM6IEFkZFB1Ymxpc2hPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBwdWJsaXNoU3RhZ2VOYW1lID0gb3B0aW9ucy5zdGFnZU5hbWUgPz8gUFVCTElTSF9TVEFHRV9OQU1FO1xuICAgIGlmICghdGhpcy5maXJzdFB1Ymxpc2hTdGFnZU5hbWUpIHtcbiAgICAgIHRoaXMuZmlyc3RQdWJsaXNoU3RhZ2VOYW1lID0gcHVibGlzaFN0YWdlTmFtZTtcbiAgICB9XG4gICAgY29uc3Qgc3RhZ2UgPSB0aGlzLmdldE9yQ3JlYXRlU3RhZ2UocHVibGlzaFN0YWdlTmFtZSk7XG5cbiAgICBwdWJsaXNoZXIuYWRkVG9QaXBlbGluZShzdGFnZSwgYCR7cHVibGlzaGVyLm5vZGUuaWR9UHVibGlzaGAsIHtcbiAgICAgIGlucHV0QXJ0aWZhY3Q6IG9wdGlvbnMuaW5wdXRBcnRpZmFjdCB8fCB0aGlzLmJ1aWxkT3V0cHV0LFxuICAgICAgcnVuT3JkZXI6IHRoaXMuZGV0ZXJtaW5lUnVuT3JkZXJGb3JOZXdBY3Rpb24oc3RhZ2UpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGFuZ2UgY29udHJvbCBwb2xpY3kgdG8gYmxvY2sgdHJhbnNpdGlvbnMgaW50byB0aGUgcHVibGlzaCBzdGFnZSBkdXJpbmcgY2VydGFpbiB0aW1lIHdpbmRvd3MuXG4gICAqIEBwYXJhbSBvcHRpb25zIHRoZSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgY2hhbmdlIGNvbnRyb2wgcG9saWN5LlxuICAgKi9cbiAgcHVibGljIGFkZENoYW5nZUNvbnRyb2wob3B0aW9uczogQWRkQ2hhbmdlQ29udHJvbE9wdGlvbnMgPSB7IH0pOiBDaGFuZ2VDb250cm9sbGVyIHtcbiAgICBjb25zdCBwdWJsaXNoU3RhZ2UgPSB0aGlzLmdldFN0YWdlKHRoaXMuZmlyc3RQdWJsaXNoU3RhZ2VOYW1lID8/IFBVQkxJU0hfU1RBR0VfTkFNRSk7XG4gICAgaWYgKCFwdWJsaXNoU3RhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhpcyBwaXBlbGluZSBkb2VzIG5vdCBoYXZlIGEgJHtQVUJMSVNIX1NUQUdFX05BTUV9IHN0YWdlIHlldC4gQWRkIG9uZSBmaXJzdC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENoYW5nZUNvbnRyb2xsZXIodGhpcywgJ0NoYW5nZUNvbnRyb2xsZXInLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgcGlwZWxpbmVTdGFnZTogcHVibGlzaFN0YWdlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZFNpZ25pbmcoc2lnbmVyOiBzaWduaW5nLklTaWduZXIsIG9wdGlvbnM6IHNpZ25pbmcuQWRkU2lnbmluZ09wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHNpZ25pbmdTdGFnZU5hbWUgPSBvcHRpb25zLnN0YWdlTmFtZSA/PyBTSUdJTklOR19TVEFHRV9OQU1FO1xuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5nZXRPckNyZWF0ZVN0YWdlKHNpZ25pbmdTdGFnZU5hbWUpO1xuXG4gICAgdGhpcy5fc2lnbmluZ091dHB1dCA9IHNpZ25lci5hZGRUb1BpcGVsaW5lKHN0YWdlLCBgJHtzaWduZXIubm9kZS5pZH1TaWduYCwge1xuICAgICAgaW5wdXRBcnRpZmFjdDogb3B0aW9ucy5pbnB1dEFydGlmYWN0IHx8IHRoaXMuYnVpbGRPdXRwdXQsXG4gICAgICBydW5PcmRlcjogdGhpcy5kZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZSksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2lnbk51R2V0V2l0aFNpZ25lcihvcHRpb25zOiBzaWduaW5nLlNpZ25OdUdldFdpdGhTaWduZXJQcm9wcyAmIHNpZ25pbmcuQWRkU2lnbmluZ09wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFNpZ25pbmcobmV3IHNpZ25pbmcuU2lnbk51R2V0V2l0aFNpZ25lcih0aGlzLCAnTnVHZXRTaWduaW5nJywge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcHVibGlzaFRvTnBtKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvTnBtUHJvamVjdFByb3BzICYgQWRkUHVibGlzaE9wdGlvbnMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvTnBtUHJvamVjdCh0aGlzLCAnTnBtJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb01hdmVuKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvTWF2ZW5Qcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9NYXZlblByb2plY3QodGhpcywgJ01hdmVuJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb051R2V0KG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvTnVHZXRQcm9qZWN0UHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9OdUdldFByb2plY3QodGhpcywgJ051R2V0Jywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb0dpdEh1YlBhZ2VzKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaERvY3NUb0dpdEh1YlByb2plY3RQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hEb2NzVG9HaXRIdWJQcm9qZWN0KHRoaXMsICdHaXRIdWJQYWdlcycsIHtcbiAgICAgIGRyeVJ1bjogdGhpcy5kcnlSdW4sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBwdWJsaXNoVG9HaXRIdWIob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9HaXRIdWJQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb0dpdEh1Yih0aGlzLCAnR2l0SHViJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb1B5UEkob3B0aW9uczogcHVibGlzaGluZy5QdWJsaXNoVG9QeVBpUHJvcHMgJiBBZGRQdWJsaXNoT3B0aW9ucykge1xuICAgIHRoaXMuYWRkUHVibGlzaChuZXcgcHVibGlzaGluZy5QdWJsaXNoVG9QeVBpKHRoaXMsICdQeVBJJywge1xuICAgICAgZHJ5UnVuOiB0aGlzLmRyeVJ1bixcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSksIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHB1Ymxpc2hUb1MzKGlkOiBzdHJpbmcsIG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvUzNQcm9wcyAmIEFkZFB1Ymxpc2hPcHRpb25zKSB7XG4gICAgdGhpcy5hZGRQdWJsaXNoKG5ldyBwdWJsaXNoaW5nLlB1Ymxpc2hUb1MzKHRoaXMsIGlkLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGlzaCBHb2xhbmcgY29kZSBmcm9tIGBnb2AgZGlyZWN0b3J5IGluIGJ1aWxkIGFydGlmYWN0IHRvIGEgR2l0SHViIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwdWJsaWMgcHVibGlzaFRvR29sYW5nKG9wdGlvbnM6IHB1Ymxpc2hpbmcuUHVibGlzaFRvR29sYW5nUHJvcHMpIHtcbiAgICB0aGlzLmFkZFB1Ymxpc2gobmV3IHB1Ymxpc2hpbmcuUHVibGlzaFRvR29sYW5nKHRoaXMsICdHb2xhbmcnLCB7XG4gICAgICBkcnlSdW46IHRoaXMuZHJ5UnVuLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyBhdXRvbWF0aWMgYnVtcHMgZm9yIHRoZSBzb3VyY2UgcmVwby5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgYXV0byBidW1wIChzZWUgQXV0b0J1bXBPcHRpb25zIGZvciBkZXNjcmlwdGlvbiBvZiBkZWZhdWx0cylcbiAgICovXG4gIHB1YmxpYyBhdXRvQnVtcChvcHRpb25zPzogQXV0b0J1bXBPcHRpb25zKTogQXV0b0J1bXAge1xuICAgIGlmICghV3JpdGFibGVHaXRIdWJSZXBvLmlzV3JpdGFibGVHaXRIdWJSZXBvKHRoaXMucmVwbykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCJyZXBvXCIgbXVzdCBiZSBhIFdyaXRhYmxlR2l0SHViUmVwbyBpbiBvcmRlciB0byBlbmFibGUgYXV0by1idW1wJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXV0b0J1bXAgPSBuZXcgQXV0b0J1bXAodGhpcywgJ0F1dG9CdW1wJywge1xuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIHJldHVybiBhdXRvQnVtcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGF1dG9tYXRpYyBtZXJnZSBiYWNrcyBmb3IgdGhlIHNvdXJjZSByZXBvLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBhdXRvIGJ1bXAgKHNlZSBBdXRvTWVyZ2VCYWNrUGlwZWxpbmVPcHRpb25zIGZvciBkZXNjcmlwdGlvbiBvZiBkZWZhdWx0cylcbiAgICovXG4gIHB1YmxpYyBhdXRvTWVyZ2VCYWNrKG9wdGlvbnM/OiBBdXRvTWVyZ2VCYWNrUGlwZWxpbmVPcHRpb25zKSB7XG4gICAgaWYgKCFXcml0YWJsZUdpdEh1YlJlcG8uaXNXcml0YWJsZUdpdEh1YlJlcG8odGhpcy5yZXBvKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcInJlcG9cIiBtdXN0IGJlIGEgV3JpdGFibGVHaXRIdWJSZXBvIGluIG9yZGVyIHRvIGVuYWJsZSBhdXRvLW1lcmdlLWJhY2snKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZUJhY2sgPSBuZXcgQXV0b01lcmdlQmFjayh0aGlzLCAnTWVyZ2VCYWNrJywge1xuICAgICAgcmVwbzogdGhpcy5yZXBvLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb25zPy5zdGFnZSkge1xuXG4gICAgICBjb25zdCBhZnRlclN0YWdlID0gdGhpcy5nZXRTdGFnZShvcHRpb25zLnN0YWdlLmFmdGVyKTtcblxuICAgICAgaWYgKCFhZnRlclN0YWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJ29wdGlvbnMuc3RhZ2UuYWZ0ZXInIG11c3QgYmUgY29uZmlndXJlZCB0byBhbiBleGlzdGluZyBzdGFnZTogJHtvcHRpb25zLnN0YWdlLmFmdGVyfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGFnZSA9IHRoaXMuZ2V0T3JDcmVhdGVTdGFnZShvcHRpb25zLnN0YWdlLm5hbWUgPz8gJ01lcmdlQmFjaycsIHsganVzdEFmdGVyOiBhZnRlclN0YWdlIH0pO1xuICAgICAgc3RhZ2UuYWRkQWN0aW9uKG5ldyBjcGlwZWxpbmVfYWN0aW9ucy5Db2RlQnVpbGRBY3Rpb24oe1xuICAgICAgICBhY3Rpb25OYW1lOiAnQ3JlYXRlTWVyZ2VCYWNrUHVsbFJlcXVlc3QnLFxuICAgICAgICBwcm9qZWN0OiBtZXJnZUJhY2sucHIucHJvamVjdCxcbiAgICAgICAgaW5wdXQ6IHRoaXMuc291cmNlQXJ0aWZhY3QsXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgYXV0b21hdGljIGJ1aWxkcyBvZiBwdWxsIHJlcXVlc3RzIGluIHRoZSBHaXRodWIgcmVwb3NpdG9yeSBhbmQgcG9zdHMgdGhlXG4gICAqIHJlc3VsdHMgYmFjayBhcyBhIGNvbW1lbnQgd2l0aCBhIHB1YmxpYyBsaW5rIHRvIHRoZSBidWlsZCBsb2dzLlxuICAgKi9cbiAgcHVibGljIGF1dG9CdWlsZChvcHRpb25zOiBBdXRvQnVpbGRPcHRpb25zID0geyB9KTogQXV0b0J1aWxkIHtcbiAgICByZXR1cm4gbmV3IEF1dG9CdWlsZCh0aGlzLCAnQXV0b0J1aWxkJywge1xuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIHJlcG86IHRoaXMucmVwbyxcbiAgICAgIGJ1aWxkU3BlYzogb3B0aW9ucy5idWlsZFNwZWMgfHwgdGhpcy5idWlsZFNwZWMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRyaWMgdGhhdCB0cmFja3MgcGlwZWxpbmUgZmFpbHVyZXMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRmFpbHVyZXMob3B0aW9uczogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbmFtZXNwYWNlOiBNRVRSSUNfTkFNRVNQQUNFLFxuICAgICAgbWV0cmljTmFtZTogRkFJTFVSRV9NRVRSSUNfTkFNRSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgUGlwZWxpbmU6IHRoaXMucGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgfSxcbiAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRyaWNzIHRoYXQgdHJhY2sgZmFpbHVyZSBvZiBlYWNoIGFjdGlvbiB3aXRoaW4gdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0FjdGlvbkZhaWx1cmVzKG9wdGlvbnM6IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljW10ge1xuICAgIHJldHVybiBmbGF0TWFwKHRoaXMucGlwZWxpbmUuc3RhZ2VzLCBzdGFnZSA9PiBzdGFnZS5hY3Rpb25zLm1hcChhY3Rpb24gPT4ge1xuICAgICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAgIG5hbWVzcGFjZTogTUVUUklDX05BTUVTUEFDRSxcbiAgICAgICAgbWV0cmljTmFtZTogRkFJTFVSRV9NRVRSSUNfTkFNRSxcbiAgICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICAgIFBpcGVsaW5lOiB0aGlzLnBpcGVsaW5lLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgICBBY3Rpb246IGFjdGlvbi5hY3Rpb25Qcm9wZXJ0aWVzLmFjdGlvbk5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgYWRkTWFudWFsQXBwcm92YWxUb1N0YWdlKHN0YWdlTmFtZTogc3RyaW5nLCBwcm9wcz86IGNwaXBlbGluZV9hY3Rpb25zLk1hbnVhbEFwcHJvdmFsQWN0aW9uUHJvcHMpIHtcbiAgICBjb25zdCBzdGFnZSA9IHRoaXMuZ2V0T3JDcmVhdGVTdGFnZShzdGFnZU5hbWUpO1xuICAgIHN0YWdlLmFkZEFjdGlvbihuZXcgY3BpcGVsaW5lX2FjdGlvbnMuTWFudWFsQXBwcm92YWxBY3Rpb24ocHJvcHMgPz8ge1xuICAgICAgYWN0aW9uTmFtZTogJ01hbnVhbEFwcHJvdmFsQWN0aW9uJyxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEZhaWx1cmVBbGFybSh0aXRsZT86IHN0cmluZyk6IGNsb3Vkd2F0Y2guQWxhcm0ge1xuICAgIHJldHVybiBuZXcgUGlwZWxpbmVXYXRjaGVyKHRoaXMsICdQaXBlbGluZVdhdGNoZXInLCB7XG4gICAgICBwaXBlbGluZTogdGhpcy5waXBlbGluZSxcbiAgICAgIG1ldHJpY05hbWVzcGFjZTogTUVUUklDX05BTUVTUEFDRSxcbiAgICAgIGZhaWx1cmVNZXRyaWNOYW1lOiBGQUlMVVJFX01FVFJJQ19OQU1FLFxuICAgICAgdGl0bGUsXG4gICAgfSkuYWxhcm07XG4gIH1cblxuICBwcml2YXRlIGFkZEJ1aWxkRmFpbHVyZU5vdGlmaWNhdGlvbihidWlsZFByb2plY3Q6IGNidWlsZC5JUHJvamVjdCwgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm5vdGlmeSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1aWxkUHJvamVjdC5vbkJ1aWxkRmFpbGVkKCdPbkJ1aWxkRmFpbGVkJykuYWRkVGFyZ2V0KG5ldyBldmVudHNfdGFyZ2V0cy5TbnNUb3BpYyh0aGlzLm5vdGlmeSwge1xuICAgICAgbWVzc2FnZTogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tVGV4dChtZXNzYWdlKSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgdGhlIHN0YWdlIG9yIHVuZGVmaW5lZCBpZiB0aGUgc3RhZ2UgZG9lc24ndCBleGlzdFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdGFnZShzdGFnZU5hbWU6IHN0cmluZyk6IGNwaXBlbGluZS5JU3RhZ2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0YWdlc1tzdGFnZU5hbWVdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPckNyZWF0ZVN0YWdlKHN0YWdlTmFtZTogc3RyaW5nLCBwbGFjZW1lbnQ/OiBjcGlwZWxpbmUuU3RhZ2VQbGFjZW1lbnQpOiBjcGlwZWxpbmUuSVN0YWdlIHtcbiAgICAvLyBvdGhlcndpc2UsIGdyb3VwIGFsbCBhY3Rpb25zIHNvIHRoZXkgcnVuIGNvbmN1cnJlbnRseS5cbiAgICBsZXQgc3RhZ2UgPSB0aGlzLmdldFN0YWdlKHN0YWdlTmFtZSk7XG4gICAgaWYgKCFzdGFnZSkge1xuICAgICAgc3RhZ2UgPSB0aGlzLnBpcGVsaW5lLmFkZFN0YWdlKHtcbiAgICAgICAgc3RhZ2VOYW1lLFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuc3RhZ2VzW3N0YWdlTmFtZV0gPSBzdGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVSdW5PcmRlckZvck5ld0FjdGlvbihzdGFnZTogY3BpcGVsaW5lLklTdGFnZSk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGRldGVybWluZVJ1bk9yZGVyKHN0YWdlLmFjdGlvbnMubGVuZ3RoLCB0aGlzLmNvbmN1cnJlbmN5KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElQdWJsaXNoZXIgZXh0ZW5kcyBJQ29uc3RydWN0IHtcbiAgYWRkVG9QaXBlbGluZShzdGFnZTogY3BpcGVsaW5lLklTdGFnZSwgaWQ6IHN0cmluZywgb3B0aW9uczogQWRkVG9QaXBlbGluZU9wdGlvbnMpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFRvUGlwZWxpbmVPcHRpb25zIHtcbiAgaW5wdXRBcnRpZmFjdD86IGNwaXBlbGluZS5BcnRpZmFjdDtcbiAgcnVuT3JkZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkQ2hhbmdlQ29udHJvbE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCBpbiB3aGljaCB0aGUgQ2hhbmdlQ29udHJvbCBpQ2FsIGRvY3VtZW50IHdpbGwgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhIG5ldyBidWNrZXQgd2lsbCBiZSBwcm92aXNpb25lZC5cbiAgICovXG4gIGNoYW5nZUNvbnRyb2xCdWNrZXQ/OiBzMy5JQnVja2V0O1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IGluIHdoaWNoIHRoZSBpQ2FsIGZpbGxlIHdpbGwgYmUgc3RvcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnY2hhbmdlLWNvbnRyb2wuaWNhbCdcbiAgICovXG4gIGNoYW5nZUNvbnRyb2xPYmplY3RLZXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIHRvIHJ1biB0aGUgY2hhbmdlIGNvbnRyb2xsZXIgb25cbiAgICpcbiAgICogQGRlZmF1bHQgcmF0ZSgxNSBtaW51dGVzKVxuICAgKi9cbiAgc2NoZWR1bGVFeHByZXNzaW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFB1Ymxpc2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBhcnRpZmFjdCB0byB1c2VcbiAgICpcbiAgICogQGRlZmF1bHQgQnVpbGQgb3V0cHV0IGFydGlmYWN0XG4gICAqL1xuICBpbnB1dEFydGlmYWN0PzogY3BpcGVsaW5lLkFydGlmYWN0O1xuXG4gIC8qKlxuICAgKiBTdGFnZSBuYW1lIHRvIGFkZCBwdWJsaXNoaW5nIGpvYiB0b1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgYmUgdGhlIHN0YWdlIG5hbWUgYCdQdWJsaXNoJ2AsIGJ1dCBpZiB5b3Ugd2FudCB0b1xuICAgKiBzZXBhcmF0ZSBvdXQgdGhlIHB1Ymxpc2hpbmcgYWN0aW9ucyBpbnRvIGRpZmZlcmVudCBzdGFnZXMgKGluIG9yZGVyIHRvXG4gICAqIGJsb2NrL3VuYmxvY2sgdGhlbSBzZXBhcmF0ZWx5IGZvciBleGFtcGxlKSB5b3UgY2FuIGNoYW5nZSB0aGlzLlxuICAgKlxuICAgKiBTdGFnZXMgYXBwZWFyIGluIHRoZSBwaXBlbGluZSBpbiB0aGUgb3JkZXIgdGhleSBhcmUgcmVmZXJlbmNlZCBmb3JcbiAgICogdGhlIGZpcnN0IHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiUHVibGlzaFwiXG4gICAqL1xuICByZWFkb25seSBzdGFnZU5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkU2hlbGxhYmxlT3B0aW9ucyBleHRlbmRzIFNoZWxsYWJsZVByb3BzIHtcbiAgLyoqXG4gICAqIFN0cmluZyB0byB1c2UgYXMgYWN0aW9uIG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgSWRcbiAgICovXG4gIGFjdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgdG8gdXNlIGFzIGZhaWx1cmUgbm90aWZpY2F0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIG5vdGlmaWNhdGlvblxuICAgKi9cbiAgZmFpbHVyZU5vdGlmaWNhdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlucHV0IGFydGlmYWN0IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBCdWlsZCBvdXRwdXQgYXJ0aWZhY3RcbiAgICovXG4gIGlucHV0QXJ0aWZhY3Q/OiBjcGlwZWxpbmUuQXJ0aWZhY3Q7XG59XG4iXX0=
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
echo "Installing required CLI tools: jq"
|
|
5
|
+
if command -v yum &>/dev/null; then
|
|
6
|
+
yum install -y jq
|
|
7
|
+
elif command -v apt-get &>/dev/null; then
|
|
8
|
+
apt-get update
|
|
9
|
+
apt-get install -y jq
|
|
10
|
+
else
|
|
11
|
+
echo "!!! Neither an apt nor yum distribution - could not install jq, things might break!"
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
if [ -n "${SIGNING_ACCESS_ROLE_ARN:-}" ]; then
|
|
15
|
+
ROLE=$(aws sts assume-role --role-arn "${SIGNING_ACCESS_ROLE_ARN:-}" --role-session-name "signer_access")
|
|
16
|
+
export AWS_ACCESS_KEY_ID=$(echo $ROLE | jq -r .Credentials.AccessKeyId)
|
|
17
|
+
export AWS_SECRET_ACCESS_KEY=$(echo $ROLE | jq -r .Credentials.SecretAccessKey)
|
|
18
|
+
export AWS_SESSION_TOKEN=$(echo $ROLE | jq -r .Credentials.SessionToken)
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
found=false
|
|
22
|
+
for nuget_package_path in $(find dotnet -name *.nupkg -not -iname *.symbols.nupkg); do
|
|
23
|
+
found=true
|
|
24
|
+
echo "🔑 Applying authenticode signatures to assemblies in ${nuget_package_path}"
|
|
25
|
+
for file in $(unzip -Z1 ${nuget_package_path} '*.dll'); do
|
|
26
|
+
echo "📄 Assembly: ${file}"
|
|
27
|
+
tmp=$(mktemp -d)
|
|
28
|
+
# extract the dll from the zip file
|
|
29
|
+
unzip -q ${nuget_package_path} -d ${tmp} ${file}
|
|
30
|
+
# need to set appropriate permissions, otherwise the file has none
|
|
31
|
+
chmod u+rw ${tmp}/${file}
|
|
32
|
+
# upload dll to signer bucket
|
|
33
|
+
version_id=$(aws s3api put-object \
|
|
34
|
+
--bucket ${SIGNING_BUCKET_NAME:-} \
|
|
35
|
+
--key unsigned/${file} \
|
|
36
|
+
--body ${file} | jq -r '.VersionId')
|
|
37
|
+
# invoke signer lambda
|
|
38
|
+
aws lambda invoke \
|
|
39
|
+
--function-name ${SIGNING_LAMBDA_ARN:-} \
|
|
40
|
+
--invocation-type RequestResponse \
|
|
41
|
+
--cli-binary-format raw-in-base64-out \
|
|
42
|
+
--payload '{ "artifactKey": "'"unsigned/${file}"'", "artifactVersion": "'"${version_id}"'" }' \
|
|
43
|
+
${tmp}/response.json >/dev/null
|
|
44
|
+
signed_artifact_key=$(cat ${tmp}/response.json | jq -r '.signedArtifactKey')
|
|
45
|
+
# download signed dll from signer bucket
|
|
46
|
+
aws s3api get-object \
|
|
47
|
+
--bucket ${SIGNING_BUCKET_NAME:-} \
|
|
48
|
+
--key ${signed_artifact_key} \
|
|
49
|
+
${tmp}/${file} >/dev/null
|
|
50
|
+
# replace the dll in the nuget package
|
|
51
|
+
(
|
|
52
|
+
cd ${tmp}
|
|
53
|
+
zip -qfr ${nuget_package_path} ${file}
|
|
54
|
+
)
|
|
55
|
+
# clean up temporary directory
|
|
56
|
+
rm -rf ${tmp}
|
|
57
|
+
done
|
|
58
|
+
echo "🔐 All Done!"
|
|
59
|
+
done
|
|
60
|
+
|
|
61
|
+
if ! ${found}; then
|
|
62
|
+
echo "❌ No nupkg files found under the dotnet/ directory. Nothing to sign"
|
|
63
|
+
exit 1
|
|
64
|
+
fi
|
package/lib/signing.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { IBuildImage, Project } from 'aws-cdk-lib/aws-codebuild';
|
|
2
|
+
import { Artifact, IStage } from 'aws-cdk-lib/aws-codepipeline';
|
|
3
|
+
import { IRole } from 'aws-cdk-lib/aws-iam';
|
|
4
|
+
import { IFunction } from 'aws-cdk-lib/aws-lambda';
|
|
5
|
+
import { IBucket } from 'aws-cdk-lib/aws-s3';
|
|
6
|
+
import { Construct, IConstruct } from 'constructs';
|
|
7
|
+
import { AddToPipelineOptions } from './pipeline';
|
|
8
|
+
export interface ISigner extends IConstruct {
|
|
9
|
+
addToPipeline(stage: IStage, id: string, options: AddToPipelineOptions): Artifact;
|
|
10
|
+
}
|
|
11
|
+
export interface AddSigningOptions {
|
|
12
|
+
/**
|
|
13
|
+
* The input artifact to use
|
|
14
|
+
*
|
|
15
|
+
* @default Build output artifact
|
|
16
|
+
*/
|
|
17
|
+
readonly inputArtifact?: Artifact;
|
|
18
|
+
/**
|
|
19
|
+
* Stage name to add signing job to
|
|
20
|
+
*
|
|
21
|
+
* @default "Sign"
|
|
22
|
+
*/
|
|
23
|
+
readonly stageName?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface SignNuGetWithSignerProps {
|
|
26
|
+
/**
|
|
27
|
+
* An S3 bucket used to store signed and unsigned DLL files
|
|
28
|
+
*/
|
|
29
|
+
readonly signingBucket: IBucket;
|
|
30
|
+
/**
|
|
31
|
+
* A Lambda function used to perform signing operations with AWS Signer
|
|
32
|
+
*/
|
|
33
|
+
readonly signingLambda: IFunction;
|
|
34
|
+
/**
|
|
35
|
+
* A role used provide access to the signing bucket and signing lambda
|
|
36
|
+
*/
|
|
37
|
+
readonly signingAccessRole: IRole;
|
|
38
|
+
/**
|
|
39
|
+
* The build image to do the signing in
|
|
40
|
+
*
|
|
41
|
+
* Needs to have NuGet preinstalled.
|
|
42
|
+
*
|
|
43
|
+
* @default Latest superchain
|
|
44
|
+
*/
|
|
45
|
+
readonly buildImage?: IBuildImage;
|
|
46
|
+
}
|
|
47
|
+
export declare class SignNuGetWithSigner extends Construct implements ISigner {
|
|
48
|
+
readonly role: IRole;
|
|
49
|
+
readonly project: Project;
|
|
50
|
+
constructor(scope: Construct, id: string, props: SignNuGetWithSignerProps);
|
|
51
|
+
addToPipeline(stage: IStage, id: string, options: AddToPipelineOptions): Artifact;
|
|
52
|
+
}
|
package/lib/signing.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.SignNuGetWithSigner = void 0;
|
|
27
|
+
const path = __importStar(require("path"));
|
|
28
|
+
const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
|
|
29
|
+
const aws_codepipeline_1 = require("aws-cdk-lib/aws-codepipeline");
|
|
30
|
+
const aws_codepipeline_actions_1 = require("aws-cdk-lib/aws-codepipeline-actions");
|
|
31
|
+
const constructs_1 = require("constructs");
|
|
32
|
+
const build_spec_1 = require("./build-spec");
|
|
33
|
+
const shellable_1 = require("./shellable");
|
|
34
|
+
class SignNuGetWithSigner extends constructs_1.Construct {
|
|
35
|
+
constructor(scope, id, props) {
|
|
36
|
+
var _a;
|
|
37
|
+
super(scope, id);
|
|
38
|
+
const environment = {
|
|
39
|
+
SIGNING_BUCKET_NAME: props.signingBucket.bucketName,
|
|
40
|
+
SIGNING_LAMBDA_ARN: props.signingLambda.functionArn,
|
|
41
|
+
SIGNING_ACCESS_ROLE_ARN: props.signingAccessRole.roleArn,
|
|
42
|
+
};
|
|
43
|
+
const shellable = new shellable_1.Shellable(this, 'Default', {
|
|
44
|
+
platform: new shellable_1.LinuxPlatform((_a = props.buildImage) !== null && _a !== void 0 ? _a : aws_codebuild_1.LinuxBuildImage.fromDockerRegistry('public.ecr.aws/jsii/superchain:1-buster-slim-node18')),
|
|
45
|
+
scriptDirectory: path.join(__dirname, 'signing', 'nuget'),
|
|
46
|
+
entrypoint: 'sign.sh',
|
|
47
|
+
buildSpec: build_spec_1.BuildSpec.literal({
|
|
48
|
+
version: '0.2',
|
|
49
|
+
artifacts: {
|
|
50
|
+
files: ['**/*'],
|
|
51
|
+
['base-directory']: '.',
|
|
52
|
+
},
|
|
53
|
+
}),
|
|
54
|
+
environment,
|
|
55
|
+
});
|
|
56
|
+
this.role = shellable.role;
|
|
57
|
+
this.project = shellable.project;
|
|
58
|
+
}
|
|
59
|
+
addToPipeline(stage, id, options) {
|
|
60
|
+
const signingInput = options.inputArtifact || new aws_codepipeline_1.Artifact();
|
|
61
|
+
const signingOutput = new aws_codepipeline_1.Artifact();
|
|
62
|
+
stage.addAction(new aws_codepipeline_actions_1.CodeBuildAction({
|
|
63
|
+
actionName: id,
|
|
64
|
+
input: signingInput,
|
|
65
|
+
runOrder: options.runOrder,
|
|
66
|
+
project: this.project,
|
|
67
|
+
outputs: [signingOutput],
|
|
68
|
+
}));
|
|
69
|
+
return signingOutput;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.SignNuGetWithSigner = SignNuGetWithSigner;
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpZ25pbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsNkRBQWtGO0FBQ2xGLG1FQUFnRTtBQUNoRSxtRkFBdUU7QUFJdkUsMkNBQW1EO0FBQ25ELDZDQUF5QztBQUV6QywyQ0FBdUQ7QUFnRHZELE1BQWEsbUJBQW9CLFNBQVEsc0JBQVM7SUFJaEQsWUFBbUIsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBK0I7O1FBQzlFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUc7WUFDbEIsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUFVO1lBQ25ELGtCQUFrQixFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBVztZQUNuRCx1QkFBdUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTztTQUN6RCxDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxxQkFBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDL0MsUUFBUSxFQUFFLElBQUkseUJBQWEsQ0FBQyxNQUFBLEtBQUssQ0FBQyxVQUFVLG1DQUFJLCtCQUFlLENBQUMsa0JBQWtCLENBQUMscURBQXFELENBQUMsQ0FBQztZQUMxSSxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQztZQUN6RCxVQUFVLEVBQUUsU0FBUztZQUNyQixTQUFTLEVBQUUsc0JBQVMsQ0FBQyxPQUFPLENBQUM7Z0JBQzNCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFNBQVMsRUFBRTtvQkFDVCxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7b0JBQ2YsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUc7aUJBQ3hCO2FBQ0YsQ0FBQztZQUNGLFdBQVc7U0FDWixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQ25DLENBQUM7SUFFTSxhQUFhLENBQUMsS0FBYSxFQUFFLEVBQVUsRUFBRSxPQUE2QjtRQUMzRSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksMkJBQVEsRUFBRSxDQUFDO1FBQzdELE1BQU0sYUFBYSxHQUFHLElBQUksMkJBQVEsRUFBRSxDQUFDO1FBRXJDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSwwQ0FBZSxDQUFDO1lBQ2xDLFVBQVUsRUFBRSxFQUFFO1lBQ2QsS0FBSyxFQUFFLFlBQVk7WUFDbkIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDekIsQ0FBQyxDQUFDLENBQUM7UUFFSixPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUE3Q0Qsa0RBNkNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IElCdWlsZEltYWdlLCBMaW51eEJ1aWxkSW1hZ2UsIFByb2plY3QgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IEFydGlmYWN0LCBJU3RhZ2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lJztcbmltcG9ydCB7IENvZGVCdWlsZEFjdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUtYWN0aW9ucyc7XG5pbXBvcnQgeyBJUm9sZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgSUZ1bmN0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQnVpbGRTcGVjIH0gZnJvbSAnLi9idWlsZC1zcGVjJztcbmltcG9ydCB7IEFkZFRvUGlwZWxpbmVPcHRpb25zIH0gZnJvbSAnLi9waXBlbGluZSc7XG5pbXBvcnQgeyBMaW51eFBsYXRmb3JtLCBTaGVsbGFibGUgfSBmcm9tICcuL3NoZWxsYWJsZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNpZ25lciBleHRlbmRzIElDb25zdHJ1Y3Qge1xuICBhZGRUb1BpcGVsaW5lKHN0YWdlOiBJU3RhZ2UsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IEFkZFRvUGlwZWxpbmVPcHRpb25zKTogQXJ0aWZhY3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkU2lnbmluZ09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGlucHV0IGFydGlmYWN0IHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCBCdWlsZCBvdXRwdXQgYXJ0aWZhY3RcbiAgICovXG4gIHJlYWRvbmx5IGlucHV0QXJ0aWZhY3Q/OiBBcnRpZmFjdDtcblxuICAvKipcbiAgICogU3RhZ2UgbmFtZSB0byBhZGQgc2lnbmluZyBqb2IgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgXCJTaWduXCJcbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduTnVHZXRXaXRoU2lnbmVyUHJvcHMge1xuICAvKipcbiAgICogQW4gUzMgYnVja2V0IHVzZWQgdG8gc3RvcmUgc2lnbmVkIGFuZCB1bnNpZ25lZCBETEwgZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IHNpZ25pbmdCdWNrZXQ6IElCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIEEgTGFtYmRhIGZ1bmN0aW9uIHVzZWQgdG8gcGVyZm9ybSBzaWduaW5nIG9wZXJhdGlvbnMgd2l0aCBBV1MgU2lnbmVyXG4gICAqL1xuICByZWFkb25seSBzaWduaW5nTGFtYmRhOiBJRnVuY3Rpb247XG5cbiAgLyoqXG4gICAqIEEgcm9sZSB1c2VkIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBzaWduaW5nIGJ1Y2tldCBhbmQgc2lnbmluZyBsYW1iZGFcbiAgICovXG4gIHJlYWRvbmx5IHNpZ25pbmdBY2Nlc3NSb2xlOiBJUm9sZTtcblxuICAvKipcbiAgICogVGhlIGJ1aWxkIGltYWdlIHRvIGRvIHRoZSBzaWduaW5nIGluXG4gICAqXG4gICAqIE5lZWRzIHRvIGhhdmUgTnVHZXQgcHJlaW5zdGFsbGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBMYXRlc3Qgc3VwZXJjaGFpblxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRJbWFnZT86IElCdWlsZEltYWdlO1xufVxuXG5leHBvcnQgY2xhc3MgU2lnbk51R2V0V2l0aFNpZ25lciBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElTaWduZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogSVJvbGU7XG4gIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBQcm9qZWN0O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2lnbk51R2V0V2l0aFNpZ25lclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGVudmlyb25tZW50ID0ge1xuICAgICAgU0lHTklOR19CVUNLRVRfTkFNRTogcHJvcHMuc2lnbmluZ0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgU0lHTklOR19MQU1CREFfQVJOOiBwcm9wcy5zaWduaW5nTGFtYmRhLmZ1bmN0aW9uQXJuLFxuICAgICAgU0lHTklOR19BQ0NFU1NfUk9MRV9BUk46IHByb3BzLnNpZ25pbmdBY2Nlc3NSb2xlLnJvbGVBcm4sXG4gICAgfTtcblxuICAgIGNvbnN0IHNoZWxsYWJsZSA9IG5ldyBTaGVsbGFibGUodGhpcywgJ0RlZmF1bHQnLCB7XG4gICAgICBwbGF0Zm9ybTogbmV3IExpbnV4UGxhdGZvcm0ocHJvcHMuYnVpbGRJbWFnZSA/PyBMaW51eEJ1aWxkSW1hZ2UuZnJvbURvY2tlclJlZ2lzdHJ5KCdwdWJsaWMuZWNyLmF3cy9qc2lpL3N1cGVyY2hhaW46MS1idXN0ZXItc2xpbS1ub2RlMTgnKSksXG4gICAgICBzY3JpcHREaXJlY3Rvcnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdzaWduaW5nJywgJ251Z2V0JyksXG4gICAgICBlbnRyeXBvaW50OiAnc2lnbi5zaCcsXG4gICAgICBidWlsZFNwZWM6IEJ1aWxkU3BlYy5saXRlcmFsKHtcbiAgICAgICAgdmVyc2lvbjogJzAuMicsXG4gICAgICAgIGFydGlmYWN0czoge1xuICAgICAgICAgIGZpbGVzOiBbJyoqLyonXSxcbiAgICAgICAgICBbJ2Jhc2UtZGlyZWN0b3J5J106ICcuJyxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgZW52aXJvbm1lbnQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvbGUgPSBzaGVsbGFibGUucm9sZTtcbiAgICB0aGlzLnByb2plY3QgPSBzaGVsbGFibGUucHJvamVjdDtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUb1BpcGVsaW5lKHN0YWdlOiBJU3RhZ2UsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IEFkZFRvUGlwZWxpbmVPcHRpb25zKSB7XG4gICAgY29uc3Qgc2lnbmluZ0lucHV0ID0gb3B0aW9ucy5pbnB1dEFydGlmYWN0IHx8IG5ldyBBcnRpZmFjdCgpO1xuICAgIGNvbnN0IHNpZ25pbmdPdXRwdXQgPSBuZXcgQXJ0aWZhY3QoKTtcblxuICAgIHN0YWdlLmFkZEFjdGlvbihuZXcgQ29kZUJ1aWxkQWN0aW9uKHtcbiAgICAgIGFjdGlvbk5hbWU6IGlkLFxuICAgICAgaW5wdXQ6IHNpZ25pbmdJbnB1dCxcbiAgICAgIHJ1bk9yZGVyOiBvcHRpb25zLnJ1bk9yZGVyLFxuICAgICAgcHJvamVjdDogdGhpcy5wcm9qZWN0LFxuICAgICAgb3V0cHV0czogW3NpZ25pbmdPdXRwdXRdLFxuICAgIH0pKTtcblxuICAgIHJldHVybiBzaWduaW5nT3V0cHV0O1xuICB9XG59Il19
|