@rio-cloud/cdk-v2-constructs 8.8.2 → 9.0.0-alpha.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/.jsii +554 -216
- package/lib/contributions/team-transport-two/datadog-synthetics/datadog-synthetics-test-custom-resource/handler.cjs +107 -104
- package/lib/contributions/team-transport-two/pipeline/buildspecs.d.ts +3 -3
- package/lib/contributions/team-transport-two/pipeline/buildspecs.js +34 -12
- package/lib/contributions/team-transport-two/pipeline/pipeline-stack.d.ts +2 -0
- package/lib/contributions/team-transport-two/pipeline/pipeline-stack.js +7 -5
- package/lib/datadogv2/datadog-lambda-instrumentation.d.ts +1 -1
- package/lib/datadogv2/datadog-lambda-instrumentation.js +5 -2
- package/lib/datadogv2/secret-locator-custom-resource/on-create.cjs +85 -76
- package/lib/datadogv2/service-catalog-custom-resource/on-create.cjs +85 -82
- package/lib/datadogv2/validate-lambda-environment.d.ts +3 -0
- package/lib/datadogv2/validate-lambda-environment.js +33 -0
- package/lib/fargate/codedeploy-custom-resources/create-deployment-is-complete.cjs +85 -76
- package/lib/fargate/codedeploy-custom-resources/create-deployment-on-create.cjs +85 -76
- package/lib/fargate/codedeploy-custom-resources/run-monitoring-test-suite-runner.cjs +90 -81
- package/lib/sbom-catalog/lambda/handler.cjs +88 -84
- package/package.json +9 -8
- package/version.json +1 -1
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.exportCommitHashAsVersion = exports.logCommitHash = exports.createVulnerabilityBuildSpec = exports.createMainBuildSpec = void 0;
|
|
4
4
|
const aws_codebuild_1 = require("aws-cdk-lib/aws-codebuild");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const createMainBuildSpec = (features) => {
|
|
5
|
+
const DEFAULT_NODE_VERSION = '24';
|
|
6
|
+
const EXACT_VERSION = /^(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*)$/;
|
|
7
|
+
const createMainBuildSpec = (features, options) => {
|
|
8
|
+
const runtime = getRuntimeOptions(options);
|
|
8
9
|
const env = {};
|
|
9
10
|
const buildCommands = [];
|
|
10
11
|
buildCommands.push(...(0, exports.exportCommitHashAsVersion)());
|
|
@@ -41,7 +42,8 @@ const createMainBuildSpec = (features) => {
|
|
|
41
42
|
env,
|
|
42
43
|
phases: {
|
|
43
44
|
install: {
|
|
44
|
-
'runtime-versions': getRuntimes(features),
|
|
45
|
+
'runtime-versions': getRuntimes(features, runtime.nodejsVersion),
|
|
46
|
+
...(runtime.commands.length > 0 ? { commands: runtime.commands } : {}),
|
|
45
47
|
},
|
|
46
48
|
pre_build: {
|
|
47
49
|
commands: (0, exports.logCommitHash)(),
|
|
@@ -60,7 +62,8 @@ const createMainBuildSpec = (features) => {
|
|
|
60
62
|
});
|
|
61
63
|
};
|
|
62
64
|
exports.createMainBuildSpec = createMainBuildSpec;
|
|
63
|
-
const createVulnerabilityBuildSpec = (features) => {
|
|
65
|
+
const createVulnerabilityBuildSpec = (features, options) => {
|
|
66
|
+
const runtime = getRuntimeOptions(options);
|
|
64
67
|
const env = {};
|
|
65
68
|
const buildCommands = [];
|
|
66
69
|
if (features.gradleBuild) {
|
|
@@ -93,7 +96,8 @@ const createVulnerabilityBuildSpec = (features) => {
|
|
|
93
96
|
env,
|
|
94
97
|
phases: {
|
|
95
98
|
install: {
|
|
96
|
-
'runtime-versions': getRuntimes(features),
|
|
99
|
+
'runtime-versions': getRuntimes(features, runtime.nodejsVersion),
|
|
100
|
+
...(runtime.commands.length > 0 ? { commands: runtime.commands } : {}),
|
|
97
101
|
},
|
|
98
102
|
pre_build: {
|
|
99
103
|
commands: (0, exports.logCommitHash)(),
|
|
@@ -111,14 +115,31 @@ const createVulnerabilityBuildSpec = (features) => {
|
|
|
111
115
|
});
|
|
112
116
|
};
|
|
113
117
|
exports.createVulnerabilityBuildSpec = createVulnerabilityBuildSpec;
|
|
114
|
-
const getRuntimes = (features) => {
|
|
118
|
+
const getRuntimes = (features, nodejsVersion) => {
|
|
115
119
|
const runtimes = {};
|
|
116
120
|
if (features.gradleBuild) {
|
|
117
121
|
runtimes.java = 'corretto21';
|
|
118
122
|
}
|
|
119
|
-
runtimes.nodejs =
|
|
123
|
+
runtimes.nodejs = nodejsVersion;
|
|
120
124
|
return runtimes;
|
|
121
125
|
};
|
|
126
|
+
const getRuntimeOptions = (options) => {
|
|
127
|
+
const commands = [];
|
|
128
|
+
if (options?.nodejsVersion !== undefined) {
|
|
129
|
+
assertExactVersion('nodejsVersion', options.nodejsVersion);
|
|
130
|
+
commands.push(`test "$(node --version)" = "v${options.nodejsVersion}"`);
|
|
131
|
+
}
|
|
132
|
+
if (options?.npmVersion !== undefined) {
|
|
133
|
+
assertExactVersion('npmVersion', options.npmVersion);
|
|
134
|
+
commands.push(`test "$(npm --version)" = "${options.npmVersion}"`);
|
|
135
|
+
}
|
|
136
|
+
return { nodejsVersion: options?.nodejsVersion ?? DEFAULT_NODE_VERSION, commands };
|
|
137
|
+
};
|
|
138
|
+
const assertExactVersion = (name, version) => {
|
|
139
|
+
if (version.match(EXACT_VERSION)?.[0] !== version) {
|
|
140
|
+
throw new Error(`${name} must be an exact major.minor.patch version`);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
122
143
|
const logCommitHash = () => [
|
|
123
144
|
'(echo "Build triggered by commit " && git log --pretty=format:"%h%x09%an%x09%s" -n 1 ) | tr -d "\\n"',
|
|
124
145
|
];
|
|
@@ -129,7 +150,7 @@ const infrastructureBuildCommands = () => [
|
|
|
129
150
|
'### INFRASTRUCTURE BUILD ###',
|
|
130
151
|
'cd infrastructure',
|
|
131
152
|
'npm ci',
|
|
132
|
-
|
|
153
|
+
`npx rio-license-checker --type npm-backend --account-name \${ACCOUNT_NAME} --service-name \${SERVICE_NAME} --upload`,
|
|
133
154
|
'npm run cdk synth 1> /dev/null',
|
|
134
155
|
// In pipeline: Error parsing reference: is not a valid repository/tag: invalid reference format.
|
|
135
156
|
// workaround due to https://github.com/aws/aws-cdk/issues/18044',
|
|
@@ -142,7 +163,8 @@ const gradleBuildCommands = (kafkaIntegration) => {
|
|
|
142
163
|
'### GRADLE BUILD ###',
|
|
143
164
|
'./gradlew clean build',
|
|
144
165
|
'# license check',
|
|
145
|
-
|
|
166
|
+
'npm ci',
|
|
167
|
+
`npx rio-license-checker --type gradle --account-name \${ACCOUNT_NAME} --service-name \${SERVICE_NAME} --upload`,
|
|
146
168
|
'# self signed certificate',
|
|
147
169
|
'set -u; keytool -genkey -alias InternalServiceCertificate -keyalg RSA -keystore containerfiles/service-keystore.p12 -validity 3650 -storetype PKCS12 -dname "CN=internal.service.${SERVICE_NAME}.${HOSTED_ZONE}, OU=Logistics, O=Rio, L=Munich, ST=BY, C=DE" -keypass ${SERVICE_KEYSTORE_PASSWORD} -storepass ${SERVICE_KEYSTORE_PASSWORD}',
|
|
148
170
|
]);
|
|
@@ -168,7 +190,7 @@ const npmBuildCommands = () => [
|
|
|
168
190
|
'npm ci',
|
|
169
191
|
'npm run lint',
|
|
170
192
|
'npm run test:ci',
|
|
171
|
-
|
|
193
|
+
`npx rio-license-checker --type npm-frontend --account-name \${ACCOUNT_NAME} --service-name \${SERVICE_NAME} --upload`,
|
|
172
194
|
'npm run build',
|
|
173
195
|
];
|
|
174
196
|
const cachePaths = () => [
|
|
@@ -202,4 +224,4 @@ const createReports = (features) => {
|
|
|
202
224
|
}
|
|
203
225
|
return reports;
|
|
204
226
|
};
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRzcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9idWlsZHNwZWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUFzRDtBQUd0RCxNQUFNLHlCQUF5QixHQUFHLE9BQU8sQ0FBQztBQUMxQyxNQUFNLHFCQUFxQixHQUFHLHlDQUF5Qyx5QkFBeUIsRUFBRSxDQUFDO0FBRTVGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUEwQixFQUFhLEVBQUU7SUFDM0UsTUFBTSxHQUFHLEdBQTJDLEVBQUUsQ0FBQztJQUN2RCxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7SUFDbkMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUEsaUNBQXlCLEdBQUUsQ0FBQyxDQUFDO0lBRW5ELEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO1FBQ3ZCLFlBQVksRUFBRSxzQkFBc0I7UUFDcEMsZUFBZSxFQUFFLHlCQUF5QjtLQUMzQyxDQUFDO0lBRUYsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9FLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO1lBQ3ZCLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakMseUJBQXlCLEVBQUUsbURBQW1EO1lBQzlFLG1CQUFtQixFQUFFLGtDQUFrQztTQUN4RCxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUIsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdBQUc7WUFDdkIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJ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S0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2YsZ0JBQWdCLEVBQUUsU0FBUztTQUM1QixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1aWxkU3BlYyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0IHsgUGlwZWxpbmVGZWF0dXJlcyB9IGZyb20gJy4vcGlwZWxpbmUtc3RhY2snO1xuXG5jb25zdCBSSU9fTElDRU5TRV9DSEVDS19WRVJTSU9OID0gJzEuMS43JztcbmNvbnN0IExJQ0VOU0VfQ0hFQ0tfQ09NTUFORCA9IGBucHggLXkgQHJpby1jbG91ZC9yaW8tbGljZW5zZS1jaGVja2VyQCR7UklPX0xJQ0VOU0VfQ0hFQ0tfVkVSU0lPTn1gO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTWFpbkJ1aWxkU3BlYyA9IChmZWF0dXJlczogUGlwZWxpbmVGZWF0dXJlcyk6IEJ1aWxkU3BlYyA9PiB7XG4gIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcbiAgY29uc3QgYnVpbGRDb21tYW5kczogc3RyaW5nW10gPSBbXTtcbiAgYnVpbGRDb21tYW5kcy5wdXNoKC4uLmV4cG9ydENvbW1pdEhhc2hBc1ZlcnNpb24oKSk7XG5cbiAgZW52WydwYXJhbWV0ZXItc3RvcmUnXSA9IHtcbiAgICBBQ0NPVU5UX05BTUU6ICcvY29uZmlnL2FjY291bnQvbmFtZScsXG4gICAgVEVBTV9JREVOVElGSUVSOiAnL2NvbmZpZy90ZWFtL2lkZW50aWZpZXInLFxuICB9O1xuXG4gIGlmIChmZWF0dXJlcy5ncmFkbGVCdWlsZCkge1xuICAgIGJ1aWxkQ29tbWFuZHMucHVzaCguLi5ncmFkbGVCdWlsZENvbW1hbmRzKGZlYXR1cmVzLmthZmthSW50ZWdyYXRpb24gPz8gZmFsc2UpKTtcbiAgICBlbnZbJ3BhcmFtZXRlci1zdG9yZSddID0ge1xuICAgICAgLi4uKGVudlsncGFyYW1ldGVyLXN0b3JlJ10gPz8ge30pLFxuICAgICAgU0VSVklDRV9LRVlTVE9SRV9QQVNTV09SRDogJy9jb25maWcvJHtTRVJWSUNFX05BTUV9L3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmQnLFxuICAgICAgTElDRU5TRV9CVUNLRVRfTkFNRTogJy9jb25maWcvb3NzLWxpY2Vuc2VzL2J1Y2tldC1uYW1lJyxcbiAgICB9O1xuICB9XG4gIGlmIChmZWF0dXJlcy5rYWZrYUludGVncmF0aW9uKSB7XG4gICAgZW52WydwYXJhbWV0ZXItc3RvcmUnXSA9IHtcbiAgICAgIC4uLihlbnZbJ3BhcmFtZXRlci1zdG9yZSddID8/IHt9KSxcbiAgICAgIENSRUFURV9BTkRfU0lHTl9DRVJUSUZJQ0FURV9TQ1JJUFRfUzNfTE9DQVRJT046XG4gICAgICAgICcvY29uZmlnL2thZmthLWludGVncmF0aW9uL2NyZWF0ZS1hbmQtc2lnbi1jZXJ0aWZpY2F0ZS1zY3JpcHQtczMtbG9jYXRpb24nLFxuICAgIH07XG4gIH1cbiAgaWYgKGZlYXR1cmVzLm5wbUJ1aWxkKSB7XG4gICAgZW52LnZhcmlhYmxlcyA9IHtcbiAgICAgIENJOiAndHJ1ZScsXG4gICAgfTtcbiAgICBidWlsZENvbW1hbmRzLnB1c2goLi4ubnBtQnVpbGRDb21tYW5kcygpKTtcbiAgfVxuICBpZiAoZmVhdHVyZXMuYWRkaXRpb25hbEJ1aWxkQ29tbWFuZHMpIHtcbiAgICBidWlsZENvbW1hbmRzLnB1c2goJyMjIyBBRERJVElPTkFMIEJVSUxEIENPTU1BTkRTICMjIycsIC4uLmZlYXR1cmVzLmFkZGl0aW9uYWxCdWlsZENvbW1hbmRzKTtcbiAgfVxuXG4gIGJ1aWxkQ29tbWFuZHMucHVzaCguLi5pbmZyYXN0cnVjdHVyZUJ1aWxkQ29tbWFuZHMoKSk7XG5cbiAgcmV0dXJuIEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHtcbiAgICB2ZXJzaW9uOiAnMC4yJyxcbiAgICBlbnYsXG4gICAgcGhhc2VzOiB7XG4gICAgICBpbnN0YWxsOiB7XG4gICAgICAgICdydW50aW1lLXZlcnNpb25zJzogZ2V0UnVudGltZXMoZmVhdHVyZXMpLFxuICAgICAgfSxcbiAgICAgIHByZV9idWlsZDoge1xuICAgICAgICBjb21tYW5kczogbG9nQ29tbWl0SGFzaCgpLFxuICAgICAgfSxcbiAgICAgIGJ1aWxkOiB7XG4gICAgICAgIGNvbW1hbmRzOiBidWlsZENvbW1hbmRzLFxuICAgICAgfSxcbiAgICAgIHBvc3RfYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IGxvZ0NvbW1pdEhhc2goKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICByZXBvcnRzOiBjcmVhdGVSZXBvcnRzKGZlYXR1cmVzKSxcbiAgICBjYWNoZToge1xuICAgICAgcGF0aHM6IGNhY2hlUGF0aHMoKSxcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRTcGVjID0gKGZlYXR1cmVzOiBQaXBlbGluZUZlYXR1cmVzKSA9PiB7XG4gIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcbiAgY29uc3QgYnVpbGRDb21tYW5kczogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoZmVhdHVyZXMuZ3JhZGxlQnVpbGQpIHtcbiAgICBlbnYudmFyaWFibGVzID0ge1xuICAgICAgTEFORzogJ0MuVVRGLTgnLFxuICAgIH07XG4gICAgZW52WydwYXJhbWV0ZXItc3RvcmUnXSA9IHtcbiAgICAgIE5JU1RfREFUQV9NSVJST1JfVVJMOiAnL2NvbmZpZy9uaXN0LWRhdGEtbWlycm9yL3VybCcsXG4gICAgfTtcbiAgICBlbnZbJ3NlY3JldHMtbWFuYWdlciddID0ge1xuICAgICAgU09OQVRZUEVfT1NTX0lOREVYX1VTRVJOQU1FOlxuICAgICAgICAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjpldS13ZXN0LTE6NTc3MTQ2ODk3Nzg1OnNlY3JldDovcmlvL2NvbmZpZy9zb25hdHlwZS1vc3MtaW5kZXgvY3JlZGVudGlhbHM6dXNlcm5hbWUnLFxuICAgICAgU09OQVRZUEVfT1NTX0lOREVYX1BBU1NXT1JEOlxuICAgICAgICAnYXJuOmF3czpzZWNyZXRzbWFuYWdlcjpldS13ZXN0LTE6NTc3MTQ2ODk3Nzg1OnNlY3JldDovcmlvL2NvbmZpZy9zb25hdHlwZS1vc3MtaW5kZXgvY3JlZGVudGlhbHM6cGFzc3dvcmQnLFxuICAgIH07XG4gICAgYnVpbGRDb21tYW5kcy5wdXNoKFxuICAgICAgLi4uWycjIyMgR1JBRExFIFZVTE5FUkFCSUxJVFkgQ0hFQ0sgIyMjJywgJy4vZ3JhZGxldyAtRG9yZy5ncmFkbGUuanZtYXJncz0tWG14NGcgZGVwZW5kZW5jeUNoZWNrQW5hbHl6ZSddXG4gICAgKTtcbiAgfVxuICBpZiAoZmVhdHVyZXMubnBtQnVpbGQpIHtcbiAgICBidWlsZENvbW1hbmRzLnB1c2goXG4gICAgICAuLi5bXG4gICAgICAgICcjIyMgTlBNIFZVTE5FUkFCSUxJVFkgQ0hFQ0sgIyMjJyxcbiAgICAgICAgJ25wbSBhdWRpdCAtLXJlZ2lzdHJ5IGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnIC0tYXVkaXQtbGV2ZWwgbW9kZXJhdGUgLS1vbWl0PWRldicsXG4gICAgICBdXG4gICAgKTtcbiAgfVxuICBidWlsZENvbW1hbmRzLnB1c2goXG4gICAgLi4uW1xuICAgICAgJyMjIyBJTkZSQVNUUlVDVFVSRSBWVUxORVJBQklMSVRZIENIRUNLICMjIycsXG4gICAgICAnY2QgaW5mcmFzdHJ1Y3R1cmUnLFxuICAgICAgJ25wbSBhdWRpdCAtLXJlZ2lzdHJ5IGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnIC0tYXVkaXQtbGV2ZWwgbW9kZXJhdGUgLS1vbWl0PWRldicsXG4gICAgICAnY2QgLi4nLFxuICAgIF1cbiAgKTtcblxuICByZXR1cm4gQnVpbGRTcGVjLmZyb21PYmplY3Qoe1xuICAgIHZlcnNpb246ICcwLjInLFxuICAgIGVudixcbiAgICBwaGFzZXM6IHtcbiAgICAgIGluc3RhbGw6IHtcbiAgICAgICAgJ3J1bnRpbWUtdmVyc2lvbnMnOiBnZXRSdW50aW1lcyhmZWF0dXJlcyksXG4gICAgICB9LFxuICAgICAgcHJlX2J1aWxkOiB7XG4gICAgICAgIGNvbW1hbmRzOiBsb2dDb21taXRIYXNoKCksXG4gICAgICB9LFxuICAgICAgYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IGJ1aWxkQ29tbWFuZHMsXG4gICAgICB9LFxuICAgICAgcG9zdF9idWlsZDoge1xuICAgICAgICBjb21tYW5kczogbG9nQ29tbWl0SGFzaCgpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNhY2hlOiB7XG4gICAgICBwYXRoczogY2FjaGVQYXRoc1Z1bG5lcmFiaWxpdHkoKSxcbiAgICB9LFxuICB9KTtcbn07XG5cbmNvbnN0IGdldFJ1bnRpbWVzID0gKGZlYXR1cmVzOiBQaXBlbGluZUZlYXR1cmVzKSA9PiB7XG4gIGNvbnN0IHJ1bnRpbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGlmIChmZWF0dXJlcy5ncmFkbGVCdWlsZCkge1xuICAgIHJ1bnRpbWVzLmphdmEgPSAnY29ycmV0dG8yMSc7XG4gIH1cbiAgcnVudGltZXMubm9kZWpzID0gJzI0JztcbiAgcmV0dXJuIHJ1bnRpbWVzO1xufTtcblxuZXhwb3J0IGNvbnN0IGxvZ0NvbW1pdEhhc2ggPSAoKSA9PiBbXG4gICcoZWNobyBcIkJ1aWxkIHRyaWdnZXJlZCBieSBjb21taXQgXCIgJiYgZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6XCIlaCV4MDklYW4leDA5JXNcIiAtbiAxICkgfCB0ciAtZCBcIlxcXFxuXCInLFxuXTtcblxuZXhwb3J0IGNvbnN0IGV4cG9ydENvbW1pdEhhc2hBc1ZlcnNpb24gPSAoKSA9PiBbJ2V4cG9ydCBHSVRfVkVSU0lPTj0kKGdpdCByZXYtcGFyc2UgSEVBRCknXTtcblxuY29uc3QgaW5mcmFzdHJ1Y3R1cmVCdWlsZENvbW1hbmRzID0gKCkgPT4gW1xuICAnIyMjIElORlJBU1RSVUNUVVJFIEJVSUxEICMjIycsXG4gICdjZCBpbmZyYXN0cnVjdHVyZScsXG4gICducG0gY2knLFxuICBgJHtMSUNFTlNFX0NIRUNLX0NPTU1BTkR9IC0tdHlwZSBucG0tYmFja2VuZCAtLWFjY291bnQtbmFtZSBcXCR7QUNDT1VOVF9OQU1FfSAtLXNlcnZpY2UtbmFtZSBcXCR7U0VSVklDRV9OQU1FfSAtLXVwbG9hZGAsXG4gICducG0gcnVuIGNkayBzeW50aCAxPiAvZGV2L251bGwnLFxuICAvLyBJbiBwaXBlbGluZTogRXJyb3IgcGFyc2luZyByZWZlcmVuY2U6IGlzIG5vdCBhIHZhbGlkIHJlcG9zaXRvcnkvdGFnOiBpbnZhbGlkIHJlZmVyZW5jZSBmb3JtYXQuXG4gIC8vIHdvcmthcm91bmQgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTgwNDQnLFxuICAnZmluZCAuLyAtdHlwZSBmIC1uYW1lIFwiKkRlcGxveUFwcGxpY2F0aW9uU3RhY2tzKi5hc3NldHMuanNvblwiIC1wcmludDAgfCB4YXJncyAtLW5vLXJ1bi1pZi1lbXB0eSAtMCBzZWQgLS1pbi1wbGFjZSBcXCdzfGRvY2tlciBsb2FkIC1pIGFzc2V0Lnxkb2NrZXIgbG9hZCAtaSAuLi9hc3NldC58Z1xcJycsXG4gICdjZCAuLicsXG5dO1xuXG5jb25zdCBncmFkbGVCdWlsZENvbW1hbmRzID0gKGthZmthSW50ZWdyYXRpb246IGJvb2xlYW4pID0+IHtcbiAgY29uc3QgY29tbWFuZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbW1hbmRzLnB1c2goXG4gICAgLi4uW1xuICAgICAgJyMjIyBHUkFETEUgQlVJTEQgIyMjJyxcbiAgICAgICcuL2dyYWRsZXcgY2xlYW4gYnVpbGQnLFxuICAgICAgJyMgbGljZW5zZSBjaGVjaycsXG4gICAgICBgJHtMSUNFTlNFX0NIRUNLX0NPTU1BTkR9IC0tdHlwZSBncmFkbGUgLS1hY2NvdW50LW5hbWUgXFwke0FDQ09VTlRfTkFNRX0gLS1zZXJ2aWNlLW5hbWUgXFwke1NFUlZJQ0VfTkFNRX0gLS11cGxvYWRgLFxuICAgICAgJyMgc2VsZiBzaWduZWQgY2VydGlmaWNhdGUnLFxuICAgICAgJ3NldCAtdTsga2V5dG9vbCAtZ2Vua2V5IC1hbGlhcyBJbnRlcm5hbFNlcnZpY2VDZXJ0aWZpY2F0ZSAta2V5YWxnIFJTQSAta2V5c3RvcmUgY29udGFpbmVyZmlsZXMvc2VydmljZS1rZXlzdG9yZS5wMTIgLXZhbGlkaXR5IDM2NTAgLXN0b3JldHlwZSBQS0NTMTIgLWRuYW1lIFwiQ049aW50ZXJuYWwuc2VydmljZS4ke1NFUlZJQ0VfTkFNRX0uJHtIT1NURURfWk9ORX0sIE9VPUxvZ2lzdGljcywgTz1SaW8sIEw9TXVuaWNoLCBTVD1CWSwgQz1ERVwiIC1rZXlwYXNzICR7U0VSVklDRV9LRVlTVE9SRV9QQVNTV09SRH0gLXN0b3JlcGFzcyAke1NFUlZJQ0VfS0VZU1RPUkVfUEFTU1dPUkR9JyxcbiAgICBdXG4gICk7XG4gIGlmIChrYWZrYUludGVncmF0aW9uKSB7XG4gICAgY29tbWFuZHMucHVzaChcbiAgICAgIC4uLltcbiAgICAgICAgJyMga2Fma2EgY2VydGlmaWNhdGUnLFxuICAgICAgICAnc2V0IC11OyBhd3MgczMgY3AgLS1xdWlldCBzMzovLyR7Q1JFQVRFX0FORF9TSUdOX0NFUlRJRklDQVRFX1NDUklQVF9TM19MT0NBVElPTn0gY3JlYXRlLWFuZC1zaWduLWNlcnRpZmljYXRlJyxcbiAgICAgICAgJ2NobW9kICt4IGNyZWF0ZS1hbmQtc2lnbi1jZXJ0aWZpY2F0ZScsXG4gICAgICAgICdzZXQgLXU7IC4vY3JlYXRlLWFuZC1zaWduLWNlcnRpZmljYXRlIC0ta2V5c3RvcmUtcGFzc3dvcmQgJHtTRVJWSUNFX0tFWVNUT1JFX1BBU1NXT1JEfSAtLWZxZG4gJHtTRVJWSUNFX05BTUV9LiR7SE9TVEVEX1pPTkV9JyxcbiAgICAgICAgJ2NwIC9jZXJ0L2NlcnRpZmljYXRlLnAxMiBjb250YWluZXJmaWxlcy9rYWZrYS1rZXlzdG9yZS5wMTInLFxuICAgICAgXVxuICAgICk7XG4gIH1cbiAgY29tbWFuZHMucHVzaCguLi5bJyMgZG9ja2VyIGltYWdlIGJ1aWxkJywgJy4vZ3JhZGxldyBqaWJCdWlsZFRhciAtLXF1aWV0J10pO1xuICByZXR1cm4gY29tbWFuZHM7XG59O1xuXG5jb25zdCBucG1CdWlsZENvbW1hbmRzID0gKCkgPT4gW1xuICAnIyMjIE5QTSBCVUlMRCAjIyMnLFxuICAnZXhwb3J0IFZJVEVfR0lUX1ZFUlNJT049JEdJVF9WRVJTSU9OJyxcbiAgJ2V4cG9ydCBWSVRFX0FXU19BQ0NPVU5UX0lEPSRBV1NfQUNDT1VOVF9JRCcsXG4gICdleHBvcnQgVklURV9BV1NfQUNDT1VOVF9OQU1FPSRBQ0NPVU5UX05BTUUnLFxuICAnZXhwb3J0IFZJVEVfU0VSVklDRV9OQU1FPSRTRVJWSUNFX05BTUUnLFxuICAnZXhwb3J0IFZJVEVfVEVBTV9JREVOVElGSUVSPSRURUFNX0lERU5USUZJRVInLFxuICAnbnBtIGNpJyxcbiAgJ25wbSBydW4gbGludCcsXG4gICducG0gcnVuIHRlc3Q6Y2knLFxuICBgJHtMSUNFTlNFX0NIRUNLX0NPTU1BTkR9IC0tdHlwZSBucG0tZnJvbnRlbmQgLS1hY2NvdW50LW5hbWUgXFwke0FDQ09VTlRfTkFNRX0gLS1zZXJ2aWNlLW5hbWUgXFwke1NFUlZJQ0VfTkFNRX0gLS11cGxvYWRgLFxuICAnbnBtIHJ1biBidWlsZCcsXG5dO1xuXG5jb25zdCBjYWNoZVBhdGhzID0gKCkgPT4gW1xuICAnL2NlcnQvKiovKicsXG4gICcvcm9vdC8uY2FjaGUvKiovKicsXG4gICcvcm9vdC8ubnBtLyoqLyonLFxuICAnL3Jvb3QvLmdyYWRsZS9jYWNoZXMvKiovKicsXG4gICcvcm9vdC8uZ3JhZGxlL3dyYXBwZXIvKiovKicsXG4gICcvcm9vdC9nb29nbGUtY2xvdWQtdG9vbHMtamF2YS9qaWIvKiovKicsXG4gICd0YXJnZXQvamliLWNhY2hlLyoqLyonLFxuXTtcblxuY29uc3QgY2FjaGVQYXRoc1Z1bG5lcmFiaWxpdHkgPSAoKSA9PiBbXG4gICcvcm9vdC8uY2FjaGUvKiovKicsXG4gICcvcm9vdC8uZ3JhZGxlL2NhY2hlcy8qKi8qJyxcbiAgJy9yb290Ly5ncmFkbGUvd3JhcHBlci8qKi8qJyxcbiAgJy9yb290Ly5ncmFkbGUvZGVwZW5kZW5jeS1jaGVjay1kYXRhLyoqLyonLFxuXTtcblxuY29uc3QgY3JlYXRlUmVwb3J0cyA9IChmZWF0dXJlczogUGlwZWxpbmVGZWF0dXJlcykgPT4ge1xuICBjb25zdCByZXBvcnRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIGlmIChmZWF0dXJlcy5ncmFkbGVCdWlsZCkge1xuICAgIHJlcG9ydHMuR3JhZGxlQnVpbGRUZXN0UmVzdWx0cyA9IHtcbiAgICAgIGZpbGVzOiBbJyoqLyonXSxcbiAgICAgICdiYXNlLWRpcmVjdG9yeSc6ICdidWlsZC90ZXN0LXJlc3VsdHMnLFxuICAgIH07XG4gIH1cbiAgaWYgKGZlYXR1cmVzLm5wbUJ1aWxkKSB7XG4gICAgcmVwb3J0cy5OcG1CdWlsZFRlc3RSZXN1bHRzID0ge1xuICAgICAgZmlsZXM6IFsnKiovKiddLFxuICAgICAgJ2Jhc2UtZGlyZWN0b3J5JzogJ3Jlc3VsdHMnLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlcG9ydHM7XG59O1xuIl19
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRzcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9waXBlbGluZS9idWlsZHNwZWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUFzRDtBQUd0RCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQztBQUNsQyxNQUFNLGFBQWEsR0FBRyxrREFBa0QsQ0FBQztBQUVsRSxNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBMEIsRUFBRSxPQUEwQixFQUFhLEVBQUU7SUFDdkcsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsTUFBTSxHQUFHLEdBQTJDLEVBQUUsQ0FBQztJQUN2RCxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7SUFDbkMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUEsaUNBQXlCLEdBQUUsQ0FBQyxDQUFDO0lBRW5ELEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO1FBQ3ZCLFlBQVksRUFBRSxzQkFBc0I7UUFDcEMsZUFBZSxFQUFFLHlCQUF5QjtLQUMzQyxDQUFDO0lBRUYsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9FLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO1lBQ3ZCLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakMseUJBQXlCLEVBQUUsbURBQW1EO1lBQzlFLG1CQUFtQixFQUFFLGtDQUFrQztTQUN4RCxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUIsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEdB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QUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixPQUFPLENBQUMsc0JBQXNCLEdBQUc7WUFDL0IsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2YsZ0JBQWdCLEVBQUUsb0JBQW9CO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLG1CQUFtQixHQUFHO1lBQzVCLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNmLGdCQUFnQixFQUFFLFNBQVM7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWlsZFNwZWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWJ1aWxkJztcbmltcG9ydCB7IENvZGVCdWlsZE9wdGlvbnMsIFBpcGVsaW5lRmVhdHVyZXMgfSBmcm9tICcuL3BpcGVsaW5lLXN0YWNrJztcblxuY29uc3QgREVGQVVMVF9OT0RFX1ZFUlNJT04gPSAnMjQnO1xuY29uc3QgRVhBQ1RfVkVSU0lPTiA9IC9eKD86MHxbMS05XVxcZCopXFwuKD86MHxbMS05XVxcZCopXFwuKD86MHxbMS05XVxcZCopJC87XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYWluQnVpbGRTcGVjID0gKGZlYXR1cmVzOiBQaXBlbGluZUZlYXR1cmVzLCBvcHRpb25zPzogQ29kZUJ1aWxkT3B0aW9ucyk6IEJ1aWxkU3BlYyA9PiB7XG4gIGNvbnN0IHJ1bnRpbWUgPSBnZXRSdW50aW1lT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xuICBjb25zdCBidWlsZENvbW1hbmRzOiBzdHJpbmdbXSA9IFtdO1xuICBidWlsZENvbW1hbmRzLnB1c2goLi4uZXhwb3J0Q29tbWl0SGFzaEFzVmVyc2lvbigpKTtcblxuICBlbnZbJ3BhcmFtZXRlci1zdG9yZSddID0ge1xuICAgIEFDQ09VTlRfTkFNRTogJy9jb25maWcvYWNjb3VudC9uYW1lJyxcbiAgICBURUFNX0lERU5USUZJRVI6ICcvY29uZmlnL3RlYW0vaWRlbnRpZmllcicsXG4gIH07XG5cbiAgaWYgKGZlYXR1cmVzLmdyYWRsZUJ1aWxkKSB7XG4gICAgYnVpbGRDb21tYW5kcy5wdXNoKC4uLmdyYWRsZUJ1aWxkQ29tbWFuZHMoZmVhdHVyZXMua2Fma2FJbnRlZ3JhdGlvbiA/PyBmYWxzZSkpO1xuICAgIGVudlsncGFyYW1ldGVyLXN0b3JlJ10gPSB7XG4gICAgICAuLi4oZW52WydwYXJhbWV0ZXItc3RvcmUnXSA/PyB7fSksXG4gICAgICBTRVJWSUNFX0tFWVNUT1JFX1BBU1NXT1JEOiAnL2NvbmZpZy8ke1NFUlZJQ0VfTkFNRX0vc2VydmljZS1rZXlzdG9yZS1wYXNzd29yZCcsXG4gICAgICBMSUNFTlNFX0JVQ0tFVF9OQU1FOiAnL2NvbmZpZy9vc3MtbGljZW5zZXMvYnVja2V0LW5hbWUnLFxuICAgIH07XG4gIH1cbiAgaWYgKGZlYXR1cmVzLmthZmthSW50ZWdyYXRpb24pIHtcbiAgICBlbnZbJ3BhcmFtZXRlci1zdG9yZSddID0ge1xuICAgICAgLi4uKGVudlsncGFyYW1ldGVyLXN0b3JlJ10gPz8ge30pLFxuICAgICAgQ1JFQVRFX0FORF9TSUdOX0NFUlRJRklDQVRFX1NDUklQVF9TM19MT0NBVElPTjpcbiAgICAgICAgJy9jb25maWcva2Fma2EtaW50ZWdyYXRpb24vY3JlYXRlLWFuZC1zaWduLWNlcnRpZmljYXRlLXNjcmlwdC1zMy1sb2NhdGlvbicsXG4gICAgfTtcbiAgfVxuICBpZiAoZmVhdHVyZXMubnBtQnVpbGQpIHtcbiAgICBlbnYudmFyaWFibGVzID0ge1xuICAgICAgQ0k6ICd0cnVlJyxcbiAgICB9O1xuICAgIGJ1aWxkQ29tbWFuZHMucHVzaCguLi5ucG1CdWlsZENvbW1hbmRzKCkpO1xuICB9XG4gIGlmIChmZWF0dXJlcy5hZGRpdGlvbmFsQnVpbGRDb21tYW5kcykge1xuICAgIGJ1aWxkQ29tbWFuZHMucHVzaCgnIyMjIEFERElUSU9OQUwgQlVJTEQgQ09NTUFORFMgIyMjJywgLi4uZmVhdHVyZXMuYWRkaXRpb25hbEJ1aWxkQ29tbWFuZHMpO1xuICB9XG5cbiAgYnVpbGRDb21tYW5kcy5wdXNoKC4uLmluZnJhc3RydWN0dXJlQnVpbGRDb21tYW5kcygpKTtcblxuICByZXR1cm4gQnVpbGRTcGVjLmZyb21PYmplY3Qoe1xuICAgIHZlcnNpb246ICcwLjInLFxuICAgIGVudixcbiAgICBwaGFzZXM6IHtcbiAgICAgIGluc3RhbGw6IHtcbiAgICAgICAgJ3J1bnRpbWUtdmVyc2lvbnMnOiBnZXRSdW50aW1lcyhmZWF0dXJlcywgcnVudGltZS5ub2RlanNWZXJzaW9uKSxcbiAgICAgICAgLi4uKHJ1bnRpbWUuY29tbWFuZHMubGVuZ3RoID4gMCA/IHsgY29tbWFuZHM6IHJ1bnRpbWUuY29tbWFuZHMgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgICBwcmVfYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IGxvZ0NvbW1pdEhhc2goKSxcbiAgICAgIH0sXG4gICAgICBidWlsZDoge1xuICAgICAgICBjb21tYW5kczogYnVpbGRDb21tYW5kcyxcbiAgICAgIH0sXG4gICAgICBwb3N0X2J1aWxkOiB7XG4gICAgICAgIGNvbW1hbmRzOiBsb2dDb21taXRIYXNoKCksXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVwb3J0czogY3JlYXRlUmVwb3J0cyhmZWF0dXJlcyksXG4gICAgY2FjaGU6IHtcbiAgICAgIHBhdGhzOiBjYWNoZVBhdGhzKCksXG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVnVsbmVyYWJpbGl0eUJ1aWxkU3BlYyA9IChmZWF0dXJlczogUGlwZWxpbmVGZWF0dXJlcywgb3B0aW9ucz86IENvZGVCdWlsZE9wdGlvbnMpID0+IHtcbiAgY29uc3QgcnVudGltZSA9IGdldFJ1bnRpbWVPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBlbnY6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge307XG4gIGNvbnN0IGJ1aWxkQ29tbWFuZHM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGZlYXR1cmVzLmdyYWRsZUJ1aWxkKSB7XG4gICAgZW52LnZhcmlhYmxlcyA9IHtcbiAgICAgIExBTkc6ICdDLlVURi04JyxcbiAgICB9O1xuICAgIGVudlsncGFyYW1ldGVyLXN0b3JlJ10gPSB7XG4gICAgICBOSVNUX0RBVEFfTUlSUk9SX1VSTDogJy9jb25maWcvbmlzdC1kYXRhLW1pcnJvci91cmwnLFxuICAgIH07XG4gICAgZW52WydzZWNyZXRzLW1hbmFnZXInXSA9IHtcbiAgICAgIFNPTkFUWVBFX09TU19JTkRFWF9VU0VSTkFNRTpcbiAgICAgICAgJ2Fybjphd3M6c2VjcmV0c21hbmFnZXI6ZXUtd2VzdC0xOjU3NzE0Njg5Nzc4NTpzZWNyZXQ6L3Jpby9jb25maWcvc29uYXR5cGUtb3NzLWluZGV4L2NyZWRlbnRpYWxzOnVzZXJuYW1lJyxcbiAgICAgIFNPTkFUWVBFX09TU19JTkRFWF9QQVNTV09SRDpcbiAgICAgICAgJ2Fybjphd3M6c2VjcmV0c21hbmFnZXI6ZXUtd2VzdC0xOjU3NzE0Njg5Nzc4NTpzZWNyZXQ6L3Jpby9jb25maWcvc29uYXR5cGUtb3NzLWluZGV4L2NyZWRlbnRpYWxzOnBhc3N3b3JkJyxcbiAgICB9O1xuICAgIGJ1aWxkQ29tbWFuZHMucHVzaChcbiAgICAgIC4uLlsnIyMjIEdSQURMRSBWVUxORVJBQklMSVRZIENIRUNLICMjIycsICcuL2dyYWRsZXcgLURvcmcuZ3JhZGxlLmp2bWFyZ3M9LVhteDRnIGRlcGVuZGVuY3lDaGVja0FuYWx5emUnXVxuICAgICk7XG4gIH1cbiAgaWYgKGZlYXR1cmVzLm5wbUJ1aWxkKSB7XG4gICAgYnVpbGRDb21tYW5kcy5wdXNoKFxuICAgICAgLi4uW1xuICAgICAgICAnIyMjIE5QTSBWVUxORVJBQklMSVRZIENIRUNLICMjIycsXG4gICAgICAgICducG0gYXVkaXQgLS1yZWdpc3RyeSBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZyAtLWF1ZGl0LWxldmVsIG1vZGVyYXRlIC0tb21pdD1kZXYnLFxuICAgICAgXVxuICAgICk7XG4gIH1cbiAgYnVpbGRDb21tYW5kcy5wdXNoKFxuICAgIC4uLltcbiAgICAgICcjIyMgSU5GUkFTVFJVQ1RVUkUgVlVMTkVSQUJJTElUWSBDSEVDSyAjIyMnLFxuICAgICAgJ2NkIGluZnJhc3RydWN0dXJlJyxcbiAgICAgICducG0gYXVkaXQgLS1yZWdpc3RyeSBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZyAtLWF1ZGl0LWxldmVsIG1vZGVyYXRlIC0tb21pdD1kZXYnLFxuICAgICAgJ2NkIC4uJyxcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIEJ1aWxkU3BlYy5mcm9tT2JqZWN0KHtcbiAgICB2ZXJzaW9uOiAnMC4yJyxcbiAgICBlbnYsXG4gICAgcGhhc2VzOiB7XG4gICAgICBpbnN0YWxsOiB7XG4gICAgICAgICdydW50aW1lLXZlcnNpb25zJzogZ2V0UnVudGltZXMoZmVhdHVyZXMsIHJ1bnRpbWUubm9kZWpzVmVyc2lvbiksXG4gICAgICAgIC4uLihydW50aW1lLmNvbW1hbmRzLmxlbmd0aCA+IDAgPyB7IGNvbW1hbmRzOiBydW50aW1lLmNvbW1hbmRzIH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgcHJlX2J1aWxkOiB7XG4gICAgICAgIGNvbW1hbmRzOiBsb2dDb21taXRIYXNoKCksXG4gICAgICB9LFxuICAgICAgYnVpbGQ6IHtcbiAgICAgICAgY29tbWFuZHM6IGJ1aWxkQ29tbWFuZHMsXG4gICAgICB9LFxuICAgICAgcG9zdF9idWlsZDoge1xuICAgICAgICBjb21tYW5kczogbG9nQ29tbWl0SGFzaCgpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGNhY2hlOiB7XG4gICAgICBwYXRoczogY2FjaGVQYXRoc1Z1bG5lcmFiaWxpdHkoKSxcbiAgICB9LFxuICB9KTtcbn07XG5cbmNvbnN0IGdldFJ1bnRpbWVzID0gKGZlYXR1cmVzOiBQaXBlbGluZUZlYXR1cmVzLCBub2RlanNWZXJzaW9uOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcnVudGltZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKGZlYXR1cmVzLmdyYWRsZUJ1aWxkKSB7XG4gICAgcnVudGltZXMuamF2YSA9ICdjb3JyZXR0bzIxJztcbiAgfVxuICBydW50aW1lcy5ub2RlanMgPSBub2RlanNWZXJzaW9uO1xuICByZXR1cm4gcnVudGltZXM7XG59O1xuXG5jb25zdCBnZXRSdW50aW1lT3B0aW9ucyA9IChvcHRpb25zPzogQ29kZUJ1aWxkT3B0aW9ucykgPT4ge1xuICBjb25zdCBjb21tYW5kczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKG9wdGlvbnM/Lm5vZGVqc1ZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIGFzc2VydEV4YWN0VmVyc2lvbignbm9kZWpzVmVyc2lvbicsIG9wdGlvbnMubm9kZWpzVmVyc2lvbik7XG4gICAgY29tbWFuZHMucHVzaChgdGVzdCBcIiQobm9kZSAtLXZlcnNpb24pXCIgPSBcInYke29wdGlvbnMubm9kZWpzVmVyc2lvbn1cImApO1xuICB9XG4gIGlmIChvcHRpb25zPy5ucG1WZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBhc3NlcnRFeGFjdFZlcnNpb24oJ25wbVZlcnNpb24nLCBvcHRpb25zLm5wbVZlcnNpb24pO1xuICAgIGNvbW1hbmRzLnB1c2goYHRlc3QgXCIkKG5wbSAtLXZlcnNpb24pXCIgPSBcIiR7b3B0aW9ucy5ucG1WZXJzaW9ufVwiYCk7XG4gIH1cbiAgcmV0dXJuIHsgbm9kZWpzVmVyc2lvbjogb3B0aW9ucz8ubm9kZWpzVmVyc2lvbiA/PyBERUZBVUxUX05PREVfVkVSU0lPTiwgY29tbWFuZHMgfTtcbn07XG5cbmNvbnN0IGFzc2VydEV4YWN0VmVyc2lvbiA9IChuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZykgPT4ge1xuICBpZiAodmVyc2lvbi5tYXRjaChFWEFDVF9WRVJTSU9OKT8uWzBdICE9PSB2ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9IG11c3QgYmUgYW4gZXhhY3QgbWFqb3IubWlub3IucGF0Y2ggdmVyc2lvbmApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbG9nQ29tbWl0SGFzaCA9ICgpID0+IFtcbiAgJyhlY2hvIFwiQnVpbGQgdHJpZ2dlcmVkIGJ5IGNvbW1pdCBcIiAmJiBnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDpcIiVoJXgwOSVhbiV4MDklc1wiIC1uIDEgKSB8IHRyIC1kIFwiXFxcXG5cIicsXG5dO1xuXG5leHBvcnQgY29uc3QgZXhwb3J0Q29tbWl0SGFzaEFzVmVyc2lvbiA9ICgpID0+IFsnZXhwb3J0IEdJVF9WRVJTSU9OPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSddO1xuXG5jb25zdCBpbmZyYXN0cnVjdHVyZUJ1aWxkQ29tbWFuZHMgPSAoKSA9PiBbXG4gICcjIyMgSU5GUkFTVFJVQ1RVUkUgQlVJTEQgIyMjJyxcbiAgJ2NkIGluZnJhc3RydWN0dXJlJyxcbiAgJ25wbSBjaScsXG4gIGBucHggcmlvLWxpY2Vuc2UtY2hlY2tlciAtLXR5cGUgbnBtLWJhY2tlbmQgLS1hY2NvdW50LW5hbWUgXFwke0FDQ09VTlRfTkFNRX0gLS1zZXJ2aWNlLW5hbWUgXFwke1NFUlZJQ0VfTkFNRX0gLS11cGxvYWRgLFxuICAnbnBtIHJ1biBjZGsgc3ludGggMT4gL2Rldi9udWxsJyxcbiAgLy8gSW4gcGlwZWxpbmU6IEVycm9yIHBhcnNpbmcgcmVmZXJlbmNlOiBpcyBub3QgYSB2YWxpZCByZXBvc2l0b3J5L3RhZzogaW52YWxpZCByZWZlcmVuY2UgZm9ybWF0LlxuICAvLyB3b3JrYXJvdW5kIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE4MDQ0JyxcbiAgJ2ZpbmQgLi8gLXR5cGUgZiAtbmFtZSBcIipEZXBsb3lBcHBsaWNhdGlvblN0YWNrcyouYXNzZXRzLmpzb25cIiAtcHJpbnQwIHwgeGFyZ3MgLS1uby1ydW4taWYtZW1wdHkgLTAgc2VkIC0taW4tcGxhY2UgXFwnc3xkb2NrZXIgbG9hZCAtaSBhc3NldC58ZG9ja2VyIGxvYWQgLWkgLi4vYXNzZXQufGdcXCcnLFxuICAnY2QgLi4nLFxuXTtcblxuY29uc3QgZ3JhZGxlQnVpbGRDb21tYW5kcyA9IChrYWZrYUludGVncmF0aW9uOiBib29sZWFuKSA9PiB7XG4gIGNvbnN0IGNvbW1hbmRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb21tYW5kcy5wdXNoKFxuICAgIC4uLltcbiAgICAgICcjIyMgR1JBRExFIEJVSUxEICMjIycsXG4gICAgICAnLi9ncmFkbGV3IGNsZWFuIGJ1aWxkJyxcbiAgICAgICcjIGxpY2Vuc2UgY2hlY2snLFxuICAgICAgJ25wbSBjaScsXG4gICAgICBgbnB4IHJpby1saWNlbnNlLWNoZWNrZXIgLS10eXBlIGdyYWRsZSAtLWFjY291bnQtbmFtZSBcXCR7QUNDT1VOVF9OQU1FfSAtLXNlcnZpY2UtbmFtZSBcXCR7U0VSVklDRV9OQU1FfSAtLXVwbG9hZGAsXG4gICAgICAnIyBzZWxmIHNpZ25lZCBjZXJ0aWZpY2F0ZScsXG4gICAgICAnc2V0IC11OyBrZXl0b29sIC1nZW5rZXkgLWFsaWFzIEludGVybmFsU2VydmljZUNlcnRpZmljYXRlIC1rZXlhbGcgUlNBIC1rZXlzdG9yZSBjb250YWluZXJmaWxlcy9zZXJ2aWNlLWtleXN0b3JlLnAxMiAtdmFsaWRpdHkgMzY1MCAtc3RvcmV0eXBlIFBLQ1MxMiAtZG5hbWUgXCJDTj1pbnRlcm5hbC5zZXJ2aWNlLiR7U0VSVklDRV9OQU1FfS4ke0hPU1RFRF9aT05FfSwgT1U9TG9naXN0aWNzLCBPPVJpbywgTD1NdW5pY2gsIFNUPUJZLCBDPURFXCIgLWtleXBhc3MgJHtTRVJWSUNFX0tFWVNUT1JFX1BBU1NXT1JEfSAtc3RvcmVwYXNzICR7U0VSVklDRV9LRVlTVE9SRV9QQVNTV09SRH0nLFxuICAgIF1cbiAgKTtcbiAgaWYgKGthZmthSW50ZWdyYXRpb24pIHtcbiAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgLi4uW1xuICAgICAgICAnIyBrYWZrYSBjZXJ0aWZpY2F0ZScsXG4gICAgICAgICdzZXQgLXU7IGF3cyBzMyBjcCAtLXF1aWV0IHMzOi8vJHtDUkVBVEVfQU5EX1NJR05fQ0VSVElGSUNBVEVfU0NSSVBUX1MzX0xPQ0FUSU9OfSBjcmVhdGUtYW5kLXNpZ24tY2VydGlmaWNhdGUnLFxuICAgICAgICAnY2htb2QgK3ggY3JlYXRlLWFuZC1zaWduLWNlcnRpZmljYXRlJyxcbiAgICAgICAgJ3NldCAtdTsgLi9jcmVhdGUtYW5kLXNpZ24tY2VydGlmaWNhdGUgLS1rZXlzdG9yZS1wYXNzd29yZCAke1NFUlZJQ0VfS0VZU1RPUkVfUEFTU1dPUkR9IC0tZnFkbiAke1NFUlZJQ0VfTkFNRX0uJHtIT1NURURfWk9ORX0nLFxuICAgICAgICAnY3AgL2NlcnQvY2VydGlmaWNhdGUucDEyIGNvbnRhaW5lcmZpbGVzL2thZmthLWtleXN0b3JlLnAxMicsXG4gICAgICBdXG4gICAgKTtcbiAgfVxuICBjb21tYW5kcy5wdXNoKC4uLlsnIyBkb2NrZXIgaW1hZ2UgYnVpbGQnLCAnLi9ncmFkbGV3IGppYkJ1aWxkVGFyIC0tcXVpZXQnXSk7XG4gIHJldHVybiBjb21tYW5kcztcbn07XG5cbmNvbnN0IG5wbUJ1aWxkQ29tbWFuZHMgPSAoKSA9PiBbXG4gICcjIyMgTlBNIEJVSUxEICMjIycsXG4gICdleHBvcnQgVklURV9HSVRfVkVSU0lPTj0kR0lUX1ZFUlNJT04nLFxuICAnZXhwb3J0IFZJVEVfQVdTX0FDQ09VTlRfSUQ9JEFXU19BQ0NPVU5UX0lEJyxcbiAgJ2V4cG9ydCBWSVRFX0FXU19BQ0NPVU5UX05BTUU9JEFDQ09VTlRfTkFNRScsXG4gICdleHBvcnQgVklURV9TRVJWSUNFX05BTUU9JFNFUlZJQ0VfTkFNRScsXG4gICdleHBvcnQgVklURV9URUFNX0lERU5USUZJRVI9JFRFQU1fSURFTlRJRklFUicsXG4gICducG0gY2knLFxuICAnbnBtIHJ1biBsaW50JyxcbiAgJ25wbSBydW4gdGVzdDpjaScsXG4gIGBucHggcmlvLWxpY2Vuc2UtY2hlY2tlciAtLXR5cGUgbnBtLWZyb250ZW5kIC0tYWNjb3VudC1uYW1lIFxcJHtBQ0NPVU5UX05BTUV9IC0tc2VydmljZS1uYW1lIFxcJHtTRVJWSUNFX05BTUV9IC0tdXBsb2FkYCxcbiAgJ25wbSBydW4gYnVpbGQnLFxuXTtcblxuY29uc3QgY2FjaGVQYXRocyA9ICgpID0+IFtcbiAgJy9jZXJ0LyoqLyonLFxuICAnL3Jvb3QvLmNhY2hlLyoqLyonLFxuICAnL3Jvb3QvLm5wbS8qKi8qJyxcbiAgJy9yb290Ly5ncmFkbGUvY2FjaGVzLyoqLyonLFxuICAnL3Jvb3QvLmdyYWRsZS93cmFwcGVyLyoqLyonLFxuICAnL3Jvb3QvZ29vZ2xlLWNsb3VkLXRvb2xzLWphdmEvamliLyoqLyonLFxuICAndGFyZ2V0L2ppYi1jYWNoZS8qKi8qJyxcbl07XG5cbmNvbnN0IGNhY2hlUGF0aHNWdWxuZXJhYmlsaXR5ID0gKCkgPT4gW1xuICAnL3Jvb3QvLmNhY2hlLyoqLyonLFxuICAnL3Jvb3QvLmdyYWRsZS9jYWNoZXMvKiovKicsXG4gICcvcm9vdC8uZ3JhZGxlL3dyYXBwZXIvKiovKicsXG4gICcvcm9vdC8uZ3JhZGxlL2RlcGVuZGVuY3ktY2hlY2stZGF0YS8qKi8qJyxcbl07XG5cbmNvbnN0IGNyZWF0ZVJlcG9ydHMgPSAoZmVhdHVyZXM6IFBpcGVsaW5lRmVhdHVyZXMpID0+IHtcbiAgY29uc3QgcmVwb3J0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBpZiAoZmVhdHVyZXMuZ3JhZGxlQnVpbGQpIHtcbiAgICByZXBvcnRzLkdyYWRsZUJ1aWxkVGVzdFJlc3VsdHMgPSB7XG4gICAgICBmaWxlczogWycqKi8qJ10sXG4gICAgICAnYmFzZS1kaXJlY3RvcnknOiAnYnVpbGQvdGVzdC1yZXN1bHRzJyxcbiAgICB9O1xuICB9XG4gIGlmIChmZWF0dXJlcy5ucG1CdWlsZCkge1xuICAgIHJlcG9ydHMuTnBtQnVpbGRUZXN0UmVzdWx0cyA9IHtcbiAgICAgIGZpbGVzOiBbJyoqLyonXSxcbiAgICAgICdiYXNlLWRpcmVjdG9yeSc6ICdyZXN1bHRzJyxcbiAgICB9O1xuICB9XG4gIHJldHVybiByZXBvcnRzO1xufTtcbiJdfQ==
|
|
@@ -231,6 +231,8 @@ export interface CodeBuildOptions {
|
|
|
231
231
|
readonly partialBuildSpecPath?: string;
|
|
232
232
|
readonly vulnerabilityPartialBuildSpecPath?: string;
|
|
233
233
|
readonly buildEnvironment?: BuildEnvironment;
|
|
234
|
+
readonly nodejsVersion?: string;
|
|
235
|
+
readonly npmVersion?: string;
|
|
234
236
|
}
|
|
235
237
|
export declare class PipelineStack extends Stack {
|
|
236
238
|
private readonly _features;
|
|
@@ -112,7 +112,7 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
|
|
|
112
112
|
product: index_1.ClaidometerProduct.CDK_CONTRIBUTION,
|
|
113
113
|
packageName,
|
|
114
114
|
feature,
|
|
115
|
-
version: '1.
|
|
115
|
+
version: '1.6.0',
|
|
116
116
|
});
|
|
117
117
|
}
|
|
118
118
|
get mainCodebuildProject() {
|
|
@@ -200,16 +200,18 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
|
|
|
200
200
|
});
|
|
201
201
|
}
|
|
202
202
|
createMainCodeBuildProject(props) {
|
|
203
|
-
const buildSpec = this.loadBuildSpecFromFile(props?.codeBuildOptions?.partialBuildSpecPath) ||
|
|
203
|
+
const buildSpec = this.loadBuildSpecFromFile(props?.codeBuildOptions?.partialBuildSpecPath) ||
|
|
204
|
+
(0, buildspecs_1.createMainBuildSpec)(this._features, props.codeBuildOptions);
|
|
204
205
|
return this.createRioCodeBuildProject('MainBuild', 'infrastructure/cdk.out', this._inputMasterTriggerFile, buildSpec, props);
|
|
205
206
|
}
|
|
206
207
|
createBranchCodeBuildProject(props) {
|
|
207
|
-
const buildSpec = this.loadBuildSpecFromFile(props?.codeBuildOptions?.partialBuildSpecPath) ||
|
|
208
|
+
const buildSpec = this.loadBuildSpecFromFile(props?.codeBuildOptions?.partialBuildSpecPath) ||
|
|
209
|
+
(0, buildspecs_1.createMainBuildSpec)(this._features, props.codeBuildOptions);
|
|
208
210
|
return this.createRioCodeBuildProject('BranchBuild', 'infrastructure/cdk.out', this._inputBranchTriggerFile, buildSpec, props);
|
|
209
211
|
}
|
|
210
212
|
createVulnerabilityBuildProject(props) {
|
|
211
213
|
const buildSpec = this.loadBuildSpecFromFile(props?.codeBuildOptions?.vulnerabilityPartialBuildSpecPath) ||
|
|
212
|
-
(0, buildspecs_1.createVulnerabilityBuildSpec)(this._features);
|
|
214
|
+
(0, buildspecs_1.createVulnerabilityBuildSpec)(this._features, props.codeBuildOptions);
|
|
213
215
|
return this.createRioCodeBuildProject('VulnerabilityChecks', './', this._inputMasterTriggerFile, buildSpec, props);
|
|
214
216
|
}
|
|
215
217
|
addMainPipeline(mainBuild, props) {
|
|
@@ -429,4 +431,4 @@ class PipelineStack extends aws_cdk_lib_1.Stack {
|
|
|
429
431
|
exports.PipelineStack = PipelineStack;
|
|
430
432
|
_a = JSII_RTTI_SYMBOL_1;
|
|
431
433
|
PipelineStack[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.PipelineStack", version: "0.0.0" };
|
|
432
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvcGlwZWxpbmUtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBbUY7QUFDbkYsNkRBQTRHO0FBQzVHLDZEQUE2RDtBQUM3RCw2RUFBNkU7QUFDN0UsaURBQWlEO0FBQ2pELDBEQUEwRDtBQUMxRCxpREFBb0Q7QUFFcEQseUNBQXlDO0FBQ3pDLCtDQUFxRDtBQUNyRCwyQ0FBMkM7QUFFM0MsbURBQW1EO0FBQ25ELHFEQUEwRTtBQUUxRSx5QkFBeUI7QUFDekIsZ0NBQWdDO0FBQ2hDLDZCQUE2QjtBQUc3QixzQ0FBMkQ7QUFDM0Qsc0NBQXNDO0FBQ3RDLDBDQUFpRTtBQUNqRSwyREFBa0Q7QUFDbEQsbURBQXNEO0FBQ3RELDZDQUFpRjtBQUNqRix5REFBZ0g7QUFDaEgscUVBQTZFO0FBMkw3RSxJQUFZLFlBcUNYO0FBckNELFdBQVksWUFBWTtJQUN0Qjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxtREFBbUMsQ0FBQTtJQUNuQzs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsK0RBQStDLENBQUE7SUFDL0M7Ozs7O09BS0c7SUFDSCxtRUFBbUQsQ0FBQTtBQUNyRCxDQUFDLEVBckNXLFlBQVksNEJBQVosWUFBWSxRQXFDdkI7QUFpQkQsTUFBYSxhQUFjLFNBQVEsbUJBQUs7SUFrQnRDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLCtCQUErQjtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxD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WUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLGdCQUFnQixDQUFDLGdCQUFnQixDQUMvQix1QkFBYSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsZ0JBQUUsQ0FBQyxXQUFXLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUNuRyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEtBQUssQ0FDVCw4RUFBOEUsWUFBWSxDQUFDLEVBQUUsdUJBQXVCLENBQ3JILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLGFBQXNCO1FBQ2xELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyx5QkFBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQVcsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxPQUFrQyxFQUFFLEdBQVcsRUFBRSxLQUFhO1FBQ3hGLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixrQkFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQzs7QUEzZEgsc0NBNGRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRHVyYXRpb24sIEZuLCBSZW1vdmFsUG9saWN5LCBTdGFjaywgU3RhY2tQcm9wcywgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEJ1aWxkRW52aXJvbm1lbnQsIEJ1aWxkU3BlYywgQ29tcHV0ZVR5cGUsIExpbnV4TGFtYmRhQnVpbGRJbWFnZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlYnVpbGQnO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jb2RlcGlwZWxpbmUnO1xuaW1wb3J0ICogYXMgY29kZXBpcGVsaW5lX2FjdGlvbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZS1hY3Rpb25zJztcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCAqIGFzIHRhcmdldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IE1hbmFnZWRQb2xpY3kgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElIb3N0ZWRab25lIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXJvdXRlNTMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IEJ1Y2tldCwgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBJU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgKiBhcyBwaXBlbGluZXMgZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvZGVCdWlsZFN0ZXAsIENvZGVQaXBlbGluZVNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL3BpcGVsaW5lcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRGF0YWRvZ0FsZXJ0VHlwZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2cnO1xuaW1wb3J0IHsgSU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2d2Mic7XG5pbXBvcnQgeyBTb25hdHlwZU9zc0luZGV4Q3JlZGVudGlhbHMgfSBmcm9tICcuLi8uLi8uLi9pYW0nO1xuaW1wb3J0ICogYXMgcmlvIGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7IENsYWlkb21ldGVyLCBDbGFpZG9tZXRlclByb2R1Y3QgfSBmcm9tICcuLi8uLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gJy4vYXBwbGljYXRpb24tc3RhZ2UnO1xuaW1wb3J0IHsgUmlvQ29kZUJ1aWxkUHJvamVjdCB9IGZyb20gJy4vYnVpbGQtcHJvamVjdCc7XG5pbXBvcnQgeyBjcmVhdGVNYWluQnVpbGRTcGVjLCBjcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRTcGVjIH0gZnJvbSAnLi9idWlsZHNwZWNzJztcbmltcG9ydCB7IERhdGFEb2dQaXBlbGluZUVycm9yQWxlcnRGb3JWdWxuZXJhYmlsaXR5Q2hlY2tzLCBEYXRhZG9nUGlwZWxpbmVFcnJvckFsZXJ0IH0gZnJvbSAnLi9kYXRhZG9nLW1vbml0b3JzJztcbmltcG9ydCB7IFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCB9IGZyb20gJy4vbW9uaXRvcmluZy1kZXBsb3ktc3RlcCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTY2hlZHVsZXNQcm9wcyB7XG4gIHJlYWRvbmx5IG1haW5QaXBlbGluZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eVBpcGVsaW5lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBzdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlXG4gICAqIC0gVGhpcyBoYXMgdG8gYmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcmVwb3NpdG9yeSBhcyB0aGUgczMgdHJpZ2dlciBmaWxlIGNyZWF0ZWQgYnkgdGhlIGJpdGJ1Y2tldC1pbnRlZ3JhdGlvbiB1c2VzIHRoaXMgYXMgYSBwcmVmaXhcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgYXZhaWxhYmxlIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIFNFUlZJQ0VfTkFNRSBpbiB0aGUgQ29kZUJ1aWxkU3RlcFxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgaW4gdGhlIEFwcFN0YWNrUHJvcHMgaW4gdGhlIGFwcFN0YWNrRmFjdG9yeVxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgYXMgc3RhY2tOYW1lIHByb3BlcnR5IGluIHRoZSBBcHBTdGFja1Byb3BzIGluIHRoZSBhcHBTdGFja0ZhY3RvcnkuIEkuZS4gdGhlIHN0YWNrIGlzIG5hbWVkIGFmdGVyIHRoZSBzZXJ2aWNlXG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGhhbmRlZCBvdmVyIHRvIGFsbCBEYXRhZG9nIG1vbml0b3JzXG4gICAqIC0gUklPIGNvbnZlbnRpb24gaXMgdGhhdCB1cGxvYWRlZCBsaWNlbnNlLWNoZWNrLWZpbGVzIGFyZSBuYW1lZCBhZnRlciB0aGUgc2VydmljZSwgaS5lLiBzZXJ2aWNlTmFtZS50eHRcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVyIGZvciBhcHBTdGFjayB0byBiZSBkZXBsb3llZC5cbiAgICpcbiAgICogVGhpcyBhY3RzIGFzIGEgd3JhcHBlciBmb3IgYWxsIHJlc291cmNlcyB5b3Ugd2FudCB0byBkZXBsb3kgdmlhIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcFN0YWNrRmFjdG9yeTogSUFwcFN0YWNrRmFjdG9yeTtcblxuICAvKipcbiAgICogRGVmaW5lcyB3aGljaCBraW5kIG9mIHBpcGVsaW5lIGlzIGRlcGxveWVkLlxuICAgKlxuICAgKiBVc2UgdGhlIGZlYXR1cmVzIHRvIGNvbWJpbmUgZGlmZmVyZW50IG9waW5pb25hdGVkLCBSSU8tc3BlY2lmaWMgcGlwZWxpbmUgZmVhdHVyZXMgc3VjaCBhcyBhZGRpbmcgYSBicmFuY2ggcGlwZWxpbmUgb3Igc3VwcG9ydGluZyBLYWZrYS5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmVzPzogUGlwZWxpbmVGZWF0dXJlcztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgZmVhdHVyZXNgIHByb3BlcnR5IGluc3RlYWQuIEZvciBub3csIHRoZSBwaXBlbGluZSB0eXBlcyBhcmUgbWFwcGVkIHRvIHRoZSBmZWF0dXJlcy5cbiAgICogRGVmaW5lcyB3aGljaCBraW5kIG9mIHBpcGVsaW5lIGlzIGRlcGxveWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVUeXBlPzogUGlwZWxpbmVUeXBlO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGhvdyBvZnRlbiB0aGUgcGlwZWxpbmUgaXMgdHJpZ2dlcmVkIGF1dG9tYXRpY2FsbHkuIElzIGRlZmluZWQgdmlhIGEgY3JvbiBleHByZXNzaW9uLlxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L2V2ZW50cy9TY2hlZHVsZWRFdmVudHMuaHRtbFxuICAgKlxuICAgKiBEZWZhdWx0IHZhbHVlczpcbiAgICogLSBtYWluIHBpcGVsaW5lOiBjcm9uKDAgOSA/ICogMiMxICopXG4gICAqIC0gdnVsbmVyYWJpbGl0eSBwaXBlbGluZTogY3JvbigwIDUgPyAqIE1PTi1GUkkgKilcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lU2NoZWR1bGVzPzogUGlwZWxpbmVTY2hlZHVsZXNQcm9wcztcblxuICAvKipcbiAgICogUGF0aCB0byBzZWNyZXRzIGZpbGUgY29udGFpbmluZyBlbmNyeXB0ZWQgc2VjcmV0cy5cbiAgICpcbiAgICogVGhlIFJpb1NlY3JldHNEZXBsb3lTdGVwIGlzIGFkZGVkIHByaW9yIHRvIGRlcGxveW1lbnQgb2YgdGhlIEFwcFN0YWNrIGlmIGEgcGF0aCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogTm8gc2VjcmV0cyBhcmUgZGVwbG95ZWQgaWYgbm8gcGF0aCBpcyBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHNEZXBsb3lTdGVwUHJvcHM/OiBQaXBlbGluZVN0YWNrUmlvU2VjcmV0c0RlcGxveVN0ZXBQcm9wcztcblxuICAvKipcbiAgICogQ29kZUJ1aWxkIG9wdGlvbnMgb3ZlcnJpZGluZyB0aGUgcmlvLXNwZWNpZmljIGRlZmF1bHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUJ1aWxkT3B0aW9ucz86IENvZGVCdWlsZE9wdGlvbnM7XG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCB0aGUgY2FwYWJpbGl0eSBtb25pdG9yaW5nIGRlcGxveSBzdGVwIGlzIGFkZGVkIHRvIHRoZSBwaXBlbGluZS5cbiAgICovXG4gIHJlYWRvbmx5IG1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHM/OiBQaXBlbGluZVN0YWNrUmlvTW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcztcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgdGhlIGB2dWxuZXJhYmlsaXR5Tm90aWZpY2F0aW9uYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgKiBJZiBgb3BzZ2VuaWVgIGlzIHNwZWNpZmllZCwgYW4gRXhjZXB0aW9uIGlzIHRocm93biwgYXMgdGhpcyBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUuXG4gICAqL1xuICByZWFkb25seSBkYXRhZG9nQWxlcnRUeXBlPzogRGF0YWRvZ0FsZXJ0VHlwZTtcbiAgLyoqXG4gICAqIE5vdGlmaWNhdGlvbiB0eXBlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgdnVsbmVyYWJpbGl0eSBwaXBlbGluZSBtb25pdG9yLiBEZWZhdWx0cyB0byBzbGFjay5cbiAgICovXG4gIHJlYWRvbmx5IHZ1bG5lcmFiaWxpdHlOb3RpZmljYXRpb24/OiBJTm90aWZpY2F0aW9uO1xuICAvKipcbiAgICogQ29kZVBpcGVsaW5lIFBpcGVsaW5lVHlwZSAoVjEgb3IgVjIpLiBEZWZhdWx0cyB0byBWMS5cbiAgICovXG4gIHJlYWRvbmx5IGNvZGVQaXBlbGluZVR5cGU/OiBjb2RlcGlwZWxpbmUuUGlwZWxpbmVUeXBlO1xufVxuXG4vKipcbiAqIFByb3ZpZGVyIGludGVyZmFjZSB0byBjcmVhdGUgdGhlIEFwcFN0YWNrIHdpdGhpbiB0aGUgc3BlY2lmaWMgc2NvcGVcbiAqXG4gKiBTaW1wbHkgcGxhY2UgdGhlIEFwcFN0YWNrIGNyZWF0aW9uIGludG8gdGhlIGNyZWF0ZS1tZXRob2Q6XG4gKiBAZXhhbXBsZVxuICpcbiAqIC8vIFVzZSBlLmcuIHdpdGhpbiBBcHBsaWNhdGlvblByb3BzIGFzIEpTT05PYmplY3Q6XG4gKiBcXHsgY3JlYXRlOiAoY29uc3RydWN0LCBwcm9wcykgPVxcPiBuZXcgU3RhY2soY29uc3RydWN0LCAnQXBwU3RhY2snLCBwcm9wcykgXFx9XG4gKlxuICogLy8gb3Igc2ltcGx5IGFzIGNsYXNzIGludGVyZmFjZSB3aXRoaW4geW91ciBzdGFjayBpbXBsZW1lbnRhdGlvbjpcbiAqIGNsYXNzIFBpcGVsaW5lU3RhZ2UgZXh0ZW5kcyBTdGFnZSBpbXBsZW1lbnRzIElBcHBTdGFja0ZhY3RvcnkgXFx7XG4gKiAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdGFnZVByb3BzKSBcXHtcbiAqICAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAqICAgICAvLyB5b3VyIHN0YWdlIGRlZmluaXRpb25cbiAqICAgXFx9XG4gKlxuICogICBjcmVhdGUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFwcFN0YWNrUHJvcHMpOiB2b2lkIFxce1xuICogICAgIC8vIGFwcCBzdGFjayBpbml0aWF0aW9uIGdvZXMgaW4gaGVyZVxuICogICBcXH1cbiAqIFxcfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBTdGFja0ZhY3Rvcnkge1xuICAvKipcbiAgICogRmFjdG9yeSBtZXRob2QsIGJlaW5nIGludm9rZWQgd2l0aCB0aGUgc3BlY2lmaWMgc2NvcGUgZHVyaW5nIHBpcGVsaW5lIGluc3RhbnRpYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHBhcmVudCBjb25zdHJ1Y3QgZm9yIHRoZSBhcHAgc3RhY2tcbiAgICogQHBhcmFtIHByb3BzIC0gVGhlIGFwcCBzdGFja3MgcHJvcGVydGllc1xuICAgKi9cbiAgY3JlYXRlKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBBcHBTdGFja1Byb3BzKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3RlZCBwcm9wZXJ0aWVzIGJlaW5nIGhhbmRlZCBvdmVyIHRvIFJpb1NlY3JldHNEZXBsb3lTdGVwLlxuICpcbiAqIEBzZWUgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwXG4gKiBAc2VlIHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdGFja1Jpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHMge1xuICByZWFkb25seSBzZWNyZXRzRmlsZVBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWNrUmlvTW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcyB7XG4gIC8qKlxuICAgKiBNYXAgXFx7ZGlyZWN0b3J5OiBmaWxlbmFtZXNcXH0gY29udGFpbmluZyAgLmphciBvciAuemlwIGZpbGVzIGNyZWF0ZWQgaW4gbWFpbiBidWlsZCBzdGVwIHRvIGJlIHVwbG9hZGVkIHRvIHRoZSBtb25pdG9yaW5nLXRlc3RzdWl0ZS1ydW5uZXIgYnVja2V0LCBlLmcuXG4gICAqIGBgYFxuICAgKiB7XG4gICAqICAnYXZhaWxhYmlsaXR5LW1vbml0b3JpbmcvYnVpbGQvbGlicyc6IFsnZm9vLWF2YWlsYWJpbGl0eS5qYXInXSxcbiAgICogICdwZXJmb3JtYW5jZS1tb25pdG9yaW5nL2J1aWxkL2xpYnMnOiBbJ2FwaS1jaGVjay56aXAnLCAnZm9vLXBlcmZvcm1hbmNlLmphciddLFxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcmVhZG9ubHkgbW9uaXRvcmluZ0FydGlmYWN0czogeyBbZGlyZWN0b3J5OiBzdHJpbmddOiBzdHJpbmdbXSB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lRmVhdHVyZXMge1xuICAvKipcbiAgICogQ3JlYXRlIGEgYnJhbmNoIHBpcGVsaW5lIHVzZWQgYnkgcmVub3ZhdGUuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaFBpcGVsaW5lPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHZ1bG5lcmFiaWxpdHkgcGlwZWxpbmUgdG8gc2NhbiBkZXBlbmRlbmNpZXMgZm9yIHZ1bG5lcmFiaWxpdGllcy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eVBpcGVsaW5lPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJ1biBhIHN0YW5kYXJkIGdyYWRsZSBidWlsZCBpbiB0aGUgcmVwb3NpdG9yeSByb290LiBEZWZhdWx0cyB0byBgZmFsc2VgOlxuICAgKiAtIGJ1aWxkIGFuZCB0ZXN0IG9mIHRoZSBhcnRpZmFjdCB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjbGVhbiBidWlsZFwiXG4gICAqIC0gbGljZW5zZS1jaGVjayBhbmQgdXBsb2FkIG9mIGxpY2Vuc2UtY2hlY2stZmlsZSB1c2luZyBAcmlvLWNsb3VkL3Jpby1saWNlbnNlLWNoZWNrZXIuXG4gICAqIC0gY3JlYXRlIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgdG8gbWFrZSBUTFMgY29tbXVuaWNhdGlvbiBwb3NzaWJsZSwgZS5nLiB3aXRoIGEgbG9hZGJhbGFuY2VyXG4gICAqIC0gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBqaWJCdWlsZFRhclwiXG4gICAqL1xuICByZWFkb25seSBncmFkbGVCdWlsZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSdW4gYSBzdGFuZGFyZCBucG0gYnVpbGQgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdC4gRGVmYXVsdHMgdG8gYGZhbHNlYDpcbiAgICogLSBydW4gbGludGVyIHZpYSBjb21tYW5kIFwibnBtIHJ1biBsaW50XCJcbiAgICogLSBydW4gdGVzdHMgdmlhIGNvbW1hbmQgXCJucG0gcnVuIHRlc3Q6Y2lcIlxuICAgKiAtIHJ1biBhIGxpY2Vuc2UgY2hlY2sgYnkgY2FsbGluZyB0aGUgc2NyaXB0IFwiY2hlY2stb3NzLWxpY2Vuc2VzLnNoXCIgKGZyb20gdGhlIFJJTyBmcm9udGVuZCB0ZW1wbGF0ZSlcbiAgICogLSBidWlsZCB0aGUgYXJ0aWZhY3QgdmlhIGNvbW1hbmQgXCJucG0gcnVuIGJ1aWxkXCJcbiAgICovXG4gIHJlYWRvbmx5IG5wbUJ1aWxkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEFkZCByZXF1aXJlZCBzdGVwcyBhbmQgcGVybWlzc2lvbnMgdG8gc3VwcG9ydCBLYWZrYS4gQ3VycmVudGx5LCB0aGlzIHJlcXVpcmVzIGBncmFkbGVCdWlsZGAgdG8gYmUgc2V0IHRvIGB0cnVlYC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IGthZmthSW50ZWdyYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogUzMgQnVja2V0IHRvIGRlcGxveSBmcm9udGVuZCB0by4gUmVxdWlyZXMgYG5wbUJ1aWxkYCB0byBiZSBzZXQgdG8gYHRydWVgLiBJZiBzZXQsIHRoZSBvdXRwdXQgb2YgdGhlIG5wbSBidWlsZCBpcyBkZXBsb3llZCB0byB0aGUgcHJvdmlkZWQgYnVja2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgZnJvbnRlbmRCdWNrZXROYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBidWlsZCBjb21tYW5kcyBmb3IgbWFpbiBhbmQgYnJhbmNoIHBpcGVsaW5lLiBXaWxsIGJlIGFkZGVkIGFmdGVyIGFsbCBidWlsZCAmIHRlc3QgY29tbWFuZHMsIGJlZm9yZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgYnVpbGQuIERvZXMgbm90IHdvcmsgd2l0aCBwYXJ0aWFsQnVpbGRzcGVjLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEJ1aWxkQ29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgbm8gRGF0YWRvZyBtb25pdG9ycyBmb3IgbWFpbiBhbmQgdnVsbmVyYWJpbGl0eSBwaXBlbGluZXMgd2lsbCBiZSBjcmVhdGVkLiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUGlwZWxpbmVNb25pdG9ycz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIFBpcGVsaW5lVHlwZSB7XG4gIC8qKlxuICAgKiBTZWxmLW11dGF0aW5nIGNvZGVwaXBlbGluZSBkZXBsb3lpbmcgdGhlIHByb3ZpZGVkIEFwcFN0YWNrLiBCZSBhd2FyZTogVGhlIHByb3ZpZGVkIHNlcnZpY2Ugd29uJ3QgaGF2ZSBhY2Nlc3MgdG8gS2Fma2EuXG4gICAqXG4gICAqIENvbWVzIHdpdGggYSBwcmUtZGVmaW5lZCBidWlsZHNwZWMueWFtbCBmb3IgYSBncmFkbGUgcHJvamVjdC4gVGhpcyBidWlsZHNwZWMueWFtbCBpcyB1c2VkIGZvciBib3RoIHRoZSBtYWluIGFuZFxuICAgKiBicmFuY2ggcGlwZWxpbmUgYW5kIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgc3RlcHNcbiAgICogLSBidWlsZCBhbmQgdGVzdCBvZiB0aGUgYXJ0aWZhY3QgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2xlYW4gYnVpbGRcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqIC0gbGljZW5zZS1jaGVjayBhbmQgdXBsb2FkIG9mIGxpY2Vuc2UtY2hlY2stZmlsZSB1c2luZyBAcmlvLWNsb3VkL3Jpby1saWNlbnNlLWNoZWNrZXIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGNyZWF0ZSBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIHRvIG1ha2UgVExTIGNvbW11bmljYXRpb24gcG9zc2libGUsIGUuZy4gd2l0aCBhIGxvYWRiYWxhbmNlci5cbiAgICogLSBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGppYkJ1aWxkVGFyXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKi9cbiAgU1RBTkRBUkRfR1JBRExFID0gJ1NUQU5EQVJEX0dSQURMRScsXG4gIC8qKlxuICAgKiBTZWxmLW11dGF0aW5nIGNvZGVwaXBlbGluZSBkZXBsb3lpbmcgdGhlIHByb3ZpZGVkIEFwcFN0YWNrIHdpdGggYWRkaXRpb25hbCBzdGVwcyBuZWVkZWQgdG8gYWNjZXNzIEthZmthLlxuICAgKlxuICAgKiBDb21lcyB3aXRoIGEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgZm9yIGEgZ3JhZGxlIHByb2plY3QuIFRoaXMgYnVpbGRzcGVjLnlhbWwgaXMgdXNlZCBmb3IgYm90aCB0aGUgbWFpbiBhbmRcbiAgICogYnJhbmNoIHBpcGVsaW5lIGFuZCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHN0ZXBzXG4gICAqIC0gYnVpbGQgYW5kIHRlc3Qgb2YgdGhlIGFydGlmYWN0IHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGNsZWFuIGJ1aWxkXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGxpY2Vuc2UtY2hlY2sgYW5kIHVwbG9hZCBvZiBsaWNlbnNlLWNoZWNrLWZpbGUgdXNpbmcgQHJpby1jbG91ZC9yaW8tbGljZW5zZS1jaGVja2VyLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICogLSBjcmVhdGUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0byBtYWtlIFRMUyBjb21tdW5pY2F0aW9uIHBvc3NpYmxlLCBlLmcuIHdpdGggYSBsb2FkYmFsYW5jZXIuXG4gICAqIC0gcmVxdWVzdCBhIGNlcnRpZmljYXRlIHRvIGF1dGhlbnRpY2F0ZSBhZ2FpbnN0IEthZmthIHZpYSBtdXR1YWwgVExTXG4gICAqIC0gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZSB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBqaWJCdWlsZFRhclwiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICovXG4gIFNUQU5EQVJEX0dSQURMRV9LQUZLQSA9ICdTVEFOREFSRF9HUkFETEVfS0FGS0EnLFxuICAvKipcbiAgICogU2VsZi1tdXRhdGluZyBjb2RlcGlwZWxpbmUgZGVwbG95aW5nIHRoZSBwcm92aWRlZCBBcHBTdGFjay5cbiAgICpcbiAgICogQ29tZXMgd2l0aCBhIHByZS1kZWZpbmVkIGJ1aWxkc3BlYy55YW1sIHRvIHN5bnRoZXNpemUgdGhlIEFwcFN0YWNrLlxuICAgKiBObyBicmFuY2ggb3IgdnVsbmVyYWJpbGl0eSBwaXBlbGluZSBpcyBjcmVhdGVkLlxuICAgKi9cbiAgU1RBTkRBUkRfSU5GUkFTVFJVQ1RVUkUgPSAnU1RBTkRBUkRfSU5GUkFTVFJVQ1RVUkUnLFxufVxuXG4vKipcbiAqIEBwYXJhbSBwYXJ0aWFsQnVpbGRTcGVjUGF0aCAtIFBhdGggdG8gYSBjdXN0b20gYnVpbGQtc3BlYyBmaWxlIHRvIHVzZSBmb3IgdGhlIG1haW4gYW5kIGJyYW5jaCBwaXBlbGluZS5cbiAqIEEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgZml0dGluZyB0aGUgcGlwZWxpbmVUeXBlIGlzIHVzZWQgaWYgbm90IHByb3ZpZGVkLlxuICogQHBhcmFtIHZ1bG5lcmFiaWxpdHlQYXJ0aWFsQnVpbGRTcGVjUGF0aCAtIFBhdGggdG8gYSBjdXN0b20gYnVpbGQtc3BlYyBmaWxlIHRvIHVzZSBmb3IgdGhlIHZ1bG5lcmFiaWxpdHkgcGlwZWxpbmUuXG4gKiBBIHByZS1kZWZpbmVkIHZ1bG5lcmFiaWxpdHkgYnVpbGRzcGVjLnlhbWwgZml0dGluZyB0aGUgcGlwZWxpbmVUeXBlIGlzIHVzZWQgaWYgbm90IHByb3ZpZGVkLlxuICogQHBhcmFtIGJ1aWxkRW52aXJvbm1lbnQgLSBDdXN0b20gQ29kZUJ1aWxkIGJ1aWxkIGVudmlyb25tZW50IG92ZXJyaWRpbmcgdGhlIHJpby1zcGVjaWZpYyBkZWZhdWx0cy4gVGhlIGRlZmF1bHRzIGFyZTpcbiAqICAgICAgICAgIGJ1aWxkSW1hZ2U6IEFNQVpPTl9MSU5VWF8yXzVcbiAqICAgICAgICAgIGNvbXB1dGVUeXBlOiBMQVJHRVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvZGVCdWlsZE9wdGlvbnMge1xuICByZWFkb25seSBwYXJ0aWFsQnVpbGRTcGVjUGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eVBhcnRpYWxCdWlsZFNwZWNQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBidWlsZEVudmlyb25tZW50PzogQnVpbGRFbnZpcm9ubWVudDtcbn1cblxuZXhwb3J0IGNsYXNzIFBpcGVsaW5lU3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZlYXR1cmVzOiBQaXBlbGluZUZlYXR1cmVzO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYWluQ29kZUJ1aWxkUHJvamVjdDogQ29kZUJ1aWxkU3RlcDtcbiAgcHJpdmF0ZSByZWFkb25seSBfYnJhbmNoQ29kZUJ1aWxkUHJvamVjdDogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfdnVsbmVyYWJpbGl0eUNvZGVCdWlsZFByb2plY3Q6IENvZGVCdWlsZFN0ZXAgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1Y2tldDogSUJ1Y2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2FjaGVCdWNrZXQ6IElCdWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hvc3RlZFpvbmU6IElIb3N0ZWRab25lO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dE1hc3RlclRyaWdnZXJGaWxlOiBDb2RlUGlwZWxpbmVTb3VyY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lucHV0QnJhbmNoVHJpZ2dlckZpbGU6IENvZGVQaXBlbGluZVNvdXJjZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXI6IElTdHJpbmdQYXJhbWV0ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29zc0xpY2Vuc2VzQnVja2V0OiBJQnVja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXJ2aWNlS2V5c3RvcmVQYXNzd29yZDogSVN0cmluZ1BhcmFtZXRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWNjb3VudE5hbWVQYXJhbWV0ZXI6IElTdHJpbmdQYXJhbWV0ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlYW1JZGVudGlmaWVyUGFyYW1ldGVyOiBJU3RyaW5nUGFyYW1ldGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uaXN0RGF0YU1pcnJvclVybDogSVN0cmluZ1BhcmFtZXRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29kZVBpcGVsaW5lVHlwZTogY29kZXBpcGVsaW5lLlBpcGVsaW5lVHlwZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLl9mZWF0dXJlcyA9IHRoaXMucGFyc2VGZWF0dXJlcyhwcm9wcyk7XG5cbiAgICAvLyBwb3B1bGF0ZSBleHRlcm5hbCBwYXJhbWV0ZXJzXG4gICAgdGhpcy5fYnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMsICdUcmlnZ2VyQnVja2V0JywgRm4uaW1wb3J0VmFsdWUoJ2JpdGJ1Y2tldC1pbnRlZ3JhdGlvbi1zMy1idWNrZXQnKSk7XG4gICAgdGhpcy5fY2FjaGVCdWNrZXQgPSBuZXcgczMuQnVja2V0KHRoaXMsICdDYWNoZUJ1Y2tldCcsIHtcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgICAgbGlmZWN5Y2xlUnVsZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGV4cGlyYXRpb246IER1cmF0aW9uLmRheXMoMzApLFxuICAgICAgICAgIGFib3J0SW5jb21wbGV0ZU11bHRpcGFydFVwbG9hZEFmdGVyOiBEdXJhdGlvbi5kYXlzKDcpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICB0aGlzLl9ob3N0ZWRab25lID0gcmlvLlJpb0xhbmRpbmdab25lLmdldERlZmF1bHRIb3N0ZWRab25lKHRoaXMpO1xuICAgIHRoaXMuX2lucHV0TWFzdGVyVHJpZ2dlckZpbGUgPSBwaXBlbGluZXMuQ29kZVBpcGVsaW5lU291cmNlLnMzKFxuICAgICAgdGhpcy5fYnVja2V0LFxuICAgICAgYCR7cHJvcHMuc2VydmljZU5hbWV9L3RyaWdnZXIvJHtyaW8uVHJpZ2dlcktleS5NQVNURVJfUkVQT31gLFxuICAgICAgeyB0cmlnZ2VyOiBjb2RlcGlwZWxpbmVfYWN0aW9ucy5TM1RyaWdnZXIuRVZFTlRTIH1cbiAgICApO1xuICAgIHRoaXMuX2lucHV0QnJhbmNoVHJpZ2dlckZpbGUgPSBwaXBlbGluZXMuQ29kZVBpcGVsaW5lU291cmNlLnMzKFxuICAgICAgdGhpcy5fYnVja2V0LFxuICAgICAgYCR7cHJvcHMuc2VydmljZU5hbWV9L3RyaWdnZXIvJHtyaW8uVHJpZ2dlcktleS5CUkFOQ0hfUkVQT31gLFxuICAgICAgeyB0cmlnZ2VyOiBjb2RlcGlwZWxpbmVfYWN0aW9ucy5TM1RyaWdnZXIuRVZFTlRTIH1cbiAgICApO1xuXG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdPc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlcicsXG4gICAgICB7IHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL29zcy1saWNlbnNlcy9idWNrZXQtbmFtZScgfVxuICAgICk7XG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0JyxcbiAgICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLnN0cmluZ1ZhbHVlXG4gICAgKTtcbiAgICB0aGlzLl9zZXJ2aWNlS2V5c3RvcmVQYXNzd29yZCA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXModGhpcywgJ0tleXN0b3JlUGFzc3dvcmQnLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBgL2NvbmZpZy8ke3Byb3BzLnNlcnZpY2VOYW1lfS9zZXJ2aWNlLWtleXN0b3JlLXBhc3N3b3JkYCxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgfSk7XG4gICAgdGhpcy5fYWNjb3VudE5hbWVQYXJhbWV0ZXIgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdBY2NvdW50TmFtZVBhcmFtZXRlcicsXG4gICAgICAnL2NvbmZpZy9hY2NvdW50L25hbWUnXG4gICAgKTtcbiAgICB0aGlzLl90ZWFtSWRlbnRpZmllclBhcmFtZXRlciA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ1RlYW1JZGVudGlmaWVyUGFyYW1ldGVyJyxcbiAgICAgICcvY29uZmlnL3RlYW0vaWRlbnRpZmllcidcbiAgICApO1xuICAgIHRoaXMuX25pc3REYXRhTWlycm9yVXJsID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU2VjdXJlU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnTmlzdERhdGFNaXJyb3JVcmwnLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiAnL2NvbmZpZy9uaXN0LWRhdGEtbWlycm9yL3VybCcsXG4gICAgICB2ZXJzaW9uOiAxLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fY29kZVBpcGVsaW5lVHlwZSA9IHByb3BzLmNvZGVQaXBlbGluZVR5cGUgPz8gY29kZXBpcGVsaW5lLlBpcGVsaW5lVHlwZS5WMTtcblxuICAgIHRoaXMuX21haW5Db2RlQnVpbGRQcm9qZWN0ID0gdGhpcy5jcmVhdGVNYWluQ29kZUJ1aWxkUHJvamVjdChwcm9wcyk7XG4gICAgdGhpcy5hZGRNYWluUGlwZWxpbmUodGhpcy5fbWFpbkNvZGVCdWlsZFByb2plY3QsIHByb3BzKTtcblxuICAgIGlmICh0aGlzLl9mZWF0dXJlcy5icmFuY2hQaXBlbGluZSkge1xuICAgICAgdGhpcy5fYnJhbmNoQ29kZUJ1aWxkUHJvamVjdCA9IHRoaXMuY3JlYXRlQnJhbmNoQ29kZUJ1aWxkUHJvamVjdChwcm9wcyk7XG4gICAgICB0aGlzLmFkZEJyYW5jaFBpcGVsaW5lKHRoaXMuX2JyYW5jaENvZGVCdWlsZFByb2plY3QpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZmVhdHVyZXMudnVsbmVyYWJpbGl0eVBpcGVsaW5lKSB7XG4gICAgICB0aGlzLl92dWxuZXJhYmlsaXR5Q29kZUJ1aWxkUHJvamVjdCA9IHRoaXMuY3JlYXRlVnVsbmVyYWJpbGl0eUJ1aWxkUHJvamVjdChwcm9wcyk7XG4gICAgICB0aGlzLmFkZFZ1bG5lcmFiaWxpdHlQaXBlbGluZSh0aGlzLl92dWxuZXJhYmlsaXR5Q29kZUJ1aWxkUHJvamVjdCwgcHJvcHMpO1xuICAgIH1cblxuICAgIGNvbnN0IFtmZWF0dXJlLCBwYWNrYWdlTmFtZV0gPSBfX2Rpcm5hbWUuc3BsaXQocGF0aC5zZXApLnJldmVyc2UoKTtcbiAgICBuZXcgQ2xhaWRvbWV0ZXIodGhpcywgJ0NsYWlkb21ldGVyJywge1xuICAgICAgcHJvZHVjdDogQ2xhaWRvbWV0ZXJQcm9kdWN0LkNES19DT05UUklCVVRJT04sXG4gICAgICBwYWNrYWdlTmFtZSxcbiAgICAgIGZlYXR1cmUsXG4gICAgICB2ZXJzaW9uOiAnMS41LjAnLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBtYWluQ29kZWJ1aWxkUHJvamVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFpbkNvZGVCdWlsZFByb2plY3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJyYW5jaENvZGVCdWlsZFByb2plY3QoKTogQ29kZUJ1aWxkU3RlcCB7XG4gICAgaWYgKHRoaXMuX2JyYW5jaENvZGVCdWlsZFByb2plY3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBwaXBlbGluZSB0eXBlIHlvdSBoYXZlIHNlbGVjdGVkIGRvZXMgbm90IHN1cHBvcnQgYSBicmFuY2ggY29kZWJ1aWxkIHByb2plY3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2JyYW5jaENvZGVCdWlsZFByb2plY3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZ1bG5lcmFiaWxpdHlDb2RlQnVpbGRQcm9qZWN0KCk6IENvZGVCdWlsZFN0ZXAge1xuICAgIGlmICh0aGlzLl92dWxuZXJhYmlsaXR5Q29kZUJ1aWxkUHJvamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBFcnJvcignVGhlIHBpcGVsaW5lIHR5cGUgeW91IGhhdmUgc2VsZWN0ZWQgZG9lcyBub3Qgc3VwcG9ydCBhIHZ1bG5lcmFiaWxpdHkgY29kZWJ1aWxkIHByb2plY3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Z1bG5lcmFiaWxpdHlDb2RlQnVpbGRQcm9qZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUZlYXR1cmVzKHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpOiBQaXBlbGluZUZlYXR1cmVzIHtcbiAgICBpZiAocHJvcHMucGlwZWxpbmVUeXBlICYmIHByb3BzLmZlYXR1cmVzKSB7XG4gICAgICB0aHJvdyBFcnJvcignWW91IGNhbm5vdCBwcm92aWRlIGJvdGggYSBwaXBlbGluZVR5cGUgYW5kIGZlYXR1cmVzLiBQbGVhc2UgdXNlIGZlYXR1cmVzIG9ubHkuJyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5mZWF0dXJlcz8ua2Fma2FJbnRlZ3JhdGlvbiAmJiAhcHJvcHMuZmVhdHVyZXM/LmdyYWRsZUJ1aWxkKSB7XG4gICAgICB0aHJvdyBFcnJvcignS2Fma2EgaW50ZWdyYXRpb24gaXMgb25seSBzdXBwb3J0ZWQgZm9yIHBpcGVsaW5lcyB3aXRoIGdyYWRsZSBidWlsZCcpO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZmVhdHVyZXM/LmZyb250ZW5kQnVja2V0TmFtZSAmJiAhcHJvcHMuZmVhdHVyZXM/Lm5wbUJ1aWxkKSB7XG4gICAgICB0aHJvdyBFcnJvcignRnJvbnRlbmQgYnVja2V0IG5hbWUgY2FuIG9ubHkgYmUgc2V0IHdoZW4gbnBtIGJ1aWxkIGlzIGVuYWJsZWQnKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmZlYXR1cmVzPy5hZGRpdGlvbmFsQnVpbGRDb21tYW5kcyAmJiBwcm9wcy5jb2RlQnVpbGRPcHRpb25zPy5wYXJ0aWFsQnVpbGRTcGVjUGF0aCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1lvdSBjYW5ub3QgcHJvdmlkZSBhZGRpdGlvbmFsQnVpbGRDb21tYW5kcyBpZiB5b3UgdXNlIGEgcGFydGlhbEJ1aWxkU3BlY1BhdGguJyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5mZWF0dXJlcyAmJiBwcm9wcy5jb2RlQnVpbGRPcHRpb25zPy5wYXJ0aWFsQnVpbGRTcGVjUGF0aCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnWW91IGFyZSB1c2luZyB0aGUgcGlwZWxpbmUgZmVhdHVyZXMgaW4gY29tYmluYXRpb24gd2l0aCBhIHBhcnRpYWxCdWlsZFNwZWNQYXRoLiBQbGVhc2Uga2VlcCBpbiBtaW5kLCB0aGF0IGFsbCBidWlsZHNwZWMgcmVsYXRlZCBmZWF0dXJlcyBhcmUgaWdub3JlZCBhbmQgdGhlIHBhcnRpYWxCdWlsZFNwZWMgaXMgYXBwbGllZC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocHJvcHMucGlwZWxpbmVUeXBlKSB7XG4gICAgICBzd2l0Y2ggKHByb3BzLnBpcGVsaW5lVHlwZSkge1xuICAgICAgICBjYXNlIFBpcGVsaW5lVHlwZS5TVEFOREFSRF9HUkFETEU6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJyYW5jaFBpcGVsaW5lOiB0cnVlLFxuICAgICAgICAgICAgdnVsbmVyYWJpbGl0eVBpcGVsaW5lOiB0cnVlLFxuICAgICAgICAgICAgZ3JhZGxlQnVpbGQ6IHRydWUsXG4gICAgICAgICAgICBucG1CdWlsZDogZmFsc2UsXG4gICAgICAgICAgICBrYWZrYUludGVncmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBQaXBlbGluZVR5cGUuU1RBTkRBUkRfR1JBRExFX0tBRktBOlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBicmFuY2hQaXBlbGluZTogdHJ1ZSxcbiAgICAgICAgICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZTogdHJ1ZSxcbiAgICAgICAgICAgIGdyYWRsZUJ1aWxkOiB0cnVlLFxuICAgICAgICAgICAgbnBtQnVpbGQ6IGZhbHNlLFxuICAgICAgICAgICAga2Fma2FJbnRlZ3JhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgY2FzZSBQaXBlbGluZVR5cGUuU1RBTkRBUkRfSU5GUkFTVFJVQ1RVUkU6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJyYW5jaFBpcGVsaW5lOiBmYWxzZSxcbiAgICAgICAgICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZTogZmFsc2UsXG4gICAgICAgICAgICBncmFkbGVCdWlsZDogZmFsc2UsXG4gICAgICAgICAgICBucG1CdWlsZDogZmFsc2UsXG4gICAgICAgICAgICBrYWZrYUludGVncmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM6IHRydWUsXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGJyYW5jaFBpcGVsaW5lOiBwcm9wcy5mZWF0dXJlcz8uYnJhbmNoUGlwZWxpbmUgPz8gdHJ1ZSxcbiAgICAgIHZ1bG5lcmFiaWxpdHlQaXBlbGluZTogcHJvcHMuZmVhdHVyZXM/LnZ1bG5lcmFiaWxpdHlQaXBlbGluZSA/PyB0cnVlLFxuICAgICAgZ3JhZGxlQnVpbGQ6IHByb3BzLmZlYXR1cmVzPy5ncmFkbGVCdWlsZCA/PyBmYWxzZSxcbiAgICAgIG5wbUJ1aWxkOiBwcm9wcy5mZWF0dXJlcz8ubnBtQnVpbGQgPz8gZmFsc2UsXG4gICAgICBrYWZrYUludGVncmF0aW9uOiBwcm9wcy5mZWF0dXJlcz8ua2Fma2FJbnRlZ3JhdGlvbiA/PyBmYWxzZSxcbiAgICAgIGZyb250ZW5kQnVja2V0TmFtZTogcHJvcHMuZmVhdHVyZXM/LmZyb250ZW5kQnVja2V0TmFtZSxcbiAgICAgIGFkZGl0aW9uYWxCdWlsZENvbW1hbmRzOiBwcm9wcy5mZWF0dXJlcz8uYWRkaXRpb25hbEJ1aWxkQ29tbWFuZHMsXG4gICAgICBlbmFibGVQaXBlbGluZU1vbml0b3JzOiBwcm9wcy5mZWF0dXJlcz8uZW5hYmxlUGlwZWxpbmVNb25pdG9ycyA/PyB0cnVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJpb0NvZGVCdWlsZFByb2plY3QoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGNka091dHB1dERpcmVjdG9yeTogc3RyaW5nLFxuICAgIHRyaWdnZXJGaWxlOiBDb2RlUGlwZWxpbmVTb3VyY2UsXG4gICAgYnVpbGRTcGVjOiBCdWlsZFNwZWMsXG4gICAgcHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wc1xuICApIHtcbiAgICByZXR1cm4gbmV3IFJpb0NvZGVCdWlsZFByb2plY3QodGhpcywgbmFtZSwge1xuICAgICAgaW5wdXQ6IHRyaWdnZXJGaWxlLFxuICAgICAgY2RrT3V0RGlyZWN0b3J5OiBjZGtPdXRwdXREaXJlY3RvcnksXG4gICAgICBwYXJ0aWFsQnVpbGRTcGVjOiBidWlsZFNwZWMsXG4gICAgICBidWlsZEVudmlyb25tZW50OiBwcm9wcz8uY29kZUJ1aWxkT3B0aW9ucz8uYnVpbGRFbnZpcm9ubWVudCxcbiAgICAgIGhvc3RlZFpvbmVOYW1lOiB0aGlzLl9ob3N0ZWRab25lLnpvbmVOYW1lLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgY2FjaGVCdWNrZXQ6IHRoaXMuX2NhY2hlQnVja2V0LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNYWluQ29kZUJ1aWxkUHJvamVjdChwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgY29uc3QgYnVpbGRTcGVjID1cbiAgICAgIHRoaXMubG9hZEJ1aWxkU3BlY0Zyb21GaWxlKHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5wYXJ0aWFsQnVpbGRTcGVjUGF0aCkgfHwgY3JlYXRlTWFpbkJ1aWxkU3BlYyh0aGlzLl9mZWF0dXJlcyk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmlvQ29kZUJ1aWxkUHJvamVjdChcbiAgICAgICdNYWluQnVpbGQnLFxuICAgICAgJ2luZnJhc3RydWN0dXJlL2Nkay5vdXQnLFxuICAgICAgdGhpcy5faW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSxcbiAgICAgIGJ1aWxkU3BlYyxcbiAgICAgIHByb3BzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQnJhbmNoQ29kZUJ1aWxkUHJvamVjdChwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgY29uc3QgYnVpbGRTcGVjID1cbiAgICAgIHRoaXMubG9hZEJ1aWxkU3BlY0Zyb21GaWxlKHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5wYXJ0aWFsQnVpbGRTcGVjUGF0aCkgfHwgY3JlYXRlTWFpbkJ1aWxkU3BlYyh0aGlzLl9mZWF0dXJlcyk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmlvQ29kZUJ1aWxkUHJvamVjdChcbiAgICAgICdCcmFuY2hCdWlsZCcsXG4gICAgICAnaW5mcmFzdHJ1Y3R1cmUvY2RrLm91dCcsXG4gICAgICB0aGlzLl9pbnB1dEJyYW5jaFRyaWdnZXJGaWxlLFxuICAgICAgYnVpbGRTcGVjLFxuICAgICAgcHJvcHNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRQcm9qZWN0KHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBjb25zdCBidWlsZFNwZWMgPVxuICAgICAgdGhpcy5sb2FkQnVpbGRTcGVjRnJvbUZpbGUocHJvcHM/LmNvZGVCdWlsZE9wdGlvbnM/LnZ1bG5lcmFiaWxpdHlQYXJ0aWFsQnVpbGRTcGVjUGF0aCkgfHxcbiAgICAgIGNyZWF0ZVZ1bG5lcmFiaWxpdHlCdWlsZFNwZWModGhpcy5fZmVhdHVyZXMpO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJpb0NvZGVCdWlsZFByb2plY3QoJ1Z1bG5lcmFiaWxpdHlDaGVja3MnLCAnLi8nLCB0aGlzLl9pbnB1dE1hc3RlclRyaWdnZXJGaWxlLCBidWlsZFNwZWMsIHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTWFpblBpcGVsaW5lKG1haW5CdWlsZDogQ29kZUJ1aWxkU3RlcCwgcHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcykge1xuICAgIGNvbnN0IHBpcGVsaW5lID0gbmV3IGNvZGVwaXBlbGluZS5QaXBlbGluZSh0aGlzLCAnUGlwZWxpbmUnLCB7XG4gICAgICBhcnRpZmFjdEJ1Y2tldDogdGhpcy5fY2FjaGVCdWNrZXQsXG4gICAgICBwaXBlbGluZVR5cGU6IHRoaXMuX2NvZGVQaXBlbGluZVR5cGUsXG4gICAgICByZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGU6IHRydWUsXG4gICAgfSk7XG4gICAgY29uc3QgY29kZVBpcGVsaW5lID0gbmV3IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUocGlwZWxpbmUsICdDb2RlUGlwZWxpbmUnLCB7XG4gICAgICBjb2RlUGlwZWxpbmU6IHBpcGVsaW5lLFxuICAgICAgc3ludGg6IG1haW5CdWlsZCxcbiAgICAgIHNlbGZNdXRhdGlvbkNvZGVCdWlsZERlZmF1bHRzOiB7XG4gICAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICBidWlsZEltYWdlOiBMaW51eExhbWJkYUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzIwMjNfTk9ERV8yMCxcbiAgICAgICAgICBjb21wdXRlVHlwZTogQ29tcHV0ZVR5cGUuTEFNQkRBXzFHQixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgVGFncy5vZihwaXBlbGluZSkuYWRkKCdwaXBlbGluZV90eXBlJywgJ2J1aWxkJyk7XG5cbiAgICBjb25zdCBzdHJpcEFzc2V0c1N0ZXAgPSB0aGlzLmNyZWF0ZVN0cmlwQXNzZXRzU3RlcChjb2RlUGlwZWxpbmUpO1xuICAgIGNvZGVQaXBlbGluZS5hZGRXYXZlKCdCZWZvcmVEZXBsb3knLCB7IHByZTogW3N0cmlwQXNzZXRzU3RlcF0gfSk7XG5cbiAgICBjb25zdCBjYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXAgPSB0aGlzLmNyZWF0ZUNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcChtYWluQnVpbGQsIHByb3BzKTtcbiAgICBjb25zdCBzZWNyZXRzRGVwbG95U3RlcFByb3BzID0gdGhpcy5jcmVhdGVTZWNyZXRzRGVwbG95U3RlcChwcm9wcyk7XG4gICAgY29uc3QgZnJvbnRlbmREZXBsb3lTdGVwID0gdGhpcy5jcmVhdGVEZXBsb3lGcm9udGVuZERlcGxveVN0ZXAobWFpbkJ1aWxkKTtcbiAgICBjb25zdCBwb3N0U3RlcHMgPSBbXTtcbiAgICBpZiAoY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKSB7XG4gICAgICBwb3N0U3RlcHMucHVzaChjYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXApO1xuICAgIH1cbiAgICBpZiAoZnJvbnRlbmREZXBsb3lTdGVwKSB7XG4gICAgICBwb3N0U3RlcHMucHVzaChmcm9udGVuZERlcGxveVN0ZXApO1xuICAgIH1cblxuICAgIGNvZGVQaXBlbGluZS5hZGRTdGFnZShcbiAgICAgIG5ldyBBcHBsaWNhdGlvbih0aGlzLCAnRGVwbG95QXBwbGljYXRpb25TdGFja3MnLCB7XG4gICAgICAgIGFwcFN0YWNrRmFjdG9yeTogcHJvcHMuYXBwU3RhY2tGYWN0b3J5LFxuICAgICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgIHZlcnNpb246IHByb2Nlc3MuZW52LlBJUEVMSU5FX0VYRUNVVElPTl9JRCA/PyAnUElQRUxJTkVfRVhFQ1VUSU9OX0lEIG5vdCBzZXQnLFxuICAgICAgfSksXG4gICAgICB7XG4gICAgICAgIHByZTogc2VjcmV0c0RlcGxveVN0ZXBQcm9wcyA/IFtzZWNyZXRzRGVwbG95U3RlcFByb3BzXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdDogcG9zdFN0ZXBzLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb2RlUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KHN0cmlwQXNzZXRzU3RlcCwgJ3Byb2plY3RfdHlwZScsICdzdHJpcF9hc3NldHMnKTtcbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3Qoc2VjcmV0c0RlcGxveVN0ZXBQcm9wcywgJ3Byb2plY3RfdHlwZScsICdkZXBsb3lfc2VjcmV0cycpO1xuICAgIHRoaXMudGFnQ29kZUJ1aWxkUHJvamVjdChtYWluQnVpbGQsICdwcm9qZWN0X3R5cGUnLCAnYnVpbGQnKTtcbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3QoY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwLCAncHJvamVjdF90eXBlJywgJ2RlcGxveV9jYXBhYmlsaXR5X21vbml0b3JpbmcnKTtcbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3QoZnJvbnRlbmREZXBsb3lTdGVwLCAncHJvamVjdF90eXBlJywgJ2RlcGxveV9mcm9udGVuZCcpO1xuXG4gICAgaWYgKGNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCkge1xuICAgICAgY29uc3QgbW9uaXRvcmluZ1Rlc3RzdWl0ZVJ1bm5lckJ1Y2tldCA9IEJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgJ01vbml0b3JpbmdUZXN0c3VpdGVSdW5uZXJCdWNrZXQnLFxuICAgICAgICBgbW9uaXRvcmluZy10ZXN0c3VpdGUtcnVubmVyLSR7dGhpcy5hY2NvdW50fWBcbiAgICAgICk7XG4gICAgICBtb25pdG9yaW5nVGVzdHN1aXRlUnVubmVyQnVja2V0LmdyYW50V3JpdGUoY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKTtcbiAgICB9XG4gICAgaWYgKGZyb250ZW5kRGVwbG95U3RlcCkge1xuICAgICAgY29uc3QgZnJvbnRlbmRCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUodGhpcywgJ0Zyb250ZW5kQnVja2V0JywgdGhpcy5fZmVhdHVyZXMuZnJvbnRlbmRCdWNrZXROYW1lISEpO1xuICAgICAgZnJvbnRlbmRCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoZnJvbnRlbmREZXBsb3lTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBydWxlID0gbmV3IGV2ZW50cy5SdWxlKHRoaXMsICdQaXBlbGluZVNjaGVkdWxlJywge1xuICAgICAgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZS5leHByZXNzaW9uKHByb3BzLnBpcGVsaW5lU2NoZWR1bGVzPy5tYWluUGlwZWxpbmUgfHwgJ2Nyb24oMCA5ID8gKiAyIzEgKiknKSxcbiAgICB9KTtcbiAgICBydWxlLmFkZFRhcmdldChuZXcgdGFyZ2V0cy5Db2RlUGlwZWxpbmUoY29kZVBpcGVsaW5lLnBpcGVsaW5lKSk7XG5cbiAgICB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldC5ncmFudFJlYWRXcml0ZShtYWluQnVpbGQpO1xuICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZChtYWluQnVpbGQpO1xuICAgIHRoaXMuX3NlcnZpY2VLZXlzdG9yZVBhc3N3b3JkLmdyYW50UmVhZChtYWluQnVpbGQpO1xuICAgIHRoaXMuX2FjY291bnROYW1lUGFyYW1ldGVyLmdyYW50UmVhZChtYWluQnVpbGQpO1xuICAgIHRoaXMuX3RlYW1JZGVudGlmaWVyUGFyYW1ldGVyLmdyYW50UmVhZChtYWluQnVpbGQpO1xuICAgIGlmICh0aGlzLl9mZWF0dXJlcy5rYWZrYUludGVncmF0aW9uKSB7XG4gICAgICB0aGlzLmdyYW50UGVybWlzc2lvbnNGb3JLYWZrYUludGVncmF0aW9uKG1haW5CdWlsZCwgJ0thZmthSW50ZWdyYXRpb25Qb2xpY3knKTtcbiAgICB9XG4gICAgY29kZVBpcGVsaW5lLnBpcGVsaW5lLmFydGlmYWN0QnVja2V0LmdyYW50UmVhZFdyaXRlKHN0cmlwQXNzZXRzU3RlcC5wcm9qZWN0KTtcblxuICAgIGlmICh0aGlzLl9mZWF0dXJlcz8uZW5hYmxlUGlwZWxpbmVNb25pdG9ycykge1xuICAgICAgbmV3IERhdGFkb2dQaXBlbGluZUVycm9yQWxlcnQodGhpcywgJ0RhdGFkb2dQaXBlbGluZUVycm9yTW9uaXRvcicsIHtcbiAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgICBwaXBlbGluZU5hbWU6IHBpcGVsaW5lLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEJyYW5jaFBpcGVsaW5lKGJyYW5jaEJ1aWxkOiBDb2RlQnVpbGRTdGVwKSB7XG4gICAgY29uc3QgYnJhbmNoUGlwZWxpbmUgPSBuZXcgY29kZXBpcGVsaW5lLlBpcGVsaW5lKHRoaXMsICdCcmFuY2hQaXBlbGluZScsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLl9jYWNoZUJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogdGhpcy5fY29kZVBpcGVsaW5lVHlwZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCBicmFuY2hDb2RlUGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZShicmFuY2hQaXBlbGluZSwgJ0NvZGVQaXBlbGluZScsIHtcbiAgICAgIGNvZGVQaXBlbGluZTogYnJhbmNoUGlwZWxpbmUsXG4gICAgICBzeW50aDogYnJhbmNoQnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YoYnJhbmNoUGlwZWxpbmUpLmFkZCgncGlwZWxpbmVfdHlwZScsICdicmFuY2gnKTtcbiAgICBicmFuY2hDb2RlUGlwZWxpbmUuYWRkV2F2ZSgnQnJhbmNoQnVpbGQnKS5hZGRQb3N0KGJyYW5jaEJ1aWxkKTtcbiAgICBicmFuY2hDb2RlUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuXG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KGJyYW5jaEJ1aWxkLCAncHJvamVjdF90eXBlJywgJ2JyYW5jaF9idWlsZCcpO1xuXG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoYnJhbmNoQnVpbGQpO1xuICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgdGhpcy5fc2VydmljZUtleXN0b3JlUGFzc3dvcmQuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcbiAgICB0aGlzLl9hY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuICAgIHRoaXMuX3RlYW1JZGVudGlmaWVyUGFyYW1ldGVyLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzLmthZmthSW50ZWdyYXRpb24pIHtcbiAgICAgIHRoaXMuZ3JhbnRQZXJtaXNzaW9uc0ZvckthZmthSW50ZWdyYXRpb24oYnJhbmNoQnVpbGQsICdCcmFuY2hLYWZrYUludGVncmF0aW9uUG9saWN5Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRWdWxuZXJhYmlsaXR5UGlwZWxpbmUodnVsbmVyYWJpbGl0eUJ1aWxkOiBDb2RlQnVpbGRTdGVwLCBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgY29uc3QgdnVsbmVyYWJpbGl0eVBpcGVsaW5lID0gbmV3IGNvZGVwaXBlbGluZS5QaXBlbGluZSh0aGlzLCAnVnVsbmVyYWJpbGl0eVBpcGVsaW5lJywge1xuICAgICAgYXJ0aWZhY3RCdWNrZXQ6IHRoaXMuX2NhY2hlQnVja2V0LFxuICAgICAgcGlwZWxpbmVUeXBlOiB0aGlzLl9jb2RlUGlwZWxpbmVUeXBlLFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IHZ1bG5lcmFiaWxpdHlDb2RlUGlwZWxpbmUgPSBuZXcgcGlwZWxpbmVzLkNvZGVQaXBlbGluZSh2dWxuZXJhYmlsaXR5UGlwZWxpbmUsICdDb2RlUGlwZWxpbmUnLCB7XG4gICAgICBjb2RlUGlwZWxpbmU6IHZ1bG5lcmFiaWxpdHlQaXBlbGluZSxcbiAgICAgIHN5bnRoOiB2dWxuZXJhYmlsaXR5QnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YodnVsbmVyYWJpbGl0eVBpcGVsaW5lKS5hZGQoJ3BpcGVsaW5lX3R5cGUnLCAndnVsbmVyYWJpbGl0eScpO1xuXG4gICAgdnVsbmVyYWJpbGl0eUNvZGVQaXBlbGluZS5hZGRXYXZlKCdWdWxuZXJhYmlsaXR5Q2hlY2tzJykuYWRkUG9zdCh2dWxuZXJhYmlsaXR5QnVpbGQpO1xuICAgIHZ1bG5lcmFiaWxpdHlDb2RlUGlwZWxpbmUuYnVpbGRQaXBlbGluZSgpO1xuICAgIFRhZ3Mub2YodnVsbmVyYWJpbGl0eUJ1aWxkLnByb2plY3QpLmFkZCgncHJvamVjdF90eXBlJywgJ3Z1bG5lcmFiaWxpdHlfY2hlY2snKTtcbiAgICB0aGlzLl9uaXN0RGF0YU1pcnJvclVybC5ncmFudFJlYWQodnVsbmVyYWJpbGl0eUJ1aWxkKTtcbiAgICBTb25hdHlwZU9zc0luZGV4Q3JlZGVudGlhbHMuYWxsb3dBY2Nlc3NUbyh0aGlzLCB2dWxuZXJhYmlsaXR5QnVpbGQpO1xuXG4gICAgY29uc3QgdnVsbmVyYWJpbGl0eVJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUodGhpcywgJ1Z1bG5lcmFiaWxpdHlQaXBlbGluZVNjaGVkdWxlJywge1xuICAgICAgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZS5leHByZXNzaW9uKHByb3BzLnBpcGVsaW5lU2NoZWR1bGVzPy52dWxuZXJhYmlsaXR5UGlwZWxpbmUgfHwgJ2Nyb24oMCA1ID8gKiBNT04tRlJJICopJyksXG4gICAgfSk7XG4gICAgdnVsbmVyYWJpbGl0eVJ1bGUuYWRkVGFyZ2V0KG5ldyB0YXJnZXRzLkNvZGVQaXBlbGluZSh2dWxuZXJhYmlsaXR5Q29kZVBpcGVsaW5lLnBpcGVsaW5lKSk7XG5cbiAgICBpZiAocHJvcHMuZGF0YWRvZ0FsZXJ0VHlwZSA9PT0gJ29wc2dlbmllJykge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdUaGUgT3BzR2VuaWUgYWxlcnRUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS4gUGxlYXNlIHVzZSB0aGUgdnVsbmVyYWJpbGl0eU5vdGlmaWNhdGlvbiBwcm9wZXJ0eSBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9mZWF0dXJlcz8uZW5hYmxlUGlwZWxpbmVNb25pdG9ycykge1xuICAgICAgbmV3IERhdGFEb2dQaXBlbGluZUVycm9yQWxlcnRGb3JWdWxuZXJhYmlsaXR5Q2hlY2tzKHRoaXMsICdEYXRhRG9nUGlwZWxpbmVFcnJvckZvclZ1bG5lcmFiaWxpdHlDaGVja3NNb25pdG9yJywge1xuICAgICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICAgIHBpcGVsaW5lTmFtZTogdnVsbmVyYWJpbGl0eVBpcGVsaW5lLnBpcGVsaW5lTmFtZSxcbiAgICAgICAgYWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICAgIG5vdGlmaWNhdGlvbjogcHJvcHMudnVsbmVyYWJpbGl0eU5vdGlmaWNhdGlvbixcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RyaXBBc3NldHNTdGVwKHBpcGVsaW5lOiBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKTogQ29kZUJ1aWxkU3RlcCB7XG4gICAgLy8gQ2xvdWRBc3NlbWJseUFydGlmYWN0cyBtdXN0IGJlIHNtYWxsZXIgdGhhbiAyNTZNQi4gRHVlIHRvIHRoZSBncmFkbGUgYXJ0aWZhY3Qgd2UgYXJlIGV4Y2VlZGluZyB0aGlzIGxpbWl0IGFuZCBwaXBlbGluZSBmYWlscyBpbiBkZXBsb3ltZW50IHN0ZXAuXG4gICAgLy8gSXNzdWUgaXMga25vd24gYW5kIG5vdCBmaXhlZCBmb3IgYWxyZWFkeSBzb21lIHllYXJzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvOTkxN1xuICAgIC8vIERpcnR5IGZpeDogQXNzZXRzIGFyZSBhbHJlYWR5IHVwbG9hZGVkIGFuZCB0aHVzIG5vdCBuZWVkZWQuIFJlbW92ZSB0aGVtIGZyb20gcGlwZWxpbmUgYXJ0aWZhY3QuXG4gICAgcmV0dXJuIG5ldyBDb2RlQnVpbGRTdGVwKCdTdHJpcEFzc2V0c0Zyb21Bc3NlbWJseScsIHtcbiAgICAgIGlucHV0OiBwaXBlbGluZS5jbG91ZEFzc2VtYmx5RmlsZVNldCxcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgICdTM19QQVRIPSR7Q09ERUJVSUxEX1NPVVJDRV9WRVJTSU9OI1wiYXJuOmF3czpzMzo6OlwifScsXG4gICAgICAgICdaSVBfQVJDSElWRT0kKGJhc2VuYW1lICRTM19QQVRIKScsXG4gICAgICAgICdybSAtcmZ2IGFzc2V0LionLFxuICAgICAgICAnemlwIC1yIC1xIC1BICRaSVBfQVJDSElWRSAqJyxcbiAgICAgICAgJ2F3cyBzMyBjcCAkWklQX0FSQ0hJVkUgczM6Ly8kUzNfUEFUSCcsXG4gICAgICBdLFxuICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICBidWlsZEltYWdlOiBMaW51eExhbWJkYUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzIwMjNfTk9ERV8yMCxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBTUJEQV8xR0IsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXAoXG4gICAgbWFpbkJ1aWxkOiBDb2RlQnVpbGRTdGVwLFxuICAgIHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHNcbiAgKTogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByb3BzLm1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHMpIHtcbiAgICAgIGNvbnN0IG1vbml0b3JpbmdBcnRpZmFjdHMgPSBPYmplY3Qua2V5cyhwcm9wcy5tb25pdG9yaW5nRGVwbG95U3RlcFByb3BzLm1vbml0b3JpbmdBcnRpZmFjdHMpLm1hcChrZXkgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBtYWluQnVpbGQuYWRkT3V0cHV0RGlyZWN0b3J5KGtleSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5wdXQ6IG91dHB1dCxcbiAgICAgICAgICBmaWxlczogcHJvcHMubW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcyEubW9uaXRvcmluZ0FydGlmYWN0c1trZXldLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFJpb0NhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCh0aGlzLCAnRGVwbG95Q2FwYWJpbGl0eU1vbml0b3JpbmcnLCB7XG4gICAgICAgIG1vbml0b3JpbmdBcnRpZmFjdHM6IG1vbml0b3JpbmdBcnRpZmFjdHMsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlY3JldHNEZXBsb3lTdGVwKHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpOiByaW8uUmlvU2VjcmV0c0RlcGxveVN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcy5zZWNyZXRzRGVwbG95U3RlcFByb3BzKSB7XG4gICAgICByZXR1cm4gbmV3IHJpby5SaW9TZWNyZXRzRGVwbG95U3RlcCh0aGlzLCAnRGVwbG95U2VjcmV0cycsIHtcbiAgICAgICAgLi4ucHJvcHMuc2VjcmV0c0RlcGxveVN0ZXBQcm9wcyxcbiAgICAgICAgaW5wdXQ6IHRoaXMuX2lucHV0TWFzdGVyVHJpZ2dlckZpbGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURlcGxveUZyb250ZW5kRGVwbG95U3RlcChtYWluQnVpbGQ6IENvZGVCdWlsZFN0ZXApOiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2ZlYXR1cmVzLmZyb250ZW5kQnVja2V0TmFtZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZnJvbnRlbmRCdWlsZE91dHB1dCA9IG1haW5CdWlsZC5hZGRPdXRwdXREaXJlY3RvcnkoJ2J1aWxkJyk7XG4gICAgcmV0dXJuIG5ldyBDb2RlQnVpbGRTdGVwKCdEZXBsb3lGcm9udGVuZCcsIHtcbiAgICAgIGlucHV0OiBmcm9udGVuZEJ1aWxkT3V0cHV0LFxuICAgICAgYnVpbGRFbnZpcm9ubWVudDoge1xuICAgICAgICBidWlsZEltYWdlOiBMaW51eExhbWJkYUJ1aWxkSW1hZ2UuQU1BWk9OX0xJTlVYXzIwMjNfTk9ERV8yMCxcbiAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBTUJEQV8xR0IsXG4gICAgICB9LFxuICAgICAgY29tbWFuZHM6IFtcbiAgICAgICAgYGF3cyBzMyBzeW5jIC0tZXhjbHVkZSBpbmRleC5odG1sIC0tY2FjaGUtY29udHJvbCBtYXgtYWdlPTMxNTM2MDAwIC4vICdzMzovLyR7dGhpcy5fZmVhdHVyZXMuZnJvbnRlbmRCdWNrZXROYW1lfSdgLFxuICAgICAgICBgYXdzIHMzIGNwIC0tY2FjaGUtY29udHJvbCBuby1jYWNoZSBpbmRleC5odG1sICdzMzovLyR7dGhpcy5fZmVhdHVyZXMuZnJvbnRlbmRCdWNrZXROYW1lfSdgLFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRQZXJtaXNzaW9uc0ZvckthZmthSW50ZWdyYXRpb24oYnVpbGRQcm9qZWN0OiBSaW9Db2RlQnVpbGRQcm9qZWN0LCBwb2xpY3lJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVpbGRQcm9qZWN0Um9sZSA9IGJ1aWxkUHJvamVjdC5wcm9qZWN0LnJvbGU7XG4gICAgaWYgKGJ1aWxkUHJvamVjdFJvbGUpIHtcbiAgICAgIGJ1aWxkUHJvamVjdFJvbGUuYWRkTWFuYWdlZFBvbGljeShcbiAgICAgICAgTWFuYWdlZFBvbGljeS5mcm9tTWFuYWdlZFBvbGljeUFybih0aGlzLCBwb2xpY3lJZCwgRm4uaW1wb3J0VmFsdWUoJ2thZmthLWludGVncmF0aW9uLXBvbGljeS1hcm4nKSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGFkZCBtYW5hZ2VkIHBvbGljeSBmb3Iga2Fma2EtaW50ZWdyYXRpb24gdG8gQ29kZUJ1aWxkIHByb2plY3Qgb2YgJHtidWlsZFByb2plY3QuaWR9IGR1ZSB0byBtaXNzaW5nIHJvbGUuYFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRCdWlsZFNwZWNGcm9tRmlsZShidWlsZFNwZWNQYXRoPzogc3RyaW5nKTogQnVpbGRTcGVjIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWJ1aWxkU3BlY1BhdGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBCdWlsZFNwZWMuZnJvbU9iamVjdCh5YW1sLmxvYWQoZnMucmVhZEZpbGVTeW5jKGJ1aWxkU3BlY1BhdGgsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkpIGFzIE9iamVjdCk7XG4gIH1cblxuICBwcml2YXRlIHRhZ0NvZGVCdWlsZFByb2plY3QocHJvamVjdDogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAocHJvamVjdCkge1xuICAgICAgVGFncy5vZihwcm9qZWN0LnByb2plY3QpLmFkZChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
434
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUvcGlwZWxpbmUtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBbUY7QUFDbkYsNkRBQTRHO0FBQzVHLDZEQUE2RDtBQUM3RCw2RUFBNkU7QUFDN0UsaURBQWlEO0FBQ2pELDBEQUEwRDtBQUMxRCxpREFBb0Q7QUFFcEQseUNBQXlDO0FBQ3pDLCtDQUFxRDtBQUNyRCwyQ0FBMkM7QUFFM0MsbURBQW1EO0FBQ25ELHFEQUEwRTtBQUUxRSx5QkFBeUI7QUFDekIsZ0NBQWdDO0FBQ2hDLDZCQUE2QjtBQUc3QixzQ0FBMkQ7QUFDM0Qsc0NBQXNDO0FBQ3RDLDBDQUFpRTtBQUNqRSwyREFBa0Q7QUFDbEQsbURBQXNEO0FBQ3RELDZDQUFpRjtBQUNqRix5REFBZ0g7QUFDaEgscUVBQTZFO0FBMkw3RSxJQUFZLFlBcUNYO0FBckNELFdBQVksWUFBWTtJQUN0Qjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxtREFBbUMsQ0FBQTtJQUNuQzs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0gsK0RBQStDLENBQUE7SUFDL0M7Ozs7O09BS0c7SUFDSCxtRUFBbUQsQ0FBQTtBQUNyRCxDQUFDLEVBckNXLFlBQVksNEJBQVosWUFBWSxRQXFDdkI7QUFtQkQsTUFBYSxhQUFjLFNBQVEsbUJBQUs7SUFrQnRDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBeUI7UUFDakUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLCtCQUErQjtRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxD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O0lBQ0wsQ0FBQztJQUVPLG1DQUFtQyxDQUFDLFlBQWlDLEVBQUUsUUFBZ0I7UUFDN0YsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUNuRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQy9CLHVCQUFhLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxnQkFBRSxDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQ25HLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sS0FBSyxDQUNULDhFQUE4RSxZQUFZLENBQUMsRUFBRSx1QkFBdUIsQ0FDckgsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8scUJBQXFCLENBQUMsYUFBc0I7UUFDbEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLHlCQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBVyxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVPLG1CQUFtQixDQUFDLE9BQWtDLEVBQUUsR0FBVyxFQUFFLEtBQWE7UUFDeEYsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLGtCQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDOztBQTdkSCxzQ0E4ZEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgRm4sIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBTdGFja1Byb3BzLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQnVpbGRFbnZpcm9ubWVudCwgQnVpbGRTcGVjLCBDb21wdXRlVHlwZSwgTGludXhMYW1iZGFCdWlsZEltYWdlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVidWlsZCc7XG5pbXBvcnQgKiBhcyBjb2RlcGlwZWxpbmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVwaXBlbGluZSc7XG5pbXBvcnQgKiBhcyBjb2RlcGlwZWxpbmVfYWN0aW9ucyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZXBpcGVsaW5lLWFjdGlvbnMnO1xuaW1wb3J0ICogYXMgZXZlbnRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMnO1xuaW1wb3J0ICogYXMgdGFyZ2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0IHsgTWFuYWdlZFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgSUhvc3RlZFpvbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1Myc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgQnVja2V0LCBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHNzbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCB7IElTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCAqIGFzIHBpcGVsaW5lcyBmcm9tICdhd3MtY2RrLWxpYi9waXBlbGluZXMnO1xuaW1wb3J0IHsgQ29kZUJ1aWxkU3RlcCwgQ29kZVBpcGVsaW5lU291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvcGlwZWxpbmVzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEYXRhZG9nQWxlcnRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YWRvZyc7XG5pbXBvcnQgeyBJTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZGF0YWRvZ3YyJztcbmltcG9ydCB7IFNvbmF0eXBlT3NzSW5kZXhDcmVkZW50aWFscyB9IGZyb20gJy4uLy4uLy4uL2lhbSc7XG5pbXBvcnQgKiBhcyByaW8gZnJvbSAnLi4vLi4vLi4vaW5kZXgnO1xuaW1wb3J0IHsgQ2xhaWRvbWV0ZXIsIENsYWlkb21ldGVyUHJvZHVjdCB9IGZyb20gJy4uLy4uLy4uL2luZGV4JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9hcHBsaWNhdGlvbi1zdGFnZSc7XG5pbXBvcnQgeyBSaW9Db2RlQnVpbGRQcm9qZWN0IH0gZnJvbSAnLi9idWlsZC1wcm9qZWN0JztcbmltcG9ydCB7IGNyZWF0ZU1haW5CdWlsZFNwZWMsIGNyZWF0ZVZ1bG5lcmFiaWxpdHlCdWlsZFNwZWMgfSBmcm9tICcuL2J1aWxkc3BlY3MnO1xuaW1wb3J0IHsgRGF0YURvZ1BpcGVsaW5lRXJyb3JBbGVydEZvclZ1bG5lcmFiaWxpdHlDaGVja3MsIERhdGFkb2dQaXBlbGluZUVycm9yQWxlcnQgfSBmcm9tICcuL2RhdGFkb2ctbW9uaXRvcnMnO1xuaW1wb3J0IHsgUmlvQ2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwIH0gZnJvbSAnLi9tb25pdG9yaW5nLWRlcGxveS1zdGVwJztcblxuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVNjaGVkdWxlc1Byb3BzIHtcbiAgcmVhZG9ubHkgbWFpblBpcGVsaW5lPzogc3RyaW5nO1xuICByZWFkb25seSB2dWxuZXJhYmlsaXR5UGlwZWxpbmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQHN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lU3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2VcbiAgICogLSBUaGlzIGhhcyB0byBiZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSByZXBvc2l0b3J5IGFzIHRoZSBzMyB0cmlnZ2VyIGZpbGUgY3JlYXRlZCBieSB0aGUgYml0YnVja2V0LWludGVncmF0aW9uIHVzZXMgdGhpcyBhcyBhIHByZWZpeFxuICAgKiAtIFRoZSBzZXJ2aWNlTmFtZSBpcyBhdmFpbGFibGUgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgU0VSVklDRV9OQU1FIGluIHRoZSBDb2RlQnVpbGRTdGVwXG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGF2YWlsYWJsZSBpbiB0aGUgQXBwU3RhY2tQcm9wcyBpbiB0aGUgYXBwU3RhY2tGYWN0b3J5XG4gICAqIC0gVGhlIHNlcnZpY2VOYW1lIGlzIGF2YWlsYWJsZSBhcyBzdGFja05hbWUgcHJvcGVydHkgaW4gdGhlIEFwcFN0YWNrUHJvcHMgaW4gdGhlIGFwcFN0YWNrRmFjdG9yeS4gSS5lLiB0aGUgc3RhY2sgaXMgbmFtZWQgYWZ0ZXIgdGhlIHNlcnZpY2VcbiAgICogLSBUaGUgc2VydmljZU5hbWUgaXMgaGFuZGVkIG92ZXIgdG8gYWxsIERhdGFkb2cgbW9uaXRvcnNcbiAgICogLSBSSU8gY29udmVudGlvbiBpcyB0aGF0IHVwbG9hZGVkIGxpY2Vuc2UtY2hlY2stZmlsZXMgYXJlIG5hbWVkIGFmdGVyIHRoZSBzZXJ2aWNlLCBpLmUuIHNlcnZpY2VOYW1lLnR4dFxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUHJvdmlkZXIgZm9yIGFwcFN0YWNrIHRvIGJlIGRlcGxveWVkLlxuICAgKlxuICAgKiBUaGlzIGFjdHMgYXMgYSB3cmFwcGVyIGZvciBhbGwgcmVzb3VyY2VzIHlvdSB3YW50IHRvIGRlcGxveSB2aWEgdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwU3RhY2tGYWN0b3J5OiBJQXBwU3RhY2tGYWN0b3J5O1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHdoaWNoIGtpbmQgb2YgcGlwZWxpbmUgaXMgZGVwbG95ZWQuXG4gICAqXG4gICAqIFVzZSB0aGUgZmVhdHVyZXMgdG8gY29tYmluZSBkaWZmZXJlbnQgb3BpbmlvbmF0ZWQsIFJJTy1zcGVjaWZpYyBwaXBlbGluZSBmZWF0dXJlcyBzdWNoIGFzIGFkZGluZyBhIGJyYW5jaCBwaXBlbGluZSBvciBzdXBwb3J0aW5nIEthZmthLlxuICAgKi9cbiAgcmVhZG9ubHkgZmVhdHVyZXM/OiBQaXBlbGluZUZlYXR1cmVzO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBmZWF0dXJlc2AgcHJvcGVydHkgaW5zdGVhZC4gRm9yIG5vdywgdGhlIHBpcGVsaW5lIHR5cGVzIGFyZSBtYXBwZWQgdG8gdGhlIGZlYXR1cmVzLlxuICAgKiBEZWZpbmVzIHdoaWNoIGtpbmQgb2YgcGlwZWxpbmUgaXMgZGVwbG95ZWQuXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZVR5cGU/OiBQaXBlbGluZVR5cGU7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgaG93IG9mdGVuIHRoZSBwaXBlbGluZSBpcyB0cmlnZ2VyZWQgYXV0b21hdGljYWxseS4gSXMgZGVmaW5lZCB2aWEgYSBjcm9uIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRXYXRjaC9sYXRlc3QvZXZlbnRzL1NjaGVkdWxlZEV2ZW50cy5odG1sXG4gICAqXG4gICAqIERlZmF1bHQgdmFsdWVzOlxuICAgKiAtIG1haW4gcGlwZWxpbmU6IGNyb24oMCA5ID8gKiAyIzEgKilcbiAgICogLSB2dWxuZXJhYmlsaXR5IHBpcGVsaW5lOiBjcm9uKDAgNSA/ICogTU9OLUZSSSAqKVxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVTY2hlZHVsZXM/OiBQaXBlbGluZVNjaGVkdWxlc1Byb3BzO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHNlY3JldHMgZmlsZSBjb250YWluaW5nIGVuY3J5cHRlZCBzZWNyZXRzLlxuICAgKlxuICAgKiBUaGUgUmlvU2VjcmV0c0RlcGxveVN0ZXAgaXMgYWRkZWQgcHJpb3IgdG8gZGVwbG95bWVudCBvZiB0aGUgQXBwU3RhY2sgaWYgYSBwYXRoIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBObyBzZWNyZXRzIGFyZSBkZXBsb3llZCBpZiBubyBwYXRoIGlzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0c0RlcGxveVN0ZXBQcm9wcz86IFBpcGVsaW5lU3RhY2tSaW9TZWNyZXRzRGVwbG95U3RlcFByb3BzO1xuXG4gIC8qKlxuICAgKiBDb2RlQnVpbGQgb3B0aW9ucyBvdmVycmlkaW5nIHRoZSByaW8tc3BlY2lmaWMgZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBjb2RlQnVpbGRPcHRpb25zPzogQ29kZUJ1aWxkT3B0aW9ucztcbiAgLyoqXG4gICAqIElmIHByZXNlbnQsIHRoZSBjYXBhYmlsaXR5IG1vbml0b3JpbmcgZGVwbG95IHN0ZXAgaXMgYWRkZWQgdG8gdGhlIHBpcGVsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcz86IFBpcGVsaW5lU3RhY2tSaW9Nb25pdG9yaW5nRGVwbG95U3RlcFByb3BzO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSB0aGUgYHZ1bG5lcmFiaWxpdHlOb3RpZmljYXRpb25gIHByb3BlcnR5IGluc3RlYWQuXG4gICAqIElmIGBvcHNnZW5pZWAgaXMgc3BlY2lmaWVkLCBhbiBFeGNlcHRpb24gaXMgdGhyb3duLCBhcyB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFkb2dBbGVydFR5cGU/OiBEYXRhZG9nQWxlcnRUeXBlO1xuICAvKipcbiAgICogTm90aWZpY2F0aW9uIHR5cGUgZm9yIHRoZSBhdXRvLWdlbmVyYXRlZCB2dWxuZXJhYmlsaXR5IHBpcGVsaW5lIG1vbml0b3IuIERlZmF1bHRzIHRvIHNsYWNrLlxuICAgKi9cbiAgcmVhZG9ubHkgdnVsbmVyYWJpbGl0eU5vdGlmaWNhdGlvbj86IElOb3RpZmljYXRpb247XG4gIC8qKlxuICAgKiBDb2RlUGlwZWxpbmUgUGlwZWxpbmVUeXBlIChWMSBvciBWMikuIERlZmF1bHRzIHRvIFYxLlxuICAgKi9cbiAgcmVhZG9ubHkgY29kZVBpcGVsaW5lVHlwZT86IGNvZGVwaXBlbGluZS5QaXBlbGluZVR5cGU7XG59XG5cbi8qKlxuICogUHJvdmlkZXIgaW50ZXJmYWNlIHRvIGNyZWF0ZSB0aGUgQXBwU3RhY2sgd2l0aGluIHRoZSBzcGVjaWZpYyBzY29wZVxuICpcbiAqIFNpbXBseSBwbGFjZSB0aGUgQXBwU3RhY2sgY3JlYXRpb24gaW50byB0aGUgY3JlYXRlLW1ldGhvZDpcbiAqIEBleGFtcGxlXG4gKlxuICogLy8gVXNlIGUuZy4gd2l0aGluIEFwcGxpY2F0aW9uUHJvcHMgYXMgSlNPTk9iamVjdDpcbiAqIFxceyBjcmVhdGU6IChjb25zdHJ1Y3QsIHByb3BzKSA9XFw+IG5ldyBTdGFjayhjb25zdHJ1Y3QsICdBcHBTdGFjaycsIHByb3BzKSBcXH1cbiAqXG4gKiAvLyBvciBzaW1wbHkgYXMgY2xhc3MgaW50ZXJmYWNlIHdpdGhpbiB5b3VyIHN0YWNrIGltcGxlbWVudGF0aW9uOlxuICogY2xhc3MgUGlwZWxpbmVTdGFnZSBleHRlbmRzIFN0YWdlIGltcGxlbWVudHMgSUFwcFN0YWNrRmFjdG9yeSBcXHtcbiAqICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YWdlUHJvcHMpIFxce1xuICogICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICogICAgIC8vIHlvdXIgc3RhZ2UgZGVmaW5pdGlvblxuICogICBcXH1cbiAqXG4gKiAgIGNyZWF0ZShzY29wZTogQ29uc3RydWN0LCBwcm9wczogQXBwU3RhY2tQcm9wcyk6IHZvaWQgXFx7XG4gKiAgICAgLy8gYXBwIHN0YWNrIGluaXRpYXRpb24gZ29lcyBpbiBoZXJlXG4gKiAgIFxcfVxuICogXFx9XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcFN0YWNrRmFjdG9yeSB7XG4gIC8qKlxuICAgKiBGYWN0b3J5IG1ldGhvZCwgYmVpbmcgaW52b2tlZCB3aXRoIHRoZSBzcGVjaWZpYyBzY29wZSBkdXJpbmcgcGlwZWxpbmUgaW5zdGFudGlhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgcGFyZW50IGNvbnN0cnVjdCBmb3IgdGhlIGFwcCBzdGFja1xuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgYXBwIHN0YWNrcyBwcm9wZXJ0aWVzXG4gICAqL1xuICBjcmVhdGUoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEFwcFN0YWNrUHJvcHMpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcFN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlbGVjdGVkIHByb3BlcnRpZXMgYmVpbmcgaGFuZGVkIG92ZXIgdG8gUmlvU2VjcmV0c0RlcGxveVN0ZXAuXG4gKlxuICogQHNlZSByaW8uUmlvU2VjcmV0c0RlcGxveVN0ZXBcbiAqIEBzZWUgcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwUHJvcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWNrUmlvU2VjcmV0c0RlcGxveVN0ZXBQcm9wcyB7XG4gIHJlYWRvbmx5IHNlY3JldHNGaWxlUGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lU3RhY2tSaW9Nb25pdG9yaW5nRGVwbG95U3RlcFByb3BzIHtcbiAgLyoqXG4gICAqIE1hcCBcXHtkaXJlY3Rvcnk6IGZpbGVuYW1lc1xcfSBjb250YWluaW5nICAuamFyIG9yIC56aXAgZmlsZXMgY3JlYXRlZCBpbiBtYWluIGJ1aWxkIHN0ZXAgdG8gYmUgdXBsb2FkZWQgdG8gdGhlIG1vbml0b3JpbmctdGVzdHN1aXRlLXJ1bm5lciBidWNrZXQsIGUuZy5cbiAgICogYGBgXG4gICAqIHtcbiAgICogICdhdmFpbGFiaWxpdHktbW9uaXRvcmluZy9idWlsZC9saWJzJzogWydmb28tYXZhaWxhYmlsaXR5LmphciddLFxuICAgKiAgJ3BlcmZvcm1hbmNlLW1vbml0b3JpbmcvYnVpbGQvbGlicyc6IFsnYXBpLWNoZWNrLnppcCcsICdmb28tcGVyZm9ybWFuY2UuamFyJ10sXG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICByZWFkb25seSBtb25pdG9yaW5nQXJ0aWZhY3RzOiB7IFtkaXJlY3Rvcnk6IHN0cmluZ106IHN0cmluZ1tdIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVGZWF0dXJlcyB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBicmFuY2ggcGlwZWxpbmUgdXNlZCBieSByZW5vdmF0ZS4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoUGlwZWxpbmU/OiBib29sZWFuO1xuICAvKipcbiAgICogQ3JlYXRlIGEgdnVsbmVyYWJpbGl0eSBwaXBlbGluZSB0byBzY2FuIGRlcGVuZGVuY2llcyBmb3IgdnVsbmVyYWJpbGl0aWVzLiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAqL1xuICByZWFkb25seSB2dWxuZXJhYmlsaXR5UGlwZWxpbmU/OiBib29sZWFuO1xuICAvKipcbiAgICogUnVuIGEgc3RhbmRhcmQgZ3JhZGxlIGJ1aWxkIGluIHRoZSByZXBvc2l0b3J5IHJvb3QuIERlZmF1bHRzIHRvIGBmYWxzZWA6XG4gICAqIC0gYnVpbGQgYW5kIHRlc3Qgb2YgdGhlIGFydGlmYWN0IHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGNsZWFuIGJ1aWxkXCJcbiAgICogLSBsaWNlbnNlLWNoZWNrIGFuZCB1cGxvYWQgb2YgbGljZW5zZS1jaGVjay1maWxlIHVzaW5nIEByaW8tY2xvdWQvcmlvLWxpY2Vuc2UtY2hlY2tlci5cbiAgICogLSBjcmVhdGUgYSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0byBtYWtlIFRMUyBjb21tdW5pY2F0aW9uIHBvc3NpYmxlLCBlLmcuIHdpdGggYSBsb2FkYmFsYW5jZXJcbiAgICogLSBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGppYkJ1aWxkVGFyXCJcbiAgICovXG4gIHJlYWRvbmx5IGdyYWRsZUJ1aWxkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFJ1biBhIHN0YW5kYXJkIG5wbSBidWlsZCBpbiB0aGUgcmVwb3NpdG9yeSByb290LiBEZWZhdWx0cyB0byBgZmFsc2VgOlxuICAgKiAtIHJ1biBsaW50ZXIgdmlhIGNvbW1hbmQgXCJucG0gcnVuIGxpbnRcIlxuICAgKiAtIHJ1biB0ZXN0cyB2aWEgY29tbWFuZCBcIm5wbSBydW4gdGVzdDpjaVwiXG4gICAqIC0gcnVuIGEgbGljZW5zZSBjaGVjayBieSBjYWxsaW5nIHRoZSBzY3JpcHQgXCJjaGVjay1vc3MtbGljZW5zZXMuc2hcIiAoZnJvbSB0aGUgUklPIGZyb250ZW5kIHRlbXBsYXRlKVxuICAgKiAtIGJ1aWxkIHRoZSBhcnRpZmFjdCB2aWEgY29tbWFuZCBcIm5wbSBydW4gYnVpbGRcIlxuICAgKi9cbiAgcmVhZG9ubHkgbnBtQnVpbGQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQWRkIHJlcXVpcmVkIHN0ZXBzIGFuZCBwZXJtaXNzaW9ucyB0byBzdXBwb3J0IEthZmthLiBDdXJyZW50bHksIHRoaXMgcmVxdWlyZXMgYGdyYWRsZUJ1aWxkYCB0byBiZSBzZXQgdG8gYHRydWVgLiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgcmVhZG9ubHkga2Fma2FJbnRlZ3JhdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTMyBCdWNrZXQgdG8gZGVwbG95IGZyb250ZW5kIHRvLiBSZXF1aXJlcyBgbnBtQnVpbGRgIHRvIGJlIHNldCB0byBgdHJ1ZWAuIElmIHNldCwgdGhlIG91dHB1dCBvZiB0aGUgbnBtIGJ1aWxkIGlzIGRlcGxveWVkIHRvIHRoZSBwcm92aWRlZCBidWNrZXQuXG4gICAqL1xuICByZWFkb25seSBmcm9udGVuZEJ1Y2tldE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGJ1aWxkIGNvbW1hbmRzIGZvciBtYWluIGFuZCBicmFuY2ggcGlwZWxpbmUuIFdpbGwgYmUgYWRkZWQgYWZ0ZXIgYWxsIGJ1aWxkICYgdGVzdCBjb21tYW5kcywgYmVmb3JlIHRoZSBpbmZyYXN0cnVjdHVyZSBidWlsZC4gRG9lcyBub3Qgd29yayB3aXRoIHBhcnRpYWxCdWlsZHNwZWMuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQnVpbGRDb21tYW5kcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogSWYgc2V0IHRvIGZhbHNlLCBubyBEYXRhZG9nIG1vbml0b3JzIGZvciBtYWluIGFuZCB2dWxuZXJhYmlsaXR5IHBpcGVsaW5lcyB3aWxsIGJlIGNyZWF0ZWQuIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSBlbmFibGVQaXBlbGluZU1vbml0b3JzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGVudW0gUGlwZWxpbmVUeXBlIHtcbiAgLyoqXG4gICAqIFNlbGYtbXV0YXRpbmcgY29kZXBpcGVsaW5lIGRlcGxveWluZyB0aGUgcHJvdmlkZWQgQXBwU3RhY2suIEJlIGF3YXJlOiBUaGUgcHJvdmlkZWQgc2VydmljZSB3b24ndCBoYXZlIGFjY2VzcyB0byBLYWZrYS5cbiAgICpcbiAgICogQ29tZXMgd2l0aCBhIHByZS1kZWZpbmVkIGJ1aWxkc3BlYy55YW1sIGZvciBhIGdyYWRsZSBwcm9qZWN0LiBUaGlzIGJ1aWxkc3BlYy55YW1sIGlzIHVzZWQgZm9yIGJvdGggdGhlIG1haW4gYW5kXG4gICAqIGJyYW5jaCBwaXBlbGluZSBhbmQgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBzdGVwc1xuICAgKiAtIGJ1aWxkIGFuZCB0ZXN0IG9mIHRoZSBhcnRpZmFjdCB2aWEgY29tbWFuZCBcIi4vZ3JhZGxldyBjbGVhbiBidWlsZFwiLlxuICAgKiA8cD4gVGhpcyBncmFkbGUgY29tbWFuZCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBncmFkbGUgcHJvamVjdC5cbiAgICogLSBsaWNlbnNlLWNoZWNrIGFuZCB1cGxvYWQgb2YgbGljZW5zZS1jaGVjay1maWxlIHVzaW5nIEByaW8tY2xvdWQvcmlvLWxpY2Vuc2UtY2hlY2tlci5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqIC0gY3JlYXRlIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUgdG8gbWFrZSBUTFMgY29tbXVuaWNhdGlvbiBwb3NzaWJsZSwgZS5nLiB3aXRoIGEgbG9hZGJhbGFuY2VyLlxuICAgKiAtIGJ1aWxkIHRoZSBjb250YWluZXIgaW1hZ2UgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgamliQnVpbGRUYXJcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqL1xuICBTVEFOREFSRF9HUkFETEUgPSAnU1RBTkRBUkRfR1JBRExFJyxcbiAgLyoqXG4gICAqIFNlbGYtbXV0YXRpbmcgY29kZXBpcGVsaW5lIGRlcGxveWluZyB0aGUgcHJvdmlkZWQgQXBwU3RhY2sgd2l0aCBhZGRpdGlvbmFsIHN0ZXBzIG5lZWRlZCB0byBhY2Nlc3MgS2Fma2EuXG4gICAqXG4gICAqIENvbWVzIHdpdGggYSBwcmUtZGVmaW5lZCBidWlsZHNwZWMueWFtbCBmb3IgYSBncmFkbGUgcHJvamVjdC4gVGhpcyBidWlsZHNwZWMueWFtbCBpcyB1c2VkIGZvciBib3RoIHRoZSBtYWluIGFuZFxuICAgKiBicmFuY2ggcGlwZWxpbmUgYW5kIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgc3RlcHNcbiAgICogLSBidWlsZCBhbmQgdGVzdCBvZiB0aGUgYXJ0aWZhY3QgdmlhIGNvbW1hbmQgXCIuL2dyYWRsZXcgY2xlYW4gYnVpbGRcIi5cbiAgICogPHA+IFRoaXMgZ3JhZGxlIGNvbW1hbmQgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgZ3JhZGxlIHByb2plY3QuXG4gICAqIC0gbGljZW5zZS1jaGVjayBhbmQgdXBsb2FkIG9mIGxpY2Vuc2UtY2hlY2stZmlsZSB1c2luZyBAcmlvLWNsb3VkL3Jpby1saWNlbnNlLWNoZWNrZXIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKiAtIGNyZWF0ZSBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIHRvIG1ha2UgVExTIGNvbW11bmljYXRpb24gcG9zc2libGUsIGUuZy4gd2l0aCBhIGxvYWRiYWxhbmNlci5cbiAgICogLSByZXF1ZXN0IGEgY2VydGlmaWNhdGUgdG8gYXV0aGVudGljYXRlIGFnYWluc3QgS2Fma2EgdmlhIG11dHVhbCBUTFNcbiAgICogLSBidWlsZCB0aGUgY29udGFpbmVyIGltYWdlIHZpYSBjb21tYW5kIFwiLi9ncmFkbGV3IGppYkJ1aWxkVGFyXCIuXG4gICAqIDxwPiBUaGlzIGdyYWRsZSBjb21tYW5kIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGdyYWRsZSBwcm9qZWN0LlxuICAgKi9cbiAgU1RBTkRBUkRfR1JBRExFX0tBRktBID0gJ1NUQU5EQVJEX0dSQURMRV9LQUZLQScsXG4gIC8qKlxuICAgKiBTZWxmLW11dGF0aW5nIGNvZGVwaXBlbGluZSBkZXBsb3lpbmcgdGhlIHByb3ZpZGVkIEFwcFN0YWNrLlxuICAgKlxuICAgKiBDb21lcyB3aXRoIGEgcHJlLWRlZmluZWQgYnVpbGRzcGVjLnlhbWwgdG8gc3ludGhlc2l6ZSB0aGUgQXBwU3RhY2suXG4gICAqIE5vIGJyYW5jaCBvciB2dWxuZXJhYmlsaXR5IHBpcGVsaW5lIGlzIGNyZWF0ZWQuXG4gICAqL1xuICBTVEFOREFSRF9JTkZSQVNUUlVDVFVSRSA9ICdTVEFOREFSRF9JTkZSQVNUUlVDVFVSRScsXG59XG5cbi8qKlxuICogQHBhcmFtIHBhcnRpYWxCdWlsZFNwZWNQYXRoIC0gUGF0aCB0byBhIGN1c3RvbSBidWlsZC1zcGVjIGZpbGUgdG8gdXNlIGZvciB0aGUgbWFpbiBhbmQgYnJhbmNoIHBpcGVsaW5lLlxuICogQSBwcmUtZGVmaW5lZCBidWlsZHNwZWMueWFtbCBmaXR0aW5nIHRoZSBwaXBlbGluZVR5cGUgaXMgdXNlZCBpZiBub3QgcHJvdmlkZWQuXG4gKiBAcGFyYW0gdnVsbmVyYWJpbGl0eVBhcnRpYWxCdWlsZFNwZWNQYXRoIC0gUGF0aCB0byBhIGN1c3RvbSBidWlsZC1zcGVjIGZpbGUgdG8gdXNlIGZvciB0aGUgdnVsbmVyYWJpbGl0eSBwaXBlbGluZS5cbiAqIEEgcHJlLWRlZmluZWQgdnVsbmVyYWJpbGl0eSBidWlsZHNwZWMueWFtbCBmaXR0aW5nIHRoZSBwaXBlbGluZVR5cGUgaXMgdXNlZCBpZiBub3QgcHJvdmlkZWQuXG4gKiBAcGFyYW0gYnVpbGRFbnZpcm9ubWVudCAtIEN1c3RvbSBDb2RlQnVpbGQgYnVpbGQgZW52aXJvbm1lbnQgb3ZlcnJpZGluZyB0aGUgcmlvLXNwZWNpZmljIGRlZmF1bHRzLiBUaGUgZGVmYXVsdHMgYXJlOlxuICogICAgICAgICAgYnVpbGRJbWFnZTogQU1BWk9OX0xJTlVYXzJfNVxuICogICAgICAgICAgY29tcHV0ZVR5cGU6IExBUkdFXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUJ1aWxkT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHBhcnRpYWxCdWlsZFNwZWNQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSB2dWxuZXJhYmlsaXR5UGFydGlhbEJ1aWxkU3BlY1BhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJ1aWxkRW52aXJvbm1lbnQ/OiBCdWlsZEVudmlyb25tZW50O1xuICByZWFkb25seSBub2RlanNWZXJzaW9uPzogc3RyaW5nO1xuICByZWFkb25seSBucG1WZXJzaW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmVhdHVyZXM6IFBpcGVsaW5lRmVhdHVyZXM7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21haW5Db2RlQnVpbGRQcm9qZWN0OiBDb2RlQnVpbGRTdGVwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9icmFuY2hDb2RlQnVpbGRQcm9qZWN0OiBDb2RlQnVpbGRTdGVwIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF92dWxuZXJhYmlsaXR5Q29kZUJ1aWxkUHJvamVjdDogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfYnVja2V0OiBJQnVja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYWNoZUJ1Y2tldDogSUJ1Y2tldDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaG9zdGVkWm9uZTogSUhvc3RlZFpvbmU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lucHV0TWFzdGVyVHJpZ2dlckZpbGU6IENvZGVQaXBlbGluZVNvdXJjZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXRCcmFuY2hUcmlnZ2VyRmlsZTogQ29kZVBpcGVsaW5lU291cmNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlcjogSVN0cmluZ1BhcmFtZXRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb3NzTGljZW5zZXNCdWNrZXQ6IElCdWNrZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlcnZpY2VLZXlzdG9yZVBhc3N3b3JkOiBJU3RyaW5nUGFyYW1ldGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY2NvdW50TmFtZVBhcmFtZXRlcjogSVN0cmluZ1BhcmFtZXRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVhbUlkZW50aWZpZXJQYXJhbWV0ZXI6IElTdHJpbmdQYXJhbWV0ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25pc3REYXRhTWlycm9yVXJsOiBJU3RyaW5nUGFyYW1ldGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb2RlUGlwZWxpbmVUeXBlOiBjb2RlcGlwZWxpbmUuUGlwZWxpbmVUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuX2ZlYXR1cmVzID0gdGhpcy5wYXJzZUZlYXR1cmVzKHByb3BzKTtcblxuICAgIC8vIHBvcHVsYXRlIGV4dGVybmFsIHBhcmFtZXRlcnNcbiAgICB0aGlzLl9idWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUodGhpcywgJ1RyaWdnZXJCdWNrZXQnLCBGbi5pbXBvcnRWYWx1ZSgnYml0YnVja2V0LWludGVncmF0aW9uLXMzLWJ1Y2tldCcpKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGhpcywgJ0NhY2hlQnVja2V0Jywge1xuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgICBsaWZlY3ljbGVSdWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXhwaXJhdGlvbjogRHVyYXRpb24uZGF5cygzMCksXG4gICAgICAgICAgYWJvcnRJbmNvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkQWZ0ZXI6IER1cmF0aW9uLmRheXMoNyksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIHRoaXMuX2hvc3RlZFpvbmUgPSByaW8uUmlvTGFuZGluZ1pvbmUuZ2V0RGVmYXVsdEhvc3RlZFpvbmUodGhpcyk7XG4gICAgdGhpcy5faW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSA9IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2UuczMoXG4gICAgICB0aGlzLl9idWNrZXQsXG4gICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0vdHJpZ2dlci8ke3Jpby5UcmlnZ2VyS2V5Lk1BU1RFUl9SRVBPfWAsXG4gICAgICB7IHRyaWdnZXI6IGNvZGVwaXBlbGluZV9hY3Rpb25zLlMzVHJpZ2dlci5FVkVOVFMgfVxuICAgICk7XG4gICAgdGhpcy5faW5wdXRCcmFuY2hUcmlnZ2VyRmlsZSA9IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmVTb3VyY2UuczMoXG4gICAgICB0aGlzLl9idWNrZXQsXG4gICAgICBgJHtwcm9wcy5zZXJ2aWNlTmFtZX0vdHJpZ2dlci8ke3Jpby5UcmlnZ2VyS2V5LkJSQU5DSF9SRVBPfWAsXG4gICAgICB7IHRyaWdnZXI6IGNvZGVwaXBlbGluZV9hY3Rpb25zLlMzVHJpZ2dlci5FVkVOVFMgfVxuICAgICk7XG5cbiAgICB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlciA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyJyxcbiAgICAgIHsgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvb3NzLWxpY2Vuc2VzL2J1Y2tldC1uYW1lJyB9XG4gICAgKTtcbiAgICB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldCA9IHMzLkJ1Y2tldC5mcm9tQnVja2V0TmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnT3NzTGljZW5zZXNCdWNrZXQnLFxuICAgICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIuc3RyaW5nVmFsdWVcbiAgICApO1xuICAgIHRoaXMuX3NlcnZpY2VLZXlzdG9yZVBhc3N3b3JkID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU2VjdXJlU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyh0aGlzLCAnS2V5c3RvcmVQYXNzd29yZCcsIHtcbiAgICAgIHBhcmFtZXRlck5hbWU6IGAvY29uZmlnLyR7cHJvcHMuc2VydmljZU5hbWV9L3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmRgLFxuICAgICAgdmVyc2lvbjogMSxcbiAgICB9KTtcbiAgICB0aGlzLl9hY2NvdW50TmFtZVBhcmFtZXRlciA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ0FjY291bnROYW1lUGFyYW1ldGVyJyxcbiAgICAgICcvY29uZmlnL2FjY291bnQvbmFtZSdcbiAgICApO1xuICAgIHRoaXMuX3RlYW1JZGVudGlmaWVyUGFyYW1ldGVyID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnVGVhbUlkZW50aWZpZXJQYXJhbWV0ZXInLFxuICAgICAgJy9jb25maWcvdGVhbS9pZGVudGlmaWVyJ1xuICAgICk7XG4gICAgdGhpcy5fbmlzdERhdGFNaXJyb3JVcmwgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TZWN1cmVTdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKHRoaXMsICdOaXN0RGF0YU1pcnJvclVybCcsIHtcbiAgICAgIHBhcmFtZXRlck5hbWU6ICcvY29uZmlnL25pc3QtZGF0YS1taXJyb3IvdXJsJyxcbiAgICAgIHZlcnNpb246IDEsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9jb2RlUGlwZWxpbmVUeXBlID0gcHJvcHMuY29kZVBpcGVsaW5lVHlwZSA/PyBjb2RlcGlwZWxpbmUuUGlwZWxpbmVUeXBlLlYxO1xuXG4gICAgdGhpcy5fbWFpbkNvZGVCdWlsZFByb2plY3QgPSB0aGlzLmNyZWF0ZU1haW5Db2RlQnVpbGRQcm9qZWN0KHByb3BzKTtcbiAgICB0aGlzLmFkZE1haW5QaXBlbGluZSh0aGlzLl9tYWluQ29kZUJ1aWxkUHJvamVjdCwgcHJvcHMpO1xuXG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVzLmJyYW5jaFBpcGVsaW5lKSB7XG4gICAgICB0aGlzLl9icmFuY2hDb2RlQnVpbGRQcm9qZWN0ID0gdGhpcy5jcmVhdGVCcmFuY2hDb2RlQnVpbGRQcm9qZWN0KHByb3BzKTtcbiAgICAgIHRoaXMuYWRkQnJhbmNoUGlwZWxpbmUodGhpcy5fYnJhbmNoQ29kZUJ1aWxkUHJvamVjdCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9mZWF0dXJlcy52dWxuZXJhYmlsaXR5UGlwZWxpbmUpIHtcbiAgICAgIHRoaXMuX3Z1bG5lcmFiaWxpdHlDb2RlQnVpbGRQcm9qZWN0ID0gdGhpcy5jcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRQcm9qZWN0KHByb3BzKTtcbiAgICAgIHRoaXMuYWRkVnVsbmVyYWJpbGl0eVBpcGVsaW5lKHRoaXMuX3Z1bG5lcmFiaWxpdHlDb2RlQnVpbGRQcm9qZWN0LCBwcm9wcyk7XG4gICAgfVxuXG4gICAgY29uc3QgW2ZlYXR1cmUsIHBhY2thZ2VOYW1lXSA9IF9fZGlybmFtZS5zcGxpdChwYXRoLnNlcCkucmV2ZXJzZSgpO1xuICAgIG5ldyBDbGFpZG9tZXRlcih0aGlzLCAnQ2xhaWRvbWV0ZXInLCB7XG4gICAgICBwcm9kdWN0OiBDbGFpZG9tZXRlclByb2R1Y3QuQ0RLX0NPTlRSSUJVVElPTixcbiAgICAgIHBhY2thZ2VOYW1lLFxuICAgICAgZmVhdHVyZSxcbiAgICAgIHZlcnNpb246ICcxLjYuMCcsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1haW5Db2RlYnVpbGRQcm9qZWN0KCkge1xuICAgIHJldHVybiB0aGlzLl9tYWluQ29kZUJ1aWxkUHJvamVjdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYnJhbmNoQ29kZUJ1aWxkUHJvamVjdCgpOiBDb2RlQnVpbGRTdGVwIHtcbiAgICBpZiAodGhpcy5fYnJhbmNoQ29kZUJ1aWxkUHJvamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBFcnJvcignVGhlIHBpcGVsaW5lIHR5cGUgeW91IGhhdmUgc2VsZWN0ZWQgZG9lcyBub3Qgc3VwcG9ydCBhIGJyYW5jaCBjb2RlYnVpbGQgcHJvamVjdCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYnJhbmNoQ29kZUJ1aWxkUHJvamVjdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdnVsbmVyYWJpbGl0eUNvZGVCdWlsZFByb2plY3QoKTogQ29kZUJ1aWxkU3RlcCB7XG4gICAgaWYgKHRoaXMuX3Z1bG5lcmFiaWxpdHlDb2RlQnVpbGRQcm9qZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdUaGUgcGlwZWxpbmUgdHlwZSB5b3UgaGF2ZSBzZWxlY3RlZCBkb2VzIG5vdCBzdXBwb3J0IGEgdnVsbmVyYWJpbGl0eSBjb2RlYnVpbGQgcHJvamVjdCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdnVsbmVyYWJpbGl0eUNvZGVCdWlsZFByb2plY3Q7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRmVhdHVyZXMocHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcyk6IFBpcGVsaW5lRmVhdHVyZXMge1xuICAgIGlmIChwcm9wcy5waXBlbGluZVR5cGUgJiYgcHJvcHMuZmVhdHVyZXMpIHtcbiAgICAgIHRocm93IEVycm9yKCdZb3UgY2Fubm90IHByb3ZpZGUgYm90aCBhIHBpcGVsaW5lVHlwZSBhbmQgZmVhdHVyZXMuIFBsZWFzZSB1c2UgZmVhdHVyZXMgb25seS4nKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmZlYXR1cmVzPy5rYWZrYUludGVncmF0aW9uICYmICFwcm9wcy5mZWF0dXJlcz8uZ3JhZGxlQnVpbGQpIHtcbiAgICAgIHRocm93IEVycm9yKCdLYWZrYSBpbnRlZ3JhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgcGlwZWxpbmVzIHdpdGggZ3JhZGxlIGJ1aWxkJyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5mZWF0dXJlcz8uZnJvbnRlbmRCdWNrZXROYW1lICYmICFwcm9wcy5mZWF0dXJlcz8ubnBtQnVpbGQpIHtcbiAgICAgIHRocm93IEVycm9yKCdGcm9udGVuZCBidWNrZXQgbmFtZSBjYW4gb25seSBiZSBzZXQgd2hlbiBucG0gYnVpbGQgaXMgZW5hYmxlZCcpO1xuICAgIH1cbiAgICBpZiAocHJvcHMuZmVhdHVyZXM/LmFkZGl0aW9uYWxCdWlsZENvbW1hbmRzICYmIHByb3BzLmNvZGVCdWlsZE9wdGlvbnM/LnBhcnRpYWxCdWlsZFNwZWNQYXRoKSB7XG4gICAgICB0aHJvdyBFcnJvcignWW91IGNhbm5vdCBwcm92aWRlIGFkZGl0aW9uYWxCdWlsZENvbW1hbmRzIGlmIHlvdSB1c2UgYSBwYXJ0aWFsQnVpbGRTcGVjUGF0aC4nKTtcbiAgICB9XG4gICAgaWYgKHByb3BzLmZlYXR1cmVzICYmIHByb3BzLmNvZGVCdWlsZE9wdGlvbnM/LnBhcnRpYWxCdWlsZFNwZWNQYXRoKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdZb3UgYXJlIHVzaW5nIHRoZSBwaXBlbGluZSBmZWF0dXJlcyBpbiBjb21iaW5hdGlvbiB3aXRoIGEgcGFydGlhbEJ1aWxkU3BlY1BhdGguIFBsZWFzZSBrZWVwIGluIG1pbmQsIHRoYXQgYWxsIGJ1aWxkc3BlYyByZWxhdGVkIGZlYXR1cmVzIGFyZSBpZ25vcmVkIGFuZCB0aGUgcGFydGlhbEJ1aWxkU3BlYyBpcyBhcHBsaWVkLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5waXBlbGluZVR5cGUpIHtcbiAgICAgIHN3aXRjaCAocHJvcHMucGlwZWxpbmVUeXBlKSB7XG4gICAgICAgIGNhc2UgUGlwZWxpbmVUeXBlLlNUQU5EQVJEX0dSQURMRTpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnJhbmNoUGlwZWxpbmU6IHRydWUsXG4gICAgICAgICAgICB2dWxuZXJhYmlsaXR5UGlwZWxpbmU6IHRydWUsXG4gICAgICAgICAgICBncmFkbGVCdWlsZDogdHJ1ZSxcbiAgICAgICAgICAgIG5wbUJ1aWxkOiBmYWxzZSxcbiAgICAgICAgICAgIGthZmthSW50ZWdyYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgZW5hYmxlUGlwZWxpbmVNb25pdG9yczogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFBpcGVsaW5lVHlwZS5TVEFOREFSRF9HUkFETEVfS0FGS0E6XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJyYW5jaFBpcGVsaW5lOiB0cnVlLFxuICAgICAgICAgICAgdnVsbmVyYWJpbGl0eVBpcGVsaW5lOiB0cnVlLFxuICAgICAgICAgICAgZ3JhZGxlQnVpbGQ6IHRydWUsXG4gICAgICAgICAgICBucG1CdWlsZDogZmFsc2UsXG4gICAgICAgICAgICBrYWZrYUludGVncmF0aW9uOiB0cnVlLFxuICAgICAgICAgICAgZW5hYmxlUGlwZWxpbmVNb25pdG9yczogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICBjYXNlIFBpcGVsaW5lVHlwZS5TVEFOREFSRF9JTkZSQVNUUlVDVFVSRTpcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYnJhbmNoUGlwZWxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgdnVsbmVyYWJpbGl0eVBpcGVsaW5lOiBmYWxzZSxcbiAgICAgICAgICAgIGdyYWRsZUJ1aWxkOiBmYWxzZSxcbiAgICAgICAgICAgIG5wbUJ1aWxkOiBmYWxzZSxcbiAgICAgICAgICAgIGthZmthSW50ZWdyYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgZW5hYmxlUGlwZWxpbmVNb25pdG9yczogdHJ1ZSxcbiAgICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYnJhbmNoUGlwZWxpbmU6IHByb3BzLmZlYXR1cmVzPy5icmFuY2hQaXBlbGluZSA/PyB0cnVlLFxuICAgICAgdnVsbmVyYWJpbGl0eVBpcGVsaW5lOiBwcm9wcy5mZWF0dXJlcz8udnVsbmVyYWJpbGl0eVBpcGVsaW5lID8/IHRydWUsXG4gICAgICBncmFkbGVCdWlsZDogcHJvcHMuZmVhdHVyZXM/LmdyYWRsZUJ1aWxkID8/IGZhbHNlLFxuICAgICAgbnBtQnVpbGQ6IHByb3BzLmZlYXR1cmVzPy5ucG1CdWlsZCA/PyBmYWxzZSxcbiAgICAgIGthZmthSW50ZWdyYXRpb246IHByb3BzLmZlYXR1cmVzPy5rYWZrYUludGVncmF0aW9uID8/IGZhbHNlLFxuICAgICAgZnJvbnRlbmRCdWNrZXROYW1lOiBwcm9wcy5mZWF0dXJlcz8uZnJvbnRlbmRCdWNrZXROYW1lLFxuICAgICAgYWRkaXRpb25hbEJ1aWxkQ29tbWFuZHM6IHByb3BzLmZlYXR1cmVzPy5hZGRpdGlvbmFsQnVpbGRDb21tYW5kcyxcbiAgICAgIGVuYWJsZVBpcGVsaW5lTW9uaXRvcnM6IHByb3BzLmZlYXR1cmVzPy5lbmFibGVQaXBlbGluZU1vbml0b3JzID8/IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmlvQ29kZUJ1aWxkUHJvamVjdChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgY2RrT3V0cHV0RGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgdHJpZ2dlckZpbGU6IENvZGVQaXBlbGluZVNvdXJjZSxcbiAgICBidWlsZFNwZWM6IEJ1aWxkU3BlYyxcbiAgICBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzXG4gICkge1xuICAgIHJldHVybiBuZXcgUmlvQ29kZUJ1aWxkUHJvamVjdCh0aGlzLCBuYW1lLCB7XG4gICAgICBpbnB1dDogdHJpZ2dlckZpbGUsXG4gICAgICBjZGtPdXREaXJlY3Rvcnk6IGNka091dHB1dERpcmVjdG9yeSxcbiAgICAgIHBhcnRpYWxCdWlsZFNwZWM6IGJ1aWxkU3BlYyxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5idWlsZEVudmlyb25tZW50LFxuICAgICAgaG9zdGVkWm9uZU5hbWU6IHRoaXMuX2hvc3RlZFpvbmUuem9uZU5hbWUsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5fY2FjaGVCdWNrZXQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1haW5Db2RlQnVpbGRQcm9qZWN0KHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBjb25zdCBidWlsZFNwZWMgPVxuICAgICAgdGhpcy5sb2FkQnVpbGRTcGVjRnJvbUZpbGUocHJvcHM/LmNvZGVCdWlsZE9wdGlvbnM/LnBhcnRpYWxCdWlsZFNwZWNQYXRoKSB8fFxuICAgICAgY3JlYXRlTWFpbkJ1aWxkU3BlYyh0aGlzLl9mZWF0dXJlcywgcHJvcHMuY29kZUJ1aWxkT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlUmlvQ29kZUJ1aWxkUHJvamVjdChcbiAgICAgICdNYWluQnVpbGQnLFxuICAgICAgJ2luZnJhc3RydWN0dXJlL2Nkay5vdXQnLFxuICAgICAgdGhpcy5faW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSxcbiAgICAgIGJ1aWxkU3BlYyxcbiAgICAgIHByb3BzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQnJhbmNoQ29kZUJ1aWxkUHJvamVjdChwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgY29uc3QgYnVpbGRTcGVjID1cbiAgICAgIHRoaXMubG9hZEJ1aWxkU3BlY0Zyb21GaWxlKHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy5wYXJ0aWFsQnVpbGRTcGVjUGF0aCkgfHxcbiAgICAgIGNyZWF0ZU1haW5CdWlsZFNwZWModGhpcy5fZmVhdHVyZXMsIHByb3BzLmNvZGVCdWlsZE9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZVJpb0NvZGVCdWlsZFByb2plY3QoXG4gICAgICAnQnJhbmNoQnVpbGQnLFxuICAgICAgJ2luZnJhc3RydWN0dXJlL2Nkay5vdXQnLFxuICAgICAgdGhpcy5faW5wdXRCcmFuY2hUcmlnZ2VyRmlsZSxcbiAgICAgIGJ1aWxkU3BlYyxcbiAgICAgIHByb3BzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVnVsbmVyYWJpbGl0eUJ1aWxkUHJvamVjdChwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKSB7XG4gICAgY29uc3QgYnVpbGRTcGVjID1cbiAgICAgIHRoaXMubG9hZEJ1aWxkU3BlY0Zyb21GaWxlKHByb3BzPy5jb2RlQnVpbGRPcHRpb25zPy52dWxuZXJhYmlsaXR5UGFydGlhbEJ1aWxkU3BlY1BhdGgpIHx8XG4gICAgICBjcmVhdGVWdWxuZXJhYmlsaXR5QnVpbGRTcGVjKHRoaXMuX2ZlYXR1cmVzLCBwcm9wcy5jb2RlQnVpbGRPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVSaW9Db2RlQnVpbGRQcm9qZWN0KCdWdWxuZXJhYmlsaXR5Q2hlY2tzJywgJy4vJywgdGhpcy5faW5wdXRNYXN0ZXJUcmlnZ2VyRmlsZSwgYnVpbGRTcGVjLCBwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIGFkZE1haW5QaXBlbGluZShtYWluQnVpbGQ6IENvZGVCdWlsZFN0ZXAsIHByb3BzOiBQaXBlbGluZVN0YWNrUHJvcHMpIHtcbiAgICBjb25zdCBwaXBlbGluZSA9IG5ldyBjb2RlcGlwZWxpbmUuUGlwZWxpbmUodGhpcywgJ1BpcGVsaW5lJywge1xuICAgICAgYXJ0aWZhY3RCdWNrZXQ6IHRoaXMuX2NhY2hlQnVja2V0LFxuICAgICAgcGlwZWxpbmVUeXBlOiB0aGlzLl9jb2RlUGlwZWxpbmVUeXBlLFxuICAgICAgcmVzdGFydEV4ZWN1dGlvbk9uVXBkYXRlOiB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IGNvZGVQaXBlbGluZSA9IG5ldyBwaXBlbGluZXMuQ29kZVBpcGVsaW5lKHBpcGVsaW5lLCAnQ29kZVBpcGVsaW5lJywge1xuICAgICAgY29kZVBpcGVsaW5lOiBwaXBlbGluZSxcbiAgICAgIHN5bnRoOiBtYWluQnVpbGQsXG4gICAgICBzZWxmTXV0YXRpb25Db2RlQnVpbGREZWZhdWx0czoge1xuICAgICAgICBidWlsZEVudmlyb25tZW50OiB7XG4gICAgICAgICAgYnVpbGRJbWFnZTogTGludXhMYW1iZGFCdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yMDIzX05PREVfMjAsXG4gICAgICAgICAgY29tcHV0ZVR5cGU6IENvbXB1dGVUeXBlLkxBTUJEQV8xR0IsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIFRhZ3Mub2YocGlwZWxpbmUpLmFkZCgncGlwZWxpbmVfdHlwZScsICdidWlsZCcpO1xuXG4gICAgY29uc3Qgc3RyaXBBc3NldHNTdGVwID0gdGhpcy5jcmVhdGVTdHJpcEFzc2V0c1N0ZXAoY29kZVBpcGVsaW5lKTtcbiAgICBjb2RlUGlwZWxpbmUuYWRkV2F2ZSgnQmVmb3JlRGVwbG95JywgeyBwcmU6IFtzdHJpcEFzc2V0c1N0ZXBdIH0pO1xuXG4gICAgY29uc3QgY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwID0gdGhpcy5jcmVhdGVDYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXAobWFpbkJ1aWxkLCBwcm9wcyk7XG4gICAgY29uc3Qgc2VjcmV0c0RlcGxveVN0ZXBQcm9wcyA9IHRoaXMuY3JlYXRlU2VjcmV0c0RlcGxveVN0ZXAocHJvcHMpO1xuICAgIGNvbnN0IGZyb250ZW5kRGVwbG95U3RlcCA9IHRoaXMuY3JlYXRlRGVwbG95RnJvbnRlbmREZXBsb3lTdGVwKG1haW5CdWlsZCk7XG4gICAgY29uc3QgcG9zdFN0ZXBzID0gW107XG4gICAgaWYgKGNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCkge1xuICAgICAgcG9zdFN0ZXBzLnB1c2goY2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKTtcbiAgICB9XG4gICAgaWYgKGZyb250ZW5kRGVwbG95U3RlcCkge1xuICAgICAgcG9zdFN0ZXBzLnB1c2goZnJvbnRlbmREZXBsb3lTdGVwKTtcbiAgICB9XG5cbiAgICBjb2RlUGlwZWxpbmUuYWRkU3RhZ2UoXG4gICAgICBuZXcgQXBwbGljYXRpb24odGhpcywgJ0RlcGxveUFwcGxpY2F0aW9uU3RhY2tzJywge1xuICAgICAgICBhcHBTdGFja0ZhY3Rvcnk6IHByb3BzLmFwcFN0YWNrRmFjdG9yeSxcbiAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgICB2ZXJzaW9uOiBwcm9jZXNzLmVudi5QSVBFTElORV9FWEVDVVRJT05fSUQgPz8gJ1BJUEVMSU5FX0VYRUNVVElPTl9JRCBub3Qgc2V0JyxcbiAgICAgIH0pLFxuICAgICAge1xuICAgICAgICBwcmU6IHNlY3JldHNEZXBsb3lTdGVwUHJvcHMgPyBbc2VjcmV0c0RlcGxveVN0ZXBQcm9wc10gOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Q6IHBvc3RTdGVwcyxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29kZVBpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcblxuICAgIHRoaXMudGFnQ29kZUJ1aWxkUHJvamVjdChzdHJpcEFzc2V0c1N0ZXAsICdwcm9qZWN0X3R5cGUnLCAnc3RyaXBfYXNzZXRzJyk7XG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KHNlY3JldHNEZXBsb3lTdGVwUHJvcHMsICdwcm9qZWN0X3R5cGUnLCAnZGVwbG95X3NlY3JldHMnKTtcbiAgICB0aGlzLnRhZ0NvZGVCdWlsZFByb2plY3QobWFpbkJ1aWxkLCAncHJvamVjdF90eXBlJywgJ2J1aWxkJyk7XG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KGNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCwgJ3Byb2plY3RfdHlwZScsICdkZXBsb3lfY2FwYWJpbGl0eV9tb25pdG9yaW5nJyk7XG4gICAgdGhpcy50YWdDb2RlQnVpbGRQcm9qZWN0KGZyb250ZW5kRGVwbG95U3RlcCwgJ3Byb2plY3RfdHlwZScsICdkZXBsb3lfZnJvbnRlbmQnKTtcblxuICAgIGlmIChjYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXApIHtcbiAgICAgIGNvbnN0IG1vbml0b3JpbmdUZXN0c3VpdGVSdW5uZXJCdWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgICdNb25pdG9yaW5nVGVzdHN1aXRlUnVubmVyQnVja2V0JyxcbiAgICAgICAgYG1vbml0b3JpbmctdGVzdHN1aXRlLXJ1bm5lci0ke3RoaXMuYWNjb3VudH1gXG4gICAgICApO1xuICAgICAgbW9uaXRvcmluZ1Rlc3RzdWl0ZVJ1bm5lckJ1Y2tldC5ncmFudFdyaXRlKGNhcGFiaWxpdHlNb25pdG9yaW5nRGVwbG95U3RlcCk7XG4gICAgfVxuICAgIGlmIChmcm9udGVuZERlcGxveVN0ZXApIHtcbiAgICAgIGNvbnN0IGZyb250ZW5kQnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMsICdGcm9udGVuZEJ1Y2tldCcsIHRoaXMuX2ZlYXR1cmVzLmZyb250ZW5kQnVja2V0TmFtZSEhKTtcbiAgICAgIGZyb250ZW5kQnVja2V0LmdyYW50UmVhZFdyaXRlKGZyb250ZW5kRGVwbG95U3RlcCk7XG4gICAgfVxuXG4gICAgY29uc3QgcnVsZSA9IG5ldyBldmVudHMuUnVsZSh0aGlzLCAnUGlwZWxpbmVTY2hlZHVsZScsIHtcbiAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbihwcm9wcy5waXBlbGluZVNjaGVkdWxlcz8ubWFpblBpcGVsaW5lIHx8ICdjcm9uKDAgOSA/ICogMiMxICopJyksXG4gICAgfSk7XG4gICAgcnVsZS5hZGRUYXJnZXQobmV3IHRhcmdldHMuQ29kZVBpcGVsaW5lKGNvZGVQaXBlbGluZS5waXBlbGluZSkpO1xuXG4gICAgdGhpcy5fb3NzTGljZW5zZXNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUobWFpbkJ1aWxkKTtcbiAgICB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5ncmFudFJlYWQobWFpbkJ1aWxkKTtcbiAgICB0aGlzLl9zZXJ2aWNlS2V5c3RvcmVQYXNzd29yZC5ncmFudFJlYWQobWFpbkJ1aWxkKTtcbiAgICB0aGlzLl9hY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQobWFpbkJ1aWxkKTtcbiAgICB0aGlzLl90ZWFtSWRlbnRpZmllclBhcmFtZXRlci5ncmFudFJlYWQobWFpbkJ1aWxkKTtcbiAgICBpZiAodGhpcy5fZmVhdHVyZXMua2Fma2FJbnRlZ3JhdGlvbikge1xuICAgICAgdGhpcy5ncmFudFBlcm1pc3Npb25zRm9yS2Fma2FJbnRlZ3JhdGlvbihtYWluQnVpbGQsICdLYWZrYUludGVncmF0aW9uUG9saWN5Jyk7XG4gICAgfVxuICAgIGNvZGVQaXBlbGluZS5waXBlbGluZS5hcnRpZmFjdEJ1Y2tldC5ncmFudFJlYWRXcml0ZShzdHJpcEFzc2V0c1N0ZXAucHJvamVjdCk7XG5cbiAgICBpZiAodGhpcy5fZmVhdHVyZXM/LmVuYWJsZVBpcGVsaW5lTW9uaXRvcnMpIHtcbiAgICAgIG5ldyBEYXRhZG9nUGlwZWxpbmVFcnJvckFsZXJ0KHRoaXMsICdEYXRhZG9nUGlwZWxpbmVFcnJvck1vbml0b3InLCB7XG4gICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgcGlwZWxpbmVOYW1lOiBwaXBlbGluZS5waXBlbGluZU5hbWUsXG4gICAgICAgIGFjY291bnRJZDogdGhpcy5hY2NvdW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRCcmFuY2hQaXBlbGluZShicmFuY2hCdWlsZDogQ29kZUJ1aWxkU3RlcCkge1xuICAgIGNvbnN0IGJyYW5jaFBpcGVsaW5lID0gbmV3IGNvZGVwaXBlbGluZS5QaXBlbGluZSh0aGlzLCAnQnJhbmNoUGlwZWxpbmUnLCB7XG4gICAgICBhcnRpZmFjdEJ1Y2tldDogdGhpcy5fY2FjaGVCdWNrZXQsXG4gICAgICBwaXBlbGluZVR5cGU6IHRoaXMuX2NvZGVQaXBlbGluZVR5cGUsXG4gICAgICByZXN0YXJ0RXhlY3V0aW9uT25VcGRhdGU6IHRydWUsXG4gICAgfSk7XG4gICAgY29uc3QgYnJhbmNoQ29kZVBpcGVsaW5lID0gbmV3IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUoYnJhbmNoUGlwZWxpbmUsICdDb2RlUGlwZWxpbmUnLCB7XG4gICAgICBjb2RlUGlwZWxpbmU6IGJyYW5jaFBpcGVsaW5lLFxuICAgICAgc3ludGg6IGJyYW5jaEJ1aWxkLFxuICAgICAgc2VsZk11dGF0aW9uOiBmYWxzZSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKGJyYW5jaFBpcGVsaW5lKS5hZGQoJ3BpcGVsaW5lX3R5cGUnLCAnYnJhbmNoJyk7XG4gICAgYnJhbmNoQ29kZVBpcGVsaW5lLmFkZFdhdmUoJ0JyYW5jaEJ1aWxkJykuYWRkUG9zdChicmFuY2hCdWlsZCk7XG4gICAgYnJhbmNoQ29kZVBpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcblxuICAgIHRoaXMudGFnQ29kZUJ1aWxkUHJvamVjdChicmFuY2hCdWlsZCwgJ3Byb2plY3RfdHlwZScsICdicmFuY2hfYnVpbGQnKTtcblxuICAgIHRoaXMuX29zc0xpY2Vuc2VzQnVja2V0LmdyYW50UmVhZFdyaXRlKGJyYW5jaEJ1aWxkKTtcbiAgICB0aGlzLl9vc3NMaWNlbnNlc0J1Y2tldFBhcmFtZXRlci5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuICAgIHRoaXMuX3NlcnZpY2VLZXlzdG9yZVBhc3N3b3JkLmdyYW50UmVhZChicmFuY2hCdWlsZCk7XG4gICAgdGhpcy5fYWNjb3VudE5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKGJyYW5jaEJ1aWxkKTtcbiAgICB0aGlzLl90ZWFtSWRlbnRpZmllclBhcmFtZXRlci5ncmFudFJlYWQoYnJhbmNoQnVpbGQpO1xuICAgIGlmICh0aGlzLl9mZWF0dXJlcy5rYWZrYUludGVncmF0aW9uKSB7XG4gICAgICB0aGlzLmdyYW50UGVybWlzc2lvbnNGb3JLYWZrYUludGVncmF0aW9uKGJyYW5jaEJ1aWxkLCAnQnJhbmNoS2Fma2FJbnRlZ3JhdGlvblBvbGljeScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkVnVsbmVyYWJpbGl0eVBpcGVsaW5lKHZ1bG5lcmFiaWxpdHlCdWlsZDogQ29kZUJ1aWxkU3RlcCwgcHJvcHM6IFBpcGVsaW5lU3RhY2tQcm9wcykge1xuICAgIGNvbnN0IHZ1bG5lcmFiaWxpdHlQaXBlbGluZSA9IG5ldyBjb2RlcGlwZWxpbmUuUGlwZWxpbmUodGhpcywgJ1Z1bG5lcmFiaWxpdHlQaXBlbGluZScsIHtcbiAgICAgIGFydGlmYWN0QnVja2V0OiB0aGlzLl9jYWNoZUJ1Y2tldCxcbiAgICAgIHBpcGVsaW5lVHlwZTogdGhpcy5fY29kZVBpcGVsaW5lVHlwZSxcbiAgICAgIHJlc3RhcnRFeGVjdXRpb25PblVwZGF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB2dWxuZXJhYmlsaXR5Q29kZVBpcGVsaW5lID0gbmV3IHBpcGVsaW5lcy5Db2RlUGlwZWxpbmUodnVsbmVyYWJpbGl0eVBpcGVsaW5lLCAnQ29kZVBpcGVsaW5lJywge1xuICAgICAgY29kZVBpcGVsaW5lOiB2dWxuZXJhYmlsaXR5UGlwZWxpbmUsXG4gICAgICBzeW50aDogdnVsbmVyYWJpbGl0eUJ1aWxkLFxuICAgICAgc2VsZk11dGF0aW9uOiBmYWxzZSxcbiAgICB9KTtcbiAgICBUYWdzLm9mKHZ1bG5lcmFiaWxpdHlQaXBlbGluZSkuYWRkKCdwaXBlbGluZV90eXBlJywgJ3Z1bG5lcmFiaWxpdHknKTtcblxuICAgIHZ1bG5lcmFiaWxpdHlDb2RlUGlwZWxpbmUuYWRkV2F2ZSgnVnVsbmVyYWJpbGl0eUNoZWNrcycpLmFkZFBvc3QodnVsbmVyYWJpbGl0eUJ1aWxkKTtcbiAgICB2dWxuZXJhYmlsaXR5Q29kZVBpcGVsaW5lLmJ1aWxkUGlwZWxpbmUoKTtcbiAgICBUYWdzLm9mKHZ1bG5lcmFiaWxpdHlCdWlsZC5wcm9qZWN0KS5hZGQoJ3Byb2plY3RfdHlwZScsICd2dWxuZXJhYmlsaXR5X2NoZWNrJyk7XG4gICAgdGhpcy5fbmlzdERhdGFNaXJyb3JVcmwuZ3JhbnRSZWFkKHZ1bG5lcmFiaWxpdHlCdWlsZCk7XG4gICAgU29uYXR5cGVPc3NJbmRleENyZWRlbnRpYWxzLmFsbG93QWNjZXNzVG8odGhpcywgdnVsbmVyYWJpbGl0eUJ1aWxkKTtcblxuICAgIGNvbnN0IHZ1bG5lcmFiaWxpdHlSdWxlID0gbmV3IGV2ZW50cy5SdWxlKHRoaXMsICdWdWxuZXJhYmlsaXR5UGlwZWxpbmVTY2hlZHVsZScsIHtcbiAgICAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUuZXhwcmVzc2lvbihwcm9wcy5waXBlbGluZVNjaGVkdWxlcz8udnVsbmVyYWJpbGl0eVBpcGVsaW5lIHx8ICdjcm9uKDAgNSA/ICogTU9OLUZSSSAqKScpLFxuICAgIH0pO1xuICAgIHZ1bG5lcmFiaWxpdHlSdWxlLmFkZFRhcmdldChuZXcgdGFyZ2V0cy5Db2RlUGlwZWxpbmUodnVsbmVyYWJpbGl0eUNvZGVQaXBlbGluZS5waXBlbGluZSkpO1xuXG4gICAgaWYgKHByb3BzLmRhdGFkb2dBbGVydFR5cGUgPT09ICdvcHNnZW5pZScpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnVGhlIE9wc0dlbmllIGFsZXJ0VHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUuIFBsZWFzZSB1c2UgdGhlIHZ1bG5lcmFiaWxpdHlOb3RpZmljYXRpb24gcHJvcGVydHkgaW5zdGVhZC4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZmVhdHVyZXM/LmVuYWJsZVBpcGVsaW5lTW9uaXRvcnMpIHtcbiAgICAgIG5ldyBEYXRhRG9nUGlwZWxpbmVFcnJvckFsZXJ0Rm9yVnVsbmVyYWJpbGl0eUNoZWNrcyh0aGlzLCAnRGF0YURvZ1BpcGVsaW5lRXJyb3JGb3JWdWxuZXJhYmlsaXR5Q2hlY2tzTW9uaXRvcicsIHtcbiAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgICBwaXBlbGluZU5hbWU6IHZ1bG5lcmFiaWxpdHlQaXBlbGluZS5waXBlbGluZU5hbWUsXG4gICAgICAgIGFjY291bnRJZDogdGhpcy5hY2NvdW50LFxuICAgICAgICBub3RpZmljYXRpb246IHByb3BzLnZ1bG5lcmFiaWxpdHlOb3RpZmljYXRpb24sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVN0cmlwQXNzZXRzU3RlcChwaXBlbGluZTogcGlwZWxpbmVzLkNvZGVQaXBlbGluZSk6IENvZGVCdWlsZFN0ZXAge1xuICAgIC8vIENsb3VkQXNzZW1ibHlBcnRpZmFjdHMgbXVzdCBiZSBzbWFsbGVyIHRoYW4gMjU2TUIuIER1ZSB0byB0aGUgZ3JhZGxlIGFydGlmYWN0IHdlIGFyZSBleGNlZWRpbmcgdGhpcyBsaW1pdCBhbmQgcGlwZWxpbmUgZmFpbHMgaW4gZGVwbG95bWVudCBzdGVwLlxuICAgIC8vIElzc3VlIGlzIGtub3duIGFuZCBub3QgZml4ZWQgZm9yIGFscmVhZHkgc29tZSB5ZWFycy4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzk5MTdcbiAgICAvLyBEaXJ0eSBmaXg6IEFzc2V0cyBhcmUgYWxyZWFkeSB1cGxvYWRlZCBhbmQgdGh1cyBub3QgbmVlZGVkLiBSZW1vdmUgdGhlbSBmcm9tIHBpcGVsaW5lIGFydGlmYWN0LlxuICAgIHJldHVybiBuZXcgQ29kZUJ1aWxkU3RlcCgnU3RyaXBBc3NldHNGcm9tQXNzZW1ibHknLCB7XG4gICAgICBpbnB1dDogcGlwZWxpbmUuY2xvdWRBc3NlbWJseUZpbGVTZXQsXG4gICAgICBjb21tYW5kczogW1xuICAgICAgICAnUzNfUEFUSD0ke0NPREVCVUlMRF9TT1VSQ0VfVkVSU0lPTiNcImFybjphd3M6czM6OjpcIn0nLFxuICAgICAgICAnWklQX0FSQ0hJVkU9JChiYXNlbmFtZSAkUzNfUEFUSCknLFxuICAgICAgICAncm0gLXJmdiBhc3NldC4qJyxcbiAgICAgICAgJ3ppcCAtciAtcSAtQSAkWklQX0FSQ0hJVkUgKicsXG4gICAgICAgICdhd3MgczMgY3AgJFpJUF9BUkNISVZFIHMzOi8vJFMzX1BBVEgnLFxuICAgICAgXSxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhMYW1iZGFCdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yMDIzX05PREVfMjAsXG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQU1CREFfMUdCLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2FwYWJpbGl0eU1vbml0b3JpbmdEZXBsb3lTdGVwKFxuICAgIG1haW5CdWlsZDogQ29kZUJ1aWxkU3RlcCxcbiAgICBwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzXG4gICk6IENvZGVCdWlsZFN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcy5tb25pdG9yaW5nRGVwbG95U3RlcFByb3BzKSB7XG4gICAgICBjb25zdCBtb25pdG9yaW5nQXJ0aWZhY3RzID0gT2JqZWN0LmtleXMocHJvcHMubW9uaXRvcmluZ0RlcGxveVN0ZXBQcm9wcy5tb25pdG9yaW5nQXJ0aWZhY3RzKS5tYXAoa2V5ID0+IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gbWFpbkJ1aWxkLmFkZE91dHB1dERpcmVjdG9yeShrZXkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlucHV0OiBvdXRwdXQsXG4gICAgICAgICAgZmlsZXM6IHByb3BzLm1vbml0b3JpbmdEZXBsb3lTdGVwUHJvcHMhLm1vbml0b3JpbmdBcnRpZmFjdHNba2V5XSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBSaW9DYXBhYmlsaXR5TW9uaXRvcmluZ0RlcGxveVN0ZXAodGhpcywgJ0RlcGxveUNhcGFiaWxpdHlNb25pdG9yaW5nJywge1xuICAgICAgICBtb25pdG9yaW5nQXJ0aWZhY3RzOiBtb25pdG9yaW5nQXJ0aWZhY3RzLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTZWNyZXRzRGVwbG95U3RlcChwcm9wczogUGlwZWxpbmVTdGFja1Byb3BzKTogcmlvLlJpb1NlY3JldHNEZXBsb3lTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocHJvcHMuc2VjcmV0c0RlcGxveVN0ZXBQcm9wcykge1xuICAgICAgcmV0dXJuIG5ldyByaW8uUmlvU2VjcmV0c0RlcGxveVN0ZXAodGhpcywgJ0RlcGxveVNlY3JldHMnLCB7XG4gICAgICAgIC4uLnByb3BzLnNlY3JldHNEZXBsb3lTdGVwUHJvcHMsXG4gICAgICAgIGlucHV0OiB0aGlzLl9pbnB1dE1hc3RlclRyaWdnZXJGaWxlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEZXBsb3lGcm9udGVuZERlcGxveVN0ZXAobWFpbkJ1aWxkOiBDb2RlQnVpbGRTdGVwKTogQ29kZUJ1aWxkU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLl9mZWF0dXJlcy5mcm9udGVuZEJ1Y2tldE5hbWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGZyb250ZW5kQnVpbGRPdXRwdXQgPSBtYWluQnVpbGQuYWRkT3V0cHV0RGlyZWN0b3J5KCdidWlsZCcpO1xuICAgIHJldHVybiBuZXcgQ29kZUJ1aWxkU3RlcCgnRGVwbG95RnJvbnRlbmQnLCB7XG4gICAgICBpbnB1dDogZnJvbnRlbmRCdWlsZE91dHB1dCxcbiAgICAgIGJ1aWxkRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgYnVpbGRJbWFnZTogTGludXhMYW1iZGFCdWlsZEltYWdlLkFNQVpPTl9MSU5VWF8yMDIzX05PREVfMjAsXG4gICAgICAgIGNvbXB1dGVUeXBlOiBDb21wdXRlVHlwZS5MQU1CREFfMUdCLFxuICAgICAgfSxcbiAgICAgIGNvbW1hbmRzOiBbXG4gICAgICAgIGBhd3MgczMgc3luYyAtLWV4Y2x1ZGUgaW5kZXguaHRtbCAtLWNhY2hlLWNvbnRyb2wgbWF4LWFnZT0zMTUzNjAwMCAuLyAnczM6Ly8ke3RoaXMuX2ZlYXR1cmVzLmZyb250ZW5kQnVja2V0TmFtZX0nYCxcbiAgICAgICAgYGF3cyBzMyBjcCAtLWNhY2hlLWNvbnRyb2wgbm8tY2FjaGUgaW5kZXguaHRtbCAnczM6Ly8ke3RoaXMuX2ZlYXR1cmVzLmZyb250ZW5kQnVja2V0TmFtZX0nYCxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdyYW50UGVybWlzc2lvbnNGb3JLYWZrYUludGVncmF0aW9uKGJ1aWxkUHJvamVjdDogUmlvQ29kZUJ1aWxkUHJvamVjdCwgcG9saWN5SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1aWxkUHJvamVjdFJvbGUgPSBidWlsZFByb2plY3QucHJvamVjdC5yb2xlO1xuICAgIGlmIChidWlsZFByb2plY3RSb2xlKSB7XG4gICAgICBidWlsZFByb2plY3RSb2xlLmFkZE1hbmFnZWRQb2xpY3koXG4gICAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbU1hbmFnZWRQb2xpY3lBcm4odGhpcywgcG9saWN5SWQsIEZuLmltcG9ydFZhbHVlKCdrYWZrYS1pbnRlZ3JhdGlvbi1wb2xpY3ktYXJuJykpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBhZGQgbWFuYWdlZCBwb2xpY3kgZm9yIGthZmthLWludGVncmF0aW9uIHRvIENvZGVCdWlsZCBwcm9qZWN0IG9mICR7YnVpbGRQcm9qZWN0LmlkfSBkdWUgdG8gbWlzc2luZyByb2xlLmBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQnVpbGRTcGVjRnJvbUZpbGUoYnVpbGRTcGVjUGF0aD86IHN0cmluZyk6IEJ1aWxkU3BlYyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFidWlsZFNwZWNQYXRoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gQnVpbGRTcGVjLmZyb21PYmplY3QoeWFtbC5sb2FkKGZzLnJlYWRGaWxlU3luYyhidWlsZFNwZWNQYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKSBhcyBPYmplY3QpO1xuICB9XG5cbiAgcHJpdmF0ZSB0YWdDb2RlQnVpbGRQcm9qZWN0KHByb2plY3Q6IENvZGVCdWlsZFN0ZXAgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHByb2plY3QpIHtcbiAgICAgIFRhZ3Mub2YocHJvamVjdC5wcm9qZWN0KS5hZGQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -75,7 +75,7 @@ export interface DatadogLambdaInstrumentationProps {
|
|
|
75
75
|
*
|
|
76
76
|
* To use it, install Datadog CDK Constructs package:
|
|
77
77
|
* ```bash
|
|
78
|
-
* npm i -D datadog-cdk-constructs-v2
|
|
78
|
+
* npm i -D datadog-cdk-constructs-v2@^5
|
|
79
79
|
* ```
|
|
80
80
|
*/
|
|
81
81
|
export declare class DatadogLambdaInstrumentation extends Construct {
|
|
@@ -8,6 +8,7 @@ const constructs_1 = require("constructs");
|
|
|
8
8
|
const dd = require("datadog-cdk-constructs-v2");
|
|
9
9
|
const datadog_cdk_constructs_v2_1 = require("datadog-cdk-constructs-v2");
|
|
10
10
|
const datadog_shared_secrets_1 = require("./datadog-shared-secrets");
|
|
11
|
+
const validate_lambda_environment_1 = require("./validate-lambda-environment");
|
|
11
12
|
const LOG_EXCLUSION_RULES = Object.freeze([
|
|
12
13
|
{
|
|
13
14
|
type: 'exclude_at_match',
|
|
@@ -26,7 +27,7 @@ const LOG_EXCLUSION_RULES = Object.freeze([
|
|
|
26
27
|
*
|
|
27
28
|
* To use it, install Datadog CDK Constructs package:
|
|
28
29
|
* ```bash
|
|
29
|
-
* npm i -D datadog-cdk-constructs-v2
|
|
30
|
+
* npm i -D datadog-cdk-constructs-v2@^5
|
|
30
31
|
* ```
|
|
31
32
|
*/
|
|
32
33
|
class DatadogLambdaInstrumentation extends constructs_1.Construct {
|
|
@@ -56,6 +57,8 @@ class DatadogLambdaInstrumentation extends constructs_1.Construct {
|
|
|
56
57
|
this.enhancedMetricsEnabled = props.enableEnhancedMetrics ?? false;
|
|
57
58
|
}
|
|
58
59
|
addLambdaFunctions(lambdaFunctions, construct) {
|
|
60
|
+
// Validate the whole batch before changing any function.
|
|
61
|
+
lambdaFunctions.forEach(validate_lambda_environment_1.validateLambdaEnvironment);
|
|
59
62
|
for (const lambdaFunction of lambdaFunctions) {
|
|
60
63
|
this.datadogSecret.grantRead(lambdaFunction);
|
|
61
64
|
lambdaFunction.addEnvironment('DD_ENHANCED_METRICS', `${this.enhancedMetricsEnabled}`);
|
|
@@ -84,4 +87,4 @@ const getSourceCodeIntegrationDefault = (node) => {
|
|
|
84
87
|
const isDisabled = value === 'false' || value === false;
|
|
85
88
|
return !isDisabled;
|
|
86
89
|
};
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1sYW1iZGEtaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFkb2d2Mi9kYXRhZG9nLWxhbWJkYS1pbnN0cnVtZW50YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSwyQ0FBNkM7QUFDN0MsNkRBQTZEO0FBQzdELGdEQUFnRDtBQUNoRCx5RUFBOEQ7QUFFOUQscUVBQStEO0FBa0UvRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDeEM7UUFDRSxJQUFJLEVBQUUsa0JBQWtCO1FBQ3hCLElBQUksRUFBRSxrQkFBa0I7UUFDeEIsT0FBTyxFQUFFLGdDQUFnQztLQUMxQztDQUNGLENBQUMsQ0FBQztBQUVIOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFhLDRCQUE2QixTQUFRLHNCQUFTO0lBTXpELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0M7UUFDaEYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsYUFBYSxHQUFHLDRDQUFtQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBRW5ELE1BQU0scUJBQXFCLEdBQUcsNENBQW1CLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFeEUsTUFBTSxVQUFVLEdBQXVCO1lBQ3JDLEdBQUcsRUFBRSxNQUFNO1lBQ1gsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUztZQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsb0JBQW9CLEVBQUUsS0FBSztZQUMzQixzQkFBc0IsRUFBRSxLQUFLO1lBQzdCLHFCQUFxQixFQUFFLEtBQUs7WUFDNUIsZUFBZSxFQUFFLEtBQUs7WUFDdEIsaUJBQWlCLEVBQUUsNkNBQWlCLENBQUMsR0FBRztZQUN4QyxxQkFBcUIsRUFBRSwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2pFLEdBQUcsS0FBSztTQUNULENBQUM7UUFFRixFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdCLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUMscUJBQXFCLElBQUksS0FBSyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxlQUFvQyxFQUFFLFNBQXFCO1FBQzVFLEtBQUssTUFBTSxjQUFjLElBQUksZUFBZSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDN0MsY0FBYyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7WUFDdkYsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDNUIsY0FBYyxDQUFDLGNBQWMsQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN4RyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxlQUFvQyxFQUFFLFlBQXFCLEVBQUUsVUFBbUI7UUFDbkcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFDRCxnQ0FBZ0MsQ0FBQyxTQUEyQjtRQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVELENBQUM7O0FBckRILG9FQXNEQzs7O0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSwrQkFBK0IsR0FBRyxDQUFDLElBQVUsRUFBVyxFQUFFO0lBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUU3RixNQUFNLFVBQVUsR0FBRyxLQUFLLEtBQUssT0FBTyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUM7SUFFeEQsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUNyQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCAqIGFzIHNlY3JldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvbnN0cnVjdCwgTm9kZSB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0ICogYXMgZGQgZnJvbSAnZGF0YWRvZy1jZGstY29uc3RydWN0cy12Mic7XG5pbXBvcnQgeyBEYXRhZG9nQXBwU2VjTW9kZSB9IGZyb20gJ2RhdGFkb2ctY2RrLWNvbnN0cnVjdHMtdjInO1xuaW1wb3J0IHsgRGF0YWRvZ0xhbWJkYVByb3BzIH0gZnJvbSAnZGF0YWRvZy1jZGstY29uc3RydWN0cy12Mi9saWIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEYXRhZG9nU2hhcmVkU2VjcmV0IH0gZnJvbSAnLi9kYXRhZG9nLXNoYXJlZC1zZWNyZXRzJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIERhdGFkb2dMYW1iZGFJbnN0cnVtZW50YXRpb24gY29uc3RydWN0LlxuICogQ29waWVkIG92ZXIgZnJvbSBvcmlnaW5hbCBEYXRhZG9nIGNvbnN0cnVjdC5cbiAqIFRoaXMgaW50ZXJmYWNlIGlzIGludGVudGlvbmFsbHkgbm90IGV4dGVuZGluZyB0aGUgb3JpZ2luYWwgRGF0YWRvZ1Byb3BzLCBzbyB0aGF0IHRoZSBkZXBlbmRlbmN5IG5lZWRzIHRvIGJlIGJ1bmRsZWQgYXMgd2VsbC5cbiAqXG4gKiBsYXRlc3QgdmVyc2lvbiBmb3Igbm9kZUxheWVyVmVyc2lvbjogaHR0cHM6Ly9naXRodWIuY29tL0RhdGFEb2cvZGF0YWRvZy1sYW1iZGEtanMvcmVsZWFzZXNcbiAqXG4gKiBsYXRlc3QgdmVyc2lvbiBmb3IgZXh0ZW5zaW9uTGF5ZXJWZXJzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vRGF0YURvZy9kYXRhZG9nLWxhbWJkYS1leHRlbnNpb24vcmVsZWFzZXNcbiAqXG4gKlxuICogQHNlZSBkZC5EYXRhZG9nUHJvcHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhZG9nTGFtYmRhSW5zdHJ1bWVudGF0aW9uUHJvcHMge1xuICByZWFkb25seSBzZXJ2aWNlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc3VwcHJlc3MgdGhlIHN5c3RlbSBsb2cgbGluZXMgKFNUQVJULCBFTkQsIFJFUE9SVCkgZnJvbSBMYW1iZGEgbG9ncy5cbiAgICogRGF0YWRvZyByZWNvbW1lbmRzIGtlZXBpbmcgdGhlIFJFUE9SVCBsb2dzLCBhcyB0aGV5IGFyZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBpbnZvY2F0aW9ucyBsaXN0IGluIHRoZVxuICAgKiBzZXJ2ZXJsZXNzIGZ1bmN0aW9uIHZpZXdzLlxuICAgKiBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9sb2dzL2d1aWRlL2ZvcndhcmRlci8/dGFiPWNsb3VkZm9ybWF0aW9uJnNpdGU9dXMjbG9nLWZpbHRlcmluZy1vcHRpb25hbFxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcHJlc3NTeXN0ZW1Mb2dzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgZW5oYW5jZWQgbWV0cmljcyBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZUVuaGFuY2VkTWV0cmljcz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG5vZGVMYXllclZlcnNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgZXh0ZW5zaW9uTGF5ZXJWZXJzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGFkZExheWVycz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGZvcndhcmRlckFybj86IHN0cmluZztcbiAgcmVhZG9ubHkgZmx1c2hNZXRyaWNzVG9Mb2dzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc2l0ZT86IHN0cmluZztcbiAgcmVhZG9ubHkgYXBpS2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBhcGlLZXlTZWNyZXRBcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFwaUtleVNlY3JldD86IHNlY3JldHMuSVNlY3JldDtcbiAgcmVhZG9ubHkgYXBpS21zS2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBlbmFibGVEYXRhZG9nVHJhY2luZz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGVuYWJsZURhdGFkb2dBU00/OiBib29sZWFuO1xuICByZWFkb25seSBlbmFibGVNZXJnZVhyYXlUcmFjZXM/OiBib29sZWFuO1xuICByZWFkb25seSBpbmplY3RMb2dDb250ZXh0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbG9nTGV2ZWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVuYWJsZURhdGFkb2dMb2dzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FwdHVyZUxhbWJkYVBheWxvYWQ/OiBib29sZWFuO1xuICByZWFkb25seSBlbnY/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhZ3M/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNyZWF0ZUZvcndhcmRlclBlcm1pc3Npb25zPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc291cmNlQ29kZUludGVncmF0aW9uPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZW5hYmxlQ29sZFN0YXJ0VHJhY2luZz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG1pbkNvbGRTdGFydFRyYWNlRHVyYXRpb24/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvbGRTdGFydFRyYWNlU2tpcExpYnM/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVuYWJsZVByb2ZpbGluZz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGVuY29kZUF1dGhvcml6ZXJDb250ZXh0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGVjb2RlQXV0aG9yaXplckNvbnRleHQ/OiBib29sZWFuO1xuICByZWFkb25seSBhcG1GbHVzaERlYWRsaW5lPzogc3RyaW5nIHwgbnVtYmVyO1xuICByZWFkb25seSByZWRpcmVjdEhhbmRsZXI/OiBib29sZWFuO1xuICByZWFkb25seSBncmFudFNlY3JldFJlYWRBY2Nlc3M/OiBib29sZWFuO1xuICByZWFkb25seSB1c2VMYXllcnNGcm9tQWNjb3VudD86IHN0cmluZztcbiAgcmVhZG9ubHkgZGF0YWRvZ0FwcFNlY01vZGU/OiBEYXRhZG9nQXBwU2VjTW9kZTtcbn1cblxuY29uc3QgTE9HX0VYQ0xVU0lPTl9SVUxFUyA9IE9iamVjdC5mcmVlemUoW1xuICB7XG4gICAgdHlwZTogJ2V4Y2x1ZGVfYXRfbWF0Y2gnLFxuICAgIG5hbWU6ICdkcm9wX3N5c3RlbV9sb2dzJyxcbiAgICBwYXR0ZXJuOiAnXihTVEFSVHxFTkR8UkVQT1JUKSBSZXF1ZXN0SWQ6JyxcbiAgfSxcbl0pO1xuXG4vKipcbiAqIFdyYXBwZXIgY29uc3RydWN0IGZvciBEYXRhZG9nJ3MgTGFtYmRhIGluc3RydW1lbnRhdGlvbi5cbiAqIFRoaXMgY29uc3RydWN0IHdpbGwgY3JlYXRlIGEgRGF0YWRvZyBjb25zdHJ1Y3Qgd2l0aCB0aGUgcHJvdmlkZWQgcHJvcHMgYW5kIGFkZCB0aGUgTGFtYmRhIGZ1bmN0aW9ucyB0byBpdC5cbiAqIFBlciBkZWZhdWx0LCBpdCB3aWxsIGRpc2FibGUgYWxsIGFkZGl0aW9uYWwgZmVhdHVyZXMsIHRoYXQgY2F1c2UgRGF0YWRvZyBjaGFyZ2luZyBmb3IgU2VydmVybGVzcyBGdW5jdGlvbnMgZmVhdHVyZXMuXG4gKiBTbyBqdXN0IGNoYW5nZSBpdCwgaWYgeW91IG5lZWQgdGhlIGFkdmFuY2VkIGZlYXR1cmVzLlxuICpcbiAqIEFkZGl0aW9uYWxseSwgc29tZSBkZWZhdWx0cyBmcm9tIHRoZSBkYXRhZG9nLWludGVncmF0aW9uIGFjY291bnQgbW9kdWxlIGFyZSBhcHBsaWVkOlxuICogLSB0aGUgc2VjcmV0IGFuZCBzaXRlIGZvciB0aGUgQVBJIGtleSBpcyByZWFkIGZyb20gYSBzaGFyZWQgc2VjcmV0IGluIHJpby1kZXZlbG9wZXItdG9vbHMgYWNjb3VudFxuICpcbiAqIFRvIHVzZSBpdCwgaW5zdGFsbCBEYXRhZG9nIENESyBDb25zdHJ1Y3RzIHBhY2thZ2U6XG4gKiBgYGBiYXNoXG4gKiBucG0gaSAtRCBkYXRhZG9nLWNkay1jb25zdHJ1Y3RzLXYyXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFkb2dMYW1iZGFJbnN0cnVtZW50YXRpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwcml2YXRlIGRlbGVnYXRlOiBkZC5EYXRhZG9nTGFtYmRhO1xuICBwcml2YXRlIGRhdGFkb2dTZWNyZXQ6IERhdGFkb2dTaGFyZWRTZWNyZXQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2l0ZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuaGFuY2VkTWV0cmljc0VuYWJsZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgc3VwcHJlc3NTeXN0ZW1Mb2dzPzogYm9vbGVhbjtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERhdGFkb2dMYW1iZGFJbnN0cnVtZW50YXRpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmRhdGFkb2dTZWNyZXQgPSBEYXRhZG9nU2hhcmVkU2VjcmV0LmFwaUtleVNlY3JldCh0aGlzKTtcbiAgICB0aGlzLnN1cHByZXNzU3lzdGVtTG9ncyA9IHByb3BzLnN1cHByZXNzU3lzdGVtTG9ncztcblxuICAgIGNvbnN0IHJlc29sdmVkRGF0YWRvZ1NlY3JldCA9IERhdGFkb2dTaGFyZWRTZWNyZXQuY3JlZGVudGlhbHNTZWNyZXQodGhpcyk7XG4gICAgdGhpcy5zaXRlID0gcmVzb2x2ZWREYXRhZG9nU2VjcmV0LmdldFNlY3JldFZhbHVlKCdTaXRlJykudW5zYWZlVW53cmFwKCk7XG5cbiAgICBjb25zdCBmaW5hbFByb3BzOiBEYXRhZG9nTGFtYmRhUHJvcHMgPSB7XG4gICAgICBlbnY6ICdwcm9kJyxcbiAgICAgIGFwaUtleVNlY3JldEFybjogdGhpcy5kYXRhZG9nU2VjcmV0LnNlY3JldEFybixcbiAgICAgIHNpdGU6IHRoaXMuc2l0ZSxcbiAgICAgIGVuYWJsZURhdGFkb2dMb2dzOiB0cnVlLFxuICAgICAgaW5qZWN0TG9nQ29udGV4dDogdHJ1ZSxcbiAgICAgIGVuYWJsZURhdGFkb2dUcmFjaW5nOiBmYWxzZSxcbiAgICAgIGVuYWJsZUNvbGRTdGFydFRyYWNpbmc6IGZhbHNlLFxuICAgICAgZW5hYmxlTWVyZ2VYcmF5VHJhY2VzOiBmYWxzZSxcbiAgICAgIGVuYWJsZVByb2ZpbGluZzogZmFsc2UsXG4gICAgICBkYXRhZG9nQXBwU2VjTW9kZTogRGF0YWRvZ0FwcFNlY01vZGUuT0ZGLFxuICAgICAgc291cmNlQ29kZUludGVncmF0aW9uOiBnZXRTb3VyY2VDb2RlSW50ZWdyYXRpb25EZWZhdWx0KHRoaXMubm9kZSksXG4gICAgICAuLi5wcm9wcyxcbiAgICB9O1xuXG4gICAgZGQudmFsaWRhdGVQcm9wcyhmaW5hbFByb3BzKTtcbiAgICBkZC5jaGVja0Zvck11bHRpcGxlQXBpS2V5cyhmaW5hbFByb3BzKTtcblxuICAgIHRoaXMuZGVsZWdhdGUgPSBuZXcgZGQuRGF0YWRvZ0xhbWJkYSh0aGlzLCAnRGF0YWRvZycsIGZpbmFsUHJvcHMpO1xuICAgIHRoaXMuZW5oYW5jZWRNZXRyaWNzRW5hYmxlZCA9IHByb3BzLmVuYWJsZUVuaGFuY2VkTWV0cmljcyA/PyBmYWxzZTtcbiAgfVxuXG4gIGFkZExhbWJkYUZ1bmN0aW9ucyhsYW1iZGFGdW5jdGlvbnM6IGRkLkxhbWJkYUZ1bmN0aW9uW10sIGNvbnN0cnVjdD86IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbGFtYmRhRnVuY3Rpb24gb2YgbGFtYmRhRnVuY3Rpb25zKSB7XG4gICAgICB0aGlzLmRhdGFkb2dTZWNyZXQuZ3JhbnRSZWFkKGxhbWJkYUZ1bmN0aW9uKTtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uLmFkZEVudmlyb25tZW50KCdERF9FTkhBTkNFRF9NRVRSSUNTJywgYCR7dGhpcy5lbmhhbmNlZE1ldHJpY3NFbmFibGVkfWApO1xuICAgICAgaWYgKHRoaXMuc3VwcHJlc3NTeXN0ZW1Mb2dzKSB7XG4gICAgICAgIGxhbWJkYUZ1bmN0aW9uLmFkZEVudmlyb25tZW50KCdERF9MT0dTX0NPTkZJR19QUk9DRVNTSU5HX1JVTEVTJywgSlNPTi5zdHJpbmdpZnkoTE9HX0VYQ0xVU0lPTl9SVUxFUykpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmRlbGVnYXRlLmFkZExhbWJkYUZ1bmN0aW9ucyhsYW1iZGFGdW5jdGlvbnMsIGNvbnN0cnVjdCk7XG4gIH1cblxuICBhZGRHaXRDb21taXRNZXRhZGF0YShsYW1iZGFGdW5jdGlvbnM6IGRkLkxhbWJkYUZ1bmN0aW9uW10sIGdpdENvbW1pdFNoYT86IHN0cmluZywgZ2l0UmVwb1VybD86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGVsZWdhdGUuYWRkR2l0Q29tbWl0TWV0YWRhdGEobGFtYmRhRnVuY3Rpb25zLCBnaXRDb21taXRTaGEsIGdpdFJlcG9VcmwpO1xuICB9XG4gIGFkZEZvcndhcmRlclRvTm9uTGFtYmRhTG9nR3JvdXBzKGxvZ0dyb3VwczogbG9ncy5JTG9nR3JvdXBbXSk6IHZvaWQge1xuICAgIHRoaXMuZGVsZWdhdGUuYWRkRm9yd2FyZGVyVG9Ob25MYW1iZGFMb2dHcm91cHMobG9nR3JvdXBzKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgdG8gY2hlY2sgZm9yIHRoZSBjb250ZXh0IHZhbHVlXG4gKiBAcmV0dXJucyB0cnVlIGFzIGEgZGVmYXVsdCBpZiBub3QgZGlzYWJsZWQgdmlhIGNvbnRleHRcbiAqL1xuY29uc3QgZ2V0U291cmNlQ29kZUludGVncmF0aW9uRGVmYXVsdCA9IChub2RlOiBOb2RlKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHZhbHVlID0gbm9kZS50cnlHZXRDb250ZXh0KCdAcmlvLWNsb3VkL2Nkay12Mi1jb25zdHJ1Y3RzOmVuYWJsZVNvdXJjZUNvZGVJbnRlZ3JhdGlvbicpO1xuXG4gIGNvbnN0IGlzRGlzYWJsZWQgPSB2YWx1ZSA9PT0gJ2ZhbHNlJyB8fCB2YWx1ZSA9PT0gZmFsc2U7XG5cbiAgcmV0dXJuICFpc0Rpc2FibGVkO1xufTtcbiJdfQ==
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWRvZy1sYW1iZGEtaW5zdHJ1bWVudGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGFkb2d2Mi9kYXRhZG9nLWxhbWJkYS1pbnN0cnVtZW50YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSwyQ0FBNkM7QUFDN0MsNkRBQTZEO0FBQzdELGdEQUFnRDtBQUNoRCx5RUFBOEQ7QUFFOUQscUVBQStEO0FBQy9ELCtFQUEwRTtBQWtFMUUsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hDO1FBQ0UsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixJQUFJLEVBQUUsa0JBQWtCO1FBQ3hCLE9BQU8sRUFBRSxnQ0FBZ0M7S0FDMUM7Q0FDRixDQUFDLENBQUM7QUFFSDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBYSw0QkFBNkIsU0FBUSxzQkFBUztJQU16RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdDO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLGFBQWEsR0FBRyw0Q0FBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUVuRCxNQUFNLHFCQUFxQixHQUFHLDRDQUFtQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXhFLE1BQU0sVUFBVSxHQUF1QjtZQUNyQyxHQUFHLEVBQUUsTUFBTTtZQUNYLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVM7WUFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLG9CQUFvQixFQUFFLEtBQUs7WUFDM0Isc0JBQXNCLEVBQUUsS0FBSztZQUM3QixxQkFBcUIsRUFBRSxLQUFLO1lBQzVCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLGlCQUFpQixFQUFFLDZDQUFpQixDQUFDLEdBQUc7WUFDeEMscUJBQXFCLEVBQUUsK0JBQStCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNqRSxHQUFHLEtBQUs7U0FDVCxDQUFDO1FBRUYsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QixFQUFFLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixJQUFJLEtBQUssQ0FBQztJQUNyRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsZUFBb0MsRUFBRSxTQUFxQjtRQUM1RSx5REFBeUQ7UUFDekQsZUFBZSxDQUFDLE9BQU8sQ0FBQyx1REFBeUIsQ0FBQyxDQUFDO1FBQ25ELEtBQUssTUFBTSxjQUFjLElBQUksZUFBZSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDN0MsY0FBYyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7WUFDdkYsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDNUIsY0FBYyxDQUFDLGNBQWMsQ0FBQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUN4RyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxlQUFvQyxFQUFFLFlBQXFCLEVBQUUsVUFBbUI7UUFDbkcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFDRCxnQ0FBZ0MsQ0FBQyxTQUEyQjtRQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVELENBQUM7O0FBdkRILG9FQXdEQzs7O0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSwrQkFBK0IsR0FBRyxDQUFDLElBQVUsRUFBVyxFQUFFO0lBQzlELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUU3RixNQUFNLFVBQVUsR0FBRyxLQUFLLEtBQUssT0FBTyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUM7SUFFeEQsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUNyQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCAqIGFzIHNlY3JldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvbnN0cnVjdCwgTm9kZSB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0ICogYXMgZGQgZnJvbSAnZGF0YWRvZy1jZGstY29uc3RydWN0cy12Mic7XG5pbXBvcnQgeyBEYXRhZG9nQXBwU2VjTW9kZSB9IGZyb20gJ2RhdGFkb2ctY2RrLWNvbnN0cnVjdHMtdjInO1xuaW1wb3J0IHsgRGF0YWRvZ0xhbWJkYVByb3BzIH0gZnJvbSAnZGF0YWRvZy1jZGstY29uc3RydWN0cy12Mi9saWIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEYXRhZG9nU2hhcmVkU2VjcmV0IH0gZnJvbSAnLi9kYXRhZG9nLXNoYXJlZC1zZWNyZXRzJztcbmltcG9ydCB7IHZhbGlkYXRlTGFtYmRhRW52aXJvbm1lbnQgfSBmcm9tICcuL3ZhbGlkYXRlLWxhbWJkYS1lbnZpcm9ubWVudCc7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBEYXRhZG9nTGFtYmRhSW5zdHJ1bWVudGF0aW9uIGNvbnN0cnVjdC5cbiAqIENvcGllZCBvdmVyIGZyb20gb3JpZ2luYWwgRGF0YWRvZyBjb25zdHJ1Y3QuXG4gKiBUaGlzIGludGVyZmFjZSBpcyBpbnRlbnRpb25hbGx5IG5vdCBleHRlbmRpbmcgdGhlIG9yaWdpbmFsIERhdGFkb2dQcm9wcywgc28gdGhhdCB0aGUgZGVwZW5kZW5jeSBuZWVkcyB0byBiZSBidW5kbGVkIGFzIHdlbGwuXG4gKlxuICogbGF0ZXN0IHZlcnNpb24gZm9yIG5vZGVMYXllclZlcnNpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RhdGFkb2ctbGFtYmRhLWpzL3JlbGVhc2VzXG4gKlxuICogbGF0ZXN0IHZlcnNpb24gZm9yIGV4dGVuc2lvbkxheWVyVmVyc2lvbjogaHR0cHM6Ly9naXRodWIuY29tL0RhdGFEb2cvZGF0YWRvZy1sYW1iZGEtZXh0ZW5zaW9uL3JlbGVhc2VzXG4gKlxuICpcbiAqIEBzZWUgZGQuRGF0YWRvZ1Byb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWRvZ0xhbWJkYUluc3RydW1lbnRhdGlvblByb3BzIHtcbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHRoZSBzeXN0ZW0gbG9nIGxpbmVzIChTVEFSVCwgRU5ELCBSRVBPUlQpIGZyb20gTGFtYmRhIGxvZ3MuXG4gICAqIERhdGFkb2cgcmVjb21tZW5kcyBrZWVwaW5nIHRoZSBSRVBPUlQgbG9ncywgYXMgdGhleSBhcmUgdXNlZCB0byBwb3B1bGF0ZSB0aGUgaW52b2NhdGlvbnMgbGlzdCBpbiB0aGVcbiAgICogc2VydmVybGVzcyBmdW5jdGlvbiB2aWV3cy5cbiAgICogaHR0cHM6Ly9kb2NzLmRhdGFkb2docS5jb20vbG9ncy9ndWlkZS9mb3J3YXJkZXIvP3RhYj1jbG91ZGZvcm1hdGlvbiZzaXRlPXVzI2xvZy1maWx0ZXJpbmctb3B0aW9uYWxcbiAgICovXG4gIHJlYWRvbmx5IHN1cHByZXNzU3lzdGVtTG9ncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGVuaGFuY2VkIG1ldHJpY3MgZm9yIHRoZSBMYW1iZGEgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVFbmhhbmNlZE1ldHJpY3M/OiBib29sZWFuO1xuICByZWFkb25seSBub2RlTGF5ZXJWZXJzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGV4dGVuc2lvbkxheWVyVmVyc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBhZGRMYXllcnM/OiBib29sZWFuO1xuICByZWFkb25seSBmb3J3YXJkZXJBcm4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZsdXNoTWV0cmljc1RvTG9ncz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNpdGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFwaUtleT86IHN0cmluZztcbiAgcmVhZG9ubHkgYXBpS2V5U2VjcmV0QXJuPzogc3RyaW5nO1xuICByZWFkb25seSBhcGlLZXlTZWNyZXQ/OiBzZWNyZXRzLklTZWNyZXQ7XG4gIHJlYWRvbmx5IGFwaUttc0tleT86IHN0cmluZztcbiAgcmVhZG9ubHkgZW5hYmxlRGF0YWRvZ1RyYWNpbmc/OiBib29sZWFuO1xuICByZWFkb25seSBlbmFibGVEYXRhZG9nQVNNPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZW5hYmxlTWVyZ2VYcmF5VHJhY2VzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaW5qZWN0TG9nQ29udGV4dD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGxvZ0xldmVsPzogc3RyaW5nO1xuICByZWFkb25seSBlbmFibGVEYXRhZG9nTG9ncz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNhcHR1cmVMYW1iZGFQYXlsb2FkPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZW52Pzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuICByZWFkb25seSB0YWdzPzogc3RyaW5nO1xuICByZWFkb25seSBjcmVhdGVGb3J3YXJkZXJQZXJtaXNzaW9ucz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNvdXJjZUNvZGVJbnRlZ3JhdGlvbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGVuYWJsZUNvbGRTdGFydFRyYWNpbmc/OiBib29sZWFuO1xuICByZWFkb25seSBtaW5Db2xkU3RhcnRUcmFjZUR1cmF0aW9uPzogbnVtYmVyO1xuICByZWFkb25seSBjb2xkU3RhcnRUcmFjZVNraXBMaWJzPzogc3RyaW5nO1xuICByZWFkb25seSBlbmFibGVQcm9maWxpbmc/OiBib29sZWFuO1xuICByZWFkb25seSBlbmNvZGVBdXRob3JpemVyQ29udGV4dD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGRlY29kZUF1dGhvcml6ZXJDb250ZXh0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYXBtRmx1c2hEZWFkbGluZT86IHN0cmluZyB8IG51bWJlcjtcbiAgcmVhZG9ubHkgcmVkaXJlY3RIYW5kbGVyPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZ3JhbnRTZWNyZXRSZWFkQWNjZXNzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdXNlTGF5ZXJzRnJvbUFjY291bnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRhdGFkb2dBcHBTZWNNb2RlPzogRGF0YWRvZ0FwcFNlY01vZGU7XG59XG5cbmNvbnN0IExPR19FWENMVVNJT05fUlVMRVMgPSBPYmplY3QuZnJlZXplKFtcbiAge1xuICAgIHR5cGU6ICdleGNsdWRlX2F0X21hdGNoJyxcbiAgICBuYW1lOiAnZHJvcF9zeXN0ZW1fbG9ncycsXG4gICAgcGF0dGVybjogJ14oU1RBUlR8RU5EfFJFUE9SVCkgUmVxdWVzdElkOicsXG4gIH0sXG5dKTtcblxuLyoqXG4gKiBXcmFwcGVyIGNvbnN0cnVjdCBmb3IgRGF0YWRvZydzIExhbWJkYSBpbnN0cnVtZW50YXRpb24uXG4gKiBUaGlzIGNvbnN0cnVjdCB3aWxsIGNyZWF0ZSBhIERhdGFkb2cgY29uc3RydWN0IHdpdGggdGhlIHByb3ZpZGVkIHByb3BzIGFuZCBhZGQgdGhlIExhbWJkYSBmdW5jdGlvbnMgdG8gaXQuXG4gKiBQZXIgZGVmYXVsdCwgaXQgd2lsbCBkaXNhYmxlIGFsbCBhZGRpdGlvbmFsIGZlYXR1cmVzLCB0aGF0IGNhdXNlIERhdGFkb2cgY2hhcmdpbmcgZm9yIFNlcnZlcmxlc3MgRnVuY3Rpb25zIGZlYXR1cmVzLlxuICogU28ganVzdCBjaGFuZ2UgaXQsIGlmIHlvdSBuZWVkIHRoZSBhZHZhbmNlZCBmZWF0dXJlcy5cbiAqXG4gKiBBZGRpdGlvbmFsbHksIHNvbWUgZGVmYXVsdHMgZnJvbSB0aGUgZGF0YWRvZy1pbnRlZ3JhdGlvbiBhY2NvdW50IG1vZHVsZSBhcmUgYXBwbGllZDpcbiAqIC0gdGhlIHNlY3JldCBhbmQgc2l0ZSBmb3IgdGhlIEFQSSBrZXkgaXMgcmVhZCBmcm9tIGEgc2hhcmVkIHNlY3JldCBpbiByaW8tZGV2ZWxvcGVyLXRvb2xzIGFjY291bnRcbiAqXG4gKiBUbyB1c2UgaXQsIGluc3RhbGwgRGF0YWRvZyBDREsgQ29uc3RydWN0cyBwYWNrYWdlOlxuICogYGBgYmFzaFxuICogbnBtIGkgLUQgZGF0YWRvZy1jZGstY29uc3RydWN0cy12MkBeNVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhZG9nTGFtYmRhSW5zdHJ1bWVudGF0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSBkZWxlZ2F0ZTogZGQuRGF0YWRvZ0xhbWJkYTtcbiAgcHJpdmF0ZSBkYXRhZG9nU2VjcmV0OiBEYXRhZG9nU2hhcmVkU2VjcmV0O1xuICBwcml2YXRlIHJlYWRvbmx5IHNpdGU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmhhbmNlZE1ldHJpY3NFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHN1cHByZXNzU3lzdGVtTG9ncz86IGJvb2xlYW47XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEYXRhZG9nTGFtYmRhSW5zdHJ1bWVudGF0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5kYXRhZG9nU2VjcmV0ID0gRGF0YWRvZ1NoYXJlZFNlY3JldC5hcGlLZXlTZWNyZXQodGhpcyk7XG4gICAgdGhpcy5zdXBwcmVzc1N5c3RlbUxvZ3MgPSBwcm9wcy5zdXBwcmVzc1N5c3RlbUxvZ3M7XG5cbiAgICBjb25zdCByZXNvbHZlZERhdGFkb2dTZWNyZXQgPSBEYXRhZG9nU2hhcmVkU2VjcmV0LmNyZWRlbnRpYWxzU2VjcmV0KHRoaXMpO1xuICAgIHRoaXMuc2l0ZSA9IHJlc29sdmVkRGF0YWRvZ1NlY3JldC5nZXRTZWNyZXRWYWx1ZSgnU2l0ZScpLnVuc2FmZVVud3JhcCgpO1xuXG4gICAgY29uc3QgZmluYWxQcm9wczogRGF0YWRvZ0xhbWJkYVByb3BzID0ge1xuICAgICAgZW52OiAncHJvZCcsXG4gICAgICBhcGlLZXlTZWNyZXRBcm46IHRoaXMuZGF0YWRvZ1NlY3JldC5zZWNyZXRBcm4sXG4gICAgICBzaXRlOiB0aGlzLnNpdGUsXG4gICAgICBlbmFibGVEYXRhZG9nTG9nczogdHJ1ZSxcbiAgICAgIGluamVjdExvZ0NvbnRleHQ6IHRydWUsXG4gICAgICBlbmFibGVEYXRhZG9nVHJhY2luZzogZmFsc2UsXG4gICAgICBlbmFibGVDb2xkU3RhcnRUcmFjaW5nOiBmYWxzZSxcbiAgICAgIGVuYWJsZU1lcmdlWHJheVRyYWNlczogZmFsc2UsXG4gICAgICBlbmFibGVQcm9maWxpbmc6IGZhbHNlLFxuICAgICAgZGF0YWRvZ0FwcFNlY01vZGU6IERhdGFkb2dBcHBTZWNNb2RlLk9GRixcbiAgICAgIHNvdXJjZUNvZGVJbnRlZ3JhdGlvbjogZ2V0U291cmNlQ29kZUludGVncmF0aW9uRGVmYXVsdCh0aGlzLm5vZGUpLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcblxuICAgIGRkLnZhbGlkYXRlUHJvcHMoZmluYWxQcm9wcyk7XG4gICAgZGQuY2hlY2tGb3JNdWx0aXBsZUFwaUtleXMoZmluYWxQcm9wcyk7XG5cbiAgICB0aGlzLmRlbGVnYXRlID0gbmV3IGRkLkRhdGFkb2dMYW1iZGEodGhpcywgJ0RhdGFkb2cnLCBmaW5hbFByb3BzKTtcbiAgICB0aGlzLmVuaGFuY2VkTWV0cmljc0VuYWJsZWQgPSBwcm9wcy5lbmFibGVFbmhhbmNlZE1ldHJpY3MgPz8gZmFsc2U7XG4gIH1cblxuICBhZGRMYW1iZGFGdW5jdGlvbnMobGFtYmRhRnVuY3Rpb25zOiBkZC5MYW1iZGFGdW5jdGlvbltdLCBjb25zdHJ1Y3Q/OiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBWYWxpZGF0ZSB0aGUgd2hvbGUgYmF0Y2ggYmVmb3JlIGNoYW5naW5nIGFueSBmdW5jdGlvbi5cbiAgICBsYW1iZGFGdW5jdGlvbnMuZm9yRWFjaCh2YWxpZGF0ZUxhbWJkYUVudmlyb25tZW50KTtcbiAgICBmb3IgKGNvbnN0IGxhbWJkYUZ1bmN0aW9uIG9mIGxhbWJkYUZ1bmN0aW9ucykge1xuICAgICAgdGhpcy5kYXRhZG9nU2VjcmV0LmdyYW50UmVhZChsYW1iZGFGdW5jdGlvbik7XG4gICAgICBsYW1iZGFGdW5jdGlvbi5hZGRFbnZpcm9ubWVudCgnRERfRU5IQU5DRURfTUVUUklDUycsIGAke3RoaXMuZW5oYW5jZWRNZXRyaWNzRW5hYmxlZH1gKTtcbiAgICAgIGlmICh0aGlzLnN1cHByZXNzU3lzdGVtTG9ncykge1xuICAgICAgICBsYW1iZGFGdW5jdGlvbi5hZGRFbnZpcm9ubWVudCgnRERfTE9HU19DT05GSUdfUFJPQ0VTU0lOR19SVUxFUycsIEpTT04uc3RyaW5naWZ5KExPR19FWENMVVNJT05fUlVMRVMpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5kZWxlZ2F0ZS5hZGRMYW1iZGFGdW5jdGlvbnMobGFtYmRhRnVuY3Rpb25zLCBjb25zdHJ1Y3QpO1xuICB9XG5cbiAgYWRkR2l0Q29tbWl0TWV0YWRhdGEobGFtYmRhRnVuY3Rpb25zOiBkZC5MYW1iZGFGdW5jdGlvbltdLCBnaXRDb21taXRTaGE/OiBzdHJpbmcsIGdpdFJlcG9Vcmw/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGVnYXRlLmFkZEdpdENvbW1pdE1ldGFkYXRhKGxhbWJkYUZ1bmN0aW9ucywgZ2l0Q29tbWl0U2hhLCBnaXRSZXBvVXJsKTtcbiAgfVxuICBhZGRGb3J3YXJkZXJUb05vbkxhbWJkYUxvZ0dyb3Vwcyhsb2dHcm91cHM6IGxvZ3MuSUxvZ0dyb3VwW10pOiB2b2lkIHtcbiAgICB0aGlzLmRlbGVnYXRlLmFkZEZvcndhcmRlclRvTm9uTGFtYmRhTG9nR3JvdXBzKGxvZ0dyb3Vwcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBub2RlIHRvIGNoZWNrIGZvciB0aGUgY29udGV4dCB2YWx1ZVxuICogQHJldHVybnMgdHJ1ZSBhcyBhIGRlZmF1bHQgaWYgbm90IGRpc2FibGVkIHZpYSBjb250ZXh0XG4gKi9cbmNvbnN0IGdldFNvdXJjZUNvZGVJbnRlZ3JhdGlvbkRlZmF1bHQgPSAobm9kZTogTm9kZSk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCB2YWx1ZSA9IG5vZGUudHJ5R2V0Q29udGV4dCgnQHJpby1jbG91ZC9jZGstdjItY29uc3RydWN0czplbmFibGVTb3VyY2VDb2RlSW50ZWdyYXRpb24nKTtcblxuICBjb25zdCBpc0Rpc2FibGVkID0gdmFsdWUgPT09ICdmYWxzZScgfHwgdmFsdWUgPT09IGZhbHNlO1xuXG4gIHJldHVybiAhaXNEaXNhYmxlZDtcbn07XG4iXX0=
|