@trautonen/cdk-dns-validated-certificate 0.1.4 → 0.1.5
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
CHANGED
|
@@ -3465,7 +3465,7 @@
|
|
|
3465
3465
|
"stability": "stable"
|
|
3466
3466
|
},
|
|
3467
3467
|
"homepage": "https://github.com/trautonen/cdk-dns-validated-certificate.git",
|
|
3468
|
-
"jsiiVersion": "5.4.
|
|
3468
|
+
"jsiiVersion": "5.4.31 (build 9643ee9)",
|
|
3469
3469
|
"keywords": [
|
|
3470
3470
|
"aws",
|
|
3471
3471
|
"cdk",
|
|
@@ -3906,6 +3906,6 @@
|
|
|
3906
3906
|
"symbolId": "src/dns-validated-certificate:ValidationHostedZone"
|
|
3907
3907
|
}
|
|
3908
3908
|
},
|
|
3909
|
-
"version": "0.1.
|
|
3910
|
-
"fingerprint": "
|
|
3909
|
+
"version": "0.1.5",
|
|
3910
|
+
"fingerprint": "OuZzkgieEowJdbuR9Sqg44OYixJ0Ci/cFQ8IinrGhZs="
|
|
3911
3911
|
}
|
|
@@ -47,8 +47,7 @@ var objectToString = (value) => {
|
|
|
47
47
|
return JSON.stringify(value, void 0, 2);
|
|
48
48
|
};
|
|
49
49
|
var containsSame = (array1, array2) => {
|
|
50
|
-
if (array1.length !== array2.length)
|
|
51
|
-
return false;
|
|
50
|
+
if (array1.length !== array2.length) return false;
|
|
52
51
|
return array1.every((v1) => array2.includes(v1));
|
|
53
52
|
};
|
|
54
53
|
var orderBySignificance = (domains) => {
|
|
@@ -276,20 +275,13 @@ var addTags = async (acm, certificateArn, tags) => {
|
|
|
276
275
|
var shouldRequestNew = (oldProperties, newProperties) => {
|
|
277
276
|
const oldHostedZoneIds = Object.values(oldProperties.ValidationHostedZones ?? {}).map((zone) => zone.HostedZoneId);
|
|
278
277
|
const newHostedZoneIds = Object.values(newProperties.ValidationHostedZones ?? {}).map((zone) => zone.HostedZoneId);
|
|
279
|
-
if (!containsSame(oldHostedZoneIds, newHostedZoneIds))
|
|
280
|
-
|
|
281
|
-
if (oldProperties.
|
|
282
|
-
|
|
283
|
-
if (
|
|
284
|
-
|
|
285
|
-
if (oldProperties.
|
|
286
|
-
return true;
|
|
287
|
-
if (oldProperties.CleanupValidationRecords !== newProperties.CleanupValidationRecords)
|
|
288
|
-
return true;
|
|
289
|
-
if (oldProperties.TransparencyLoggingEnabled !== newProperties.TransparencyLoggingEnabled)
|
|
290
|
-
return true;
|
|
291
|
-
if (oldProperties.RemovalPolicy !== newProperties.RemovalPolicy)
|
|
292
|
-
return true;
|
|
278
|
+
if (!containsSame(oldHostedZoneIds, newHostedZoneIds)) return true;
|
|
279
|
+
if (oldProperties.DomainName !== newProperties.DomainName) return true;
|
|
280
|
+
if (!containsSame(oldProperties.AlternativeDomainNames ?? [], newProperties.AlternativeDomainNames ?? [])) return true;
|
|
281
|
+
if (oldProperties.CertificateRegion !== newProperties.CertificateRegion) return true;
|
|
282
|
+
if (oldProperties.CleanupValidationRecords !== newProperties.CleanupValidationRecords) return true;
|
|
283
|
+
if (oldProperties.TransparencyLoggingEnabled !== newProperties.TransparencyLoggingEnabled) return true;
|
|
284
|
+
if (oldProperties.RemovalPolicy !== newProperties.RemovalPolicy) return true;
|
|
293
285
|
return false;
|
|
294
286
|
};
|
|
295
287
|
var assumeRole = (roleArn, externalId) => {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/certificate-requestor.lambda.ts", "../../src/utils.ts"],
|
|
4
4
|
"sourcesContent": ["import * as crypto from 'crypto'\nimport {\n ACMClient,\n AddTagsToCertificateCommand,\n AddTagsToCertificateCommandInput,\n CertificateDetail,\n DeleteCertificateCommand,\n DeleteCertificateCommandInput,\n DescribeCertificateCommand,\n DescribeCertificateCommandInput,\n RequestCertificateCommand,\n RequestCertificateCommandInput,\n waitUntilCertificateValidated,\n} from '@aws-sdk/client-acm'\nimport {\n ChangeAction,\n ChangeResourceRecordSetsCommand,\n ChangeResourceRecordSetsCommandInput,\n InvalidChangeBatch,\n ResourceRecordSet,\n Route53Client,\n waitUntilResourceRecordSetsChanged,\n} from '@aws-sdk/client-route-53'\nimport { AssumeRoleCommand, AssumeRoleCommandInput, STSClient } from '@aws-sdk/client-sts'\nimport type { AwsCredentialIdentity, Provider } from '@aws-sdk/types'\nimport type { CloudFormationCustomResourceEvent } from 'aws-lambda'\nimport {\n cleanChangeId,\n cleanDomainName,\n containsSame,\n objectToString,\n orderBySignificance,\n stringToBoolean,\n tryFor,\n} from './utils'\n\nexport type ValidationHostedZoneProperties = {\n DomainName: string\n HostedZoneId: string\n ValidationRoleArn?: string\n ValidationExternalId?: string\n}\n\nexport type Properties = {\n DomainName: string\n AlternativeDomainNames?: string[]\n ValidationHostedZones: Record<string, ValidationHostedZoneProperties>\n CertificateRegion: string\n CleanupValidationRecords: string\n TransparencyLoggingEnabled: string\n Tags?: Record<string, string>\n RemovalPolicy: string\n}\n\ntype Route53Factory = (roleArn: string | undefined, externalId: string | undefined) => Route53Client\n\nconst parseProperties = (properties: Record<string, any>): Properties => {\n // maybe should actually parse and not just assume\n return properties as unknown as Properties\n}\n\nconst parseDomainValidationRecords = (certificate: CertificateDetail): ResourceRecordSet[] | null => {\n const options = certificate.DomainValidationOptions ?? []\n if (options.length > 0 && options.every((opt) => opt.ResourceRecord?.Name)) {\n const uniqueRecords = [...new Map(options.map((opt) => [opt.ResourceRecord?.Name!, opt.ResourceRecord!])).values()]\n return uniqueRecords.map((record) => {\n return {\n Name: record.Name,\n Type: record.Type,\n TTL: 30,\n ResourceRecords: [\n {\n Value: record.Value,\n },\n ],\n }\n })\n }\n return null\n}\n\nconst changeRecordSets = async (\n route53: Route53Client,\n action: ChangeAction,\n records: ResourceRecordSet[],\n hostedZoneId: string\n): Promise<void> => {\n const changeRecordSetsInput: ChangeResourceRecordSetsCommandInput = {\n HostedZoneId: hostedZoneId,\n ChangeBatch: {\n Changes: records.map((record) => ({\n Action: action,\n ResourceRecordSet: record,\n })),\n },\n }\n try {\n const { ChangeInfo } = await route53.send(new ChangeResourceRecordSetsCommand(changeRecordSetsInput))\n const changeId = ChangeInfo?.Id!\n const result = await waitUntilResourceRecordSetsChanged({ client: route53, maxWaitTime: 180 }, { Id: changeId })\n if (result.state !== 'SUCCESS') {\n throw new Error(\n `Validation records never changed for hosted zone ${hostedZoneId}: [${result.state}] ${result.reason ?? ''}`\n )\n }\n const operation = action === 'CREATE' || action === 'UPSERT' ? 'changed' : 'deleted'\n const change = cleanChangeId(changeId)\n console.log(`Validation records succesfully ${operation} for hosted zone ${hostedZoneId} with change id ${change}`)\n } catch (error: unknown) {\n if (action === 'DELETE' && error instanceof InvalidChangeBatch && error.message.includes('not found')) {\n // there's a deletion race condition where some other certificate has already deleted the records\n console.log(`All validation records have already been removed by some other certificate`)\n } else {\n throw error\n }\n }\n}\n\nconst getRecordsForZoneNames = (\n records: ResourceRecordSet[],\n zoneNames: string[],\n result?: Record<string, ResourceRecordSet[]>\n): Record<string, ResourceRecordSet[]> => {\n const [zoneName, ...restZoneNames] = zoneNames\n if (!zoneName) {\n return result ?? {}\n }\n const matchingRecords: ResourceRecordSet[] = []\n const unmatchingRecords: ResourceRecordSet[] = []\n for (const record of records) {\n const normalizedRecordName = cleanDomainName(record.Name!)\n if (normalizedRecordName.endsWith(zoneName)) {\n matchingRecords.push(record)\n } else {\n unmatchingRecords.push(record)\n }\n }\n return getRecordsForZoneNames(unmatchingRecords, restZoneNames, {\n ...(result ?? {}),\n [zoneName]: matchingRecords,\n })\n}\n\nconst requestCertificate = async (\n acm: ACMClient,\n route53: Route53Factory,\n requestId: string,\n properties: Properties\n): Promise<string> => {\n const { DomainName, AlternativeDomainNames, TransparencyLoggingEnabled } = properties\n\n console.log(`Requesting certificate for ${DomainName}`)\n\n const requestCertificateInput: RequestCertificateCommandInput = {\n DomainName,\n SubjectAlternativeNames: AlternativeDomainNames,\n IdempotencyToken: crypto.createHash('sha256').update(requestId).digest('hex').slice(0, 32),\n ValidationMethod: 'DNS',\n Options: {\n CertificateTransparencyLoggingPreference: TransparencyLoggingEnabled ? 'ENABLED' : 'DISABLED',\n },\n }\n const { CertificateArn } = await acm.send(new RequestCertificateCommand(requestCertificateInput))\n\n console.log(`Certificate ${CertificateArn} requested`)\n\n const validationMaxSeconds = 180\n const validationTimeoutError = `Domain validation options were not found in ${validationMaxSeconds} seconds`\n const validationRecords = await tryFor(validationMaxSeconds, validationTimeoutError, async () => {\n const describeCertificateInput: DescribeCertificateCommandInput = {\n CertificateArn,\n }\n const { Certificate } = await acm.send(new DescribeCertificateCommand(describeCertificateInput))\n return parseDomainValidationRecords(Certificate!)\n })\n\n const hostedZones = Object.values(properties.ValidationHostedZones)\n const hostedZoneIds = hostedZones.map((zone) => zone.HostedZoneId)\n\n console.log(\n `Upserting ${validationRecords.length} validation record(s) into hosted zone(s) ${hostedZoneIds.join(', ')}:`\n )\n validationRecords.forEach((record) =>\n console.log(`${record.Name} ${record.Type} ${record.ResourceRecords?.map((rr) => rr.Value).join(',')}`)\n )\n\n const recordsForZoneNames = getRecordsForZoneNames(\n validationRecords,\n orderBySignificance(Object.keys(properties.ValidationHostedZones))\n )\n for (const hostedZone of hostedZones) {\n const records = recordsForZoneNames[hostedZone.DomainName]\n if (records.length > 0) {\n await changeRecordSets(\n route53(hostedZone.ValidationRoleArn, hostedZone.ValidationExternalId),\n 'UPSERT',\n records,\n hostedZone.HostedZoneId\n )\n }\n }\n\n console.log(`Waiting for certificate ${CertificateArn} to validate`)\n const result = await waitUntilCertificateValidated({ client: acm, maxWaitTime: 300 }, { CertificateArn })\n if (result.state !== 'SUCCESS') {\n throw new Error(`Certificate failed ${CertificateArn} to validate: [${result.state}] ${result.reason ?? ''}`)\n }\n console.log(`Certificate ${CertificateArn} successfully validated`)\n return CertificateArn!\n}\n\nconst deleteCertificate = async (\n acm: ACMClient,\n route53: Route53Factory,\n certificateArn: string,\n properties: Properties\n): Promise<void> => {\n console.log(`Waiting for certificate ${certificateArn} usage to drain before deletion`)\n\n const waitUsageMaxSeconds = 600\n const waitUsageTimeoutError = `Certificate was still in use after ${waitUsageMaxSeconds} seconds`\n const certificate = await tryFor(waitUsageMaxSeconds, waitUsageTimeoutError, async () => {\n const describeCertificateInput: DescribeCertificateCommandInput = {\n CertificateArn: certificateArn,\n }\n const { Certificate } = await acm.send(new DescribeCertificateCommand(describeCertificateInput))\n const inUseBy = Certificate?.InUseBy ?? []\n if (inUseBy.length > 0) {\n return null\n }\n return Certificate!\n })\n console.log('Certificate is unused and will be deleted')\n\n const validationRecords = parseDomainValidationRecords(certificate)\n if (validationRecords && stringToBoolean(properties.CleanupValidationRecords)) {\n const hostedZones = Object.values(properties.ValidationHostedZones)\n const hostedZoneIds = hostedZones.map((zone) => zone.HostedZoneId)\n\n console.log(\n `Deleting ${validationRecords.length} validation record(s) from hosted zone(s) ${hostedZoneIds.join(', ')}`\n )\n\n const recordsForZoneNames = getRecordsForZoneNames(\n validationRecords,\n orderBySignificance(Object.keys(properties.ValidationHostedZones))\n )\n for (const hostedZone of hostedZones) {\n const records = recordsForZoneNames[hostedZone.DomainName]\n if (records.length > 0) {\n await changeRecordSets(\n route53(hostedZone.ValidationRoleArn, hostedZone.ValidationExternalId),\n 'DELETE',\n records,\n hostedZone.HostedZoneId\n )\n }\n }\n }\n\n console.log(`Deleting certificate ${certificateArn} from ACM`)\n const deleteCertificateInput: DeleteCertificateCommandInput = {\n CertificateArn: certificateArn,\n }\n await acm.send(new DeleteCertificateCommand(deleteCertificateInput))\n console.log(`Certificate ${certificateArn} successfully deleted`)\n}\n\nconst addTags = async (acm: ACMClient, certificateArn: string, tags: Record<string, string>) => {\n const tagList = Array.from(Object.entries(tags).map(([Key, Value]) => ({ Key, Value })))\n const addTagsInput: AddTagsToCertificateCommandInput = {\n CertificateArn: certificateArn,\n Tags: tagList,\n }\n\n console.log(`Adding ${tagList.length} tags to certificate ${certificateArn}`)\n await acm.send(new AddTagsToCertificateCommand(addTagsInput))\n console.log(`All tags successfully added to certificate ${certificateArn}`)\n}\n\nconst shouldRequestNew = (oldProperties: Properties, newProperties: Properties): boolean => {\n const oldHostedZoneIds = Object.values(oldProperties.ValidationHostedZones ?? {}).map((zone) => zone.HostedZoneId)\n const newHostedZoneIds = Object.values(newProperties.ValidationHostedZones ?? {}).map((zone) => zone.HostedZoneId)\n if (!containsSame(oldHostedZoneIds, newHostedZoneIds)) return true\n if (oldProperties.DomainName !== newProperties.DomainName) return true\n if (!containsSame(oldProperties.AlternativeDomainNames ?? [], newProperties.AlternativeDomainNames ?? [])) return true\n if (oldProperties.CertificateRegion !== newProperties.CertificateRegion) return true\n if (oldProperties.CleanupValidationRecords !== newProperties.CleanupValidationRecords) return true\n if (oldProperties.TransparencyLoggingEnabled !== newProperties.TransparencyLoggingEnabled) return true\n if (oldProperties.RemovalPolicy !== newProperties.RemovalPolicy) return true\n return false\n}\n\nconst assumeRole = (\n roleArn: string | undefined,\n externalId: string | undefined\n): Provider<AwsCredentialIdentity> | undefined => {\n if (!roleArn) {\n return undefined\n }\n return async () => {\n const sts = new STSClient({ retryMode: 'adaptive' })\n const assumeRoleInput: AssumeRoleCommandInput = {\n RoleArn: roleArn,\n RoleSessionName: 'CertificateRequestor',\n ExternalId: externalId,\n }\n const { Credentials } = await sts.send(new AssumeRoleCommand(assumeRoleInput))\n return {\n accessKeyId: Credentials?.AccessKeyId!,\n secretAccessKey: Credentials?.SecretAccessKey!,\n sessionToken: Credentials?.SessionToken!,\n expiration: Credentials?.Expiration,\n }\n }\n}\n\nexport const handler = async (event: CloudFormationCustomResourceEvent) => {\n const properties = parseProperties(event.ResourceProperties)\n\n const acm = new ACMClient({ region: properties.CertificateRegion, retryMode: 'adaptive' })\n const route53 = (roleArn: string | undefined, externalId: string | undefined): Route53Client => {\n return new Route53Client({\n retryMode: 'adaptive',\n credentials: assumeRole(roleArn, externalId),\n })\n }\n\n switch (event.RequestType) {\n case 'Create': {\n console.log(`Requesting new certificate:\\n${objectToString(properties)}`)\n const certificateArn = await requestCertificate(acm, route53, event.RequestId, properties)\n if (properties.Tags && Object.entries(properties.Tags).length > 0) {\n await addTags(acm, certificateArn, properties.Tags)\n }\n return {\n PhysicalResourceId: certificateArn,\n Data: {\n Arn: certificateArn,\n },\n }\n }\n case 'Update': {\n let certificateArn = event.PhysicalResourceId\n if (shouldRequestNew(parseProperties(event.OldResourceProperties), properties)) {\n console.log(`Requesting new certificate due to change of properties:\\n${objectToString(properties)}`)\n certificateArn = await requestCertificate(acm, route53, event.RequestId, properties)\n }\n if (properties.Tags && Object.entries(properties.Tags).length > 0) {\n await addTags(acm, certificateArn, properties.Tags)\n }\n return {\n PhysicalResourceId: certificateArn,\n Data: {\n Arn: certificateArn,\n },\n }\n }\n case 'Delete': {\n const certificateArn = event.PhysicalResourceId\n if (properties.RemovalPolicy === 'destroy') {\n console.log(`Deleting old certificate as per removal policy:\\n${objectToString(properties)}`)\n await deleteCertificate(acm, route53, certificateArn, properties)\n }\n return {\n PhysicalResourceId: certificateArn,\n Data: {\n Arn: certificateArn,\n },\n }\n }\n }\n throw new Error(`Invalid request type`)\n}\n", "export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))\n\nexport const booleanToString = (value: boolean): string => {\n return value ? 'true' : 'false'\n}\n\nexport const stringToBoolean = (value: string): boolean => {\n return value === 'true' ? true : false\n}\n\nexport const objectToString = (value: object): string => {\n return JSON.stringify(value, undefined, 2)\n}\n\nexport const containsSame = <T>(array1: T[], array2: T[]): boolean => {\n if (array1.length !== array2.length) return false\n return array1.every((v1) => array2.includes(v1))\n}\n\nexport const orderBySignificance = (domains: string[]): string[] => {\n const copy = [...domains]\n copy.sort((a, b) => {\n const ac = cleanDomainName(a).split('.').length\n const bc = cleanDomainName(b).split('.').length\n if (ac > bc) {\n return -1\n }\n if (ac < bc) {\n return 1\n }\n return 0\n })\n return copy\n}\n\nexport const cleanDomainName = (domainName: string): string => {\n if (domainName.endsWith('.')) {\n return domainName.slice(0, -1)\n }\n return domainName\n}\n\nexport const cleanHostedZoneId = (hostedZoneId: string): string => {\n return hostedZoneId.replace(/^\\/hostedzone\\//, '')\n}\n\nexport const cleanChangeId = (changeId: string): string => {\n return changeId.replace('/change/', '')\n}\n\nexport const matchNamesToZones = <T>(\n zoneNames: string[],\n records: T[],\n name: (record: T) => string\n): Record<string, T[]> => {\n const orderedZoneNames = orderBySignificance(zoneNames)\n const matcher = (zones: string[], items: T[], result: Record<string, T[]>): Record<string, T[]> => {\n const [firstZone, ...restZones] = zones\n if (!firstZone) {\n return result\n }\n const matchingItems: T[] = []\n const unmatchingItems: T[] = []\n for (const item of items) {\n const normalizedRecordName = cleanDomainName(name(item))\n if (normalizedRecordName.endsWith(cleanDomainName(firstZone))) {\n matchingItems.push(item)\n } else {\n unmatchingItems.push(item)\n }\n }\n return matcher(restZones, unmatchingItems, {\n ...result,\n [firstZone]: matchingItems,\n })\n }\n return matcher(orderedZoneNames, records, {})\n}\n\nexport const tryFor = async <T>(maxSeconds: number, timeoutError: string, fn: () => Promise<T | null>): Promise<T> => {\n const startTime = Date.now()\n // eslint-disable-next-line no-constant-condition\n for (let i = 0; true; i++) {\n if (Date.now() > startTime + maxSeconds * 1000) {\n throw new Error(timeoutError)\n }\n const result = await fn()\n if (result !== null) {\n return result\n }\n const base = Math.pow(2, i)\n await sleep(Math.random() * base * 50 + base * 150)\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAAwB;AACxB,wBAYO;AACP,6BAQO;AACP,wBAAqE;;;ACvB9D,IAAM,QAAQ,CAAC,OAAe,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAM9E,IAAM,kBAAkB,CAAC,UAA2B;AACzD,SAAO,UAAU,SAAS,OAAO;AACnC;AAEO,IAAM,iBAAiB,CAAC,UAA0B;AACvD,SAAO,KAAK,UAAU,OAAO,QAAW,CAAC;AAC3C;AAEO,IAAM,eAAe,CAAI,QAAa,WAAyB;AACpE,MAAI,OAAO,WAAW,OAAO
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -223,5 +223,5 @@ class DnsValidatedCertificate extends cdk.Resource {
|
|
|
223
223
|
}
|
|
224
224
|
exports.DnsValidatedCertificate = DnsValidatedCertificate;
|
|
225
225
|
_a = JSII_RTTI_SYMBOL_1;
|
|
226
|
-
DnsValidatedCertificate[_a] = { fqn: "@trautonen/cdk-dns-validated-certificate.DnsValidatedCertificate", version: "0.1.
|
|
226
|
+
DnsValidatedCertificate[_a] = { fqn: "@trautonen/cdk-dns-validated-certificate.DnsValidatedCertificate", version: "0.1.5" };
|
|
227
227
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXZhbGlkYXRlZC1jZXJ0aWZpY2F0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kbnMtdmFsaWRhdGVkLWNlcnRpZmljYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQWtDO0FBRWxDLHlEQUF3RDtBQUN4RCwyQ0FBMEM7QUFDMUMsaURBQWdEO0FBRWhELGlFQUFnRTtBQUVoRSxxRkFBK0U7QUFFL0UsbUNBQWdHO0FBaUhoRyxNQUFNLDhCQUE4QixHQUFHLGlDQUFpQyxDQUFBO0FBQ3hFLE1BQU0sMEJBQTBCLEdBQUcsc0NBQXNDLENBQUE7QUFFekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUVHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxHQUFHLENBQUMsUUFBUTtJQWF2RDs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW1DO1FBQzNFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM3RCxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLENBQ3pGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxDQUNoRCxDQUFBO1FBQ0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFFbEUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQTtRQUNyRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FB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QU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUN2RCxVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztTQUMvQyxDQUFDLENBQUE7UUFDRixPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUMzRixDQUFDO0lBRU8sNEJBQTRCLENBQUMsV0FBcUIsRUFBRSxTQUFtQjtRQUM3RSxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUE7UUFDM0IsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNyQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7WUFDaEUsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7WUFDM0YsSUFBSSxvQkFBb0IsSUFBSSxtQkFBbUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNoSCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsVUFBVSxpREFBaUQsQ0FBQyxDQUFBO1lBQ3BGLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDOztBQTlMSCwwREErTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInXG5pbXBvcnQgKiBhcyBjZXJ0aWZpY2F0ZW1hbmFnZXIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlcidcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSAnYXdzLWNkay1saWIvYXdzLWNsb3Vkd2F0Y2gnXG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSdcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJ1xuaW1wb3J0ICogYXMgcm91dGU1MyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtcm91dGU1MydcbmltcG9ydCAqIGFzIGN1c3RvbV9yZXNvdXJjZXMgZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcydcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnXG5pbXBvcnQgeyBDZXJ0aWZpY2F0ZVJlcXVlc3RvckZ1bmN0aW9uIH0gZnJvbSAnLi9jZXJ0aWZpY2F0ZS1yZXF1ZXN0b3ItZnVuY3Rpb24nXG5pbXBvcnQgeyBQcm9wZXJ0aWVzLCBWYWxpZGF0aW9uSG9zdGVkWm9uZVByb3BlcnRpZXMgfSBmcm9tICcuL2NlcnRpZmljYXRlLXJlcXVlc3Rvci5sYW1iZGEnXG5pbXBvcnQgeyBib29sZWFuVG9TdHJpbmcsIGNsZWFuRG9tYWluTmFtZSwgY2xlYW5Ib3N0ZWRab25lSWQsIG1hdGNoTmFtZXNUb1pvbmVzIH0gZnJvbSAnLi91dGlscydcblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uSG9zdGVkWm9uZSB7XG4gIC8qKlxuICAgKiBIb3N0ZWQgem9uZSB0byB1c2UgZm9yIEROUyB2YWxpZGF0aW9uLiBUaGUgem9uZSBuYW1lIGlzIG1hdGNoZWQgdG8gZG9tYWluIG5hbWUgdG8gdXNlIHRoZSByaWdodFxuICAgKiBob3N0ZWQgem9uZSBmb3IgdmFsaWRhdGlvbi5cbiAgICpcbiAgICogSWYgdGhlIGhvc3RlZCB6b25lIGlzIG5vdCBtYW5hZ2VkIGJ5IHRoZSBDREsgYXBwbGljYXRpb24sIGl0IG5lZWRzIHRvIGJlIHByb3ZpZGVkIHZpYVxuICAgKiBgYEhvc3RlZFpvbmUuZnJvbUhvc3RlZFpvbmVBdHRyaWJ1dGVzKClgYC5cbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmU6IHJvdXRlNTMuSUhvc3RlZFpvbmVcblxuICAvKipcbiAgICogVGhlIHJvbGUgdGhhdCBpcyBhc3N1bWVkIGZvciBETlMgcmVjb3JkIGNoYW5nZXMgZm9yIGNlcnRpZmljYXRlIHZhbGlkYXRpb24uXG4gICAqXG4gICAqIFRoaXMgcm9sZSBzaG91bGQgZXhpc3QgaW4gdGhlIHNhbWUgYWNjb3VudCBhcyB0aGUgaG9zdGVkIHpvbmUgYW5kIGluY2x1ZGUgcGVybWlzc2lvbnMgdG8gY2hhbmdlIHRoZSBETlMgcmVjb3Jkc1xuICAgKiBmb3IgdGhlIGdpdmVuIGBgaG9zdGVkWm9uZWBgLiBUaGUgYGBjdXN0b21SZXNvdXJjZVJvbGVgYCBvciB0aGUgZGVmYXVsdCBleGVjdXRpb24gcm9sZSBpcyBnaXZlbiBwZXJtaXNzaW9uIHRvXG4gICAqIGFzc3VtZSB0aGlzIHJvbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gc2VwYXJhdGUgcm9sZSBmb3IgRE5TIHJlY29yZCBjaGFuZ2VzLiBUaGUgZ2l2ZW4gY3VzdG9tUmVzb3VyY2VSb2xlIG9yIHRoZSBkZWZhdWx0IHJvbGUgaXMgdXNlZFxuICAgKiBmb3IgRE5TIHJlY29yZCBjaGFuZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGlvblJvbGU/OiBpYW0uSVJvbGVcblxuICAvKipcbiAgICogRXh0ZXJuYWwgaWQgZm9yIGBgdmFsaWRhdGlvblJvbGVgYCByb2xlIGFzc3VtZSB2ZXJpZmljYXRpb24uXG4gICAqXG4gICAqIFRoaXMgc2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIGBgdmFsaWRhdGlvblJvbGVgYCBpcyBnaXZlbiBhbmQgdGhlIHJvbGUgZXhwZWN0cyBhbiBleHRlcm5hbCBpZCBwcm92aWRlZCBvbiBhc3N1bWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZXh0ZXJuYWwgaWQgcHJvdmlkZWQgZHVyaW5nIGFzc3VtZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbGlkYXRpb25FeHRlcm5hbElkPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGVQcm9wcyB7XG4gIC8qKlxuICAgKiBGdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgdG8gcmVxdWVzdCBhIGNlcnRpZmljYXRlIGZvci5cbiAgICpcbiAgICogTWF5IGNvbnRhaW4gd2lsZGNhcmRzLCBzdWNoIGFzIGBgKi5kb21haW4uY29tYGAuXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogRnVsbHktcXVhbGlmaWVkIGFsdGVybmF0aXZlIGRvbWFpbiBuYW1lcyB0byByZXF1ZXN0IGEgY2VydGlmaWNhdGUgZm9yLlxuICAgKlxuICAgKiBNYXkgY29udGFpbiB3aWxkY2FyZHMsIHN1Y2ggYXMgYGAqLm90aGVyZG9tYWluLmNvbWBgLlxuICAgKi9cbiAgcmVhZG9ubHkgYWx0ZXJuYXRpdmVEb21haW5OYW1lcz86IHN0cmluZ1tdXG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgaG9zdGVkIHpvbmVzIHRvIHVzZSBmb3IgdmFsaWRhdGlvbi4gSG9zdGVkIHpvbmVzIGFyZSBtYXBwZWQgdG8gZG9tYWluIG5hbWVzIGJ5IHRoZSB6b25lIG5hbWUuXG4gICAqL1xuICByZWFkb25seSB2YWxpZGF0aW9uSG9zdGVkWm9uZXM6IFZhbGlkYXRpb25Ib3N0ZWRab25lW11cblxuICAvKipcbiAgICogQVdTIHJlZ2lvbiB3aGVyZSB0aGUgY2VydGlmaWNhdGUgaXMgZGVwbG95ZWQuXG4gICAqXG4gICAqIFlvdSBzaG91bGQgdXNlIHRoZSBkZWZhdWx0IGBgQ2VydGlmaWNhdGVgYCBjb25zdHJ1Y3QgaW5zdGVhZCBpZiB0aGUgcmVnaW9uIGlzIHNhbWUgYXMgdGhlIHN0YWNrJ3MgYW5kIHRoZSBob3N0ZWRcbiAgICogem9uZSBpcyBpbiB0aGUgc2FtZSBhY2NvdW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNhbWUgcmVnaW9uIGFzIHRoZSBzdGFjay5cbiAgICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlUmVnaW9uPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIHRoYXQgaXMgdXNlZCBmb3IgdGhlIGN1c3RvbSByZXNvdXJjZSBMYW1iZGEgZXhlY3V0aW9uLlxuICAgKlxuICAgKiBUaGUgcm9sZSBpcyBnaXZlbiBwZXJtaXNzaW9ucyB0byByZXF1ZXN0IGNlcnRpZmljYXRlcyBmcm9tIEFDTS4gSWYgdGhlcmUgYXJlIGFueSBgYHZhbGlkYXRpb25Sb2xlYGBzIHByb3ZpZGVkLFxuICAgKiB0aGlzIHJvbGUgaXMgYWxzbyBnaXZlbiBwZXJtaXNzaW9uIHRvIGFzc3VtZSB0aGUgYGB2YWxpZGF0aW9uUm9sZWBgLiBPdGhlcndpc2UgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBob3N0ZWQgem9uZVxuICAgKiBpcyBpbiBzYW1lIGFjY291bnQgYW5kIHRoZSBleGVjdXRpb24gcm9sZSBpcyBnaXZlbiBwZXJtaXNzaW9ucyB0byBjaGFuZ2UgRE5TIHJlY29yZHMgZm9yIHRoZSBnaXZlbiBgYGRvbWFpbk5hbWVgYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBMYW1iZGEgY3JlYXRlcyBhIGRlZmF1bHQgZXhlY3V0aW9uIHJvbGUuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21SZXNvdXJjZVJvbGU/OiBpYW0uSVJvbGVcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgY2xlYW5pbmcgb2YgdmFsaWRhdGlvbiBETlMgcmVjb3JkcyBmcm9tIHRoZSBob3N0ZWQgem9uZS5cbiAgICpcbiAgICogSWYgdGhlcmUncyBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMgY3JlYXRlZCBmb3Igc2FtZSBkb21haW4sIGl0IGlzIHBvc3NpYmxlIHRvIGVuY291dGVyIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgc29tZVxuICAgKiBjZXJ0aWZpY2F0ZSBpcyByZW1vdmVkIGFuZCBhbm90aGVyIGNlcnRpZmljYXRlIHdvdWxkIG5lZWQgdGhlIHNhbWUgdmFsaWRhdGlvbiByZWNvcmQuIFByZWZlciBzaW5nbGUgY2VydGlmaWNhdGVcbiAgICogZm9yIGEgZG9tYWluIG9yIHNldCB0aGlzIHRvIGZhbHNlIGFuZCBjbGVhbnVwIHJlY29yZHMgbWFudWFsbHkgd2hlbiBub3QgbmVlZGVkIGFueW1vcmUuIElmIHlvdSBjaGFuZ2UgdGhpc1xuICAgKiBwcm9wZXJ0eSBhZnRlciBjcmVhdGlvbiwgYSBuZXcgY2VydGlmaWNhdGUgd2lsbCBiZSByZXF1ZXN0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFudXBWYWxpZGF0aW9uUmVjb3Jkcz86IGJvb2xlYW5cblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgdHJhbnNwYXJlbmN5IGxvZ2dpbmcgZm9yIHRoaXMgY2VydGlmaWNhdGUuXG4gICAqXG4gICAqIE9uY2UgYSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiBsb2dnZWQsIGl0IGNhbm5vdCBiZSByZW1vdmVkIGZyb20gdGhlIGxvZy4gT3B0aW5nIG91dCBhdCB0aGF0IHBvaW50IHdpbGwgaGF2ZSBub1xuICAgKiBlZmZlY3QuIElmIHlvdSBjaGFuZ2UgdGhpcyBwcm9wZXJ0eSBhZnRlciBjcmVhdGlvbiwgYSBuZXcgY2VydGlmaWNhdGUgd2lsbCBiZSByZXF1ZXN0ZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FjbS9sYXRlc3QvdXNlcmd1aWRlL2FjbS1iZXN0cHJhY3RpY2VzLmh0bWwjYmVzdC1wcmFjdGljZXMtdHJhbnNwYXJlbmN5XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zcGFyZW5jeUxvZ2dpbmdFbmFibGVkPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBBcHBseSB0aGUgZ2l2ZW4gcmVtb3ZhbCBwb2xpY3kgdG8gdGhpcyByZXNvdXJjZS5cbiAgICpcbiAgICogVGhlIHJlbW92YWwgcG9saWN5IGNvbnRyb2xzIHdoYXQgaGFwcGVucyB0byB0aGlzIHJlc291cmNlIHdoZW4gaXQgc3RvcHMgYmVpbmcgbWFuYWdlZCBieSBDbG91ZEZvcm1hdGlvbiwgZWl0aGVyXG4gICAqIGJlY2F1c2UgeW91J3ZlIHJlbW92ZWQgaXQgZnJvbSB0aGUgQ0RLIGFwcGxpY2F0aW9uIG9yIGJlY2F1c2UgeW91J3ZlIG1hZGUgYSBjaGFuZ2UgdGhhdCByZXF1aXJlcyB0aGUgcmVzb3VyY2UgdG9cbiAgICogYmUgcmVwbGFjZWQuIFRoZSByZXNvdXJjZSBjYW4gYmUgZGVsZXRlZCAoYGBSZW1vdmFsUG9saWN5LkRFU1RST1lgYCksIG9yIGxlZnQgaW4geW91ciBBV1MgYWNjb3VudCBmb3IgZGF0YVxuICAgKiByZWNvdmVyeSBhbmQgY2xlYW51cCBsYXRlciAoYGBSZW1vdmFsUG9saWN5LlJFVEFJTmBgKS4gSWYgeW91IGNoYW5nZSB0aGlzIHByb3BlcnR5IGFmdGVyIGNyZWF0aW9uLCBhIG5ld1xuICAgKiBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHJlcXVlc3RlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogY2RrLlJlbW92YWxQb2xpY3lcbn1cblxuY29uc3QgRE5TX1ZBTElEQVRFRF9DRVJUSUZJQ0FURV9UWVBFID0gJ0N1c3RvbTo6RG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUnXG5jb25zdCBDRVJUVElGSUNBVEVfUkVTT1VSQ0VfVFlQRSA9ICdBV1M6OkNlcnRpZmljYXRlTWFuYWdlcjo6Q2VydGlmaWNhdGUnXG5cbi8qKlxuICogQSBjZXJ0aWZpY2F0ZSBtYW5hZ2VkIGJ5IEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyLiBXaWxsIGJlIGF1dG9tYXRpY2FsbHkgdmFsaWRhdGVkIHVzaW5nIEROUyB2YWxpZGF0aW9uIGFnYWluc3QgdGhlXG4gKiBzcGVjaWZpZWQgUm91dGUgNTMgaG9zdGVkIHpvbmUuIFRoaXMgY29uc3RydWN0IHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIGNyb3NzLXJlZ2lvbiBvciBjcm9zcy1hY2NvdW50IGNlcnRpZmljYXRlXG4gKiB2YWxpZGF0aW9ucy4gVGhlIGRlZmF1bHQgYGBDZXJ0aWZpY2F0ZWBgIGNvbnN0cnVjdCBpcyBiZXR0ZXIgaW4gY2FzZXMgd2hlcmUgZXZlcnl0aGluZyBpcyBtYW5hZ2VkIGJ5IHRoZSBDREtcbiAqIGFwcGxpY2F0aW9uLlxuICpcbiAqIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBjb25zdHJ1Y3QgZG9lcyBub3Qgc3VwcG9ydCBhbHRlcm5hdGl2ZSBuYW1lcyB5ZXQgYXMgaXQgd291bGQgcmVxdWlyZSBkb21haW4gdG8gcm9sZSBtYXBwaW5nLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyAjIyMgQ3Jvc3MtcmVnaW9uIGNlcnRpZmljYXRlIHZhbGlkYXRpb25cbiAqIC8vIGhvc3RlZCB6b25lIG1hbmFnZWQgYnkgdGhlIENESyBhcHBsaWNhdGlvblxuICogY29uc3QgaG9zdGVkWm9uZTogcm91dGU1My5JSG9zdGVkWm9uZSA9IC4uLlxuICogLy8gbm8gc2VwYXJhdGUgdmFsaWRhdGlvbiByb2xlIGlzIG5lZWRlZFxuICogY29uc3QgY2VydGlmaWNhdGUgPSBuZXcgRG5zVmFsaWRhdGVkQ2VydGlmaWNhdGUodGhpcywgJ0Nyb3NzUmVnaW9uQ2VydGlmaWNhdGUnLCB7XG4gKiAgIGRvbWFpbk5hbWU6ICdleGFtcGxlLmNvbScsICAgICAvLyBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgaG9zdGVkIHpvbmVcbiAqICAgdmFsaWRhdGlvbkhvc3RlZFpvbmVzOiBbeyAgICAgIC8vIGhvc3RlZCB6b25lIHVzZWQgd2l0aCB0aGUgZXhlY3V0aW9uIHJvbGUncyBwZXJtaXNzaW9uc1xuICogICAgIGhvc3RlZFpvbmU6IGhvc3RlZFpvbmVcbiAqICAgfV0sXG4gKiAgIGNlcnRpZmljYXRlUmVnaW9uOiAndXMtZWFzdC0xJyAvLyB1c2VkIGJ5IGZvciBleGFtcGxlIENsb3VkRnJvbnRcbiAqIH0pXG4gKiAvLyAjIyMgQ3Jvc3MtYWNjb3VudCBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uXG4gKiAvLyBleHRlcm5hbCBob3N0ZWQgem9uZVxuICogY29uc3QgaG9zdGVkWm9uZTogcm91dGU1My5JSG9zdGVkWm9uZSA9XG4gKiAgIHJvdXRlNTMuSG9zdGVkWm9uZS5mcm9tSG9zdGVkWm9uZUF0dHJpYnV0ZXModGhpcywgJ0hvc3RlZFpvbmUnLCB7XG4gKiAgICAgaG9zdGVkWm9uZUlkOiAnWjUzMkRHREVERlMxMjM0NTY3ODknLFxuICogICAgIHpvbmVOYW1lOiAnZXhhbXBsZS5jb20nXG4gKiAgIH0pXG4gKiAvLyB2YWxpZGF0aW9uIHJvbGUgaW4gdGhlIHNhbWUgYWNjb3VudCBhcyB0aGUgaG9zdGVkIHpvbmVcbiAqIGNvbnN0IHJvbGVBcm4gPSAnYXJuOmF3czppYW06OjEyMzQ1Njc4OTpyb2xlL0NoYW5nZURuc1JlY29yZHNSb2xlJ1xuICogY29uc3QgZXh0ZXJuYWxJZCA9ICdkb21haW4tYXNzdW1lJ1xuICogY29uc3QgdmFsaWRhdGlvblJvbGU6IGlhbS5JUm9sZSA9XG4gKiAgIGlhbS5Sb2xlLmZyb21Sb2xlQXJuKHRoaXMsICdWYWxpZGF0aW9uUm9sZScsIHJvbGVBcm4pXG4gKiBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSh0aGlzLCAnQ3Jvc3NBY2NvdW50Q2VydGlmaWNhdGUnLCB7XG4gKiAgIGRvbWFpbk5hbWU6ICdleGFtcGxlLmNvbScsXG4gKiAgIHZhbGlkYXRpb25Ib3N0ZWRab25lczogW3tcbiAqICAgICBob3N0ZWRab25lOiBob3N0ZWRab25lLFxuICogICAgIHZhbGlkYXRpb25Sb2xlOiB2YWxpZGF0aW9uUm9sZSxcbiAqICAgICB2YWxpZGF0aW9uRXh0ZXJuYWxJZDogZXh0ZXJuYWxJZFxuICogICB9XVxuICogfSlcbiAqIC8vICMjIyBDcm9zcy1hY2NvdW50IGFsdGVybmF0aXZlIG5hbWUgdmFsaWRhdGlvblxuICogLy8gZXhhbXBsZS5jb20gaXMgdmFsaWRhdGVkIG9uIHNhbWUgYWNjb3VudCBhZ2FpbnN0IG1hbmFnZWQgaG9zdGVkIHpvbmVcbiAqIC8vIGFuZCBzZWNvbmRhcnkuY29tIGlzIHZhbGlkYXRlZCBhZ2FpbnN0IGV4dGVybmFsIGhvc3RlZCB6b25lIG9uIG90aGVyIGFjY291bnRcbiAqIGNvbnN0IGhvc3RlZFpvbmVGb3JNYWluOiByb3V0ZTUzLklIb3N0ZWRab25lID0gLi4uXG4gKiBjb25zdCBob3N0ZWRab25lRm9yQWx0ZXJuYXRpdmU6IHJvdXRlNTMuSUhvc3RlZFpvbmUgPVxuICogICByb3V0ZTUzLkhvc3RlZFpvbmUuZnJvbUhvc3RlZFpvbmVBdHRyaWJ1dGVzKHRoaXMsICdTZWNvbmRhcnlIb3N0ZWRab25lJywge1xuICogICAgIGhvc3RlZFpvbmVJZDogJ1o1MzJER0RFREZTMTIzNDU2Nzg5JyxcbiAqICAgICB6b25lTmFtZTogJ3NlY29uZGFyeS5jb20nXG4gKiAgIH0pXG4gKiBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSh0aGlzLCAnQ3Jvc3NBY2NvdW50Q2VydGlmaWNhdGUnLCB7XG4gKiAgIGRvbWFpbk5hbWU6ICdleGFtcGxlLmNvbScsXG4gKiAgIGFsdGVybmF0aXZlRG9tYWluTmFtZXM6IFsnc2Vjb25kYXJ5LmNvbSddLFxuICogICB2YWxpZGF0aW9uSG9zdGVkWm9uZXM6IFt7XG4gKiAgICAgaG9zdGVkWm9uZTogaG9zdGVkWm9uZUZvck1haW5cbiAqICAgfSx7XG4gKiAgICAgaG9zdGVkWm9uZTogaG9zdGVkWm9uZUZvckFsdGVybmF0aXZlLFxuICogICAgIHZhbGlkYXRpb25Sb2xlOiBpYW0uUm9sZS5mcm9tUm9sZUFybihcbiAqICAgICAgIHRoaXMsICdTZWNvbmRhcnlWYWxpZGF0aW9uUm9sZScsICdhcm46YXdzOmlhbTo6MTIzNDU2Nzg5OnJvbGUvQ2hhbmdlRG5zUmVjb3Jkc1JvbGUnXG4gKiAgICAgKSxcbiAqICAgICB2YWxpZGF0aW9uRXh0ZXJuYWxJZDogJ2RvbWFpbi1hc3N1bWUnXG4gKiAgIH1dXG4gKiB9KVxuICpcbiAqIEByZXNvdXJjZSBDdXN0b206OkRuc1ZhbGlkYXRlZENlcnRpZmljYXRlXG4gKiBAcmVzb3VyY2UgQVdTOjpDZXJ0aWZpY2F0ZU1hbmFnZXI6OkNlcnRpZmljYXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIGNlcnRpZmljYXRlbWFuYWdlci5JQ2VydGlmaWNhdGUsIGNkay5JVGFnZ2FibGUge1xuICAvKiogVGhlIGNlcnRpZmljYXRlJ3MgQVJOICovXG4gIHB1YmxpYyByZWFkb25seSBjZXJ0aWZpY2F0ZUFybjogc3RyaW5nXG5cbiAgLyoqIFRoZSByZWdpb24gd2hlcmUgdGhlIGNlcnRpZmljYXRlIGlzIGRlcGxveWVkIHRvICovXG4gIHB1YmxpYyByZWFkb25seSBjZXJ0aWZpY2F0ZVJlZ2lvbjogc3RyaW5nXG5cbiAgLyoqIFRoZSB0YWcgbWFuYWdlciB0byBzZXQsIHJlbW92ZSBhbmQgZm9ybWF0IHRhZ3MgZm9yIHRoZSBjZXJ0aWZpY2F0ZSAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhZ3M6IGNkay5UYWdNYW5hZ2VyXG5cbiAgLyoqIFRoZSByZW1vdmFsIHBvbGljeSBmb3IgdGhlIGNlcnRpZmljYXRlICovXG4gIHByaXZhdGUgcmVtb3ZhbFBvbGljeTogY2RrLlJlbW92YWxQb2xpY3lcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBEbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBjb25zdHJ1Y3QgaG9zdGluZyB0aGlzIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgY29uc3RydWN0J3MgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gcHJvcHMgcHJvcGVydGllcyBmb3IgdGhlIGNvbnN0cnVjdFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERuc1ZhbGlkYXRlZENlcnRpZmljYXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICBjb25zdCBkb21haW5OYW1lID0gdGhpcy5ub3JtYWxpemVEb21haW5OYW1lKHByb3BzLmRvbWFpbk5hbWUpXG4gICAgY29uc3QgYWx0ZXJuYXRpdmVEb21haW5OYW1lcyA9IHByb3BzLmFsdGVybmF0aXZlRG9tYWluTmFtZXM/Lm1hcCgoYWx0ZXJuYXRpdmVEb21haW5OYW1lKSA9PlxuICAgICAgdGhpcy5ub3JtYWxpemVEb21haW5OYW1lKGFsdGVybmF0aXZlRG9tYWluTmFtZSlcbiAgICApXG4gICAgY29uc3QgYWxsRG9tYWlucyA9IFtkb21haW5OYW1lLCAuLi4oYWx0ZXJuYXRpdmVEb21haW5OYW1lcyA/PyBbXSldXG5cbiAgICB0aGlzLmNlcnRpZmljYXRlUmVnaW9uID0gcHJvcHMuY2VydGlmaWNhdGVSZWdpb24gPz8gdGhpcy5zdGFjay5yZWdpb25cbiAgICB0aGlzLnRhZ3MgPSBuZXcgY2RrLlRhZ01hbmFnZXIoY2RrLlRhZ1R5cGUuTUFQLCBDRVJUVElGSUNBVEVfUkVTT1VSQ0VfVFlQRSlcbiAgICB0aGlzLnJlbW92YWxQb2xpY3kgPSBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1lcblxuICAgIGNvbnN0IHJlcXVlc3RvckZ1bmN0aW9uID0gbmV3IENlcnRpZmljYXRlUmVxdWVzdG9yRnVuY3Rpb24odGhpcywgJ1JlcXVlc3RvckZ1bmN0aW9uJywge1xuICAgICAgYXJjaGl0ZWN0dXJlOiBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDE0KSxcbiAgICAgIHJvbGU6IHByb3BzLmN1c3RvbVJlc291cmNlUm9sZSxcbiAgICB9KVxuXG4gICAgcmVxdWVzdG9yRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnYWNtOlJlcXVlc3RDZXJ0aWZpY2F0ZScsXG4gICAgICAgICAgJ2FjbTpEZXNjcmliZUNlcnRpZmljYXRlJyxcbiAgICAgICAgICAnYWNtOkRlbGV0ZUNlcnRpZmljYXRlJyxcbiAgICAgICAgICAnYWNtOkFkZFRhZ3NUb0NlcnRpZmljYXRlJyxcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgY29uc3QgZG9tYWluc1RvWm9uZXMgPSBtYXRjaE5hbWVzVG9ab25lcyhcbiAgICAgIHByb3BzLnZhbGlkYXRpb25Ib3N0ZWRab25lcy5tYXAoKHpvbmUpID0+IHpvbmUuaG9zdGVkWm9uZS56b25lTmFtZSksXG4gICAgICBhbGxEb21haW5zLFxuICAgICAgKGRvbWFpbikgPT4gZG9tYWluXG4gICAgKVxuICAgIGNvbnN0IGhvc3RlZFpvbmVzV2l0aFJvbGUgPSBwcm9wcy52YWxpZGF0aW9uSG9zdGVkWm9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLnZhbGlkYXRpb25Sb2xlICE9PSB1bmRlZmluZWQpXG4gICAgY29uc3QgaG9zdGVkWm9uZXNXaXRob3V0Um9sZSA9IHByb3BzLnZhbGlkYXRpb25Ib3N0ZWRab25lcy5maWx0ZXIoKHpvbmUpID0+IHpvbmUudmFsaWRhdGlvblJvbGUgPT09IHVuZGVmaW5lZClcblxuICAgIGhvc3RlZFpvbmVzV2l0aFJvbGUuZm9yRWFjaCgoem9uZSkgPT4ge1xuICAgICAgcmVxdWVzdG9yRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFsnc3RzOkFzc3VtZVJvbGUnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFt6b25lLnZhbGlkYXRpb25Sb2xlIS5yb2xlQXJuXSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9KVxuXG4gICAgaG9zdGVkWm9uZXNXaXRob3V0Um9sZS5mb3JFYWNoKCh6b25lKSA9PiB7XG4gICAgICByZXF1ZXN0b3JGdW5jdGlvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ3JvdXRlNTM6R2V0Q2hhbmdlJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIGNvbnN0IGRvbWFpbk5hbWVzID0gZG9tYWluc1RvWm9uZXNbem9uZS5ob3N0ZWRab25lLnpvbmVOYW1lXVxuICAgICAgaWYgKGRvbWFpbk5hbWVzICYmIGRvbWFpbk5hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVxdWVzdG9yRnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFsncm91dGU1MzpDaGFuZ2VSZXNvdXJjZVJlY29yZFNldHMnXSxcbiAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOnJvdXRlNTM6Ojpob3N0ZWR6b25lLyR7dGhpcy5ub3JtYWxpemVIb3N0ZWRab25lSWQoem9uZS5ob3N0ZWRab25lLmhvc3RlZFpvbmVJZCl9YF0sXG4gICAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICAgICdGb3JBbGxWYWx1ZXM6U3RyaW5nRXF1YWxzJzoge1xuICAgICAgICAgICAgICAgICdyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c1JlY29yZFR5cGVzJzogWydDTkFNRSddLFxuICAgICAgICAgICAgICAgICdyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c0FjdGlvbnMnOiBbJ1VQU0VSVCcsICdERUxFVEUnXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgJ0ZvckFsbFZhbHVlczpTdHJpbmdMaWtlJzoge1xuICAgICAgICAgICAgICAgICdyb3V0ZTUzOkNoYW5nZVJlc291cmNlUmVjb3JkU2V0c05vcm1hbGl6ZWRSZWNvcmROYW1lcyc6IGRvbWFpbk5hbWVzLm1hcCgobmFtZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLndpbGRjYXJkRG9tYWluTmFtZShgRG9tYWluV2lsZGNhcmQke3pvbmUuaG9zdGVkWm9uZS5ub2RlLmlkfSR7aW5kZXh9YCwgbmFtZSlcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCByZXF1ZXN0b3JQcm92aWRlciA9IG5ldyBjdXN0b21fcmVzb3VyY2VzLlByb3ZpZGVyKHRoaXMsICdSZXF1ZXN0b3JQcm92aWRlcicsIHtcbiAgICAgIG9uRXZlbnRIYW5kbGVyOiByZXF1ZXN0b3JGdW5jdGlvbixcbiAgICB9KVxuXG4gICAgY29uc3QgdmFsaWRhdGlvbkhvc3RlZFpvbmVzID0gcHJvcHMudmFsaWRhdGlvbkhvc3RlZFpvbmVzLm1hcDxbc3RyaW5nLCBWYWxpZGF0aW9uSG9zdGVkWm9uZVByb3BlcnRpZXNdPigoem9uZSkgPT4ge1xuICAgICAgY29uc3QgcHJvcGVydGllczogVmFsaWRhdGlvbkhvc3RlZFpvbmVQcm9wZXJ0aWVzID0ge1xuICAgICAgICBEb21haW5OYW1lOiB0aGlzLm5vcm1hbGl6ZURvbWFpbk5hbWUoem9uZS5ob3N0ZWRab25lLnpvbmVOYW1lKSxcbiAgICAgICAgSG9zdGVkWm9uZUlkOiB0aGlzLm5vcm1hbGl6ZUhvc3RlZFpvbmVJZCh6b25lLmhvc3RlZFpvbmUuaG9zdGVkWm9uZUlkKSxcbiAgICAgICAgVmFsaWRhdGlvblJvbGVBcm46IHpvbmUudmFsaWRhdGlvblJvbGU/LnJvbGVBcm4sXG4gICAgICAgIFZhbGlkYXRpb25FeHRlcm5hbElkOiB6b25lLnZhbGlkYXRpb25FeHRlcm5hbElkLFxuICAgICAgfVxuICAgICAgcmV0dXJuIFtwcm9wZXJ0aWVzLkRvbWFpbk5hbWUsIHByb3BlcnRpZXNdXG4gICAgfSlcblxuICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnRpZXMgPSB7XG4gICAgICBEb21haW5OYW1lOiBkb21haW5OYW1lLFxuICAgICAgQWx0ZXJuYXRpdmVEb21haW5OYW1lczogYWx0ZXJuYXRpdmVEb21haW5OYW1lcyxcbiAgICAgIFZhbGlkYXRpb25Ib3N0ZWRab25lczogT2JqZWN0LmZyb21FbnRyaWVzKHZhbGlkYXRpb25Ib3N0ZWRab25lcyksXG4gICAgICBDZXJ0aWZpY2F0ZVJlZ2lvbjogdGhpcy5jZXJ0aWZpY2F0ZVJlZ2lvbixcbiAgICAgIENsZWFudXBWYWxpZGF0aW9uUmVjb3JkczogYm9vbGVhblRvU3RyaW5nKHByb3BzLmNsZWFudXBWYWxpZGF0aW9uUmVjb3JkcyA/PyB0cnVlKSxcbiAgICAgIFRyYW5zcGFyZW5jeUxvZ2dpbmdFbmFibGVkOiBib29sZWFuVG9TdHJpbmcocHJvcHMudHJhbnNwYXJlbmN5TG9nZ2luZ0VuYWJsZWQgPz8gdHJ1ZSksXG4gICAgICBUYWdzOiBjZGsuTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnRhZ3MucmVuZGVyVGFncygpIH0pIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICAgIFJlbW92YWxQb2xpY3k6IGNkay5MYXp5LnN0cmluZyh7IHByb2R1Y2U6ICgpID0+IHRoaXMucmVtb3ZhbFBvbGljeSB9KSxcbiAgICB9XG5cbiAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBjZGsuQ3VzdG9tUmVzb3VyY2UodGhpcywgJ1JlcXVlc3RvclJlc291cmNlJywge1xuICAgICAgc2VydmljZVRva2VuOiByZXF1ZXN0b3JQcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICByZXNvdXJjZVR5cGU6IEROU19WQUxJREFURURfQ0VSVElGSUNBVEVfVFlQRSxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgfSlcblxuICAgIHRoaXMuY2VydGlmaWNhdGVBcm4gPSBjZXJ0aWZpY2F0ZS5nZXRBdHRTdHJpbmcoJ0FybicpXG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbih7XG4gICAgICB2YWxpZGF0ZTogKCkgPT5cbiAgICAgICAgdGhpcy52YWxpZGF0ZURvbWFpbnNUb0hvc3RlZFpvbmVzKFxuICAgICAgICAgIGFsbERvbWFpbnMsXG4gICAgICAgICAgdmFsaWRhdGlvbkhvc3RlZFpvbmVzLm1hcCgoW3pvbmVOYW1lLCBfXSkgPT4gem9uZU5hbWUpXG4gICAgICAgICksXG4gICAgfSlcbiAgfVxuXG4gIG1ldHJpY0RheXNUb0V4cGlyeShwcm9wcz86IGNkay5hd3NfY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zIHwgdW5kZWZpbmVkKTogY2RrLmF3c19jbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7IENlcnRpZmljYXRlQXJuOiB0aGlzLmNlcnRpZmljYXRlQXJuIH0sXG4gICAgICBtZXRyaWNOYW1lOiAnRGF5c1RvRXhwaXJ5JyxcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9DZXJ0aWZpY2F0ZU1hbmFnZXInLFxuICAgICAgcmVnaW9uOiB0aGlzLmNlcnRpZmljYXRlUmVnaW9uLFxuICAgICAgc3RhdGlzdGljOiBjbG91ZHdhdGNoLlN0YXRzLk1JTklNVU0sXG4gICAgfSlcbiAgfVxuXG4gIGFwcGx5UmVtb3ZhbFBvbGljeShwb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5KTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmFsUG9saWN5ID0gcG9saWN5XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZURvbWFpbk5hbWUoZG9tYWluTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoY2RrLlRva2VuLmlzVW5yZXNvbHZlZChkb21haW5OYW1lKSkge1xuICAgICAgcmV0dXJuIGRvbWFpbk5hbWVcbiAgICB9XG4gICAgcmV0dXJuIGNsZWFuRG9tYWluTmFtZShkb21haW5OYW1lKVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVIb3N0ZWRab25lSWQoaG9zdGVkWm9uZUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGhvc3RlZFpvbmVJZCkpIHtcbiAgICAgIHJldHVybiBob3N0ZWRab25lSWRcbiAgICB9XG4gICAgcmV0dXJuIGNsZWFuSG9zdGVkWm9uZUlkKGhvc3RlZFpvbmVJZClcbiAgfVxuXG4gIHByaXZhdGUgd2lsZGNhcmREb21haW5OYW1lKGlkOiBzdHJpbmcsIGRvbWFpbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBjZGsuRm4uc3BsaXQoJy4nLCBkb21haW5OYW1lKVxuICAgIGNvbnN0IGZpcnN0ID0gY2RrLkZuLnNlbGVjdCgwLCBwYXJ0cylcbiAgICBjb25zdCBpc1dpbGRjYXJkID0gbmV3IGNkay5DZm5Db25kaXRpb24odGhpcywgYElzJHtpZH1gLCB7XG4gICAgICBleHByZXNzaW9uOiBjZGsuRm4uY29uZGl0aW9uRXF1YWxzKGZpcnN0LCAnKicpLFxuICAgIH0pXG4gICAgcmV0dXJuIGNkay5Gbi5jb25kaXRpb25JZihpc1dpbGRjYXJkLmxvZ2ljYWxJZCwgZG9tYWluTmFtZSwgYCouJHtkb21haW5OYW1lfWApLnRvU3RyaW5nKClcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVEb21haW5zVG9Ib3N0ZWRab25lcyhkb21haW5OYW1lczogc3RyaW5nW10sIHpvbmVOYW1lczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdXG4gICAgZm9yIChjb25zdCBkb21haW5OYW1lIG9mIGRvbWFpbk5hbWVzKSB7XG4gICAgICBjb25zdCByZXNvbHZhYmxlRG9tYWluTmFtZSA9ICFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGRvbWFpbk5hbWUpXG4gICAgICBjb25zdCByZXNvbHZhYmxlWm9uZU5hbWVzID0gIXpvbmVOYW1lcy5zb21lKCh6b25lTmFtZSkgPT4gY2RrLlRva2VuLmlzVW5yZXNvbHZlZCh6b25lTmFtZSkpXG4gICAgICBpZiAocmVzb2x2YWJsZURvbWFpbk5hbWUgJiYgcmVzb2x2YWJsZVpvbmVOYW1lcyAmJiAhem9uZU5hbWVzLnNvbWUoKHpvbmVOYW1lKSA9PiBkb21haW5OYW1lLmVuZHNXaXRoKHpvbmVOYW1lKSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goYERvbWFpbiAke2RvbWFpbk5hbWV9IGlzIG5vdCBwcm92aWRlZCB3aXRoIGF1dGhvcml0YXRpdmUgaG9zdGVkIHpvbmVgKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXJyb3JzXG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -42,15 +42,15 @@
|
|
|
42
42
|
"@aws-sdk/client-route-53": "^3.0.0",
|
|
43
43
|
"@aws-sdk/client-sts": "^3.0.0",
|
|
44
44
|
"@aws-sdk/types": "^3.0.0",
|
|
45
|
-
"@types/aws-lambda": "^8.10.
|
|
45
|
+
"@types/aws-lambda": "^8.10.143",
|
|
46
46
|
"@types/jest": "^29.5.12",
|
|
47
47
|
"@types/node": "^18",
|
|
48
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
49
|
-
"@typescript-eslint/parser": "^
|
|
48
|
+
"@typescript-eslint/eslint-plugin": "^7",
|
|
49
|
+
"@typescript-eslint/parser": "^7",
|
|
50
50
|
"aws-cdk-lib": "2.83.1",
|
|
51
51
|
"aws-lambda": "^1.0.7",
|
|
52
52
|
"constructs": "10.0.5",
|
|
53
|
-
"esbuild": "^0.
|
|
53
|
+
"esbuild": "^0.23.0",
|
|
54
54
|
"eslint": "^8",
|
|
55
55
|
"eslint-config-prettier": "^8.10.0",
|
|
56
56
|
"eslint-import-resolver-typescript": "^3.6.1",
|
|
@@ -59,16 +59,16 @@
|
|
|
59
59
|
"jest": "^29.7.0",
|
|
60
60
|
"jest-junit": "^15",
|
|
61
61
|
"jsii": "~5.4.0",
|
|
62
|
-
"jsii-diff": "^1.
|
|
62
|
+
"jsii-diff": "^1.102.0",
|
|
63
63
|
"jsii-docgen": "^8.0.56",
|
|
64
|
-
"jsii-pacmak": "^1.
|
|
64
|
+
"jsii-pacmak": "^1.102.0",
|
|
65
65
|
"jsii-rosetta": "~5.4.0",
|
|
66
66
|
"prettier": "^2.8.8",
|
|
67
|
-
"projen": "^0.
|
|
67
|
+
"projen": "^0.85.0",
|
|
68
68
|
"standard-version": "^9",
|
|
69
|
-
"ts-jest": "^29.
|
|
69
|
+
"ts-jest": "^29.2.4",
|
|
70
70
|
"ts-node": "^10.9.2",
|
|
71
|
-
"typescript": "^5.4
|
|
71
|
+
"typescript": "^5.5.4"
|
|
72
72
|
},
|
|
73
73
|
"peerDependencies": {
|
|
74
74
|
"aws-cdk-lib": "^2.83.1",
|
|
@@ -87,11 +87,14 @@
|
|
|
87
87
|
"publishConfig": {
|
|
88
88
|
"access": "public"
|
|
89
89
|
},
|
|
90
|
-
"version": "0.1.
|
|
90
|
+
"version": "0.1.5",
|
|
91
91
|
"jest": {
|
|
92
|
+
"coverageProvider": "v8",
|
|
92
93
|
"testMatch": [
|
|
93
|
-
"<rootDir
|
|
94
|
-
"<rootDir>/@(
|
|
94
|
+
"<rootDir>/@(src|test)/**/*(*.)@(spec|test).ts?(x)",
|
|
95
|
+
"<rootDir>/@(src|test)/**/__tests__/**/*.ts?(x)",
|
|
96
|
+
"<rootDir>/@(projenrc)/**/*(*.)@(spec|test).ts?(x)",
|
|
97
|
+
"<rootDir>/@(projenrc)/**/__tests__/**/*.ts?(x)"
|
|
95
98
|
],
|
|
96
99
|
"clearMocks": true,
|
|
97
100
|
"collectCoverage": true,
|