@trautonen/cdk-dns-validated-certificate 0.0.2 → 0.0.4
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/.gitattributes +1 -0
- package/.jsii +22 -22
- package/.prettierignore +1 -0
- package/.projenrc.ts +10 -1
- package/assets/certificate-requestor.lambda/index.js +283 -0
- package/assets/certificate-requestor.lambda/index.js.map +7 -0
- package/lib/certificate-requestor-function.d.ts +13 -0
- package/lib/certificate-requestor-function.js +23 -0
- package/lib/certificate-requestor.lambda.js +243 -0
- package/lib/dns-validated-certificate.js +5 -8
- package/package.json +4 -1
- package/lib/lambda/handler.js +0 -243
- /package/lib/{lambda/handler.d.ts → certificate-requestor.lambda.d.ts} +0 -0
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handler = void 0;
|
|
4
|
+
const crypto = require("crypto");
|
|
5
|
+
const client_acm_1 = require("@aws-sdk/client-acm");
|
|
6
|
+
const client_route_53_1 = require("@aws-sdk/client-route-53");
|
|
7
|
+
const client_sts_1 = require("@aws-sdk/client-sts");
|
|
8
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
9
|
+
const containsSame = (array1, array2) => {
|
|
10
|
+
if (array1.length !== array2.length)
|
|
11
|
+
return false;
|
|
12
|
+
return array1.every((v1) => array2.includes(v1));
|
|
13
|
+
};
|
|
14
|
+
const tryFor = async (maxSeconds, timeoutError, fn) => {
|
|
15
|
+
const startTime = Date.now();
|
|
16
|
+
// eslint-disable-next-line no-constant-condition
|
|
17
|
+
for (let i = 0; true; i++) {
|
|
18
|
+
if (Date.now() > startTime + maxSeconds * 1000) {
|
|
19
|
+
throw new Error(timeoutError);
|
|
20
|
+
}
|
|
21
|
+
const result = await fn();
|
|
22
|
+
if (result !== null) {
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
const base = Math.pow(2, i);
|
|
26
|
+
await sleep(Math.random() * base * 50 + base * 150);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const parseProperties = (properties) => {
|
|
30
|
+
// maybe should actually parse and not just assume
|
|
31
|
+
return properties;
|
|
32
|
+
};
|
|
33
|
+
const parseDomainValidationRecords = (certificate) => {
|
|
34
|
+
const options = certificate.DomainValidationOptions ?? [];
|
|
35
|
+
console.log('options: ', options);
|
|
36
|
+
if (options.length > 0 && options.every((opt) => opt.ResourceRecord?.Name)) {
|
|
37
|
+
const uniqueRecords = [...new Map(options.map((opt) => [opt.ResourceRecord?.Name, opt.ResourceRecord])).values()];
|
|
38
|
+
return uniqueRecords.map((record) => {
|
|
39
|
+
return {
|
|
40
|
+
Name: record.Name,
|
|
41
|
+
Type: record.Type,
|
|
42
|
+
TTL: 30,
|
|
43
|
+
ResourceRecords: [
|
|
44
|
+
{
|
|
45
|
+
Value: record.Value,
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
};
|
|
53
|
+
const changeRecordSets = async (route53, action, records, hostedZoneId) => {
|
|
54
|
+
const changeRecordSetsInput = {
|
|
55
|
+
HostedZoneId: hostedZoneId,
|
|
56
|
+
ChangeBatch: {
|
|
57
|
+
Changes: records.map((record) => ({
|
|
58
|
+
Action: action,
|
|
59
|
+
ResourceRecordSet: record,
|
|
60
|
+
})),
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
const { ChangeInfo } = await route53.send(new client_route_53_1.ChangeResourceRecordSetsCommand(changeRecordSetsInput));
|
|
64
|
+
const result = await (0, client_route_53_1.waitUntilResourceRecordSetsChanged)({ client: route53, maxWaitTime: 180 }, { Id: ChangeInfo?.Id });
|
|
65
|
+
if (result.state !== 'SUCCESS') {
|
|
66
|
+
throw new Error(`Record sets never changed for hosted zone ${hostedZoneId}: [${result.state}] ${result.reason ?? ''}`);
|
|
67
|
+
}
|
|
68
|
+
return ChangeInfo?.Id;
|
|
69
|
+
};
|
|
70
|
+
const requestCertificate = async (acm, route53, requestId, properties) => {
|
|
71
|
+
const { HostedZoneId, DomainName, SubjectAlternativeNames, TransparencyLoggingEnabled } = properties;
|
|
72
|
+
console.log(`Requesting certificate for ${DomainName}`);
|
|
73
|
+
const requestCertificateInput = {
|
|
74
|
+
DomainName,
|
|
75
|
+
SubjectAlternativeNames: SubjectAlternativeNames,
|
|
76
|
+
IdempotencyToken: crypto.createHash('sha256').update(requestId).digest('hex').slice(0, 32),
|
|
77
|
+
ValidationMethod: 'DNS',
|
|
78
|
+
Options: {
|
|
79
|
+
CertificateTransparencyLoggingPreference: TransparencyLoggingEnabled ? 'ENABLED' : 'DISABLED',
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
const { CertificateArn } = await acm.send(new client_acm_1.RequestCertificateCommand(requestCertificateInput));
|
|
83
|
+
console.log(`Certificate ${CertificateArn} requested`);
|
|
84
|
+
const validationMaxSeconds = 180;
|
|
85
|
+
const validationTimeoutError = `Domain validation options were not found in ${validationMaxSeconds} seconds`;
|
|
86
|
+
const validationRecords = await tryFor(validationMaxSeconds, validationTimeoutError, async () => {
|
|
87
|
+
const describeCertificateInput = {
|
|
88
|
+
CertificateArn,
|
|
89
|
+
};
|
|
90
|
+
const { Certificate } = await acm.send(new client_acm_1.DescribeCertificateCommand(describeCertificateInput));
|
|
91
|
+
return parseDomainValidationRecords(Certificate);
|
|
92
|
+
});
|
|
93
|
+
console.log(`Upserting ${validationRecords.length} validation record(s) into hosted zone ${HostedZoneId}:`);
|
|
94
|
+
validationRecords.forEach((record) => console.log(`${record.Name} ${record.Type} ${record.ResourceRecords?.map((rr) => rr.Value).join(',')}`));
|
|
95
|
+
const changeId = await changeRecordSets(route53, 'UPSERT', validationRecords, HostedZoneId);
|
|
96
|
+
console.log(`All validation records changed succesfully for change id ${changeId}`);
|
|
97
|
+
console.log(`Waiting for certificate ${CertificateArn} to validate`);
|
|
98
|
+
const result = await (0, client_acm_1.waitUntilCertificateValidated)({ client: acm, maxWaitTime: 300 }, { CertificateArn });
|
|
99
|
+
if (result.state !== 'SUCCESS') {
|
|
100
|
+
throw new Error(`Certificate failed ${CertificateArn} to validate: [${result.state}] ${result.reason ?? ''}`);
|
|
101
|
+
}
|
|
102
|
+
console.log(`Certificate ${CertificateArn} successfully validated`);
|
|
103
|
+
return CertificateArn;
|
|
104
|
+
};
|
|
105
|
+
const deleteCertificate = async (acm, route53, certificateArn, hostedZoneId, cleanupValidationRecords) => {
|
|
106
|
+
console.log(`Waiting for certificate ${certificateArn} usage to drain before deletion`);
|
|
107
|
+
const waitUsageMaxSeconds = 600;
|
|
108
|
+
const waitUsageTimeoutError = `Certificate was still in use after ${waitUsageMaxSeconds} seconds`;
|
|
109
|
+
const certificate = await tryFor(waitUsageMaxSeconds, waitUsageTimeoutError, async () => {
|
|
110
|
+
const describeCertificateInput = {
|
|
111
|
+
CertificateArn: certificateArn,
|
|
112
|
+
};
|
|
113
|
+
const { Certificate } = await acm.send(new client_acm_1.DescribeCertificateCommand(describeCertificateInput));
|
|
114
|
+
const inUseBy = Certificate?.InUseBy ?? [];
|
|
115
|
+
if (inUseBy.length > 0) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
return Certificate;
|
|
119
|
+
});
|
|
120
|
+
console.log('Certificate is unused and will be deleted');
|
|
121
|
+
const validationRecords = parseDomainValidationRecords(certificate);
|
|
122
|
+
if (validationRecords && cleanupValidationRecords) {
|
|
123
|
+
console.log(`Deleting ${validationRecords.length} validation record(s) from hosted zone ${hostedZoneId}`);
|
|
124
|
+
try {
|
|
125
|
+
const changeId = await changeRecordSets(route53, 'DELETE', validationRecords, hostedZoneId);
|
|
126
|
+
console.log(`All validation records removed successfully for change id ${changeId}`);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (error instanceof client_route_53_1.InvalidChangeBatch && error.message.includes('not found')) {
|
|
130
|
+
// there's a deletion race condition where some other certificate has already deleted the records
|
|
131
|
+
console.log(`All validation records have already been removed by some other certificate`);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
console.log(`Deleting certificate ${certificateArn}`);
|
|
139
|
+
const deleteCertificateInput = {
|
|
140
|
+
CertificateArn: certificateArn,
|
|
141
|
+
};
|
|
142
|
+
await acm.send(new client_acm_1.DeleteCertificateCommand(deleteCertificateInput));
|
|
143
|
+
console.log(`Certificate ${certificateArn} successfully deleted`);
|
|
144
|
+
};
|
|
145
|
+
const addTags = async (acm, certificateArn, tags) => {
|
|
146
|
+
const tagList = Array.from(Object.entries(tags).map(([Key, Value]) => ({ Key, Value })));
|
|
147
|
+
const addTagsInput = {
|
|
148
|
+
CertificateArn: certificateArn,
|
|
149
|
+
Tags: tagList,
|
|
150
|
+
};
|
|
151
|
+
console.log(`Adding ${tagList.length} tags to certificate ${certificateArn}`);
|
|
152
|
+
await acm.send(new client_acm_1.AddTagsToCertificateCommand(addTagsInput));
|
|
153
|
+
console.log(`All tags successfully added to certificate ${certificateArn}`);
|
|
154
|
+
};
|
|
155
|
+
const shouldRequestNew = (oldProperties, newProperties) => {
|
|
156
|
+
if (oldProperties.HostedZoneId !== newProperties.HostedZoneId)
|
|
157
|
+
return true;
|
|
158
|
+
if (oldProperties.DomainName !== newProperties.DomainName)
|
|
159
|
+
return true;
|
|
160
|
+
if (oldProperties.CertificateRegion !== newProperties.CertificateRegion)
|
|
161
|
+
return true;
|
|
162
|
+
if (!containsSame(oldProperties.SubjectAlternativeNames ?? [], newProperties.SubjectAlternativeNames ?? []))
|
|
163
|
+
return true;
|
|
164
|
+
if (oldProperties.CleanupValidationRecords !== newProperties.CleanupValidationRecords)
|
|
165
|
+
return true;
|
|
166
|
+
if (oldProperties.TransparencyLoggingEnabled !== newProperties.TransparencyLoggingEnabled)
|
|
167
|
+
return true;
|
|
168
|
+
if (oldProperties.RemovalPolicy !== newProperties.RemovalPolicy)
|
|
169
|
+
return true;
|
|
170
|
+
return false;
|
|
171
|
+
};
|
|
172
|
+
const assumeRole = (roleArn, externalId) => {
|
|
173
|
+
if (!roleArn) {
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
return async () => {
|
|
177
|
+
const sts = new client_sts_1.STSClient({ retryMode: 'adaptive' });
|
|
178
|
+
const assumeRoleInput = {
|
|
179
|
+
RoleArn: roleArn,
|
|
180
|
+
RoleSessionName: 'CertificateRequestor',
|
|
181
|
+
ExternalId: externalId,
|
|
182
|
+
};
|
|
183
|
+
const { Credentials } = await sts.send(new client_sts_1.AssumeRoleCommand(assumeRoleInput));
|
|
184
|
+
return {
|
|
185
|
+
accessKeyId: Credentials?.AccessKeyId,
|
|
186
|
+
secretAccessKey: Credentials?.SecretAccessKey,
|
|
187
|
+
sessionToken: Credentials?.SessionToken,
|
|
188
|
+
expiration: Credentials?.Expiration,
|
|
189
|
+
};
|
|
190
|
+
};
|
|
191
|
+
};
|
|
192
|
+
const handler = async (event) => {
|
|
193
|
+
const properties = parseProperties(event.ResourceProperties);
|
|
194
|
+
const acm = new client_acm_1.ACMClient({ region: properties.CertificateRegion, retryMode: 'adaptive' });
|
|
195
|
+
const route53 = new client_route_53_1.Route53Client({
|
|
196
|
+
retryMode: 'adaptive',
|
|
197
|
+
credentials: assumeRole(properties.ValidationRoleArn, properties.ValidationExternalId),
|
|
198
|
+
});
|
|
199
|
+
switch (event.RequestType) {
|
|
200
|
+
case 'Create': {
|
|
201
|
+
const certificateArn = await requestCertificate(acm, route53, event.RequestId, properties);
|
|
202
|
+
if (properties.Tags && Object.entries(properties.Tags).length > 0) {
|
|
203
|
+
await addTags(acm, certificateArn, properties.Tags);
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
PhysicalResourceId: certificateArn,
|
|
207
|
+
Data: {
|
|
208
|
+
Arn: certificateArn,
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
case 'Update': {
|
|
213
|
+
let certificateArn = event.PhysicalResourceId;
|
|
214
|
+
if (shouldRequestNew(parseProperties(event.OldResourceProperties), properties)) {
|
|
215
|
+
certificateArn = await requestCertificate(acm, route53, event.RequestId, properties);
|
|
216
|
+
}
|
|
217
|
+
if (properties.Tags && Object.entries(properties.Tags).length > 0) {
|
|
218
|
+
await addTags(acm, certificateArn, properties.Tags);
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
PhysicalResourceId: certificateArn,
|
|
222
|
+
Data: {
|
|
223
|
+
Arn: certificateArn,
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
case 'Delete': {
|
|
228
|
+
const certificateArn = event.PhysicalResourceId;
|
|
229
|
+
if (properties.RemovalPolicy === 'destroy') {
|
|
230
|
+
await deleteCertificate(acm, route53, certificateArn, properties.HostedZoneId, properties.CleanupValidationRecords);
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
PhysicalResourceId: certificateArn,
|
|
234
|
+
Data: {
|
|
235
|
+
Arn: certificateArn,
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
throw new Error(`Invalid request type`);
|
|
241
|
+
};
|
|
242
|
+
exports.handler = handler;
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGUtcmVxdWVzdG9yLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jZXJ0aWZpY2F0ZS1yZXF1ZXN0b3IubGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFnQztBQUNoQyxvREFZNEI7QUFDNUIsOERBUWlDO0FBQ2pDLG9EQUEwRjtBQWlCMUYsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFFL0UsTUFBTSxZQUFZLEdBQUcsQ0FBSSxNQUFXLEVBQUUsTUFBVyxFQUFXLEVBQUU7SUFDNUQsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFDakQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFDbEQsQ0FBQyxDQUFBO0FBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUFLLFVBQWtCLEVBQUUsWUFBb0IsRUFBRSxFQUEyQixFQUFjLEVBQUU7SUFDNUcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQzVCLGlEQUFpRDtJQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDekIsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLFVBQVUsR0FBRyxJQUFJLEVBQUU7WUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQTtTQUM5QjtRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUE7UUFD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a0JBQWtCLENBQUE7WUFDL0MsSUFBSSxVQUFVLENBQUMsYUFBYSxLQUFLLFNBQVMsRUFBRTtnQkFDMUMsTUFBTSxpQkFBaUIsQ0FDckIsR0FBRyxFQUNILE9BQU8sRUFDUCxjQUFjLEVBQ2QsVUFBVSxDQUFDLFlBQVksRUFDdkIsVUFBVSxDQUFDLHdCQUF3QixDQUNwQyxDQUFBO2FBQ0Y7WUFDRCxPQUFPO2dCQUNMLGtCQUFrQixFQUFFLGNBQWM7Z0JBQ2xDLElBQUksRUFBRTtvQkFDSixHQUFHLEVBQUUsY0FBYztpQkFDcEI7YUFDRixDQUFBO1NBQ0Y7S0FDRjtJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtBQUN6QyxDQUFDLENBQUE7QUF6RFksUUFBQSxPQUFPLFdBeURuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQge1xuICBBQ01DbGllbnQsXG4gIEFkZFRhZ3NUb0NlcnRpZmljYXRlQ29tbWFuZCxcbiAgQWRkVGFnc1RvQ2VydGlmaWNhdGVDb21tYW5kSW5wdXQsXG4gIENlcnRpZmljYXRlRGV0YWlsLFxuICBEZWxldGVDZXJ0aWZpY2F0ZUNvbW1hbmQsXG4gIERlbGV0ZUNlcnRpZmljYXRlQ29tbWFuZElucHV0LFxuICBEZXNjcmliZUNlcnRpZmljYXRlQ29tbWFuZCxcbiAgRGVzY3JpYmVDZXJ0aWZpY2F0ZUNvbW1hbmRJbnB1dCxcbiAgUmVxdWVzdENlcnRpZmljYXRlQ29tbWFuZCxcbiAgUmVxdWVzdENlcnRpZmljYXRlQ29tbWFuZElucHV0LFxuICB3YWl0VW50aWxDZXJ0aWZpY2F0ZVZhbGlkYXRlZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWFjbSdcbmltcG9ydCB7XG4gIENoYW5nZUFjdGlvbixcbiAgQ2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzQ29tbWFuZCxcbiAgQ2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzQ29tbWFuZElucHV0LFxuICBJbnZhbGlkQ2hhbmdlQmF0Y2gsXG4gIFJlc291cmNlUmVjb3JkU2V0LFxuICBSb3V0ZTUzQ2xpZW50LFxuICB3YWl0VW50aWxSZXNvdXJjZVJlY29yZFNldHNDaGFuZ2VkLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtcm91dGUtNTMnXG5pbXBvcnQgeyBBc3N1bWVSb2xlQ29tbWFuZCwgQXNzdW1lUm9sZUNvbW1hbmRJbnB1dCwgU1RTQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXN0cydcbmltcG9ydCB0eXBlIHsgQXdzQ3JlZGVudGlhbElkZW50aXR5LCBQcm92aWRlciB9IGZyb20gJ0Bhd3Mtc2RrL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlRXZlbnQgfSBmcm9tICdhd3MtbGFtYmRhJ1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0aWVzID0ge1xuICBIb3N0ZWRab25lSWQ6IHN0cmluZ1xuICBEb21haW5OYW1lOiBzdHJpbmdcbiAgU3ViamVjdEFsdGVybmF0aXZlTmFtZXM/OiBzdHJpbmdbXVxuICBDZXJ0aWZpY2F0ZVJlZ2lvbjogc3RyaW5nXG4gIFZhbGlkYXRpb25Sb2xlQXJuPzogc3RyaW5nXG4gIFZhbGlkYXRpb25FeHRlcm5hbElkPzogc3RyaW5nXG4gIENsZWFudXBWYWxpZGF0aW9uUmVjb3JkczogYm9vbGVhblxuICBUcmFuc3BhcmVuY3lMb2dnaW5nRW5hYmxlZDogYm9vbGVhblxuICBUYWdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICBSZW1vdmFsUG9saWN5OiBzdHJpbmdcbn1cblxuY29uc3Qgc2xlZXAgPSAobXM6IG51bWJlcikgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKVxuXG5jb25zdCBjb250YWluc1NhbWUgPSA8VD4oYXJyYXkxOiBUW10sIGFycmF5MjogVFtdKTogYm9vbGVhbiA9PiB7XG4gIGlmIChhcnJheTEubGVuZ3RoICE9PSBhcnJheTIubGVuZ3RoKSByZXR1cm4gZmFsc2VcbiAgcmV0dXJuIGFycmF5MS5ldmVyeSgodjEpID0+IGFycmF5Mi5pbmNsdWRlcyh2MSkpXG59XG5cbmNvbnN0IHRyeUZvciA9IGFzeW5jIDxUPihtYXhTZWNvbmRzOiBudW1iZXIsIHRpbWVvdXRFcnJvcjogc3RyaW5nLCBmbjogKCkgPT4gUHJvbWlzZTxUIHwgbnVsbD4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RhbnQtY29uZGl0aW9uXG4gIGZvciAobGV0IGkgPSAwOyB0cnVlOyBpKyspIHtcbiAgICBpZiAoRGF0ZS5ub3coKSA+IHN0YXJ0VGltZSArIG1heFNlY29uZHMgKiAxMDAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IodGltZW91dEVycm9yKVxuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmbigpXG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgICBjb25zdCBiYXNlID0gTWF0aC5wb3coMiwgaSlcbiAgICBhd2FpdCBzbGVlcChNYXRoLnJhbmRvbSgpICogYmFzZSAqIDUwICsgYmFzZSAqIDE1MClcbiAgfVxufVxuXG5jb25zdCBwYXJzZVByb3BlcnRpZXMgPSAocHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb3BlcnRpZXMgPT4ge1xuICAvLyBtYXliZSBzaG91bGQgYWN0dWFsbHkgcGFyc2UgYW5kIG5vdCBqdXN0IGFzc3VtZVxuICByZXR1cm4gcHJvcGVydGllcyBhcyB1bmtub3duIGFzIFByb3BlcnRpZXNcbn1cblxuY29uc3QgcGFyc2VEb21haW5WYWxpZGF0aW9uUmVjb3JkcyA9IChjZXJ0aWZpY2F0ZTogQ2VydGlmaWNhdGVEZXRhaWwpOiBSZXNvdXJjZVJlY29yZFNldFtdIHwgbnVsbCA9PiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjZXJ0aWZpY2F0ZS5Eb21haW5WYWxpZGF0aW9uT3B0aW9ucyA/PyBbXVxuICBjb25zb2xlLmxvZygnb3B0aW9uczogJywgb3B0aW9ucylcbiAgaWYgKG9wdGlvbnMubGVuZ3RoID4gMCAmJiBvcHRpb25zLmV2ZXJ5KChvcHQpID0+IG9wdC5SZXNvdXJjZVJlY29yZD8uTmFtZSkpIHtcbiAgICBjb25zdCB1bmlxdWVSZWNvcmRzID0gWy4uLm5ldyBNYXAob3B0aW9ucy5tYXAoKG9wdCkgPT4gW29wdC5SZXNvdXJjZVJlY29yZD8uTmFtZSEsIG9wdC5SZXNvdXJjZVJlY29yZCFdKSkudmFsdWVzKCldXG4gICAgcmV0dXJuIHVuaXF1ZVJlY29yZHMubWFwKChyZWNvcmQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIE5hbWU6IHJlY29yZC5OYW1lLFxuICAgICAgICBUeXBlOiByZWNvcmQuVHlwZSxcbiAgICAgICAgVFRMOiAzMCxcbiAgICAgICAgUmVzb3VyY2VSZWNvcmRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgVmFsdWU6IHJlY29yZC5WYWx1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgY2hhbmdlUmVjb3JkU2V0cyA9IGFzeW5jIChcbiAgcm91dGU1MzogUm91dGU1M0NsaWVudCxcbiAgYWN0aW9uOiBDaGFuZ2VBY3Rpb24sXG4gIHJlY29yZHM6IFJlc291cmNlUmVjb3JkU2V0W10sXG4gIGhvc3RlZFpvbmVJZDogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBjaGFuZ2VSZWNvcmRTZXRzSW5wdXQ6IENoYW5nZVJlc291cmNlUmVjb3JkU2V0c0NvbW1hbmRJbnB1dCA9IHtcbiAgICBIb3N0ZWRab25lSWQ6IGhvc3RlZFpvbmVJZCxcbiAgICBDaGFuZ2VCYXRjaDoge1xuICAgICAgQ2hhbmdlczogcmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gKHtcbiAgICAgICAgQWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIFJlc291cmNlUmVjb3JkU2V0OiByZWNvcmQsXG4gICAgICB9KSksXG4gICAgfSxcbiAgfVxuICBjb25zdCB7IENoYW5nZUluZm8gfSA9IGF3YWl0IHJvdXRlNTMuc2VuZChuZXcgQ2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzQ29tbWFuZChjaGFuZ2VSZWNvcmRTZXRzSW5wdXQpKVxuICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWl0VW50aWxSZXNvdXJjZVJlY29yZFNldHNDaGFuZ2VkKHsgY2xpZW50OiByb3V0ZTUzLCBtYXhXYWl0VGltZTogMTgwIH0sIHsgSWQ6IENoYW5nZUluZm8/LklkIH0pXG4gIGlmIChyZXN1bHQuc3RhdGUgIT09ICdTVUNDRVNTJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBSZWNvcmQgc2V0cyBuZXZlciBjaGFuZ2VkIGZvciBob3N0ZWQgem9uZSAke2hvc3RlZFpvbmVJZH06IFske3Jlc3VsdC5zdGF0ZX1dICR7cmVzdWx0LnJlYXNvbiA/PyAnJ31gXG4gICAgKVxuICB9XG4gIHJldHVybiBDaGFuZ2VJbmZvPy5JZCFcbn1cblxuY29uc3QgcmVxdWVzdENlcnRpZmljYXRlID0gYXN5bmMgKFxuICBhY206IEFDTUNsaWVudCxcbiAgcm91dGU1MzogUm91dGU1M0NsaWVudCxcbiAgcmVxdWVzdElkOiBzdHJpbmcsXG4gIHByb3BlcnRpZXM6IFByb3BlcnRpZXNcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHsgSG9zdGVkWm9uZUlkLCBEb21haW5OYW1lLCBTdWJqZWN0QWx0ZXJuYXRpdmVOYW1lcywgVHJhbnNwYXJlbmN5TG9nZ2luZ0VuYWJsZWQgfSA9IHByb3BlcnRpZXNcblxuICBjb25zb2xlLmxvZyhgUmVxdWVzdGluZyBjZXJ0aWZpY2F0ZSBmb3IgJHtEb21haW5OYW1lfWApXG5cbiAgY29uc3QgcmVxdWVzdENlcnRpZmljYXRlSW5wdXQ6IFJlcXVlc3RDZXJ0aWZpY2F0ZUNvbW1hbmRJbnB1dCA9IHtcbiAgICBEb21haW5OYW1lLFxuICAgIFN1YmplY3RBbHRlcm5hdGl2ZU5hbWVzOiBTdWJqZWN0QWx0ZXJuYXRpdmVOYW1lcyxcbiAgICBJZGVtcG90ZW5jeVRva2VuOiBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHJlcXVlc3RJZCkuZGlnZXN0KCdoZXgnKS5zbGljZSgwLCAzMiksXG4gICAgVmFsaWRhdGlvbk1ldGhvZDogJ0ROUycsXG4gICAgT3B0aW9uczoge1xuICAgICAgQ2VydGlmaWNhdGVUcmFuc3BhcmVuY3lMb2dnaW5nUHJlZmVyZW5jZTogVHJhbnNwYXJlbmN5TG9nZ2luZ0VuYWJsZWQgPyAnRU5BQkxFRCcgOiAnRElTQUJMRUQnLFxuICAgIH0sXG4gIH1cbiAgY29uc3QgeyBDZXJ0aWZpY2F0ZUFybiB9ID0gYXdhaXQgYWNtLnNlbmQobmV3IFJlcXVlc3RDZXJ0aWZpY2F0ZUNvbW1hbmQocmVxdWVzdENlcnRpZmljYXRlSW5wdXQpKVxuXG4gIGNvbnNvbGUubG9nKGBDZXJ0aWZpY2F0ZSAke0NlcnRpZmljYXRlQXJufSByZXF1ZXN0ZWRgKVxuXG4gIGNvbnN0IHZhbGlkYXRpb25NYXhTZWNvbmRzID0gMTgwXG4gIGNvbnN0IHZhbGlkYXRpb25UaW1lb3V0RXJyb3IgPSBgRG9tYWluIHZhbGlkYXRpb24gb3B0aW9ucyB3ZXJlIG5vdCBmb3VuZCBpbiAke3ZhbGlkYXRpb25NYXhTZWNvbmRzfSBzZWNvbmRzYFxuICBjb25zdCB2YWxpZGF0aW9uUmVjb3JkcyA9IGF3YWl0IHRyeUZvcih2YWxpZGF0aW9uTWF4U2Vjb25kcywgdmFsaWRhdGlvblRpbWVvdXRFcnJvciwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaWJlQ2VydGlmaWNhdGVJbnB1dDogRGVzY3JpYmVDZXJ0aWZpY2F0ZUNvbW1hbmRJbnB1dCA9IHtcbiAgICAgIENlcnRpZmljYXRlQXJuLFxuICAgIH1cbiAgICBjb25zdCB7IENlcnRpZmljYXRlIH0gPSBhd2FpdCBhY20uc2VuZChuZXcgRGVzY3JpYmVDZXJ0aWZpY2F0ZUNvbW1hbmQoZGVzY3JpYmVDZXJ0aWZpY2F0ZUlucHV0KSlcbiAgICByZXR1cm4gcGFyc2VEb21haW5WYWxpZGF0aW9uUmVjb3JkcyhDZXJ0aWZpY2F0ZSEpXG4gIH0pXG5cbiAgY29uc29sZS5sb2coYFVwc2VydGluZyAke3ZhbGlkYXRpb25SZWNvcmRzLmxlbmd0aH0gdmFsaWRhdGlvbiByZWNvcmQocykgaW50byBob3N0ZWQgem9uZSAke0hvc3RlZFpvbmVJZH06YClcbiAgdmFsaWRhdGlvblJlY29yZHMuZm9yRWFjaCgocmVjb3JkKSA9PlxuICAgIGNvbnNvbGUubG9nKGAke3JlY29yZC5OYW1lfSAke3JlY29yZC5UeXBlfSAke3JlY29yZC5SZXNvdXJjZVJlY29yZHM/Lm1hcCgocnIpID0+IHJyLlZhbHVlKS5qb2luKCcsJyl9YClcbiAgKVxuICBjb25zdCBjaGFuZ2VJZCA9IGF3YWl0IGNoYW5nZVJlY29yZFNldHMocm91dGU1MywgJ1VQU0VSVCcsIHZhbGlkYXRpb25SZWNvcmRzLCBIb3N0ZWRab25lSWQpXG4gIGNvbnNvbGUubG9nKGBBbGwgdmFsaWRhdGlvbiByZWNvcmRzIGNoYW5nZWQgc3VjY2VzZnVsbHkgZm9yIGNoYW5nZSBpZCAke2NoYW5nZUlkfWApXG5cbiAgY29uc29sZS5sb2coYFdhaXRpbmcgZm9yIGNlcnRpZmljYXRlICR7Q2VydGlmaWNhdGVBcm59IHRvIHZhbGlkYXRlYClcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FpdFVudGlsQ2VydGlmaWNhdGVWYWxpZGF0ZWQoeyBjbGllbnQ6IGFjbSwgbWF4V2FpdFRpbWU6IDMwMCB9LCB7IENlcnRpZmljYXRlQXJuIH0pXG4gIGlmIChyZXN1bHQuc3RhdGUgIT09ICdTVUNDRVNTJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2VydGlmaWNhdGUgZmFpbGVkICR7Q2VydGlmaWNhdGVBcm59IHRvIHZhbGlkYXRlOiBbJHtyZXN1bHQuc3RhdGV9XSAke3Jlc3VsdC5yZWFzb24gPz8gJyd9YClcbiAgfVxuICBjb25zb2xlLmxvZyhgQ2VydGlmaWNhdGUgJHtDZXJ0aWZpY2F0ZUFybn0gc3VjY2Vzc2Z1bGx5IHZhbGlkYXRlZGApXG4gIHJldHVybiBDZXJ0aWZpY2F0ZUFybiFcbn1cblxuY29uc3QgZGVsZXRlQ2VydGlmaWNhdGUgPSBhc3luYyAoXG4gIGFjbTogQUNNQ2xpZW50LFxuICByb3V0ZTUzOiBSb3V0ZTUzQ2xpZW50LFxuICBjZXJ0aWZpY2F0ZUFybjogc3RyaW5nLFxuICBob3N0ZWRab25lSWQ6IHN0cmluZyxcbiAgY2xlYW51cFZhbGlkYXRpb25SZWNvcmRzOiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc29sZS5sb2coYFdhaXRpbmcgZm9yIGNlcnRpZmljYXRlICR7Y2VydGlmaWNhdGVBcm59IHVzYWdlIHRvIGRyYWluIGJlZm9yZSBkZWxldGlvbmApXG5cbiAgY29uc3Qgd2FpdFVzYWdlTWF4U2Vjb25kcyA9IDYwMFxuICBjb25zdCB3YWl0VXNhZ2VUaW1lb3V0RXJyb3IgPSBgQ2VydGlmaWNhdGUgd2FzIHN0aWxsIGluIHVzZSBhZnRlciAke3dhaXRVc2FnZU1heFNlY29uZHN9IHNlY29uZHNgXG4gIGNvbnN0IGNlcnRpZmljYXRlID0gYXdhaXQgdHJ5Rm9yKHdhaXRVc2FnZU1heFNlY29uZHMsIHdhaXRVc2FnZVRpbWVvdXRFcnJvciwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc2NyaWJlQ2VydGlmaWNhdGVJbnB1dDogRGVzY3JpYmVDZXJ0aWZpY2F0ZUNvbW1hbmRJbnB1dCA9IHtcbiAgICAgIENlcnRpZmljYXRlQXJuOiBjZXJ0aWZpY2F0ZUFybixcbiAgICB9XG4gICAgY29uc3QgeyBDZXJ0aWZpY2F0ZSB9ID0gYXdhaXQgYWNtLnNlbmQobmV3IERlc2NyaWJlQ2VydGlmaWNhdGVDb21tYW5kKGRlc2NyaWJlQ2VydGlmaWNhdGVJbnB1dCkpXG4gICAgY29uc3QgaW5Vc2VCeSA9IENlcnRpZmljYXRlPy5JblVzZUJ5ID8/IFtdXG4gICAgaWYgKGluVXNlQnkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIENlcnRpZmljYXRlIVxuICB9KVxuICBjb25zb2xlLmxvZygnQ2VydGlmaWNhdGUgaXMgdW51c2VkIGFuZCB3aWxsIGJlIGRlbGV0ZWQnKVxuXG4gIGNvbnN0IHZhbGlkYXRpb25SZWNvcmRzID0gcGFyc2VEb21haW5WYWxpZGF0aW9uUmVjb3JkcyhjZXJ0aWZpY2F0ZSlcbiAgaWYgKHZhbGlkYXRpb25SZWNvcmRzICYmIGNsZWFudXBWYWxpZGF0aW9uUmVjb3Jkcykge1xuICAgIGNvbnNvbGUubG9nKGBEZWxldGluZyAke3ZhbGlkYXRpb25SZWNvcmRzLmxlbmd0aH0gdmFsaWRhdGlvbiByZWNvcmQocykgZnJvbSBob3N0ZWQgem9uZSAke2hvc3RlZFpvbmVJZH1gKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjaGFuZ2VJZCA9IGF3YWl0IGNoYW5nZVJlY29yZFNldHMocm91dGU1MywgJ0RFTEVURScsIHZhbGlkYXRpb25SZWNvcmRzLCBob3N0ZWRab25lSWQpXG4gICAgICBjb25zb2xlLmxvZyhgQWxsIHZhbGlkYXRpb24gcmVjb3JkcyByZW1vdmVkIHN1Y2Nlc3NmdWxseSBmb3IgY2hhbmdlIGlkICR7Y2hhbmdlSWR9YClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSW52YWxpZENoYW5nZUJhdGNoICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25vdCBmb3VuZCcpKSB7XG4gICAgICAgIC8vIHRoZXJlJ3MgYSBkZWxldGlvbiByYWNlIGNvbmRpdGlvbiB3aGVyZSBzb21lIG90aGVyIGNlcnRpZmljYXRlIGhhcyBhbHJlYWR5IGRlbGV0ZWQgdGhlIHJlY29yZHNcbiAgICAgICAgY29uc29sZS5sb2coYEFsbCB2YWxpZGF0aW9uIHJlY29yZHMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBieSBzb21lIG90aGVyIGNlcnRpZmljYXRlYClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coYERlbGV0aW5nIGNlcnRpZmljYXRlICR7Y2VydGlmaWNhdGVBcm59YClcbiAgY29uc3QgZGVsZXRlQ2VydGlmaWNhdGVJbnB1dDogRGVsZXRlQ2VydGlmaWNhdGVDb21tYW5kSW5wdXQgPSB7XG4gICAgQ2VydGlmaWNhdGVBcm46IGNlcnRpZmljYXRlQXJuLFxuICB9XG4gIGF3YWl0IGFjbS5zZW5kKG5ldyBEZWxldGVDZXJ0aWZpY2F0ZUNvbW1hbmQoZGVsZXRlQ2VydGlmaWNhdGVJbnB1dCkpXG4gIGNvbnNvbGUubG9nKGBDZXJ0aWZpY2F0ZSAke2NlcnRpZmljYXRlQXJufSBzdWNjZXNzZnVsbHkgZGVsZXRlZGApXG59XG5cbmNvbnN0IGFkZFRhZ3MgPSBhc3luYyAoYWNtOiBBQ01DbGllbnQsIGNlcnRpZmljYXRlQXJuOiBzdHJpbmcsIHRhZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IHtcbiAgY29uc3QgdGFnTGlzdCA9IEFycmF5LmZyb20oT2JqZWN0LmVudHJpZXModGFncykubWFwKChbS2V5LCBWYWx1ZV0pID0+ICh7IEtleSwgVmFsdWUgfSkpKVxuICBjb25zdCBhZGRUYWdzSW5wdXQ6IEFkZFRhZ3NUb0NlcnRpZmljYXRlQ29tbWFuZElucHV0ID0ge1xuICAgIENlcnRpZmljYXRlQXJuOiBjZXJ0aWZpY2F0ZUFybixcbiAgICBUYWdzOiB0YWdMaXN0LFxuICB9XG5cbiAgY29uc29sZS5sb2coYEFkZGluZyAke3RhZ0xpc3QubGVuZ3RofSB0YWdzIHRvIGNlcnRpZmljYXRlICR7Y2VydGlmaWNhdGVBcm59YClcbiAgYXdhaXQgYWNtLnNlbmQobmV3IEFkZFRhZ3NUb0NlcnRpZmljYXRlQ29tbWFuZChhZGRUYWdzSW5wdXQpKVxuICBjb25zb2xlLmxvZyhgQWxsIHRhZ3Mgc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIGNlcnRpZmljYXRlICR7Y2VydGlmaWNhdGVBcm59YClcbn1cblxuY29uc3Qgc2hvdWxkUmVxdWVzdE5ldyA9IChvbGRQcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzLCBuZXdQcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzKTogYm9vbGVhbiA9PiB7XG4gIGlmIChvbGRQcm9wZXJ0aWVzLkhvc3RlZFpvbmVJZCAhPT0gbmV3UHJvcGVydGllcy5Ib3N0ZWRab25lSWQpIHJldHVybiB0cnVlXG4gIGlmIChvbGRQcm9wZXJ0aWVzLkRvbWFpbk5hbWUgIT09IG5ld1Byb3BlcnRpZXMuRG9tYWluTmFtZSkgcmV0dXJuIHRydWVcbiAgaWYgKG9sZFByb3BlcnRpZXMuQ2VydGlmaWNhdGVSZWdpb24gIT09IG5ld1Byb3BlcnRpZXMuQ2VydGlmaWNhdGVSZWdpb24pIHJldHVybiB0cnVlXG4gIGlmICghY29udGFpbnNTYW1lKG9sZFByb3BlcnRpZXMuU3ViamVjdEFsdGVybmF0aXZlTmFtZXMgPz8gW10sIG5ld1Byb3BlcnRpZXMuU3ViamVjdEFsdGVybmF0aXZlTmFtZXMgPz8gW10pKVxuICAgIHJldHVybiB0cnVlXG4gIGlmIChvbGRQcm9wZXJ0aWVzLkNsZWFudXBWYWxpZGF0aW9uUmVjb3JkcyAhPT0gbmV3UHJvcGVydGllcy5DbGVhbnVwVmFsaWRhdGlvblJlY29yZHMpIHJldHVybiB0cnVlXG4gIGlmIChvbGRQcm9wZXJ0aWVzLlRyYW5zcGFyZW5jeUxvZ2dpbmdFbmFibGVkICE9PSBuZXdQcm9wZXJ0aWVzLlRyYW5zcGFyZW5jeUxvZ2dpbmdFbmFibGVkKSByZXR1cm4gdHJ1ZVxuICBpZiAob2xkUHJvcGVydGllcy5SZW1vdmFsUG9saWN5ICE9PSBuZXdQcm9wZXJ0aWVzLlJlbW92YWxQb2xpY3kpIHJldHVybiB0cnVlXG4gIHJldHVybiBmYWxzZVxufVxuXG5jb25zdCBhc3N1bWVSb2xlID0gKFxuICByb2xlQXJuOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGV4dGVybmFsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogUHJvdmlkZXI8QXdzQ3JlZGVudGlhbElkZW50aXR5PiB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghcm9sZUFybikge1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfVxuICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHN0cyA9IG5ldyBTVFNDbGllbnQoeyByZXRyeU1vZGU6ICdhZGFwdGl2ZScgfSlcbiAgICBjb25zdCBhc3N1bWVSb2xlSW5wdXQ6IEFzc3VtZVJvbGVDb21tYW5kSW5wdXQgPSB7XG4gICAgICBSb2xlQXJuOiByb2xlQXJuLFxuICAgICAgUm9sZVNlc3Npb25OYW1lOiAnQ2VydGlmaWNhdGVSZXF1ZXN0b3InLFxuICAgICAgRXh0ZXJuYWxJZDogZXh0ZXJuYWxJZCxcbiAgICB9XG4gICAgY29uc3QgeyBDcmVkZW50aWFscyB9ID0gYXdhaXQgc3RzLnNlbmQobmV3IEFzc3VtZVJvbGVDb21tYW5kKGFzc3VtZVJvbGVJbnB1dCkpXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY2Vzc0tleUlkOiBDcmVkZW50aWFscz8uQWNjZXNzS2V5SWQhLFxuICAgICAgc2VjcmV0QWNjZXNzS2V5OiBDcmVkZW50aWFscz8uU2VjcmV0QWNjZXNzS2V5ISxcbiAgICAgIHNlc3Npb25Ub2tlbjogQ3JlZGVudGlhbHM/LlNlc3Npb25Ub2tlbiEsXG4gICAgICBleHBpcmF0aW9uOiBDcmVkZW50aWFscz8uRXhwaXJhdGlvbixcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoZXZlbnQ6IENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VFdmVudCkgPT4ge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gcGFyc2VQcm9wZXJ0aWVzKGV2ZW50LlJlc291cmNlUHJvcGVydGllcylcblxuICBjb25zdCBhY20gPSBuZXcgQUNNQ2xpZW50KHsgcmVnaW9uOiBwcm9wZXJ0aWVzLkNlcnRpZmljYXRlUmVnaW9uLCByZXRyeU1vZGU6ICdhZGFwdGl2ZScgfSlcbiAgY29uc3Qgcm91dGU1MyA9IG5ldyBSb3V0ZTUzQ2xpZW50KHtcbiAgICByZXRyeU1vZGU6ICdhZGFwdGl2ZScsXG4gICAgY3JlZGVudGlhbHM6IGFzc3VtZVJvbGUocHJvcGVydGllcy5WYWxpZGF0aW9uUm9sZUFybiwgcHJvcGVydGllcy5WYWxpZGF0aW9uRXh0ZXJuYWxJZCksXG4gIH0pXG5cbiAgc3dpdGNoIChldmVudC5SZXF1ZXN0VHlwZSkge1xuICAgIGNhc2UgJ0NyZWF0ZSc6IHtcbiAgICAgIGNvbnN0IGNlcnRpZmljYXRlQXJuID0gYXdhaXQgcmVxdWVzdENlcnRpZmljYXRlKGFjbSwgcm91dGU1MywgZXZlbnQuUmVxdWVzdElkLCBwcm9wZXJ0aWVzKVxuICAgICAgaWYgKHByb3BlcnRpZXMuVGFncyAmJiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzLlRhZ3MpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgYXdhaXQgYWRkVGFncyhhY20sIGNlcnRpZmljYXRlQXJuLCBwcm9wZXJ0aWVzLlRhZ3MpXG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBQaHlzaWNhbFJlc291cmNlSWQ6IGNlcnRpZmljYXRlQXJuLFxuICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgQXJuOiBjZXJ0aWZpY2F0ZUFybixcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG4gICAgY2FzZSAnVXBkYXRlJzoge1xuICAgICAgbGV0IGNlcnRpZmljYXRlQXJuID0gZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkXG4gICAgICBpZiAoc2hvdWxkUmVxdWVzdE5ldyhwYXJzZVByb3BlcnRpZXMoZXZlbnQuT2xkUmVzb3VyY2VQcm9wZXJ0aWVzKSwgcHJvcGVydGllcykpIHtcbiAgICAgICAgY2VydGlmaWNhdGVBcm4gPSBhd2FpdCByZXF1ZXN0Q2VydGlmaWNhdGUoYWNtLCByb3V0ZTUzLCBldmVudC5SZXF1ZXN0SWQsIHByb3BlcnRpZXMpXG4gICAgICB9XG4gICAgICBpZiAocHJvcGVydGllcy5UYWdzICYmIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMuVGFncykubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCBhZGRUYWdzKGFjbSwgY2VydGlmaWNhdGVBcm4sIHByb3BlcnRpZXMuVGFncylcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogY2VydGlmaWNhdGVBcm4sXG4gICAgICAgIERhdGE6IHtcbiAgICAgICAgICBBcm46IGNlcnRpZmljYXRlQXJuLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cbiAgICBjYXNlICdEZWxldGUnOiB7XG4gICAgICBjb25zdCBjZXJ0aWZpY2F0ZUFybiA9IGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZFxuICAgICAgaWYgKHByb3BlcnRpZXMuUmVtb3ZhbFBvbGljeSA9PT0gJ2Rlc3Ryb3knKSB7XG4gICAgICAgIGF3YWl0IGRlbGV0ZUNlcnRpZmljYXRlKFxuICAgICAgICAgIGFjbSxcbiAgICAgICAgICByb3V0ZTUzLFxuICAgICAgICAgIGNlcnRpZmljYXRlQXJuLFxuICAgICAgICAgIHByb3BlcnRpZXMuSG9zdGVkWm9uZUlkLFxuICAgICAgICAgIHByb3BlcnRpZXMuQ2xlYW51cFZhbGlkYXRpb25SZWNvcmRzXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogY2VydGlmaWNhdGVBcm4sXG4gICAgICAgIERhdGE6IHtcbiAgICAgICAgICBBcm46IGNlcnRpZmljYXRlQXJuLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmVxdWVzdCB0eXBlYClcbn1cbiJdfQ==
|
|
@@ -3,13 +3,12 @@ var _a;
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.DnsValidatedCertificate = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const path = require("path");
|
|
7
6
|
const cdk = require("aws-cdk-lib");
|
|
8
7
|
const cloudwatch = require("aws-cdk-lib/aws-cloudwatch");
|
|
9
8
|
const iam = require("aws-cdk-lib/aws-iam");
|
|
10
9
|
const lambda = require("aws-cdk-lib/aws-lambda");
|
|
11
|
-
const lambda_nodejs = require("aws-cdk-lib/aws-lambda-nodejs");
|
|
12
10
|
const custom_resources = require("aws-cdk-lib/custom-resources");
|
|
11
|
+
const certificate_requestor_function_1 = require("./certificate-requestor-function");
|
|
13
12
|
const DNS_VALIDATED_CERTIFICATE_TYPE = 'Custom::DnsValidatedCertificate';
|
|
14
13
|
const CERTTIFICATE_RESOURCE_TYPE = 'AWS::CertificateManager::Certificate';
|
|
15
14
|
/**
|
|
@@ -68,9 +67,7 @@ class DnsValidatedCertificate extends cdk.Resource {
|
|
|
68
67
|
this.certificateRegion = props.certificateRegion ?? this.stack.region;
|
|
69
68
|
this.tags = new cdk.TagManager(cdk.TagType.MAP, CERTTIFICATE_RESOURCE_TYPE);
|
|
70
69
|
this.removalPolicy = props.removalPolicy ?? cdk.RemovalPolicy.DESTROY;
|
|
71
|
-
const requestorFunction = new
|
|
72
|
-
entry: path.join(__dirname, 'lambda', 'handler.ts'),
|
|
73
|
-
runtime: lambda.Runtime.NODEJS_18_X,
|
|
70
|
+
const requestorFunction = new certificate_requestor_function_1.CertificateRequestorFunction(this, 'RequestorFunction', {
|
|
74
71
|
architecture: lambda.Architecture.ARM_64,
|
|
75
72
|
timeout: cdk.Duration.minutes(14),
|
|
76
73
|
role: props.customResourceRole,
|
|
@@ -98,7 +95,7 @@ class DnsValidatedCertificate extends cdk.Resource {
|
|
|
98
95
|
resources: ['*'],
|
|
99
96
|
}));
|
|
100
97
|
requestorFunction.addToRolePolicy(new iam.PolicyStatement({
|
|
101
|
-
actions: ['route53:
|
|
98
|
+
actions: ['route53:ChangeResourceRecordSets'],
|
|
102
99
|
resources: [`arn:aws:route53:::hostedzone/${this.hostedZoneId}`],
|
|
103
100
|
conditions: {
|
|
104
101
|
'ForAllValues:StringEquals': {
|
|
@@ -174,6 +171,6 @@ class DnsValidatedCertificate extends cdk.Resource {
|
|
|
174
171
|
}
|
|
175
172
|
}
|
|
176
173
|
_a = JSII_RTTI_SYMBOL_1;
|
|
177
|
-
DnsValidatedCertificate[_a] = { fqn: "@trautonen/cdk-dns-validated-certificate.DnsValidatedCertificate", version: "0.0.
|
|
174
|
+
DnsValidatedCertificate[_a] = { fqn: "@trautonen/cdk-dns-validated-certificate.DnsValidatedCertificate", version: "0.0.4" };
|
|
178
175
|
exports.DnsValidatedCertificate = DnsValidatedCertificate;
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXZhbGlkYXRlZC1jZXJ0aWZpY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kbnMtdmFsaWRhdGVkLWNlcnRpZmljYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTRCO0FBQzVCLG1DQUFrQztBQUVsQyx5REFBd0Q7QUFDeEQsMkNBQTBDO0FBQzFDLGlEQUFnRDtBQUNoRCwrREFBOEQ7QUFFOUQsaUVBQWdFO0FBb0doRSxNQUFNLDhCQUE4QixHQUFHLGlDQUFpQyxDQUFBO0FBQ3hFLE1BQU0sMEJBQTBCLEdBQUcsc0NBQXNDLENBQUE7QUFFekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDRztBQUNILE1BQWEsdUJBQXdCLFNBQVEsR0FBRyxDQUFDLFFBQVE7SUFzQnZEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBbUM7UUFDM0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDNUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUM3RSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3pFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUE7UUFDckUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsMEJBQTBCLENBQUMs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ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJ1xuaW1wb3J0ICogYXMgY2VydGlmaWNhdGVtYW5hZ2VyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInXG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJ1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nXG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSdcbmltcG9ydCAqIGFzIGxhbWJkYV9ub2RlanMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnXG5pbXBvcnQgKiBhcyByb3V0ZTUzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJ1xuaW1wb3J0ICogYXMgY3VzdG9tX3Jlc291cmNlcyBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJ1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cydcbmltcG9ydCB7IFByb3BlcnRpZXMgfSBmcm9tICcuL2xhbWJkYS9oYW5kbGVyJ1xuXG5leHBvcnQgaW50ZXJmYWNlIERuc1ZhbGlkYXRlZENlcnRpZmljYXRlUHJvcHMge1xuICAvKipcbiAgICogRnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIHRvIHJlcXVlc3QgYSBjZXJ0aWZpY2F0ZSBmb3IuXG4gICAqXG4gICAqIE1heSBjb250YWluIHdpbGRjYXJkcywgc3VjaCBhcyBgYCouZG9tYWluLmNvbWBgLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEhvc3RlZCB6b25lIHRvIHVzZSBmb3IgRE5TIHZhbGlkYXRpb24uXG4gICAqXG4gICAqIElmIHRoZSBob3N0ZWQgem9uZSBpcyBub3QgbWFuYWdlZCBieSB0aGUgQ0RLIGFwcGxpY2F0aW9uLCBpdCBuZWVkcyB0byBiZSBwcm92aWRlZCB2aWFcbiAgICogYGBIb3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcygpYGAuXG4gICAqL1xuICByZWFkb25seSBob3N0ZWRab25lOiByb3V0ZTUzLklIb3N0ZWRab25lXG5cbiAgLyoqXG4gICAqIEFXUyByZWdpb24gd2hlcmUgdGhlIGNlcnRpZmljYXRlIGlzIGRlcGxveWVkLlxuICAgKlxuICAgKiBZb3Ugc2hvdWxkIHVzZSB0aGUgZGVmYXVsdCBgYENlcnRpZmljYXRlYGAgY29uc3RydWN0IGluc3RlYWQgaWYgdGhlIHJlZ2lvbiBpcyBzYW1lIGFzIHRoZSBzdGFjaydzIGFuZCB0aGUgaG9zdGVkXG4gICAqIHpvbmUgaXMgaW4gdGhlIHNhbWUgYWNjb3VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBTYW1lIHJlZ2lvbiBhcyB0aGUgc3RhY2suXG4gICAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZVJlZ2lvbj86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSB0aGF0IGlzIHVzZWQgZm9yIHRoZSBjdXN0b20gcmVzb3VyY2UgTGFtYmRhIGV4ZWN1dGlvbi5cbiAgICpcbiAgICogVGhlIHJvbGUgaXMgZ2l2ZW4gcGVybWlzc2lvbnMgdG8gcmVxdWVzdCBjZXJ0aWZpY2F0ZXMgZnJvbSBBQ00uIElmIHRoZSBgYHZhbGlkYXRpb25Sb2xlYGAgaXMgcHJvdmlkZWQsIHRoaXMgcm9sZVxuICAgKiBpcyBhbHNvIGdpdmVuIHBlcm1pc3Npb24gdG8gYXNzdW1lIHRoZSBgYHZhbGlkYXRpb25Sb2xlYGAuIE90aGVyd2lzZSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGhvc3RlZCB6b25lIGlzIGluIHNhbWVcbiAgICogYWNjb3VudCBhbmQgdGhlIGV4ZWN1dGlvbiByb2xlIGlzIGdpdmVuIHBlcm1pc3Npb25zIHRvIGNoYW5nZSBETlMgcmVjb3JkcyBmb3IgdGhlIGdpdmVuIGBgZG9tYWluTmFtZWBgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIExhbWJkYSBjcmVhdGVzIGEgZGVmYXVsdCBleGVjdXRpb24gcm9sZS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVJlc291cmNlUm9sZT86IGlhbS5JUm9sZVxuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSB0aGF0IGlzIGFzc3VtZWQgZm9yIEROUyByZWNvcmQgY2hhbmdlcyBmb3IgY2VydGlmaWNhdGUgdmFsaWRhdGlvbi5cbiAgICpcbiAgICogVGhpcyByb2xlIHNob3VsZCBleGlzdCBpbiB0aGUgc2FtZSBhY2NvdW50IGFzIHRoZSBob3N0ZWQgem9uZSBhbmQgaW5jbHVkZSBwZXJtaXNzaW9ucyB0byBjaGFuZ2UgdGhlIEROUyByZWNvcmRzXG4gICAqIGZvciB0aGUgZ2l2ZW4gYGBob3N0ZWRab25lYGAuIFRoZSBgYGN1c3RvbVJlc291cmNlUm9sZWBgIG9yIHRoZSBkZWZhdWx0IGV4ZWN1dGlvbiByb2xlIGlzIGdpdmVuIHBlcm1pc3Npb24gdG9cbiAgICogYXNzdW1lIHRoaXMgcm9sZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBzZXBhcmF0ZSByb2xlIGZvciBETlMgcmVjb3JkIGNoYW5nZXMuIFRoZSBnaXZlbiBjdXN0b21SZXNvdXJjZVJvbGUgb3IgdGhlIGRlZmF1bHQgcm9sZSBpcyB1c2VkXG4gICAqIGZvciBETlMgcmVjb3JkIGNoYW5nZXMuXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0aW9uUm9sZT86IGlhbS5JUm9sZVxuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBpZCBmb3IgYGB2YWxpZGF0aW9uUm9sZWBgIHJvbGUgYXNzdW1lIHZlcmlmaWNhdGlvbi5cbiAgICpcbiAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gYGB2YWxpZGF0aW9uUm9sZWBgIGlzIGdpdmVuIGFuZCB0aGUgcm9sZSBleHBlY3RzIGFuIGV4dGVybmFsIGlkIHByb3ZpZGVkIG9uIGFzc3VtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBleHRlcm5hbCBpZCBwcm92aWRlZCBkdXJpbmcgYXNzdW1lXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0aW9uRXh0ZXJuYWxJZD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBjbGVhbmluZyBvZiB2YWxpZGF0aW9uIEROUyByZWNvcmRzIGZyb20gdGhlIGhvc3RlZCB6b25lLlxuICAgKlxuICAgKiBJZiB0aGVyZSdzIG11bHRpcGxlIGNlcnRpZmljYXRlcyBjcmVhdGVkIGZvciBzYW1lIGRvbWFpbiwgaXQgaXMgcG9zc2libGUgdG8gZW5jb3V0ZXIgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBzb21lXG4gICAqIGNlcnRpZmljYXRlIGlzIHJlbW92ZWQgYW5kIGFub3RoZXIgY2VydGlmaWNhdGUgd291bGQgbmVlZCB0aGUgc2FtZSB2YWxpZGF0aW9uIHJlY29yZC4gUHJlZmVyIHNpbmdsZSBjZXJ0aWZpY2F0ZVxuICAgKiBmb3IgYSBkb21haW4gb3Igc2V0IHRoaXMgdG8gZmFsc2UgYW5kIGNsZWFudXAgcmVjb3JkcyBtYW51YWxseSB3aGVuIG5vdCBuZWVkZWQgYW55bW9yZS4gSWYgeW91IGNoYW5nZSB0aGlzXG4gICAqIHByb3BlcnR5IGFmdGVyIGNyZWF0aW9uLCBhIG5ldyBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHJlcXVlc3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2xlYW51cFZhbGlkYXRpb25SZWNvcmRzPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSB0cmFuc3BhcmVuY3kgbG9nZ2luZyBmb3IgdGhpcyBjZXJ0aWZpY2F0ZS5cbiAgICpcbiAgICogT25jZSBhIGNlcnRpZmljYXRlIGhhcyBiZWVuIGxvZ2dlZCwgaXQgY2Fubm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgbG9nLiBPcHRpbmcgb3V0IGF0IHRoYXQgcG9pbnQgd2lsbCBoYXZlIG5vXG4gICAqIGVmZmVjdC4gSWYgeW91IGNoYW5nZSB0aGlzIHByb3BlcnR5IGFmdGVyIGNyZWF0aW9uLCBhIG5ldyBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHJlcXVlc3RlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYWNtL2xhdGVzdC91c2VyZ3VpZGUvYWNtLWJlc3RwcmFjdGljZXMuaHRtbCNiZXN0LXByYWN0aWNlcy10cmFuc3BhcmVuY3lcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNwYXJlbmN5TG9nZ2luZ0VuYWJsZWQ/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSBnaXZlbiByZW1vdmFsIHBvbGljeSB0byB0aGlzIHJlc291cmNlLlxuICAgKlxuICAgKiBUaGUgcmVtb3ZhbCBwb2xpY3kgY29udHJvbHMgd2hhdCBoYXBwZW5zIHRvIHRoaXMgcmVzb3VyY2Ugd2hlbiBpdCBzdG9wcyBiZWluZyBtYW5hZ2VkIGJ5IENsb3VkRm9ybWF0aW9uLCBlaXRoZXJcbiAgICogYmVjYXVzZSB5b3UndmUgcmVtb3ZlZCBpdCBmcm9tIHRoZSBDREsgYXBwbGljYXRpb24gb3IgYmVjYXVzZSB5b3UndmUgbWFkZSBhIGNoYW5nZSB0aGF0IHJlcXVpcmVzIHRoZSByZXNvdXJjZSB0b1xuICAgKiBiZSByZXBsYWNlZC4gVGhlIHJlc291cmNlIGNhbiBiZSBkZWxldGVkIChgYFJlbW92YWxQb2xpY3kuREVTVFJPWWBgKSwgb3IgbGVmdCBpbiB5b3VyIEFXUyBhY2NvdW50IGZvciBkYXRhXG4gICAqIHJlY292ZXJ5IGFuZCBjbGVhbnVwIGxhdGVyIChgYFJlbW92YWxQb2xpY3kuUkVUQUlOYGApLiBJZiB5b3UgY2hhbmdlIHRoaXMgcHJvcGVydHkgYWZ0ZXIgY3JlYXRpb24sIGEgbmV3XG4gICAqIGNlcnRpZmljYXRlIHdpbGwgYmUgcmVxdWVzdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBSZW1vdmFsUG9saWN5LkRFU1RST1lcbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBjZGsuUmVtb3ZhbFBvbGljeVxufVxuXG5jb25zdCBETlNfVkFMSURBVEVEX0NFUlRJRklDQVRFX1RZUEUgPSAnQ3VzdG9tOjpEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSdcbmNvbnN0IENFUlRUSUZJQ0FURV9SRVNPVVJDRV9UWVBFID0gJ0FXUzo6Q2VydGlmaWNhdGVNYW5hZ2VyOjpDZXJ0aWZpY2F0ZSdcblxuLyoqXG4gKiBBIGNlcnRpZmljYXRlIG1hbmFnZWQgYnkgQVdTIENlcnRpZmljYXRlIE1hbmFnZXIuIFdpbGwgYmUgYXV0b21hdGljYWxseSB2YWxpZGF0ZWQgdXNpbmcgRE5TIHZhbGlkYXRpb24gYWdhaW5zdCB0aGVcbiAqIHNwZWNpZmllZCBSb3V0ZSA1MyBob3N0ZWQgem9uZS4gVGhpcyBjb25zdHJ1Y3Qgc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgY3Jvc3MtcmVnaW9uIG9yIGNyb3NzLWFjY291bnQgY2VydGlmaWNhdGVcbiAqIHZhbGlkYXRpb25zLiBUaGUgZGVmYXVsdCBgYENlcnRpZmljYXRlYGAgY29uc3RydWN0IGlzIGJldHRlciBpbiBjYXNlcyB3aGVyZSBldmVyeXRoaW5nIGlzIG1hbmFnZWQgYnkgdGhlIENES1xuICogYXBwbGljYXRpb24uXG4gKlxuICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGNvbnN0cnVjdCBkb2VzIG5vdCBzdXBwb3J0IGFsdGVybmF0aXZlIG5hbWVzIHlldCBhcyBpdCB3b3VsZCByZXF1aXJlIGRvbWFpbiB0byByb2xlIG1hcHBpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vICMgQ3Jvc3MtcmVnaW9uIGNlcnRpZmljYXRlIHZhbGlkYXRpb25cbiAqIC8vIGhvc3RlZCB6b25lIG1hbmFnZWQgYnkgdGhlIENESyBhcHBsaWNhdGlvblxuICogY29uc3QgaG9zdGVkWm9uZTogcm91dGU1My5JSG9zdGVkWm9uZSA9IC4uLlxuICogLy8gbm8gc2VwYXJhdGUgdmFsaWRhdGlvbiByb2xlIGlzIG5lZWRlZFxuICogY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUodGhpcywgJ0Nyb3NzUmVnaW9uQ2VydGlmaWNhdGUnLCB7XG4gKiAgIGhvc3RlZFpvbmU6IGhvc3RlZFpvbmUsXG4gKiAgIGRvbWFpbk5hbWU6ICdleGFtcGxlLmNvbScsICAgICAvLyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgaG9zdGVkIHpvbmVcbiAqICAgY2VydGlmaWNhdGVSZWdpb246ICd1cy1lYXN0LTEnIC8vIHVzZWQgYnkgZm9yIGV4YW1wbGUgQ2xvdWRGcm9udFxuICogfSlcbiAqIC8vICMgQ3Jvc3MtYWNjb3VudCBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uXG4gKiAvLyBleHRlcm5hbCBob3N0ZWQgem9uZVxuICogY29uc3QgaG9zdGVkWm9uZTogcm91dGU1My5JSG9zdGVkWm9uZSA9XG4gKiAgIHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXModGhpcywgJ0hvc3RlZFpvbmUnLCB7XG4gKiAgICAgaG9zdGVkWm9uZUlkOiAnWjUzMkRHREVERlMxMjM0NTY3ODknLFxuICogICAgIHpvbmVOYW1lOiAnZXhhbXBsZS5jb20nXG4gKiAgIH0pXG4gKiAvLyB2YWxpZGF0aW9uIHJvbGUgb24gdGhlIHNhbWUgYWNjb3VudCBhcyB0aGUgaG9zdGVkIHpvbmVcbiAqIGNvbnN0IHJvbGVBcm4gPSAnYXJuOmF3czppYW06OjEyMzQ1Njc4OTpyb2xlL0NoYW5nZURuc1JlY29yZHNSb2xlJ1xuICogY29uc3QgZXh0ZXJuYWxJZCA9ICdkb21haW4tYXNzdW1lJ1xuICogY29uc3QgdmFsaWRhdGlvblJvbGU6IGlhbS5JUm9sZSA9XG4gKiAgIGlhbS5Sb2xlLmZyb21Sb2xlQXJuKHRoaXMsICdWYWxpZGF0aW9uUm9sZScsIHJvbGVBcm4pXG4gKiBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSh0aGlzLCAnQ3Jvc3NBY2NvdW50Q2VydGlmaWNhdGUnLCB7XG4gKiAgIGhvc3RlZFpvbmU6IGhvc3RlZFpvbmUsXG4gKiAgIGRvbWFpbk5hbWU6ICdleGFtcGxlLmNvbScsXG4gKiAgIHZhbGlkYXRpb25Sb2xlOiB2YWxpZGF0aW9uUm9sZSxcbiAgICAgdmFsaWRhdGlvbkV4dGVybmFsSWQ6IGV4dGVybmFsSWRcbiAqIH0pXG4gKlxuICogQHJlc291cmNlIEN1c3RvbTo6RG5zVmFsaWRhdGVkQ2VydGlmaWNhdGVcbiAqIEByZXNvdXJjZSBBV1M6OkNlcnRpZmljYXRlTWFuYWdlcjo6Q2VydGlmaWNhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIERuc1ZhbGlkYXRlZENlcnRpZmljYXRlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgY2VydGlmaWNhdGVtYW5hZ2VyLklDZXJ0aWZpY2F0ZSwgY2RrLklUYWdnYWJsZSB7XG4gIC8qKiBUaGUgY2VydGlmaWNhdGUncyBBUk4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNlcnRpZmljYXRlQXJuOiBzdHJpbmdcblxuICAvKiogVGhlIHJlZ2lvbiB3aGVyZSB0aGUgY2VydGlmaWNhdGUgaXMgZGVwbG95ZWQgdG8gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNlcnRpZmljYXRlUmVnaW9uOiBzdHJpbmdcblxuICAvKiogVGhlIGhvc3RlZCB6b25lIGlkZW50aWZpZXIgYXV0aG9yaXRhdGl2ZSBmb3IgdGhlIGNlcnRpZmljYXRlICovXG4gIHB1YmxpYyByZWFkb25seSBob3N0ZWRab25lSWQ6IHN0cmluZ1xuXG4gIC8qKiBUaGUgaG9zdGVkIHpvbmUgbmFtZSBhdXRob3JpdGF0aXZlIGZvciB0aGUgY2VydGlmaWNhdGUgKi9cbiAgcHVibGljIHJlYWRvbmx5IGhvc3RlZFpvbmVOYW1lOiBzdHJpbmdcblxuICAvKiogVGhlIGRvbWFpbiBuYW1lIGluY2x1ZGVkIGluIHRoZSBjZXJ0aWZpY2F0ZSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nXG5cbiAgLyoqIFRoZSB0YWcgbWFuYWdlciB0byBzZXQsIHJlbW92ZSBhbmQgZm9ybWF0IHRhZ3MgZm9yIHRoZSBjZXJ0aWZpY2F0ZSAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhZ3M6IGNkay5UYWdNYW5hZ2VyXG5cbiAgLyoqIFRoZSByZW1vdmFsIHBvbGljeSBmb3IgdGhlIGNlcnRpZmljYXRlICovXG4gIHByaXZhdGUgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3lcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBjb25zdHJ1Y3QgaG9zdGluZyB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgY29uc3RydWN0J3MgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gcHJvcHMgcHJvcGVydGllcyBmb3IgdGhlIGNvbnN0cnVjdFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERuc1ZhbGlkYXRlZENlcnRpZmljYXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmRvbWFpbk5hbWUgPSB0aGlzLm5vcm1hbGl6ZURvbWFpbk5hbWUocHJvcHMuZG9tYWluTmFtZSlcbiAgICB0aGlzLmhvc3RlZFpvbmVJZCA9IHRoaXMubm9ybWFsaXplSG9zdGVkWm9uZUlkKHByb3BzLmhvc3RlZFpvbmUuaG9zdGVkWm9uZUlkKVxuICAgIHRoaXMuaG9zdGVkWm9uZU5hbWUgPSB0aGlzLm5vcm1hbGl6ZURvbWFpbk5hbWUocHJvcHMuaG9zdGVkWm9uZS56b25lTmFtZSlcbiAgICB0aGlzLmNlcnRpZmljYXRlUmVnaW9uID0gcHJvcHMuY2VydGlmaWNhdGVSZWdpb24gPz8gdGhpcy5zdGFjay5yZWdpb25cbiAgICB0aGlzLnRhZ3MgPSBuZXcgY2RrLlRhZ01hbmFnZXIoY2RrLlRhZ1R5cGUuTUFQLCBDRVJUVElGSUNBVEVfUkVTT1VSQ0VfVFlQRSlcbiAgICB0aGlzLnJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1lcblxuICAgIGNvbnN0IHJlcXVlc3RvckZ1bmN0aW9uID0gbmV3IGxhbWJkYV9ub2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgJ1JlcXVlc3RvckZ1bmN0aW9uJywge1xuICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYW1iZGEnLCAnaGFuZGxlci50cycpLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE4X1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMTQpLFxuICAgICAgcm9sZTogcHJvcHMuY3VzdG9tUmVzb3VyY2VSb2xlLFxuICAgIH0pXG5cbiAgICByZXF1ZXN0b3JGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdhY206UmVxdWVzdENlcnRpZmljYXRlJyxcbiAgICAgICAgICAnYWNtOkRlc2NyaWJlQ2VydGlmaWNhdGUnLFxuICAgICAgICAgICdhY206RGVsZXRlQ2VydGlmaWNhdGUnLFxuICAgICAgICAgICdhY206QWRkVGFnc1RvQ2VydGlmaWNhdGUnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSlcbiAgICApXG5cbiAgICBpZiAocHJvcHMudmFsaWRhdGlvblJvbGUpIHtcbiAgICAgIHJlcXVlc3RvckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ3N0czpBc3N1bWVSb2xlJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbcHJvcHMudmFsaWRhdGlvblJvbGUucm9sZUFybl0sXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RvckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsncm91dGU1MzpHZXRDaGFuZ2UnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICByZXF1ZXN0b3JGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ3JvdXRlNTM6Y2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6cm91dGU1Mzo6Omhvc3RlZHpvbmUvJHt0aGlzLmhvc3RlZFpvbmVJZH1gXSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICAnRm9yQWxsVmFsdWVzOlN0cmluZ0VxdWFscyc6IHtcbiAgICAgICAgICAgICAgJ3JvdXRlNTM6Q2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzUmVjb3JkVHlwZXMnOiBbJ0NOQU1FJ10sXG4gICAgICAgICAgICAgICdyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c0FjdGlvbnMnOiBbJ1VQU0VSVCcsICdERUxFVEUnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnRm9yQWxsVmFsdWVzOlN0cmluZ0xpa2UnOiB7XG4gICAgICAgICAgICAgICdyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c05vcm1hbGl6ZWRSZWNvcmROYW1lcyc6IFt0aGlzLmRvbWFpbk5hbWVdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RvclByb3ZpZGVyID0gbmV3IGN1c3RvbV9yZXNvdXJjZXMuUHJvdmlkZXIodGhpcywgJ1JlcXVlc3RvclByb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IHJlcXVlc3RvckZ1bmN0aW9uLFxuICAgIH0pXG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzID0ge1xuICAgICAgSG9zdGVkWm9uZUlkOiB0aGlzLmhvc3RlZFpvbmVJZCxcbiAgICAgIERvbWFpbk5hbWU6IHRoaXMuZG9tYWluTmFtZSxcbiAgICAgIENlcnRpZmljYXRlUmVnaW9uOiB0aGlzLmNlcnRpZmljYXRlUmVnaW9uLFxuICAgICAgU3ViamVjdEFsdGVybmF0aXZlTmFtZXM6IHVuZGVmaW5lZCwgLy8gbm90IHN1cHBvcnRlZCB5ZXQgYXMgaXQgcmVxdWlyZXMgcm9sZSB0byBkb21haW4gbWFwcGluZ1xuICAgICAgVmFsaWRhdGlvblJvbGVBcm46IHByb3BzLnZhbGlkYXRpb25Sb2xlPy5yb2xlQXJuLFxuICAgICAgVmFsaWRhdGlvbkV4dGVybmFsSWQ6IHByb3BzLnZhbGlkYXRpb25FeHRlcm5hbElkLFxuICAgICAgQ2xlYW51cFZhbGlkYXRpb25SZWNvcmRzOiBwcm9wcy5jbGVhbnVwVmFsaWRhdGlvblJlY29yZHMgPz8gdHJ1ZSxcbiAgICAgIFRyYW5zcGFyZW5jeUxvZ2dpbmdFbmFibGVkOiBwcm9wcy50cmFuc3BhcmVuY3lMb2dnaW5nRW5hYmxlZCA/PyB0cnVlLFxuICAgICAgVGFnczogY2RrLkxhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy50YWdzLnJlbmRlclRhZ3MoKSB9KSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICBSZW1vdmFsUG9saWN5OiBjZGsuTGF6eS5zdHJpbmcoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbW92YWxQb2xpY3kgfSksXG4gICAgfVxuXG4gICAgY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgY2RrLkN1c3RvbVJlc291cmNlKHRoaXMsICdSZXF1ZXN0b3JSZXNvdXJjZScsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcmVxdWVzdG9yUHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiBETlNfVkFMSURBVEVEX0NFUlRJRklDQVRFX1RZUEUsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgIH0pXG5cbiAgICB0aGlzLmNlcnRpZmljYXRlQXJuID0gY2VydGlmaWNhdGUuZ2V0QXR0U3RyaW5nKCdBcm4nKVxuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oeyB2YWxpZGF0ZTogKCkgPT4gdGhpcy52YWxpZGF0ZURvbWFpblRvSG9zdGVkWm9uZSh0aGlzLmRvbWFpbk5hbWUsIHRoaXMuaG9zdGVkWm9uZU5hbWUpIH0pXG4gIH1cblxuICBtZXRyaWNEYXlzVG9FeHBpcnkocHJvcHM/OiBjZGsuYXdzX2Nsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyB8IHVuZGVmaW5lZCk6IGNkay5hd3NfY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24uZGF5cygxKSxcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGltZW5zaW9uc01hcDogeyBDZXJ0aWZpY2F0ZUFybjogdGhpcy5jZXJ0aWZpY2F0ZUFybiB9LFxuICAgICAgbWV0cmljTmFtZTogJ0RheXNUb0V4cGlyeScsXG4gICAgICBuYW1lc3BhY2U6ICdBV1MvQ2VydGlmaWNhdGVNYW5hZ2VyJyxcbiAgICAgIHJlZ2lvbjogdGhpcy5jZXJ0aWZpY2F0ZVJlZ2lvbixcbiAgICAgIHN0YXRpc3RpYzogY2xvdWR3YXRjaC5TdGF0cy5NSU5JTVVNLFxuICAgIH0pXG4gIH1cblxuICBhcHBseVJlbW92YWxQb2xpY3kocG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeSk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZhbFBvbGljeSA9IHBvbGljeVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEb21haW5OYW1lKGRvbWFpbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoZG9tYWluTmFtZSkpIHtcbiAgICAgIHJldHVybiBkb21haW5OYW1lXG4gICAgfVxuICAgIGlmIChkb21haW5OYW1lLmVuZHNXaXRoKCcuJykpIHtcbiAgICAgIHJldHVybiBkb21haW5OYW1lLnNsaWNlKDAsIC0xKVxuICAgIH1cbiAgICByZXR1cm4gZG9tYWluTmFtZVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVIb3N0ZWRab25lSWQoaG9zdGVkWm9uZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGhvc3RlZFpvbmVJZCkpIHtcbiAgICAgIHJldHVybiBob3N0ZWRab25lSWRcbiAgICB9XG4gICAgcmV0dXJuIGhvc3RlZFpvbmVJZC5yZXBsYWNlKC9eXFwvaG9zdGVkem9uZVxcLy8sICcnKVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZURvbWFpblRvSG9zdGVkWm9uZShkb21haW5OYW1lOiBzdHJpbmcsIGhvc3RlZFpvbmVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoZG9tYWluTmFtZSkgfHwgY2RrLlRva2VuLmlzVW5yZXNvbHZlZChob3N0ZWRab25lTmFtZSkpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgICBpZiAoZG9tYWluTmFtZSAhPT0gaG9zdGVkWm9uZU5hbWUgJiYgIWRvbWFpbk5hbWUuZW5kc1dpdGgoYC4ke2hvc3RlZFpvbmVOYW1lfWApKSB7XG4gICAgICByZXR1cm4gW2BIb3N0ZWQgem9uZSAke2hvc3RlZFpvbmVOYW1lfSBpcyBub3QgYXV0aG9yaXRhdGl2ZSBmb3IgY2VydGlmaWNhdGUgZG9tYWluIG5hbWUgJHtkb21haW5OYW1lfWBdXG4gICAgfVxuICAgIHJldHVybiBbXVxuICB9XG59XG4iXX0=
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXZhbGlkYXRlZC1jZXJ0aWZpY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kbnMtdmFsaWRhdGVkLWNlcnRpZmljYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQWtDO0FBRWxDLHlEQUF3RDtBQUN4RCwyQ0FBMEM7QUFDMUMsaURBQWdEO0FBRWhELGlFQUFnRTtBQUVoRSxxRkFBK0U7QUFtRy9FLE1BQU0sOEJBQThCLEdBQUcsaUNBQWlDLENBQUE7QUFDeEUsTUFBTSwwQkFBMEIsR0FBRyxzQ0FBc0MsQ0FBQTtBQUV6RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUNHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxHQUFHLENBQUMsUUFBUTtJQXNCdkQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFtQztRQUMzRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzdFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDekUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQTtRQUNyRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSwwQkFBMEIsQ0FBQyxDQUFBO1FBQzNFLElB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LFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN0QyxPQUFPLFVBQVUsQ0FBQTtTQUNsQjtRQUNELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QixPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDL0I7UUFDRCxPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0lBRU8scUJBQXFCLENBQUMsWUFBb0I7UUFDaEQsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUN4QyxPQUFPLFlBQVksQ0FBQTtTQUNwQjtRQUNELE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsVUFBa0IsRUFBRSxjQUFzQjtRQUMzRSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQ2hGLE9BQU8sRUFBRSxDQUFBO1NBQ1Y7UUFDRCxJQUFJLFVBQVUsS0FBSyxjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsRUFBRTtZQUMvRSxPQUFPLENBQUMsZUFBZSxjQUFjLHFEQUFxRCxVQUFVLEVBQUUsQ0FBQyxDQUFBO1NBQ3hHO1FBQ0QsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDOzs7O0FBaEtVLDBEQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYidcbmltcG9ydCAqIGFzIGNlcnRpZmljYXRlbWFuYWdlciBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJ1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCdcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJ1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnXG5pbXBvcnQgKiBhcyByb3V0ZTUzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1yb3V0ZTUzJ1xuaW1wb3J0ICogYXMgY3VzdG9tX3Jlc291cmNlcyBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJ1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cydcbmltcG9ydCB7IENlcnRpZmljYXRlUmVxdWVzdG9yRnVuY3Rpb24gfSBmcm9tICcuL2NlcnRpZmljYXRlLXJlcXVlc3Rvci1mdW5jdGlvbidcbmltcG9ydCB7IFByb3BlcnRpZXMgfSBmcm9tICcuL2NlcnRpZmljYXRlLXJlcXVlc3Rvci5sYW1iZGEnXG5cbmV4cG9ydCBpbnRlcmZhY2UgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGVQcm9wcyB7XG4gIC8qKlxuICAgKiBGdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgdG8gcmVxdWVzdCBhIGNlcnRpZmljYXRlIGZvci5cbiAgICpcbiAgICogTWF5IGNvbnRhaW4gd2lsZGNhcmRzLCBzdWNoIGFzIGBgKi5kb21haW4uY29tYGAuXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogSG9zdGVkIHpvbmUgdG8gdXNlIGZvciBETlMgdmFsaWRhdGlvbi5cbiAgICpcbiAgICogSWYgdGhlIGhvc3RlZCB6b25lIGlzIG5vdCBtYW5hZ2VkIGJ5IHRoZSBDREsgYXBwbGljYXRpb24sIGl0IG5lZWRzIHRvIGJlIHByb3ZpZGVkIHZpYVxuICAgKiBgYEhvc3RlZFpvbmUuZnJvbUhvc3RlZFpvbmVBdHRyaWJ1dGVzKClgYC5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmU6IHJvdXRlNTMuSUhvc3RlZFpvbmVcblxuICAvKipcbiAgICogQVdTIHJlZ2lvbiB3aGVyZSB0aGUgY2VydGlmaWNhdGUgaXMgZGVwbG95ZWQuXG4gICAqXG4gICAqIFlvdSBzaG91bGQgdXNlIHRoZSBkZWZhdWx0IGBgQ2VydGlmaWNhdGVgYCBjb25zdHJ1Y3QgaW5zdGVhZCBpZiB0aGUgcmVnaW9uIGlzIHNhbWUgYXMgdGhlIHN0YWNrJ3MgYW5kIHRoZSBob3N0ZWRcbiAgICogem9uZSBpcyBpbiB0aGUgc2FtZSBhY2NvdW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNhbWUgcmVnaW9uIGFzIHRoZSBzdGFjay5cbiAgICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlUmVnaW9uPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIHRoYXQgaXMgdXNlZCBmb3IgdGhlIGN1c3RvbSByZXNvdXJjZSBMYW1iZGEgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBUaGUgcm9sZSBpcyBnaXZlbiBwZXJtaXNzaW9ucyB0byByZXF1ZXN0IGNlcnRpZmljYXRlcyBmcm9tIEFDTS4gSWYgdGhlIGBgdmFsaWRhdGlvblJvbGVgYCBpcyBwcm92aWRlZCwgdGhpcyByb2xlXG4gICAqIGlzIGFsc28gZ2l2ZW4gcGVybWlzc2lvbiB0byBhc3N1bWUgdGhlIGBgdmFsaWRhdGlvblJvbGVgYC4gT3RoZXJ3aXNlIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgaG9zdGVkIHpvbmUgaXMgaW4gc2FtZVxuICAgKiBhY2NvdW50IGFuZCB0aGUgZXhlY3V0aW9uIHJvbGUgaXMgZ2l2ZW4gcGVybWlzc2lvbnMgdG8gY2hhbmdlIEROUyByZWNvcmRzIGZvciB0aGUgZ2l2ZW4gYGBkb21haW5OYW1lYGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTGFtYmRhIGNyZWF0ZXMgYSBkZWZhdWx0IGV4ZWN1dGlvbiByb2xlLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tUmVzb3VyY2VSb2xlPzogaWFtLklSb2xlXG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIHRoYXQgaXMgYXNzdW1lZCBmb3IgRE5TIHJlY29yZCBjaGFuZ2VzIGZvciBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uLlxuICAgKlxuICAgKiBUaGlzIHJvbGUgc2hvdWxkIGV4aXN0IGluIHRoZSBzYW1lIGFjY291bnQgYXMgdGhlIGhvc3RlZCB6b25lIGFuZCBpbmNsdWRlIHBlcm1pc3Npb25zIHRvIGNoYW5nZSB0aGUgRE5TIHJlY29yZHNcbiAgICogZm9yIHRoZSBnaXZlbiBgYGhvc3RlZFpvbmVgYC4gVGhlIGBgY3VzdG9tUmVzb3VyY2VSb2xlYGAgb3IgdGhlIGRlZmF1bHQgZXhlY3V0aW9uIHJvbGUgaXMgZ2l2ZW4gcGVybWlzc2lvbiB0b1xuICAgKiBhc3N1bWUgdGhpcyByb2xlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlcGFyYXRlIHJvbGUgZm9yIEROUyByZWNvcmQgY2hhbmdlcy4gVGhlIGdpdmVuIGN1c3RvbVJlc291cmNlUm9sZSBvciB0aGUgZGVmYXVsdCByb2xlIGlzIHVzZWRcbiAgICogZm9yIEROUyByZWNvcmQgY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRpb25Sb2xlPzogaWFtLklSb2xlXG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIGlkIGZvciBgYHZhbGlkYXRpb25Sb2xlYGAgcm9sZSBhc3N1bWUgdmVyaWZpY2F0aW9uLlxuICAgKlxuICAgKiBUaGlzIHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiBgYHZhbGlkYXRpb25Sb2xlYGAgaXMgZ2l2ZW4gYW5kIHRoZSByb2xlIGV4cGVjdHMgYW4gZXh0ZXJuYWwgaWQgcHJvdmlkZWQgb24gYXNzdW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGV4dGVybmFsIGlkIHByb3ZpZGVkIGR1cmluZyBhc3N1bWVcbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRpb25FeHRlcm5hbElkPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGNsZWFuaW5nIG9mIHZhbGlkYXRpb24gRE5TIHJlY29yZHMgZnJvbSB0aGUgaG9zdGVkIHpvbmUuXG4gICAqXG4gICAqIElmIHRoZXJlJ3MgbXVsdGlwbGUgY2VydGlmaWNhdGVzIGNyZWF0ZWQgZm9yIHNhbWUgZG9tYWluLCBpdCBpcyBwb3NzaWJsZSB0byBlbmNvdXRlciBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHNvbWVcbiAgICogY2VydGlmaWNhdGUgaXMgcmVtb3ZlZCBhbmQgYW5vdGhlciBjZXJ0aWZpY2F0ZSB3b3VsZCBuZWVkIHRoZSBzYW1lIHZhbGlkYXRpb24gcmVjb3JkLiBQcmVmZXIgc2luZ2xlIGNlcnRpZmljYXRlXG4gICAqIGZvciBhIGRvbWFpbiBvciBzZXQgdGhpcyB0byBmYWxzZSBhbmQgY2xlYW51cCByZWNvcmRzIG1hbnVhbGx5IHdoZW4gbm90IG5lZWRlZCBhbnltb3JlLiBJZiB5b3UgY2hhbmdlIHRoaXNcbiAgICogcHJvcGVydHkgYWZ0ZXIgY3JlYXRpb24sIGEgbmV3IGNlcnRpZmljYXRlIHdpbGwgYmUgcmVxdWVzdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjbGVhbnVwVmFsaWRhdGlvblJlY29yZHM/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIHRyYW5zcGFyZW5jeSBsb2dnaW5nIGZvciB0aGlzIGNlcnRpZmljYXRlLlxuICAgKlxuICAgKiBPbmNlIGEgY2VydGlmaWNhdGUgaGFzIGJlZW4gbG9nZ2VkLCBpdCBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsb2cuIE9wdGluZyBvdXQgYXQgdGhhdCBwb2ludCB3aWxsIGhhdmUgbm9cbiAgICogZWZmZWN0LiBJZiB5b3UgY2hhbmdlIHRoaXMgcHJvcGVydHkgYWZ0ZXIgY3JlYXRpb24sIGEgbmV3IGNlcnRpZmljYXRlIHdpbGwgYmUgcmVxdWVzdGVkLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hY20vbGF0ZXN0L3VzZXJndWlkZS9hY20tYmVzdHByYWN0aWNlcy5odG1sI2Jlc3QtcHJhY3RpY2VzLXRyYW5zcGFyZW5jeVxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BhcmVuY3lMb2dnaW5nRW5hYmxlZD86IGJvb2xlYW5cblxuICAvKipcbiAgICogQXBwbHkgdGhlIGdpdmVuIHJlbW92YWwgcG9saWN5IHRvIHRoaXMgcmVzb3VyY2UuXG4gICAqXG4gICAqIFRoZSByZW1vdmFsIHBvbGljeSBjb250cm9scyB3aGF0IGhhcHBlbnMgdG8gdGhpcyByZXNvdXJjZSB3aGVuIGl0IHN0b3BzIGJlaW5nIG1hbmFnZWQgYnkgQ2xvdWRGb3JtYXRpb24sIGVpdGhlclxuICAgKiBiZWNhdXNlIHlvdSd2ZSByZW1vdmVkIGl0IGZyb20gdGhlIENESyBhcHBsaWNhdGlvbiBvciBiZWNhdXNlIHlvdSd2ZSBtYWRlIGEgY2hhbmdlIHRoYXQgcmVxdWlyZXMgdGhlIHJlc291cmNlIHRvXG4gICAqIGJlIHJlcGxhY2VkLiBUaGUgcmVzb3VyY2UgY2FuIGJlIGRlbGV0ZWQgKGBgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZYGApLCBvciBsZWZ0IGluIHlvdXIgQVdTIGFjY291bnQgZm9yIGRhdGFcbiAgICogcmVjb3ZlcnkgYW5kIGNsZWFudXAgbGF0ZXIgKGBgUmVtb3ZhbFBvbGljeS5SRVRBSU5gYCkuIElmIHlvdSBjaGFuZ2UgdGhpcyBwcm9wZXJ0eSBhZnRlciBjcmVhdGlvbiwgYSBuZXdcbiAgICogY2VydGlmaWNhdGUgd2lsbCBiZSByZXF1ZXN0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IGNkay5SZW1vdmFsUG9saWN5XG59XG5cbmNvbnN0IEROU19WQUxJREFURURfQ0VSVElGSUNBVEVfVFlQRSA9ICdDdXN0b206OkRuc1ZhbGlkYXRlZENlcnRpZmljYXRlJ1xuY29uc3QgQ0VSVFRJRklDQVRFX1JFU09VUkNFX1RZUEUgPSAnQVdTOjpDZXJ0aWZpY2F0ZU1hbmFnZXI6OkNlcnRpZmljYXRlJ1xuXG4vKipcbiAqIEEgY2VydGlmaWNhdGUgbWFuYWdlZCBieSBBV1MgQ2VydGlmaWNhdGUgTWFuYWdlci4gV2lsbCBiZSBhdXRvbWF0aWNhbGx5IHZhbGlkYXRlZCB1c2luZyBETlMgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZVxuICogc3BlY2lmaWVkIFJvdXRlIDUzIGhvc3RlZCB6b25lLiBUaGlzIGNvbnN0cnVjdCBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBjcm9zcy1yZWdpb24gb3IgY3Jvc3MtYWNjb3VudCBjZXJ0aWZpY2F0ZVxuICogdmFsaWRhdGlvbnMuIFRoZSBkZWZhdWx0IGBgQ2VydGlmaWNhdGVgYCBjb25zdHJ1Y3QgaXMgYmV0dGVyIGluIGNhc2VzIHdoZXJlIGV2ZXJ5dGhpbmcgaXMgbWFuYWdlZCBieSB0aGUgQ0RLXG4gKiBhcHBsaWNhdGlvbi5cbiAqXG4gKiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgY29uc3RydWN0IGRvZXMgbm90IHN1cHBvcnQgYWx0ZXJuYXRpdmUgbmFtZXMgeWV0IGFzIGl0IHdvdWxkIHJlcXVpcmUgZG9tYWluIHRvIHJvbGUgbWFwcGluZy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gIyBDcm9zcy1yZWdpb24gY2VydGlmaWNhdGUgdmFsaWRhdGlvblxuICogLy8gaG9zdGVkIHpvbmUgbWFuYWdlZCBieSB0aGUgQ0RLIGFwcGxpY2F0aW9uXG4gKiBjb25zdCBob3N0ZWRab25lOiByb3V0ZTUzLklIb3N0ZWRab25lID0gLi4uXG4gKiAvLyBubyBzZXBhcmF0ZSB2YWxpZGF0aW9uIHJvbGUgaXMgbmVlZGVkXG4gKiBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSh0aGlzLCAnQ3Jvc3NSZWdpb25DZXJ0aWZpY2F0ZScsIHtcbiAqICAgaG9zdGVkWm9uZTogaG9zdGVkWm9uZSxcbiAqICAgZG9tYWluTmFtZTogJ2V4YW1wbGUuY29tJywgICAgIC8vIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBob3N0ZWQgem9uZVxuICogICBjZXJ0aWZpY2F0ZVJlZ2lvbjogJ3VzLWVhc3QtMScgLy8gdXNlZCBieSBmb3IgZXhhbXBsZSBDbG91ZEZyb250XG4gKiB9KVxuICogLy8gIyBDcm9zcy1hY2NvdW50IGNlcnRpZmljYXRlIHZhbGlkYXRpb25cbiAqIC8vIGV4dGVybmFsIGhvc3RlZCB6b25lXG4gKiBjb25zdCBob3N0ZWRab25lOiByb3V0ZTUzLklIb3N0ZWRab25lID1cbiAqICAgcm91dGU1My5Ib3N0ZWRab25lLmZyb21Ib3N0ZWRab25lQXR0cmlidXRlcyh0aGlzLCAnSG9zdGVkWm9uZScsIHtcbiAqICAgICBob3N0ZWRab25lSWQ6ICdaNTMyREdERURGUzEyMzQ1Njc4OScsXG4gKiAgICAgem9uZU5hbWU6ICdleGFtcGxlLmNvbSdcbiAqICAgfSlcbiAqIC8vIHZhbGlkYXRpb24gcm9sZSBvbiB0aGUgc2FtZSBhY2NvdW50IGFzIHRoZSBob3N0ZWQgem9uZVxuICogY29uc3Qgcm9sZUFybiA9ICdhcm46YXdzOmlhbTo6MTIzNDU2Nzg5OnJvbGUvQ2hhbmdlRG5zUmVjb3Jkc1JvbGUnXG4gKiBjb25zdCBleHRlcm5hbElkID0gJ2RvbWFpbi1hc3N1bWUnXG4gKiBjb25zdCB2YWxpZGF0aW9uUm9sZTogaWFtLklSb2xlID1cbiAqICAgaWFtLlJvbGUuZnJvbVJvbGVBcm4odGhpcywgJ1ZhbGlkYXRpb25Sb2xlJywgcm9sZUFybilcbiAqIGNvbnN0IGNlcnRpZmljYXRlID0gbmV3IERuc1ZhbGlkYXRlZENlcnRpZmljYXRlKHRoaXMsICdDcm9zc0FjY291bnRDZXJ0aWZpY2F0ZScsIHtcbiAqICAgaG9zdGVkWm9uZTogaG9zdGVkWm9uZSxcbiAqICAgZG9tYWluTmFtZTogJ2V4YW1wbGUuY29tJyxcbiAqICAgdmFsaWRhdGlvblJvbGU6IHZhbGlkYXRpb25Sb2xlLFxuICAgICB2YWxpZGF0aW9uRXh0ZXJuYWxJZDogZXh0ZXJuYWxJZFxuICogfSlcbiAqXG4gKiBAcmVzb3VyY2UgQ3VzdG9tOjpEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZVxuICogQHJlc291cmNlIEFXUzo6Q2VydGlmaWNhdGVNYW5hZ2VyOjpDZXJ0aWZpY2F0ZVxuICovXG5leHBvcnQgY2xhc3MgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBjZXJ0aWZpY2F0ZW1hbmFnZXIuSUNlcnRpZmljYXRlLCBjZGsuSVRhZ2dhYmxlIHtcbiAgLyoqIFRoZSBjZXJ0aWZpY2F0ZSdzIEFSTiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2VydGlmaWNhdGVBcm46IHN0cmluZ1xuXG4gIC8qKiBUaGUgcmVnaW9uIHdoZXJlIHRoZSBjZXJ0aWZpY2F0ZSBpcyBkZXBsb3llZCB0byAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2VydGlmaWNhdGVSZWdpb246IHN0cmluZ1xuXG4gIC8qKiBUaGUgaG9zdGVkIHpvbmUgaWRlbnRpZmllciBhdXRob3JpdGF0aXZlIGZvciB0aGUgY2VydGlmaWNhdGUgKi9cbiAgcHVibGljIHJlYWRvbmx5IGhvc3RlZFpvbmVJZDogc3RyaW5nXG5cbiAgLyoqIFRoZSBob3N0ZWQgem9uZSBuYW1lIGF1dGhvcml0YXRpdmUgZm9yIHRoZSBjZXJ0aWZpY2F0ZSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaG9zdGVkWm9uZU5hbWU6IHN0cmluZ1xuXG4gIC8qKiBUaGUgZG9tYWluIG5hbWUgaW5jbHVkZWQgaW4gdGhlIGNlcnRpZmljYXRlICovXG4gIHB1YmxpYyByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmdcblxuICAvKiogVGhlIHRhZyBtYW5hZ2VyIHRvIHNldCwgcmVtb3ZlIGFuZCBmb3JtYXQgdGFncyBmb3IgdGhlIGNlcnRpZmljYXRlICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFnczogY2RrLlRhZ01hbmFnZXJcblxuICAvKiogVGhlIHJlbW92YWwgcG9saWN5IGZvciB0aGUgY2VydGlmaWNhdGUgKi9cbiAgcHJpdmF0ZSByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIERuc1ZhbGlkYXRlZENlcnRpZmljYXRlIGNvbnN0cnVjdC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIGNvbnN0cnVjdCBob3N0aW5nIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCBjb25zdHJ1Y3QncyBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBwcm9wcyBwcm9wZXJ0aWVzIGZvciB0aGUgY29uc3RydWN0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMuZG9tYWluTmFtZSA9IHRoaXMubm9ybWFsaXplRG9tYWluTmFtZShwcm9wcy5kb21haW5OYW1lKVxuICAgIHRoaXMuaG9zdGVkWm9uZUlkID0gdGhpcy5ub3JtYWxpemVIb3N0ZWRab25lSWQocHJvcHMuaG9zdGVkWm9uZS5ob3N0ZWRab25lSWQpXG4gICAgdGhpcy5ob3N0ZWRab25lTmFtZSA9IHRoaXMubm9ybWFsaXplRG9tYWluTmFtZShwcm9wcy5ob3N0ZWRab25lLnpvbmVOYW1lKVxuICAgIHRoaXMuY2VydGlmaWNhdGVSZWdpb24gPSBwcm9wcy5jZXJ0aWZpY2F0ZVJlZ2lvbiA/PyB0aGlzLnN0YWNrLnJlZ2lvblxuICAgIHRoaXMudGFncyA9IG5ldyBjZGsuVGFnTWFuYWdlcihjZGsuVGFnVHlwZS5NQVAsIENFUlRUSUZJQ0FURV9SRVNPVVJDRV9UWVBFKVxuICAgIHRoaXMucmVtb3ZhbFBvbGljeSA9IHByb3BzLnJlbW92YWxQb2xpY3kgPz8gY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWVxuXG4gICAgY29uc3QgcmVxdWVzdG9yRnVuY3Rpb24gPSBuZXcgQ2VydGlmaWNhdGVSZXF1ZXN0b3JGdW5jdGlvbih0aGlzLCAnUmVxdWVzdG9yRnVuY3Rpb24nLCB7XG4gICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMTQpLFxuICAgICAgcm9sZTogcHJvcHMuY3VzdG9tUmVzb3VyY2VSb2xlLFxuICAgIH0pXG5cbiAgICByZXF1ZXN0b3JGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdhY206UmVxdWVzdENlcnRpZmljYXRlJyxcbiAgICAgICAgICAnYWNtOkRlc2NyaWJlQ2VydGlmaWNhdGUnLFxuICAgICAgICAgICdhY206RGVsZXRlQ2VydGlmaWNhdGUnLFxuICAgICAgICAgICdhY206QWRkVGFnc1RvQ2VydGlmaWNhdGUnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSlcbiAgICApXG5cbiAgICBpZiAocHJvcHMudmFsaWRhdGlvblJvbGUpIHtcbiAgICAgIHJlcXVlc3RvckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgICBhY3Rpb25zOiBbJ3N0czpBc3N1bWVSb2xlJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbcHJvcHMudmFsaWRhdGlvblJvbGUucm9sZUFybl0sXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RvckZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsncm91dGU1MzpHZXRDaGFuZ2UnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICB9KVxuICAgICAgKVxuXG4gICAgICByZXF1ZXN0b3JGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ3JvdXRlNTM6Q2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6cm91dGU1Mzo6Omhvc3RlZHpvbmUvJHt0aGlzLmhvc3RlZFpvbmVJZH1gXSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICAnRm9yQWxsVmFsdWVzOlN0cmluZ0VxdWFscyc6IHtcbiAgICAgICAgICAgICAgJ3JvdXRlNTM6Q2hhbmdlUmVzb3VyY2VSZWNvcmRTZXRzUmVjb3JkVHlwZXMnOiBbJ0NOQU1FJ10sXG4gICAgICAgICAgICAgICdyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c0FjdGlvbnMnOiBbJ1VQU0VSVCcsICdERUxFVEUnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnRm9yQWxsVmFsdWVzOlN0cmluZ0xpa2UnOiB7XG4gICAgICAgICAgICAgICdyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c05vcm1hbGl6ZWRSZWNvcmROYW1lcyc6IFt0aGlzLmRvbWFpbk5hbWVdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RvclByb3ZpZGVyID0gbmV3IGN1c3RvbV9yZXNvdXJjZXMuUHJvdmlkZXIodGhpcywgJ1JlcXVlc3RvclByb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IHJlcXVlc3RvckZ1bmN0aW9uLFxuICAgIH0pXG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0aWVzID0ge1xuICAgICAgSG9zdGVkWm9uZUlkOiB0aGlzLmhvc3RlZFpvbmVJZCxcbiAgICAgIERvbWFpbk5hbWU6IHRoaXMuZG9tYWluTmFtZSxcbiAgICAgIENlcnRpZmljYXRlUmVnaW9uOiB0aGlzLmNlcnRpZmljYXRlUmVnaW9uLFxuICAgICAgU3ViamVjdEFsdGVybmF0aXZlTmFtZXM6IHVuZGVmaW5lZCwgLy8gbm90IHN1cHBvcnRlZCB5ZXQgYXMgaXQgcmVxdWlyZXMgcm9sZSB0byBkb21haW4gbWFwcGluZ1xuICAgICAgVmFsaWRhdGlvblJvbGVBcm46IHByb3BzLnZhbGlkYXRpb25Sb2xlPy5yb2xlQXJuLFxuICAgICAgVmFsaWRhdGlvbkV4dGVybmFsSWQ6IHByb3BzLnZhbGlkYXRpb25FeHRlcm5hbElkLFxuICAgICAgQ2xlYW51cFZhbGlkYXRpb25SZWNvcmRzOiBwcm9wcy5jbGVhbnVwVmFsaWRhdGlvblJlY29yZHMgPz8gdHJ1ZSxcbiAgICAgIFRyYW5zcGFyZW5jeUxvZ2dpbmdFbmFibGVkOiBwcm9wcy50cmFuc3BhcmVuY3lMb2dnaW5nRW5hYmxlZCA/PyB0cnVlLFxuICAgICAgVGFnczogY2RrLkxhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy50YWdzLnJlbmRlclRhZ3MoKSB9KSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgICBSZW1vdmFsUG9saWN5OiBjZGsuTGF6eS5zdHJpbmcoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnJlbW92YWxQb2xpY3kgfSksXG4gICAgfVxuXG4gICAgY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgY2RrLkN1c3RvbVJlc291cmNlKHRoaXMsICdSZXF1ZXN0b3JSZXNvdXJjZScsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogcmVxdWVzdG9yUHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgcmVzb3VyY2VUeXBlOiBETlNfVkFMSURBVEVEX0NFUlRJRklDQVRFX1RZUEUsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgIH0pXG5cbiAgICB0aGlzLmNlcnRpZmljYXRlQXJuID0gY2VydGlmaWNhdGUuZ2V0QXR0U3RyaW5nKCdBcm4nKVxuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oeyB2YWxpZGF0ZTogKCkgPT4gdGhpcy52YWxpZGF0ZURvbWFpblRvSG9zdGVkWm9uZSh0aGlzLmRvbWFpbk5hbWUsIHRoaXMuaG9zdGVkWm9uZU5hbWUpIH0pXG4gIH1cblxuICBtZXRyaWNEYXlzVG9FeHBpcnkocHJvcHM/OiBjZGsuYXdzX2Nsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyB8IHVuZGVmaW5lZCk6IGNkay5hd3NfY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24uZGF5cygxKSxcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGltZW5zaW9uc01hcDogeyBDZXJ0aWZpY2F0ZUFybjogdGhpcy5jZXJ0aWZpY2F0ZUFybiB9LFxuICAgICAgbWV0cmljTmFtZTogJ0RheXNUb0V4cGlyeScsXG4gICAgICBuYW1lc3BhY2U6ICdBV1MvQ2VydGlmaWNhdGVNYW5hZ2VyJyxcbiAgICAgIHJlZ2lvbjogdGhpcy5jZXJ0aWZpY2F0ZVJlZ2lvbixcbiAgICAgIHN0YXRpc3RpYzogY2xvdWR3YXRjaC5TdGF0cy5NSU5JTVVNLFxuICAgIH0pXG4gIH1cblxuICBhcHBseVJlbW92YWxQb2xpY3kocG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeSk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZhbFBvbGljeSA9IHBvbGljeVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEb21haW5OYW1lKGRvbWFpbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoZG9tYWluTmFtZSkpIHtcbiAgICAgIHJldHVybiBkb21haW5OYW1lXG4gICAgfVxuICAgIGlmIChkb21haW5OYW1lLmVuZHNXaXRoKCcuJykpIHtcbiAgICAgIHJldHVybiBkb21haW5OYW1lLnNsaWNlKDAsIC0xKVxuICAgIH1cbiAgICByZXR1cm4gZG9tYWluTmFtZVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVIb3N0ZWRab25lSWQoaG9zdGVkWm9uZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGhvc3RlZFpvbmVJZCkpIHtcbiAgICAgIHJldHVybiBob3N0ZWRab25lSWRcbiAgICB9XG4gICAgcmV0dXJuIGhvc3RlZFpvbmVJZC5yZXBsYWNlKC9eXFwvaG9zdGVkem9uZVxcLy8sICcnKVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZURvbWFpblRvSG9zdGVkWm9uZShkb21haW5OYW1lOiBzdHJpbmcsIGhvc3RlZFpvbmVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQoZG9tYWluTmFtZSkgfHwgY2RrLlRva2VuLmlzVW5yZXNvbHZlZChob3N0ZWRab25lTmFtZSkpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgICBpZiAoZG9tYWluTmFtZSAhPT0gaG9zdGVkWm9uZU5hbWUgJiYgIWRvbWFpbk5hbWUuZW5kc1dpdGgoYC4ke2hvc3RlZFpvbmVOYW1lfWApKSB7XG4gICAgICByZXR1cm4gW2BIb3N0ZWQgem9uZSAke2hvc3RlZFpvbmVOYW1lfSBpcyBub3QgYXV0aG9yaXRhdGl2ZSBmb3IgY2VydGlmaWNhdGUgZG9tYWluIG5hbWUgJHtkb21haW5OYW1lfWBdXG4gICAgfVxuICAgIHJldHVybiBbXVxuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "npx projen build",
|
|
10
10
|
"bump": "npx projen bump",
|
|
11
|
+
"bundle": "npx projen bundle",
|
|
12
|
+
"bundle:certificate-requestor.lambda": "npx projen bundle:certificate-requestor.lambda",
|
|
13
|
+
"bundle:certificate-requestor.lambda:watch": "npx projen bundle:certificate-requestor.lambda:watch",
|
|
11
14
|
"clobber": "npx projen clobber",
|
|
12
15
|
"compat": "npx projen compat",
|
|
13
16
|
"compile": "npx projen compile",
|
|
@@ -85,7 +88,7 @@
|
|
|
85
88
|
"publishConfig": {
|
|
86
89
|
"access": "public"
|
|
87
90
|
},
|
|
88
|
-
"version": "0.0.
|
|
91
|
+
"version": "0.0.4",
|
|
89
92
|
"jest": {
|
|
90
93
|
"testMatch": [
|
|
91
94
|
"<rootDir>/src/**/__tests__/**/*.ts?(x)",
|