cdk-nextjs 0.7.7 → 0.7.9
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 +2 -2
- package/docs/adapter-runtime.md +1 -1
- package/docs/harness-coverage.md +153 -73
- package/lib/adapter/adapter.mjs +12 -3
- package/lib/adapter/aws-cache-store.d.ts +7 -0
- package/lib/adapter/aws-cache-store.js +12 -1
- package/lib/adapter/aws-cache-store.test.js +32 -1
- package/lib/adapter/cache-handler.d.ts +5 -3
- package/lib/adapter/cache-handler.js +16 -10
- package/lib/adapter/cache-handler.mjs +103 -26
- package/lib/adapter/cache-handler.test.js +44 -1
- package/lib/adapter/cache-utils.d.ts +22 -0
- package/lib/adapter/cache-utils.js +44 -1
- package/lib/adapter/function-groups.js +17 -4
- package/lib/adapter/function-groups.test.js +33 -1
- package/lib/adapter/memory-cache-handler.d.ts +5 -1
- package/lib/adapter/memory-cache-handler.js +6 -2
- package/lib/adapter/s3-cache-handler.d.ts +12 -1
- package/lib/adapter/s3-cache-handler.js +30 -8
- package/lib/adapter/s3-cache-handler.test.js +84 -2
- package/lib/adapter/use-cache-common.d.ts +13 -0
- package/lib/adapter/use-cache-common.js +22 -6
- package/lib/adapter/use-cache-common.test.js +37 -1
- package/lib/adapter/use-cache-default-handler.mjs +33 -10
- package/lib/adapter/use-cache-remote-handler.mjs +33 -12
- package/lib/nextjs-api.js +1 -1
- package/lib/nextjs-build/nextjs-build.js +1 -1
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-distribution.js +1 -1
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.js +1 -1
- package/lib/root-constructs/nextjs-base-construct.js +1 -1
- package/lib/root-constructs/nextjs-global-containers.js +1 -1
- package/lib/root-constructs/nextjs-global-functions.js +1 -1
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +1 -1
- package/lib/runtime/core.js +3 -1
- package/lib/runtime/image-utils.d.ts +8 -9
- package/lib/runtime/image-utils.js +16 -1
- package/lib/runtime/image-utils.test.js +13 -1
- package/lib/runtime/image.js +9 -3
- package/lib/runtime/lambda.mjs +50 -15
- package/lib/runtime/server.mjs +50 -15
- package/lib/runtime/tag-manifest.d.ts +25 -0
- package/lib/runtime/tag-manifest.js +37 -2
- package/lib/runtime/tag-manifest.test.js +27 -1
- package/package.json +3 -3
- package/scripts/e2e-deploy.sh +7 -2
- package/scripts/e2e-harness/README.md +72 -35
- package/scripts/e2e-harness/screen.mjs +148 -7
- package/scripts/playwright-install-deps.sh +40 -0
|
@@ -171,6 +171,44 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
171
171
|
expect(result).toEqual(cacheValue);
|
|
172
172
|
expect(mockS3Send).toHaveBeenCalledWith(expect.any(client_s3_1.GetObjectCommand));
|
|
173
173
|
});
|
|
174
|
+
it("hands back the lifetime the entry was stored with", async () => {
|
|
175
|
+
// next 16.4 ages an entry by this over its own per-process lifetimes, so
|
|
176
|
+
// an instance that never rendered the page still revalidates it on time.
|
|
177
|
+
const stored = (cacheControl) => mockS3Send.mockResolvedValueOnce({
|
|
178
|
+
Body: {
|
|
179
|
+
transformToString: jest.fn().mockResolvedValue(JSON.stringify({
|
|
180
|
+
lastModified: 1,
|
|
181
|
+
value: { kind: "APP_PAGE" /* CachedRouteKind.APP_PAGE */, html: "<p/>" },
|
|
182
|
+
cacheControl,
|
|
183
|
+
})),
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
const get = () => handler.get("/isr/1", {
|
|
187
|
+
kind: "APP_PAGE" /* IncrementalCacheKind.APP_PAGE */,
|
|
188
|
+
isFallback: false,
|
|
189
|
+
});
|
|
190
|
+
stored({ revalidate: 60, expire: 300 });
|
|
191
|
+
expect((await get())?.cacheControl).toEqual({
|
|
192
|
+
revalidate: 60,
|
|
193
|
+
expire: 300,
|
|
194
|
+
});
|
|
195
|
+
stored({ revalidate: false });
|
|
196
|
+
expect((await get())?.cacheControl).toEqual({
|
|
197
|
+
revalidate: false,
|
|
198
|
+
expire: undefined,
|
|
199
|
+
});
|
|
200
|
+
// An entry stored before this, or a malformed one, leaves Next.js on the
|
|
201
|
+
// lifetime it knows.
|
|
202
|
+
for (const malformed of [
|
|
203
|
+
undefined,
|
|
204
|
+
{ revalidate: 0 },
|
|
205
|
+
{ expire: 5 },
|
|
206
|
+
"60",
|
|
207
|
+
]) {
|
|
208
|
+
stored(malformed);
|
|
209
|
+
expect((await get())?.cacheControl).toBeUndefined();
|
|
210
|
+
}
|
|
211
|
+
});
|
|
174
212
|
it("should return null when S3 object not found", async () => {
|
|
175
213
|
mockS3Send.mockResolvedValueOnce({
|
|
176
214
|
Body: null,
|
|
@@ -459,7 +497,10 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
459
497
|
// `s-maxage`: CloudFront caches it again. Only the regeneration's `set`
|
|
460
498
|
// knows when the fresh entry exists to be fetched instead.
|
|
461
499
|
let cdnHandler;
|
|
462
|
-
|
|
500
|
+
// A fresh render: a new object, not the stale one `get` handed out.
|
|
501
|
+
const regenerated = {
|
|
502
|
+
...stored.value,
|
|
503
|
+
};
|
|
463
504
|
const invalidatedPaths = () => client_cloudfront_1.CreateInvalidationCommand.mock.calls.map(([input]) => input.InvalidationBatch.Paths.Items);
|
|
464
505
|
beforeEach(() => {
|
|
465
506
|
process.env.CDK_NEXTJS_DISTRIBUTION_ID_PARAM_NAME = "test-param-name";
|
|
@@ -507,6 +548,24 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
507
548
|
});
|
|
508
549
|
expect(invalidatedPaths()).toEqual([]);
|
|
509
550
|
});
|
|
551
|
+
it("keeps waiting when a failed re-render writes the stale value back", async () => {
|
|
552
|
+
// next 16.4's `retainPreviousCacheEntry`: the object `get` returned,
|
|
553
|
+
// stored again with a 3-30 s lifetime. A second read in between
|
|
554
|
+
// parses its own copy; the write-back still carries the first.
|
|
555
|
+
const served = await cdnHandler.get("posts", getCtx);
|
|
556
|
+
await cdnHandler.get("posts", getCtx);
|
|
557
|
+
await cdnHandler.set("posts", served.value, {
|
|
558
|
+
cacheControl: { revalidate: 3, expire: undefined },
|
|
559
|
+
isRoutePPREnabled: false,
|
|
560
|
+
isFallback: false,
|
|
561
|
+
});
|
|
562
|
+
expect(invalidatedPaths()).toEqual([]);
|
|
563
|
+
await cdnHandler.set("posts", regenerated, {
|
|
564
|
+
isRoutePPREnabled: false,
|
|
565
|
+
isFallback: false,
|
|
566
|
+
});
|
|
567
|
+
expect(invalidatedPaths()).toEqual([["/posts*"]]);
|
|
568
|
+
});
|
|
510
569
|
it("forgets a stale page that is deleted instead of regenerated", async () => {
|
|
511
570
|
await cdnHandler.get("posts", getCtx);
|
|
512
571
|
await cdnHandler.set("posts", null, {
|
|
@@ -649,6 +708,29 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
649
708
|
expect(mockS3Send).toHaveBeenCalledWith(expect.any(client_s3_1.PutObjectCommand));
|
|
650
709
|
expect(mockDynamoSend).toHaveBeenCalledWith(expect.any(client_dynamodb_1.UpdateItemCommand));
|
|
651
710
|
});
|
|
711
|
+
it("stores a response entry's lifetime, and none for a fetch entry", async () => {
|
|
712
|
+
const page = {
|
|
713
|
+
kind: "APP_PAGE" /* CachedRouteKind.APP_PAGE */,
|
|
714
|
+
html: "<p/>",
|
|
715
|
+
rscData: undefined,
|
|
716
|
+
headers: undefined,
|
|
717
|
+
postponed: undefined,
|
|
718
|
+
segmentData: undefined,
|
|
719
|
+
status: undefined,
|
|
720
|
+
};
|
|
721
|
+
mockS3Send.mockResolvedValue({});
|
|
722
|
+
mockDynamoSend.mockResolvedValue({});
|
|
723
|
+
const storedBodies = () => client_s3_1.PutObjectCommand.mock.calls.map(([input]) => JSON.parse(input.Body));
|
|
724
|
+
await handler.set("/isr/1", page, {
|
|
725
|
+
cacheControl: { revalidate: 60, expire: 300 },
|
|
726
|
+
isRoutePPREnabled: false,
|
|
727
|
+
isFallback: false,
|
|
728
|
+
});
|
|
729
|
+
await handler.set("fetch-key", page, createSetContext([]));
|
|
730
|
+
const [response, fetch] = storedBodies().slice(-2);
|
|
731
|
+
expect(response.cacheControl).toEqual({ revalidate: 60, expire: 300 });
|
|
732
|
+
expect(fetch).not.toHaveProperty("cacheControl");
|
|
733
|
+
});
|
|
652
734
|
it("should not store when S3 bucket is not configured", async () => {
|
|
653
735
|
delete process.env.CDK_NEXTJS_CACHE_BUCKET_NAME;
|
|
654
736
|
const handlerWithoutBucket = new s3_cache_handler_1.S3CacheHandler({
|
|
@@ -1598,4 +1680,4 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
1598
1680
|
});
|
|
1599
1681
|
});
|
|
1600
1682
|
});
|
|
1601
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtY2FjaGUtaGFuZGxlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvczMtY2FjaGUtaGFuZGxlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELHFDQUE2RDtBQUM3RCxxQ0FBaUM7QUFDakMseUNBQWlDO0FBQ2pDLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsZ0VBQWdFO0FBQ2hFLE1BQU0sZUFBZSxHQUE0QixFQUFFLENBQUM7QUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO0lBQ3BDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO0NBQ2xELENBQUMsQ0FBQyxDQUFDO0FBQ0osZUFBZTtBQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUVqQyxrRUFHb0M7QUFDcEMsOERBT2tDO0FBQ2xDLGtEQUs0QjtBQUM1QixvREFBZ0Q7QUFPaEQseURBQW9EO0FBQ3BELHlEQUF1RDtBQUN2RCxrREFBNEQ7QUFFNUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxF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QixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLFFBQVE7Z0JBQ1IseUNBQXlDO2dCQUN6QyxXQUFXO2FBQ1osQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzlDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7IG1rZHRlbXBTeW5jLCBybVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG4vLyBXaGF0IGByZXF1aXJlLmNhY2hlYCBob2xkcyBpbiBhIHJ1bm5pbmcgc2VydmVyLiBKZXN0J3MgYGNyZWF0ZVJlcXVpcmVgIGhhbmRzXG4vLyBvdXQgYSBjYWNoZSBvZiBpdHMgb3duIHRoYXQgbm90aGluZyBpcyBldmVyIGxvYWRlZCBpbnRvLCBzbyB0aGUgaGFuZGxlcidzXG4vLyBsb29rdXAgb2YgTmV4dC5qcydzIHRhZyBtYW5pZmVzdCByZWFkcyB0aGlzIHN0YW5kLWluIGluc3RlYWQuXG5jb25zdCBtb2NrTW9kdWxlQ2FjaGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5qZXN0Lm1vY2soXCJub2RlOm1vZHVsZVwiLCAoKSA9PiAoe1xuICAuLi5qZXN0LnJlcXVpcmVBY3R1YWwoXCJub2RlOm1vZHVsZVwiKSxcbiAgY3JlYXRlUmVxdWlyZTogKCkgPT4gKHsgY2FjaGU6IG1vY2tNb2R1bGVDYWNoZSB9KSxcbn0pKTtcbi8vIE1vY2sgQVdTIFNES1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LXMzXCIpO1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCIpO1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LWNsb3VkZnJvbnRcIik7XG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtc3NtXCIpO1xuXG5pbXBvcnQge1xuICBDbG91ZEZyb250Q2xpZW50LFxuICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7XG4gIEJhdGNoR2V0SXRlbUNvbW1hbmQsXG4gIERlbGV0ZUl0ZW1Db21tYW5kLFxuICBEeW5hbW9EQkNsaWVudCxcbiAgUHV0SXRlbUNvbW1hbmQsXG4gIFF1ZXJ5Q29tbWFuZCxcbiAgVXBkYXRlSXRlbUNvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcbmltcG9ydCB7XG4gIFMzQ2xpZW50LFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBEZWxldGVPYmplY3RDb21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBTU01DbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNzbVwiO1xuaW1wb3J0IHsgQ2FjaGVIYW5kbGVyQ29udGV4dCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi9pbmNyZW1lbnRhbC1jYWNoZVwiO1xuaW1wb3J0IHtcbiAgSW5jcmVtZW50YWxDYWNoZVZhbHVlLFxuICBDYWNoZWRSb3V0ZUtpbmQsXG4gIEluY3JlbWVudGFsQ2FjaGVLaW5kLFxufSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yZXNwb25zZS1jYWNoZVwiO1xuaW1wb3J0IHsgUzNDYWNoZUhhbmRsZXIgfSBmcm9tIFwiLi9zMy1jYWNoZS1oYW5kbGVyXCI7XG5pbXBvcnQgeyBzaGFyZWRUYWdNYW5pZmVzdCB9IGZyb20gXCIuL3VzZS1jYWNoZS1jb21tb25cIjtcbmltcG9ydCB7IFJFVkFMSURBVEVEX1BBR0VfSE9PSyB9IGZyb20gXCIuLi9ydW50aW1lL21hbmlmZXN0XCI7XG5cbmNvbnN0IG1vY2tTM1NlbmQgPSBqZXN0LmZuKCk7XG5jb25zdCBtb2NrRHluYW1vU2VuZCA9IGplc3QuZm4oKTtcbmNvbnN0IG1vY2tDbG91ZEZyb250U2VuZCA9IGplc3QuZm4oKTtcbmNvbnN0IG1vY2tTc21TZW5kID0gamVzdC5mbigpO1xuXG4oUzNDbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgc2VuZDogbW9ja1MzU2VuZCxcbn0pKTtcblxuKER5bmFtb0RCQ2xpZW50IGFzIGplc3QuTW9jaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gIHNlbmQ6IG1vY2tEeW5hbW9TZW5kLFxufSkpO1xuXG4oQ2xvdWRGcm9udENsaWVudCBhcyBqZXN0Lk1vY2spLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICBzZW5kOiBtb2NrQ2xvdWRGcm9udFNlbmQsXG59KSk7XG5cbihTU01DbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgc2VuZDogbW9ja1NzbVNlbmQsXG59KSk7XG5cbmRlc2NyaWJlKFwiUzNEeW5hbW9DYWNoZUhhbmRsZXJcIiwgKCkgPT4ge1xuICBsZXQgaGFuZGxlcjogUzNDYWNoZUhhbmRsZXI7XG4gIGxldCBtb2NrQ29udGV4dDogQ2FjaGVIYW5kbGVyQ29udGV4dDtcbiAgbGV0IGRpc3REaXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogU3RhZ2UgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCBmb3IgYW4gYXBwIHdpdGggYGJhc2VQYXRoOiBcIi9iYXNlXCJgLiAqL1xuICBjb25zdCB1c2VCYXNlUGF0aCA9ICgpID0+IHtcbiAgICBkaXN0RGlyID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJzMy1jYWNoZS1oYW5kbGVyLVwiKSk7XG4gICAgd3JpdGVGaWxlU3luYyhcbiAgICAgIGpvaW4oZGlzdERpciwgXCJyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgY29uZmlnOiB7IGJhc2VQYXRoOiBcIi9iYXNlXCIgfSB9KSxcbiAgICApO1xuICAgIG1vY2tDb250ZXh0LnNlcnZlckRpc3REaXIgPSBqb2luKGRpc3REaXIsIFwic2VydmVyXCIpO1xuICB9O1xuXG4gIC8vIEhlbHBlciB0byBjcmVhdGUgc2V0IGNvbnRleHQgd2l0aCB0YWdzXG4gIGNvbnN0IGNyZWF0ZVNldENvbnRleHQgPSAodGFnczogc3RyaW5nW10pID0+ICh7XG4gICAgZmV0Y2hDYWNoZTogdHJ1ZSBhcyBjb25zdCxcbiAgICB0YWdzLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIGlucHV0IGEgbW9ja2VkIGNvbW1hbmQgd2FzIGNvbnN0cnVjdGVkIHdpdGguIFRoZSBTREsncyBjb21tYW5kIGNsYXNzZXNcbiAgICogYXJlIGF1dG9tb2NrZWQsIHNvIGFuIGluc3RhbmNlIGNhcnJpZXMgbm90aGluZyBvZiBpdHMgb3duLlxuICAgKi9cbiAgY29uc3QgY29tbWFuZElucHV0ID0gKGNvbW1hbmQ6IHVua25vd24sIHR5cGU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBtb2NrID0gdHlwZSBhcyBqZXN0Lk1vY2s7XG4gICAgcmV0dXJuIG1vY2subW9jay5jYWxsc1ttb2NrLm1vY2suaW5zdGFuY2VzLmluZGV4T2YoY29tbWFuZCldWzBdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBbnN3ZXIgRHluYW1vREIgYnkgY29tbWFuZCB0eXBlIHJhdGhlciB0aGFuIGJ5IGNhbGwgb3JkZXI6IGByZXZhbGlkYXRlVGFnYFxuICAgKiB3cml0ZXMgaXRzIHRhZyBtYXJrZXIgYmVmb3JlIHF1ZXJ5aW5nIHRoZSB0YWcncyBtYXBwaW5nIHJvd3MsIGFuZCB3aGljaCBvZlxuICAgKiB0aG9zZSBjb21lcyBmaXJzdCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIGBnZXRgIGlzIHRoZSBtYXJrZXIgcm93IGV2ZXJ5XG4gICAqIHJlcXVlc3RlZCB0YWcgaGFzLCBhcyBhIGBHZXRJdGVtYCB3b3VsZCBoYXZlIHJldHVybmVkIGl0LlxuICAgKi9cbiAgY29uc3QgZHluYW1vUmVzcG9uc2VzID0gKHJlc3BvbnNlczoge1xuICAgIHF1ZXJ5PzogdW5rbm93bjtcbiAgICBnZXQ/OiB7IEl0ZW0/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuICB9KSA9PiB7XG4gICAgbW9ja0R5bmFtb1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlcy5xdWVyeSA/PyB7fSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIEJhdGNoR2V0SXRlbUNvbW1hbmQpIHtcbiAgICAgICAgY29uc3QgeyBSZXF1ZXN0SXRlbXMgfSA9IGNvbW1hbmRJbnB1dChjb21tYW5kLCBCYXRjaEdldEl0ZW1Db21tYW5kKTtcbiAgICAgICAgY29uc3QgW1t0YWJsZSwgeyBLZXlzIH1dXSA9IE9iamVjdC5lbnRyaWVzKFJlcXVlc3RJdGVtcykgYXMgW1xuICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICB7IEtleXM6IHsgc2s6IHVua25vd24gfVtdIH0sXG4gICAgICAgIF1bXTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHJlc3BvbnNlcy5nZXQ/Lkl0ZW07XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgIFJlc3BvbnNlczoge1xuICAgICAgICAgICAgW3RhYmxlXTogaXRlbSA/IEtleXMubWFwKCh7IHNrIH0pID0+ICh7IC4uLml0ZW0sIHNrIH0pKSA6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIERyb3AgdGhlIHByb2Nlc3MncyB0YWcgbWFuaWZlc3QsIHNvIHRoZSBuZXh0IGhhbmRsZXIgc3RhcnRzIHdpdGggb25lIG9mXG4gICAqIGl0cyBvd24sIGFzIGEgbmV3IGluc3RhbmNlIGRvZXMuXG4gICAqL1xuICBjb25zdCByZXNldFRhZ01hbmlmZXN0ID0gKCkgPT4ge1xuICAgIGRlbGV0ZSAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilbXG4gICAgICBTeW1ib2wuZm9yKFwiY2RrLW5leHRqcy51c2UtY2FjaGUudGFnLW1hbmlmZXN0XCIpXG4gICAgXTtcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBtb2NrQ29udGV4dCA9IHsgZGV2OiBmYWxzZSB9IGFzIENhY2hlSGFuZGxlckNvbnRleHQ7XG4gICAgcmVzZXRUYWdNYW5pZmVzdCgpO1xuXG4gICAgLy8gU2V0IHVwIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUUgPSBcInRlc3QtYnVja2V0XCI7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRSA9IFwidGVzdC10YWJsZVwiO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQlVJTERfSUQgPSBcInRlc3QtYnVpbGQtaWRcIjtcbiAgICBwcm9jZXNzLmVudi5BV1NfUkVHSU9OID0gXCJ1cy1lYXN0LTFcIjtcblxuICAgIC8vIFN1cHByZXNzIGV4cGVjdGVkIHdhcm5pbmdzIGdsb2JhbGx5ICh0ZXN0cyBkZWxpYmVyYXRlbHkgdHJpZ2dlciB3YXJuaW5ncylcbiAgICBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIGhhbmRsZXIgPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCBtb2Nrc1xuICAgIG1vY2tTM1NlbmQubW9ja1Jlc2V0KCk7XG4gICAgLy8gQW4gZW1wdHkgYnVja2V0OiBubyBvYmplY3QsIHN1Y2ggYXMgbm8gYnVpbGQgdGFnIG1hbmlmZXN0LlxuICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNldCgpO1xuICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzZXQoKTtcbiAgICBtb2NrU3NtU2VuZC5tb2NrUmVzZXQoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAvLyBDbGVhbiB1cCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRTtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRTtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19CVUlMRF9JRDtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTjtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRTtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSUQ7XG4gICAgaWYgKGRpc3REaXIpIHtcbiAgICAgIHJtU3luYyhkaXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICBkaXN0RGlyID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgY29uc29sZS53YXJuXG4gICAgamVzdC5yZXN0b3JlQWxsTW9ja3MoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJnZXRcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHJldHVybiBudWxsIHdoZW4gUzMgYnVja2V0IGlzIG5vdCBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FO1xuXG4gICAgICBjb25zdCBoYW5kbGVyV2l0aG91dEJ1Y2tldCA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXJXaXRob3V0QnVja2V0LmdldChcInRlc3Qta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0cmlldmUgYW5kIHBhcnNlIGNhY2hlIHZhbHVlIGZyb20gUzNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnRlc3Q8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjYWNoZVZhbHVlID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHZhbHVlOiB0ZXN0RGF0YSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKSxcbiAgICAgICAgfSxcbiAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwidGVzdC1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChjYWNoZVZhbHVlKTtcbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KEdldE9iamVjdENvbW1hbmQpKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiBudWxsIHdoZW4gUzMgb2JqZWN0IG5vdCBmb3VuZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7XG4gICAgICAgIEJvZHk6IG51bGwsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5nZXQoXCJtaXNzaW5nLWtleVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgYSBzZWVkZWQgcHJlcmVuZGVyIG9ubHkgd2hlbiBpdHMgdGFnIG1hcmtlciBpcyBuZXdlclwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBIGJ1aWxkLXRpbWUgcHJlcmVuZGVyIGlzIHdyaXR0ZW4gYXMgYSBmaWxlIGJ5IHRoZSBhZGFwdGVyJ3NcbiAgICAgIC8vIGBvbkJ1aWxkQ29tcGxldGVgLCBuZXZlciB0aHJvdWdoIGBzZXRgLCBzbyBpdCBoYXMgbm8gYHRhZ3NgIGFycmF5IGFuZCBub1xuICAgICAgLy8gRHluYW1vREIgbWFwcGluZyByb3dzIC0gaXRzIHRhZ3MgbGl2ZSBpbiB0aGUgcmVuZGVyJ3NcbiAgICAgIC8vIGB4LW5leHQtY2FjaGUtdGFnc2AgaGVhZGVyLiBUd28gYnVncyBtZXQgaGVyZTogdGhvc2UgaGVhZGVyIHRhZ3Mgd2VyZVxuICAgICAgLy8gaWdub3JlZCwgc28gYHJldmFsaWRhdGVUYWdgIGNvdWxkIG5vdCByZWFjaCBhbnkgc3RhdGljIHBhZ2U7IGFuZCB0aGVcbiAgICAgIC8vIG1hcHBpbmcgcm93cyBgc2V0YCB3cml0ZXMgd2VyZSBzdGFtcGVkIGByZXZhbGlkYXRlZEF0ID0gbm93YCwgd2hpY2ggaXNcbiAgICAgIC8vICphZnRlciogdGhlIGVudHJ5J3Mgb3duIGBsYXN0TW9kaWZpZWRgLCBzbyBhIHRhZ2dlZCBlbnRyeSBsb29rZWRcbiAgICAgIC8vIHJldmFsaWRhdGVkIHRoZSBtb21lbnQgaXQgd2FzIHN0b3JlZCBhbmQgZXZlcnkgcmVxdWVzdCByZS1yZW5kZXJlZC5cbiAgICAgIC8vIE1lYXN1cmVkIGFnYWluc3QgbmV4dC5qcydzIGB0ZXN0L2UyZS9hcHAtZGlyL3Jlc3VtZS1kYXRhLWNhY2hlYC5cbiAgICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBzZWVkZWQgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgICAgaHRtbDogXCI8aHRtbD5zZWVkZWQ8L2h0bWw+XCIsXG4gICAgICAgICAgaGVhZGVyczogeyBcIngtbmV4dC1jYWNoZS10YWdzXCI6IFwiX05fVF8vLF9OX1RfL3BhZ2UsdGVzdFwiIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgczNCb2R5ID0gKCkgPT4gKHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KHNlZWRlZCkpLFxuICAgICAgICB9LFxuICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmQgPyBzM0JvZHkoKSA6IHt9KSxcbiAgICAgICk7XG4gICAgICBjb25zdCBnZXRDdHggPSB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0gYXMgY29uc3Q7XG4gICAgICAvLyBFYWNoIHN0ZXAgYmVsb3cgY2hhbmdlcyB0aGUgbWFya2VycyBEeW5hbW9EQiBob2xkczsgYSBuZXcgaW5zdGFuY2VcbiAgICAgIC8vIHJlYWRzIHRoZW0gYWZyZXNoLlxuICAgICAgY29uc3QgZnJlc2hIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICByZXNldFRhZ01hbmlmZXN0KCk7XG4gICAgICAgIHJldHVybiBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICAgIH07XG5cbiAgICAgIC8vIE5vIG1hcmtlciBhdCBhbGw6IHRoZSB0YWcgd2FzIG5ldmVyIHJldmFsaWRhdGVkLlxuICAgICAgZHluYW1vUmVzcG9uc2VzKHt9KTtcbiAgICAgIGV4cGVjdChhd2FpdCBmcmVzaEhhbmRsZXIoKS5nZXQoXCJpbmRleFwiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEEgbWFya2VyIG9sZGVyIHRoYW4gdGhlIGVudHJ5IG1lYW5zIHRoZSBlbnRyeSBhbHJlYWR5IHJlZmxlY3RzIGl0LlxuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgZ2V0OiB7IEl0ZW06IHsgcmV2YWxpZGF0ZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkIC0gMTAwMCkgfSB9IH0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChhd2FpdCBmcmVzaEhhbmRsZXIoKS5nZXQoXCJpbmRleFwiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpLFxuICAgICAgKTtcblxuICAgICAgLy8gQSBuZXdlciBtYXJrZXI6IHRoZSBlbnRyeSBjb21lcyBiYWNrIG1hcmtlZCBleHBpcmVkLCBhbmQgc3RheXMgaW4gUzMuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBnZXQ6IHsgSXRlbTogeyByZXZhbGlkYXRlZEF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyAxMDAwKSB9IH0gfSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGF3YWl0IGZyZXNoSGFuZGxlcigpLmdldChcImluZGV4XCIsIGdldEN0eCkpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IC0xLFxuICAgICAgICB2YWx1ZTogc2VlZGVkLnZhbHVlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVwb3J0cyBhIHJldmFsaWRhdGVkIHJlc3BvbnNlIGVudHJ5IGFzIGV4cGlyZWQgcmF0aGVyIHRoYW4gYXMgYSBtaXNzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGBsYXN0TW9kaWZpZWQ6IC0xYCBpcyBob3cgYSBjYWNoZSBoYW5kbGVyIHNheXMgXCJleHBpcmVkLCByZS1yZW5kZXJcbiAgICAgIC8vIGJlZm9yZSBhbnN3ZXJpbmdcIjogYEluY3JlbWVudGFsQ2FjaGUuZ2V0YCB0dXJucyBpdCBpbnRvIGBpc1N0YWxlOiAtMWAsXG4gICAgICAvLyB3aGljaCBgYXBwLXBhZ2UtcnVudGltZWAgcmVhZHMgYXMgYW4gb24tZGVtYW5kIHJldmFsaWRhdGlvbiBhbmQgYW5zd2Vyc1xuICAgICAgLy8gd2l0aCBhIGJsb2NraW5nIHJlbmRlciBvZiB0aGlzIHJvdXRlLCB0aGVuIHN0b3JlcyBpdC4gUmV0dXJuaW5nIGBudWxsYFxuICAgICAgLy8gaXMgbm90IGVxdWl2YWxlbnQuIEEgbWlzcyBvbiBhIFBQUiByb3V0ZSB3aG9zZSBgcHJlcmVuZGVyLW1hbmlmZXN0Lmpzb25gXG4gICAgICAvLyBlbnRyeSBoYXMgYSBgZmFsbGJhY2tgIChgY29tcHV0ZTogXCJyZXN1bWluZ1wiYCkgaXMgYW5zd2VyZWQgZnJvbSB0aGVcbiAgICAgIC8vIHJvdXRlJ3MgZmFsbGJhY2sgc2hlbGwgLSBgY2FjaGUtY29udHJvbDogcHJpdmF0ZSwgbm8tc3RvcmVgLCBub1xuICAgICAgLy8gYHgtbmV4dGpzLWNhY2hlYCAtIGFuZCB3aXRob3V0IGBwYXJ0aWFsUHJlZmV0Y2hpbmdgIG5vdGhpbmcgZXZlclxuICAgICAgLy8gdXBncmFkZXMgdGhhdCBiYWNrIGludG8gYSBjb25jcmV0ZSBlbnRyeS4gU28gdGhlIGZpcnN0IGByZXZhbGlkYXRlVGFnYFxuICAgICAgLy8gdG8gcmVhY2ggYSBwYWdlIGxlZnQgaXQgdW5jYWNoZWFibGUgYW5kIGR5bmFtaWNhbGx5IHJlc3VtZWQgcGVyIHJlcXVlc3RcbiAgICAgIC8vIGZvciB0aGUgcmVzdCBvZiB0aGUgZGVwbG95bWVudCdzIGxpZmUsIHdoaWNoIGlzIHdoYXQgdGhlIGlzciBlMmUnc1xuICAgICAgLy8gbWlzc2luZyBgeC1uZXh0anMtY2FjaGVgIGhlYWRlciB3YXMuXG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3Qgc3RvcmVkID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQsXG4gICAgICAgIHRhZ3M6IFtcImNvbGxlY3Rpb25cIl0sXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICAgIGh0bWw6IFwiPGh0bWw+aXNyPC9odG1sPlwiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcImNvbGxlY3Rpb25cIiB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAgICAgICAgIC5mbigpXG4gICAgICAgICAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShzdG9yZWQpKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBnZXQ6IHsgSXRlbTogeyByZXZhbGlkYXRlZEF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyAxMDAwKSB9IH0gfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcImlzci8xXCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBsYXN0TW9kaWZpZWQ6IC0xLCB2YWx1ZTogc3RvcmVkLnZhbHVlIH0pO1xuICAgICAgLy8gVGhlIGJvZHkgaXMgc3RpbGwgdGhlcmUgZm9yIHRoZSByZW5kZXIgdGhhdCBmYWlscywgYW5kIGBzZXRgIG92ZXJ3cml0ZXNcbiAgICAgIC8vIGl0IHdpdGggYSBgbGFzdE1vZGlmaWVkYCBwYXN0IHRoZSBtYXJrZXIuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVwb3J0cyBhIHJldmFsaWRhdGVkIGZldGNoIGVudHJ5IGFzIGEgbWlzcyBzbyB0aGUgcmVxdWVzdCByZWZldGNoZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhlIG9wcG9zaXRlIG9mIGEgcmVzcG9uc2UgZW50cnk6IHJldXNpbmcgYSByZXZhbGlkYXRlZCBgZmV0Y2hgIGJvZHkgaXNcbiAgICAgIC8vIHNlcnZpbmcgc3RhbGUgZGF0YSwgc28gdGhpcyByZWFkcyBhcyBhIG1pc3MsIGxpa2UgTmV4dC5qcydzIG93blxuICAgICAgLy8gYEZpbGVTeXN0ZW1DYWNoZWAgZG9lcyBmb3IgaXRzIGByZXZhbGlkYXRlZFRhZ3NgLlxuICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHtcbiAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgICB0YWdzOiBbXCJjb2xsZWN0aW9uXCJdLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5GRVRDSCxcbiAgICAgICAgICBkYXRhOiB7IGhlYWRlcnM6IHt9LCBib2R5OiBcInN0YWxlXCIsIHN0YXR1czogMjAwLCB1cmw6IFwiL2FwaVwiIH0sXG4gICAgICAgICAgcmV2YWxpZGF0ZTogMTAsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgQm9keToge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KHN0b3JlZCkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIGdldDogeyBJdGVtOiB7IHJldmFsaWRhdGVkQXQ6IHsgTjogU3RyaW5nKGxhc3RNb2RpZmllZCArIDEwMDApIH0gfSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwiZmV0Y2gta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuRkVUQ0gsXG4gICAgICAgIHJldmFsaWRhdGU6IDEwLFxuICAgICAgICBmZXRjaFVybDogXCJodHRwczovL2V4YW1wbGUudGVzdC9hcGlcIixcbiAgICAgICAgZmV0Y2hJZHg6IDEsXG4gICAgICAgIHRhZ3M6IFtcImNvbGxlY3Rpb25cIl0sXG4gICAgICAgIHNvZnRUYWdzOiBbXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgICAgLy8gTm90IGRlbGV0ZWQ6IHRoZSByZWZldGNoIHRoaXMgcHJvdm9rZXMgb3ZlcndyaXRlcyBpdCB0aHJvdWdoIGBzZXRgLlxuICAgICAgLy8gRGVsZXRpbmcgaXQgaGVyZSByYWNlZCB0aGF0IHdyaXRlLCBzbyBhIGNvbmN1cnJlbnQgcmVxdWVzdCdzIGZyZXNoXG4gICAgICAvLyBlbnRyeSBjb3VsZCBiZSB0aGUgb25lIHJlbW92ZWQuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChEZWxldGVJdGVtQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY2hlY2tzIGEgZmV0Y2ggZW50cnkgYWdhaW5zdCB0aGUgcmVxdWVzdCdzIGltcGxpY2l0IHRhZ3MsIG5vdCBpdHMgb3duXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEFuIHVudGFnZ2VkIGBjYWNoZTogXCJmb3JjZS1jYWNoZVwiYCBmZXRjaCBpcyBzdG9yZWQgd2l0aCBubyB0YWdzIGF0IGFsbCAtXG4gICAgICAvLyB0aGUgaW1wbGljaXQgYF9OX1RfLzxwYXRoPmAgY2hhaW4gcmVhY2hlcyB0aGUgaGFuZGxlciBvbmx5IGFzXG4gICAgICAvLyBgY3R4LnNvZnRUYWdzYCwgd2hpY2ggaXMgdGhlIHNvdXJjZSBOZXh0LmpzJ3Mgb3duIGBGaWxlU3lzdGVtQ2FjaGVgIHJlYWRzXG4gICAgICAvLyBmb3IgYSBgRkVUQ0hgIGdldC4gQ2hlY2tpbmcgdGhlIHN0b3JlZCB0YWdzIGluc3RlYWQgbGVmdCB0aGlzIGVudHJ5IHdpdGhcbiAgICAgIC8vIG5vdGhpbmcgdG8gY2hlY2sgYW5kIG5vIGByZXZhbGlkYXRlUGF0aGAgY291bGQgZXZlciBldmljdCBpdC5cbiAgICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBzdG9yZWQgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgICAgdGFnczogW10sXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkZFVENILFxuICAgICAgICAgIGRhdGE6IHsgaGVhZGVyczoge30sIGJvZHk6IFwic3RhbGVcIiwgc3RhdHVzOiAyMDAsIHVybDogXCIvYXBpXCIgfSxcbiAgICAgICAgICByZXZhbGlkYXRlOiAxMCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogamVzdFxuICAgICAgICAgICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgICAgICAgICAubW9ja1Jlc29sdmVkVmFsdWUoSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgZ2V0OiB7IEl0ZW06IHsgcmV2YWxpZGF0ZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgMTAwMCkgfSB9IH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5nZXQoXCJmZXRjaC1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5GRVRDSCxcbiAgICAgICAgcmV2YWxpZGF0ZTogMTAsXG4gICAgICAgIGZldGNoVXJsOiBcImh0dHBzOi8vbmV4dC1kYXRhLWFwaS1lbmRwb2ludC50ZXN0L2FwaS9yYW5kb21cIixcbiAgICAgICAgZmV0Y2hJZHg6IDEsXG4gICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICBzb2Z0VGFnczogW1wiX05fVF8vbGF5b3V0XCIsIFwiX05fVF8vZHluYW1pY1wiXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgICAgY29uc3QgW3sgUmVxdWVzdEl0ZW1zIH1dID0gKEJhdGNoR2V0SXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spXG4gICAgICAgIC5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KFxuICAgICAgICBSZXF1ZXN0SXRlbXNbXCJ0ZXN0LXRhYmxlXCJdLktleXMubWFwKFxuICAgICAgICAgIChrZXk6IHsgc2s6IHsgUzogc3RyaW5nIH0gfSkgPT4ga2V5LnNrLlMsXG4gICAgICAgICksXG4gICAgICApLnRvRXF1YWwoW1wiX05fVF8vbGF5b3V0XCIsIFwiX05fVF8vZHluYW1pY1wiXSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZShcImEgdGFnIHJldmFsaWRhdGVkIHdpdGggYSBwcm9maWxlXCIsICgpID0+IHtcbiAgICAgIC8vIGByZXZhbGlkYXRlVGFnKFwicG9zdHNcIiwgXCJtYXhcIilgIGlzIHN0YWxlLXdoaWxlLXJldmFsaWRhdGU6IHRoZSBlbnRyeSBpc1xuICAgICAgLy8gc2VydmVkIG9uY2UgbW9yZSB3aGlsZSBhIGJhY2tncm91bmQgcmVuZGVyIHJlcGxhY2VzIGl0LCBhbmQgZXhwaXJlc1xuICAgICAgLy8gb3V0cmlnaHQgb25seSBhZnRlciB0aGUgcHJvZmlsZSdzIGBleHBpcmVgLiBUcmVhdGluZyBpdCBhcyBgdXBkYXRlVGFnYFxuICAgICAgLy8gbWFkZSBldmVyeSBzdWNoIGNhbGwgYSBibG9ja2luZyByZS1yZW5kZXIuXG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBEYXRlLm5vdygpIC0gMTAwMDtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHtcbiAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgICBodG1sOiBcIjxodG1sPnBvc3RzPC9odG1sPlwiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcInBvc3RzXCIgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBnZXRDdHggPSB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0gYXMgY29uc3Q7XG4gICAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKFxuICAgICAgICBcIi9kZXBsb3ltZW50L25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2VydmVyL2xpYi9pbmNyZW1lbnRhbC1jYWNoZVwiLFxuICAgICAgICBcInRhZ3MtbWFuaWZlc3QuZXh0ZXJuYWwuanNcIixcbiAgICAgICk7XG4gICAgICAvLyBUaGUgbW9kdWxlIHRoZSBzZXJ2ZXIgbG9hZHMsIHJlc29sdmVkIGZvciByZWFsLCBzbyBhIE5leHQuanMgdXBncmFkZVxuICAgICAgLy8gdGhhdCBtb3ZlcyBvciByZXNoYXBlcyBpdCBmYWlscyBoZXJlIHJhdGhlciB0aGFuIHNpbGVudGx5IHR1cm5pbmdcbiAgICAgIC8vIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgaW50byBibG9ja2luZyByZW5kZXJzLlxuICAgICAgY29uc3QgcmVhbE1hbmlmZXN0UGF0aCA9XG4gICAgICAgIHJlcXVpcmUucmVzb2x2ZShcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL2luY3JlbWVudGFsLWNhY2hlL3RhZ3MtbWFuaWZlc3QuZXh0ZXJuYWwuanNcIik7XG5cbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShzdG9yZWQpKSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZGVsZXRlIG1vY2tNb2R1bGVDYWNoZVttYW5pZmVzdFBhdGhdO1xuICAgICAgICBkZWxldGUgbW9ja01vZHVsZUNhY2hlW3JlYWxNYW5pZmVzdFBhdGhdO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KFwic2VydmVzIHRoZSBlbnRyeSBhbmQgbWFya3MgdGhlIHRhZyBzdGFsZSBpbiBOZXh0LmpzJ3MgbWFuaWZlc3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0ID0gamVzdC5yZXF1aXJlQWN0dWFsKHJlYWxNYW5pZmVzdFBhdGgpO1xuICAgICAgICBtb2NrTW9kdWxlQ2FjaGVbcmVhbE1hbmlmZXN0UGF0aF0gPSB7IGV4cG9ydHM6IG5leHQgfTtcbiAgICAgICAgY29uc3Qgc3RhbGVBdCA9IGxhc3RNb2RpZmllZCArIDUwMDtcbiAgICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgICBnZXQ6IHtcbiAgICAgICAgICAgIEl0ZW06IHtcbiAgICAgICAgICAgICAgc3RhbGVBdDogeyBOOiBTdHJpbmcoc3RhbGVBdCkgfSxcbiAgICAgICAgICAgICAgZXhwaXJlZEF0OiB7IE46IFN0cmluZyhEYXRlLm5vdygpICsgNjBfMDAwKSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBleHBlY3QoYXdhaXQgaGFuZGxlci5nZXQoXCJwb3N0c1wiLCBnZXRDdHgpKS50b0VxdWFsKHtcbiAgICAgICAgICBsYXN0TW9kaWZpZWQsXG4gICAgICAgICAgdmFsdWU6IHN0b3JlZC52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFdoZXJlIGBJbmNyZW1lbnRhbENhY2hlLmdldGAgcmVhZHMgaXQsIHRvIGFuc3dlciBgaXNTdGFsZTogdHJ1ZWAuXG4gICAgICAgIGV4cGVjdChuZXh0LnRhZ3NNYW5pZmVzdC5nZXQoXCJwb3N0c1wiKSkudG9FcXVhbCh7IHN0YWxlOiBzdGFsZUF0IH0pO1xuICAgICAgICBleHBlY3QobmV4dC5hcmVUYWdzU3RhbGUoW1wicG9zdHNcIl0sIGxhc3RNb2RpZmllZCkpLnRvQmUodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoXCJleHBpcmVzIHRoZSBlbnRyeSB3aGVuIE5leHQuanMncyBtYW5pZmVzdCBjYW5ub3QgYmUgZm91bmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBBIHN0YWxlIG1hcmsgbm90aGluZyByZWFkcyB3b3VsZCBzZXJ2ZSB0aGUgZW50cnkgYXMgZnJlc2g7IGEgYmxvY2tpbmdcbiAgICAgICAgLy8gcmVuZGVyIGlzIHRoZSBzYWZlIHNpZGUgb2YgdGhhdC5cbiAgICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgICBnZXQ6IHsgSXRlbTogeyBzdGFsZUF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyA1MDApIH0gfSB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBleHBlY3QoYXdhaXQgaGFuZGxlci5nZXQoXCJwb3N0c1wiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgICBsYXN0TW9kaWZpZWQ6IC0xLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChcImV4cGlyZXMgdGhlIGVudHJ5IG9uY2UgdGhlIHByb2ZpbGUncyBleHBpcmUgaGFzIHBhc3NlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgICBJdGVtOiB7XG4gICAgICAgICAgICAgIHN0YWxlQXQ6IHsgTjogU3RyaW5nKGxhc3RNb2RpZmllZCArIDEwMCkgfSxcbiAgICAgICAgICAgICAgZXhwaXJlZEF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyA1MDApIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4cGVjdChhd2FpdCBoYW5kbGVyLmdldChcInBvc3RzXCIsIGdldEN0eCkpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICAgIGxhc3RNb2RpZmllZDogLTEsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGRlc2NyaWJlKFwiYmVoaW5kIGEgZGlzdHJpYnV0aW9uXCIsICgpID0+IHtcbiAgICAgICAgLy8gYHJldmFsaWRhdGVUYWdgJ3MgaW52YWxpZGF0aW9uIGdvZXMgb3V0IGJlZm9yZSB0aGUgc3RhbGUgZW50cnkgaXNcbiAgICAgICAgLy8gc2VydmVkLCBhbmQgdGhlIHN0YWxlIHJlc3BvbnNlIGNhcnJpZXMgdGhlIGVudHJ5J3Mgb3JpZ2luYWxcbiAgICAgICAgLy8gYHMtbWF4YWdlYDogQ2xvdWRGcm9udCBjYWNoZXMgaXQgYWdhaW4uIE9ubHkgdGhlIHJlZ2VuZXJhdGlvbidzIGBzZXRgXG4gICAgICAgIC8vIGtub3dzIHdoZW4gdGhlIGZyZXNoIGVudHJ5IGV4aXN0cyB0byBiZSBmZXRjaGVkIGluc3RlYWQuXG4gICAgICAgIGxldCBjZG5IYW5kbGVyOiBTM0NhY2hlSGFuZGxlcjtcbiAgICAgICAgY29uc3QgcmVnZW5lcmF0ZWQgPSBzdG9yZWQudmFsdWUgYXMgdW5rbm93biBhcyBJbmNyZW1lbnRhbENhY2hlVmFsdWU7XG4gICAgICAgIGNvbnN0IGludmFsaWRhdGVkUGF0aHMgPSAoKTogc3RyaW5nW11bXSA9PlxuICAgICAgICAgIChDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzLm1hcChcbiAgICAgICAgICAgIChbaW5wdXRdKSA9PiBpbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcyxcbiAgICAgICAgICApO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgICAgIGNkbkhhbmRsZXIgPSBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICAgICAgICBtb2NrTW9kdWxlQ2FjaGVbbWFuaWZlc3RQYXRoXSA9IHtcbiAgICAgICAgICAgIGV4cG9ydHM6IHsgdGFnc01hbmlmZXN0OiBuZXcgTWFwKCkgfSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgICAgICBnZXQ6IHsgSXRlbTogeyBzdGFsZUF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyA1MDApIH0gfSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgcGFnZSBhZ2FpbiBvbmNlIGl0cyByZWdlbmVyYXRpb24gaXMgc3RvcmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLmdldChcInBvc3RzXCIsIGdldEN0eCk7XG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXSk7XG5cbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLnNldChcInBvc3RzXCIsIHJlZ2VuZXJhdGVkLCB7XG4gICAgICAgICAgICBjYWNoZUNvbnRyb2w6IHsgcmV2YWxpZGF0ZTogZmFsc2UsIGV4cGlyZTogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICB9IGFzIGFueSk7XG5cbiAgICAgICAgICBleHBlY3QoaW52YWxpZGF0ZWRQYXRocygpKS50b0VxdWFsKFtbXCIvcG9zdHMqXCJdXSk7XG5cbiAgICAgICAgICAvLyBPbmNlOiBhIGxhdGVyIHdyaXRlIG9mIHRoZSBzYW1lIHBhZ2UgaXMgYW4gb3JkaW5hcnkgb25lLlxuICAgICAgICAgIGF3YWl0IGNkbkhhbmRsZXIuc2V0KFwicG9zdHNcIiwgcmVnZW5lcmF0ZWQsIHtcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbDogeyByZXZhbGlkYXRlOiBmYWxzZSwgZXhwaXJlOiB1bmRlZmluZWQgfSxcbiAgICAgICAgICAgIGlzUm91dGVQUFJFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgICBleHBlY3QoaW52YWxpZGF0ZWRQYXRocygpKS50b0hhdmVMZW5ndGgoMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwicmVtZW1iZXJzIGEgc3RhbGUgbWVtb3J5IGhpdCBieSB0aGUga2V5IGl0IHdhcyByZWFkIHVuZGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLmlzUmV2YWxpZGF0ZWQoc3RvcmVkLCBnZXRDdHgsIFwicG9zdHNcIik7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5zZXQoXCJwb3N0c1wiLCByZWdlbmVyYXRlZCwge1xuICAgICAgICAgICAgaXNSb3V0ZVBQUkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbW1wiL3Bvc3RzKlwiXV0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImRvZXMgbm90IGludmFsaWRhdGUgYWZ0ZXIgYW4gb3JkaW5hcnkgd3JpdGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGNkbkhhbmRsZXIuc2V0KFwicG9zdHNcIiwgcmVnZW5lcmF0ZWQsIHtcbiAgICAgICAgICAgIGlzUm91dGVQUFJFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgIH0gYXMgYW55KTtcblxuICAgICAgICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKCkpLnRvRXF1YWwoW10pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImZvcmdldHMgYSBzdGFsZSBwYWdlIHRoYXQgaXMgZGVsZXRlZCBpbnN0ZWFkIG9mIHJlZ2VuZXJhdGVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLmdldChcInBvc3RzXCIsIGdldEN0eCk7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5zZXQoXCJwb3N0c1wiLCBudWxsLCB7XG4gICAgICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICB9IGFzIGFueSk7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5zZXQoXCJwb3N0c1wiLCByZWdlbmVyYXRlZCwge1xuICAgICAgICAgICAgaXNSb3V0ZVBQUkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgUzMgZXJyb3JzIGFuZCByZXR1cm4gbnVsbFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJTMyBFcnJvclwiKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwiZXJyb3Ita2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInRhZyBtYXJrZXIgY2FjaGVcIiwgKCkgPT4ge1xuICAgIC8vIEV2ZXJ5IGNhY2hlIGhpdCBjaGVja3MgaXRzIHRhZ3MnIG1hcmtlcnMsIGFuZCBhbGwgb2YgYSBkZXBsb3ltZW50J3NcbiAgICAvLyBtYXJrZXJzIHNoYXJlIG9uZSBwYXJ0aXRpb24ga2V5OiByZWFkIHBlciByZXF1ZXN0LCB0aGV5IGNhcHBlZCBhIHJvdXRlJ3NcbiAgICAvLyBjYWNoZSBoaXRzIGF0IH4xLDkwMCByZXEvcy4gRWFjaCBpbnN0YW5jZSBob2xkcyB0aGVtIGZvciBhIHNlY29uZC5cbiAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBEYXRlLm5vdygpIC0gNjBfMDAwO1xuICAgIGNvbnN0IHN0b3JlZCA9IHtcbiAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD5jYWNoZWQ8L2h0bWw+XCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcIl9OX1RfL3BhZ2UscG9zdHNcIiB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGdldEN0eCA9IHtcbiAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgfSBhcyBjb25zdDtcbiAgICBjb25zdCBtYXJrZXJSZWFkcyA9ICgpID0+XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrLmNhbGxzLmZpbHRlcihcbiAgICAgICAgKFtjb21tYW5kXSkgPT4gY29tbWFuZCBpbnN0YW5jZW9mIEJhdGNoR2V0SXRlbUNvbW1hbmQsXG4gICAgICApLmxlbmd0aDtcbiAgICAvLyBXaGF0IGBnZXRgIGFuc3dlcnMgZm9yIGEgcmV2YWxpZGF0ZWQgcGFnZTogZXhwaXJlZCwgbm90IGEgbWlzcy5cbiAgICBjb25zdCBleHBpcmVkID0geyBsYXN0TW9kaWZpZWQ6IC0xIH07XG4gICAgY29uc3QgcmV2YWxpZGF0ZWRBZnRlclN0b3JlID0ge1xuICAgICAgZ2V0OiB7IEl0ZW06IHsgcmV2YWxpZGF0ZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgMTAwMCkgfSB9IH0sXG4gICAgfTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgQm9keToge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KHN0b3JlZCkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7fSk7XG4gICAgfSk7XG5cbiAgICBpdChcImFuc3dlcnMgY2hlY2tzIHdpdGhpbiB0aGUgVFRMIGZyb20gdGhlIG1hcmtlcnMgaXQgYWxyZWFkeSByZWFkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGhhbmRsZXIuZ2V0KFwicGFnZVwiLCBnZXRDdHgpO1xuICAgICAgYXdhaXQgaGFuZGxlci5nZXQoXCJwYWdlXCIsIGdldEN0eCk7XG5cbiAgICAgIGV4cGVjdChtYXJrZXJSZWFkcygpKS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaGFyZXMgb25lIHJlYWQgYmV0d2VlbiBjb25jdXJyZW50IGNoZWNrc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGhhbmRsZXIuZ2V0KFwicGFnZVwiLCBnZXRDdHgpLFxuICAgICAgICBoYW5kbGVyLmdldChcInBhZ2VcIiwgZ2V0Q3R4KSxcbiAgICAgICAgaGFuZGxlci5nZXQoXCJwYWdlXCIsIGdldEN0eCksXG4gICAgICBdKTtcblxuICAgICAgZXhwZWN0KG1hcmtlclJlYWRzKCkpLnRvQmUoMSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNlZXMgaXRzIG93biByZXZhbGlkYXRlVGFnIGF0IG9uY2UsIGFuZCBsb2dzIGl0IGZvciB0aGUgb3RoZXJzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGV4cGVjdChhd2FpdCBoYW5kbGVyLmdldChcInBhZ2VcIiwgZ2V0Q3R4KSkudG9NYXRjaE9iamVjdCh7IGxhc3RNb2RpZmllZCB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHJldmFsaWRhdGVkQWZ0ZXJTdG9yZSk7XG4gICAgICBhd2FpdCBoYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiKTtcblxuICAgICAgZXhwZWN0KGF3YWl0IGhhbmRsZXIuZ2V0KFwicGFnZVwiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KGV4cGlyZWQpO1xuICAgICAgY29uc3QgcHV0cyA9IG1vY2tEeW5hbW9TZW5kLm1vY2suY2FsbHMuZmlsdGVyKFxuICAgICAgICAoW2NvbW1hbmRdKSA9PiBjb21tYW5kIGluc3RhbmNlb2YgUHV0SXRlbUNvbW1hbmQsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHB1dHMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICAgIGV4cGVjdChjb21tYW5kSW5wdXQocHV0c1swXVswXSwgUHV0SXRlbUNvbW1hbmQpLkl0ZW0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICBwazogeyBTOiBcInRlc3QtYnVpbGQtaWQjbG9nXCIgfSxcbiAgICAgICAgc2s6IHsgUzogZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9eXFxkezE1fSNwb3N0cyQvKSB9LFxuICAgICAgICByZXZhbGlkYXRlZEF0OiB7IE46IGV4cGVjdC5hbnkoU3RyaW5nKSB9LFxuICAgICAgICB0dGw6IHsgTjogZXhwZWN0LmFueShTdHJpbmcpIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwid3JpdGVzIGVhY2ggdGFnIG9uY2Ugd2hlbiB0aGUgJ3VzZSBjYWNoZScgaGFuZGxlcnMgZ2V0IHRoZSBzYW1lIGNhbGxcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTmV4dC5qcyBjYWxscyBgcmV2YWxpZGF0ZVRhZ2AgaGVyZSBhbmQgYHVwZGF0ZVRhZ3NgIG9uIGV2ZXJ5XG4gICAgICAvLyBgY2FjaGVIYW5kbGVyc2AgZW50cnksIGFuZCBhbGwgb2YgdGhlbSBzaGFyZSBvbmUgbWFuaWZlc3QuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGhhbmRsZXIucmV2YWxpZGF0ZVRhZyhbXCJwb3N0c1wiXSksXG4gICAgICAgIHNoYXJlZFRhZ01hbmlmZXN0KCkudXBkYXRlKFtcInBvc3RzXCJdLCB1bmRlZmluZWQpLFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IHdyaXRlcyA9IG1vY2tEeW5hbW9TZW5kLm1vY2suY2FsbHMuZmlsdGVyKFxuICAgICAgICAoW2NvbW1hbmRdKSA9PlxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBVcGRhdGVJdGVtQ29tbWFuZCB8fFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBQdXRJdGVtQ29tbWFuZCxcbiAgICAgICk7XG4gICAgICBleHBlY3Qod3JpdGVzKS50b0hhdmVMZW5ndGgoMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwic2V0XCIsICgpID0+IHtcbiAgICAvLyBNYXBwaW5nIHJvd3MgZXhpc3Qgb25seSB0byBuYW1lIENsb3VkRnJvbnQgcGF0aHMsIHNvIG9ubHkgYSBkZXBsb3ltZW50XG4gICAgLy8gd2l0aCBhIGRpc3RyaWJ1dGlvbiBrZWVwcyB0aGVtLlxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBoYW5kbGVyID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcImtlZXBzIG5vIG1hcHBpbmcgcm93cyB3aXRob3V0IGEgZGlzdHJpYnV0aW9uIHRvIGludmFsaWRhdGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhlIFJlZ2lvbmFsIGNvbnN0cnVjdHMgaGF2ZSBubyBDbG91ZEZyb250LiBBIHJvdyBwZXIgdGFnIHBlciBgc2V0YCxcbiAgICAgIC8vIGFuZCB0aGUgUzMgcmVhZCBiZWZvcmUgYSBkZWxldGUgdG8gbmFtZSB0aGVtLCBib3VnaHQgbm90aGluZyB0aGVyZS5cbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FO1xuICAgICAgY29uc3QgcmVnaW9uYWwgPSBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCByZWdpb25hbC5zZXQoXG4gICAgICAgIFwiL2lzci8xXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgICAgaHRtbDogXCI8cC8+XCIsXG4gICAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcInRhZ1wiIH0sXG4gICAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlU2V0Q29udGV4dChbXSksXG4gICAgICApO1xuICAgICAgYXdhaXQgcmVnaW9uYWwuc2V0KFwiL2lzci8xXCIsIG51bGwsIHsgaXNGYWxsYmFjazogZmFsc2UgfSk7XG5cbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShHZXRPYmplY3RDb21tYW5kKSk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdG9yZSBjYWNoZSB2YWx1ZSBpbiBTM1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+c2V0IHRlc3Q8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7fSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwic2V0LWtleVwiLCB0ZXN0RGF0YSwgY3JlYXRlU2V0Q29udGV4dChbXCJ0YWcxXCJdKSk7XG5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KFB1dE9iamVjdENvbW1hbmQpKTtcbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5hbnkoVXBkYXRlSXRlbUNvbW1hbmQpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCBzdG9yZSB3aGVuIFMzIGJ1Y2tldCBpcyBub3QgY29uZmlndXJlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRTtcblxuICAgICAgY29uc3QgaGFuZGxlcldpdGhvdXRCdWNrZXQgPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+bm8gYnVja2V0PC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhvdXRCdWNrZXQuc2V0KFxuICAgICAgICBcIm5vLWJ1Y2tldC1rZXlcIixcbiAgICAgICAgdGVzdERhdGEsXG4gICAgICAgIGNyZWF0ZVNldENvbnRleHQoW10pLFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcIm1hcHMgdGhlIHRhZ3MgYSBwYWdlIGNhcnJpZXMgb25seSBpbiBpdHMgeC1uZXh0LWNhY2hlLXRhZ3MgaGVhZGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGBSZXNwb25zZUNhY2hlLnNldGAgYnVpbGRzIGEgcGFnZSdzIGBjdHhgIHdpdGhvdXQgdGFncywgc28gdGhlIHJlbmRlcidzXG4gICAgICAvLyBoZWFkZXIgaXMgdGhlIG9ubHkgcGxhY2UgdGhleSBleGlzdC4gTm8gbWFwcGluZyByb3cgbWVhbnQgYHJldmFsaWRhdGVUYWdgXG4gICAgICAvLyBmb3VuZCBub3RoaW5nIHRvIGludmFsaWRhdGUgYW5kIENsb3VkRnJvbnQga2VwdCB0aGUgc3RhbGUgSFRNTC5cbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD50YWdnZWQ8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogeyBcIngtbmV4dC1jYWNoZS10YWdzXCI6IFwiaGVhZGVyLXRhZyxvdGhlci10YWdcIiB9LFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCIvaXNyLzFcIiwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW10pKTtcblxuICAgICAgY29uc3QgbWFwcGluZ0tleXMgPSAoVXBkYXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNcbiAgICAgICAgLm1hcCgoW2lucHV0XSkgPT4gaW5wdXQuS2V5LnNrLlMpXG4gICAgICAgIC5zb3J0KCk7XG4gICAgICBleHBlY3QobWFwcGluZ0tleXMpLnRvRXF1YWwoW1xuICAgICAgICBcImhlYWRlci10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIsXG4gICAgICAgIFwib3RoZXItdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInByZWZlcnMgdGhlIGNvbnRleHQncyB0YWdzIG92ZXIgdGhlIGhlYWRlciB3aGVuIGJvdGggYXJlIHByZXNlbnRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnRhZ2dlZDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7IFwieC1uZXh0LWNhY2hlLXRhZ3NcIjogXCJoZWFkZXItdGFnXCIgfSxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwiL2lzci8xXCIsIHRlc3REYXRhLCBjcmVhdGVTZXRDb250ZXh0KFtcImN0eC10YWdcIl0pKTtcblxuICAgICAgY29uc3QgbWFwcGluZ0tleXMgPSAoVXBkYXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNcbiAgICAgICAgLm1hcCgoW2lucHV0XSkgPT4gaW5wdXQuS2V5LnNrLlMpXG4gICAgICAgIC5zb3J0KCk7XG4gICAgICBleHBlY3QobWFwcGluZ0tleXMpLnRvRXF1YWwoW1wiY3R4LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIl0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJoYXNoZXMgYSBtYXBwaW5nIHJvdydzIHNvcnQga2V5IHBhc3QgRHluYW1vREIncyAxMDI0IGJ5dGVzLCBrZWVwaW5nIHRoZSBrZXkgaW4gczNLZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnRhZ2dlZDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRhZyA9IFwidFwiLnJlcGVhdCgyNTYpO1xuICAgICAgY29uc3QgY2FjaGVLZXkgPSBgL3JvdXRlLWNhY2hlL0FQUF9QQUdFLyR7XCJhXCIucmVwZWF0KDY0KX0vJC8ke1wicFwiLnJlcGVhdCg3MDApfWA7XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChjYWNoZUtleSwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW3RhZ10pKTtcblxuICAgICAgY29uc3QgW2lucHV0XSA9IChVcGRhdGVJdGVtQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnB1dC5LZXkuc2suUykudG9NYXRjaChcbiAgICAgICAgbmV3IFJlZ0V4cChgXiR7dGFnfSN0ZXN0LWJ1aWxkLWlkLyNbMC05YS1mXXs2NH0kYCksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGlucHV0LkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXNbXCI6czNLZXlcIl0uUykudG9CZShcbiAgICAgICAgYHRlc3QtYnVpbGQtaWQke2NhY2hlS2V5fS5qc29uYCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcImhhc2hlcyB0aGUgdGFnIGludG8gYSBtYXBwaW5nIHJvdydzIHByZWZpeCB3aGVuIGV2ZW4gYSBoYXNoZWQgcm93IHdvdWxkIHBhc3MgMTAyNCBieXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBbiBpbXBsaWNpdCB0YWcgaXMgYXMgbG9uZyBhcyBpdHMgcGF0aC5cbiAgICAgIGNvbnN0IHRhZyA9IGBfTl9UXy8ke1wicFwiLnJlcGVhdCgxMDAwKX1gO1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnRhZ2dlZDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcIi9pc3IvMVwiLCB0ZXN0RGF0YSwgY3JlYXRlU2V0Q29udGV4dChbdGFnXSkpO1xuXG4gICAgICBjb25zdCBbaW5wdXRdID0gKFVwZGF0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgY29uc3Qgc2s6IHN0cmluZyA9IGlucHV0LktleS5zay5TO1xuICAgICAgZXhwZWN0KHNrKS50b01hdGNoKC9eI1swLTlhLWZdezY0fSN0ZXN0LWJ1aWxkLWlkXFwvaXNyXFwvMVxcLmpzb24kLyk7XG4gICAgICBleHBlY3QoQnVmZmVyLmJ5dGVMZW5ndGgoc2spKS50b0JlTGVzc1RoYW5PckVxdWFsKDEwMjQpO1xuXG4gICAgICAvLyBgcmV2YWxpZGF0ZVRhZ2AgcXVlcmllcyB0aGUgc2FtZSBwcmVmaXguXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogeyBJdGVtczogW10gfSB9KTtcbiAgICAgIGF3YWl0IGhhbmRsZXIucmV2YWxpZGF0ZVRhZyh0YWcpO1xuICAgICAgY29uc3QgcXVlcmllZCA9IChRdWVyeUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMubWFwKFxuICAgICAgICAoW3F1ZXJ5XSkgPT4gcXVlcnkuRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlc1tcIjpza1ByZWZpeFwiXT8uUyxcbiAgICAgICk7XG4gICAgICBleHBlY3QocXVlcmllZCkudG9Db250YWluKHNrLnNsaWNlKDAsIDY2KSk7XG4gICAgfSk7XG5cbiAgICBpdChcInN0b3JlcyBhbiBlbnRyeSB3aG9zZSBTMyBrZXkgd291bGQgcGFzcyAxMDI0IGJ5dGVzIHVuZGVyIGEgaGFzaGVkIG9iamVjdCBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPmxvbmc8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgICBjb25zdCBjYWNoZUtleSA9IGAvcm91dGUtY2FjaGUvQVBQX1BBR0UvJHtcImFcIi5yZXBlYXQoNjQpfS8kLyR7XCJwXCIucmVwZWF0KDk1MCl9YDtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChjYWNoZUtleSwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW1widFwiXSkpO1xuXG4gICAgICBjb25zdCBbcHV0XSA9IChQdXRPYmplY3RDb21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KHB1dC5LZXkpLnRvTWF0Y2goL150ZXN0LWJ1aWxkLWlkXFwvX2xvbmcta2V5XFwvWzAtOWEtZl17NjR9XFwubG9uZyQvKTtcbiAgICAgIC8vIFRoZSBtYXBwaW5nIGtlZXBzIHRoZSBuYW1lIGEgQ2xvdWRGcm9udCBwYXRoIGlzIHJlY292ZXJlZCBmcm9tLlxuICAgICAgY29uc3QgW21hcHBpbmddID0gKFVwZGF0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrXG4gICAgICAgIC5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChtYXBwaW5nLkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXNbXCI6czNLZXlcIl0uUykudG9CZShcbiAgICAgICAgYHRlc3QtYnVpbGQtaWQke2NhY2hlS2V5fS5qc29uYCxcbiAgICAgICk7XG5cbiAgICAgIChHZXRPYmplY3RDb21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrQ2xlYXIoKTtcbiAgICAgIGF3YWl0IGhhbmRsZXIuZ2V0KGNhY2hlS2V5LCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgW2dldF0gPSAoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChnZXQuS2V5KS50b0JlKHB1dC5LZXkpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJyZW1vdmVzIGEgZGVsZXRlZCBwYWdlJ3MgbWFwcGluZyByb3dzLCByZWFkaW5nIGl0cyB0YWdzIGZyb20gUzNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSByZXNwb25zZSBkZWxldGUgLSBhIGNhY2hlZCByb3V0ZSB0aGF0IHN0YXJ0cyBhbnN3ZXJpbmcgYG5vdEZvdW5kKClgIC1cbiAgICAgIC8vIGFycml2ZXMgYXMgYHNldChrZXksIG51bGwsIHsgY2FjaGVDb250cm9sLCAuLi4gfSlgIHdpdGggbm8gdGFncyBhdCBhbGwsXG4gICAgICAvLyBzbyB0aGUgZW50cnkgaXRzZWxmIGlzIHRoZSBvbmx5IHBsYWNlIGl0cyBtYXBwaW5nIHJvd3MgY2FuIGJlIG5hbWVkXG4gICAgICAvLyBmcm9tLiBMZWZ0IGJlaGluZCwgdGhleSByZXNvbHZlIG9uIHRoZSBuZXh0IGByZXZhbGlkYXRlVGFnYCB0byBhIGNhY2hlXG4gICAgICAvLyBrZXkgd2hvc2Ugb2JqZWN0IGlzIGdvbmUgYW5kIHNwZW5kIGEgQ2xvdWRGcm9udCB3aWxkY2FyZCBwYXRoIG9uIGl0LlxuICAgICAgY29uc3Qgc3RvcmVkID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHRhZ3M6IFtcImNvbGxlY3Rpb25cIiwgXCJfTl9UXy9pc3IvMVwiXSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgICAgaHRtbDogXCI8aHRtbD5nb25lPC9odG1sPlwiLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAgICAgICAgIC5mbigpXG4gICAgICAgICAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShzdG9yZWQpKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwiL2lzci8xXCIsIG51bGwsIHtcbiAgICAgICAgY2FjaGVDb250cm9sOiB7IHJldmFsaWRhdGU6IDYwLCBleHBpcmU6IHVuZGVmaW5lZCB9LFxuICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpKTtcbiAgICAgIGNvbnN0IGRlbGV0ZWRLZXlzID0gKERlbGV0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzXG4gICAgICAgIC5tYXAoKFtpbnB1dF0pID0+IGlucHV0LktleS5zay5TKVxuICAgICAgICAuc29ydCgpO1xuICAgICAgLy8gTWFwcGluZyByb3dzIG9ubHkuIFRoZSBiYXJlLXRhZyBtYXJrZXIgcm93IGJlbG9uZ3MgdG8gdGhlIHRhZywgYW5kXG4gICAgICAvLyBgY2hlY2tJZlJldmFsaWRhdGVkYCByZWFkcyBpdCBmb3IgZXZlcnkgb3RoZXIgZW50cnkgY2FycnlpbmcgaXQuXG4gICAgICBleHBlY3QoZGVsZXRlZEtleXMpLnRvRXF1YWwoW1xuICAgICAgICBcIl9OX1RfL2lzci8xI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiLFxuICAgICAgICBcImNvbGxlY3Rpb24jdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiZGVsZXRlcyBhIGZldGNoIGVudHJ5J3MgbWFwcGluZyByb3dzIGZyb20gdGhlIGNvbnRleHQncyB0YWdzIGFsb25lXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGBjdHhgIGNhcnJpZXMgdGhlbSBoZXJlLCBzbyB0aGUgcHJlLWRlbGV0ZSByZWFkIGlzIHNraXBwZWQ6IG9ubHkgdGhlXG4gICAgICAvLyBEZWxldGVPYmplY3QgcmVhY2hlcyBTMy5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcImZldGNoLWtleVwiLCBudWxsLCBjcmVhdGVTZXRDb250ZXh0KFtcImN0eC10YWdcIl0pKTtcblxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KEdldE9iamVjdENvbW1hbmQpKTtcbiAgICAgIGNvbnN0IGRlbGV0ZWRLZXlzID0gKFxuICAgICAgICBEZWxldGVJdGVtQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzLm1hcCgoW2lucHV0XSkgPT4gaW5wdXQuS2V5LnNrLlMpO1xuICAgICAgZXhwZWN0KGRlbGV0ZWRLZXlzKS50b0VxdWFsKFtcImN0eC10YWcjdGVzdC1idWlsZC1pZC9mZXRjaC1rZXkuanNvblwiXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImRlbGV0ZXMgbm8gbWFwcGluZyByb3dzIGZvciBhbiB1bnRhZ2dlZCBlbnRyeVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgbGFzdE1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSwgaHRtbDogXCI8cC8+XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCIvdW50YWdnZWRcIiwgbnVsbCwgeyBpc0ZhbGxiYWNrOiBmYWxzZSB9KTtcblxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoRGVsZXRlT2JqZWN0Q29tbWFuZCkpO1xuICAgICAgZXhwZWN0KERlbGV0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzdGlsbCBkZWxldGVzIHRoZSBvYmplY3Qgd2hlbiBpdHMgdGFncyBjYW5ub3QgYmUgcmVhZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICA/IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlMzIEdldCBFcnJvclwiKSlcbiAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh7fSksXG4gICAgICApO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBleHBlY3QoXG4gICAgICAgIGhhbmRsZXIuc2V0KFwiL2lzci8xXCIsIG51bGwsIHsgaXNGYWxsYmFjazogZmFsc2UgfSksXG4gICAgICApLnJlc29sdmVzLm5vdC50b1Rocm93KCk7XG5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KERlbGV0ZU9iamVjdENvbW1hbmQpKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBTMyBlcnJvcnMgZ3JhY2VmdWxseVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+ZXJyb3IgdGVzdDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIlMzIFB1dCBFcnJvclwiKSk7XG5cbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICAgIGF3YWl0IGV4cGVjdChcbiAgICAgICAgaGFuZGxlci5zZXQoXCJlcnJvci1rZXlcIiwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW10pKSxcbiAgICAgICkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJyZXZhbGlkYXRlVGFnXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCByZWNvcmQgdGhlIHJldmFsaWRhdGlvbiB3aXRob3V0IGRlbGV0aW5nIHRoZSB0YWcncyBTMyBlbnRyaWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tRdWVyeVJlc3BvbnNlID0ge1xuICAgICAgICBJdGVtczogW1xuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyNjYWNoZS1rZXktMVwiIH0gfSxcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjY2FjaGUta2V5LTJcIiB9IH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogbW9ja1F1ZXJ5UmVzcG9uc2UgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIC8vIE5vIGRpc3RyaWJ1dGlvbiwgc28gbm8gbWFwcGluZyByb3dzIHRvIHJlYWQ6IHRoZSBtYXJrZXIgaXMgYWxsIG9mIGl0LlxuICAgICAgZXhwZWN0KG1vY2tEeW5hbW9TZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShRdWVyeUNvbW1hbmQpKTtcbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5hbnkoVXBkYXRlSXRlbUNvbW1hbmQpLFxuICAgICAgKTtcbiAgICAgIC8vIFRoZSBtYXJrZXIgcm93IGlzIHRoZSBpbnZhbGlkYXRpb247IGBnZXRgIHJlYWRzIGl0IGFuZCBoYW5kcyB0aGUgZW50cnlcbiAgICAgIC8vIGJhY2sgZXhwaXJlZCBzbyBOZXh0LmpzIHJlLXJlbmRlcnMgdGhlIHJvdXRlIGFuZCByZXBsYWNlcyB0aGUgb2JqZWN0LlxuICAgICAgLy8gRGVsZXRpbmcgdGhlIG9iamVjdHMgaGVyZSBtYWRlIHRoZSBuZXh0IHJlcXVlc3QgYSBoYXJkIG1pc3MsIHdoaWNoIG9uIGFcbiAgICAgIC8vIFBQUiByb3V0ZSBpcyBhbnN3ZXJlZCBmcm9tIHRoZSB1bmNhY2hlYWJsZSBmYWxsYmFjayBzaGVsbCBmb3IgZ29vZC5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5hbnkoRGVsZXRlT2JqZWN0Q29tbWFuZCksXG4gICAgICApO1xuXG4gICAgICAvLyBUaGUgdGFnIG1hcmtlciBgY2hlY2tJZlJldmFsaWRhdGVkYCByZWFkczoga2V5ZWQgYnkgdGhlIGJhcmUgdGFnLCBzb1xuICAgICAgLy8gZW50cmllcyB3aXRoIG5vIG1hcHBpbmcgcm93IG9mIHRoZWlyIG93biBzdGlsbCBzZWUgdGhlIHJldmFsaWRhdGlvbi5cbiAgICAgIGNvbnN0IG1hcmtlcldyaXRlID0gKFVwZGF0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzXG4gICAgICAgIC5tYXAoKFtpbnB1dF0pID0+IGlucHV0KVxuICAgICAgICAuZmluZCgoaW5wdXQpID0+IGlucHV0LktleS5zay5TID09PSBcInRlc3QtdGFnXCIpO1xuICAgICAgZXhwZWN0KG1hcmtlcldyaXRlKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogXCJTRVQgcmV2YWxpZGF0ZWRBdCA9IDpyZXZhbGlkYXRlZEF0XCIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCByZXZhbGlkYXRlIHdoZW4gRHluYW1vREIgdGFibGUgaXMgbm90IGNvbmZpZ3VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfUkVWQUxJREFUSU9OX1RBQkxFX05BTUU7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRob3V0VGFibGUgPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aG91dFRhYmxlLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KG1vY2tEeW5hbW9TZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIER5bmFtb0RCIGVycm9ycyBncmFjZWZ1bGx5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJEeW5hbW9EQiBFcnJvclwiKSk7XG5cbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICAgIGF3YWl0IGV4cGVjdChoYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJlcnJvci10YWdcIikpLnJlc29sdmVzLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBjcmVhdGUgYSBDbG91ZEZyb250IGludmFsaWRhdGlvbiBmb3IgYWZmZWN0ZWQgcGF0aHMgd2hlbiBhIGRpc3RyaWJ1dGlvbiBwYXJhbWV0ZXIgaXMgY29uZmlndXJlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbW9ja1F1ZXJ5UmVzcG9uc2UgPSB7XG4gICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiIH0gfSxcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMi5qc29uXCIgfSB9LFxuICAgICAgICBdLFxuICAgICAgfTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IG1vY2tRdWVyeVJlc3BvbnNlIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7IC8vIEZvciBkZWxldGUgY29tbWFuZHNcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QobW9ja1NzbVNlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoT2JqZWN0KSk7XG4gICAgICBleHBlY3QobW9ja0Nsb3VkRnJvbnRTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuRGlzdHJpYnV0aW9uSWQpLnRvQmUoXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiKTtcbiAgICAgIC8vIE9uZSB0cmFpbGluZyB3aWxkY2FyZCBwZXIgcGFnZTogYW4gaW52YWxpZGF0aW9uIHBhdGggbWF0Y2hlcyBvbmx5IHRoZVxuICAgICAgLy8gcXVlcnkgc3RyaW5nIGl0IHNwZWxscyBvdXQsIGFuZCBhIHBhZ2UncyBSU0MgcGF5bG9hZCBpcyBjYWNoZWQgdW5kZXJcbiAgICAgIC8vIGA/X3JzYz08aGFzaD5gIC0gYC9pc3IvMSpgIGNvdmVycyBpdCwgYW5kIHRoZSBzbGFzaCB2YXJpYW50LCBmb3Igb25lXG4gICAgICAvLyBvZiB0aGUgZmlmdGVlbiB3aWxkY2FyZHMgaW5zdGVhZCBvZiB0d28uXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9pc3IvMSpcIixcbiAgICAgICAgXCIvaXNyLzIqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIG5leHQgPj0gMTYuMy44IHNjb3BlcyBhIHBhZ2UncyBrZXkgYnkgaXRzIHNvdXJjZSByb3V0ZTpcbiAgICAgKiBgcm91dGUtY2FjaGUvPGtpbmQ+LzxoYXNoPi8kPHBhdGhuYW1lPmAsIHRoZSBwYXRobmFtZSB0aHJvdWdoXG4gICAgICogYG5vcm1hbGl6ZVBhZ2VQYXRoYC4gUmVhZCBhcyBhIHBhdGgsIGl0IG5hbWVkIG5vIFVSSSB0aGUgZGlzdHJpYnV0aW9uIGhhcy5cbiAgICAgKi9cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSBwYXRobmFtZSBpbnNpZGUgYSBuZXh0IDE2LjMuOCByb3V0ZS1jYWNoZSBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBrZXkgPSAocGF0aG5hbWU6IHN0cmluZykgPT5cbiAgICAgICAgYHRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvcm91dGUtY2FjaGUvQVBQX1BBR0UvJHtcImFcIi5yZXBlYXQoNjQpfS8kJHtwYXRobmFtZX0uanNvbmA7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeToge1xuICAgICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgICB7IHNrOiB7IFM6IGtleShcIi9pc3IvMVwiKSB9IH0sXG4gICAgICAgICAgICB7IHNrOiB7IFM6IGtleShcIi9pbmRleC9pbmRleFwiKSB9IH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcbiAgICAgICAgXCIvaXNyLzEqXCIsXG4gICAgICAgIFwiL2luZGV4KlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSBwYXRoIG9mIGEgbWFwcGluZyByb3cgd2hvc2Uga2V5IGlzIGluIHMzS2V5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICBJdGVtczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzazogeyBTOiBgdGVzdC10YWcjdGVzdC1idWlsZC1pZC8jJHtcImJcIi5yZXBlYXQoNjQpfWAgfSxcbiAgICAgICAgICAgICAgczNLZXk6IHsgUzogXCJ0ZXN0LWJ1aWxkLWlkL2xvbmcvcGFnZS5qc29uXCIgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcbiAgICAgICAgXCIvbG9uZy9wYWdlKlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImRvZXMgbm90IHJlYWQgYSBtYXJrZXIgcm93IG9uZSBgI2AgbG9uZ2VyIGFzIGEgbWFwcGluZyByb3dcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTm8gYnVpbGQgSUQgbGVhdmVzIG5vIGtleSBwcmVmaXggdG8gdGVsbCB0aGUgdHdvIGFwYXJ0IGJ5LCBhbmQgdGhlXG4gICAgICAvLyBtYXJrZXIgcm93IG9mIHRhZyBgdGVzdC10YWcjYCAoc2sgYHRlc3QtdGFnI2ApIG1hdGNoZXMgYHRlc3QtdGFnI2AuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0JVSUxEX0lEID0gXCJcIjtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IHsgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjXCIgfSB9XSB9IH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIGFuIG9sZGVyIGFwcCdzIHJvdXRlIG5hbWVkIC9yb3V0ZS1jYWNoZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9yb3V0ZS1jYWNoZS9mb28uanNvblwiIH0gfV0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykudG9FcXVhbChbXG4gICAgICAgIFwiL3JvdXRlLWNhY2hlL2ZvbypcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyBhIGRpc3RyaWJ1dGlvbiB3aG9zZSBJRCBpcyBpbiB0aGUgZW52aXJvbm1lbnQgd2l0aG91dCBTU01cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTmV4dGpzR2xvYmFsQ29udGFpbmVyczogdGhlIHRhc2sgY2FuIG5hbWUgdGhlIGRpc3RyaWJ1dGlvbiBkaXJlY3RseS5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEID0gXCJkaXJlY3QtZGlzdHJpYnV0aW9uLWlkXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeTogeyBJdGVtczogW3sgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIiB9IH1dIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QobW9ja1NzbVNlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuRGlzdHJpYnV0aW9uSWQpLnRvQmUoXCJkaXJlY3QtZGlzdHJpYnV0aW9uLWlkXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzcGxpdHMgYSBtYXBwaW5nIHJvdyBhdCB0aGUgdGFnJ3MgbGVuZ3RoLCBzbyBhIHRhZyBjb250YWluaW5nICMgc3RpbGwgcmVzb2x2ZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSB0YWcgaXMgYXBwLWRlZmluZWQ6IGByZXZhbGlkYXRlVGFnKFwidXNlciM0MlwiKWAgaXMgbGVnYWwuIFNwbGl0dGluZyBhdFxuICAgICAgLy8gdGhlIGZpcnN0IFwiI1wiIGxlZnQgXCI0MiN0ZXN0LWJ1aWxkLWlkL2FjY291bnQuanNvblwiIGFzIHRoZSBTMyBrZXksIHdob3NlXG4gICAgICAvLyBpbnZhbGlkYXRpb24gcGF0aCBuYW1lcyBub3RoaW5nIENsb3VkRnJvbnQgY2FjaGVkLCBzbyB0aGUgcGFnZSBzdGF5ZWRcbiAgICAgIC8vIHN0YWxlIHdoaWxlIHRoZSByb3cgd2FzIHN0YW1wZWQgcmV2YWxpZGF0ZWQgYW5kIG5ldmVyIHJldHJpZWQuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgcXVlcnk6IHsgSXRlbXM6IFt7IHNrOiB7IFM6IFwidXNlciM0MiN0ZXN0LWJ1aWxkLWlkL2FjY291bnQuanNvblwiIH0gfV0gfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwidXNlciM0MlwiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcbiAgICAgICAgXCIvYWNjb3VudCpcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgcGF0aCBhIHJldmFsaWRhdGVQYXRoIHRhZyBuYW1lcyBldmVuIHdpdGggbm8gbWFwcGluZyByb3dzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEEgYnVpbGQtdGltZSBwcmVyZW5kZXIgaGFzIG5vIG1hcHBpbmcgcm93cywgc28gdGhlIHF1ZXJ5IGNvbWVzIGJhY2tcbiAgICAgIC8vIGVtcHR5IGFuZCB0aGVyZSBpcyBub3RoaW5nIHRvIGRlcml2ZSBhIENsb3VkRnJvbnQgcGF0aCBmcm9tIC0gZXhjZXB0IHRoZVxuICAgICAgLy8gdGFnLCB3aGljaCBmb3IgYHJldmFsaWRhdGVQYXRoYCBpcyBgX05fVF88cGF0aD5gLiBXaXRob3V0IHRoaXMgdGhlIENETlxuICAgICAgLy8gYW5zd2VycyB3aXRoIHRoZSBwcmUtcmV2YWxpZGF0aW9uIHBhZ2UgdW50aWwgYHMtbWF4YWdlPTMxNTM2MDAwYFxuICAgICAgLy8gZXhwaXJlcy4gTWVhc3VyZWQgYWdhaW5zdCBuZXh0LmpzJ3MgYHRlc3QvZTJlL2FwcC1kaXIvdHJhaWxpbmdzbGFzaGAuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IHsgSXRlbXM6IFtdIH0gfSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJfTl9UXy9lbi9sZWdhY3kvXCIpO1xuXG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICAvLyBCb3RoIHNsYXNoIHZhcmlhbnRzLCB3aGljaCB0aGUgdHJhaWxpbmcgd2lsZGNhcmQgY292ZXJzOiBhXG4gICAgICAvLyBgdHJhaWxpbmdTbGFzaGAgYXBwJ3MgY2FjaGVkIFVSSSBpcyB0aGUgcmVkaXJlY3QgdGFyZ2V0LCBub3QgdGhlIHJvdXRlLlxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcbiAgICAgICAgXCIvZW4vbGVnYWN5KlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSBVUkkgdW5kZXIgdGhlIGFwcCdzIGJhc2VQYXRoLCBub3QgdGhlIGJhcmUgcm91dGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQ2xvdWRGcm9udCBjYWNoZWQgYC9iYXNlL2lzci8xYDsgdGhlIGNhY2hlIGtleSBhbmQgdGhlIGByZXZhbGlkYXRlUGF0aGBcbiAgICAgIC8vIHRhZyBib3RoIG5hbWUgYC9pc3IvMWAsIGJlY2F1c2UgTmV4dC5qcyBzdHJpcHMgYGJhc2VQYXRoYCBiZWZvcmUgcm91dGluZ1xuICAgICAgLy8gYW5kIG5ldmVyIHNob3dzIGl0IHRvIHRoZSBjYWNoZSBoYW5kbGVyLiBJbnZhbGlkYXRpbmcgdGhlIGJhcmUgcm91dGVcbiAgICAgIC8vIG1hdGNoZXMgbm90aGluZyBhdCB0aGUgZWRnZSwgc28gdGhlIHN0YWxlIHBhZ2Ugc3Vydml2ZXMgdW50aWxcbiAgICAgIC8vIGBzLW1heGFnZWAgZXhwaXJlcy5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgdXNlQmFzZVBhdGgoKTtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoQmFzZVBhdGggPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeToge1xuICAgICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIgfSB9LFxuICAgICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaW5kZXguanNvblwiIH0gfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhCYXNlUGF0aC5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykudG9FcXVhbChcbiAgICAgICAgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICAgICAgXCIvYmFzZS9pc3IvMSpcIixcbiAgICAgICAgICAvLyBUaGUgYXBwJ3Mgcm9vdCB1bmRlciBhIGBiYXNlUGF0aGAgaXMgYC9iYXNlYCwgbm90IGAvYmFzZS9gLCBhbmRcbiAgICAgICAgICAvLyBzcGVsbGVkIG91dDogYC9iYXNlKmAgd291bGQgYmUgdGhlIHdob2xlIGFwcC5cbiAgICAgICAgICBcIi9iYXNlXCIsXG4gICAgICAgICAgXCIvYmFzZT8qXCIsXG4gICAgICAgICAgXCIvYmFzZS9cIixcbiAgICAgICAgICBcIi9iYXNlLz8qXCIsXG4gICAgICAgIF0pLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykubm90LnRvQ29udGFpbihcbiAgICAgICAgXCIvaXNyLzFcIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcImFkZHMgdGhlIGJhc2VQYXRoIHRvIGEgcmV2YWxpZGF0ZVBhdGggdGFnJ3MgcGF0aCB0b29cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICB1c2VCYXNlUGF0aCgpO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhCYXNlUGF0aCA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7IHF1ZXJ5OiB7IEl0ZW1zOiBbXSB9IH0pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aEJhc2VQYXRoLnJldmFsaWRhdGVUYWcoXCJfTl9UXy9ibG9nXCIpO1xuXG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9iYXNlL2Jsb2cqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiZG9lcyBub3QgaW52YWxpZGF0ZSBhIENsb3VkRnJvbnQgcGF0aCBmb3IgYW4gYXBwIHRhZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IHsgSXRlbXM6IFtdIH0gfSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiKTtcblxuICAgICAgLy8gTm90aGluZyB0byBpbnZhbGlkYXRlOiBhbiBhcHAgdGFnIG5hbWVzIG5vIHBhdGgsIGFuZCBubyBlbnRyeSBpcyBtYXBwZWRcbiAgICAgIC8vIHRvIGl0LlxuICAgICAgZXhwZWN0KG1vY2tDbG91ZEZyb250U2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIG5vdCBjYWxsIFNTTSBvciBDbG91ZEZyb250IHdoZW4gbm8gZGlzdHJpYnV0aW9uIHBhcmFtZXRlciBpcyBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1vY2tRdWVyeVJlc3BvbnNlID0ge1xuICAgICAgICBJdGVtczogW3sgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIiB9IH1dLFxuICAgICAgfTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IG1vY2tRdWVyeVJlc3BvbnNlIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QobW9ja1NzbVNlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICBleHBlY3QobW9ja0Nsb3VkRnJvbnRTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIFNTTS9DbG91ZEZyb250IGludmFsaWRhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbW9ja1F1ZXJ5UmVzcG9uc2UgPSB7XG4gICAgICAgIEl0ZW1zOiBbeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiIH0gfV0sXG4gICAgICB9O1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogbW9ja1F1ZXJ5UmVzcG9uc2UgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJTU00gRXJyb3JcIikpO1xuXG4gICAgICBhd2FpdCBleHBlY3QoXG4gICAgICAgIGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKSxcbiAgICAgICkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHBhZ2UgaXRzZWxmIGZvciBhIHJldmFsaWRhdGVQYXRoKHBhdGgsICdwYWdlJykgdGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGByZXZhbGlkYXRlUGF0aChwYXRoLCB0eXBlKWAgYXBwZW5kcyB0aGUgdHlwZSB0byB0aGUgaW1wbGljaXQgdGFnLCBzbyB0aGVcbiAgICAgIC8vIHRhZyByZWFkcyBgX05fVF8vcHJpY2luZy9wYWdlYCAtIGEgcGF0aCBubyBVUkwgaGFzLiBUYWtpbmcgaXQgbGl0ZXJhbGx5XG4gICAgICAvLyBpbnZhbGlkYXRlZCBub3RoaW5nIHRoYXQgZXhpc3RlZCwgd2hpY2ggaXMgdGhlIHdob2xlIG9mIHRoZSBidWc6IHRoZVxuICAgICAgLy8gc2Vjb25kIGFyZ3VtZW50IHNpbGVudGx5IHR1cm5lZCBDRE4gaW52YWxpZGF0aW9uIG9mZi5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogeyBJdGVtczogW10gfSB9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcIl9OX1RfL3ByaWNpbmcvcGFnZVwiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFxuICAgICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcIi9wcmljaW5nKlwiXSksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJza2lwcyBtYXBwaW5nIHJvd3MgdGhhdCBuYW1lIG5vIGNhY2hlZCBVUklcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSBkeW5hbWljIHRlbXBsYXRlIGFuZCBhIGZldGNoLWNhY2hlIGVudHJ5IGFyZSBib3RoIHJvd3MgYSByZWFsIHRhZ1xuICAgICAgLy8gY2FycmllcywgYW5kIG5laXRoZXIgaXMgYSBVUkw6IGAvYmxvZy9bc2x1Z11gIG1hdGNoZXMgbm90aGluZyBhdCB0aGUgZWRnZVxuICAgICAgLy8gKENsb3VkRnJvbnQgaGFzIG5vIHN1Y2ggVVJJKSwgYW5kIGEgZmV0Y2gga2V5IGlzIGEgaGFzaCBvZiB0aGUgcmVxdWVzdC5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeToge1xuICAgICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9ibG9nL1tzbHVnXS5qc29uXCIgfSB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzazoge1xuICAgICAgICAgICAgICAgIFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC8wMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZi5qc29uXCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvYmxvZy9oZWxsby5qc29uXCIgfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGNvbnN0IGl0ZW1zOiBzdHJpbmdbXSA9IGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zO1xuICAgICAgZXhwZWN0KGl0ZW1zKS50b0VxdWFsKFtcIi9ibG9nL2hlbGxvKlwiXSk7XG4gICAgICBleHBlY3QoaXRlbXMuc29tZSgocGF0aCkgPT4gcGF0aC5pbmNsdWRlcyhcIltcIikpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChpdGVtcy5zb21lKChwYXRoKSA9PiBwYXRoLmluY2x1ZGVzKFwiMDEyMzQ1Njc4OWFiY2RlZlwiKSkpLnRvQmUoXG4gICAgICAgIGZhbHNlLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwid2Fsa3MgZXZlcnkgUXVlcnkgcGFnZSBvZiBhIHRhZydzIG1hcHBpbmcgcm93c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBPbmUgYFF1ZXJ5YCBhbnN3ZXJzIHdpdGggYXQgbW9zdCAxIE1CLiBBIHRhZyBvbiBhIGxhcmdlIGFwcCBydW5zIHBhc3RcbiAgICAgIC8vIHRoYXQsIGFuZCB0YWtpbmcgb25seSB0aGUgZmlyc3QgcGFnZSBkZWxldGVkIHNvbWUgb2YgdGhlIHRhZydzIGVudHJpZXNcbiAgICAgIC8vIGFuZCBpbnZhbGlkYXRlZCBvbmx5IHNvbWUgb2YgaXRzIHBhdGhzIC0gYSBwYXJ0aWFsIHJldmFsaWRhdGlvbiB0aGF0XG4gICAgICAvLyBsb29rcyBsaWtlIGEgY2FjaGUgYnVnLlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGxldCBxdWVyaWVzID0gMDtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT4ge1xuICAgICAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZCkge1xuICAgICAgICAgIHF1ZXJpZXMrKztcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgcXVlcmllcyA9PT0gMVxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIEl0ZW1zOiBbeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiIH0gfV0sXG4gICAgICAgICAgICAgICAgICBMYXN0RXZhbHVhdGVkS2V5OiB7IHBrOiB7IFM6IFwidGVzdC1idWlsZC1pZFwiIH0gfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogeyBJdGVtczogW3sgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8yLmpzb25cIiB9IH1dIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KHF1ZXJpZXMpLnRvQmUoMik7XG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9pc3IvMSpcIixcbiAgICAgICAgXCIvaXNyLzIqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY29sbGFwc2VzIHRvIG9uZSBhcHAtd2lkZSB3aWxkY2FyZCByYXRoZXIgdGhhbiBzZW5kaW5nIG1hbnkgaW52YWxpZGF0aW9uc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBDbG91ZEZyb250IGNhcHMgYSByZXF1ZXN0IGF0IDE1IHdpbGRjYXJkIHBhdGhzIGFuZCBhbGxvd3MgMTVcbiAgICAgIC8vIGludmFsaWRhdGlvbnMgaW4gcHJvZ3Jlc3MuIEEgdGFnIGNvdmVyaW5nIGh1bmRyZWRzIG9mIHBhZ2VzIHRoZXJlZm9yZVxuICAgICAgLy8gY2Fubm90IGJlIHNwZWxsZWQgb3V0OiBzZW5kaW5nIGEgcmVxdWVzdCBwZXIgMTUgcGF0aHMgdGhyb3R0bGVzLCBhbmQgYVxuICAgICAgLy8gdGhyb3R0bGVkIHJlcXVlc3QgaXMgYSBwYWdlIHRoYXQgc3RheXMgc3RhbGUuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICBJdGVtczogQXJyYXkuZnJvbSh7IGxlbmd0aDogMjAwIH0sIChfLCBpKSA9PiAoe1xuICAgICAgICAgICAgc2s6IHsgUzogYHRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLyR7aX0uanNvbmAgfSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChtb2NrQ2xvdWRGcm9udFNlbmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykudG9FcXVhbChbXCIvKlwiXSk7XG4gICAgfSk7XG5cbiAgICAvKiogQSBoYW5kbGVyIHdpdGggYSBkaXN0cmlidXRpb24sIGFuZCBEeW5hbW9EQiBhbnN3ZXJpbmcgYHF1ZXJ5YCBmb3IgaXQuICovXG4gICAgY29uc3Qgd2l0aERpc3RyaWJ1dGlvbiA9IChxdWVyeTogdW5rbm93bikgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeSB9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIHJldHVybiBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGludmFsaWRhdGlvbnMgPSAoKTogc3RyaW5nW11bXSA9PlxuICAgICAgKENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMubWFwKFxuICAgICAgICAoW2lucHV0XSkgPT4gaW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMsXG4gICAgICApO1xuICAgIGNvbnN0IHBhZ2VzID0gKHRhZzogc3RyaW5nLCBjb3VudDogbnVtYmVyKSA9PiAoe1xuICAgICAgSXRlbXM6IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0sIChfLCBpKSA9PiAoe1xuICAgICAgICBzazogeyBTOiBgJHt0YWd9I3Rlc3QtYnVpbGQtaWQvaXNyLyR7aX0uanNvbmAgfSxcbiAgICAgIH0pKSxcbiAgICB9KTtcblxuICAgIGl0KFwic2VuZHMgYSB0YWcncyBwYXRocyBhcyBvbmUgcmVxdWVzdCB3aGlsZSB0aGV5IGZpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBDbG91ZEZyb250J3Mgd2lsZGNhcmQgcXVvdGEgaXMgc2hhcmVkIGJ5IGV2ZXJ5IGludmFsaWRhdGlvbiBpblxuICAgICAgLy8gcHJvZ3Jlc3Mgb24gdGhlIGRpc3RyaWJ1dGlvbi4gU3BsaXR0aW5nIHRlbiBwYWdlcycgdHdlbnR5IHdpbGRjYXJkc1xuICAgICAgLy8gaW50byB0d28gYmFjay10by1iYWNrIHJlcXVlc3RzIGhhZCB0aGUgc2Vjb25kIHJlamVjdGVkLCBhbmQgaXRzIHBhZ2VzXG4gICAgICAvLyBzdGF5ZWQgc3RhbGUgYXQgdGhlIGVkZ2UuXG4gICAgICBhd2FpdCB3aXRoRGlzdHJpYnV0aW9uKHBhZ2VzKFwidGVzdC10YWdcIiwgMTApKS5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKClbMF0pLnRvSGF2ZUxlbmd0aCgxMCk7XG4gICAgfSk7XG5cbiAgICBpdChcImNvbGxhcHNlcyB0byB0aGUgd2hvbGUgYXBwIHBhc3QgZmlmdGVlbiB3aWxkY2FyZHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgd2l0aERpc3RyaWJ1dGlvbihwYWdlcyhcInRlc3QtdGFnXCIsIDE2KSkucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvKlwiXV0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJjb2xsYXBzZXMgdG8gdGhlIHdob2xlIGFwcCB1bmRlciBhIGJhc2VQYXRoLCBpdHMgcm9vdCBpbmNsdWRlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBOb3QgYC9iYXNlKmAsIHdoaWNoIHdvdWxkIGFsc28gaW52YWxpZGF0ZSBhIHNpYmxpbmcgYXBwIGF0IGAvYmFzZTJgLlxuICAgICAgdXNlQmFzZVBhdGgoKTtcbiAgICAgIGF3YWl0IHdpdGhEaXN0cmlidXRpb24ocGFnZXMoXCJ0ZXN0LXRhZ1wiLCAxNikpLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiL2Jhc2VcIiwgXCIvYmFzZT8qXCIsIFwiL2Jhc2UvKlwiXV0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgd2hvbGUgYXBwIHVuZGVyIGEgYmFzZVBhdGggd2hlbiBhIHRhZydzIHJvd3MgY2Fubm90IGJlIHJlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgdXNlQmFzZVBhdGgoKTtcbiAgICAgIGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcbiAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHsgSXRlbXM6IFtdIH0pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgUXVlcnlDb21tYW5kXG4gICAgICAgICAgPyBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJQcm92aXNpb25lZFRocm91Z2hwdXRFeGNlZWRlZFwiKSlcbiAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSh7fSksXG4gICAgICApO1xuXG4gICAgICBhd2FpdCBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiL2Jhc2VcIiwgXCIvYmFzZT8qXCIsIFwiL2Jhc2UvKlwiXV0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJwZXJjZW50LWVuY29kZXMgdGhlIHJvdXRlcyBpdCBpbnZhbGlkYXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBDYWNoZSBrZXlzIGFyZSBkZWNvZGVkIHBhdGhuYW1lcywgd2hpbGUgQ2xvdWRGcm9udCBjYWNoZXMgLSBhbmRcbiAgICAgIC8vIGludmFsaWRhdGlvbiBwYXRocyBtYXRjaCAtIHRoZSBlbmNvZGVkIFVSSSB0aGUgYnJvd3NlciBzZW50LlxuICAgICAgYXdhaXQgd2l0aERpc3RyaWJ1dGlvbih7XG4gICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvYmxvZy9ow6lsbG8uanNvblwiIH0gfSxcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9ibG9nL2hlbGxvIHdvcmxkLmpzb25cIiB9IH0sXG4gICAgICAgICAgLy8gUGF0aCBkZWxpbWl0ZXJzIE5leHQuanMgcmUtZXNjYXBlZCBpbiB0aGUga2V5IHN0YXkgYXMgdGhleSBhcmUuXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvZmlsZXMvYSUyRmIuanNvblwiIH0gfSxcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9AdXNlci81MCUuanNvblwiIH0gfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLnJldmFsaWRhdGVUYWcoW1widGVzdC10YWdcIiwgXCJfTl9UXy90YWdzL2MjP1wiXSk7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1xuICAgICAgICBbXG4gICAgICAgICAgXCIvYmxvZy9oJUMzJUE5bGxvKlwiLFxuICAgICAgICAgIFwiL2Jsb2cvaGVsbG8lMjB3b3JsZCpcIixcbiAgICAgICAgICBcIi9maWxlcy9hJTJGYipcIixcbiAgICAgICAgICBcIi9AdXNlci81MCUyNSpcIixcbiAgICAgICAgICBcIi90YWdzL2MlMjMlM0YqXCIsXG4gICAgICAgIF0sXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgZXZlcnkgdGFnIG9mIG9uZSBjYWxsIGluIGEgc2luZ2xlIHJlcXVlc3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gYHJldmFsaWRhdGVUYWdgIGhhbmRzIHRoZSBoYW5kbGVyIGV2ZXJ5IHRhZyBhIHJlcXVlc3QgcmV2YWxpZGF0ZWQgYXRcbiAgICAgIC8vIG9uY2U7IGEgcmVxdWVzdCBwZXIgdGFnIGNvbXBldGVzIGZvciB0aGUgc2FtZSBxdW90YS5cbiAgICAgIGF3YWl0IHdpdGhEaXN0cmlidXRpb24oeyBJdGVtczogW10gfSkucmV2YWxpZGF0ZVRhZyhbXG4gICAgICAgIFwiX05fVF8vYVwiLFxuICAgICAgICBcIl9OX1RfL2JcIixcbiAgICAgIF0pO1xuXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvYSpcIiwgXCIvYipcIl1dKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHdob2xlIGFwcCB3aGVuIGEgdGFnIGhhcyBtb3JlIHJvd3MgdGhhbiBpdCB3YWxrc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUaGUgcm93cyBwYXN0IHRoZSBsYXN0IHBhZ2Ugd2Fsa2VkIGFyZSBwYWdlcyB0b287IGludmFsaWRhdGluZyBvbmx5IHRoZVxuICAgICAgLy8gb25lcyByZWFkIGxlZnQgdGhlIHJlc3Qgc3RhbGUgYXQgdGhlIGVkZ2UgZm9yIHVwIHRvIGEgeWVhci5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIgfSB9XSxcbiAgICAgICAgICAgICAgICBMYXN0RXZhbHVhdGVkS2V5OiB7IHBrOiB7IFM6IFwidGVzdC1idWlsZC1pZFwiIH0gfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pLnJldmFsaWRhdGVUYWcoXG4gICAgICAgIFwidGVzdC10YWdcIixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImlnbm9yZXMgcm93cyB0aGF0IGFub3RoZXIgdGFnIHNoYXJpbmcgdGhlIHByZWZpeCBvd25zXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIGBiZWdpbnNfd2l0aChzaywgXCJ1c2VyI1wiKWAgYWxzbyBtYXRjaGVzIHRoZSB0YWcgYHVzZXIjNDJgOiBpdHMgYmFyZVxuICAgICAgLy8gbWFya2VyIHJvdywgYW5kIGl0cyBtYXBwaW5nIHJvd3MuIFJlYWQgYXMgYHVzZXJgJ3MsIHRoZXkgYmVjYW1lXG4gICAgICAvLyBpbnZhbGlkYXRpb24gcGF0aHMgbGlrZSBgLzQyYCB0aGF0IG5hbWUgbm90aGluZy5cbiAgICAgIGF3YWl0IHdpdGhEaXN0cmlidXRpb24oe1xuICAgICAgICBJdGVtczogW1xuICAgICAgICAgIHsgc2s6IHsgUzogXCJ1c2VyIzQyXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ1c2VyIzQyI3Rlc3QtYnVpbGQtaWQvYWNjb3VudC5qc29uXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ1c2VyI3Rlc3QtYnVpbGQtaWQvcHJvZmlsZS5qc29uXCIgfSB9LFxuICAgICAgICBdLFxuICAgICAgfSkucmV2YWxpZGF0ZVRhZyhcInVzZXJcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9wcm9maWxlKlwiXV0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJhZGRzIHRoZSBidWlsZC10aW1lIHByZXJlbmRlcnMgdGhlIGJ1aWxkJ3MgdGFnIG1hbmlmZXN0IG5hbWVzLCByZWFkaW5nIGl0IG9uY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSBwcmVyZW5kZXIgaXMgd3JpdHRlbiBieSB0aGUgYWRhcHRlciwgbmV2ZXIgdGhyb3VnaCBgc2V0YCwgc28gaXQgaGFzXG4gICAgICAvLyBubyBtYXBwaW5nIHJvdzogdGhlIG1hbmlmZXN0IGlzIHRoZSBvbmx5IHJlY29yZCBvZiBpdHMgdGFncy5cbiAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHtcbiAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwicG9zdHMjdGVzdC1idWlsZC1pZC9ibG9nL2IuanNvblwiIH0gfV0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1hbmlmZXN0R2V0cyA9ICgpID0+XG4gICAgICAgIChHZXRPYmplY3RDb21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzLmZpbHRlcihcbiAgICAgICAgICAoW2lucHV0XSkgPT5cbiAgICAgICAgICAgIGlucHV0LktleSA9PT0gXCJ0ZXN0LWJ1aWxkLWlkL19jZGstbmV4dGpzLXRhZy1tYW5pZmVzdC5qc29uXCIsXG4gICAgICAgICk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogYXN5bmMgKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoeyBwb3N0czogW1wiYmxvZy9hXCIsIFwiaW5kZXhcIl0gfSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInBvc3RzXCIpO1xuICAgICAgYXdhaXQgY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwiY29uc3RydWN0b3JcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9ibG9nL2IqXCIsIFwiL2Jsb2cvYSpcIiwgXCIvXCIsIFwiLz8qXCJdXSk7XG4gICAgICBleHBlY3QobWFuaWZlc3RHZXRzKCkpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHdob2xlIGFwcCB3aGVuIHRoZSBidWlsZCdzIHRhZyBtYW5pZmVzdCBjYW5ub3QgYmUgcmVhZCwgYW5kIHJlYWRzIGl0IGFnYWluIG5leHQgdGltZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjZG5IYW5kbGVyID0gd2l0aERpc3RyaWJ1dGlvbih7IEl0ZW1zOiBbXSB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIkFjY2Vzc0RlbmllZFwiKSk7XG5cbiAgICAgIGF3YWl0IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInBvc3RzXCIpO1xuICAgICAgYXdhaXQgY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwicG9zdHNcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi8qXCJdXSk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgd2hvbGUgYXBwIHdoZW4gYSB0YWcncyBtYXJrZXIgcm93IGNhbm5vdCBiZSB3cml0dGVuXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIE90aGVyIGluc3RhbmNlcyB3b3VsZCBuZXZlciBzZWUgdGhlIHJldmFsaWRhdGlvbiwgc28gbm8gcGF0aCBsaXN0IGlzXG4gICAgICAvLyBlbm91Z2guXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZFxuICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKHsgSXRlbXM6IFtdIH0pXG4gICAgICAgICAgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJQcm92aXNpb25lZFRocm91Z2hwdXRFeGNlZWRlZFwiKSksXG4gICAgICApO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KS5yZXZhbGlkYXRlVGFnKFwicG9zdHNcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSB3aG9sZSBhcHAgd2hlbiBhIHRhZydzIG1hcHBpbmcgcm93cyBjYW5ub3QgYmUgcmVhZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBUaGUgbWFya2VyIHJvdyBpcyB3cml0dGVuIGJlZm9yZSB0aGUgUXVlcnksIHNvIGEgZmFpbGVkIFF1ZXJ5IGxlYXZlc1xuICAgICAgLy8gdGhlIHRhZyByZXZhbGlkYXRlZCBhdCB0aGUgb3JpZ2luIHdpdGggbm8gcGF0aHMgbmFtZWQgZm9yIHRoZSBlZGdlLlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBRdWVyeUNvbW1hbmRcbiAgICAgICAgICA/IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dEV4Y2VlZGVkXCIpKVxuICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHt9KSxcbiAgICAgICk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pLnJldmFsaWRhdGVUYWcoW1xuICAgICAgICBcIl9OX1RfL2FcIixcbiAgICAgICAgXCJwb3N0c1wiLFxuICAgICAgXSk7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZShcIndoZW4gQ2xvdWRGcm9udCdzIGludmFsaWRhdGlvbiBxdW90YSBpcyBmdWxsXCIsICgpID0+IHtcbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBqZXN0LnVzZUZha2VUaW1lcnMoKTtcbiAgICAgIH0pO1xuICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgamVzdC51c2VSZWFsVGltZXJzKCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcXVvdGFFcnJvciA9ICgpID0+XG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgbmV3IEVycm9yKFwiWW91ciByZXF1ZXN0IGNvbnRhaW5zIHRvbyBtYW55IGludmFsaWRhdGlvbnNcIiksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJUb29NYW55SW52YWxpZGF0aW9uc0luUHJvZ3Jlc3NcIixcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICBpdChcInJldHJpZXMgYXMgb25lIGFwcC13aWRlIHdpbGRjYXJkIGFmdGVyIGEgYmFja29mZlwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHBhZ2VzKFwidGVzdC10YWdcIiwgMikpO1xuICAgICAgICBtb2NrQ2xvdWRGcm9udFNlbmRcbiAgICAgICAgICAubW9ja1JlamVjdGVkVmFsdWVPbmNlKHF1b3RhRXJyb3IoKSlcbiAgICAgICAgICAubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHt9KTtcblxuICAgICAgICBjb25zdCBkb25lID0gY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG4gICAgICAgIGF3YWl0IGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZUFzeW5jKDEwMDApO1xuICAgICAgICBhd2FpdCBkb25lO1xuXG4gICAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9pc3IvMCpcIiwgXCIvaXNyLzEqXCJdLCBbXCIvKlwiXV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KFwiZ2l2ZXMgdXAgYWZ0ZXIgdGhlIGxhc3QgcmV0cnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBjZG5IYW5kbGVyID0gd2l0aERpc3RyaWJ1dGlvbihwYWdlcyhcInRlc3QtdGFnXCIsIDEpKTtcbiAgICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZWplY3RlZFZhbHVlKHF1b3RhRXJyb3IoKSk7XG5cbiAgICAgICAgY29uc3QgZG9uZSA9IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuICAgICAgICBhd2FpdCBqZXN0LmFkdmFuY2VUaW1lcnNCeVRpbWVBc3luYygzMDAwKTtcbiAgICAgICAgYXdhaXQgZXhwZWN0KGRvbmUpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcblxuICAgICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvaXNyLzAqXCJdLCBbXCIvKlwiXSwgW1wiLypcIl1dKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChcImRvZXMgbm90IHJldHJ5IGFueSBvdGhlciBlcnJvclwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHBhZ2VzKFwidGVzdC10YWdcIiwgMSkpO1xuICAgICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1JlamVjdGVkVmFsdWUobmV3IEVycm9yKFwiQWNjZXNzRGVuaWVkXCIpKTtcblxuICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvaXNyLzAqXCJdXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoXCJyZXRyaWVzIHRoZSBhcHAncyByb290IHVuZGVyIGEgYmFzZVBhdGggdG9vXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gYC9iYXNlLypgIG1hdGNoZXMgbmVpdGhlciBgL2Jhc2VgIG5vciBgL2Jhc2U/X3JzYz3igKZgOiByZXRyeWluZ1xuICAgICAgICAvLyBgcmV2YWxpZGF0ZVBhdGgoXCIvXCIpYCBhcyB0aGF0IGxlZnQgdGhlIGhvbWUgcGFnZSBzdGFsZSBhdCB0aGUgZWRnZS5cbiAgICAgICAgdXNlQmFzZVBhdGgoKTtcbiAgICAgICAgY29uc3QgY2RuSGFuZGxlciA9IHdpdGhEaXN0cmlidXRpb24oeyBJdGVtczogW10gfSk7XG4gICAgICAgIG1vY2tDbG91ZEZyb250U2VuZFxuICAgICAgICAgIC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UocXVvdGFFcnJvcigpKVxuICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe30pO1xuXG4gICAgICAgIGNvbnN0IGRvbmUgPSBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJfTl9UXy9cIik7XG4gICAgICAgIGF3YWl0IGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZUFzeW5jKDEwMDApO1xuICAgICAgICBhd2FpdCBkb25lO1xuXG4gICAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKClbMV0pLnRvRXF1YWwoW1wiL2Jhc2VcIiwgXCIvYmFzZT8qXCIsIFwiL2Jhc2UvKlwiXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVjb3JkcyBhIHByb2ZpbGUncyByZXZhbGlkYXRpb24gYXMgc3RhbGUgbm93LCBleHBpcmluZyBsYXRlclwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBiZWZvcmUgPSBEYXRlLm5vdygpO1xuICAgICAgYXdhaXQgaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwicG9zdHNcIiwgeyBleHBpcmU6IDYwIH0pO1xuXG4gICAgICBjb25zdCBbaW5wdXRdID0gKFVwZGF0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGlucHV0LktleS5zay5TKS50b0JlKFwicG9zdHNcIik7XG4gICAgICBleHBlY3QoaW5wdXQuVXBkYXRlRXhwcmVzc2lvbikudG9CZShcbiAgICAgICAgXCJTRVQgc3RhbGVBdCA9IDpzdGFsZUF0LCBleHBpcmVkQXQgPSA6ZXhwaXJlZEF0XCIsXG4gICAgICApO1xuICAgICAgY29uc3Qgc3RhbGVBdCA9IE51bWJlcihpbnB1dC5FeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzW1wiOnN0YWxlQXRcIl0uTik7XG4gICAgICBleHBlY3Qoc3RhbGVBdCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbChiZWZvcmUpO1xuICAgICAgZXhwZWN0KE51bWJlcihpbnB1dC5FeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzW1wiOmV4cGlyZWRBdFwiXS5OKSkudG9CZShcbiAgICAgICAgc3RhbGVBdCArIDYwXzAwMCxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgaGFuZGxlcidzIGhhbGYgb2YgYHJlcy5yZXZhbGlkYXRlKClgJ3MgQ0ROIGludmFsaWRhdGlvbjogdGhlIGhvb2tcbiAgICogaXQgcmVnaXN0ZXJzIGZvciBgaW52YWxpZGF0ZVJldmFsaWRhdGVkUGFnZWAgaW4gYHJ1bnRpbWUvY29yZS50c2AuIFRoZVxuICAgKiBydW50aW1lJ3MgaGFsZiBpcyBpbiBgY29yZS50ZXN0LnRzYC5cbiAgICovXG4gIGRlc2NyaWJlKFwidGhlIHJldmFsaWRhdGVkLXBhZ2UgaG9va1wiLCAoKSA9PiB7XG4gICAgY29uc3QgSE9PSyA9IFJFVkFMSURBVEVEX1BBR0VfSE9PSztcbiAgICBjb25zdCBnbG9iYWxzID0gZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPjtcbiAgICB0eXBlIEhvb2sgPSAocm91dGVzOiByZWFkb25seSBzdHJpbmdbXSkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgZGVsZXRlIGdsb2JhbHNbSE9PS107XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7IFBhcmFtZXRlcjogeyBWYWx1ZTogXCJFRElTVFJJQlVUSU9OXCIgfSB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICAoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9ja0NsZWFyKCk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkYXRlZFBhdGhzKCk6IHN0cmluZ1tdIHtcbiAgICAgIGNvbnN0IFtpbnB1dF0gPSAoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9ja1xuICAgICAgICAuY2FsbHNbMF07XG4gICAgICByZXR1cm4gaW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXM7XG4gICAgfVxuXG4gICAgaXQoXCJpcyByZWdpc3RlcmVkIG9ubHkgYmVoaW5kIGEgZGlzdHJpYnV0aW9uXCIsICgpID0+IHtcbiAgICAgIG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgICAgZXhwZWN0KGdsb2JhbHNbSE9PS10pLnRvQmVVbmRlZmluZWQoKTtcblxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwicGFyYW1cIjtcbiAgICAgIG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgICAgZXhwZWN0KHR5cGVvZiBnbG9iYWxzW0hPT0tdKS50b0JlKFwiZnVuY3Rpb25cIik7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSBwYWdlIGFuZCBpdHMgZGF0YSByb3V0ZSB1bmRlciBiYXNlUGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJwYXJhbVwiO1xuICAgICAgbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQsIGJhc2VQYXRoOiBcImJhc2VcIiB9KTtcbiAgICAgIGF3YWl0IChnbG9iYWxzW0hPT0tdIGFzIEhvb2spKFtcbiAgICAgICAgXCIvYmxvZy9oZWxsb1wiLFxuICAgICAgICBcIi9fbmV4dC9kYXRhL3Rlc3QtYnVpbGQtaWQvYmxvZy9oZWxsby5qc29uXCIsXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKCkpLnRvRXF1YWwoW1xuICAgICAgICBcIi9iYXNlL2Jsb2cvaGVsbG8qXCIsXG4gICAgICAgIFwiL2Jhc2UvX25leHQvZGF0YS90ZXN0LWJ1aWxkLWlkL2Jsb2cvaGVsbG8uanNvbipcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzcGVsbHMgb3V0IHRoZSByb290IHJhdGhlciB0aGFuIGludmFsaWRhdGluZyB0aGUgd2hvbGUgYXBwXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInBhcmFtXCI7XG4gICAgICBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICAgIGF3YWl0IChnbG9iYWxzW0hPT0tdIGFzIEhvb2spKFtcbiAgICAgICAgXCIvXCIsXG4gICAgICAgIFwiL19uZXh0L2RhdGEvdGVzdC1idWlsZC1pZC9pbmRleC5qc29uXCIsXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKCkpLnRvRXF1YWwoW1xuICAgICAgICBcIi9cIixcbiAgICAgICAgXCIvPypcIixcbiAgICAgICAgXCIvX25leHQvZGF0YS90ZXN0LWJ1aWxkLWlkL2luZGV4Lmpzb24qXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2VuZHMgZXZlcnkgcGF0aCBvbmNlLCBpbiBvbmUgaW52YWxpZGF0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInBhcmFtXCI7XG4gICAgICBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICAgIGF3YWl0IChnbG9iYWxzW0hPT0tdIGFzIEhvb2spKFtcbiAgICAgICAgXCIvYmxvZ1wiLFxuICAgICAgICBcIi9fbmV4dC9kYXRhL3Rlc3QtYnVpbGQtaWQvZW4vYmxvZy5qc29uXCIsXG4gICAgICAgIFwiL2VuL2Jsb2dcIixcbiAgICAgICAgXCIvYmxvZ1wiLFxuICAgICAgXSk7XG4gICAgICBleHBlY3QoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXG4gICAgICAgIFwiL2Jsb2cqXCIsXG4gICAgICAgIFwiL19uZXh0L2RhdGEvdGVzdC1idWlsZC1pZC9lbi9ibG9nLmpzb24qXCIsXG4gICAgICAgIFwiL2VuL2Jsb2cqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJyZXNldFJlcXVlc3RDYWNoZVwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY29tcGxldGUgd2l0aG91dCBlcnJvcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZXhwZWN0KGhhbmRsZXIucmVzZXRSZXF1ZXN0Q2FjaGUoKSkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
1683
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtY2FjaGUtaGFuZGxlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvczMtY2FjaGUtaGFuZGxlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELHFDQUE2RDtBQUM3RCxxQ0FBaUM7QUFDakMseUNBQWlDO0FBQ2pDLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsZ0VBQWdFO0FBQ2hFLE1BQU0sZUFBZSxHQUE0QixFQUFFLENBQUM7QUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO0lBQ3BDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDO0NBQ2xELENBQUMsQ0FBQyxDQUFDO0FBQ0osZUFBZTtBQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUVqQyxrRUFHb0M7QUFDcEMsOERBT2tDO0FBQ2xDLGtEQUs0QjtBQUM1QixvREFBZ0Q7QUFPaEQseURBQW9EO0FBQ3BELHlEQUF1RDtBQUN2RCxrREFBNEQ7QUFFNUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNqQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxF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O1lBQzVELElBQUksaUNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLE1BQU8sT0FBTyxDQUFDLElBQUksQ0FBVSxDQUFDO2dCQUM1QixPQUFPO2dCQUNQLHdDQUF3QztnQkFDeEMsVUFBVTtnQkFDVixPQUFPO2FBQ1IsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLDZDQUF5QixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLFFBQVE7Z0JBQ1IseUNBQXlDO2dCQUN6QyxXQUFXO2FBQ1osQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzlDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7IG1rZHRlbXBTeW5jLCBybVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG4vLyBXaGF0IGByZXF1aXJlLmNhY2hlYCBob2xkcyBpbiBhIHJ1bm5pbmcgc2VydmVyLiBKZXN0J3MgYGNyZWF0ZVJlcXVpcmVgIGhhbmRzXG4vLyBvdXQgYSBjYWNoZSBvZiBpdHMgb3duIHRoYXQgbm90aGluZyBpcyBldmVyIGxvYWRlZCBpbnRvLCBzbyB0aGUgaGFuZGxlcidzXG4vLyBsb29rdXAgb2YgTmV4dC5qcydzIHRhZyBtYW5pZmVzdCByZWFkcyB0aGlzIHN0YW5kLWluIGluc3RlYWQuXG5jb25zdCBtb2NrTW9kdWxlQ2FjaGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5qZXN0Lm1vY2soXCJub2RlOm1vZHVsZVwiLCAoKSA9PiAoe1xuICAuLi5qZXN0LnJlcXVpcmVBY3R1YWwoXCJub2RlOm1vZHVsZVwiKSxcbiAgY3JlYXRlUmVxdWlyZTogKCkgPT4gKHsgY2FjaGU6IG1vY2tNb2R1bGVDYWNoZSB9KSxcbn0pKTtcbi8vIE1vY2sgQVdTIFNES1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LXMzXCIpO1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCIpO1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LWNsb3VkZnJvbnRcIik7XG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtc3NtXCIpO1xuXG5pbXBvcnQge1xuICBDbG91ZEZyb250Q2xpZW50LFxuICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7XG4gIEJhdGNoR2V0SXRlbUNvbW1hbmQsXG4gIERlbGV0ZUl0ZW1Db21tYW5kLFxuICBEeW5hbW9EQkNsaWVudCxcbiAgUHV0SXRlbUNvbW1hbmQsXG4gIFF1ZXJ5Q29tbWFuZCxcbiAgVXBkYXRlSXRlbUNvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcbmltcG9ydCB7XG4gIFMzQ2xpZW50LFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBEZWxldGVPYmplY3RDb21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBTU01DbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNzbVwiO1xuaW1wb3J0IHsgQ2FjaGVIYW5kbGVyQ29udGV4dCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi9pbmNyZW1lbnRhbC1jYWNoZVwiO1xuaW1wb3J0IHtcbiAgSW5jcmVtZW50YWxDYWNoZVZhbHVlLFxuICBDYWNoZWRSb3V0ZUtpbmQsXG4gIEluY3JlbWVudGFsQ2FjaGVLaW5kLFxufSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yZXNwb25zZS1jYWNoZVwiO1xuaW1wb3J0IHsgUzNDYWNoZUhhbmRsZXIgfSBmcm9tIFwiLi9zMy1jYWNoZS1oYW5kbGVyXCI7XG5pbXBvcnQgeyBzaGFyZWRUYWdNYW5pZmVzdCB9IGZyb20gXCIuL3VzZS1jYWNoZS1jb21tb25cIjtcbmltcG9ydCB7IFJFVkFMSURBVEVEX1BBR0VfSE9PSyB9IGZyb20gXCIuLi9ydW50aW1lL21hbmlmZXN0XCI7XG5cbmNvbnN0IG1vY2tTM1NlbmQgPSBqZXN0LmZuKCk7XG5jb25zdCBtb2NrRHluYW1vU2VuZCA9IGplc3QuZm4oKTtcbmNvbnN0IG1vY2tDbG91ZEZyb250U2VuZCA9IGplc3QuZm4oKTtcbmNvbnN0IG1vY2tTc21TZW5kID0gamVzdC5mbigpO1xuXG4oUzNDbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgc2VuZDogbW9ja1MzU2VuZCxcbn0pKTtcblxuKER5bmFtb0RCQ2xpZW50IGFzIGplc3QuTW9jaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gIHNlbmQ6IG1vY2tEeW5hbW9TZW5kLFxufSkpO1xuXG4oQ2xvdWRGcm9udENsaWVudCBhcyBqZXN0Lk1vY2spLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICBzZW5kOiBtb2NrQ2xvdWRGcm9udFNlbmQsXG59KSk7XG5cbihTU01DbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgc2VuZDogbW9ja1NzbVNlbmQsXG59KSk7XG5cbmRlc2NyaWJlKFwiUzNEeW5hbW9DYWNoZUhhbmRsZXJcIiwgKCkgPT4ge1xuICBsZXQgaGFuZGxlcjogUzNDYWNoZUhhbmRsZXI7XG4gIGxldCBtb2NrQ29udGV4dDogQ2FjaGVIYW5kbGVyQ29udGV4dDtcbiAgbGV0IGRpc3REaXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKiogU3RhZ2UgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCBmb3IgYW4gYXBwIHdpdGggYGJhc2VQYXRoOiBcIi9iYXNlXCJgLiAqL1xuICBjb25zdCB1c2VCYXNlUGF0aCA9ICgpID0+IHtcbiAgICBkaXN0RGlyID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJzMy1jYWNoZS1oYW5kbGVyLVwiKSk7XG4gICAgd3JpdGVGaWxlU3luYyhcbiAgICAgIGpvaW4oZGlzdERpciwgXCJyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgY29uZmlnOiB7IGJhc2VQYXRoOiBcIi9iYXNlXCIgfSB9KSxcbiAgICApO1xuICAgIG1vY2tDb250ZXh0LnNlcnZlckRpc3REaXIgPSBqb2luKGRpc3REaXIsIFwic2VydmVyXCIpO1xuICB9O1xuXG4gIC8vIEhlbHBlciB0byBjcmVhdGUgc2V0IGNvbnRleHQgd2l0aCB0YWdzXG4gIGNvbnN0IGNyZWF0ZVNldENvbnRleHQgPSAodGFnczogc3RyaW5nW10pID0+ICh7XG4gICAgZmV0Y2hDYWNoZTogdHJ1ZSBhcyBjb25zdCxcbiAgICB0YWdzLFxuICB9KTtcblxuICAvKipcbiAgICogVGhlIGlucHV0IGEgbW9ja2VkIGNvbW1hbmQgd2FzIGNvbnN0cnVjdGVkIHdpdGguIFRoZSBTREsncyBjb21tYW5kIGNsYXNzZXNcbiAgICogYXJlIGF1dG9tb2NrZWQsIHNvIGFuIGluc3RhbmNlIGNhcnJpZXMgbm90aGluZyBvZiBpdHMgb3duLlxuICAgKi9cbiAgY29uc3QgY29tbWFuZElucHV0ID0gKGNvbW1hbmQ6IHVua25vd24sIHR5cGU6IHVua25vd24pID0+IHtcbiAgICBjb25zdCBtb2NrID0gdHlwZSBhcyBqZXN0Lk1vY2s7XG4gICAgcmV0dXJuIG1vY2subW9jay5jYWxsc1ttb2NrLm1vY2suaW5zdGFuY2VzLmluZGV4T2YoY29tbWFuZCldWzBdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBbnN3ZXIgRHluYW1vREIgYnkgY29tbWFuZCB0eXBlIHJhdGhlciB0aGFuIGJ5IGNhbGwgb3JkZXI6IGByZXZhbGlkYXRlVGFnYFxuICAgKiB3cml0ZXMgaXRzIHRhZyBtYXJrZXIgYmVmb3JlIHF1ZXJ5aW5nIHRoZSB0YWcncyBtYXBwaW5nIHJvd3MsIGFuZCB3aGljaCBvZlxuICAgKiB0aG9zZSBjb21lcyBmaXJzdCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuIGBnZXRgIGlzIHRoZSBtYXJrZXIgcm93IGV2ZXJ5XG4gICAqIHJlcXVlc3RlZCB0YWcgaGFzLCBhcyBhIGBHZXRJdGVtYCB3b3VsZCBoYXZlIHJldHVybmVkIGl0LlxuICAgKi9cbiAgY29uc3QgZHluYW1vUmVzcG9uc2VzID0gKHJlc3BvbnNlczoge1xuICAgIHF1ZXJ5PzogdW5rbm93bjtcbiAgICBnZXQ/OiB7IEl0ZW0/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuICB9KSA9PiB7XG4gICAgbW9ja0R5bmFtb1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PiB7XG4gICAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlcy5xdWVyeSA/PyB7fSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIEJhdGNoR2V0SXRlbUNvbW1hbmQpIHtcbiAgICAgICAgY29uc3QgeyBSZXF1ZXN0SXRlbXMgfSA9IGNvbW1hbmRJbnB1dChjb21tYW5kLCBCYXRjaEdldEl0ZW1Db21tYW5kKTtcbiAgICAgICAgY29uc3QgW1t0YWJsZSwgeyBLZXlzIH1dXSA9IE9iamVjdC5lbnRyaWVzKFJlcXVlc3RJdGVtcykgYXMgW1xuICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICB7IEtleXM6IHsgc2s6IHVua25vd24gfVtdIH0sXG4gICAgICAgIF1bXTtcbiAgICAgICAgY29uc3QgaXRlbSA9IHJlc3BvbnNlcy5nZXQ/Lkl0ZW07XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgIFJlc3BvbnNlczoge1xuICAgICAgICAgICAgW3RhYmxlXTogaXRlbSA/IEtleXMubWFwKCh7IHNrIH0pID0+ICh7IC4uLml0ZW0sIHNrIH0pKSA6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIERyb3AgdGhlIHByb2Nlc3MncyB0YWcgbWFuaWZlc3QsIHNvIHRoZSBuZXh0IGhhbmRsZXIgc3RhcnRzIHdpdGggb25lIG9mXG4gICAqIGl0cyBvd24sIGFzIGEgbmV3IGluc3RhbmNlIGRvZXMuXG4gICAqL1xuICBjb25zdCByZXNldFRhZ01hbmlmZXN0ID0gKCkgPT4ge1xuICAgIGRlbGV0ZSAoZ2xvYmFsVGhpcyBhcyBSZWNvcmQ8c3ltYm9sLCB1bmtub3duPilbXG4gICAgICBTeW1ib2wuZm9yKFwiY2RrLW5leHRqcy51c2UtY2FjaGUudGFnLW1hbmlmZXN0XCIpXG4gICAgXTtcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBtb2NrQ29udGV4dCA9IHsgZGV2OiBmYWxzZSB9IGFzIENhY2hlSGFuZGxlckNvbnRleHQ7XG4gICAgcmVzZXRUYWdNYW5pZmVzdCgpO1xuXG4gICAgLy8gU2V0IHVwIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUUgPSBcInRlc3QtYnVja2V0XCI7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRSA9IFwidGVzdC10YWJsZVwiO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQlVJTERfSUQgPSBcInRlc3QtYnVpbGQtaWRcIjtcbiAgICBwcm9jZXNzLmVudi5BV1NfUkVHSU9OID0gXCJ1cy1lYXN0LTFcIjtcblxuICAgIC8vIFN1cHByZXNzIGV4cGVjdGVkIHdhcm5pbmdzIGdsb2JhbGx5ICh0ZXN0cyBkZWxpYmVyYXRlbHkgdHJpZ2dlciB3YXJuaW5ncylcbiAgICBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIGhhbmRsZXIgPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCBtb2Nrc1xuICAgIG1vY2tTM1NlbmQubW9ja1Jlc2V0KCk7XG4gICAgLy8gQW4gZW1wdHkgYnVja2V0OiBubyBvYmplY3QsIHN1Y2ggYXMgbm8gYnVpbGQgdGFnIG1hbmlmZXN0LlxuICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNldCgpO1xuICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzZXQoKTtcbiAgICBtb2NrU3NtU2VuZC5tb2NrUmVzZXQoKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAvLyBDbGVhbiB1cCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRTtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRTtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19CVUlMRF9JRDtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTjtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRTtcbiAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSUQ7XG4gICAgaWYgKGRpc3REaXIpIHtcbiAgICAgIHJtU3luYyhkaXN0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICBkaXN0RGlyID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgY29uc29sZS53YXJuXG4gICAgamVzdC5yZXN0b3JlQWxsTW9ja3MoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJnZXRcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHJldHVybiBudWxsIHdoZW4gUzMgYnVja2V0IGlzIG5vdCBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FO1xuXG4gICAgICBjb25zdCBoYW5kbGVyV2l0aG91dEJ1Y2tldCA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXJXaXRob3V0QnVja2V0LmdldChcInRlc3Qta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0cmlldmUgYW5kIHBhcnNlIGNhY2hlIHZhbHVlIGZyb20gUzNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnRlc3Q8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjYWNoZVZhbHVlID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHZhbHVlOiB0ZXN0RGF0YSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KGNhY2hlVmFsdWUpKSxcbiAgICAgICAgfSxcbiAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwidGVzdC1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChjYWNoZVZhbHVlKTtcbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KEdldE9iamVjdENvbW1hbmQpKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaGFuZHMgYmFjayB0aGUgbGlmZXRpbWUgdGhlIGVudHJ5IHdhcyBzdG9yZWQgd2l0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBuZXh0IDE2LjQgYWdlcyBhbiBlbnRyeSBieSB0aGlzIG92ZXIgaXRzIG93biBwZXItcHJvY2VzcyBsaWZldGltZXMsIHNvXG4gICAgICAvLyBhbiBpbnN0YW5jZSB0aGF0IG5ldmVyIHJlbmRlcmVkIHRoZSBwYWdlIHN0aWxsIHJldmFsaWRhdGVzIGl0IG9uIHRpbWUuXG4gICAgICBjb25zdCBzdG9yZWQgPSAoY2FjaGVDb250cm9sOiB1bmtub3duKSA9PlxuICAgICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7XG4gICAgICAgICAgQm9keToge1xuICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZShcbiAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogMSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogeyBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsIGh0bWw6IFwiPHAvPlwiIH0sXG4gICAgICAgICAgICAgICAgY2FjaGVDb250cm9sLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICBjb25zdCBnZXQgPSAoKSA9PlxuICAgICAgICBoYW5kbGVyLmdldChcIi9pc3IvMVwiLCB7XG4gICAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgIH0pO1xuXG4gICAgICBzdG9yZWQoeyByZXZhbGlkYXRlOiA2MCwgZXhwaXJlOiAzMDAgfSk7XG4gICAgICBleHBlY3QoKGF3YWl0IGdldCgpKT8uY2FjaGVDb250cm9sKS50b0VxdWFsKHtcbiAgICAgICAgcmV2YWxpZGF0ZTogNjAsXG4gICAgICAgIGV4cGlyZTogMzAwLFxuICAgICAgfSk7XG4gICAgICBzdG9yZWQoeyByZXZhbGlkYXRlOiBmYWxzZSB9KTtcbiAgICAgIGV4cGVjdCgoYXdhaXQgZ2V0KCkpPy5jYWNoZUNvbnRyb2wpLnRvRXF1YWwoe1xuICAgICAgICByZXZhbGlkYXRlOiBmYWxzZSxcbiAgICAgICAgZXhwaXJlOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIC8vIEFuIGVudHJ5IHN0b3JlZCBiZWZvcmUgdGhpcywgb3IgYSBtYWxmb3JtZWQgb25lLCBsZWF2ZXMgTmV4dC5qcyBvbiB0aGVcbiAgICAgIC8vIGxpZmV0aW1lIGl0IGtub3dzLlxuICAgICAgZm9yIChjb25zdCBtYWxmb3JtZWQgb2YgW1xuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgcmV2YWxpZGF0ZTogMCB9LFxuICAgICAgICB7IGV4cGlyZTogNSB9LFxuICAgICAgICBcIjYwXCIsXG4gICAgICBdKSB7XG4gICAgICAgIHN0b3JlZChtYWxmb3JtZWQpO1xuICAgICAgICBleHBlY3QoKGF3YWl0IGdldCgpKT8uY2FjaGVDb250cm9sKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gbnVsbCB3aGVuIFMzIG9iamVjdCBub3QgZm91bmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe1xuICAgICAgICBCb2R5OiBudWxsLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwibWlzc2luZy1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIGEgc2VlZGVkIHByZXJlbmRlciBvbmx5IHdoZW4gaXRzIHRhZyBtYXJrZXIgaXMgbmV3ZXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSBidWlsZC10aW1lIHByZXJlbmRlciBpcyB3cml0dGVuIGFzIGEgZmlsZSBieSB0aGUgYWRhcHRlcidzXG4gICAgICAvLyBgb25CdWlsZENvbXBsZXRlYCwgbmV2ZXIgdGhyb3VnaCBgc2V0YCwgc28gaXQgaGFzIG5vIGB0YWdzYCBhcnJheSBhbmQgbm9cbiAgICAgIC8vIER5bmFtb0RCIG1hcHBpbmcgcm93cyAtIGl0cyB0YWdzIGxpdmUgaW4gdGhlIHJlbmRlcidzXG4gICAgICAvLyBgeC1uZXh0LWNhY2hlLXRhZ3NgIGhlYWRlci4gVHdvIGJ1Z3MgbWV0IGhlcmU6IHRob3NlIGhlYWRlciB0YWdzIHdlcmVcbiAgICAgIC8vIGlnbm9yZWQsIHNvIGByZXZhbGlkYXRlVGFnYCBjb3VsZCBub3QgcmVhY2ggYW55IHN0YXRpYyBwYWdlOyBhbmQgdGhlXG4gICAgICAvLyBtYXBwaW5nIHJvd3MgYHNldGAgd3JpdGVzIHdlcmUgc3RhbXBlZCBgcmV2YWxpZGF0ZWRBdCA9IG5vd2AsIHdoaWNoIGlzXG4gICAgICAvLyAqYWZ0ZXIqIHRoZSBlbnRyeSdzIG93biBgbGFzdE1vZGlmaWVkYCwgc28gYSB0YWdnZWQgZW50cnkgbG9va2VkXG4gICAgICAvLyByZXZhbGlkYXRlZCB0aGUgbW9tZW50IGl0IHdhcyBzdG9yZWQgYW5kIGV2ZXJ5IHJlcXVlc3QgcmUtcmVuZGVyZWQuXG4gICAgICAvLyBNZWFzdXJlZCBhZ2FpbnN0IG5leHQuanMncyBgdGVzdC9lMmUvYXBwLWRpci9yZXN1bWUtZGF0YS1jYWNoZWAuXG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3Qgc2VlZGVkID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQsXG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICAgIGh0bWw6IFwiPGh0bWw+c2VlZGVkPC9odG1sPlwiLFxuICAgICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcIl9OX1RfLyxfTl9UXy9wYWdlLHRlc3RcIiB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHMzQm9keSA9ICgpID0+ICh7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogamVzdFxuICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShzZWVkZWQpKSxcbiAgICAgICAgfSxcbiAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kID8gczNCb2R5KCkgOiB7fSksXG4gICAgICApO1xuICAgICAgY29uc3QgZ2V0Q3R4ID0ge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9IGFzIGNvbnN0O1xuICAgICAgLy8gRWFjaCBzdGVwIGJlbG93IGNoYW5nZXMgdGhlIG1hcmtlcnMgRHluYW1vREIgaG9sZHM7IGEgbmV3IGluc3RhbmNlXG4gICAgICAvLyByZWFkcyB0aGVtIGFmcmVzaC5cbiAgICAgIGNvbnN0IGZyZXNoSGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgcmVzZXRUYWdNYW5pZmVzdCgpO1xuICAgICAgICByZXR1cm4gbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSk7XG4gICAgICB9O1xuXG4gICAgICAvLyBObyBtYXJrZXIgYXQgYWxsOiB0aGUgdGFnIHdhcyBuZXZlciByZXZhbGlkYXRlZC5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7fSk7XG4gICAgICBleHBlY3QoYXdhaXQgZnJlc2hIYW5kbGVyKCkuZ2V0KFwiaW5kZXhcIiwgZ2V0Q3R4KSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBIG1hcmtlciBvbGRlciB0aGFuIHRoZSBlbnRyeSBtZWFucyB0aGUgZW50cnkgYWxyZWFkeSByZWZsZWN0cyBpdC5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIGdldDogeyBJdGVtOiB7IHJldmFsaWRhdGVkQXQ6IHsgTjogU3RyaW5nKGxhc3RNb2RpZmllZCAtIDEwMDApIH0gfSB9LFxuICAgICAgfSk7XG4gICAgICBleHBlY3QoYXdhaXQgZnJlc2hIYW5kbGVyKCkuZ2V0KFwiaW5kZXhcIiwgZ2V0Q3R4KSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIEEgbmV3ZXIgbWFya2VyOiB0aGUgZW50cnkgY29tZXMgYmFjayBtYXJrZWQgZXhwaXJlZCwgYW5kIHN0YXlzIGluIFMzLlxuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgZ2V0OiB7IEl0ZW06IHsgcmV2YWxpZGF0ZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgMTAwMCkgfSB9IH0sXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChhd2FpdCBmcmVzaEhhbmRsZXIoKS5nZXQoXCJpbmRleFwiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgbGFzdE1vZGlmaWVkOiAtMSxcbiAgICAgICAgdmFsdWU6IHNlZWRlZC52YWx1ZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInJlcG9ydHMgYSByZXZhbGlkYXRlZCByZXNwb25zZSBlbnRyeSBhcyBleHBpcmVkIHJhdGhlciB0aGFuIGFzIGEgbWlzc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBgbGFzdE1vZGlmaWVkOiAtMWAgaXMgaG93IGEgY2FjaGUgaGFuZGxlciBzYXlzIFwiZXhwaXJlZCwgcmUtcmVuZGVyXG4gICAgICAvLyBiZWZvcmUgYW5zd2VyaW5nXCI6IGBJbmNyZW1lbnRhbENhY2hlLmdldGAgdHVybnMgaXQgaW50byBgaXNTdGFsZTogLTFgLFxuICAgICAgLy8gd2hpY2ggYGFwcC1wYWdlLXJ1bnRpbWVgIHJlYWRzIGFzIGFuIG9uLWRlbWFuZCByZXZhbGlkYXRpb24gYW5kIGFuc3dlcnNcbiAgICAgIC8vIHdpdGggYSBibG9ja2luZyByZW5kZXIgb2YgdGhpcyByb3V0ZSwgdGhlbiBzdG9yZXMgaXQuIFJldHVybmluZyBgbnVsbGBcbiAgICAgIC8vIGlzIG5vdCBlcXVpdmFsZW50LiBBIG1pc3Mgb24gYSBQUFIgcm91dGUgd2hvc2UgYHByZXJlbmRlci1tYW5pZmVzdC5qc29uYFxuICAgICAgLy8gZW50cnkgaGFzIGEgYGZhbGxiYWNrYCAoYGNvbXB1dGU6IFwicmVzdW1pbmdcImApIGlzIGFuc3dlcmVkIGZyb20gdGhlXG4gICAgICAvLyByb3V0ZSdzIGZhbGxiYWNrIHNoZWxsIC0gYGNhY2hlLWNvbnRyb2w6IHByaXZhdGUsIG5vLXN0b3JlYCwgbm9cbiAgICAgIC8vIGB4LW5leHRqcy1jYWNoZWAgLSBhbmQgd2l0aG91dCBgcGFydGlhbFByZWZldGNoaW5nYCBub3RoaW5nIGV2ZXJcbiAgICAgIC8vIHVwZ3JhZGVzIHRoYXQgYmFjayBpbnRvIGEgY29uY3JldGUgZW50cnkuIFNvIHRoZSBmaXJzdCBgcmV2YWxpZGF0ZVRhZ2BcbiAgICAgIC8vIHRvIHJlYWNoIGEgcGFnZSBsZWZ0IGl0IHVuY2FjaGVhYmxlIGFuZCBkeW5hbWljYWxseSByZXN1bWVkIHBlciByZXF1ZXN0XG4gICAgICAvLyBmb3IgdGhlIHJlc3Qgb2YgdGhlIGRlcGxveW1lbnQncyBsaWZlLCB3aGljaCBpcyB3aGF0IHRoZSBpc3IgZTJlJ3NcbiAgICAgIC8vIG1pc3NpbmcgYHgtbmV4dGpzLWNhY2hlYCBoZWFkZXIgd2FzLlxuICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IHtcbiAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgICB0YWdzOiBbXCJjb2xsZWN0aW9uXCJdLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgICBodG1sOiBcIjxodG1sPmlzcjwvaHRtbD5cIixcbiAgICAgICAgICBoZWFkZXJzOiB7IFwieC1uZXh0LWNhY2hlLXRhZ3NcIjogXCJjb2xsZWN0aW9uXCIgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBtb2NrUzNTZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBHZXRPYmplY3RDb21tYW5kXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Ub1N0cmluZzogamVzdFxuICAgICAgICAgICAgICAgICAgICAuZm4oKVxuICAgICAgICAgICAgICAgICAgICAubW9ja1Jlc29sdmVkVmFsdWUoSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgZ2V0OiB7IEl0ZW06IHsgcmV2YWxpZGF0ZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgMTAwMCkgfSB9IH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5nZXQoXCJpc3IvMVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgbGFzdE1vZGlmaWVkOiAtMSwgdmFsdWU6IHN0b3JlZC52YWx1ZSB9KTtcbiAgICAgIC8vIFRoZSBib2R5IGlzIHN0aWxsIHRoZXJlIGZvciB0aGUgcmVuZGVyIHRoYXQgZmFpbHMsIGFuZCBgc2V0YCBvdmVyd3JpdGVzXG4gICAgICAvLyBpdCB3aXRoIGEgYGxhc3RNb2RpZmllZGAgcGFzdCB0aGUgbWFya2VyLlxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInJlcG9ydHMgYSByZXZhbGlkYXRlZCBmZXRjaCBlbnRyeSBhcyBhIG1pc3Mgc28gdGhlIHJlcXVlc3QgcmVmZXRjaGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoZSBvcHBvc2l0ZSBvZiBhIHJlc3BvbnNlIGVudHJ5OiByZXVzaW5nIGEgcmV2YWxpZGF0ZWQgYGZldGNoYCBib2R5IGlzXG4gICAgICAvLyBzZXJ2aW5nIHN0YWxlIGRhdGEsIHNvIHRoaXMgcmVhZHMgYXMgYSBtaXNzLCBsaWtlIE5leHQuanMncyBvd25cbiAgICAgIC8vIGBGaWxlU3lzdGVtQ2FjaGVgIGRvZXMgZm9yIGl0cyBgcmV2YWxpZGF0ZWRUYWdzYC5cbiAgICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IERhdGUubm93KCk7XG4gICAgICBjb25zdCBzdG9yZWQgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgICAgdGFnczogW1wiY29sbGVjdGlvblwiXSxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuRkVUQ0gsXG4gICAgICAgICAgZGF0YTogeyBoZWFkZXJzOiB7fSwgYm9keTogXCJzdGFsZVwiLCBzdGF0dXM6IDIwMCwgdXJsOiBcIi9hcGlcIiB9LFxuICAgICAgICAgIHJldmFsaWRhdGU6IDEwLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAgICAgICAgIC5mbigpXG4gICAgICAgICAgICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZShKU09OLnN0cmluZ2lmeShzdG9yZWQpKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBnZXQ6IHsgSXRlbTogeyByZXZhbGlkYXRlZEF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyAxMDAwKSB9IH0gfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcImZldGNoLWtleVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkZFVENILFxuICAgICAgICByZXZhbGlkYXRlOiAxMCxcbiAgICAgICAgZmV0Y2hVcmw6IFwiaHR0cHM6Ly9leGFtcGxlLnRlc3QvYXBpXCIsXG4gICAgICAgIGZldGNoSWR4OiAxLFxuICAgICAgICB0YWdzOiBbXCJjb2xsZWN0aW9uXCJdLFxuICAgICAgICBzb2Z0VGFnczogW10sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICAgIC8vIE5vdCBkZWxldGVkOiB0aGUgcmVmZXRjaCB0aGlzIHByb3Zva2VzIG92ZXJ3cml0ZXMgaXQgdGhyb3VnaCBgc2V0YC5cbiAgICAgIC8vIERlbGV0aW5nIGl0IGhlcmUgcmFjZWQgdGhhdCB3cml0ZSwgc28gYSBjb25jdXJyZW50IHJlcXVlc3QncyBmcmVzaFxuICAgICAgLy8gZW50cnkgY291bGQgYmUgdGhlIG9uZSByZW1vdmVkLlxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoRGVsZXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcImNoZWNrcyBhIGZldGNoIGVudHJ5IGFnYWluc3QgdGhlIHJlcXVlc3QncyBpbXBsaWNpdCB0YWdzLCBub3QgaXRzIG93blwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBbiB1bnRhZ2dlZCBgY2FjaGU6IFwiZm9yY2UtY2FjaGVcImAgZmV0Y2ggaXMgc3RvcmVkIHdpdGggbm8gdGFncyBhdCBhbGwgLVxuICAgICAgLy8gdGhlIGltcGxpY2l0IGBfTl9UXy88cGF0aD5gIGNoYWluIHJlYWNoZXMgdGhlIGhhbmRsZXIgb25seSBhc1xuICAgICAgLy8gYGN0eC5zb2Z0VGFnc2AsIHdoaWNoIGlzIHRoZSBzb3VyY2UgTmV4dC5qcydzIG93biBgRmlsZVN5c3RlbUNhY2hlYCByZWFkc1xuICAgICAgLy8gZm9yIGEgYEZFVENIYCBnZXQuIENoZWNraW5nIHRoZSBzdG9yZWQgdGFncyBpbnN0ZWFkIGxlZnQgdGhpcyBlbnRyeSB3aXRoXG4gICAgICAvLyBub3RoaW5nIHRvIGNoZWNrIGFuZCBubyBgcmV2YWxpZGF0ZVBhdGhgIGNvdWxkIGV2ZXIgZXZpY3QgaXQuXG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3Qgc3RvcmVkID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQsXG4gICAgICAgIHRhZ3M6IFtdLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5GRVRDSCxcbiAgICAgICAgICBkYXRhOiB7IGhlYWRlcnM6IHt9LCBib2R5OiBcInN0YWxlXCIsIHN0YXR1czogMjAwLCB1cmw6IFwiL2FwaVwiIH0sXG4gICAgICAgICAgcmV2YWxpZGF0ZTogMTAsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgQm9keToge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KHN0b3JlZCkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIGdldDogeyBJdGVtOiB7IHJldmFsaWRhdGVkQXQ6IHsgTjogU3RyaW5nKGxhc3RNb2RpZmllZCArIDEwMDApIH0gfSB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwiZmV0Y2gta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuRkVUQ0gsXG4gICAgICAgIHJldmFsaWRhdGU6IDEwLFxuICAgICAgICBmZXRjaFVybDogXCJodHRwczovL25leHQtZGF0YS1hcGktZW5kcG9pbnQudGVzdC9hcGkvcmFuZG9tXCIsXG4gICAgICAgIGZldGNoSWR4OiAxLFxuICAgICAgICB0YWdzOiBbXSxcbiAgICAgICAgc29mdFRhZ3M6IFtcIl9OX1RfL2xheW91dFwiLCBcIl9OX1RfL2R5bmFtaWNcIl0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICAgIGNvbnN0IFt7IFJlcXVlc3RJdGVtcyB9XSA9IChCYXRjaEdldEl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKVxuICAgICAgICAubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgUmVxdWVzdEl0ZW1zW1widGVzdC10YWJsZVwiXS5LZXlzLm1hcChcbiAgICAgICAgICAoa2V5OiB7IHNrOiB7IFM6IHN0cmluZyB9IH0pID0+IGtleS5zay5TLFxuICAgICAgICApLFxuICAgICAgKS50b0VxdWFsKFtcIl9OX1RfL2xheW91dFwiLCBcIl9OX1RfL2R5bmFtaWNcIl0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoXCJhIHRhZyByZXZhbGlkYXRlZCB3aXRoIGEgcHJvZmlsZVwiLCAoKSA9PiB7XG4gICAgICAvLyBgcmV2YWxpZGF0ZVRhZyhcInBvc3RzXCIsIFwibWF4XCIpYCBpcyBzdGFsZS13aGlsZS1yZXZhbGlkYXRlOiB0aGUgZW50cnkgaXNcbiAgICAgIC8vIHNlcnZlZCBvbmNlIG1vcmUgd2hpbGUgYSBiYWNrZ3JvdW5kIHJlbmRlciByZXBsYWNlcyBpdCwgYW5kIGV4cGlyZXNcbiAgICAgIC8vIG91dHJpZ2h0IG9ubHkgYWZ0ZXIgdGhlIHByb2ZpbGUncyBgZXhwaXJlYC4gVHJlYXRpbmcgaXQgYXMgYHVwZGF0ZVRhZ2BcbiAgICAgIC8vIG1hZGUgZXZlcnkgc3VjaCBjYWxsIGEgYmxvY2tpbmcgcmUtcmVuZGVyLlxuICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gRGF0ZS5ub3coKSAtIDEwMDA7XG4gICAgICBjb25zdCBzdG9yZWQgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgICAgaHRtbDogXCI8aHRtbD5wb3N0czwvaHRtbD5cIixcbiAgICAgICAgICBoZWFkZXJzOiB7IFwieC1uZXh0LWNhY2hlLXRhZ3NcIjogXCJwb3N0c1wiIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZ2V0Q3R4ID0ge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9IGFzIGNvbnN0O1xuICAgICAgY29uc3QgbWFuaWZlc3RQYXRoID0gam9pbihcbiAgICAgICAgXCIvZGVwbG95bWVudC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L3NlcnZlci9saWIvaW5jcmVtZW50YWwtY2FjaGVcIixcbiAgICAgICAgXCJ0YWdzLW1hbmlmZXN0LmV4dGVybmFsLmpzXCIsXG4gICAgICApO1xuICAgICAgLy8gVGhlIG1vZHVsZSB0aGUgc2VydmVyIGxvYWRzLCByZXNvbHZlZCBmb3IgcmVhbCwgc28gYSBOZXh0LmpzIHVwZ3JhZGVcbiAgICAgIC8vIHRoYXQgbW92ZXMgb3IgcmVzaGFwZXMgaXQgZmFpbHMgaGVyZSByYXRoZXIgdGhhbiBzaWxlbnRseSB0dXJuaW5nXG4gICAgICAvLyBzdGFsZS13aGlsZS1yZXZhbGlkYXRlIGludG8gYmxvY2tpbmcgcmVuZGVycy5cbiAgICAgIGNvbnN0IHJlYWxNYW5pZmVzdFBhdGggPVxuICAgICAgICByZXF1aXJlLnJlc29sdmUoXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi9pbmNyZW1lbnRhbC1jYWNoZS90YWdzLW1hbmlmZXN0LmV4dGVybmFsLmpzXCIpO1xuXG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0XG4gICAgICAgICAgICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgICAgICAgICAgICAubW9ja1Jlc29sdmVkVmFsdWUoSlNPTi5zdHJpbmdpZnkoc3RvcmVkKSksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBtb2NrTW9kdWxlQ2FjaGVbbWFuaWZlc3RQYXRoXTtcbiAgICAgICAgZGVsZXRlIG1vY2tNb2R1bGVDYWNoZVtyZWFsTWFuaWZlc3RQYXRoXTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChcInNlcnZlcyB0aGUgZW50cnkgYW5kIG1hcmtzIHRoZSB0YWcgc3RhbGUgaW4gTmV4dC5qcydzIG1hbmlmZXN0XCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dCA9IGplc3QucmVxdWlyZUFjdHVhbChyZWFsTWFuaWZlc3RQYXRoKTtcbiAgICAgICAgbW9ja01vZHVsZUNhY2hlW3JlYWxNYW5pZmVzdFBhdGhdID0geyBleHBvcnRzOiBuZXh0IH07XG4gICAgICAgIGNvbnN0IHN0YWxlQXQgPSBsYXN0TW9kaWZpZWQgKyA1MDA7XG4gICAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgICAgZ2V0OiB7XG4gICAgICAgICAgICBJdGVtOiB7XG4gICAgICAgICAgICAgIHN0YWxlQXQ6IHsgTjogU3RyaW5nKHN0YWxlQXQpIH0sXG4gICAgICAgICAgICAgIGV4cGlyZWRBdDogeyBOOiBTdHJpbmcoRGF0ZS5ub3coKSArIDYwXzAwMCkgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhwZWN0KGF3YWl0IGhhbmRsZXIuZ2V0KFwicG9zdHNcIiwgZ2V0Q3R4KSkudG9FcXVhbCh7XG4gICAgICAgICAgbGFzdE1vZGlmaWVkLFxuICAgICAgICAgIHZhbHVlOiBzdG9yZWQudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBXaGVyZSBgSW5jcmVtZW50YWxDYWNoZS5nZXRgIHJlYWRzIGl0LCB0byBhbnN3ZXIgYGlzU3RhbGU6IHRydWVgLlxuICAgICAgICBleHBlY3QobmV4dC50YWdzTWFuaWZlc3QuZ2V0KFwicG9zdHNcIikpLnRvRXF1YWwoeyBzdGFsZTogc3RhbGVBdCB9KTtcbiAgICAgICAgZXhwZWN0KG5leHQuYXJlVGFnc1N0YWxlKFtcInBvc3RzXCJdLCBsYXN0TW9kaWZpZWQpKS50b0JlKHRydWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KFwiZXhwaXJlcyB0aGUgZW50cnkgd2hlbiBOZXh0LmpzJ3MgbWFuaWZlc3QgY2Fubm90IGJlIGZvdW5kXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gQSBzdGFsZSBtYXJrIG5vdGhpbmcgcmVhZHMgd291bGQgc2VydmUgdGhlIGVudHJ5IGFzIGZyZXNoOyBhIGJsb2NraW5nXG4gICAgICAgIC8vIHJlbmRlciBpcyB0aGUgc2FmZSBzaWRlIG9mIHRoYXQuXG4gICAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgICAgZ2V0OiB7IEl0ZW06IHsgc3RhbGVBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgNTAwKSB9IH0gfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhwZWN0KGF3YWl0IGhhbmRsZXIuZ2V0KFwicG9zdHNcIiwgZ2V0Q3R4KSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgICAgbGFzdE1vZGlmaWVkOiAtMSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoXCJleHBpcmVzIHRoZSBlbnRyeSBvbmNlIHRoZSBwcm9maWxlJ3MgZXhwaXJlIGhhcyBwYXNzZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICAgIGdldDoge1xuICAgICAgICAgICAgSXRlbToge1xuICAgICAgICAgICAgICBzdGFsZUF0OiB7IE46IFN0cmluZyhsYXN0TW9kaWZpZWQgKyAxMDApIH0sXG4gICAgICAgICAgICAgIGV4cGlyZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgNTAwKSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICBleHBlY3QoYXdhaXQgaGFuZGxlci5nZXQoXCJwb3N0c1wiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgICBsYXN0TW9kaWZpZWQ6IC0xLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBkZXNjcmliZShcImJlaGluZCBhIGRpc3RyaWJ1dGlvblwiLCAoKSA9PiB7XG4gICAgICAgIC8vIGByZXZhbGlkYXRlVGFnYCdzIGludmFsaWRhdGlvbiBnb2VzIG91dCBiZWZvcmUgdGhlIHN0YWxlIGVudHJ5IGlzXG4gICAgICAgIC8vIHNlcnZlZCwgYW5kIHRoZSBzdGFsZSByZXNwb25zZSBjYXJyaWVzIHRoZSBlbnRyeSdzIG9yaWdpbmFsXG4gICAgICAgIC8vIGBzLW1heGFnZWA6IENsb3VkRnJvbnQgY2FjaGVzIGl0IGFnYWluLiBPbmx5IHRoZSByZWdlbmVyYXRpb24ncyBgc2V0YFxuICAgICAgICAvLyBrbm93cyB3aGVuIHRoZSBmcmVzaCBlbnRyeSBleGlzdHMgdG8gYmUgZmV0Y2hlZCBpbnN0ZWFkLlxuICAgICAgICBsZXQgY2RuSGFuZGxlcjogUzNDYWNoZUhhbmRsZXI7XG4gICAgICAgIC8vIEEgZnJlc2ggcmVuZGVyOiBhIG5ldyBvYmplY3QsIG5vdCB0aGUgc3RhbGUgb25lIGBnZXRgIGhhbmRlZCBvdXQuXG4gICAgICAgIGNvbnN0IHJlZ2VuZXJhdGVkID0ge1xuICAgICAgICAgIC4uLnN0b3JlZC52YWx1ZSxcbiAgICAgICAgfSBhcyB1bmtub3duIGFzIEluY3JlbWVudGFsQ2FjaGVWYWx1ZTtcbiAgICAgICAgY29uc3QgaW52YWxpZGF0ZWRQYXRocyA9ICgpOiBzdHJpbmdbXVtdID0+XG4gICAgICAgICAgKENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMubWFwKFxuICAgICAgICAgICAgKFtpbnB1dF0pID0+IGlucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICAgICAgY2RuSGFuZGxlciA9IG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgICAgICAgIG1vY2tNb2R1bGVDYWNoZVttYW5pZmVzdFBhdGhdID0ge1xuICAgICAgICAgICAgZXhwb3J0czogeyB0YWdzTWFuaWZlc3Q6IG5ldyBNYXAoKSB9LFxuICAgICAgICAgIH07XG4gICAgICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgICAgIGdldDogeyBJdGVtOiB7IHN0YWxlQXQ6IHsgTjogU3RyaW5nKGxhc3RNb2RpZmllZCArIDUwMCkgfSB9IH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImludmFsaWRhdGVzIHRoZSBwYWdlIGFnYWluIG9uY2UgaXRzIHJlZ2VuZXJhdGlvbiBpcyBzdG9yZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGNkbkhhbmRsZXIuZ2V0KFwicG9zdHNcIiwgZ2V0Q3R4KTtcbiAgICAgICAgICBleHBlY3QoaW52YWxpZGF0ZWRQYXRocygpKS50b0VxdWFsKFtdKTtcblxuICAgICAgICAgIGF3YWl0IGNkbkhhbmRsZXIuc2V0KFwicG9zdHNcIiwgcmVnZW5lcmF0ZWQsIHtcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbDogeyByZXZhbGlkYXRlOiBmYWxzZSwgZXhwaXJlOiB1bmRlZmluZWQgfSxcbiAgICAgICAgICAgIGlzUm91dGVQUFJFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgIH0gYXMgYW55KTtcblxuICAgICAgICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKCkpLnRvRXF1YWwoW1tcIi9wb3N0cypcIl1dKTtcblxuICAgICAgICAgIC8vIE9uY2U6IGEgbGF0ZXIgd3JpdGUgb2YgdGhlIHNhbWUgcGFnZSBpcyBhbiBvcmRpbmFyeSBvbmUuXG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5zZXQoXCJwb3N0c1wiLCByZWdlbmVyYXRlZCwge1xuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7IHJldmFsaWRhdGU6IGZhbHNlLCBleHBpcmU6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgICAgaXNSb3V0ZVBQUkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgfSBhcyBhbnkpO1xuICAgICAgICAgIGV4cGVjdChpbnZhbGlkYXRlZFBhdGhzKCkpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJyZW1lbWJlcnMgYSBzdGFsZSBtZW1vcnkgaGl0IGJ5IHRoZSBrZXkgaXQgd2FzIHJlYWQgdW5kZXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGNkbkhhbmRsZXIuaXNSZXZhbGlkYXRlZChzdG9yZWQsIGdldEN0eCwgXCJwb3N0c1wiKTtcbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLnNldChcInBvc3RzXCIsIHJlZ2VuZXJhdGVkLCB7XG4gICAgICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICB9IGFzIGFueSk7XG5cbiAgICAgICAgICBleHBlY3QoaW52YWxpZGF0ZWRQYXRocygpKS50b0VxdWFsKFtbXCIvcG9zdHMqXCJdXSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwiZG9lcyBub3QgaW52YWxpZGF0ZSBhZnRlciBhbiBvcmRpbmFyeSB3cml0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5zZXQoXCJwb3N0c1wiLCByZWdlbmVyYXRlZCwge1xuICAgICAgICAgICAgaXNSb3V0ZVBQUkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwia2VlcHMgd2FpdGluZyB3aGVuIGEgZmFpbGVkIHJlLXJlbmRlciB3cml0ZXMgdGhlIHN0YWxlIHZhbHVlIGJhY2tcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIG5leHQgMTYuNCdzIGByZXRhaW5QcmV2aW91c0NhY2hlRW50cnlgOiB0aGUgb2JqZWN0IGBnZXRgIHJldHVybmVkLFxuICAgICAgICAgIC8vIHN0b3JlZCBhZ2FpbiB3aXRoIGEgMy0zMCBzIGxpZmV0aW1lLiBBIHNlY29uZCByZWFkIGluIGJldHdlZW5cbiAgICAgICAgICAvLyBwYXJzZXMgaXRzIG93biBjb3B5OyB0aGUgd3JpdGUtYmFjayBzdGlsbCBjYXJyaWVzIHRoZSBmaXJzdC5cbiAgICAgICAgICBjb25zdCBzZXJ2ZWQgPSBhd2FpdCBjZG5IYW5kbGVyLmdldChcInBvc3RzXCIsIGdldEN0eCk7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5nZXQoXCJwb3N0c1wiLCBnZXRDdHgpO1xuICAgICAgICAgIGF3YWl0IGNkbkhhbmRsZXIuc2V0KFwicG9zdHNcIiwgc2VydmVkIS52YWx1ZSwge1xuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7IHJldmFsaWRhdGU6IDMsIGV4cGlyZTogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICB9IGFzIGFueSk7XG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXSk7XG5cbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLnNldChcInBvc3RzXCIsIHJlZ2VuZXJhdGVkLCB7XG4gICAgICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICB9IGFzIGFueSk7XG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbW1wiL3Bvc3RzKlwiXV0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImZvcmdldHMgYSBzdGFsZSBwYWdlIHRoYXQgaXMgZGVsZXRlZCBpbnN0ZWFkIG9mIHJlZ2VuZXJhdGVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBjZG5IYW5kbGVyLmdldChcInBvc3RzXCIsIGdldEN0eCk7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5zZXQoXCJwb3N0c1wiLCBudWxsLCB7XG4gICAgICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICB9IGFzIGFueSk7XG4gICAgICAgICAgYXdhaXQgY2RuSGFuZGxlci5zZXQoXCJwb3N0c1wiLCByZWdlbmVyYXRlZCwge1xuICAgICAgICAgICAgaXNSb3V0ZVBQUkVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgUzMgZXJyb3JzIGFuZCByZXR1cm4gbnVsbFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJTMyBFcnJvclwiKSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZXIuZ2V0KFwiZXJyb3Ita2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInRhZyBtYXJrZXIgY2FjaGVcIiwgKCkgPT4ge1xuICAgIC8vIEV2ZXJ5IGNhY2hlIGhpdCBjaGVja3MgaXRzIHRhZ3MnIG1hcmtlcnMsIGFuZCBhbGwgb2YgYSBkZXBsb3ltZW50J3NcbiAgICAvLyBtYXJrZXJzIHNoYXJlIG9uZSBwYXJ0aXRpb24ga2V5OiByZWFkIHBlciByZXF1ZXN0LCB0aGV5IGNhcHBlZCBhIHJvdXRlJ3NcbiAgICAvLyBjYWNoZSBoaXRzIGF0IH4xLDkwMCByZXEvcy4gRWFjaCBpbnN0YW5jZSBob2xkcyB0aGVtIGZvciBhIHNlY29uZC5cbiAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSBEYXRlLm5vdygpIC0gNjBfMDAwO1xuICAgIGNvbnN0IHN0b3JlZCA9IHtcbiAgICAgIGxhc3RNb2RpZmllZCxcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD5jYWNoZWQ8L2h0bWw+XCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcIl9OX1RfL3BhZ2UscG9zdHNcIiB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGdldEN0eCA9IHtcbiAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgfSBhcyBjb25zdDtcbiAgICBjb25zdCBtYXJrZXJSZWFkcyA9ICgpID0+XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrLmNhbGxzLmZpbHRlcihcbiAgICAgICAgKFtjb21tYW5kXSkgPT4gY29tbWFuZCBpbnN0YW5jZW9mIEJhdGNoR2V0SXRlbUNvbW1hbmQsXG4gICAgICApLmxlbmd0aDtcbiAgICAvLyBXaGF0IGBnZXRgIGFuc3dlcnMgZm9yIGEgcmV2YWxpZGF0ZWQgcGFnZTogZXhwaXJlZCwgbm90IGEgbWlzcy5cbiAgICBjb25zdCBleHBpcmVkID0geyBsYXN0TW9kaWZpZWQ6IC0xIH07XG4gICAgY29uc3QgcmV2YWxpZGF0ZWRBZnRlclN0b3JlID0ge1xuICAgICAgZ2V0OiB7IEl0ZW06IHsgcmV2YWxpZGF0ZWRBdDogeyBOOiBTdHJpbmcobGFzdE1vZGlmaWVkICsgMTAwMCkgfSB9IH0sXG4gICAgfTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgQm9keToge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KHN0b3JlZCkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7fSk7XG4gICAgfSk7XG5cbiAgICBpdChcImFuc3dlcnMgY2hlY2tzIHdpdGhpbiB0aGUgVFRMIGZyb20gdGhlIG1hcmtlcnMgaXQgYWxyZWFkeSByZWFkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGhhbmRsZXIuZ2V0KFwicGFnZVwiLCBnZXRDdHgpO1xuICAgICAgYXdhaXQgaGFuZGxlci5nZXQoXCJwYWdlXCIsIGdldEN0eCk7XG5cbiAgICAgIGV4cGVjdChtYXJrZXJSZWFkcygpKS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaGFyZXMgb25lIHJlYWQgYmV0d2VlbiBjb25jdXJyZW50IGNoZWNrc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGhhbmRsZXIuZ2V0KFwicGFnZVwiLCBnZXRDdHgpLFxuICAgICAgICBoYW5kbGVyLmdldChcInBhZ2VcIiwgZ2V0Q3R4KSxcbiAgICAgICAgaGFuZGxlci5nZXQoXCJwYWdlXCIsIGdldEN0eCksXG4gICAgICBdKTtcblxuICAgICAgZXhwZWN0KG1hcmtlclJlYWRzKCkpLnRvQmUoMSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNlZXMgaXRzIG93biByZXZhbGlkYXRlVGFnIGF0IG9uY2UsIGFuZCBsb2dzIGl0IGZvciB0aGUgb3RoZXJzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGV4cGVjdChhd2FpdCBoYW5kbGVyLmdldChcInBhZ2VcIiwgZ2V0Q3R4KSkudG9NYXRjaE9iamVjdCh7IGxhc3RNb2RpZmllZCB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHJldmFsaWRhdGVkQWZ0ZXJTdG9yZSk7XG4gICAgICBhd2FpdCBoYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiKTtcblxuICAgICAgZXhwZWN0KGF3YWl0IGhhbmRsZXIuZ2V0KFwicGFnZVwiLCBnZXRDdHgpKS50b01hdGNoT2JqZWN0KGV4cGlyZWQpO1xuICAgICAgY29uc3QgcHV0cyA9IG1vY2tEeW5hbW9TZW5kLm1vY2suY2FsbHMuZmlsdGVyKFxuICAgICAgICAoW2NvbW1hbmRdKSA9PiBjb21tYW5kIGluc3RhbmNlb2YgUHV0SXRlbUNvbW1hbmQsXG4gICAgICApO1xuICAgICAgZXhwZWN0KHB1dHMpLnRvSGF2ZUxlbmd0aCgxKTtcbiAgICAgIGV4cGVjdChjb21tYW5kSW5wdXQocHV0c1swXVswXSwgUHV0SXRlbUNvbW1hbmQpLkl0ZW0pLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICBwazogeyBTOiBcInRlc3QtYnVpbGQtaWQjbG9nXCIgfSxcbiAgICAgICAgc2s6IHsgUzogZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9eXFxkezE1fSNwb3N0cyQvKSB9LFxuICAgICAgICByZXZhbGlkYXRlZEF0OiB7IE46IGV4cGVjdC5hbnkoU3RyaW5nKSB9LFxuICAgICAgICB0dGw6IHsgTjogZXhwZWN0LmFueShTdHJpbmcpIH0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KFwid3JpdGVzIGVhY2ggdGFnIG9uY2Ugd2hlbiB0aGUgJ3VzZSBjYWNoZScgaGFuZGxlcnMgZ2V0IHRoZSBzYW1lIGNhbGxcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gTmV4dC5qcyBjYWxscyBgcmV2YWxpZGF0ZVRhZ2AgaGVyZSBhbmQgYHVwZGF0ZVRhZ3NgIG9uIGV2ZXJ5XG4gICAgICAvLyBgY2FjaGVIYW5kbGVyc2AgZW50cnksIGFuZCBhbGwgb2YgdGhlbSBzaGFyZSBvbmUgbWFuaWZlc3QuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGhhbmRsZXIucmV2YWxpZGF0ZVRhZyhbXCJwb3N0c1wiXSksXG4gICAgICAgIHNoYXJlZFRhZ01hbmlmZXN0KCkudXBkYXRlKFtcInBvc3RzXCJdLCB1bmRlZmluZWQpLFxuICAgICAgXSk7XG5cbiAgICAgIGNvbnN0IHdyaXRlcyA9IG1vY2tEeW5hbW9TZW5kLm1vY2suY2FsbHMuZmlsdGVyKFxuICAgICAgICAoW2NvbW1hbmRdKSA9PlxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBVcGRhdGVJdGVtQ29tbWFuZCB8fFxuICAgICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBQdXRJdGVtQ29tbWFuZCxcbiAgICAgICk7XG4gICAgICBleHBlY3Qod3JpdGVzKS50b0hhdmVMZW5ndGgoMik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwic2V0XCIsICgpID0+IHtcbiAgICAvLyBNYXBwaW5nIHJvd3MgZXhpc3Qgb25seSB0byBuYW1lIENsb3VkRnJvbnQgcGF0aHMsIHNvIG9ubHkgYSBkZXBsb3ltZW50XG4gICAgLy8gd2l0aCBhIGRpc3RyaWJ1dGlvbiBrZWVwcyB0aGVtLlxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBoYW5kbGVyID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSk7XG4gICAgfSk7XG5cbiAgICBpdChcImtlZXBzIG5vIG1hcHBpbmcgcm93cyB3aXRob3V0IGEgZGlzdHJpYnV0aW9uIHRvIGludmFsaWRhdGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gVGhlIFJlZ2lvbmFsIGNvbnN0cnVjdHMgaGF2ZSBubyBDbG91ZEZyb250LiBBIHJvdyBwZXIgdGFnIHBlciBgc2V0YCxcbiAgICAgIC8vIGFuZCB0aGUgUzMgcmVhZCBiZWZvcmUgYSBkZWxldGUgdG8gbmFtZSB0aGVtLCBib3VnaHQgbm90aGluZyB0aGVyZS5cbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FO1xuICAgICAgY29uc3QgcmVnaW9uYWwgPSBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCByZWdpb25hbC5zZXQoXG4gICAgICAgIFwiL2lzci8xXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgICAgaHRtbDogXCI8cC8+XCIsXG4gICAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcInRhZ1wiIH0sXG4gICAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlU2V0Q29udGV4dChbXSksXG4gICAgICApO1xuICAgICAgYXdhaXQgcmVnaW9uYWwuc2V0KFwiL2lzci8xXCIsIG51bGwsIHsgaXNGYWxsYmFjazogZmFsc2UgfSk7XG5cbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShHZXRPYmplY3RDb21tYW5kKSk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBzdG9yZSBjYWNoZSB2YWx1ZSBpbiBTM1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+c2V0IHRlc3Q8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7fSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwic2V0LWtleVwiLCB0ZXN0RGF0YSwgY3JlYXRlU2V0Q29udGV4dChbXCJ0YWcxXCJdKSk7XG5cbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KFB1dE9iamVjdENvbW1hbmQpKTtcbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5hbnkoVXBkYXRlSXRlbUNvbW1hbmQpLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwic3RvcmVzIGEgcmVzcG9uc2UgZW50cnkncyBsaWZldGltZSwgYW5kIG5vbmUgZm9yIGEgZmV0Y2ggZW50cnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcGFnZTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPHAvPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgY29uc3Qgc3RvcmVkQm9kaWVzID0gKCkgPT5cbiAgICAgICAgKFB1dE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMubWFwKChbaW5wdXRdKSA9PlxuICAgICAgICAgIEpTT04ucGFyc2UoaW5wdXQuQm9keSksXG4gICAgICAgICk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwiL2lzci8xXCIsIHBhZ2UsIHtcbiAgICAgICAgY2FjaGVDb250cm9sOiB7IHJldmFsaWRhdGU6IDYwLCBleHBpcmU6IDMwMCB9LFxuICAgICAgICBpc1JvdXRlUFBSRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcImZldGNoLWtleVwiLCBwYWdlLCBjcmVhdGVTZXRDb250ZXh0KFtdKSk7XG5cbiAgICAgIGNvbnN0IFtyZXNwb25zZSwgZmV0Y2hdID0gc3RvcmVkQm9kaWVzKCkuc2xpY2UoLTIpO1xuICAgICAgZXhwZWN0KHJlc3BvbnNlLmNhY2hlQ29udHJvbCkudG9FcXVhbCh7IHJldmFsaWRhdGU6IDYwLCBleHBpcmU6IDMwMCB9KTtcbiAgICAgIGV4cGVjdChmZXRjaCkubm90LnRvSGF2ZVByb3BlcnR5KFwiY2FjaGVDb250cm9sXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbm90IHN0b3JlIHdoZW4gUzMgYnVja2V0IGlzIG5vdCBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FO1xuXG4gICAgICBjb25zdCBoYW5kbGVyV2l0aG91dEJ1Y2tldCA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD5ubyBidWNrZXQ8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aG91dEJ1Y2tldC5zZXQoXG4gICAgICAgIFwibm8tYnVja2V0LWtleVwiLFxuICAgICAgICB0ZXN0RGF0YSxcbiAgICAgICAgY3JlYXRlU2V0Q29udGV4dChbXSksXG4gICAgICApO1xuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwibWFwcyB0aGUgdGFncyBhIHBhZ2UgY2FycmllcyBvbmx5IGluIGl0cyB4LW5leHQtY2FjaGUtdGFncyBoZWFkZXJcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gYFJlc3BvbnNlQ2FjaGUuc2V0YCBidWlsZHMgYSBwYWdlJ3MgYGN0eGAgd2l0aG91dCB0YWdzLCBzbyB0aGUgcmVuZGVyJ3NcbiAgICAgIC8vIGhlYWRlciBpcyB0aGUgb25seSBwbGFjZSB0aGV5IGV4aXN0LiBObyBtYXBwaW5nIHJvdyBtZWFudCBgcmV2YWxpZGF0ZVRhZ2BcbiAgICAgIC8vIGZvdW5kIG5vdGhpbmcgdG8gaW52YWxpZGF0ZSBhbmQgQ2xvdWRGcm9udCBrZXB0IHRoZSBzdGFsZSBIVE1MLlxuICAgICAgY29uc3QgdGVzdERhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSA9IHtcbiAgICAgICAga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBodG1sOiBcIjxodG1sPnRhZ2dlZDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7IFwieC1uZXh0LWNhY2hlLXRhZ3NcIjogXCJoZWFkZXItdGFnLG90aGVyLXRhZ1wiIH0sXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcIi9pc3IvMVwiLCB0ZXN0RGF0YSwgY3JlYXRlU2V0Q29udGV4dChbXSkpO1xuXG4gICAgICBjb25zdCBtYXBwaW5nS2V5cyA9IChVcGRhdGVJdGVtQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1xuICAgICAgICAubWFwKChbaW5wdXRdKSA9PiBpbnB1dC5LZXkuc2suUylcbiAgICAgICAgLnNvcnQoKTtcbiAgICAgIGV4cGVjdChtYXBwaW5nS2V5cykudG9FcXVhbChbXG4gICAgICAgIFwiaGVhZGVyLXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIixcbiAgICAgICAgXCJvdGhlci10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwicHJlZmVycyB0aGUgY29udGV4dCdzIHRhZ3Mgb3ZlciB0aGUgaGVhZGVyIHdoZW4gYm90aCBhcmUgcHJlc2VudFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+dGFnZ2VkPC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJ4LW5leHQtY2FjaGUtdGFnc1wiOiBcImhlYWRlci10YWdcIiB9LFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCIvaXNyLzFcIiwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW1wiY3R4LXRhZ1wiXSkpO1xuXG4gICAgICBjb25zdCBtYXBwaW5nS2V5cyA9IChVcGRhdGVJdGVtQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1xuICAgICAgICAubWFwKChbaW5wdXRdKSA9PiBpbnB1dC5LZXkuc2suUylcbiAgICAgICAgLnNvcnQoKTtcbiAgICAgIGV4cGVjdChtYXBwaW5nS2V5cykudG9FcXVhbChbXCJjdHgtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImhhc2hlcyBhIG1hcHBpbmcgcm93J3Mgc29ydCBrZXkgcGFzdCBEeW5hbW9EQidzIDEwMjQgYnl0ZXMsIGtlZXBpbmcgdGhlIGtleSBpbiBzM0tleVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+dGFnZ2VkPC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgdGFnID0gXCJ0XCIucmVwZWF0KDI1Nik7XG4gICAgICBjb25zdCBjYWNoZUtleSA9IGAvcm91dGUtY2FjaGUvQVBQX1BBR0UvJHtcImFcIi5yZXBlYXQoNjQpfS8kLyR7XCJwXCIucmVwZWF0KDcwMCl9YDtcblxuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KGNhY2hlS2V5LCB0ZXN0RGF0YSwgY3JlYXRlU2V0Q29udGV4dChbdGFnXSkpO1xuXG4gICAgICBjb25zdCBbaW5wdXRdID0gKFVwZGF0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGlucHV0LktleS5zay5TKS50b01hdGNoKFxuICAgICAgICBuZXcgUmVnRXhwKGBeJHt0YWd9I3Rlc3QtYnVpbGQtaWQvI1swLTlhLWZdezY0fSRgKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoaW5wdXQuRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlc1tcIjpzM0tleVwiXS5TKS50b0JlKFxuICAgICAgICBgdGVzdC1idWlsZC1pZCR7Y2FjaGVLZXl9Lmpzb25gLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaGFzaGVzIHRoZSB0YWcgaW50byBhIG1hcHBpbmcgcm93J3MgcHJlZml4IHdoZW4gZXZlbiBhIGhhc2hlZCByb3cgd291bGQgcGFzcyAxMDI0IGJ5dGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEFuIGltcGxpY2l0IHRhZyBpcyBhcyBsb25nIGFzIGl0cyBwYXRoLlxuICAgICAgY29uc3QgdGFnID0gYF9OX1RfLyR7XCJwXCIucmVwZWF0KDEwMDApfWA7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+dGFnZ2VkPC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwiL2lzci8xXCIsIHRlc3REYXRhLCBjcmVhdGVTZXRDb250ZXh0KFt0YWddKSk7XG5cbiAgICAgIGNvbnN0IFtpbnB1dF0gPSAoVXBkYXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF07XG4gICAgICBjb25zdCBzazogc3RyaW5nID0gaW5wdXQuS2V5LnNrLlM7XG4gICAgICBleHBlY3Qoc2spLnRvTWF0Y2goL14jWzAtOWEtZl17NjR9I3Rlc3QtYnVpbGQtaWRcXC9pc3JcXC8xXFwuanNvbiQvKTtcbiAgICAgIGV4cGVjdChCdWZmZXIuYnl0ZUxlbmd0aChzaykpLnRvQmVMZXNzVGhhbk9yRXF1YWwoMTAyNCk7XG5cbiAgICAgIC8vIGByZXZhbGlkYXRlVGFnYCBxdWVyaWVzIHRoZSBzYW1lIHByZWZpeC5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7IHF1ZXJ5OiB7IEl0ZW1zOiBbXSB9IH0pO1xuICAgICAgYXdhaXQgaGFuZGxlci5yZXZhbGlkYXRlVGFnKHRhZyk7XG4gICAgICBjb25zdCBxdWVyaWVkID0gKFF1ZXJ5Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxscy5tYXAoXG4gICAgICAgIChbcXVlcnldKSA9PiBxdWVyeS5FeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzW1wiOnNrUHJlZml4XCJdPy5TLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChxdWVyaWVkKS50b0NvbnRhaW4oc2suc2xpY2UoMCwgNjYpKTtcbiAgICB9KTtcblxuICAgIGl0KFwic3RvcmVzIGFuIGVudHJ5IHdob3NlIFMzIGtleSB3b3VsZCBwYXNzIDEwMjQgYnl0ZXMgdW5kZXIgYSBoYXNoZWQgb2JqZWN0IGtleVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+bG9uZzwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gYC9yb3V0ZS1jYWNoZS9BUFBfUEFHRS8ke1wiYVwiLnJlcGVhdCg2NCl9LyQvJHtcInBcIi5yZXBlYXQoOTUwKX1gO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KGNhY2hlS2V5LCB0ZXN0RGF0YSwgY3JlYXRlU2V0Q29udGV4dChbXCJ0XCJdKSk7XG5cbiAgICAgIGNvbnN0IFtwdXRdID0gKFB1dE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QocHV0LktleSkudG9NYXRjaCgvXnRlc3QtYnVpbGQtaWRcXC9fbG9uZy1rZXlcXC9bMC05YS1mXXs2NH1cXC5sb25nJC8pO1xuICAgICAgLy8gVGhlIG1hcHBpbmcga2VlcHMgdGhlIG5hbWUgYSBDbG91ZEZyb250IHBhdGggaXMgcmVjb3ZlcmVkIGZyb20uXG4gICAgICBjb25zdCBbbWFwcGluZ10gPSAoVXBkYXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2tcbiAgICAgICAgLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KG1hcHBpbmcuRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlc1tcIjpzM0tleVwiXS5TKS50b0JlKFxuICAgICAgICBgdGVzdC1idWlsZC1pZCR7Y2FjaGVLZXl9Lmpzb25gLFxuICAgICAgKTtcblxuICAgICAgKEdldE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2tDbGVhcigpO1xuICAgICAgYXdhaXQgaGFuZGxlci5nZXQoY2FjaGVLZXksIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBbZ2V0XSA9IChHZXRPYmplY3RDb21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGdldC5LZXkpLnRvQmUocHV0LktleSk7XG4gICAgfSk7XG5cbiAgICBpdChcInJlbW92ZXMgYSBkZWxldGVkIHBhZ2UncyBtYXBwaW5nIHJvd3MsIHJlYWRpbmcgaXRzIHRhZ3MgZnJvbSBTM1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBIHJlc3BvbnNlIGRlbGV0ZSAtIGEgY2FjaGVkIHJvdXRlIHRoYXQgc3RhcnRzIGFuc3dlcmluZyBgbm90Rm91bmQoKWAgLVxuICAgICAgLy8gYXJyaXZlcyBhcyBgc2V0KGtleSwgbnVsbCwgeyBjYWNoZUNvbnRyb2wsIC4uLiB9KWAgd2l0aCBubyB0YWdzIGF0IGFsbCxcbiAgICAgIC8vIHNvIHRoZSBlbnRyeSBpdHNlbGYgaXMgdGhlIG9ubHkgcGxhY2UgaXRzIG1hcHBpbmcgcm93cyBjYW4gYmUgbmFtZWRcbiAgICAgIC8vIGZyb20uIExlZnQgYmVoaW5kLCB0aGV5IHJlc29sdmUgb24gdGhlIG5leHQgYHJldmFsaWRhdGVUYWdgIHRvIGEgY2FjaGVcbiAgICAgIC8vIGtleSB3aG9zZSBvYmplY3QgaXMgZ29uZSBhbmQgc3BlbmQgYSBDbG91ZEZyb250IHdpbGRjYXJkIHBhdGggb24gaXQuXG4gICAgICBjb25zdCBzdG9yZWQgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgdGFnczogW1wiY29sbGVjdGlvblwiLCBcIl9OX1RfL2lzci8xXCJdLFxuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgICBodG1sOiBcIjxodG1sPmdvbmU8L2h0bWw+XCIsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgbW9ja1MzU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgQm9keToge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgICAgICAgICAgLmZuKClcbiAgICAgICAgICAgICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlKEpTT04uc3RyaW5naWZ5KHN0b3JlZCkpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCIvaXNyLzFcIiwgbnVsbCwge1xuICAgICAgICBjYWNoZUNvbnRyb2w6IHsgcmV2YWxpZGF0ZTogNjAsIGV4cGlyZTogdW5kZWZpbmVkIH0sXG4gICAgICAgIGlzUm91dGVQUFJFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoRGVsZXRlT2JqZWN0Q29tbWFuZCkpO1xuICAgICAgY29uc3QgZGVsZXRlZEtleXMgPSAoRGVsZXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNcbiAgICAgICAgLm1hcCgoW2lucHV0XSkgPT4gaW5wdXQuS2V5LnNrLlMpXG4gICAgICAgIC5zb3J0KCk7XG4gICAgICAvLyBNYXBwaW5nIHJvd3Mgb25seS4gVGhlIGJhcmUtdGFnIG1hcmtlciByb3cgYmVsb25ncyB0byB0aGUgdGFnLCBhbmRcbiAgICAgIC8vIGBjaGVja0lmUmV2YWxpZGF0ZWRgIHJlYWRzIGl0IGZvciBldmVyeSBvdGhlciBlbnRyeSBjYXJyeWluZyBpdC5cbiAgICAgIGV4cGVjdChkZWxldGVkS2V5cykudG9FcXVhbChbXG4gICAgICAgIFwiX05fVF8vaXNyLzEjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIsXG4gICAgICAgIFwiY29sbGVjdGlvbiN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJkZWxldGVzIGEgZmV0Y2ggZW50cnkncyBtYXBwaW5nIHJvd3MgZnJvbSB0aGUgY29udGV4dCdzIHRhZ3MgYWxvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gYGN0eGAgY2FycmllcyB0aGVtIGhlcmUsIHNvIHRoZSBwcmUtZGVsZXRlIHJlYWQgaXMgc2tpcHBlZDogb25seSB0aGVcbiAgICAgIC8vIERlbGV0ZU9iamVjdCByZWFjaGVzIFMzLlxuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXIuc2V0KFwiZmV0Y2gta2V5XCIsIG51bGwsIGNyZWF0ZVNldENvbnRleHQoW1wiY3R4LXRhZ1wiXSkpO1xuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoR2V0T2JqZWN0Q29tbWFuZCkpO1xuICAgICAgY29uc3QgZGVsZXRlZEtleXMgPSAoXG4gICAgICAgIERlbGV0ZUl0ZW1Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHMubWFwKChbaW5wdXRdKSA9PiBpbnB1dC5LZXkuc2suUyk7XG4gICAgICBleHBlY3QoZGVsZXRlZEtleXMpLnRvRXF1YWwoW1wiY3R4LXRhZyN0ZXN0LWJ1aWxkLWlkL2ZldGNoLWtleS5qc29uXCJdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiZGVsZXRlcyBubyBtYXBwaW5nIHJvd3MgZm9yIGFuIHVudGFnZ2VkIGVudHJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHsga2luZDogQ2FjaGVkUm91dGVLaW5kLkFQUF9QQUdFLCBodG1sOiBcIjxwLz5cIiB9LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnNldChcIi91bnRhZ2dlZFwiLCBudWxsLCB7IGlzRmFsbGJhY2s6IGZhbHNlIH0pO1xuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSk7XG4gICAgICBleHBlY3QoRGVsZXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInN0aWxsIGRlbGV0ZXMgdGhlIG9iamVjdCB3aGVuIGl0cyB0YWdzIGNhbm5vdCBiZSByZWFkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZFxuICAgICAgICAgID8gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiUzMgR2V0IEVycm9yXCIpKVxuICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHt9KSxcbiAgICAgICk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGV4cGVjdChcbiAgICAgICAgaGFuZGxlci5zZXQoXCIvaXNyLzFcIiwgbnVsbCwgeyBpc0ZhbGxiYWNrOiBmYWxzZSB9KSxcbiAgICAgICkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcblxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoRGVsZXRlT2JqZWN0Q29tbWFuZCkpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIFMzIGVycm9ycyBncmFjZWZ1bGx5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD5lcnJvciB0ZXN0PC9odG1sPlwiLFxuICAgICAgICByc2NEYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAgICAgcG9zdHBvbmVkOiB1bmRlZmluZWQsXG4gICAgICAgIHNlZ21lbnREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwiUzMgUHV0IEVycm9yXCIpKTtcblxuICAgICAgLy8gU2hvdWxkIG5vdCB0aHJvd1xuICAgICAgYXdhaXQgZXhwZWN0KFxuICAgICAgICBoYW5kbGVyLnNldChcImVycm9yLWtleVwiLCB0ZXN0RGF0YSwgY3JlYXRlU2V0Q29udGV4dChbXSkpLFxuICAgICAgKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInJldmFsaWRhdGVUYWdcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHJlY29yZCB0aGUgcmV2YWxpZGF0aW9uIHdpdGhvdXQgZGVsZXRpbmcgdGhlIHRhZydzIFMzIGVudHJpZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbW9ja1F1ZXJ5UmVzcG9uc2UgPSB7XG4gICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI2NhY2hlLWtleS0xXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyNjYWNoZS1rZXktMlwiIH0gfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7IHF1ZXJ5OiBtb2NrUXVlcnlSZXNwb25zZSB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgLy8gTm8gZGlzdHJpYnV0aW9uLCBzbyBubyBtYXBwaW5nIHJvd3MgdG8gcmVhZDogdGhlIG1hcmtlciBpcyBhbGwgb2YgaXQuXG4gICAgICBleHBlY3QobW9ja0R5bmFtb1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KFF1ZXJ5Q29tbWFuZCkpO1xuICAgICAgZXhwZWN0KG1vY2tEeW5hbW9TZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShVcGRhdGVJdGVtQ29tbWFuZCksXG4gICAgICApO1xuICAgICAgLy8gVGhlIG1hcmtlciByb3cgaXMgdGhlIGludmFsaWRhdGlvbjsgYGdldGAgcmVhZHMgaXQgYW5kIGhhbmRzIHRoZSBlbnRyeVxuICAgICAgLy8gYmFjayBleHBpcmVkIHNvIE5leHQuanMgcmUtcmVuZGVycyB0aGUgcm91dGUgYW5kIHJlcGxhY2VzIHRoZSBvYmplY3QuXG4gICAgICAvLyBEZWxldGluZyB0aGUgb2JqZWN0cyBoZXJlIG1hZGUgdGhlIG5leHQgcmVxdWVzdCBhIGhhcmQgbWlzcywgd2hpY2ggb24gYVxuICAgICAgLy8gUFBSIHJvdXRlIGlzIGFuc3dlcmVkIGZyb20gdGhlIHVuY2FjaGVhYmxlIGZhbGxiYWNrIHNoZWxsIGZvciBnb29kLlxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFRoZSB0YWcgbWFya2VyIGBjaGVja0lmUmV2YWxpZGF0ZWRgIHJlYWRzOiBrZXllZCBieSB0aGUgYmFyZSB0YWcsIHNvXG4gICAgICAvLyBlbnRyaWVzIHdpdGggbm8gbWFwcGluZyByb3cgb2YgdGhlaXIgb3duIHN0aWxsIHNlZSB0aGUgcmV2YWxpZGF0aW9uLlxuICAgICAgY29uc3QgbWFya2VyV3JpdGUgPSAoVXBkYXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNcbiAgICAgICAgLm1hcCgoW2lucHV0XSkgPT4gaW5wdXQpXG4gICAgICAgIC5maW5kKChpbnB1dCkgPT4gaW5wdXQuS2V5LnNrLlMgPT09IFwidGVzdC10YWdcIik7XG4gICAgICBleHBlY3QobWFya2VyV3JpdGUpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiBcIlNFVCByZXZhbGlkYXRlZEF0ID0gOnJldmFsaWRhdGVkQXRcIixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbm90IHJldmFsaWRhdGUgd2hlbiBEeW5hbW9EQiB0YWJsZSBpcyBub3QgY29uZmlndXJlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRTtcblxuICAgICAgY29uc3QgaGFuZGxlcldpdGhvdXRUYWJsZSA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRob3V0VGFibGUucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QobW9ja0R5bmFtb1NlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgRHluYW1vREIgZXJyb3JzIGdyYWNlZnVsbHlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIkR5bmFtb0RCIEVycm9yXCIpKTtcblxuICAgICAgLy8gU2hvdWxkIG5vdCB0aHJvd1xuICAgICAgYXdhaXQgZXhwZWN0KGhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcImVycm9yLXRhZ1wiKSkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGNyZWF0ZSBhIENsb3VkRnJvbnQgaW52YWxpZGF0aW9uIGZvciBhZmZlY3RlZCBwYXRocyB3aGVuIGEgZGlzdHJpYnV0aW9uIHBhcmFtZXRlciBpcyBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtb2NrUXVlcnlSZXNwb25zZSA9IHtcbiAgICAgICAgSXRlbXM6IFtcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8yLmpzb25cIiB9IH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogbW9ja1F1ZXJ5UmVzcG9uc2UgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTsgLy8gRm9yIGRlbGV0ZSBjb21tYW5kc1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChtb2NrU3NtU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShPYmplY3QpKTtcbiAgICAgIGV4cGVjdChtb2NrQ2xvdWRGcm9udFNlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5EaXN0cmlidXRpb25JZCkudG9CZShcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIpO1xuICAgICAgLy8gT25lIHRyYWlsaW5nIHdpbGRjYXJkIHBlciBwYWdlOiBhbiBpbnZhbGlkYXRpb24gcGF0aCBtYXRjaGVzIG9ubHkgdGhlXG4gICAgICAvLyBxdWVyeSBzdHJpbmcgaXQgc3BlbGxzIG91dCwgYW5kIGEgcGFnZSdzIFJTQyBwYXlsb2FkIGlzIGNhY2hlZCB1bmRlclxuICAgICAgLy8gYD9fcnNjPTxoYXNoPmAgLSBgL2lzci8xKmAgY292ZXJzIGl0LCBhbmQgdGhlIHNsYXNoIHZhcmlhbnQsIGZvciBvbmVcbiAgICAgIC8vIG9mIHRoZSBmaWZ0ZWVuIHdpbGRjYXJkcyBpbnN0ZWFkIG9mIHR3by5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykudG9FcXVhbChbXG4gICAgICAgIFwiL2lzci8xKlwiLFxuICAgICAgICBcIi9pc3IvMipcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogbmV4dCA+PSAxNi4zLjggc2NvcGVzIGEgcGFnZSdzIGtleSBieSBpdHMgc291cmNlIHJvdXRlOlxuICAgICAqIGByb3V0ZS1jYWNoZS88a2luZD4vPGhhc2g+LyQ8cGF0aG5hbWU+YCwgdGhlIHBhdGhuYW1lIHRocm91Z2hcbiAgICAgKiBgbm9ybWFsaXplUGFnZVBhdGhgLiBSZWFkIGFzIGEgcGF0aCwgaXQgbmFtZWQgbm8gVVJJIHRoZSBkaXN0cmlidXRpb24gaGFzLlxuICAgICAqL1xuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHBhdGhuYW1lIGluc2lkZSBhIG5leHQgMTYuMy44IHJvdXRlLWNhY2hlIGtleVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGtleSA9IChwYXRobmFtZTogc3RyaW5nKSA9PlxuICAgICAgICBgdGVzdC10YWcjdGVzdC1idWlsZC1pZC9yb3V0ZS1jYWNoZS9BUFBfUEFHRS8ke1wiYVwiLnJlcGVhdCg2NCl9LyQke3BhdGhuYW1lfS5qc29uYDtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgSXRlbXM6IFtcbiAgICAgICAgICAgIHsgc2s6IHsgUzoga2V5KFwiL2lzci8xXCIpIH0gfSxcbiAgICAgICAgICAgIHsgc2s6IHsgUzoga2V5KFwiL2luZGV4L2luZGV4XCIpIH0gfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9pc3IvMSpcIixcbiAgICAgICAgXCIvaW5kZXgqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHBhdGggb2YgYSBtYXBwaW5nIHJvdyB3aG9zZSBrZXkgaXMgaW4gczNLZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeToge1xuICAgICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNrOiB7IFM6IGB0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkLyMke1wiYlwiLnJlcGVhdCg2NCl9YCB9LFxuICAgICAgICAgICAgICBzM0tleTogeyBTOiBcInRlc3QtYnVpbGQtaWQvbG9uZy9wYWdlLmpzb25cIiB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9sb25nL3BhZ2UqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiZG9lcyBub3QgcmVhZCBhIG1hcmtlciByb3cgb25lIGAjYCBsb25nZXIgYXMgYSBtYXBwaW5nIHJvd1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBObyBidWlsZCBJRCBsZWF2ZXMgbm8ga2V5IHByZWZpeCB0byB0ZWxsIHRoZSB0d28gYXBhcnQgYnksIGFuZCB0aGVcbiAgICAgIC8vIG1hcmtlciByb3cgb2YgdGFnIGB0ZXN0LXRhZyNgIChzayBgdGVzdC10YWcjYCkgbWF0Y2hlcyBgdGVzdC10YWcjYC5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQlVJTERfSUQgPSBcIlwiO1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogeyBJdGVtczogW3sgc2s6IHsgUzogXCJ0ZXN0LXRhZyNcIiB9IH1dIH0gfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgYW4gb2xkZXIgYXBwJ3Mgcm91dGUgbmFtZWQgL3JvdXRlLWNhY2hlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuICAgICAgZHluYW1vUmVzcG9uc2VzKHtcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICBJdGVtczogW3sgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL3JvdXRlLWNhY2hlL2Zvby5qc29uXCIgfSB9XSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcbiAgICAgICAgXCIvcm91dGUtY2FjaGUvZm9vKlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIGEgZGlzdHJpYnV0aW9uIHdob3NlIElEIGlzIGluIHRoZSBlbnZpcm9ubWVudCB3aXRob3V0IFNTTVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBOZXh0anNHbG9iYWxDb250YWluZXJzOiB0aGUgdGFzayBjYW4gbmFtZSB0aGUgZGlzdHJpYnV0aW9uIGRpcmVjdGx5LlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSUQgPSBcImRpcmVjdC1kaXN0cmlidXRpb24taWRcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIHF1ZXJ5OiB7IEl0ZW1zOiBbeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiIH0gfV0gfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChtb2NrU3NtU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5EaXN0cmlidXRpb25JZCkudG9CZShcImRpcmVjdC1kaXN0cmlidXRpb24taWRcIik7XG4gICAgfSk7XG5cbiAgICBpdChcInNwbGl0cyBhIG1hcHBpbmcgcm93IGF0IHRoZSB0YWcncyBsZW5ndGgsIHNvIGEgdGFnIGNvbnRhaW5pbmcgIyBzdGlsbCByZXNvbHZlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBIHRhZyBpcyBhcHAtZGVmaW5lZDogYHJldmFsaWRhdGVUYWcoXCJ1c2VyIzQyXCIpYCBpcyBsZWdhbC4gU3BsaXR0aW5nIGF0XG4gICAgICAvLyB0aGUgZmlyc3QgXCIjXCIgbGVmdCBcIjQyI3Rlc3QtYnVpbGQtaWQvYWNjb3VudC5qc29uXCIgYXMgdGhlIFMzIGtleSwgd2hvc2VcbiAgICAgIC8vIGludmFsaWRhdGlvbiBwYXRoIG5hbWVzIG5vdGhpbmcgQ2xvdWRGcm9udCBjYWNoZWQsIHNvIHRoZSBwYWdlIHN0YXllZFxuICAgICAgLy8gc3RhbGUgd2hpbGUgdGhlIHJvdyB3YXMgc3RhbXBlZCByZXZhbGlkYXRlZCBhbmQgbmV2ZXIgcmV0cmllZC5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeTogeyBJdGVtczogW3sgc2s6IHsgUzogXCJ1c2VyIzQyI3Rlc3QtYnVpbGQtaWQvYWNjb3VudC5qc29uXCIgfSB9XSB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ1c2VyIzQyXCIpO1xuXG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9hY2NvdW50KlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSBwYXRoIGEgcmV2YWxpZGF0ZVBhdGggdGFnIG5hbWVzIGV2ZW4gd2l0aCBubyBtYXBwaW5nIHJvd3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQSBidWlsZC10aW1lIHByZXJlbmRlciBoYXMgbm8gbWFwcGluZyByb3dzLCBzbyB0aGUgcXVlcnkgY29tZXMgYmFja1xuICAgICAgLy8gZW1wdHkgYW5kIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGVyaXZlIGEgQ2xvdWRGcm9udCBwYXRoIGZyb20gLSBleGNlcHQgdGhlXG4gICAgICAvLyB0YWcsIHdoaWNoIGZvciBgcmV2YWxpZGF0ZVBhdGhgIGlzIGBfTl9UXzxwYXRoPmAuIFdpdGhvdXQgdGhpcyB0aGUgQ0ROXG4gICAgICAvLyBhbnN3ZXJzIHdpdGggdGhlIHByZS1yZXZhbGlkYXRpb24gcGFnZSB1bnRpbCBgcy1tYXhhZ2U9MzE1MzYwMDBgXG4gICAgICAvLyBleHBpcmVzLiBNZWFzdXJlZCBhZ2FpbnN0IG5leHQuanMncyBgdGVzdC9lMmUvYXBwLWRpci90cmFpbGluZ3NsYXNoYC5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogeyBJdGVtczogW10gfSB9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcIl9OX1RfL2VuL2xlZ2FjeS9cIik7XG5cbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIC8vIEJvdGggc2xhc2ggdmFyaWFudHMsIHdoaWNoIHRoZSB0cmFpbGluZyB3aWxkY2FyZCBjb3ZlcnM6IGFcbiAgICAgIC8vIGB0cmFpbGluZ1NsYXNoYCBhcHAncyBjYWNoZWQgVVJJIGlzIHRoZSByZWRpcmVjdCB0YXJnZXQsIG5vdCB0aGUgcm91dGUuXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoW1xuICAgICAgICBcIi9lbi9sZWdhY3kqXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIFVSSSB1bmRlciB0aGUgYXBwJ3MgYmFzZVBhdGgsIG5vdCB0aGUgYmFyZSByb3V0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBDbG91ZEZyb250IGNhY2hlZCBgL2Jhc2UvaXNyLzFgOyB0aGUgY2FjaGUga2V5IGFuZCB0aGUgYHJldmFsaWRhdGVQYXRoYFxuICAgICAgLy8gdGFnIGJvdGggbmFtZSBgL2lzci8xYCwgYmVjYXVzZSBOZXh0LmpzIHN0cmlwcyBgYmFzZVBhdGhgIGJlZm9yZSByb3V0aW5nXG4gICAgICAvLyBhbmQgbmV2ZXIgc2hvd3MgaXQgdG8gdGhlIGNhY2hlIGhhbmRsZXIuIEludmFsaWRhdGluZyB0aGUgYmFyZSByb3V0ZVxuICAgICAgLy8gbWF0Y2hlcyBub3RoaW5nIGF0IHRoZSBlZGdlLCBzbyB0aGUgc3RhbGUgcGFnZSBzdXJ2aXZlcyB1bnRpbFxuICAgICAgLy8gYHMtbWF4YWdlYCBleHBpcmVzLlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICB1c2VCYXNlUGF0aCgpO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhCYXNlUGF0aCA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgSXRlbXM6IFtcbiAgICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIiB9IH0sXG4gICAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pbmRleC5qc29uXCIgfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aEJhc2VQYXRoLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFxuICAgICAgICBleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgICAgICBcIi9iYXNlL2lzci8xKlwiLFxuICAgICAgICAgIC8vIFRoZSBhcHAncyByb290IHVuZGVyIGEgYGJhc2VQYXRoYCBpcyBgL2Jhc2VgLCBub3QgYC9iYXNlL2AsIGFuZFxuICAgICAgICAgIC8vIHNwZWxsZWQgb3V0OiBgL2Jhc2UqYCB3b3VsZCBiZSB0aGUgd2hvbGUgYXBwLlxuICAgICAgICAgIFwiL2Jhc2VcIixcbiAgICAgICAgICBcIi9iYXNlPypcIixcbiAgICAgICAgICBcIi9iYXNlL1wiLFxuICAgICAgICAgIFwiL2Jhc2UvPypcIixcbiAgICAgICAgXSksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS5ub3QudG9Db250YWluKFxuICAgICAgICBcIi9pc3IvMVwiLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwiYWRkcyB0aGUgYmFzZVBhdGggdG8gYSByZXZhbGlkYXRlUGF0aCB0YWcncyBwYXRoIHRvb1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIHVzZUJhc2VQYXRoKCk7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aEJhc2VQYXRoID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgZHluYW1vUmVzcG9uc2VzKHsgcXVlcnk6IHsgSXRlbXM6IFtdIH0gfSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoQmFzZVBhdGgucmV2YWxpZGF0ZVRhZyhcIl9OX1RfL2Jsb2dcIik7XG5cbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykudG9FcXVhbChbXG4gICAgICAgIFwiL2Jhc2UvYmxvZypcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJkb2VzIG5vdCBpbnZhbGlkYXRlIGEgQ2xvdWRGcm9udCBwYXRoIGZvciBhbiBhcHAgdGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogeyBJdGVtczogW10gfSB9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInBvc3RzXCIpO1xuXG4gICAgICAvLyBOb3RoaW5nIHRvIGludmFsaWRhdGU6IGFuIGFwcCB0YWcgbmFtZXMgbm8gcGF0aCwgYW5kIG5vIGVudHJ5IGlzIG1hcHBlZFxuICAgICAgLy8gdG8gaXQuXG4gICAgICBleHBlY3QobW9ja0Nsb3VkRnJvbnRTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbm90IGNhbGwgU1NNIG9yIENsb3VkRnJvbnQgd2hlbiBubyBkaXN0cmlidXRpb24gcGFyYW1ldGVyIGlzIGNvbmZpZ3VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbW9ja1F1ZXJ5UmVzcG9uc2UgPSB7XG4gICAgICAgIEl0ZW1zOiBbeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzEuanNvblwiIH0gfV0sXG4gICAgICB9O1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoeyBxdWVyeTogbW9ja1F1ZXJ5UmVzcG9uc2UgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChtb2NrU3NtU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGV4cGVjdChtb2NrQ2xvdWRGcm9udFNlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgU1NNL0Nsb3VkRnJvbnQgaW52YWxpZGF0aW9uIGVycm9ycyBncmFjZWZ1bGx5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtb2NrUXVlcnlSZXNwb25zZSA9IHtcbiAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIgfSB9XSxcbiAgICAgIH07XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7IHF1ZXJ5OiBtb2NrUXVlcnlSZXNwb25zZSB9KTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIlNTTSBFcnJvclwiKSk7XG5cbiAgICAgIGF3YWl0IGV4cGVjdChcbiAgICAgICAgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpLFxuICAgICAgKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgcGFnZSBpdHNlbGYgZm9yIGEgcmV2YWxpZGF0ZVBhdGgocGF0aCwgJ3BhZ2UnKSB0YWdcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gYHJldmFsaWRhdGVQYXRoKHBhdGgsIHR5cGUpYCBhcHBlbmRzIHRoZSB0eXBlIHRvIHRoZSBpbXBsaWNpdCB0YWcsIHNvIHRoZVxuICAgICAgLy8gdGFnIHJlYWRzIGBfTl9UXy9wcmljaW5nL3BhZ2VgIC0gYSBwYXRoIG5vIFVSTCBoYXMuIFRha2luZyBpdCBsaXRlcmFsbHlcbiAgICAgIC8vIGludmFsaWRhdGVkIG5vdGhpbmcgdGhhdCBleGlzdGVkLCB3aGljaCBpcyB0aGUgd2hvbGUgb2YgdGhlIGJ1ZzogdGhlXG4gICAgICAvLyBzZWNvbmQgYXJndW1lbnQgc2lsZW50bHkgdHVybmVkIENETiBpbnZhbGlkYXRpb24gb2ZmLlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7IHF1ZXJ5OiB7IEl0ZW1zOiBbXSB9IH0pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbi5yZXZhbGlkYXRlVGFnKFwiX05fVF8vcHJpY2luZy9wYWdlXCIpO1xuXG4gICAgICBjb25zdCBbaW52YWxpZGF0aW9uSW5wdXRdID0gKFxuICAgICAgICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrXG4gICAgICApLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoXG4gICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1wiL3ByaWNpbmcqXCJdKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInNraXBzIG1hcHBpbmcgcm93cyB0aGF0IG5hbWUgbm8gY2FjaGVkIFVSSVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBIGR5bmFtaWMgdGVtcGxhdGUgYW5kIGEgZmV0Y2gtY2FjaGUgZW50cnkgYXJlIGJvdGggcm93cyBhIHJlYWwgdGFnXG4gICAgICAvLyBjYXJyaWVzLCBhbmQgbmVpdGhlciBpcyBhIFVSTDogYC9ibG9nL1tzbHVnXWAgbWF0Y2hlcyBub3RoaW5nIGF0IHRoZSBlZGdlXG4gICAgICAvLyAoQ2xvdWRGcm9udCBoYXMgbm8gc3VjaCBVUkkpLCBhbmQgYSBmZXRjaCBrZXkgaXMgYSBoYXNoIG9mIHRoZSByZXF1ZXN0LlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7XG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgSXRlbXM6IFtcbiAgICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2Jsb2cvW3NsdWddLmpzb25cIiB9IH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNrOiB7XG4gICAgICAgICAgICAgICAgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkLzAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmLmpzb25cIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9ibG9nL2hlbGxvLmpzb25cIiB9IH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgY29uc3QgaXRlbXM6IHN0cmluZ1tdID0gaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXM7XG4gICAgICBleHBlY3QoaXRlbXMpLnRvRXF1YWwoW1wiL2Jsb2cvaGVsbG8qXCJdKTtcbiAgICAgIGV4cGVjdChpdGVtcy5zb21lKChwYXRoKSA9PiBwYXRoLmluY2x1ZGVzKFwiW1wiKSkpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGl0ZW1zLnNvbWUoKHBhdGgpID0+IHBhdGguaW5jbHVkZXMoXCIwMTIzNDU2Nzg5YWJjZGVmXCIpKSkudG9CZShcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJ3YWxrcyBldmVyeSBRdWVyeSBwYWdlIG9mIGEgdGFnJ3MgbWFwcGluZyByb3dzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIE9uZSBgUXVlcnlgIGFuc3dlcnMgd2l0aCBhdCBtb3N0IDEgTUIuIEEgdGFnIG9uIGEgbGFyZ2UgYXBwIHJ1bnMgcGFzdFxuICAgICAgLy8gdGhhdCwgYW5kIHRha2luZyBvbmx5IHRoZSBmaXJzdCBwYWdlIGRlbGV0ZWQgc29tZSBvZiB0aGUgdGFnJ3MgZW50cmllc1xuICAgICAgLy8gYW5kIGludmFsaWRhdGVkIG9ubHkgc29tZSBvZiBpdHMgcGF0aHMgLSBhIHBhcnRpYWwgcmV2YWxpZGF0aW9uIHRoYXRcbiAgICAgIC8vIGxvb2tzIGxpa2UgYSBjYWNoZSBidWcuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgbGV0IHF1ZXJpZXMgPSAwO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgUXVlcnlDb21tYW5kKSB7XG4gICAgICAgICAgcXVlcmllcysrO1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICBxdWVyaWVzID09PSAxXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIgfSB9XSxcbiAgICAgICAgICAgICAgICAgIExhc3RFdmFsdWF0ZWRLZXk6IHsgcGs6IHsgUzogXCJ0ZXN0LWJ1aWxkLWlkXCIgfSB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgOiB7IEl0ZW1zOiBbeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzIuanNvblwiIH0gfV0gfSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgfSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhEaXN0cmlidXRpb24ucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QocXVlcmllcykudG9CZSgyKTtcbiAgICAgIGNvbnN0IFtpbnZhbGlkYXRpb25JbnB1dF0gPSAoXG4gICAgICAgIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2tcbiAgICAgICkubW9jay5jYWxsc1swXTtcbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25JbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcykudG9FcXVhbChbXG4gICAgICAgIFwiL2lzci8xKlwiLFxuICAgICAgICBcIi9pc3IvMipcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJjb2xsYXBzZXMgdG8gb25lIGFwcC13aWRlIHdpbGRjYXJkIHJhdGhlciB0aGFuIHNlbmRpbmcgbWFueSBpbnZhbGlkYXRpb25zXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIENsb3VkRnJvbnQgY2FwcyBhIHJlcXVlc3QgYXQgMTUgd2lsZGNhcmQgcGF0aHMgYW5kIGFsbG93cyAxNVxuICAgICAgLy8gaW52YWxpZGF0aW9ucyBpbiBwcm9ncmVzcy4gQSB0YWcgY292ZXJpbmcgaHVuZHJlZHMgb2YgcGFnZXMgdGhlcmVmb3JlXG4gICAgICAvLyBjYW5ub3QgYmUgc3BlbGxlZCBvdXQ6IHNlbmRpbmcgYSByZXF1ZXN0IHBlciAxNSBwYXRocyB0aHJvdHRsZXMsIGFuZCBhXG4gICAgICAvLyB0aHJvdHRsZWQgcmVxdWVzdCBpcyBhIHBhZ2UgdGhhdCBzdGF5cyBzdGFsZS5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBkeW5hbW9SZXNwb25zZXMoe1xuICAgICAgICBxdWVyeToge1xuICAgICAgICAgIEl0ZW1zOiBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyMDAgfSwgKF8sIGkpID0+ICh7XG4gICAgICAgICAgICBzazogeyBTOiBgdGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvJHtpfS5qc29uYCB9LFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KG1vY2tDbG91ZEZyb250U2VuZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkludmFsaWRhdGlvbkJhdGNoLlBhdGhzLkl0ZW1zKS50b0VxdWFsKFtcIi8qXCJdKTtcbiAgICB9KTtcblxuICAgIC8qKiBBIGhhbmRsZXIgd2l0aCBhIGRpc3RyaWJ1dGlvbiwgYW5kIER5bmFtb0RCIGFuc3dlcmluZyBgcXVlcnlgIGZvciBpdC4gKi9cbiAgICBjb25zdCB3aXRoRGlzdHJpYnV0aW9uID0gKHF1ZXJ5OiB1bmtub3duKSA9PiB7XG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGR5bmFtb1Jlc3BvbnNlcyh7IHF1ZXJ5IH0pO1xuICAgICAgbW9ja1NzbVNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgICBQYXJhbWV0ZXI6IHsgVmFsdWU6IFwidGVzdC1kaXN0cmlidXRpb24taWRcIiB9LFxuICAgICAgfSk7XG4gICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgICAgcmV0dXJuIG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgIH07XG4gICAgY29uc3QgaW52YWxpZGF0aW9ucyA9ICgpOiBzdHJpbmdbXVtdID0+XG4gICAgICAoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxscy5tYXAoXG4gICAgICAgIChbaW5wdXRdKSA9PiBpbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcyxcbiAgICAgICk7XG4gICAgY29uc3QgcGFnZXMgPSAodGFnOiBzdHJpbmcsIGNvdW50OiBudW1iZXIpID0+ICh7XG4gICAgICBJdGVtczogQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgKF8sIGkpID0+ICh7XG4gICAgICAgIHNrOiB7IFM6IGAke3RhZ30jdGVzdC1idWlsZC1pZC9pc3IvJHtpfS5qc29uYCB9LFxuICAgICAgfSkpLFxuICAgIH0pO1xuXG4gICAgaXQoXCJzZW5kcyBhIHRhZydzIHBhdGhzIGFzIG9uZSByZXF1ZXN0IHdoaWxlIHRoZXkgZml0XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIENsb3VkRnJvbnQncyB3aWxkY2FyZCBxdW90YSBpcyBzaGFyZWQgYnkgZXZlcnkgaW52YWxpZGF0aW9uIGluXG4gICAgICAvLyBwcm9ncmVzcyBvbiB0aGUgZGlzdHJpYnV0aW9uLiBTcGxpdHRpbmcgdGVuIHBhZ2VzJyB0d2VudHkgd2lsZGNhcmRzXG4gICAgICAvLyBpbnRvIHR3byBiYWNrLXRvLWJhY2sgcmVxdWVzdHMgaGFkIHRoZSBzZWNvbmQgcmVqZWN0ZWQsIGFuZCBpdHMgcGFnZXNcbiAgICAgIC8vIHN0YXllZCBzdGFsZSBhdCB0aGUgZWRnZS5cbiAgICAgIGF3YWl0IHdpdGhEaXN0cmlidXRpb24ocGFnZXMoXCJ0ZXN0LXRhZ1wiLCAxMCkpLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9IYXZlTGVuZ3RoKDEpO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKVswXSkudG9IYXZlTGVuZ3RoKDEwKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY29sbGFwc2VzIHRvIHRoZSB3aG9sZSBhcHAgcGFzdCBmaWZ0ZWVuIHdpbGRjYXJkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB3aXRoRGlzdHJpYnV0aW9uKHBhZ2VzKFwidGVzdC10YWdcIiwgMTYpKS5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImNvbGxhcHNlcyB0byB0aGUgd2hvbGUgYXBwIHVuZGVyIGEgYmFzZVBhdGgsIGl0cyByb290IGluY2x1ZGVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIE5vdCBgL2Jhc2UqYCwgd2hpY2ggd291bGQgYWxzbyBpbnZhbGlkYXRlIGEgc2libGluZyBhcHAgYXQgYC9iYXNlMmAuXG4gICAgICB1c2VCYXNlUGF0aCgpO1xuICAgICAgYXdhaXQgd2l0aERpc3RyaWJ1dGlvbihwYWdlcyhcInRlc3QtdGFnXCIsIDE2KSkucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvYmFzZVwiLCBcIi9iYXNlPypcIiwgXCIvYmFzZS8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSB3aG9sZSBhcHAgdW5kZXIgYSBiYXNlUGF0aCB3aGVuIGEgdGFnJ3Mgcm93cyBjYW5ub3QgYmUgcmVhZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICB1c2VCYXNlUGF0aCgpO1xuICAgICAgamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigpO1xuICAgICAgY29uc3QgY2RuSGFuZGxlciA9IHdpdGhEaXN0cmlidXRpb24oeyBJdGVtczogW10gfSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIGNvbW1hbmQgaW5zdGFuY2VvZiBRdWVyeUNvbW1hbmRcbiAgICAgICAgICA/IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dEV4Y2VlZGVkXCIpKVxuICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKHt9KSxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInBvc3RzXCIpO1xuXG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9ucygpKS50b0VxdWFsKFtbXCIvYmFzZVwiLCBcIi9iYXNlPypcIiwgXCIvYmFzZS8qXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInBlcmNlbnQtZW5jb2RlcyB0aGUgcm91dGVzIGl0IGludmFsaWRhdGVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIENhY2hlIGtleXMgYXJlIGRlY29kZWQgcGF0aG5hbWVzLCB3aGlsZSBDbG91ZEZyb250IGNhY2hlcyAtIGFuZFxuICAgICAgLy8gaW52YWxpZGF0aW9uIHBhdGhzIG1hdGNoIC0gdGhlIGVuY29kZWQgVVJJIHRoZSBicm93c2VyIHNlbnQuXG4gICAgICBhd2FpdCB3aXRoRGlzdHJpYnV0aW9uKHtcbiAgICAgICAgSXRlbXM6IFtcbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9ibG9nL2jDqWxsby5qc29uXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2Jsb2cvaGVsbG8gd29ybGQuanNvblwiIH0gfSxcbiAgICAgICAgICAvLyBQYXRoIGRlbGltaXRlcnMgTmV4dC5qcyByZS1lc2NhcGVkIGluIHRoZSBrZXkgc3RheSBhcyB0aGV5IGFyZS5cbiAgICAgICAgICB7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9maWxlcy9hJTJGYi5qc29uXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL0B1c2VyLzUwJS5qc29uXCIgfSB9LFxuICAgICAgICBdLFxuICAgICAgfSkucmV2YWxpZGF0ZVRhZyhbXCJ0ZXN0LXRhZ1wiLCBcIl9OX1RfL3RhZ3MvYyM/XCJdKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbXG4gICAgICAgIFtcbiAgICAgICAgICBcIi9ibG9nL2glQzMlQTlsbG8qXCIsXG4gICAgICAgICAgXCIvYmxvZy9oZWxsbyUyMHdvcmxkKlwiLFxuICAgICAgICAgIFwiL2ZpbGVzL2ElMkZiKlwiLFxuICAgICAgICAgIFwiL0B1c2VyLzUwJTI1KlwiLFxuICAgICAgICAgIFwiL3RhZ3MvYyUyMyUzRipcIixcbiAgICAgICAgXSxcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyBldmVyeSB0YWcgb2Ygb25lIGNhbGwgaW4gYSBzaW5nbGUgcmVxdWVzdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBgcmV2YWxpZGF0ZVRhZ2AgaGFuZHMgdGhlIGhhbmRsZXIgZXZlcnkgdGFnIGEgcmVxdWVzdCByZXZhbGlkYXRlZCBhdFxuICAgICAgLy8gb25jZTsgYSByZXF1ZXN0IHBlciB0YWcgY29tcGV0ZXMgZm9yIHRoZSBzYW1lIHF1b3RhLlxuICAgICAgYXdhaXQgd2l0aERpc3RyaWJ1dGlvbih7IEl0ZW1zOiBbXSB9KS5yZXZhbGlkYXRlVGFnKFtcbiAgICAgICAgXCJfTl9UXy9hXCIsXG4gICAgICAgIFwiX05fVF8vYlwiLFxuICAgICAgXSk7XG5cbiAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9hKlwiLCBcIi9iKlwiXV0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgd2hvbGUgYXBwIHdoZW4gYSB0YWcgaGFzIG1vcmUgcm93cyB0aGFuIGl0IHdhbGtzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoZSByb3dzIHBhc3QgdGhlIGxhc3QgcGFnZSB3YWxrZWQgYXJlIHBhZ2VzIHRvbzsgaW52YWxpZGF0aW5nIG9ubHkgdGhlXG4gICAgICAvLyBvbmVzIHJlYWQgbGVmdCB0aGUgcmVzdCBzdGFsZSBhdCB0aGUgZWRnZSBmb3IgdXAgdG8gYSB5ZWFyLlxuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgUXVlcnlDb21tYW5kXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBJdGVtczogW3sgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIiB9IH1dLFxuICAgICAgICAgICAgICAgIExhc3RFdmFsdWF0ZWRLZXk6IHsgcGs6IHsgUzogXCJ0ZXN0LWJ1aWxkLWlkXCIgfSB9LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSkucmV2YWxpZGF0ZVRhZyhcbiAgICAgICAgXCJ0ZXN0LXRhZ1wiLFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiLypcIl1dKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaWdub3JlcyByb3dzIHRoYXQgYW5vdGhlciB0YWcgc2hhcmluZyB0aGUgcHJlZml4IG93bnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gYGJlZ2luc193aXRoKHNrLCBcInVzZXIjXCIpYCBhbHNvIG1hdGNoZXMgdGhlIHRhZyBgdXNlciM0MmA6IGl0cyBiYXJlXG4gICAgICAvLyBtYXJrZXIgcm93LCBhbmQgaXRzIG1hcHBpbmcgcm93cy4gUmVhZCBhcyBgdXNlcmAncywgdGhleSBiZWNhbWVcbiAgICAgIC8vIGludmFsaWRhdGlvbiBwYXRocyBsaWtlIGAvNDJgIHRoYXQgbmFtZSBub3RoaW5nLlxuICAgICAgYXdhaXQgd2l0aERpc3RyaWJ1dGlvbih7XG4gICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgeyBzazogeyBTOiBcInVzZXIjNDJcIiB9IH0sXG4gICAgICAgICAgeyBzazogeyBTOiBcInVzZXIjNDIjdGVzdC1idWlsZC1pZC9hY2NvdW50Lmpzb25cIiB9IH0sXG4gICAgICAgICAgeyBzazogeyBTOiBcInVzZXIjdGVzdC1idWlsZC1pZC9wcm9maWxlLmpzb25cIiB9IH0sXG4gICAgICAgIF0sXG4gICAgICB9KS5yZXZhbGlkYXRlVGFnKFwidXNlclwiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiL3Byb2ZpbGUqXCJdXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImFkZHMgdGhlIGJ1aWxkLXRpbWUgcHJlcmVuZGVycyB0aGUgYnVpbGQncyB0YWcgbWFuaWZlc3QgbmFtZXMsIHJlYWRpbmcgaXQgb25jZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBBIHByZXJlbmRlciBpcyB3cml0dGVuIGJ5IHRoZSBhZGFwdGVyLCBuZXZlciB0aHJvdWdoIGBzZXRgLCBzbyBpdCBoYXNcbiAgICAgIC8vIG5vIG1hcHBpbmcgcm93OiB0aGUgbWFuaWZlc3QgaXMgdGhlIG9ubHkgcmVjb3JkIG9mIGl0cyB0YWdzLlxuICAgICAgY29uc3QgY2RuSGFuZGxlciA9IHdpdGhEaXN0cmlidXRpb24oe1xuICAgICAgICBJdGVtczogW3sgc2s6IHsgUzogXCJwb3N0cyN0ZXN0LWJ1aWxkLWlkL2Jsb2cvYi5qc29uXCIgfSB9XSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWFuaWZlc3RHZXRzID0gKCkgPT5cbiAgICAgICAgKEdldE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMuZmlsdGVyKFxuICAgICAgICAgIChbaW5wdXRdKSA9PlxuICAgICAgICAgICAgaW5wdXQuS2V5ID09PSBcInRlc3QtYnVpbGQtaWQvX2Nkay1uZXh0anMtdGFnLW1hbmlmZXN0Lmpzb25cIixcbiAgICAgICAgKTtcbiAgICAgIG1vY2tTM1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIEdldE9iamVjdENvbW1hbmRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIEJvZHk6IHtcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU3RyaW5nOiBhc3luYyAoKSA9PlxuICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHBvc3RzOiBbXCJibG9nL2FcIiwgXCJpbmRleFwiXSB9KSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwicG9zdHNcIik7XG4gICAgICBhd2FpdCBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJjb25zdHJ1Y3RvclwiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiL2Jsb2cvYipcIiwgXCIvYmxvZy9hKlwiLCBcIi9cIiwgXCIvPypcIl1dKTtcbiAgICAgIGV4cGVjdChtYW5pZmVzdEdldHMoKSkudG9IYXZlTGVuZ3RoKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnZhbGlkYXRlcyB0aGUgd2hvbGUgYXBwIHdoZW4gdGhlIGJ1aWxkJ3MgdGFnIG1hbmlmZXN0IGNhbm5vdCBiZSByZWFkLCBhbmQgcmVhZHMgaXQgYWdhaW4gbmV4dCB0aW1lXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHsgSXRlbXM6IFtdIH0pO1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwiQWNjZXNzRGVuaWVkXCIpKTtcblxuICAgICAgYXdhaXQgY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwicG9zdHNcIik7XG4gICAgICBhd2FpdCBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiLypcIl1dKTtcbiAgICAgIGV4cGVjdChtb2NrUzNTZW5kKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgfSk7XG5cbiAgICBpdChcImludmFsaWRhdGVzIHRoZSB3aG9sZSBhcHAgd2hlbiBhIHRhZydzIG1hcmtlciByb3cgY2Fubm90IGJlIHdyaXR0ZW5cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gT3RoZXIgaW5zdGFuY2VzIHdvdWxkIG5ldmVyIHNlZSB0aGUgcmV2YWxpZGF0aW9uLCBzbyBubyBwYXRoIGxpc3QgaXNcbiAgICAgIC8vIGVub3VnaC5cbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigpO1xuICAgICAgbW9ja0R5bmFtb1NlbmQubW9ja0ltcGxlbWVudGF0aW9uKChjb21tYW5kOiB1bmtub3duKSA9PlxuICAgICAgICBjb21tYW5kIGluc3RhbmNlb2YgUXVlcnlDb21tYW5kXG4gICAgICAgICAgPyBQcm9taXNlLnJlc29sdmUoeyBJdGVtczogW10gfSlcbiAgICAgICAgICA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlByb3Zpc2lvbmVkVGhyb3VnaHB1dEV4Y2VlZGVkXCIpKSxcbiAgICAgICk7XG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiLypcIl1dKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHdob2xlIGFwcCB3aGVuIGEgdGFnJ3MgbWFwcGluZyByb3dzIGNhbm5vdCBiZSByZWFkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoZSBtYXJrZXIgcm93IGlzIHdyaXR0ZW4gYmVmb3JlIHRoZSBRdWVyeSwgc28gYSBmYWlsZWQgUXVlcnkgbGVhdmVzXG4gICAgICAvLyB0aGUgdGFnIHJldmFsaWRhdGVkIGF0IHRoZSBvcmlnaW4gd2l0aCBubyBwYXRocyBuYW1lZCBmb3IgdGhlIGVkZ2UuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJ0ZXN0LXBhcmFtLW5hbWVcIjtcbiAgICAgIGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT5cbiAgICAgICAgY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZFxuICAgICAgICAgID8gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiUHJvdmlzaW9uZWRUaHJvdWdocHV0RXhjZWVkZWRcIikpXG4gICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoe30pLFxuICAgICAgKTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgICAgUGFyYW1ldGVyOiB7IFZhbHVlOiBcInRlc3QtZGlzdHJpYnV0aW9uLWlkXCIgfSxcbiAgICAgIH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSkucmV2YWxpZGF0ZVRhZyhbXG4gICAgICAgIFwiX05fVF8vYVwiLFxuICAgICAgICBcInBvc3RzXCIsXG4gICAgICBdKTtcblxuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiLypcIl1dKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKFwid2hlbiBDbG91ZEZyb250J3MgaW52YWxpZGF0aW9uIHF1b3RhIGlzIGZ1bGxcIiwgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGplc3QudXNlRmFrZVRpbWVycygpO1xuICAgICAgfSk7XG4gICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBqZXN0LnVzZVJlYWxUaW1lcnMoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBxdW90YUVycm9yID0gKCkgPT5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICBuZXcgRXJyb3IoXCJZb3VyIHJlcXVlc3QgY29udGFpbnMgdG9vIG1hbnkgaW52YWxpZGF0aW9uc1wiKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIlRvb01hbnlJbnZhbGlkYXRpb25zSW5Qcm9ncmVzc1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgIGl0KFwicmV0cmllcyBhcyBvbmUgYXBwLXdpZGUgd2lsZGNhcmQgYWZ0ZXIgYSBiYWNrb2ZmXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgY2RuSGFuZGxlciA9IHdpdGhEaXN0cmlidXRpb24ocGFnZXMoXCJ0ZXN0LXRhZ1wiLCAyKSk7XG4gICAgICAgIG1vY2tDbG91ZEZyb250U2VuZFxuICAgICAgICAgIC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UocXVvdGFFcnJvcigpKVxuICAgICAgICAgIC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe30pO1xuXG4gICAgICAgIGNvbnN0IGRvbmUgPSBjZG5IYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcbiAgICAgICAgYXdhaXQgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lQXN5bmMoMTAwMCk7XG4gICAgICAgIGF3YWl0IGRvbmU7XG5cbiAgICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKSkudG9FcXVhbChbW1wiL2lzci8wKlwiLCBcIi9pc3IvMSpcIl0sIFtcIi8qXCJdXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoXCJnaXZlcyB1cCBhZnRlciB0aGUgbGFzdCByZXRyeVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNkbkhhbmRsZXIgPSB3aXRoRGlzdHJpYnV0aW9uKHBhZ2VzKFwidGVzdC10YWdcIiwgMSkpO1xuICAgICAgICBtb2NrQ2xvdWRGcm9udFNlbmQubW9ja1JlamVjdGVkVmFsdWUocXVvdGFFcnJvcigpKTtcblxuICAgICAgICBjb25zdCBkb25lID0gY2RuSGFuZGxlci5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG4gICAgICAgIGF3YWl0IGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZUFzeW5jKDMwMDApO1xuICAgICAgICBhd2FpdCBleHBlY3QoZG9uZSkucmVzb2x2ZXMudG9CZVVuZGVmaW5lZCgpO1xuXG4gICAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9pc3IvMCpcIl0sIFtcIi8qXCJdLCBbXCIvKlwiXV0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KFwiZG9lcyBub3QgcmV0cnkgYW55IG90aGVyIGVycm9yXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgY2RuSGFuZGxlciA9IHdpdGhEaXN0cmlidXRpb24ocGFnZXMoXCJ0ZXN0LXRhZ1wiLCAxKSk7XG4gICAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZShuZXcgRXJyb3IoXCJBY2Nlc3NEZW5pZWRcIikpO1xuXG4gICAgICAgIGF3YWl0IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICAgIGV4cGVjdChpbnZhbGlkYXRpb25zKCkpLnRvRXF1YWwoW1tcIi9pc3IvMCpcIl1dKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdChcInJldHJpZXMgdGhlIGFwcCdzIHJvb3QgdW5kZXIgYSBiYXNlUGF0aCB0b29cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAvLyBgL2Jhc2UvKmAgbWF0Y2hlcyBuZWl0aGVyIGAvYmFzZWAgbm9yIGAvYmFzZT9fcnNjPeKApmA6IHJldHJ5aW5nXG4gICAgICAgIC8vIGByZXZhbGlkYXRlUGF0aChcIi9cIilgIGFzIHRoYXQgbGVmdCB0aGUgaG9tZSBwYWdlIHN0YWxlIGF0IHRoZSBlZGdlLlxuICAgICAgICB1c2VCYXNlUGF0aCgpO1xuICAgICAgICBjb25zdCBjZG5IYW5kbGVyID0gd2l0aERpc3RyaWJ1dGlvbih7IEl0ZW1zOiBbXSB9KTtcbiAgICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kXG4gICAgICAgICAgLm1vY2tSZWplY3RlZFZhbHVlT25jZShxdW90YUVycm9yKCkpXG4gICAgICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7fSk7XG5cbiAgICAgICAgY29uc3QgZG9uZSA9IGNkbkhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcIl9OX1RfL1wiKTtcbiAgICAgICAgYXdhaXQgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lQXN5bmMoMTAwMCk7XG4gICAgICAgIGF3YWl0IGRvbmU7XG5cbiAgICAgICAgZXhwZWN0KGludmFsaWRhdGlvbnMoKVsxXSkudG9FcXVhbChbXCIvYmFzZVwiLCBcIi9iYXNlPypcIiwgXCIvYmFzZS8qXCJdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJyZWNvcmRzIGEgcHJvZmlsZSdzIHJldmFsaWRhdGlvbiBhcyBzdGFsZSBub3csIGV4cGlyaW5nIGxhdGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IERhdGUubm93KCk7XG4gICAgICBhd2FpdCBoYW5kbGVyLnJldmFsaWRhdGVUYWcoXCJwb3N0c1wiLCB7IGV4cGlyZTogNjAgfSk7XG5cbiAgICAgIGNvbnN0IFtpbnB1dF0gPSAoVXBkYXRlSXRlbUNvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF07XG4gICAgICBleHBlY3QoaW5wdXQuS2V5LnNrLlMpLnRvQmUoXCJwb3N0c1wiKTtcbiAgICAgIGV4cGVjdChpbnB1dC5VcGRhdGVFeHByZXNzaW9uKS50b0JlKFxuICAgICAgICBcIlNFVCBzdGFsZUF0ID0gOnN0YWxlQXQsIGV4cGlyZWRBdCA9IDpleHBpcmVkQXRcIixcbiAgICAgICk7XG4gICAgICBjb25zdCBzdGFsZUF0ID0gTnVtYmVyKGlucHV0LkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXNbXCI6c3RhbGVBdFwiXS5OKTtcbiAgICAgIGV4cGVjdChzdGFsZUF0KS50b0JlR3JlYXRlclRoYW5PckVxdWFsKGJlZm9yZSk7XG4gICAgICBleHBlY3QoTnVtYmVyKGlucHV0LkV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXNbXCI6ZXhwaXJlZEF0XCJdLk4pKS50b0JlKFxuICAgICAgICBzdGFsZUF0ICsgNjBfMDAwLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFRoZSBjYWNoZSBoYW5kbGVyJ3MgaGFsZiBvZiBgcmVzLnJldmFsaWRhdGUoKWAncyBDRE4gaW52YWxpZGF0aW9uOiB0aGUgaG9va1xuICAgKiBpdCByZWdpc3RlcnMgZm9yIGBpbnZhbGlkYXRlUmV2YWxpZGF0ZWRQYWdlYCBpbiBgcnVudGltZS9jb3JlLnRzYC4gVGhlXG4gICAqIHJ1bnRpbWUncyBoYWxmIGlzIGluIGBjb3JlLnRlc3QudHNgLlxuICAgKi9cbiAgZGVzY3JpYmUoXCJ0aGUgcmV2YWxpZGF0ZWQtcGFnZSBob29rXCIsICgpID0+IHtcbiAgICBjb25zdCBIT09LID0gUkVWQUxJREFURURfUEFHRV9IT09LO1xuICAgIGNvbnN0IGdsb2JhbHMgPSBnbG9iYWxUaGlzIGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+O1xuICAgIHR5cGUgSG9vayA9IChyb3V0ZXM6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBkZWxldGUgZ2xvYmFsc1tIT09LXTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHsgUGFyYW1ldGVyOiB7IFZhbHVlOiBcIkVESVNUUklCVVRJT05cIiB9IH0pO1xuICAgICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIChDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrQ2xlYXIoKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGludmFsaWRhdGVkUGF0aHMoKTogc3RyaW5nW10ge1xuICAgICAgY29uc3QgW2lucHV0XSA9IChDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrXG4gICAgICAgIC5jYWxsc1swXTtcbiAgICAgIHJldHVybiBpbnB1dC5JbnZhbGlkYXRpb25CYXRjaC5QYXRocy5JdGVtcztcbiAgICB9XG5cbiAgICBpdChcImlzIHJlZ2lzdGVyZWQgb25seSBiZWhpbmQgYSBkaXN0cmlidXRpb25cIiwgKCkgPT4ge1xuICAgICAgbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSk7XG4gICAgICBleHBlY3QoZ2xvYmFsc1tIT09LXSkudG9CZVVuZGVmaW5lZCgpO1xuXG4gICAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FID0gXCJwYXJhbVwiO1xuICAgICAgbmV3IFMzQ2FjaGVIYW5kbGVyKHsgY29udGV4dDogbW9ja0NvbnRleHQgfSk7XG4gICAgICBleHBlY3QodHlwZW9mIGdsb2JhbHNbSE9PS10pLnRvQmUoXCJmdW5jdGlvblwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaW52YWxpZGF0ZXMgdGhlIHBhZ2UgYW5kIGl0cyBkYXRhIHJvdXRlIHVuZGVyIGJhc2VQYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInBhcmFtXCI7XG4gICAgICBuZXcgUzNDYWNoZUhhbmRsZXIoeyBjb250ZXh0OiBtb2NrQ29udGV4dCwgYmFzZVBhdGg6IFwiYmFzZVwiIH0pO1xuICAgICAgYXdhaXQgKGdsb2JhbHNbSE9PS10gYXMgSG9vaykoW1xuICAgICAgICBcIi9ibG9nL2hlbGxvXCIsXG4gICAgICAgIFwiL19uZXh0L2RhdGEvdGVzdC1idWlsZC1pZC9ibG9nL2hlbGxvLmpzb25cIixcbiAgICAgIF0pO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXG4gICAgICAgIFwiL2Jhc2UvYmxvZy9oZWxsbypcIixcbiAgICAgICAgXCIvYmFzZS9fbmV4dC9kYXRhL3Rlc3QtYnVpbGQtaWQvYmxvZy9oZWxsby5qc29uKlwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNwZWxscyBvdXQgdGhlIHJvb3QgcmF0aGVyIHRoYW4gaW52YWxpZGF0aW5nIHRoZSB3aG9sZSBhcHBcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwicGFyYW1cIjtcbiAgICAgIG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgICAgYXdhaXQgKGdsb2JhbHNbSE9PS10gYXMgSG9vaykoW1xuICAgICAgICBcIi9cIixcbiAgICAgICAgXCIvX25leHQvZGF0YS90ZXN0LWJ1aWxkLWlkL2luZGV4Lmpzb25cIixcbiAgICAgIF0pO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGVkUGF0aHMoKSkudG9FcXVhbChbXG4gICAgICAgIFwiL1wiLFxuICAgICAgICBcIi8/KlwiLFxuICAgICAgICBcIi9fbmV4dC9kYXRhL3Rlc3QtYnVpbGQtaWQvaW5kZXguanNvbipcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzZW5kcyBldmVyeSBwYXRoIG9uY2UsIGluIG9uZSBpbnZhbGlkYXRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwicGFyYW1cIjtcbiAgICAgIG5ldyBTM0NhY2hlSGFuZGxlcih7IGNvbnRleHQ6IG1vY2tDb250ZXh0IH0pO1xuICAgICAgYXdhaXQgKGdsb2JhbHNbSE9PS10gYXMgSG9vaykoW1xuICAgICAgICBcIi9ibG9nXCIsXG4gICAgICAgIFwiL19uZXh0L2RhdGEvdGVzdC1idWlsZC1pZC9lbi9ibG9nLmpzb25cIixcbiAgICAgICAgXCIvZW4vYmxvZ1wiLFxuICAgICAgICBcIi9ibG9nXCIsXG4gICAgICBdKTtcbiAgICAgIGV4cGVjdChDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICBleHBlY3QoaW52YWxpZGF0ZWRQYXRocygpKS50b0VxdWFsKFtcbiAgICAgICAgXCIvYmxvZypcIixcbiAgICAgICAgXCIvX25leHQvZGF0YS90ZXN0LWJ1aWxkLWlkL2VuL2Jsb2cuanNvbipcIixcbiAgICAgICAgXCIvZW4vYmxvZypcIixcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInJlc2V0UmVxdWVzdENhY2hlXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBjb21wbGV0ZSB3aXRob3V0IGVycm9yc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBleHBlY3QoaGFuZGxlci5yZXNldFJlcXVlc3RDYWNoZSgpKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|