@rudderstack/integrations-lib 0.1.8 → 0.1.10
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/build/types.d.ts +1 -2
- package/build/types.d.ts.map +1 -1
- package/build/types.js +1 -1
- package/build/utils/misc.test.js +2 -2
- package/build/utils/sem.js +2 -2
- package/package.json +1 -1
package/build/utils/misc.test.js
CHANGED
|
@@ -1932,7 +1932,7 @@ describe('misc', () => {
|
|
|
1932
1932
|
// Tests that the function returns the correct offset value for the timezone string 'America/New_York'
|
|
1933
1933
|
it('should return the correct offset value for the timezone string "America/New_York"', () => {
|
|
1934
1934
|
const offset = (0, misc_1.getOffsetInSec)('America/New_York');
|
|
1935
|
-
expect(offset).toBe(-
|
|
1935
|
+
expect(offset).toBe(-18000);
|
|
1936
1936
|
});
|
|
1937
1937
|
});
|
|
1938
1938
|
describe('formatTimeStamp', () => {
|
|
@@ -2056,4 +2056,4 @@ describe('misc', () => {
|
|
|
2056
2056
|
});
|
|
2057
2057
|
});
|
|
2058
2058
|
});
|
|
2059
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL21pc2MudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUFpRDtBQUNqRCxpQ0ErQmdCO0FBRWhCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0lBQ3BCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLHFGQUFxRjtRQUNyRixFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1lBQzFFLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzRkFBc0Y7UUFDdEYsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtZQUMzRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgscUZBQXFGO1FBQ3JGLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7WUFDMUUsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILDhFQUE4RTtRQUM5RSxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1lBQ25FLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCwrRUFBK0U7UUFDL0UsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtZQUNwRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLElBQUksQ0FB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RUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxxR0FBcUc7UUFDckcsRUFBRSxDQUFDLG9GQUFvRixFQUFFLEdBQUcsRUFBRTtZQUM1RixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvR0FBb0c7UUFDcEcsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEdBQUcsRUFBRTtZQUMzRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEs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QUcsRUFBRTtZQUN4SSxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNGLE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDakQsTUFBTSxNQUFNLEdBQUcs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RyxFQUFFO1lBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUEsbUJBQVksR0FBRSxDQUFDO1lBQzVCLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDbEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnN0cnVtZW50YXRpb25FcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQge1xuICBiYXNlNjRDb252ZXJ0b3IsXG4gIGZsYXR0ZW5NYXAsXG4gIGdldEV2ZW50VGltZSxcbiAgZ2V0VHlwZSxcbiAgaXNCbGFuayxcbiAgaXNEZWZpbmVkLFxuICBpc0RlZmluZWRBbmROb3ROdWxsLFxuICBpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHksXG4gIGlzTm90RW1wdHksXG4gIGlzTm90TnVsbCxcbiAgaXNQcmltaXRpdmUsXG4gIGlzVmFsaWRVcmwsXG4gIHJlbW92ZU51bGxWYWx1ZXMsXG4gIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyxcbiAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyxcbiAgcmVtb3ZlVW5kZWZpbmVkVmFsdWVzLFxuICBzdHJpcFRyYWlsaW5nU2xhc2gsXG4gIGlzT2JqZWN0LFxuICBpc0VtcHR5LFxuICBpc0VtcHR5T2JqZWN0LFxuICBpc0RlZmluZWROb3ROdWxsTm90RW1wdHksXG4gIHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50LFxuICBnZXRIYXNoRnJvbUFycmF5LFxuICBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZSxcbiAgZmxhdHRlbkpzb24sXG4gIGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyxcbiAgZ2V0T2Zmc2V0SW5TZWMsXG4gIGZvcm1hdFRpbWVTdGFtcCxcbiAgaGFzaFRvU2hhMjU2LFxuICBnZW5lcmF0ZVVVSUQsXG59IGZyb20gJy4vbWlzYyc7XG5cbmRlc2NyaWJlKCdtaXNjJywgKCkgPT4ge1xuICBkZXNjcmliZSgnaXNEZWZpbmVkJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgZGVmaW5lZCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBkZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoNSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1udWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG5vbi1udWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoJ2hlbGxvJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKCcnKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbnVtYmVyIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG51bWJlciBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKDEwKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgYm9vbGVhbiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBib29sZWFuIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQodHJ1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gdW5kZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gYW4gdW5kZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQodW5kZWZpbmVkKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQobnVsbCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKHt9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKFtdKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoTmFOKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZCgoKSA9PiB7fSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChTeW1ib2woKSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUbyB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgTWFwIG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgTWFwIG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKG1hcCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgb2JqZWN0aXZlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgU2V0IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IFNldCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2V0T2JqID0gbmV3IFNldCgpO1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChzZXRPYmopKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIG9iamVjdGl2ZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IFdlYWtNYXAgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgV2Vha01hcCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgZW1wdHlXZWFrTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoZW1wdHlXZWFrTWFwKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzTm90RW1wdHknLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgdHJ1ZSBmb3Igbm9uLWVtcHR5IGFycmF5c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgaW5wdXQgaXMgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KFsxLCAyLCAzXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIGVtcHR5IGFycmF5c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eShbXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIHRydWUgZm9yIG5vbi1lbXB0eSBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KHsga2V5OiAndmFsdWUnIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBlbXB0eSBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSh7fSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIHRydWUgZm9yIG5vbi1lbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KCdoZWxsbycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBlbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSgnJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBub24temVybyBudW1iZXJzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYSBub24temVybyBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KDQyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIHplcm9cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyB6ZXJvJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSgwKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eShudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkodW5kZWZpbmVkKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIE5hTlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIE5hTicsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoTmFOKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIGZhbHNlIGJvb2xlYW5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBmYWxzZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgdHJ1ZSBib29sZWFuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYSB0cnVlIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc05vdE51bGwnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBub24tbnVsbCB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBub24tbnVsbCB2YWx1ZSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKCd0ZXN0JykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIHRydXRoeSB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSB0cnV0aHkgdmFsdWUgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCh0cnVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoJycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBudW1iZXIgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbnVtYmVyIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoMTIzKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwodHJ1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChudWxsKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwodW5kZWZpbmVkKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKHt9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKFtdKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCgoKSA9PiB7fSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKE5hTikpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChTeW1ib2woKSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoKCkgPT4ge30pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChOYU4pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgc3ltYm9sIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbCgpO1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChzeW1ib2wpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNEZWZpbmVkQW5kTm90TnVsbCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoJ3Rlc3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIHN0cmluZyB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzdHJpbmcgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCgndGVzdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbnVtYmVyIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG51bWJlciB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKDEyMyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGJvb2xlYW4gdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBvYmplY3QgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKHsga2V5OiAndmFsdWUnIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGFycmF5IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBhcnJheSB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKFsxLCAyLCAzXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCgnJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgYXJyYXkgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoW10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoe30pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbChudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbChOYU4pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KCdoZWxsbycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGEgbm9uLWVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KFsxLCAyLCAzXSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIGEgYm9vbGVhbiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGEgYm9vbGVhbiB2YWx1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkodHJ1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBhIG51bWJlciB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGEgbnVtYmVyIHZhbHVlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSg0MikpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KCcnKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoe30pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoW10pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIG51bGwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KG51bGwpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXNzZWQgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh1bmRlZmluZWQpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhIHN0cmluZyB3aXRoIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIHN0cmluZyB3aXRoIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSgnICAgJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggb25seSBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIG9ubHkgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh7IHByb3AxOiBudWxsLCBwcm9wMjogdW5kZWZpbmVkIH0pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNCbGFuaycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoJycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayhbXSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKHt9KSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuaygnaGVsbG8nKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgbm9uLWVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoWzEsIDIsIDNdKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayh7IGtleTogJ3ZhbHVlJyB9KSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyB0cnVlIGZvciBhIG51bGwgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKG51bGwpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgdHJ1ZSBmb3IgYW4gdW5kZWZpbmVkIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKHVuZGVmaW5lZCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBib29sZWFuIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayh0cnVlKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoaXNCbGFuayhmYWxzZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIGEgbnVtYmVyIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG51bWJlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKDEyMykpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGlzQmxhbmsoMCkpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGlzQmxhbmsoLTEpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIGZhbHNlIGZvciBhIHdoaXRlc3BhY2Ugc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIHdoaXRlc3BhY2Ugc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoJyAgICcpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChpc0JsYW5rKCdcXHQnKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoaXNCbGFuaygnXFxuJykpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIE5hTiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBOYU4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayhOYU4pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZFZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCBpZiBpdCBpcyBub3QgYW4gb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIG5vdCBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IDEyMztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogdHJ1ZSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIGlmIHNvbWUgdmFsdWVzIGFyZSBkZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgdmFsdWVzIGFyZSBkZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IDEsIGI6IHVuZGVmaW5lZCwgYzogdHJ1ZSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGM6IHRydWUgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCBpZiB0aGUgaW5wdXQgaXMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGlucHV0IGlzIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiB1bmRlZmluZWQgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6IG51bGwgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogbnVsbCB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6ICcnIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7IGI6IDEsIGM6ICcnIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIGZhbHNlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgZmFsc2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiBmYWxzZSB9LCBkOiAyIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogeyBiOiAxLCBjOiBmYWxzZSB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB6ZXJvXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgemVybycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6IDAgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogMCB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBOYU5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBOYU4nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiBOYU4gfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogTmFOIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZU51bGxWYWx1ZXMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gZW1wdHkgb2JqZWN0IGFzIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggbm8gbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBpbnB1dCBoYXMgbm8gbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogWzEsIDIsIDNdIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogWzEsIDIsIDNdIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgbnVsbCBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBudWxsO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSBudWxsO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIHVuZGVmaW5lZCBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCB3aGVuIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgYXMgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBzdHJpbmcgd2hlbiBpbnB1dCBpcyBhIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhIG51bWJlciBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG51bWJlciB3aGVuIGlucHV0IGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAxMjM7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IDEyMztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBhcnJheSBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIGFycmF5IHdoZW4gaW5wdXQgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAyLCAzXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyAnMCc6IDEsICcxJzogMiwgJzInOiAzIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggb25seSBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIGlucHV0IGhhcyBvbmx5IG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IG51bGwsIGI6IG51bGwsIGM6IG51bGwgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggbmVzdGVkIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbmVzdGVkIG51bGwgdmFsdWVzIGZyb20gdGhlIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IG51bGwgfSwgYzogeyBkOiB7IGU6IG51bGwgfSB9IH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYToge30sIGM6IHsgZDoge30gfSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gaW5wdXQgaGFzIG5lc3RlZCBub24tbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxIH0sIGM6IHsgZDogeyBlOiAnaGVsbG8nIH0gfSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSB9LCBjOiB7IGQ6IHsgZTogJ2hlbGxvJyB9IH0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBtaXhlZCBuZXN0ZWQgbnVsbCBhbmQgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbmVzdGVkIG51bGwgdmFsdWVzIGFuZCBrZWVwIG5vbi1udWxsIHZhbHVlcyBpbiB0aGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogbnVsbCwgYzogMSB9LCBkOiB7IGU6IG51bGwsIGY6ICdoZWxsbycgfSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYzogMSB9LCBkOiB7IGY6ICdoZWxsbycgfSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlcyBhbmQgZmFsc3kgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbnVsbCB2YWx1ZXMgYW5kIGtlZXAgZmFsc3kgbm9uLW51bGwgdmFsdWVzIGluIHRoZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogbnVsbCwgYjogZmFsc2UsIGM6IDAsIGQ6ICcnIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYjogZmFsc2UsIGM6IDAsIGQ6ICcnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiAndGVzdCcsIGM6IHRydWUgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiBudWxsLCBjOiAndGVzdCcsIGQ6IG51bGwgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBjOiAndGVzdCcgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiBwYXNzZWQgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgYW5kIG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgYW5kIG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiB1bmRlZmluZWQsIGM6ICd0ZXN0JywgZDogbnVsbCB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGM6ICd0ZXN0JyB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIHdoZW4gcGFzc2VkIGEgbm9uLW9iamVjdCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHdoZW4gcGFzc2VkIGEgbm9uLW9iamVjdCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gMTIzO1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXModmFsdWUpKS50b0VxdWFsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IHdpdGggbmVzdGVkIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aXRoIG5lc3RlZCBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggbmVzdGVkIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6IHsgYzogJ3Rlc3QnLCBkOiB0cnVlIH0sIGU6ICd0ZXN0JyB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChvYmopO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6ICd0ZXN0JywgYzogdHJ1ZSB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChvYmopO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2JqZWN0IHdpdGhvdXQgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBudWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogbnVsbCwgYzogJ3Rlc3QnLCBkOiBudWxsIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogMSwgYzogJ3Rlc3QnIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyhvYmopKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUT0RPOiBORUVEIFRPIEZJWCBUSElTIFRFU1RTXG4gICAgLy8gLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2hlbiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkLCBub3QgbnVsbCwgYW5kIG5vdCBlbXB0eVxuICAgIC8vIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aGVuIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWQsIG5vdCBudWxsLCBhbmQgbm90IGVtcHR5JywgKCkgPT4ge1xuICAgIC8vICAgY29uc3Qgb2JqID0ge1xuICAgIC8vICAgICBwcm9wMTogJ3ZhbHVlMScsXG4gICAgLy8gICAgIHByb3AyOiAxMjMsXG4gICAgLy8gICAgIHByb3AzOiBbMSwgMiwgM10sXG4gICAgLy8gICAgIHByb3A0OiB7IG5lc3RlZFByb3A6ICduZXN0ZWRWYWx1ZScgfSxcbiAgICAvLyAgIH07XG4gICAgLy8gICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICAvLyB9KTtcblxuICAgIC8vIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IHdoZW4gYWxsIHZhbHVlcyBhcmUgZGVmaW5lZCBhbmQgbm90IG51bGxcbiAgICAvLyBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkIGFuZCBub3QgbnVsbCcsICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IG9iaiA9IHtcbiAgICAvLyAgICAgcHJvcDE6ICd2YWx1ZTEnLFxuICAgIC8vICAgICBwcm9wMjogMTIzLFxuICAgIC8vICAgICBwcm9wMzogWzEsIDIsIDNdLFxuICAgIC8vICAgICBwcm9wNDogeyBuZXN0ZWRQcm9wOiAnbmVzdGVkVmFsdWUnIH0sXG4gICAgLy8gICB9O1xuICAgIC8vICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0VxdWFsKG9iaik7XG4gICAgLy8gfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSBudWxsO1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHVuZGVmaW5lZDtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgb2JqZWN0IGhhcyBvbmx5IGVtcHR5IHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSBpbnB1dCBvYmplY3QgaGFzIG9ubHkgZW1wdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICBwcm9wMTogJycsXG4gICAgICAgIHByb3AyOiAnICAgICcsXG4gICAgICAgIHByb3AzOiBbXSxcbiAgICAgICAgcHJvcDQ6IHt9LFxuICAgICAgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9FcXVhbCh7IHByb3AyOiAnICAgICcgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG9iamVjdCBhbmQgZG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIG5ldyBvYmplY3QgYW5kIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgcHJvcDE6ICd2YWx1ZTEnLFxuICAgICAgICBwcm9wMjogbnVsbCxcbiAgICAgICAgcHJvcDM6ICcnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHByb3AxOiAndmFsdWUxJyB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKG9iaik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmbGF0dGVuTWFwJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGlucHV0IGlmIGl0IGlzIG5vdCBhbiBhcnJheSBvciBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgaW5wdXQgd2hlbiBpdCBpcyBub3QgYW4gYXJyYXkgb3Igb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSA1O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5XG4gICAgLy8gT25seSAxIGxldmVsIG9mIGZsYXR0ZW5pbmcgaXMgcGVyZm9ybWVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCBbMiwgM10sIFs0LCBbNSwgNl1dXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgMywgNCwgWzUsIDZdXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBhcnJheSB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBhcnJheSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogWzEsIDJdLCBiOiBbMywgNF0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgMywgNF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBhcnJheSBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW107XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBjb2xsZWN0aW9uIGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBjb2xsZWN0aW9uIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIG51bGwgdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbnVsbCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5IHdpdGggbnVsbCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG51bGwgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFtudWxsXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbbnVsbF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGggbnVsbCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IG51bGwgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbbnVsbF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB1bmRlZmluZWQgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW3VuZGVmaW5lZF07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW3VuZGVmaW5lZF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29sbGVjdGlvbiB3aXRoIHVuZGVmaW5lZCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogdW5kZWZpbmVkIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW3VuZGVmaW5lZF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBOYU4gdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW05hTl07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW05hTl0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBOYU4gdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIE5hTiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29sbGVjdGlvbiB3aXRoIE5hTiB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBOYU4gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogTmFOIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW05hTl0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBlbXB0eSBzdHJpbmcgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWycnXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbJyddKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgJ3R3bycsIHRydWUsIHsgbmFtZTogJ0pvaG4nIH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsxLCAndHdvJywgdHJ1ZSwgeyBuYW1lOiAnSm9obicgfV0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBjb2xsZWN0aW9uIHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGNvbGxlY3Rpb24gd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIHdoZW4gdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDI1LCBpc1N0dWRlbnQ6IHRydWUsIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZyddIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWydKb2huJywgMjUsIHRydWUsICdyZWFkaW5nJywgJ3BhaW50aW5nJ10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCBbMiwgWzMsIDRdXSwgeyBuYW1lOiAnSm9obicsIGFnZTogMjUgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsIDIsIFszLCA0XSwgeyBuYW1lOiAnSm9obicsIGFnZTogMjUgfV0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAndHdvJywgdHJ1ZSwgeyBuYW1lOiAnSm9obicgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsICd0d28nLCB0cnVlLCB7IG5hbWU6ICdKb2huJyB9XSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGNvbGxlY3Rpb24gd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgY29sbGVjdGlvbiB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMjUsIGlzU3R1ZGVudDogdHJ1ZSwgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJ10gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbJ0pvaG4nLCAyNSwgdHJ1ZSwgJ3JlYWRpbmcnLCAncGFpbnRpbmcnXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsIFsyLCBbMywgNF1dLCB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgWzMsIDRdLCB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9XSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRFdmVudFRpbWUnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIERhdGUgb2JqZWN0IHdoZW4gdGhlIG1lc3NhZ2UgaGFzIGEgdGltZXN0YW1wIHByb3BlcnR5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBEYXRlIG9iamVjdCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBhIHRpbWVzdGFtcCBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjItMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRFdmVudFRpbWUobWVzc2FnZSBhcyBhbnkpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZUluc3RhbmNlT2YoRGF0ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgRGF0ZSBvYmplY3Qgd2hlbiB0aGUgbWVzc2FnZSBoYXMgYW4gb3JpZ2luYWxUaW1lc3RhbXAgcHJvcGVydHlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIERhdGUgb2JqZWN0IHdoZW4gdGhlIG1lc3NhZ2UgaGFzIGFuIG9yaWdpbmFsVGltZXN0YW1wIHByb3BlcnR5JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgb3JpZ2luYWxUaW1lc3RhbXA6ICcyMDIyLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0RXZlbnRUaW1lKG1lc3NhZ2UgYXMgYW55KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVJbnN0YW5jZU9mKERhdGUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gdGhyb3dzIGFuIEluc3RydW1lbnRhdGlvbkVycm9yIHdoZW4gdGhlIG1lc3NhZ2UgaGFzIG5laXRoZXIgYSB0aW1lc3RhbXAgbm9yIGFuIG9yaWdpbmFsVGltZXN0YW1wIHByb3BlcnR5XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBJbnN0cnVtZW50YXRpb25FcnJvciB3aGVuIHRoZSBtZXNzYWdlIGhhcyBuZWl0aGVyIGEgdGltZXN0YW1wIG5vciBhbiBvcmlnaW5hbFRpbWVzdGFtcCBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7fTtcbiAgICAgIGV4cGVjdCgoKSA9PiBnZXRFdmVudFRpbWUobWVzc2FnZSBhcyBhbnkpKS50b1Rocm93KEluc3RydW1lbnRhdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gaW52YWxpZCBEYXRlIG9iamVjdCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBhbiBpbnZhbGlkIHRpbWVzdGFtcCBwcm9wZXJ0eVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGludmFsaWQgRGF0ZSBvYmplY3Qgd2hlbiB0aGUgbWVzc2FnZSBoYXMgYW4gaW52YWxpZCB0aW1lc3RhbXAgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICB0aW1lc3RhbXA6ICdpbnZhbGlkJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBldmVudFRpbWUgPSBnZXRFdmVudFRpbWUobWVzc2FnZSBhcyBhbnkpO1xuICAgICAgZXhwZWN0KGV2ZW50VGltZSkudG9CZUluc3RhbmNlT2YoRGF0ZSk7XG4gICAgICBleHBlY3QoZXZlbnRUaW1lLnRvU3RyaW5nKCkpLnRvQmUoJ0ludmFsaWQgRGF0ZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYmFzZTY0Q29udmVydG9yJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIGVtcHR5IHN0cmluZyBpbnB1dCBhbmQgcmV0dXJucyBhbiBlbXB0eSBiYXNlNjQgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYmFzZTY0IHN0cmluZyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICcnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgc3RyaW5nIGlucHV0IHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyB0byBiYXNlNjQgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAn44GT44KT44Gr44Gh44GvJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJzQ0R1Q0NEtUNDRHcjQ0R2g0NEd2JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgc3RyaW5nIGlucHV0IHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBjb252ZXJ0cyBpdCB0byBiYXNlNjQgZm9ybWF0XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGEgc3RyaW5nIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIGJhc2U2NCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICchQCMkJV4mKigpJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ0lVQWpKQ1ZlSmlvb0tRPT0nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYmFzZTY0Q29udmVydG9yKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgaW5wdXQgd2l0aCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gYmFzZTY0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyAgIEhlbGxvIFdvcmxkICAgJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ0lDQWdTR1ZzYkc4Z1YyOXliR1FnSUNBPSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiYXNlNjRDb252ZXJ0b3IoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhIHN0cmluZyBpbnB1dCB3aXRoIGxpbmUgYnJlYWtzIGFuZCBjb252ZXJ0cyBpdCB0byBiYXNlNjQgZm9ybWF0XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGEgc3RyaW5nIHdpdGggbGluZSBicmVha3MgdG8gYmFzZTY0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ0hlbGxvXFxuV29ybGQnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnU0dWc2JHOEtWMjl5YkdRPSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiYXNlNjRDb252ZXJ0b3IoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkVXJsJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgdmFsaWQgVVJMIG9iamVjdCByZXR1cm5zIHRoZSBzYW1lIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCgnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nKTtcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCk/LnRvSlNPTigpKS50b0JlKHVybC50b0pTT04oKSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgVVJMIHdpdGggcXVlcnkgcGFyYW1ldGVycyByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggcXVlcnkgcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbT9wYXJhbTE9dmFsdWUxJnBhcmFtMj12YWx1ZTInO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIGhhc2ggcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIFVSTCB3aXRoIGEgaGFzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbSNzZWN0aW9uMSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGEgcG9ydCByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSBwb3J0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tOjgwODAnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly91c2VybmFtZTpwYXNzd29yZEBleGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhbiBlbXB0eSBzdHJpbmcgcmV0dXJucyBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIGdpdmVuIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICcnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSB0ZXN0IG9iamVjdGl2ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gJ2lzVmFsaWRVcmwnIHJldHVybnMgbnVsbCB3aGVuIGdpdmVuIGFuIGludmFsaWQgVVJMIHN0cmluZy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gZ2l2ZW4gYW4gaW52YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2ludmFsaWQtdXJsJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGFuIFVSTCB3aXRoIGEgZGlmZmVyZW50IHByb3RvY29sIHJldHVybnMgdmFsaWQgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnZnRwOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGFuIGludmFsaWQgVVJMIHdpdGggYW4gaW52YWxpZCBwb3J0IHJldHVybnMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBnaXZlbiBhIFVSTCB3aXRoIGFuIGludmFsaWQgcG9ydCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbTphYmMnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBpbnZhbGlkIHVzZXJuYW1lIGFuZCBwYXNzd29yZCByZXR1cm5zIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggdXNlcm5hbWUgYW5kIHBhc3N3b3JkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vdXNlcm5hbWU6cGFzc3dvcmRAZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIHN1YmRvbWFpbiByZXR1cm5zIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBhbiBpbnZhbGlkIHN1YmRvbWFpbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL2ludmFsaWQuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBwYXRoIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBwYXRoJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tL3BhdGgnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBzdWJkb21haW4gcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcgd2l0aCBhIHN1YmRvbWFpbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3N1YmRvbWFpbi5leGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHJpcFRyYWlsaW5nU2xhc2gnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBzdHJpbmcgaWYgaXQgZG9lcyBub3QgZW5kIHdpdGggJy8nXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHN0cmluZyB3aGVuIGl0IGRvZXMgbm90IGVuZCB3aXRoICcvJ1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHRyYWlsaW5nICcvJyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBpdFxuICAgIGl0KFwic2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgJy8nIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGl0XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIG9ubHkgb25lIHRyYWlsaW5nICcvJyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBtdWx0aXBsZVxuICAgIGl0KFwic2hvdWxkIHJlbW92ZSBvbmx5IG9uZSB0cmFpbGluZyAnLycgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggbXVsdGlwbGVcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8vJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlLycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGlucHV0IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCcnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIGl0IGNvbnRhaW5zIG9ubHkgJy8nXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZyB3aGVuIGl0IGNvbnRhaW5zIG9ubHkgJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHN0cmluZyBpZiBpdCBkb2VzIG5vdCBlbmQgd2l0aCAnLydcbiAgICBpdChcInNob3VsZCByZXR1cm4gdGhlIHNhbWUgc3RyaW5nIHdoZW4gaXQgZG9lcyBub3QgZW5kIHdpdGggJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSBhIHN0cmluZyBpZiBpdCBleGlzdHNcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2ggd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlLyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSBhIHN0cmluZyBpZiBpdCBleGlzdHNcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2ggd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlLyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0cmFpbGluZyBzbGFzaGVzIGZyb20gYSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzIHdoZW4gdGhleSBleGlzdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGV4aXN0c1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRoZSB0cmFpbGluZyBzbGFzaCB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGVuZHMgd2l0aCAnLydcbiAgICBpdChcInNob3VsZCByZW1vdmUgdGhlIHRyYWlsaW5nIHNsYXNoIHdoZW4gdGhlIHN0cmluZyBlbmRzIHdpdGggJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ByaW1pdGl2ZScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgYSBwcmltaXRpdmUgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSgnaGVsbG8nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgYSBwcmltaXRpdmUgbnVtYmVyXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSgxMjMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHByaW1pdGl2ZSBib29sZWFuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBib29sZWFuJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIHRydWUgZm9yIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYW4gaW5zdGFuY2Ugb2YgYSBub24tcHJpbWl0aXZlIHdyYXBwZXIgY2xhc3MgKERhdGUpXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgYSBub24tcHJpbWl0aXZlIHdyYXBwZXIgY2xhc3MgKERhdGUpJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUobmV3IERhdGUoKSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYW4gaW5zdGFuY2Ugb2YgYSBjdXN0b20gY2xhc3NcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBhIGN1c3RvbSBjbGFzcycsICgpID0+IHtcbiAgICAgIGNsYXNzIEN1c3RvbUNsYXNzIHt9XG4gICAgICBjb25zdCBhcmcgPSBuZXcgQ3VzdG9tQ2xhc3MoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKGFyZyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYSBmdW5jdGlvbiB3aXRoIHByb3BlcnRpZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIGZ1bmN0aW9uIHdpdGggcHJvcGVydGllcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiB7fTtcbiAgICAgIGZ1bmMucHJvcGVydHkgPSAndmFsdWUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUoZnVuYyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHN5bWJvbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYXJndW1lbnQgaXMgYSBzeW1ib2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShTeW1ib2woJ3Rlc3QnKSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VHlwZScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBzdHJpbmcgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBzdHJpbmcgd2hlbiB0aGUgaW5wdXQgaXMgYSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdoZWxsbyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3N0cmluZycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZSBmb3IgbnVtYmVyIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVtYmVyIHdoZW4gdGhlIGlucHV0IGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSA0MjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnbnVtYmVyJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBib29sZWFuIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYm9vbGVhbiB3aGVuIHRoZSBpbnB1dCBpcyBhIGJvb2xlYW4gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0VHlwZSh0cnVlKSkudG9CZSgnYm9vbGVhbicpO1xuICAgICAgZXhwZWN0KGdldFR5cGUoZmFsc2UpKS50b0JlKCdib29sZWFuJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAnTlVMTCcgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbFxuICAgIGl0KFwic2hvdWxkIHJldHVybiAnTlVMTCcgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ05VTEwnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdvYmplY3QnIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdvYmplY3QnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGZ1bmN0aW9uIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYSBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gKCkgPT4ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBiaWdpbnQgaW5wdXRcbiAgICBpdChcInNob3VsZCByZXR1cm4gJ2JpZ2ludCcgd2hlbiB0aGUgaW5wdXQgaXMgYSBiaWdpbnRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBCaWdJbnQoMTApO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdiaWdpbnQnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdzeW1ib2wnIHdoZW4gdGhlIGlucHV0IGlzIGEgc3ltYm9sXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuICdzeW1ib2wnIHdoZW4gdGhlIGlucHV0IGlzIGEgc3ltYm9sXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gU3ltYm9sKCd0ZXN0Jyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3N5bWJvbCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ3VuZGVmaW5lZCcgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuICdOVUxMJyB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ05VTEwnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGFycm93IGZ1bmN0aW9uIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyb3cgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICgpID0+IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ29iamVjdCcgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdvYmplY3QnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSBvYmplY3QgdGhlIGNvcnJlY3QgdHlwZSBmb3IgY2xhc3MgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYSBjbGFzcycsICgpID0+IHtcbiAgICAgIGNsYXNzIE15Q2xhc3Mge31cbiAgICAgIGNvbnN0IGlucHV0ID0gbmV3IE15Q2xhc3MoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnb2JqZWN0Jyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAnZnVuY3Rpb24nIHdoZW4gdGhlIGlucHV0IGlzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYSBnZW5lcmF0b3IgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IGZ1bmN0aW9uKiAoKSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdmdW5jdGlvbicgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdW5jdGlvbiB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhc3luYyBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gYXN5bmMgKCkgPT4ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc09iamVjdCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIGFuIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHt9O1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgYSBmdW5jdGlvblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBhIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAoKSA9PiB7fTtcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBudWxsO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhbiBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFtdO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICd0ZXN0JztcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBmb3IgYSBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAxMjM7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGEgYm9vbGVhblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBib29sZWFuJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0cnVlO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhIHN5bWJvbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBzeW1ib2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFN5bWJvbCgpO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gdGhlIHZhbHVlIGlzIE5hTlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgTmFOJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBOYU47XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRW1wdHknLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGlucHV0IGlzIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBpbnB1dCBpcyBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW107XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGEgbm9uLWVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGEgbm9uLWVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgMiwgM107XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGtleTogJ3ZhbHVlJyB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIHRydWUgZm9yIG51bGwgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSB0ZXN0IG9iamVjdGl2ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gJ2lzRW1wdHknIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgZmFsc2UgZm9yIE5hTiBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgTmFOJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBOYU47XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdCB0aGF0IHRoZSBmdW5jdGlvbiAnaXNFbXB0eScgcmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgd2hpdGVzcGFjZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgYSB3aGl0ZXNwYWNlIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyAgICc7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc0VtcHR5T2JqZWN0JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IG9iamVjdCB7fVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBvYmplY3Qge2E6ICcxJ31cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAnMScgfTtcbiAgICAgIGV4cGVjdChpc0VtcHR5T2JqZWN0KG9iaikpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgYXJyYXkgW11cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3QoYXJyKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBhcnJheSBbMSwgMiwgM11cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBbMSwgMiwgM107XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChhcnIpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IHN0cmluZyAnJ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9ICcnO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmcgJ2hlbGxvJ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSAnaGVsbG8nO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHlPYmplY3QgcmV0dXJucyB0cnVlIGZvciBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSAyO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRGVmaW5lZE5vdE51bGxOb3RFbXB0eScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1lbXB0eSBzdHJpbmcgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoJ3Rlc3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1lbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoeyBrZXk6ICd2YWx1ZScgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBub24tZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IGFycmF5IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eShbMSwgMiwgM10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbm9uLXplcm8gbnVtYmVyIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG5vbi16ZXJvIG51bWJlciBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoMTIzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGJvb2xlYW4gdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoJycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBmYWxzZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gZmFsc2UgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KGZhbHNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiAwIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiAwIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSgwKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eShOYU4pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KG51bGwpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoW10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh7fSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBpdCBkb2VzIG5vdCBjb250YWluIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4sIG9yIGludGVnZXIgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiAndGVzdCcsIGM6IHsgZDogJ25lc3RlZCcgfSB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50KG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXMgZnJvbSB0aGUgb2JqZWN0IGFuZCByZXR1cm5zIHRoZSBjbGVhbmVkIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4sIG9yIGludGVnZXIgdmFsdWVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBjbGVhbmVkIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogdW5kZWZpbmVkLCBjOiBudWxsLCBkOiAnJywgZToge30sIGY6IHRydWUsIGc6IDAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBmOiB0cnVlLCBnOiAwIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQob2JqKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCh1bmRlZmluZWQpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIGlucHV0IGlzIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQobnVsbCkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCh7fSkpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGlucHV0IGNvbnRhaW5zIG9ubHkgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIHZhbGlkIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBjb250YWlucyBvbmx5IHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4gb3IgaW50ZWdlciB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IHVuZGVmaW5lZCwgYjogbnVsbCwgYzogJycsIGQ6IHt9LCBlOiB0cnVlLCBmOiAwIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQob2JqKSkudG9FcXVhbCh7IGU6IHRydWUsIGY6IDAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRIYXNoRnJvbUFycmF5JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IHdoZW4gZ2l2ZW4gYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgaGFzaE1hcCB3aXRoIGNvcnJlY3Qga2V5LXZhbHVlIHBhaXJzIHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIGNvcnJlY3Qga2V5LXZhbHVlIHBhaXJzIHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnQScsIHRvOiAnMScgfSxcbiAgICAgICAgeyBmcm9tOiAnQicsIHRvOiAnMicgfSxcbiAgICAgICAgeyBmcm9tOiAnQycsIHRvOiAnMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgYTogJzEnLCBiOiAnMicsIGM6ICczJyB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGVtcHR5ICdmcm9tJyBwcm9wZXJ0eVxuICAgIGl0KFwic2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIHByb3BlcnR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICcxJyB9LFxuICAgICAgICB7IGZyb206ICcnLCB0bzogJzInIH0sXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAnMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNoTWFwIHdpdGggb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSAnZnJvbScgcHJvcGVydHkgd2hlbiBnaXZlbiBhbiBhcnJheSB3aXRoIGR1cGxpY2F0ZSAnZnJvbScgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzEnIH0sXG4gICAgICAgIHsgZnJvbTogJ0InLCB0bzogJzInIH0sXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IGE6ICczJywgYjogJzInIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGhhc2hNYXAgd2l0aCBvbmx5IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSAnZnJvbScgcHJvcGVydHkgd2hlbiBnaXZlbiBhbiBhcnJheSB3aXRoIGR1cGxpY2F0ZSAnZnJvbScgcHJvcGVydGllcyBhbmQgZGlmZmVyZW50ICd0bycgdmFsdWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIG9ubHkgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzIGFuZCBkaWZmZXJlbnQgJ3RvJyB2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdBJywgdG86ICcxJyB9LFxuICAgICAgICB7IGZyb206ICdCJywgdG86ICcyJyB9LFxuICAgICAgICB7IGZyb206ICdBJywgdG86ICczJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBhOiAnMycsIGI6ICcyJyB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNoTWFwIHdpdGggY29ycmVjdCBrZXktdmFsdWUgcGFpcnMgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbm9uLXN0cmluZyAnZnJvbScgYW5kICd0bycgcHJvcGVydGllc1xuICAgIGl0KFwic2hvdWxkIHJldHVybiBhIGhhc2hNYXAgd2l0aCBjb3JyZWN0IGtleS12YWx1ZSBwYWlycyB3aGVuIGdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBub24tc3RyaW5nICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAxLCB0bzogdHJ1ZSB9LFxuICAgICAgICB7IGZyb206IG51bGwsIHRvOiB1bmRlZmluZWQgfSxcbiAgICAgICAgeyBmcm9tOiBbMSwgMiwgM10sIHRvOiB7IGE6ICdBJywgYjogJ0InIH0gfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgJzEnOiB0cnVlLCBudWxsOiB1bmRlZmluZWQsICcxLDIsMyc6IHsgYTogJ0EnLCBiOiAnQicgfSB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSAnZnJvbScgcHJvcGVydHkgdG8gbG93ZXJjYXNlIGluIHRoZSBoYXNoTWFwIHdoZW4gdGhlIGlzTG93ZXJDYXNlIHBhcmFtZXRlciBpcyB0cnVlXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IFwiZnJvbVwiIHByb3BlcnR5IHRvIGxvd2VyY2FzZSBpbiBoYXNoTWFwIHdoZW4gaXNMb3dlckNhc2UgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnVkFMVUUxJywgdG86ICdWYWx1ZTEnIH0sXG4gICAgICAgIHsgZnJvbTogJ1ZBTFVFMicsIHRvOiAnVmFsdWUyJyB9LFxuICAgICAgICB7IGZyb206ICdWQUxVRTMnLCB0bzogJ1ZhbHVlMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHtcbiAgICAgICAgdmFsdWUxOiAnVmFsdWUxJyxcbiAgICAgICAgdmFsdWUyOiAnVmFsdWUyJyxcbiAgICAgICAgdmFsdWUzOiAnVmFsdWUzJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cywgJ2Zyb20nLCAndG8nLCB0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBvbmx5IG9uZSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggb25seSBvbmUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW3sgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9XTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHsgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJ10pIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICdmcm9tJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB1bmlxdWUgJ2Zyb20nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AzJywgdG86ICd2YWwzJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJ10pLFxuICAgICAgICBwcm9wMjogbmV3IFNldChbJ3ZhbDInXSksXG4gICAgICAgIHByb3AzOiBuZXcgU2V0KFsndmFsMyddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICd0bycga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDMnLCB0bzogJ3ZhbDMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgICAgcHJvcDM6IG5ldyBTZXQoWyd2YWwzJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IGhhc2hNYXAgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGhhc2hNYXAgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGVtcHR5ICdmcm9tJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGhhbmRsZSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICcnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICd2YWwzJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBlbXB0eSAndG8nIGtleXNcbiAgICBpdChcInNob3VsZCByZXR1cm4gYW4gZW1wdHkgaGFzaE1hcCB3aGVuIHRoZSAndG8nIGtleSBpcyBlbXB0eSBpbiBhbGwgb2JqZWN0c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICcnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICcnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AzJywgdG86ICcnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0geyBwcm9wMTogbmV3IFNldChbJyddKSwgcHJvcDI6IG5ldyBTZXQoWycnXSksIHByb3AzOiBuZXcgU2V0KFsnJ10pIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5cyB3aGVuIGlzTG93ZXJDYXNlIGlzIHNldCB0byBmYWxzZVxuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5cyB3aGVuIGlzTG93ZXJDYXNlIGlzIHNldCB0byBmYWxzZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cywgJ2Zyb20nLCAndG8nLCBmYWxzZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGN1c3RvbSBmcm9tS2V5IGFuZCB0b0tleSB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCBjdXN0b20gZnJvbUtleSBhbmQgdG9LZXkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICd2YWwyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJywgJ3ZhbDInXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMsICdmcm9tJywgJ3RvJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzIHdoZW4gaXNMb3dlckNhc2UgaXMgc2V0IHRvIHRydWVcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgZ2VuZXJhdGUgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXMgd2hlbiBpc0xvd2VyQ2FzZSBpcyBzZXQgdG8gdHJ1ZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cywgJ2Zyb20nLCAndG8nLCB0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBnZW5lcmF0ZXMgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXNcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgZ2VuZXJhdGUgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICd2YWwyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJywgJ3ZhbDInXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBwcm9wZXJ0aWVzIGlmIGl0IGV4aXN0cy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIHByb3BlcnRpZXMgd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAga2V5OiAndmFsdWUnLFxuICAgICAgICB9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAna2V5JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbHVlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUga2V5IGZyb20gdHJhaXRzIGlmIGl0IGV4aXN0cy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIHRyYWl0cyB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHtcbiAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9ICdrZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsdWUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBjb250ZXh0LnRyYWl0cyBpZiBpdCBleGlzdHMuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBjb250ZXh0LnRyYWl0cyB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7XG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAna2V5JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbHVlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIG1lc3NhZ2UgaXMgbnVsbC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIG1lc3NhZ2UgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBudWxsO1xuICAgICAgY29uc3Qga2V5ID0gJ2tleSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIGlmIHRoZSBrZXkgaXMgbnVsbC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGtleSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gYW55IG9mIHRoZSBrZXlTZXRzLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IGluIGFueSBvZiB0aGUga2V5U2V0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAnbm9uZXhpc3RlbnRLZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZsYXR0ZW5Kc29uJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgc2ltcGxlIEpTT04gb2JqZWN0IHdpdGggbm8gbmVzdGVkIG9iamVjdHMgb3IgYXJyYXlzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBzaW1wbGUgSlNPTiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgc3RyZWV0OiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICAgY291bnRyeTogJ1VTQScsXG4gICAgICAgIH0sXG4gICAgICAgIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZyddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgICdhZGRyZXNzLnN0cmVldCc6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICdhZGRyZXNzLmNpdHknOiAnTmV3IFlvcmsnLFxuICAgICAgICAnYWRkcmVzcy5jb3VudHJ5JzogJ1VTQScsXG4gICAgICAgICdob2JiaWVzWzBdJzogJ3JlYWRpbmcnLFxuICAgICAgICAnaG9iYmllc1sxXSc6ICdwYWludGluZycsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiBudWxsLCBhZ2U6IHVuZGVmaW5lZCwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6IG51bGwsIGFnZTogdW5kZWZpbmVkLCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGVtcHR5IGFycmF5cyBhbmQgb2JqZWN0cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBlbXB0eSBhcnJheXMgYW5kIG9iamVjdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiBbXSwgYWdlOiB7fSwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6IFtdLCBhZ2U6IHt9LCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gLy8gTmVlZCB0byBmaXggdGhpcyB0ZXN0XG4gICAgLy8gLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBoYW5kbGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gYSBKU09OIG9iamVjdCBjb3JyZWN0bHkuXG4gICAgLy8gaXQoJ3Nob3VsZCBoYW5kbGUgY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBhIEpTT04gb2JqZWN0IGNvcnJlY3RseScsICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IGRhdGEgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9O1xuICAgIC8vICAgZGF0YVsnc2VsZiddID0gZGF0YTtcbiAgICAvLyAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIHNlbGY6ICdbQ2lyY3VsYXJdJyB9O1xuICAgIC8vICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgLy8gICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICAvLyB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBrZXlzIGNvbnRhaW5pbmcgc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyBzcGVjaWFsIGNoYXJhY3RlcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAnbmFtZS5maXJzdCc6ICdKb2huJywgJ25hbWUubGFzdCc6ICdEb2UnLCAnYWdlQCc6IDMwIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgJ25hbWUuZmlyc3QnOiAnSm9obicsICduYW1lLmxhc3QnOiAnRG9lJywgJ2FnZUAnOiAzMCB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3QgdGhhdCB0aGUgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tc3RyaW5nIGtleXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggbm9uLXN0cmluZyBrZXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHsgMTogJ29uZScsIDI6ICd0d28nLCAzOiAndGhyZWUnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgJzEnOiAnb25lJywgJzInOiAndHdvJywgJzMnOiAndGhyZWUnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBrZXlzIGNvbnRhaW5pbmcgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAnbmFtZS5maXJzdCc6ICdKb2huJywgJ25hbWUubGFzdCc6ICdEb2UnLCBhZ2U6IDMwLCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgJ25hbWUuZmlyc3QnOiAnSm9obicsXG4gICAgICAgICduYW1lLmxhc3QnOiAnRG9lJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGtleXMgdGhhdCBhcmUgcmVzZXJ2ZWQgd29yZHMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggcmVzZXJ2ZWQgd29yZCBrZXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHsgY2xhc3M6ICdNYXRoJywgZnVuY3Rpb246ICdhZGQnLCByZXR1cm46ICdyZXN1bHQnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgY2xhc3M6ICdNYXRoJywgZnVuY3Rpb246ICdhZGQnLCByZXR1cm46ICdyZXN1bHQnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSAnZmxhdHRlbkpzb24nIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggZGVlcGx5IG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggZGVlcGx5IG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgICBzdGF0ZTogJ05ZJyxcbiAgICAgICAgICB6aXA6ICcxMDAwMScsXG4gICAgICAgIH0sXG4gICAgICAgIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZycsICdjb29raW5nJ10sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnSmFuZScsXG4gICAgICAgICAgICBhZ2U6IDI4LFxuICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICBzdHJlZXQ6ICc0NTYgRWxtIFN0JyxcbiAgICAgICAgICAgICAgY2l0eTogJ0xvcyBBbmdlbGVzJyxcbiAgICAgICAgICAgICAgc3RhdGU6ICdDQScsXG4gICAgICAgICAgICAgIHppcDogJzkwMDAxJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob2JiaWVzOiBbJ2hpa2luZycsICdwaG90b2dyYXBoeSddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ01pa2UnLFxuICAgICAgICAgICAgYWdlOiAzMixcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgc3RyZWV0OiAnNzg5IE9hayBTdCcsXG4gICAgICAgICAgICAgIGNpdHk6ICdDaGljYWdvJyxcbiAgICAgICAgICAgICAgc3RhdGU6ICdJTCcsXG4gICAgICAgICAgICAgIHppcDogJzYwMDA3JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob2JiaWVzOiBbJ3J1bm5pbmcnLCAnZ2FtaW5nJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICAnYWRkcmVzcy5zdHJlZXQnOiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAnYWRkcmVzcy5jaXR5JzogJ05ldyBZb3JrJyxcbiAgICAgICAgJ2FkZHJlc3Muc3RhdGUnOiAnTlknLFxuICAgICAgICAnYWRkcmVzcy56aXAnOiAnMTAwMDEnLFxuICAgICAgICAnaG9iYmllc1swXSc6ICdyZWFkaW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMV0nOiAncGFpbnRpbmcnLFxuICAgICAgICAnaG9iYmllc1syXSc6ICdjb29raW5nJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0ubmFtZSc6ICdKYW5lJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWdlJzogMjgsXG4gICAgICAgICdmcmllbmRzWzBdLmFkZHJlc3Muc3RyZWV0JzogJzQ1NiBFbG0gU3QnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZGRyZXNzLmNpdHknOiAnTG9zIEFuZ2VsZXMnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZGRyZXNzLnN0YXRlJzogJ0NBJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWRkcmVzcy56aXAnOiAnOTAwMDEnLFxuICAgICAgICAnZnJpZW5kc1swXS5ob2JiaWVzWzBdJzogJ2hpa2luZycsXG4gICAgICAgICdmcmllbmRzWzBdLmhvYmJpZXNbMV0nOiAncGhvdG9ncmFwaHknLFxuICAgICAgICAnZnJpZW5kc1sxXS5uYW1lJzogJ01pa2UnLFxuICAgICAgICAnZnJpZW5kc1sxXS5hZ2UnOiAzMixcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy5zdHJlZXQnOiAnNzg5IE9hayBTdCcsXG4gICAgICAgICdmcmllbmRzWzFdLmFkZHJlc3MuY2l0eSc6ICdDaGljYWdvJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy5zdGF0ZSc6ICdJTCcsXG4gICAgICAgICdmcmllbmRzWzFdLmFkZHJlc3MuemlwJzogJzYwMDA3JyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uaG9iYmllc1swXSc6ICdydW5uaW5nJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uaG9iYmllc1sxXSc6ICdnYW1pbmcnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdGVzdCBvYmplY3RpdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlICdmbGF0dGVuSnNvbicgZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBrZXlzIGFuZCB2YWx1ZXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4ga2V5cyBhbmQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICBhZGRyZXNzOiB7IHN0cmVldDogJzEyMyBNYWluIFN0JywgY2l0eTogJ1NhbiBGcmFuY2lzY28nIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgJ2FkZHJlc3Muc3RyZWV0JzogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgJ2FkZHJlc3MuY2l0eSc6ICdTYW4gRnJhbmNpc2NvJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGRlZXBseSBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzLCBpbmNsdWRpbmcgbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBkZWVwbHkgbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgemlwOiAxMjM0NSxcbiAgICAgICAgICBjb3VudHJ5OiAnVVNBJyxcbiAgICAgICAgICBjb29yZGluYXRlczoge1xuICAgICAgICAgICAgbGF0aXR1ZGU6IDQwLjcxMjgsXG4gICAgICAgICAgICBsb25naXR1ZGU6IC03NC4wMDYsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJywgJ3N3aW1taW5nJ10sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdKYW5lJywgYWdlOiAyOCB9LFxuICAgICAgICAgIHsgbmFtZTogJ01pa2UnLCBhZ2U6IDMyIH0sXG4gICAgICAgICAgeyBuYW1lOiAnU2FyYWgnLCBhZ2U6IDI3IH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBldDogbnVsbCxcbiAgICAgICAgZmF2b3JpdGVDb2xvcjogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICdhZGRyZXNzLnN0cmVldCc6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICdhZGRyZXNzLnppcCc6IDEyMzQ1LFxuICAgICAgICAnYWRkcmVzcy5jb3VudHJ5JzogJ1VTQScsXG4gICAgICAgICdhZGRyZXNzLmNvb3JkaW5hdGVzLmxhdGl0dWRlJzogNDAuNzEyOCxcbiAgICAgICAgJ2FkZHJlc3MuY29vcmRpbmF0ZXMubG9uZ2l0dWRlJzogLTc0LjAwNixcbiAgICAgICAgJ2hvYmJpZXNbMF0nOiAncmVhZGluZycsXG4gICAgICAgICdob2JiaWVzWzFdJzogJ3BhaW50aW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMl0nOiAnc3dpbW1pbmcnLFxuICAgICAgICAnZnJpZW5kc1swXS5uYW1lJzogJ0phbmUnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZ2UnOiAyOCxcbiAgICAgICAgJ2ZyaWVuZHNbMV0ubmFtZSc6ICdNaWtlJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWdlJzogMzIsXG4gICAgICAgICdmcmllbmRzWzJdLm5hbWUnOiAnU2FyYWgnLFxuICAgICAgICAnZnJpZW5kc1syXS5hZ2UnOiAyNyxcbiAgICAgICAgcGV0OiBudWxsLFxuICAgICAgICBmYXZvcml0ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBhcnJheXMgY29udGFpbmluZyBvYmplY3RzIHdpdGggZGlmZmVyZW50IG5lc3RpbmcgbGV2ZWxzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGFycmF5cyBjb250YWluaW5nIG9iamVjdHMgd2l0aCBkaWZmZXJlbnQgbmVzdGluZyBsZXZlbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgIGhvYmJpZXM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdSZWFkaW5nJywgdHlwZTogJ0luZG9vcicgfSxcbiAgICAgICAgICB7IG5hbWU6ICdSdW5uaW5nJywgdHlwZTogJ091dGRvb3InIH0sXG4gICAgICAgICAgeyBuYW1lOiAnQ29va2luZycsIHR5cGU6ICdJbmRvb3InIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdBbGljZScsIGFnZTogMjggfSxcbiAgICAgICAgICB7IG5hbWU6ICdCb2InLCBhZ2U6IDMyIH0sXG4gICAgICAgICAgeyBuYW1lOiAnQ2hhcmxpZScsIGFnZTogMjcgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICAnaG9iYmllc1swXS5uYW1lJzogJ1JlYWRpbmcnLFxuICAgICAgICAnaG9iYmllc1swXS50eXBlJzogJ0luZG9vcicsXG4gICAgICAgICdob2JiaWVzWzFdLm5hbWUnOiAnUnVubmluZycsXG4gICAgICAgICdob2JiaWVzWzFdLnR5cGUnOiAnT3V0ZG9vcicsXG4gICAgICAgICdob2JiaWVzWzJdLm5hbWUnOiAnQ29va2luZycsXG4gICAgICAgICdob2JiaWVzWzJdLnR5cGUnOiAnSW5kb29yJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0ubmFtZSc6ICdBbGljZScsXG4gICAgICAgICdmcmllbmRzWzBdLmFnZSc6IDI4LFxuICAgICAgICAnZnJpZW5kc1sxXS5uYW1lJzogJ0JvYicsXG4gICAgICAgICdmcmllbmRzWzFdLmFnZSc6IDMyLFxuICAgICAgICAnZnJpZW5kc1syXS5uYW1lJzogJ0NoYXJsaWUnLFxuICAgICAgICAnZnJpZW5kc1syXS5hZ2UnOiAyNyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0T2Zmc2V0SW5TZWMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2Zmc2V0IHZhbHVlIGluIHNlY29uZHMgZm9yIGEgdmFsaWQgdGltZXpvbmUgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9mZnNldCB2YWx1ZSBpbiBzZWNvbmRzIGZvciBhIHZhbGlkIHRpbWV6b25lIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IGdldE9mZnNldEluU2VjKCdBc2lhL0tvbGthdGEnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoMTk4MDApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nICdVVEMnXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gMCBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyBcIlVUQ1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ1VUQycpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSgwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyAnRXRjL1VUQydcbiAgICBpdCgnc2hvdWxkIHJldHVybiAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiRXRjL1VUQ1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0V0Yy9VVEMnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoMCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZCBmb3IgYW4gaW52YWxpZCB0aW1lem9uZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGFuIGludmFsaWQgdGltZXpvbmUgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0ludmFsaWQvVGltZXpvbmUnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVuZGVmaW5lZCBvZmZzZXQgdmFsdWUgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgJyswNTozMCcgaW52YWxpZCB0aW1lem9uZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdW5kZWZpbmVkIG9mZnNldCB2YWx1ZSBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyBcIiswNTozMFwiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJyswNTozMCcpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSh1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29ycmVjdCBvZmZzZXQgdmFsdWUgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgJ0FtZXJpY2EvTmV3X1lvcmsnXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3Qgb2Zmc2V0IHZhbHVlIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiQW1lcmljYS9OZXdfWW9ya1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0FtZXJpY2EvTmV3X1lvcmsnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoLTE0NDAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Zvcm1hdFRpbWVTdGFtcCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHdoZW4gbm8gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHdoZW4gbm8gZm9ybWF0IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICcyMDIyLTAxLTAxVDAwOjAwOjAwLjAwMFonO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgxNjQwOTk1MjAwMDAwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWVzdGFtcCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBtb21lbnQgZm9ybWF0IHdoZW4gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB0aW1lc3RhbXAgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgbW9tZW50IGZvcm1hdCB3aGVuIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnMjAyMi0wMS0wMVQwMDowMDowMC4wMDBaJztcbiAgICAgIGNvbnN0IGZvcm1hdCA9ICdZWVlZLU1NLUREJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyLCBmb3JtYXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnMjAyMi0wMS0wMScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gdGhyb3dzIGFuIGVycm9yIHdoZW4gYW4gaW52YWxpZCBkYXRlIHN0cmluZyBpcyBwcm92aWRlZC5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gYW4gaW52YWxpZCBkYXRlIHN0cmluZyBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnaW52YWxpZC1kYXRlJztcbiAgICAgIGV4cGVjdChmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0cikpLnRvQmVOYU4oKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTmFOIHdoZW4gYW4gaW52YWxpZCBkYXRlIHN0cmluZyBpcyBwcm92aWRlZCBhbmQgbm8gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIE5hTiB3aGVuIGFuIGludmFsaWQgZGF0ZSBzdHJpbmcgaXMgcHJvdmlkZWQgYW5kIG5vIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnaW52YWxpZC1kYXRlJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOYU4oKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTmFOIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHByb3ZpZGVkIGFzIHRoZSBkYXRlIHN0cmluZyBhbmQgbm8gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIE5hTiB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwcm92aWRlZCBhcyB0aGUgZGF0ZSBzdHJpbmcgYW5kIG5vIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOYU4oKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTmFOIHdoZW4gYW4gaW52YWxpZCBmb3JtYXQgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gTmFOIHdoZW4gYW4gaW52YWxpZCBmb3JtYXQgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gJzIwMjItMDEtMDFUMDA6MDA6MDAuMDAwWic7XG4gICAgICBjb25zdCBmb3JtYXQgPSAnaW52YWxpZEZvcm1hdCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0ciwgZm9ybWF0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoJ2ludmFtMS8xLzIwMjJpNkZvcjBhbXQnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgd2hlbiBhIHZhbGlkIHRpbWVzdGFtcCBzdHJpbmcgaXMgcHJvdmlkZWQgaW5zdGVhZCBvZiBhIGRhdGUgc3RyaW5nLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHdoZW4gYSB2YWxpZCB0aW1lc3RhbXAgc3RyaW5nIGlzIHByb3ZpZGVkIGluc3RlYWQgb2YgYSBkYXRlIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnMjAyMi0wMS0wMVQwMDowMDowMC4wMDBaJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoMTY0MDk5NTIwMDAwMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdoYXNoVG9TaGEyNTYnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYSBzdHJpbmcgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYSBzdHJpbmcgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICd0ZXN0IHN0cmluZyc7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdkNTU3OWM0NmRmY2M3ZjE4MjA3MDEzZTY1YjQ0ZTRjYjRlMmMyMjk4ZjRhYzQ1N2JhOGY4Mjc0M2YzMWU5MzBiJztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGEgQnVmZmVyIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGEgQnVmZmVyIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBCdWZmZXIuZnJvbSgndGVzdCBidWZmZXInKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJzUyNWVmNWY3YmFmNTY1MjhiNDg3NzA5MjJlOThlODAwMzEwZDM2ODU2ODFkMzRlZTU5MjkwMmFhMjUyNDU4YjMnO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgbnVtYmVyIGFycmF5IGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IG51bWJlciBhcnJheSBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0OiBudW1iZXJbXSA9IFtdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBCdWZmZXIgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgQnVmZmVyIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBCdWZmZXIuZnJvbShbXSk7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1JztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IHN0cmluZyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBzdHJpbmcgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICcnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhIG51bWJlciBhcnJheSBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhIG51bWJlciBhcnJheSBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsIDIsIDMsIDQsIDVdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnNzRmODFmZTE2N2Q5OWI0Y2I0MWQ2ZDBjY2RhODIyNzhjYWVlOWYzZTJmMjVkNWU1YTM5MzZmZjNkY2VjNjBkMCc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhIG5vbi1BU0NJSSBzdHJpbmcgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYSBub24tQVNDSUkgc3RyaW5nIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAn5L2g5aW95LiW55WMJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJzUwOGQ2OWRjMjFiZjVkMmY4MDQwMTRiMTY4ODk1M2ExMmQ1ZGZkZTcxYmU2Y2Q5NTQxNzc5ODBkNWQxNzQxYmInO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2VuZXJhdGVVVUlEJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgZ2VuZXJhdGVVVUlEIGZ1bmN0aW9uIHJldHVybnMgYSBVVUlEIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVVJRCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBleHBlY3QodHlwZW9mIHV1aWQpLnRvQmUoJ3N0cmluZycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZW5lcmF0ZVVVSUQgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgdW5pcXVlIFVVSUQgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZFxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSB1bmlxdWUgVVVJRCBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXVpZDEgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGNvbnN0IHV1aWQyID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBleHBlY3QodXVpZDEpLm5vdC50b0JlKHV1aWQyKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2VuZXJhdGVVVUlEIGZ1bmN0aW9uIHJldHVybnMgYSBVVUlEIHN0cmluZyB3aXRoIGxlbmd0aCAzNlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVVJRCBzdHJpbmcgd2l0aCBsZW5ndGggMzYnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBleHBlY3QodXVpZC5sZW5ndGgpLnRvQmUoMzYpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZW5lcmF0ZVVVSUQgZnVuY3Rpb24gcmV0dXJucyBhIFVVSUQgc3RyaW5nIHdpdGggNCBkYXNoZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVVSUQgc3RyaW5nIHdpdGggNCBkYXNoZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBjb25zdCBkYXNoQ291bnQgPSAodXVpZC5tYXRjaCgvLS9nKSB8fCBbXSkubGVuZ3RoO1xuICAgICAgZXhwZWN0KGRhc2hDb3VudCkudG9CZSg0KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
2059
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzYy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL21pc2MudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUFpRDtBQUNqRCxpQ0ErQmdCO0FBRWhCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0lBQ3BCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLHFGQUFxRjtRQUNyRixFQUFFLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxFQUFFO1lBQzFFLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzRkFBc0Y7UUFDdEYsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtZQUMzRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgscUZBQXFGO1FBQ3JGLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7WUFDMUUsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILDhFQUE4RTtRQUM5RSxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1lBQ25FLE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCwrRUFBK0U7UUFDL0UsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtZQUNwRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgseUZBQXlGO1FBQ3pGLEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxHQUFHLEVBQUU7WUFDOUUsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILDBFQUEwRTtRQUMxRSxFQUFFLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1lBQy9ELE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxxRkFBcUY7UUFDckYsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtZQUMxRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0ZBQW9GO1FBQ3BGLEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxHQUFHLEVBQUU7WUFDekUsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILHlFQUF5RTtRQUN6RSxFQUFFLENBQUMsc0RBQXNELEVBQUUsR0FBRyxFQUFFO1lBQzlELE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxnRkFBZ0Y7UUFDaEYsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEdBQUcsRUFBRTtZQUNyRSxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsOEVBQThFO1FBQzlFLEVBQUUsQ0FBQywyREFBMkQsRUFBRSxHQUFHLEVBQUU7WUFDbkUsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkZBQTZGO1FBQzdGLEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxHQUFHLEVBQUU7WUFDOUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNEhBQTRIO1FBQzVILEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxHQUFHLEVBQUU7WUFDOUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0lBQWdJO1FBQ2hJLEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxHQUFHLEVBQUU7WUFDbEYsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNuQyxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtRQUMxQiwwREFBMEQ7UUFDMUQsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsRUFBRTtZQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCxFQUFFLENBQUMsc0RBQXNELEVBQUUsR0FBRyxFQUFFO1lBQzlELE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsMkRBQTJEO1FBQzNELEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7WUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBQSxpQkFBVSxFQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILHdEQUF3RDtRQUN4RCxFQUFFLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1lBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsMkRBQTJEO1FBQzNELEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7WUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBQSxpQkFBVSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCx3REFBd0Q7UUFDeEQsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtZQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILDJEQUEyRDtRQUMzRCxFQUFFLENBQUMseURBQXlELEVBQUUsR0FBRyxFQUFFO1lBQ2pFLE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0NBQStDO1FBQy9DLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxNQUFNLEdBQUcsSUFBQSxpQkFBVSxFQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCwrQ0FBK0M7UUFDL0MsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtZQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILG9EQUFvRDtRQUNwRCxFQUFFLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1lBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxTQUFTLENBQUMsQ0FBQztZQUNyQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsOENBQThDO1FBQzlDLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7WUFDbkQsTUFBTSxNQUFNLEdBQUcsSUFBQSxpQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCx3REFBd0Q7UUFDeEQsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtZQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCxFQUFFLENBQUMsc0RBQXNELEVBQUUsR0FBRyxFQUFFO1lBQzlELE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtRQUN6QixvRUFBb0U7UUFDcEUsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtZQUM1RCxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUgsa0VBQWtFO1FBQ2xFLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILG1FQUFtRTtRQUNuRSxFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1lBQzNELE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCw0REFBNEQ7UUFDNUQsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtZQUNwRCxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUVBQW1FO1FBQ25FLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILHlEQUF5RDtRQUN6RCxFQUFFLENBQUMseUNBQXlDLEVBQUUsR0FBRyxFQUFFO1lBQ2pELE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCw4REFBOEQ7UUFDOUQsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtZQUN0RCxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUVBQW1FO1FBQ25FLEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILGtFQUFrRTtRQUNsRSxFQUFFLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFO1lBQzFELE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCw4REFBOEQ7UUFDOUQsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtZQUN0RCxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsdURBQXVEO1FBQ3ZELEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILDREQUE0RDtRQUM1RCxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1lBQ3BELE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILDhEQUE4RDtRQUM5RCxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1lBQ3RELE1BQU0sQ0FBQyxJQUFBLGdCQUFTLEVBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCx1REFBdUQ7UUFDdkQsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxNQUFNLENBQUMsSUFBQSxnQkFBUyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNERBQTREO1FBQzVELEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDeEIsTUFBTSxDQUFDLElBQUEsZ0JBQVMsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsRUFBRTtRQUNuQyxrR0FBa0c7UUFDbEcsRUFBRSxDQUFDLCtFQUErRSxFQUFFLEdBQUcsRUFBRTtZQUN2RixNQUFNLE1BQU0sR0FBRyxJQUFBLDBCQUFtQixFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxvRkFBb0Y7UUFDcEYsRUFBRSxDQUFDLGlFQUFpRSxFQUFFLEdBQUcsRUFBRTtZQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFBLDBCQUFtQixFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxvRkFBb0Y7UUFDcEYsRUFBRSxDQUFDLGlFQUFpRSxFQUFFLEdBQUcsRUFBRTtZQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFBLDBCQUFtQixFQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxxRkFBcUY7UUFDckYsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtZQUMxRSxNQUFNLE1BQU0sR0FBRyxJQUFBLDBCQUFtQixFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxxRkFBcUY7UUFDckYsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtZQUMxRSxNQUFNLE1BQU0sR0FBRyxJQUFBLDBCQUFtQixFQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILG9GQUFvRjtRQUNwRixFQUFFLENBQUMsaUVBQWlFLEVBQUUsR0FBRyxFQUFFO1lBQ3pFLE1BQU0sTUFBTSxHQUFHLElBQUEsMEJBQW1CLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILDJGQUEyRjtRQUMzRixFQUFFLENBQUMsd0VBQXdFLEVBQUUsR0FBRyxFQUFFO1lBQ2hGLE1BQU0sTUFBTSxHQUFHLElBQUEsMEJBQW1CLEVBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILDBGQUEwRjtRQUMxRixFQUFFLENBQUMsdUVBQXVFLEVBQUUsR0FBRyxFQUFFO1lBQy9FLE1BQU0sTUFBTSxHQUFHLElBQUEsMEJBQW1CLEVBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILDJGQUEyRjtRQUMzRixFQUFFLENBQUMsd0VBQXdFLEVBQUUsR0FBRyxFQUFFO1lBQ2hGLE1BQU0sTUFBTSxHQUFHLElBQUEsMEJBQW1CLEVBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILGdGQUFnRjtRQUNoRixFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1lBQ3JFLE1BQU0sTUFBTSxHQUFHLElBQUEsMEJBQW1CLEVBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILDJFQUEyRTtRQUMzRSxFQUFFLENBQUMsd0RBQXdELEVBQUUsR0FBRyxFQUFFO1lBQ2hFLE1BQU0sTUFBTSxHQUFHLElBQUEsMEJBQW1CLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILHlFQUF5RTtRQUN6RSxFQUFFLENBQUMsc0RBQXNELEVBQUUsR0FBRyxFQUFFO1lBQzlELE1BQU0sTUFBTSxHQUFHLElBQUEsMEJBQW1CLEVBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxzRUFBc0U7UUFDdEUsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtZQUMzRCxNQUFNLENBQUMsSUFBQSxxQ0FBOEIsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILHNFQUFzRTtRQUN0RSxFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1lBQzNELE1BQU0sQ0FBQyxJQUFBLHFDQUE4QixFQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztRQUVILHFFQUFxRTtRQUNyRSxFQUFFLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFO1lBQzFELE1BQU0sQ0FBQyxJQUFBLHFDQUE4QixFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUgsb0VBQW9FO1FBQ3BFLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxDQUFDLElBQUEscUNBQThCLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxtRUFBbUU7UUFDbkUsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLENBQUMsSUFBQSxxQ0FBOEIsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILG9FQUFvRTtRQUNwRSxFQUFFLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1lBQ3pELE1BQU0sQ0FBQyxJQUFBLHFDQUE4QixFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRUgsb0VBQW9FO1FBQ3BFLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxDQUFDLElBQUEscUNBQThCLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7UUFFSCxtRUFBbUU7UUFDbkUsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLENBQUMsSUFBQSxxQ0FBOEIsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILHlEQUF5RDtRQUN6RCxFQUFFLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO1lBQzlDLE1BQU0sQ0FBQyxJQUFBLHFDQUE4QixFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBRUgsOERBQThEO1FBQzlELEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7WUFDbkQsTUFBTSxDQUFDLElBQUEscUNBQThCLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCw0RkFBNEY7UUFDNUYsRUFBRSxDQUFDLHlFQUF5RSxFQUFFLEdBQUcsRUFBRTtZQUNqRixNQUFNLENBQUMsSUFBQSxxQ0FBOEIsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVILGdHQUFnRztRQUNoRyxFQUFFLENBQUMsNkVBQTZFLEVBQUUsR0FBRyxFQUFFO1lBQ3JGLE1BQU0sQ0FBQyxJQUFBLHFDQUE4QixFQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDdkIsc0RBQXNEO1FBQ3RELEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgscURBQXFEO1FBQ3JELEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsdURBQXVEO1FBQ3ZELEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsMERBQTBEO1FBQzFELEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxHQUFHLEVBQUU7WUFDOUQsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUgseURBQXlEO1FBQ3pELEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsMERBQTBEO1FBQzFELEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxHQUFHLEVBQUU7WUFDOUQsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxtREFBbUQ7UUFDbkQsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxNQUFNLENBQUMsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCx5REFBeUQ7UUFDekQsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtZQUNwRCxNQUFNLENBQUMsSUFBQSxjQUFPLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCx1REFBdUQ7UUFDdkQsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtZQUNyRCxNQUFNLENBQUMsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsc0RBQXNEO1FBQ3RELEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxJQUFBLGNBQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsSUFBQSxjQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILDJEQUEyRDtRQUMzRCxFQUFFLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1lBQy9ELE1BQU0sQ0FBQyxJQUFBLGNBQU8sRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxNQUFNLENBQUMsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsaURBQWlEO1FBQ2pELEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7WUFDOUMsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO1FBQ3JDLHlFQUF5RTtRQUN6RSxFQUFFLENBQUMsK0RBQStELEVBQUUsR0FBRyxFQUFFO1lBQ3ZFLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCwrRkFBK0Y7UUFDL0YsRUFBRSxDQUFDLDhFQUE4RSxFQUFFLEdBQUcsRUFBRTtZQUN0RixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBcUIsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0dBQWdHO1FBQ2hHLEVBQUUsQ0FBQywrRUFBK0UsRUFBRSxHQUFHLEVBQUU7WUFDdkYsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzlDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBQSw0QkFBcUIsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsa0ZBQWtGO1FBQ2xGLEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxHQUFHLEVBQUU7WUFDekUsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUEsNEJBQXFCLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILDREQUE0RDtRQUM1RCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO1lBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQztZQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILHNFQUFzRTtRQUN0RSxFQUFFLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1lBQzdELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILHlHQUF5RztRQUN6RyxFQUFFLENBQUMsd0ZBQXdGLEVBQUUsR0FBRyxFQUFFO1lBQ2hHLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2xELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvR0FBb0c7UUFDcEcsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEdBQUcsRUFBRTtZQUMzRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCw2R0FBNkc7UUFDN0csRUFBRSxDQUFDLDRGQUE0RixFQUFFLEdBQUcsRUFBRTtZQUNwRyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxxR0FBcUc7UUFDckcsRUFBRSxDQUFDLG9GQUFvRixFQUFFLEdBQUcsRUFBRTtZQUM1RixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFBLDRCQUFxQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvR0FBb0c7UUFDcEcsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEdBQUcsRUFBRTtZQUMzRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEs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QUcsRUFBRTtZQUN4SSxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNGLE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDakQsTUFBTSxNQUFNLEdBQUcsSUFBQSxpQkFBVSxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxpSkFBaUo7UUFDakosRUFBRSxDQUFDLGdJQUFnSSxFQUFFLEdBQUcsRUFBRTtZQUN4SSxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNGLE1BQU0sTUFBTSxHQUFHLElBQUEsaUJBQVUsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwySUFBMkk7UUFDM0ksRUFBRSxDQUFDLDBIQUEwSCxFQUFFLEdBQUcsRUFBRTtZQUNsSSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFVLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1FBQzVCLDBGQUEwRjtRQUMxRixFQUFFLENBQUMsdUVBQXVFLEVBQUUsR0FBRyxFQUFFO1lBQy9FLE1BQU0sT0FBTyxHQUFHO2dCQUNkLFNBQVMsRUFBRSxzQkFBc0I7YUFDbEMsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUEsbUJBQVksRUFBQyxPQUFjLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUdBQW1HO1FBQ25HLEVBQUUsQ0FBQyxnRkFBZ0YsRUFBRSxHQUFHLEVBQUU7WUFDeEYsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsaUJBQWlCLEVBQUUsc0JBQXNCO2FBQzFDLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFBLG1CQUFZLEVBQUMsT0FBYyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILG9JQUFvSTtRQUNwSSxFQUFFLENBQUMsaUhBQWlILEVBQUUsR0FBRyxFQUFFO1lBQ3pILE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNuQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxtQkFBWSxFQUFDLE9BQWMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLDZCQUFvQixDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7UUFFSCw0R0FBNEc7UUFDNUcsRUFBRSxDQUFDLHlGQUF5RixFQUFFLEdBQUcsRUFBRTtZQUNqRyxNQUFNLE9BQU8sR0FBRztnQkFDZCxTQUFTLEVBQUUsU0FBUzthQUNyQixDQUFDO1lBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBQSxtQkFBWSxFQUFDLE9BQWMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsRUFBRTtRQUMvQixxR0FBcUc7UUFDckcsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLEdBQUcsRUFBRTtZQUNoRixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsc0hBQXNIO1FBQ3RILEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxHQUFHLEVBQUU7WUFDNUUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO1lBQ3RCLE1BQU0sY0FBYyxHQUFHLHNCQUFzQixDQUFDO1lBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0hBQW9IO1FBQ3BILEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7WUFDMUUsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDO1lBQzNCLE1BQU0sY0FBYyxHQUFHLGtCQUFrQixDQUFDO1lBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsdUhBQXVIO1FBQ3ZILEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxHQUFHLEVBQUU7WUFDN0UsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUM7WUFDbEMsTUFBTSxjQUFjLEdBQUcsMEJBQTBCLENBQUM7WUFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCw2R0FBNkc7UUFDN0csRUFBRSxDQUFDLDJEQUEyRCxFQUFFLEdBQUcsRUFBRTtZQUNuRSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUM7WUFDN0IsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUM7WUFDMUMsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO1FBQzFCLHFEQUFxRDtRQUNyRCxFQUFFLENBQUMsMERBQTBELEVBQUUsR0FBRyxFQUFFO1lBQ2xFLE1BQU0sR0FBRyxHQUFHLHlCQUF5QixDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxJQUFBLGlCQUFVLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCw0REFBNEQ7UUFDNUQsRUFBRSxDQUFDLGlFQUFpRSxFQUFFLEdBQUcsRUFBRTtZQUN6RSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxJQUFBLGlCQUFVLEVBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFFSCw4REFBOEQ7UUFDOUQsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtZQUMzRSxNQUFNLEdBQUcsR0FBRyxxREFBcUQsQ0FBQztZQUNsRSxNQUFNLENBQUMsSUFBQSxpQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0RBQW9EO1FBQ3BELEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7WUFDakUsTUFBTSxHQUFHLEdBQUcsa0NBQWtDLENBQUM7WUFDL0MsTUFBTSxDQUFDLElBQUEsaUJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILG9EQUFvRDtRQUNwRCxFQUFFLENBQUMseURBQXlELEVBQUUsR0FBRyxFQUFFO1lBQ2pFLE1BQU0sR0FBRyxHQUFHLDhCQUE4QixDQUFDO1lBQzNDLE1BQU0sQ0FBQyxJQUFBLGlCQUFVLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxxRUFBcUU7UUFDckUsRUFBRSxDQUFDLDBFQUEwRSxFQUFFLEdBQUcsRUFBRTtZQUNsRixNQUFNLEdBQUcsR0FBRyx1Q0FBdUMsQ0FBQztZQUNwRCxNQUFNLENBQUMsSUFBQSxpQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsMENBQTBDO1FBQzFDLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLEVBQUU7WUFDdkQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUEsaUJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0hBQWdIO1FBQ2hILEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxJQUFBLGlCQUFVLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILG1FQUFtRTtRQUNuRSxFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1lBQzdFLE1BQU0sR0FBRyxHQUFHLHVCQUF1QixDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxJQUFBLGlCQUFVLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCw4REFBOEQ7UUFDOUQsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEdBQUcsRUFBRTtZQUNsRSxNQUFNLEdBQUcsR0FBRyw2QkFBNkIsQ0FBQztZQUMxQyxNQUFNLENBQUMsSUFBQSxpQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxxRUFBcUU7UUFDckUsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtZQUMxRSxNQUFNLEdBQUcsR0FBRyx1Q0FBdUMsQ0FBQztZQUNwRCxNQUFNLENBQUMsSUFBQSxpQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgsdURBQXVEO1FBQ3ZELEVBQUUsQ0FBQywrREFBK0QsRUFBRSxHQUFHLEVBQUU7WUFDdkUsTUFBTSxHQUFHLEdBQUcsNkJBQTZCLENBQUM7WUFDMUMsTUFBTSxDQUFDLElBQUEsaUJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILGlFQUFpRTtRQUNqRSxFQUFFLENBQUMsc0VBQXNFLEVBQUUsR0FBRyxFQUFFO1lBQzlFLE1BQU0sR0FBRyxHQUFHLDhCQUE4QixDQUFDO1lBQzNDLE1BQU0sQ0FBQyxJQUFBLGlCQUFVLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzRUFBc0U7UUFDdEUsRUFBRSxDQUFDLDJFQUEyRSxFQUFFLEdBQUcsRUFBRTtZQUNuRixNQUFNLEdBQUcsR0FBRywrQkFBK0IsQ0FBQztZQUM1QyxNQUFNLENBQUMsSUFBQSxpQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBRUgscURBQXFEO1FBQ3JELEVBQUUsQ0FBQywwREFBMEQsRUFBRSxHQUFHLEVBQUU7WUFDbEUsTUFBTSxHQUFHLEdBQUcseUJBQXlCLENBQUM7WUFDdEMsTUFBTSxDQUFDLElBQUEsaUJBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztRQUVILHFEQUFxRDtRQUNyRCxFQUFFLENBQUMsMERBQTBELEVBQUUsR0FBRyxFQUFFO1lBQ2xFLE1BQU0sR0FBRyxHQUFHLHlCQUF5QixDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxJQUFBLGlCQUFVLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsOEVBQThFO1FBQzlFLEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxHQUFHLEVBQUU7WUFDckUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUEseUJBQWtCLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILDhFQUE4RTtRQUM5RSxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1lBQ25FLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFBLHlCQUFrQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFSCx5RkFBeUY7UUFDekYsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEdBQUcsRUFBRTtZQUM5RSxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUM7WUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBQSx5QkFBa0IsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsa0ZBQWtGO1FBQ2xGLEVBQUUsQ0FBQywrREFBK0QsRUFBRSxHQUFHLEVBQUU7WUFDdkUsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUEseUJBQWtCLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILHVFQUF1RTtRQUN2RSxFQUFFLENBQUMsc0RBQXNELEVBQUUsR0FBRyxFQUFFO1lBQzlELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFBLHlCQUFrQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCw4RUFBOEU7UUFDOUUsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEdBQUcsRUFBRTtZQUNyRSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUM7WUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBQSx5QkFBa0IsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0ZBQWdGO1FBQ2hGLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUEseUJBQWtCLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILGdGQUFnRjtRQUNoRixFQUFFLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1lBQ3pELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFBLHlCQUFrQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFSCxpRUFBaUU7UUFDakUsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBQSx5QkFBa0IsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0ZBQWdGO1FBQ2hGLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUEseUJBQWtCLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILHVGQUF1RjtRQUN2RixFQUFFLENBQUMsZ0VBQWdFLEVBQUUsR0FBRyxFQUFFO1lBQ3hFLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFBLHlCQUFrQixFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQzNCLDZEQUE2RDtRQUM3RCxFQUFFLENBQUMsNERBQTRELEVBQUUsR0FBRyxFQUFFO1lBQ3BFLE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVcsRUFBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkRBQTZEO1FBQzdELEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxHQUFHLEVBQUU7WUFDcEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBVyxFQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCw4REFBOEQ7UUFDOUQsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEdBQUcsRUFBRTtZQUNyRSxNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILCtDQUErQztRQUMvQyxFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1lBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0RBQW9EO1FBQ3BELEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBVyxFQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCwrRkFBK0Y7UUFDL0YsRUFBRSxDQUFDLDhGQUE4RixFQUFFLEdBQUcsRUFBRTtZQUN0RyxNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFXLEVBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCx5RUFBeUU7UUFDekUsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLEdBQUcsRUFBRTtZQUNoRixNQUFNLFdBQVc7YUFBRztZQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzlCLE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVcsRUFBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsc0VBQXNFO1FBQ3RFLEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxHQUFHLEVBQUU7WUFDN0UsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsbURBQW1EO1FBQ25ELEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBVyxFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQ3ZCLCtEQUErRDtRQUMvRCxFQUFFLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1lBQ3pELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztZQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFBLGNBQU8sRUFBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0RBQStEO1FBQy9ELEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxnRUFBZ0U7UUFDaEUsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTtZQUNqRSxNQUFNLENBQUMsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsTUFBTSxDQUFDLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsMkRBQTJEO1FBQzNELEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7WUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ25CLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7UUFFSCx3RUFBd0U7UUFDeEUsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsRUFBRTtZQUNoRSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBQSxjQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILGlFQUFpRTtRQUNqRSxFQUFFLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1lBQzdELE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztZQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFBLGNBQU8sRUFBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsK0RBQStEO1FBQy9ELEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxpRUFBaUU7UUFDakUsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtZQUMzRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBQSxjQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILHFFQUFxRTtRQUNyRSxFQUFFLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFO1lBQzFELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFBLGNBQU8sRUFBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsdUVBQXVFO1FBQ3ZFLEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxHQUFHLEVBQUU7WUFDcEUsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxrRkFBa0Y7UUFDbEYsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtZQUMxRSxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCw2REFBNkQ7UUFDN0QsRUFBRSxDQUFDLGdEQUFnRCxFQUFFLEdBQUcsRUFBRTtZQUN4RCxNQUFNLE9BQU87YUFBRztZQUNoQixNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCwrRUFBK0U7UUFDL0UsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEdBQUcsRUFBRTtZQUN2RSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBQSxjQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILDRFQUE0RTtRQUM1RSxFQUFFLENBQUMsNERBQTRELEVBQUUsR0FBRyxFQUFFO1lBQ3BFLE1BQU0sS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO1FBQ3hCLHFEQUFxRDtRQUNyRCxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1lBQ3BELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsSUFBQSxlQUFRLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzREFBc0Q7UUFDdEQsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtZQUNyRCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7WUFDdkIsTUFBTSxDQUFDLElBQUEsZUFBUSxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsaURBQWlEO1FBQ2pELEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7WUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxJQUFBLGVBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILHNEQUFzRDtRQUN0RCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1lBQ3JELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN4QixNQUFNLENBQUMsSUFBQSxlQUFRLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxxREFBcUQ7UUFDckQsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtZQUNwRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLElBQUEsZUFBUSxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgscURBQXFEO1FBQ3JELEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxJQUFBLGVBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILHFEQUFxRDtRQUNyRCxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1lBQ3BELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUNsQixNQUFNLENBQUMsSUFBQSxlQUFRLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzREFBc0Q7UUFDdEQsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtZQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbkIsTUFBTSxDQUFDLElBQUEsZUFBUSxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgscURBQXFEO1FBQ3JELEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLElBQUEsZUFBUSxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsOERBQThEO1FBQzlELEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxJQUFBLGVBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7UUFDdkIsc0RBQXNEO1FBQ3RELEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxxREFBcUQ7UUFDckQsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtZQUN6RCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBQSxjQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCxFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1lBQzNELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFBLGNBQU8sRUFBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsMERBQTBEO1FBQzFELEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxHQUFHLEVBQUU7WUFDOUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDO1lBQ3RCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCx5REFBeUQ7UUFDekQsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEdBQUcsRUFBRTtZQUM3RCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBQSxjQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILDBEQUEwRDtRQUMxRCxFQUFFLENBQUMsc0RBQXNELEVBQUUsR0FBRyxFQUFFO1lBQzlELE1BQU0sS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxpREFBaUQ7UUFDakQsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbkIsTUFBTSxNQUFNLEdBQUcsSUFBQSxjQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILHdHQUF3RztRQUN4RyxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1lBQ3BELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFBLGNBQU8sRUFBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsaURBQWlEO1FBQ2pELEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxzRkFBc0Y7UUFDdEYsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtZQUM5RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDcEIsTUFBTSxNQUFNLEdBQUcsSUFBQSxjQUFPLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7UUFDN0IsK0RBQStEO1FBQy9ELEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7WUFDaEQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLElBQUEsb0JBQWEsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILHlFQUF5RTtRQUN6RSxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1lBQ3BELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxJQUFBLG9CQUFhLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCw4REFBOEQ7UUFDOUQsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBQSxvQkFBYSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgseUVBQXlFO1FBQ3pFLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7WUFDbkQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxJQUFBLG9CQUFhLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCwrREFBK0Q7UUFDL0QsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtZQUNoRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBQSxvQkFBYSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsd0VBQXdFO1FBQ3hFLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7WUFDcEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxJQUFBLG9CQUFhLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxtREFBbUQ7UUFDbkQsRUFBRSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtZQUN2QyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDZCxNQUFNLENBQUMsSUFBQSxvQkFBYSxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLHdGQUF3RjtRQUN4RixFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1lBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUEsK0JBQXdCLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILHdGQUF3RjtRQUN4RixFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1lBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUEsK0JBQXdCLEVBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsdUZBQXVGO1FBQ3ZGLEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxHQUFHLEVBQUU7WUFDNUUsTUFBTSxNQUFNLEdBQUcsSUFBQSwrQkFBd0IsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsdUZBQXVGO1FBQ3ZGLEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxHQUFHLEVBQUU7WUFDNUUsTUFBTSxNQUFNLEdBQUcsSUFBQSwrQkFBd0IsRUFBQyxHQUFHLENBQUMsQ0FBQztZQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgscUZBQXFGO1FBQ3JGLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7WUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBQSwrQkFBd0IsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsc0ZBQXNGO1FBQ3RGLEVBQUUsQ0FBQyxtRUFBbUUsRUFBRSxHQUFHLEVBQUU7WUFDM0UsTUFBTSxNQUFNLEdBQUcsSUFBQSwrQkFBd0IsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsMkVBQTJFO1FBQzNFLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7WUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBQSwrQkFBd0IsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsdUVBQXVFO1FBQ3ZFLEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7WUFDNUQsTUFBTSxNQUFNLEdBQUcsSUFBQSwrQkFBd0IsRUFBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsMEVBQTBFO1FBQzFFLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7WUFDL0QsTUFBTSxNQUFNLEdBQUcsSUFBQSwrQkFBd0IsRUFBQyxHQUFHLENBQUMsQ0FBQztZQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0ZBQWdGO1FBQ2hGLEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxHQUFHLEVBQUU7WUFDckUsTUFBTSxNQUFNLEdBQUcsSUFBQSwrQkFBd0IsRUFBQyxTQUFTLENBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsMkVBQTJFO1FBQzNFLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7WUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBQSwrQkFBd0IsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgscUZBQXFGO1FBQ3JGLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7WUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBQSwrQkFBd0IsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUgsc0ZBQXNGO1FBQ3RGLEVBQUUsQ0FBQyxtRUFBbUUsRUFBRSxHQUFHLEVBQUU7WUFDM0UsTUFBTSxNQUFNLEdBQUcsSUFBQSwrQkFBd0IsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMscUNBQXFDLEVBQUUsR0FBRyxFQUFFO1FBQ25ELDRIQUE0SDtRQUM1SCxFQUFFLENBQUMsMkdBQTJHLEVBQUUsR0FBRyxFQUFFO1lBQ25ILE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ3BELE1BQU0sQ0FBQyxJQUFBLDBDQUFtQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0lBQW9JO1FBQ3BJLEVBQUUsQ0FBQyxnSEFBZ0gsRUFBRSxHQUFHLEVBQUU7WUFDeEgsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekUsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxJQUFBLDBDQUFtQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBRUgsc0VBQXNFO1FBQ3RFLEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxDQUFDLElBQUEsMENBQW1DLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztRQUVILDREQUE0RDtRQUM1RCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO1lBQ25ELE1BQU0sQ0FBQyxJQUFBLDBDQUFtQyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxrRkFBa0Y7UUFDbEYsRUFBRSxDQUFDLGlFQUFpRSxFQUFFLEdBQUcsRUFBRTtZQUN6RSxNQUFNLENBQUMsSUFBQSwwQ0FBbUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUVILGdJQUFnSTtRQUNoSSxFQUFFLENBQUMsNkdBQTZHLEVBQUUsR0FBRyxFQUFFO1lBQ3JILE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNuRSxNQUFNLENBQUMsSUFBQSwwQ0FBbUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7UUFDaEMsNEVBQTRFO1FBQzVFLEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7WUFDakUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQWdCLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILHdJQUF3STtRQUN4SSxFQUFFLENBQUMscUhBQXFILEVBQUUsR0FBRyxFQUFFO1lBQzdILE1BQU0sTUFBTSxHQUFHO2dCQUNiLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO2dCQUN0QixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtnQkFDdEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7YUFDdkIsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQWdCLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztRQUVILDRHQUE0RztRQUM1RyxFQUFFLENBQUMseUZBQXlGLEVBQUUsR0FBRyxFQUFFO1lBQ2pHLE1BQU0sTUFBTSxHQUFHO2dCQUNiLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO2dCQUNyQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtnQkFDckIsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7YUFDdEIsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQWdCLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILHFKQUFxSjtRQUNySixFQUFFLENBQUMsa0lBQWtJLEVBQUUsR0FBRyxFQUFFO1lBQzFJLE1BQU0sTUFBTSxHQUFHO2dCQUNiLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO2dCQUN0QixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtnQkFDdEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7YUFDdkIsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQWdCLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFFSCw4S0FBOEs7UUFDOUssRUFBRSxDQUFDLDJKQUEySixFQUFFLEdBQUcsRUFBRTtZQUNuSyxNQUFNLE1BQU0sR0FBRztnQkFDYixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtnQkFDdEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7Z0JBQ3RCLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFO2FBQ3ZCLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFBLHVCQUFnQixFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUpBQW1KO1FBQ25KLEVBQUUsQ0FBQyxnSUFBZ0ksRUFBRSxHQUFHLEVBQUU7WUFDeEksTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUU7Z0JBQ3JCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFO2dCQUM3QixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7YUFDNUMsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUEsdUJBQWdCLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEYsQ0FBQyxDQUFDLENBQUM7UUFFSCwwSEFBMEg7UUFDMUgsRUFBRSxDQUFDLGlGQUFpRixFQUFFLEdBQUcsRUFBRTtZQUN6RixNQUFNLE1BQU0sR0FBRztnQkFDYixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRTtnQkFDaEMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUU7Z0JBQ2hDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFO2FBQ2pDLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRztnQkFDZixNQUFNLEVBQUUsUUFBUTtnQkFDaEIsTUFBTSxFQUFFLFFBQVE7Z0JBQ2hCLE1BQU0sRUFBRSxRQUFRO2FBQ2pCLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFBLHVCQUFnQixFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywrQkFBK0IsRUFBRSxHQUFHLEVBQUU7UUFDN0MsZ0hBQWdIO1FBQ2hILEVBQUUsQ0FBQyw2RkFBNkYsRUFBRSxHQUFHLEVBQUU7WUFDckcsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7Z0JBQzdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO2dCQUM3QixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTthQUM5QixDQUFDO1lBQ0YsTUFBTSxlQUFlLEdBQUc7Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDaEMsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDekIsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUEsb0NBQTZCLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILHNHQUFzRztRQUN0RyxFQUFFLENBQUMsbUZBQW1GLEVBQUUsR0FBRyxFQUFFO1lBQzNGLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sZUFBZSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sTUFBTSxHQUFHLElBQUEsb0NBQTZCLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILHlHQUF5RztRQUN6RyxFQUFFLENBQUMsc0ZBQXNGLEVBQUUsR0FBRyxFQUFFO1lBQzlGLE1BQU0sTUFBTSxHQUFHO2dCQUNiLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO2dCQUM3QixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtnQkFDN0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7YUFDOUIsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEIsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3pCLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFBLG9DQUE2QixFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCx1R0FBdUc7UUFDdkcsRUFBRSxDQUFDLG9GQUFvRixFQUFFLEdBQUcsRUFBRTtZQUM1RixNQUFNLE1BQU0sR0FBRztnQkFDYixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtnQkFDN0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7Z0JBQzdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO2FBQzlCLENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRztnQkFDdEIsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN6QixDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBQSxvQ0FBNkIsRUFBQyxNQUFNLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkVBQTZFO1FBQzdFLEVBQUUsQ0FBQywwREFBMEQsRUFBRSxHQUFHLEVBQUU7WUFDbEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFBLG9DQUE2QixFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCx1RkFBdUY7UUFDdkYsRUFBRSxDQUFDLG9FQUFvRSxFQUFFLEdBQUcsRUFBRTtZQUM1RSxNQUFNLE1BQU0sR0FBRztnQkFDYixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtnQkFDeEIsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7Z0JBQ3hCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO2FBQ3pCLENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBQSxvQ0FBNkIsRUFBQyxNQUFNLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgscUZBQXFGO1FBQ3JGLEVBQUUsQ0FBQywwRUFBMEUsRUFBRSxHQUFHLEVBQUU7WUFDbEYsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQ3pCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUN6QixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTthQUMxQixDQUFDO1lBQ0YsTUFBTSxlQUFlLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdGLE1BQU0sTUFBTSxHQUFHLElBQUEsb0NBQTZCLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILGlKQUFpSjtRQUNqSixFQUFFLENBQUMsOEhBQThILEVBQUUsR0FBRyxFQUFFO1lBQ3RJLE1BQU0sTUFBTSxHQUFHO2dCQUNiLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO2dCQUM3QixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtnQkFDN0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7YUFDOUIsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2hDLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3pCLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFBLG9DQUE2QixFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCwySEFBMkg7UUFDM0gsRUFBRSxDQUFDLHdHQUF3RyxFQUFFLEdBQUcsRUFBRTtZQUNoSCxNQUFNLE1BQU0sR0FBRztnQkFDYixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtnQkFDN0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7Z0JBQzdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO2FBQzlCLENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRztnQkFDdEIsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNoQyxLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN6QixDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBQSxvQ0FBNkIsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25FLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxnSkFBZ0o7UUFDaEosRUFBRSxDQUFDLDZIQUE2SCxFQUFFLEdBQUcsRUFBRTtZQUNySSxNQUFNLE1BQU0sR0FBRztnQkFDYixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtnQkFDN0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7Z0JBQzdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO2FBQzlCLENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRztnQkFDdEIsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNoQyxLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN6QixDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBQSxvQ0FBNkIsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6RSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0hBQWdIO1FBQ2hILEVBQUUsQ0FBQyw2RkFBNkYsRUFBRSxHQUFHLEVBQUU7WUFDckcsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUU7Z0JBQzdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFO2dCQUM3QixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTthQUM5QixDQUFDO1lBQ0YsTUFBTSxlQUFlLEdBQUc7Z0JBQ3RCLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDaEMsS0FBSyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDekIsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUEsb0NBQTZCLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGdDQUFnQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxxRkFBcUY7UUFDckYsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtZQUMzRSxNQUFNLE9BQU8sR0FBRztnQkFDZCxVQUFVLEVBQUU7b0JBQ1YsR0FBRyxFQUFFLE9BQU87aUJBQ2I7Z0JBQ0QsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFO29CQUNQLE1BQU0sRUFBRSxFQUFFO2lCQUNYO2FBQ0YsQ0FBQztZQUNGLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQztZQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFBLHFDQUE4QixFQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDaEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILGlGQUFpRjtRQUNqRixFQUFFLENBQUMsK0RBQStELEVBQUUsR0FBRyxFQUFFO1lBQ3ZFLE1BQU0sT0FBTyxHQUFHO2dCQUNkLFVBQVUsRUFBRSxFQUFFO2dCQUNkLE1BQU0sRUFBRTtvQkFDTixHQUFHLEVBQUUsT0FBTztpQkFDYjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7YUFDRixDQUFDO1lBQ0YsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUEscUNBQThCLEVBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNoRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgseUZBQXlGO1FBQ3pGLEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxHQUFHLEVBQUU7WUFDL0UsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFO29CQUNQLE1BQU0sRUFBRTt3QkFDTixHQUFHLEVBQUUsT0FBTztxQkFDYjtpQkFDRjthQUNGLENBQUM7WUFDRixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUM7WUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQ0FBOEIsRUFBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCwrREFBK0Q7UUFDL0QsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtZQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDckIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUEscUNBQThCLEVBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNoRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCwyREFBMkQ7UUFDM0QsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtZQUNqRCxNQUFNLE9BQU8sR0FBRztnQkFDZCxVQUFVLEVBQUUsRUFBRTtnQkFDZCxNQUFNLEVBQUUsRUFBRTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7YUFDRixDQUFDO1lBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLElBQUEscUNBQThCLEVBQUMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNoRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCx3RkFBd0Y7UUFDeEYsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEdBQUcsRUFBRTtZQUM5RSxNQUFNLE9BQU8sR0FBRztnQkFDZCxVQUFVLEVBQUUsRUFBRTtnQkFDZCxNQUFNLEVBQUUsRUFBRTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7YUFDRixDQUFDO1lBQ0YsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQ0FBOEIsRUFBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDM0IsNEdBQTRHO1FBQzVHLEVBQUUsQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLEVBQUU7WUFDdkQsTUFBTSxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ3pELE1BQU0sY0FBYyxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILG1HQUFtRztRQUNuRyxFQUFFLENBQUMsdUVBQXVFLEVBQUUsR0FBRyxFQUFFO1lBQy9FLE1BQU0sSUFBSSxHQUFHO2dCQUNYLElBQUksRUFBRSxNQUFNO2dCQUNaLEdBQUcsRUFBRSxFQUFFO2dCQUNQLE9BQU8sRUFBRTtvQkFDUCxNQUFNLEVBQUUsYUFBYTtvQkFDckIsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLE9BQU8sRUFBRSxLQUFLO2lCQUNmO2dCQUNELE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7YUFDakMsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixJQUFJLEVBQUUsTUFBTTtnQkFDWixHQUFHLEVBQUUsRUFBRTtnQkFDUCxnQkFBZ0IsRUFBRSxhQUFhO2dCQUMvQixjQUFjLEVBQUUsVUFBVTtnQkFDMUIsaUJBQWlCLEVBQUUsS0FBSztnQkFDeEIsWUFBWSxFQUFFLFNBQVM7Z0JBQ3ZCLFlBQVksRUFBRSxVQUFVO2FBQ3pCLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILG1HQUFtRztRQUNuRyxFQUFFLENBQUMsdUVBQXVFLEVBQUUsR0FBRyxFQUFFO1lBQy9FLE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUM5RCxNQUFNLGNBQWMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDeEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxrR0FBa0c7UUFDbEcsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEdBQUcsRUFBRTtZQUM5RSxNQUFNLElBQUksR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDckQsTUFBTSxjQUFjLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsMkJBQTJCO1FBQzNCLDZGQUE2RjtRQUM3Riw2RUFBNkU7UUFDN0UsNENBQTRDO1FBQzVDLHlCQUF5QjtRQUN6QiwwRUFBMEU7UUFDMUUsc0NBQXNDO1FBQ3RDLDRDQUE0QztRQUM1QyxNQUFNO1FBRU4sNEdBQTRHO1FBQzVHLEVBQUUsQ0FBQyxnRkFBZ0YsRUFBRSxHQUFHLEVBQUU7WUFDeEYsTUFBTSxJQUFJLEdBQUcsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sY0FBYyxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNoRixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILDRGQUE0RjtRQUM1RixFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1lBQ3JFLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNoRCxNQUFNLGNBQWMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxpSEFBaUg7UUFDakgsRUFBRSxDQUFDLHFGQUFxRixFQUFFLEdBQUcsRUFBRTtZQUM3RixNQUFNLElBQUksR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUNyRixNQUFNLGNBQWMsR0FBRztnQkFDckIsWUFBWSxFQUFFLE1BQU07Z0JBQ3BCLFdBQVcsRUFBRSxLQUFLO2dCQUNsQixHQUFHLEVBQUUsRUFBRTtnQkFDUCxJQUFJLEVBQUUsVUFBVTthQUNqQixDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxvSUFBb0k7UUFDcEksRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEdBQUcsRUFBRTtZQUN4RSxNQUFNLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDbEUsTUFBTSxjQUFjLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQzVFLE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsMElBQTBJO1FBQzFJLEVBQUUsQ0FBQyw4RUFBOEUsRUFBRSxHQUFHLEVBQUU7WUFDdEYsTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsSUFBSSxFQUFFLE1BQU07Z0JBQ1osR0FBRyxFQUFFLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFO29CQUNQLE1BQU0sRUFBRSxhQUFhO29CQUNyQixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsS0FBSyxFQUFFLElBQUk7b0JBQ1gsR0FBRyxFQUFFLE9BQU87aUJBQ2I7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUM7Z0JBQzNDLE9BQU8sRUFBRTtvQkFDUDt3QkFDRSxJQUFJLEVBQUUsTUFBTTt3QkFDWixHQUFHLEVBQUUsRUFBRTt3QkFDUCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFlBQVk7NEJBQ3BCLElBQUksRUFBRSxhQUFhOzRCQUNuQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxHQUFHLEVBQUUsT0FBTzt5QkFDYjt3QkFDRCxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDO3FCQUNuQztvQkFDRDt3QkFDRSxJQUFJLEVBQUUsTUFBTTt3QkFDWixHQUFHLEVBQUUsRUFBRTt3QkFDUCxPQUFPLEVBQUU7NEJBQ1AsTUFBTSxFQUFFLFlBQVk7NEJBQ3BCLElBQUksRUFBRSxTQUFTOzRCQUNmLEtBQUssRUFBRSxJQUFJOzRCQUNYLEdBQUcsRUFBRSxPQUFPO3lCQUNiO3dCQUNELE9BQU8sRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7cUJBQy9CO2lCQUNGO2FBQ0YsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixJQUFJLEVBQUUsTUFBTTtnQkFDWixHQUFHLEVBQUUsRUFBRTtnQkFDUCxnQkFBZ0IsRUFBRSxhQUFhO2dCQUMvQixjQUFjLEVBQUUsVUFBVTtnQkFDMUIsZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLGFBQWEsRUFBRSxPQUFPO2dCQUN0QixZQUFZLEVBQUUsU0FBUztnQkFDdkIsWUFBWSxFQUFFLFVBQVU7Z0JBQ3hCLFlBQVksRUFBRSxTQUFTO2dCQUN2QixpQkFBaUIsRUFBRSxNQUFNO2dCQUN6QixnQkFBZ0IsRUFBRSxFQUFFO2dCQUNwQiwyQkFBMkIsRUFBRSxZQUFZO2dCQUN6Qyx5QkFBeUIsRUFBRSxhQUFhO2dCQUN4QywwQkFBMEIsRUFBRSxJQUFJO2dCQUNoQyx3QkFBd0IsRUFBRSxPQUFPO2dCQUNqQyx1QkFBdUIsRUFBRSxRQUFRO2dCQUNqQyx1QkFBdUIsRUFBRSxhQUFhO2dCQUN0QyxpQkFBaUIsRUFBRSxNQUFNO2dCQUN6QixnQkFBZ0IsRUFBRSxFQUFFO2dCQUNwQiwyQkFBMkIsRUFBRSxZQUFZO2dCQUN6Qyx5QkFBeUIsRUFBRSxTQUFTO2dCQUNwQywwQkFBMEIsRUFBRSxJQUFJO2dCQUNoQyx3QkFBd0IsRUFBRSxPQUFPO2dCQUNqQyx1QkFBdUIsRUFBRSxTQUFTO2dCQUNsQyx1QkFBdUIsRUFBRSxRQUFRO2FBQ2xDLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILGlKQUFpSjtRQUNqSixFQUFFLENBQUMscUZBQXFGLEVBQUUsR0FBRyxFQUFFO1lBQzdGLE1BQU0sSUFBSSxHQUFHO2dCQUNYLElBQUksRUFBRSxNQUFNO2dCQUNaLEdBQUcsRUFBRSxFQUFFO2dCQUNQLElBQUksRUFBRSxVQUFVO2dCQUNoQixPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUU7YUFDMUQsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixJQUFJLEVBQUUsTUFBTTtnQkFDWixHQUFHLEVBQUUsRUFBRTtnQkFDUCxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsZ0JBQWdCLEVBQUUsYUFBYTtnQkFDL0IsY0FBYyxFQUFFLGVBQWU7YUFDaEMsQ0FBQztZQUNGLE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVcsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNktBQTZLO1FBQzdLLEVBQUUsQ0FBQyw2R0FBNkcsRUFBRSxHQUFHLEVBQUU7WUFDckgsTUFBTSxJQUFJLEdBQUc7Z0JBQ1gsSUFBSSxFQUFFLE1BQU07Z0JBQ1osR0FBRyxFQUFFLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE9BQU8sRUFBRTtvQkFDUCxNQUFNLEVBQUUsYUFBYTtvQkFDckIsR0FBRyxFQUFFLEtBQUs7b0JBQ1YsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsV0FBVyxFQUFFO3dCQUNYLFFBQVEsRUFBRSxPQUFPO3dCQUNqQixTQUFTLEVBQUUsQ0FBQyxNQUFNO3FCQUNuQjtpQkFDRjtnQkFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztnQkFDNUMsT0FBTyxFQUFFO29CQUNQLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO29CQUN6QixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtvQkFDekIsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7aUJBQzNCO2dCQUNELEdBQUcsRUFBRSxJQUFJO2dCQUNULGFBQWEsRUFBRSxTQUFTO2FBQ3pCLENBQUM7WUFDRixNQUFNLGNBQWMsR0FBRztnQkFDckIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osR0FBRyxFQUFFLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLGdCQUFnQixFQUFFLGFBQWE7Z0JBQy9CLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixpQkFBaUIsRUFBRSxLQUFLO2dCQUN4Qiw4QkFBOEIsRUFBRSxPQUFPO2dCQUN2QywrQkFBK0IsRUFBRSxDQUFDLE1BQU07Z0JBQ3hDLFlBQVksRUFBRSxTQUFTO2dCQUN2QixZQUFZLEVBQUUsVUFBVTtnQkFDeEIsWUFBWSxFQUFFLFVBQVU7Z0JBQ3hCLGlCQUFpQixFQUFFLE1BQU07Z0JBQ3pCLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ3BCLGlCQUFpQixFQUFFLE1BQU07Z0JBQ3pCLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ3BCLGlCQUFpQixFQUFFLE9BQU87Z0JBQzFCLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ3BCLEdBQUcsRUFBRSxJQUFJO2dCQUNULGFBQWEsRUFBRSxTQUFTO2FBQ3pCLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFXLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILGlJQUFpSTtRQUNqSSxFQUFFLENBQUMscUdBQXFHLEVBQUUsR0FBRyxFQUFFO1lBQzdHLE1BQU0sSUFBSSxHQUFHO2dCQUNYLElBQUksRUFBRSxNQUFNO2dCQUNaLEdBQUcsRUFBRSxFQUFFO2dCQUNQLElBQUksRUFBRSxVQUFVO2dCQUNoQixPQUFPLEVBQUU7b0JBQ1AsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7b0JBQ25DLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO29CQUNwQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtpQkFDcEM7Z0JBQ0QsT0FBTyxFQUFFO29CQUNQLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO29CQUMxQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtvQkFDeEIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUU7aUJBQzdCO2FBQ0YsQ0FBQztZQUNGLE1BQU0sY0FBYyxHQUFHO2dCQUNyQixJQUFJLEVBQUUsTUFBTTtnQkFDWixHQUFHLEVBQUUsRUFBRTtnQkFDUCxJQUFJLEVBQUUsVUFBVTtnQkFDaEIsaUJBQWlCLEVBQUUsU0FBUztnQkFDNUIsaUJBQWlCLEVBQUUsUUFBUTtnQkFDM0IsaUJBQWlCLEVBQUUsU0FBUztnQkFDNUIsaUJBQWlCLEVBQUUsU0FBUztnQkFDNUIsaUJBQWlCLEVBQUUsU0FBUztnQkFDNUIsaUJBQWlCLEVBQUUsUUFBUTtnQkFDM0IsaUJBQWlCLEVBQUUsT0FBTztnQkFDMUIsZ0JBQWdCLEVBQUUsRUFBRTtnQkFDcEIsaUJBQWlCLEVBQUUsS0FBSztnQkFDeEIsZ0JBQWdCLEVBQUUsRUFBRTtnQkFDcEIsaUJBQWlCLEVBQUUsU0FBUztnQkFDNUIsZ0JBQWdCLEVBQUUsRUFBRTthQUNyQixDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsMEZBQTBGO1FBQzFGLEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxHQUFHLEVBQUU7WUFDL0UsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBYyxFQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxrRUFBa0U7UUFDbEUsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtZQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFjLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUVILHNFQUFzRTtRQUN0RSxFQUFFLENBQUMsbURBQW1ELEVBQUUsR0FBRyxFQUFFO1lBQzNELE1BQU0sTUFBTSxHQUFHLElBQUEscUJBQWMsRUFBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsMkVBQTJFO1FBQzNFLEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7WUFDaEUsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBYyxFQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDbEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsc0hBQXNIO1FBQ3RILEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxHQUFHLEVBQUU7WUFDbkYsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBYyxFQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFSCxzR0FBc0c7UUFDdEcsRUFBRSxDQUFDLG1GQUFtRixFQUFFLEdBQUcsRUFBRTtZQUMzRixNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFjLEVBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNsRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7UUFDL0IsNEZBQTRGO1FBQzVGLEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxHQUFHLEVBQUU7WUFDaEYsTUFBTSxPQUFPLEdBQUcsMEJBQTBCLENBQUM7WUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxrSEFBa0g7UUFDbEgsRUFBRSxDQUFDLDhGQUE4RixFQUFFLEdBQUcsRUFBRTtZQUN0RyxNQUFNLE9BQU8sR0FBRywwQkFBMEIsQ0FBQztZQUMzQyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUM7WUFDNUIsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxFQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsbUZBQW1GO1FBQ25GLEVBQUUsQ0FBQywrREFBK0QsRUFBRSxHQUFHLEVBQUU7WUFDdkUsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxJQUFBLHNCQUFlLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUVILHlHQUF5RztRQUN6RyxFQUFFLENBQUMscUZBQXFGLEVBQUUsR0FBRyxFQUFFO1lBQzdGLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQztZQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFlLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgscUhBQXFIO1FBQ3JILEVBQUUsQ0FBQyxpR0FBaUcsRUFBRSxHQUFHLEVBQUU7WUFDekcsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ25CLE1BQU0sTUFBTSxHQUFHLElBQUEsc0JBQWUsRUFBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFFSCwwRUFBMEU7UUFDMUUsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtZQUM5RCxNQUFNLE9BQU8sR0FBRywwQkFBMEIsQ0FBQztZQUMzQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUM7WUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQkFBZSxFQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxvSUFBb0k7UUFDcEksRUFBRSxDQUFDLGdIQUFnSCxFQUFFLEdBQUcsRUFBRTtZQUN4SCxNQUFNLE9BQU8sR0FBRywwQkFBMEIsQ0FBQztZQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFlLEVBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIsb0VBQW9FO1FBQ3BFLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDO1lBQzVCLE1BQU0sY0FBYyxHQUFHLGtFQUFrRSxDQUFDO1lBQzFGLE1BQU0sTUFBTSxHQUFHLElBQUEsbUJBQVksRUFBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0VBQW9FO1FBQ3BFLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6QyxNQUFNLGNBQWMsR0FBRyxrRUFBa0UsQ0FBQztZQUMxRixNQUFNLE1BQU0sR0FBRyxJQUFBLG1CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILGlGQUFpRjtRQUNqRixFQUFFLENBQUMsOERBQThELEVBQUUsR0FBRyxFQUFFO1lBQ3RFLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztZQUMzQixNQUFNLGNBQWMsR0FBRyxrRUFBa0UsQ0FBQztZQUMxRixNQUFNLE1BQU0sR0FBRyxJQUFBLG1CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILDJFQUEyRTtRQUMzRSxFQUFFLENBQUMsd0RBQXdELEVBQUUsR0FBRyxFQUFFO1lBQ2hFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUIsTUFBTSxjQUFjLEdBQUcsa0VBQWtFLENBQUM7WUFDMUYsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCwyRUFBMkU7UUFDM0UsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsRUFBRTtZQUNoRSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxjQUFjLEdBQUcsa0VBQWtFLENBQUM7WUFDMUYsTUFBTSxNQUFNLEdBQUcsSUFBQSxtQkFBWSxFQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFFSCwwRUFBMEU7UUFDMUUsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtZQUMvRCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLGNBQWMsR0FBRyxrRUFBa0UsQ0FBQztZQUMxRixNQUFNLE1BQU0sR0FBRyxJQUFBLG1CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVILDhFQUE4RTtRQUM5RSxFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1lBQ25FLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQztZQUNyQixNQUFNLGNBQWMsR0FBRyxrRUFBa0UsQ0FBQztZQUMxRixNQUFNLE1BQU0sR0FBRyxJQUFBLG1CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7UUFDNUIseURBQXlEO1FBQ3pELEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLEVBQUU7WUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBQSxtQkFBWSxHQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsa0ZBQWtGO1FBQ2xGLEVBQUUsQ0FBQyxzREFBc0QsRUFBRSxHQUFHLEVBQUU7WUFDOUQsTUFBTSxLQUFLLEdBQUcsSUFBQSxtQkFBWSxHQUFFLENBQUM7WUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBQSxtQkFBWSxHQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCx3RUFBd0U7UUFDeEUsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtZQUNwRCxNQUFNLElBQUksR0FBRyxJQUFBLG1CQUFZLEdBQUUsQ0FBQztZQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILHVFQUF1RTtRQUN2RSxFQUFFLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO1lBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUEsbUJBQVksR0FBRSxDQUFDO1lBQzVCLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDbEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnN0cnVtZW50YXRpb25FcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQge1xuICBiYXNlNjRDb252ZXJ0b3IsXG4gIGZsYXR0ZW5NYXAsXG4gIGdldEV2ZW50VGltZSxcbiAgZ2V0VHlwZSxcbiAgaXNCbGFuayxcbiAgaXNEZWZpbmVkLFxuICBpc0RlZmluZWRBbmROb3ROdWxsLFxuICBpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHksXG4gIGlzTm90RW1wdHksXG4gIGlzTm90TnVsbCxcbiAgaXNQcmltaXRpdmUsXG4gIGlzVmFsaWRVcmwsXG4gIHJlbW92ZU51bGxWYWx1ZXMsXG4gIHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyxcbiAgcmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyxcbiAgcmVtb3ZlVW5kZWZpbmVkVmFsdWVzLFxuICBzdHJpcFRyYWlsaW5nU2xhc2gsXG4gIGlzT2JqZWN0LFxuICBpc0VtcHR5LFxuICBpc0VtcHR5T2JqZWN0LFxuICBpc0RlZmluZWROb3ROdWxsTm90RW1wdHksXG4gIHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50LFxuICBnZXRIYXNoRnJvbUFycmF5LFxuICBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZSxcbiAgZmxhdHRlbkpzb24sXG4gIGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyxcbiAgZ2V0T2Zmc2V0SW5TZWMsXG4gIGZvcm1hdFRpbWVTdGFtcCxcbiAgaGFzaFRvU2hhMjU2LFxuICBnZW5lcmF0ZVVVSUQsXG59IGZyb20gJy4vbWlzYyc7XG5cbmRlc2NyaWJlKCdtaXNjJywgKCkgPT4ge1xuICBkZXNjcmliZSgnaXNEZWZpbmVkJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgZGVmaW5lZCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBkZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoNSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1udWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG5vbi1udWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoJ2hlbGxvJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKCcnKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbnVtYmVyIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG51bWJlciBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKDEwKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgYm9vbGVhbiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBib29sZWFuIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQodHJ1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gdW5kZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gYW4gdW5kZWZpbmVkIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQodW5kZWZpbmVkKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBudWxsIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQobnVsbCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKHt9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKFtdKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoTmFOKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZCgoKSA9PiB7fSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChTeW1ib2woKSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUbyB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgTWFwIG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgTWFwIG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkKG1hcCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgb2JqZWN0aXZlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgU2V0IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IFNldCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc2V0T2JqID0gbmV3IFNldCgpO1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZChzZXRPYmopKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIG9iamVjdGl2ZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IFdlYWtNYXAgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgV2Vha01hcCBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgZW1wdHlXZWFrTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgIGV4cGVjdChpc0RlZmluZWQoZW1wdHlXZWFrTWFwKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzTm90RW1wdHknLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgdHJ1ZSBmb3Igbm9uLWVtcHR5IGFycmF5c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgaW5wdXQgaXMgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KFsxLCAyLCAzXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIGVtcHR5IGFycmF5c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eShbXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIHRydWUgZm9yIG5vbi1lbXB0eSBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KHsga2V5OiAndmFsdWUnIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBlbXB0eSBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSh7fSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIHRydWUgZm9yIG5vbi1lbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KCdoZWxsbycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBlbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSgnJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3RFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBub24temVybyBudW1iZXJzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYSBub24temVybyBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KDQyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIHplcm9cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyB6ZXJvJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eSgwKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNOb3RFbXB0eShudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkodW5kZWZpbmVkKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIE5hTlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGlucHV0IGlzIE5hTicsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoTmFOKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdEVtcHR5IHJldHVybnMgZmFsc2UgZm9yIGZhbHNlIGJvb2xlYW5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBpbnB1dCBpcyBmYWxzZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzTm90RW1wdHkoZmFsc2UpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90RW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgdHJ1ZSBib29sZWFuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgaW5wdXQgaXMgYSB0cnVlIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc05vdEVtcHR5KHRydWUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc05vdE51bGwnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBub24tbnVsbCB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBub24tbnVsbCB2YWx1ZSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKCd0ZXN0JykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIHRydXRoeSB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSB0cnV0aHkgdmFsdWUgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCh0cnVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoJycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBudW1iZXIgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbnVtYmVyIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoMTIzKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwodHJ1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChudWxsKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwodW5kZWZpbmVkKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhbiBlbXB0eSBvYmplY3QgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKHt9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKFtdKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNOb3ROdWxsIHJldHVybnMgdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgZnVuY3Rpb24gaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbCgoKSA9PiB7fSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIE5hTiBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNOb3ROdWxsKE5hTikpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIHN5bWJvbCBpcyBwYXNzZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChTeW1ib2woKSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzTm90TnVsbCByZXR1cm5zIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc05vdE51bGwoKCkgPT4ge30pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChOYU4pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc05vdE51bGwgcmV0dXJucyB0cnVlIHdoZW4gYSBzeW1ib2wgaXMgcGFzc2VkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgc3ltYm9sIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHN5bWJvbCA9IFN5bWJvbCgpO1xuICAgICAgZXhwZWN0KGlzTm90TnVsbChzeW1ib2wpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNEZWZpbmVkQW5kTm90TnVsbCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoJ3Rlc3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIHN0cmluZyB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYSBzdHJpbmcgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCgndGVzdCcpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbnVtYmVyIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG51bWJlciB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKDEyMyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBib29sZWFuIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIGJvb2xlYW4gdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCh0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhbiBvYmplY3QgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKHsga2V5OiAndmFsdWUnIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGFycmF5IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBhcnJheSB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWRBbmROb3ROdWxsKFsxLCAyLCAzXSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgc3RyaW5nIHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhbiBlbXB0eSBzdHJpbmcgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCgnJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYW4gZW1wdHkgYXJyYXkgdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGFuIGVtcHR5IGFycmF5IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoW10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGFuIGVtcHR5IG9iamVjdCB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IHZhbHVlIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZEFuZE5vdE51bGwoe30pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB1bmRlZmluZWQgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbCh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbChudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBOYU4gaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkQW5kTm90TnVsbChOYU4pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KCdoZWxsbycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGEgbm9uLWVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9KSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhIG5vbi1lbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBwYXNzZWQgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KFsxLCAyLCAzXSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIGEgYm9vbGVhbiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGEgYm9vbGVhbiB2YWx1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkodHJ1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBhIG51bWJlciB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGEgbnVtYmVyIHZhbHVlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSg0MikpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KCcnKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoe30pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhc3NlZCBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0RlZmluZWRBbmROb3ROdWxsQW5kTm90RW1wdHkoW10pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFzc2VkIG51bGwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNEZWZpbmVkQW5kTm90TnVsbEFuZE5vdEVtcHR5KG51bGwpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2Ugd2hlbiBwYXNzZWQgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXNzZWQgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh1bmRlZmluZWQpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhIHN0cmluZyB3aXRoIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHBhc3NlZCBhIHN0cmluZyB3aXRoIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSgnICAgJykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggb25seSBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIG9ubHkgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzRGVmaW5lZEFuZE5vdE51bGxBbmROb3RFbXB0eSh7IHByb3AxOiBudWxsLCBwcm9wMjogdW5kZWZpbmVkIH0pKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNCbGFuaycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoJycpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgYW4gZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayhbXSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKHt9KSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuaygnaGVsbG8nKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgbm9uLWVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoWzEsIDIsIDNdKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG5vbi1lbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayh7IGtleTogJ3ZhbHVlJyB9KSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyB0cnVlIGZvciBhIG51bGwgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdmFsdWUgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKG51bGwpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgdHJ1ZSBmb3IgYW4gdW5kZWZpbmVkIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHZhbHVlIGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKHVuZGVmaW5lZCkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzQmxhbmsgcmV0dXJucyBmYWxzZSBmb3IgYSBib29sZWFuIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayh0cnVlKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoaXNCbGFuayhmYWxzZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIGEgbnVtYmVyIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIG51bWJlcicsICgpID0+IHtcbiAgICAgIGV4cGVjdChpc0JsYW5rKDEyMykpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGlzQmxhbmsoMCkpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGlzQmxhbmsoLTEpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNCbGFuayByZXR1cm5zIGZhbHNlIGZvciBhIHdoaXRlc3BhY2Ugc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBhIHdoaXRlc3BhY2Ugc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGlzQmxhbmsoJyAgICcpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdChpc0JsYW5rKCdcXHQnKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QoaXNCbGFuaygnXFxuJykpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0JsYW5rIHJldHVybnMgZmFsc2UgZm9yIE5hTiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBOYU4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaXNCbGFuayhOYU4pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZFZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCBpZiBpdCBpcyBub3QgYW4gb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIG5vdCBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IDEyMztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogdHJ1ZSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlVW5kZWZpbmVkVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIGlmIHNvbWUgdmFsdWVzIGFyZSBkZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgdmFsdWVzIGFyZSBkZWZpbmVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IDEsIGI6IHVuZGVmaW5lZCwgYzogdHJ1ZSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGM6IHRydWUgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgbnVsbCBpZiB0aGUgaW5wdXQgaXMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB1bmRlZmluZWQgaWYgdGhlIGlucHV0IGlzIHVuZGVmaW5lZFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiB1bmRlZmluZWQgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6IG51bGwgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogbnVsbCB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6ICcnIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiB7IGI6IDEsIGM6ICcnIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyBpZiBzb21lIG5lc3RlZCB2YWx1ZXMgYXJlIGZhbHNlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgZmFsc2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiBmYWxzZSB9LCBkOiAyIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogeyBiOiAxLCBjOiBmYWxzZSB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSB6ZXJvXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIHZhbHVlcyB3aGVuIHNvbWUgbmVzdGVkIHZhbHVlcyBhcmUgemVybycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IDEsIGM6IDAgfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogMCB9LCBkOiAyIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVVbmRlZmluZWRWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aXRob3V0IHVuZGVmaW5lZCB2YWx1ZXMgaWYgc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBOYU5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgdmFsdWVzIHdoZW4gc29tZSBuZXN0ZWQgdmFsdWVzIGFyZSBOYU4nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxLCBjOiBOYU4gfSwgZDogMiB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSwgYzogTmFOIH0sIGQ6IDIgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZU51bGxWYWx1ZXMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gZW1wdHkgb2JqZWN0IGFzIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7fTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggbm8gbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBpbnB1dCBoYXMgbm8gbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogWzEsIDIsIDNdIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogMSwgYjogJ2hlbGxvJywgYzogWzEsIDIsIDNdIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgbnVsbCBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBpbnB1dCBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBudWxsO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSBudWxsO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIHVuZGVmaW5lZCBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCB3aGVuIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgYXMgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBzdHJpbmcgd2hlbiBpbnB1dCBpcyBhIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhIG51bWJlciBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG51bWJlciB3aGVuIGlucHV0IGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAxMjM7XG4gICAgICBjb25zdCBleHBlY3RlZCA9IDEyMztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBhcnJheSBhcyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIGFycmF5IHdoZW4gaW5wdXQgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAyLCAzXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyAnMCc6IDEsICcxJzogMiwgJzInOiAzIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggb25seSBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIGlucHV0IGhhcyBvbmx5IG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IG51bGwsIGI6IG51bGwsIGM6IG51bGwgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gb2JqZWN0IHdpdGggbmVzdGVkIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbmVzdGVkIG51bGwgdmFsdWVzIGZyb20gdGhlIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBhOiB7IGI6IG51bGwgfSwgYzogeyBkOiB7IGU6IG51bGwgfSB9IH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYToge30sIGM6IHsgZDoge30gfSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHNhbWUgb2JqZWN0IHdoZW4gaW5wdXQgaGFzIG5lc3RlZCBub24tbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogeyBiOiAxIH0sIGM6IHsgZDogeyBlOiAnaGVsbG8nIH0gfSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYjogMSB9LCBjOiB7IGQ6IHsgZTogJ2hlbGxvJyB9IH0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZU51bGxWYWx1ZXMoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBtaXhlZCBuZXN0ZWQgbnVsbCBhbmQgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbmVzdGVkIG51bGwgdmFsdWVzIGFuZCBrZWVwIG5vbi1udWxsIHZhbHVlcyBpbiB0aGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IHsgYjogbnVsbCwgYzogMSB9LCBkOiB7IGU6IG51bGwsIGY6ICdoZWxsbycgfSB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IHsgYzogMSB9LCBkOiB7IGY6ICdoZWxsbycgfSB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlTnVsbFZhbHVlcyhpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS5ub3QudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlcyBhbmQgZmFsc3kgbm9uLW51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgbnVsbCB2YWx1ZXMgYW5kIGtlZXAgZmFsc3kgbm9uLW51bGwgdmFsdWVzIGluIHRoZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogbnVsbCwgYjogZmFsc2UsIGM6IDAsIGQ6ICcnIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYjogZmFsc2UsIGM6IDAsIGQ6ICcnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZW1vdmVOdWxsVmFsdWVzKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIG9iamVjdCB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiAndGVzdCcsIGM6IHRydWUgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiBudWxsLCBjOiAndGVzdCcsIGQ6IG51bGwgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBjOiAndGVzdCcgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsVmFsdWVzKG9iaikpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiBwYXNzZWQgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gcGFzc2VkIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aG91dCB1bmRlZmluZWQgYW5kIG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgb2JqZWN0IHdpdGhvdXQgdW5kZWZpbmVkIGFuZCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgYW5kIG51bGwgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiB1bmRlZmluZWQsIGM6ICd0ZXN0JywgZDogbnVsbCB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7IGE6IDEsIGM6ICd0ZXN0JyB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIHdoZW4gcGFzc2VkIGEgbm9uLW9iamVjdCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHdoZW4gcGFzc2VkIGEgbm9uLW9iamVjdCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gMTIzO1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXModmFsdWUpKS50b0VxdWFsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IHdpdGggbmVzdGVkIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlcyB3aGVuIHBhc3NlZCBhbiBvYmplY3Qgd2l0aCBuZXN0ZWQgcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG5vdCBudWxsIHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aXRoIG5lc3RlZCBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggbmVzdGVkIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6IHsgYzogJ3Rlc3QnLCBkOiB0cnVlIH0sIGU6ICd0ZXN0JyB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChvYmopO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgZGVmaW5lZCBhbmQgbm90IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBub3QgbnVsbCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IDEsIGI6ICd0ZXN0JywgYzogdHJ1ZSB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxWYWx1ZXMob2JqKSkudG9FcXVhbChvYmopO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2JqZWN0IHdpdGhvdXQgbnVsbCB2YWx1ZXMgd2hlbiBwYXNzZWQgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBjb250YWluaW5nIGRlZmluZWQgYW5kIG51bGwgdmFsdWVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9iamVjdCB3aXRob3V0IG51bGwgdmFsdWVzIHdoZW4gcGFzc2VkIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgY29udGFpbmluZyBkZWZpbmVkIGFuZCBudWxsIHZhbHVlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogbnVsbCwgYzogJ3Rlc3QnLCBkOiBudWxsIH07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHsgYTogMSwgYzogJ3Rlc3QnIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbFZhbHVlcyhvYmopKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcycsICgpID0+IHtcbiAgICAvLyBUT0RPOiBORUVEIFRPIEZJWCBUSElTIFRFU1RTXG4gICAgLy8gLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBvYmplY3Qgd2hlbiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkLCBub3QgbnVsbCwgYW5kIG5vdCBlbXB0eVxuICAgIC8vIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCB3aGVuIGFsbCB2YWx1ZXMgYXJlIGRlZmluZWQsIG5vdCBudWxsLCBhbmQgbm90IGVtcHR5JywgKCkgPT4ge1xuICAgIC8vICAgY29uc3Qgb2JqID0ge1xuICAgIC8vICAgICBwcm9wMTogJ3ZhbHVlMScsXG4gICAgLy8gICAgIHByb3AyOiAxMjMsXG4gICAgLy8gICAgIHByb3AzOiBbMSwgMiwgM10sXG4gICAgLy8gICAgIHByb3A0OiB7IG5lc3RlZFByb3A6ICduZXN0ZWRWYWx1ZScgfSxcbiAgICAvLyAgIH07XG4gICAgLy8gICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICAvLyB9KTtcblxuICAgIC8vIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IHdoZW4gYWxsIHZhbHVlcyBhcmUgZGVmaW5lZCBhbmQgbm90IG51bGxcbiAgICAvLyBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBhbGwgdmFsdWVzIGFyZSBkZWZpbmVkIGFuZCBub3QgbnVsbCcsICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IG9iaiA9IHtcbiAgICAvLyAgICAgcHJvcDE6ICd2YWx1ZTEnLFxuICAgIC8vICAgICBwcm9wMjogMTIzLFxuICAgIC8vICAgICBwcm9wMzogWzEsIDIsIDNdLFxuICAgIC8vICAgICBwcm9wNDogeyBuZXN0ZWRQcm9wOiAnbmVzdGVkVmFsdWUnIH0sXG4gICAgLy8gICB9O1xuICAgIC8vICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0VxdWFsKG9iaik7XG4gICAgLy8gfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkQW5kTnVsbEFuZEVtcHR5VmFsdWVzKG9iaikpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSBudWxsO1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHVuZGVmaW5lZDtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgb2JqZWN0IGhhcyBvbmx5IGVtcHR5IHZhbHVlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSBpbnB1dCBvYmplY3QgaGFzIG9ubHkgZW1wdHkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICBwcm9wMTogJycsXG4gICAgICAgIHByb3AyOiAnICAgICcsXG4gICAgICAgIHByb3AzOiBbXSxcbiAgICAgICAgcHJvcDQ6IHt9LFxuICAgICAgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWRBbmROdWxsQW5kRW1wdHlWYWx1ZXMob2JqKSkudG9FcXVhbCh7IHByb3AyOiAnICAgICcgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG9iamVjdCBhbmQgZG9lcyBub3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIG5ldyBvYmplY3QgYW5kIG5vdCBtb2RpZnkgdGhlIG9yaWdpbmFsIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgcHJvcDE6ICd2YWx1ZTEnLFxuICAgICAgICBwcm9wMjogbnVsbCxcbiAgICAgICAgcHJvcDM6ICcnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlbW92ZVVuZGVmaW5lZEFuZE51bGxBbmRFbXB0eVZhbHVlcyhvYmopO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IHByb3AxOiAndmFsdWUxJyB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLm5vdC50b0JlKG9iaik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmbGF0dGVuTWFwJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGlucHV0IGlmIGl0IGlzIG5vdCBhbiBhcnJheSBvciBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgaW5wdXQgd2hlbiBpdCBpcyBub3QgYW4gYXJyYXkgb3Igb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSA1O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5XG4gICAgLy8gT25seSAxIGxldmVsIG9mIGZsYXR0ZW5pbmcgaXMgcGVyZm9ybWVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCBbMiwgM10sIFs0LCBbNSwgNl1dXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgMywgNCwgWzUsIDZdXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBhcnJheSB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBhcnJheSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogWzEsIDJdLCBiOiBbMywgNF0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgMywgNF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBhcnJheSBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBhcnJheSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW107XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBjb2xsZWN0aW9uIGlmIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBjb2xsZWN0aW9uIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIG51bGwgdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbnVsbCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGFycmF5IHdpdGggbnVsbCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG51bGwgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFtudWxsXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbbnVsbF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gb2JqZWN0IHdpdGggbnVsbCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBudWxsIHZhbHVlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGE6IG51bGwgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbbnVsbF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB1bmRlZmluZWQgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHVuZGVmaW5lZCB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW3VuZGVmaW5lZF07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW3VuZGVmaW5lZF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29sbGVjdGlvbiB3aXRoIHVuZGVmaW5lZCB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB1bmRlZmluZWQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogdW5kZWZpbmVkIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW3VuZGVmaW5lZF0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBOYU4gdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIE5hTiB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW05hTl07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW05hTl0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBOYU4gdmFsdWUgaWYgdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIE5hTiB2YWx1ZVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29sbGVjdGlvbiB3aXRoIE5hTiB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBOYU4gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgYTogTmFOIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW05hTl0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZSBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBlbXB0eSBzdHJpbmcgdmFsdWVcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIGVtcHR5IHN0cmluZyB2YWx1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWycnXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbJyddKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIGlmIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgJ3R3bycsIHRydWUsIHsgbmFtZTogJ0pvaG4nIH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbk1hcChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFsxLCAndHdvJywgdHJ1ZSwgeyBuYW1lOiAnSm9obicgfV0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBjb2xsZWN0aW9uIHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyBpZiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGNvbGxlY3Rpb24gd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIHdoZW4gdGhlIGlucHV0IGlzIGFuIG9iamVjdCB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDI1LCBpc1N0dWRlbnQ6IHRydWUsIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZyddIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWydKb2huJywgMjUsIHRydWUsICdyZWFkaW5nJywgJ3BhaW50aW5nJ10pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0c1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIG5lc3RlZCBhcnJheXMgYW5kIG9iamVjdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCBbMiwgWzMsIDRdXSwgeyBuYW1lOiAnSm9obicsIGFnZTogMjUgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsIDIsIFszLCA0XSwgeyBuYW1lOiAnSm9obicsIGFnZTogMjUgfV0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGZsYXR0ZW5lZCBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgaWYgdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhcnJheSB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IFsxLCAndHdvJywgdHJ1ZSwgeyBuYW1lOiAnSm9obicgfV07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuTWFwKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoWzEsICd0d28nLCB0cnVlLCB7IG5hbWU6ICdKb2huJyB9XSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGNvbGxlY3Rpb24gd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzIGlmIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCB2YWx1ZXMgb2YgZGlmZmVyZW50IHR5cGVzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgY29sbGVjdGlvbiB3aXRoIHZhbHVlcyBvZiBkaWZmZXJlbnQgdHlwZXMgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIG9mIGRpZmZlcmVudCB0eXBlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMjUsIGlzU3R1ZGVudDogdHJ1ZSwgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJ10gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbJ0pvaG4nLCAyNSwgdHJ1ZSwgJ3JlYWRpbmcnLCAncGFpbnRpbmcnXSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZmxhdHRlbmVkIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyBpZiB0aGUgaW5wdXQgaXMgYW4gYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBmbGF0dGVuZWQgYXJyYXkgd2l0aCBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzIHdoZW4gdGhlIGlucHV0IGlzIGFuIGFycmF5IHdpdGggbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsIFsyLCBbMywgNF1dLCB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5NYXAoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbMSwgMiwgWzMsIDRdLCB7IG5hbWU6ICdKb2huJywgYWdlOiAyNSB9XSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRFdmVudFRpbWUnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIERhdGUgb2JqZWN0IHdoZW4gdGhlIG1lc3NhZ2UgaGFzIGEgdGltZXN0YW1wIHByb3BlcnR5XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBEYXRlIG9iamVjdCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBhIHRpbWVzdGFtcCBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHRpbWVzdGFtcDogJzIwMjItMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRFdmVudFRpbWUobWVzc2FnZSBhcyBhbnkpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZUluc3RhbmNlT2YoRGF0ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgRGF0ZSBvYmplY3Qgd2hlbiB0aGUgbWVzc2FnZSBoYXMgYW4gb3JpZ2luYWxUaW1lc3RhbXAgcHJvcGVydHlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIERhdGUgb2JqZWN0IHdoZW4gdGhlIG1lc3NhZ2UgaGFzIGFuIG9yaWdpbmFsVGltZXN0YW1wIHByb3BlcnR5JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgb3JpZ2luYWxUaW1lc3RhbXA6ICcyMDIyLTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0RXZlbnRUaW1lKG1lc3NhZ2UgYXMgYW55KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVJbnN0YW5jZU9mKERhdGUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gdGhyb3dzIGFuIEluc3RydW1lbnRhdGlvbkVycm9yIHdoZW4gdGhlIG1lc3NhZ2UgaGFzIG5laXRoZXIgYSB0aW1lc3RhbXAgbm9yIGFuIG9yaWdpbmFsVGltZXN0YW1wIHByb3BlcnR5XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBJbnN0cnVtZW50YXRpb25FcnJvciB3aGVuIHRoZSBtZXNzYWdlIGhhcyBuZWl0aGVyIGEgdGltZXN0YW1wIG5vciBhbiBvcmlnaW5hbFRpbWVzdGFtcCBwcm9wZXJ0eScsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7fTtcbiAgICAgIGV4cGVjdCgoKSA9PiBnZXRFdmVudFRpbWUobWVzc2FnZSBhcyBhbnkpKS50b1Rocm93KEluc3RydW1lbnRhdGlvbkVycm9yKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gaW52YWxpZCBEYXRlIG9iamVjdCB3aGVuIHRoZSBtZXNzYWdlIGhhcyBhbiBpbnZhbGlkIHRpbWVzdGFtcCBwcm9wZXJ0eVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGludmFsaWQgRGF0ZSBvYmplY3Qgd2hlbiB0aGUgbWVzc2FnZSBoYXMgYW4gaW52YWxpZCB0aW1lc3RhbXAgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICB0aW1lc3RhbXA6ICdpbnZhbGlkJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBldmVudFRpbWUgPSBnZXRFdmVudFRpbWUobWVzc2FnZSBhcyBhbnkpO1xuICAgICAgZXhwZWN0KGV2ZW50VGltZSkudG9CZUluc3RhbmNlT2YoRGF0ZSk7XG4gICAgICBleHBlY3QoZXZlbnRUaW1lLnRvU3RyaW5nKCkpLnRvQmUoJ0ludmFsaWQgRGF0ZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYmFzZTY0Q29udmVydG9yJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIGVtcHR5IHN0cmluZyBpbnB1dCBhbmQgcmV0dXJucyBhbiBlbXB0eSBiYXNlNjQgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYmFzZTY0IHN0cmluZyB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICcnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgc3RyaW5nIGlucHV0IHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyB0byBiYXNlNjQgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAn44GT44KT44Gr44Gh44GvJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJzQ0R1Q0NEtUNDRHcjQ0R2g0NEd2JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2U2NENvbnZlcnRvcihpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGEgc3RyaW5nIGlucHV0IHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBjb252ZXJ0cyBpdCB0byBiYXNlNjQgZm9ybWF0XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGEgc3RyaW5nIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIGJhc2U2NCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICchQCMkJV4mKigpJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ0lVQWpKQ1ZlSmlvb0tRPT0nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYmFzZTY0Q29udmVydG9yKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYSBzdHJpbmcgaW5wdXQgd2l0aCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYW5kIGNvbnZlcnRzIGl0IHRvIGJhc2U2NCBmb3JtYXRcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYSBzdHJpbmcgd2l0aCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gYmFzZTY0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyAgIEhlbGxvIFdvcmxkICAgJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJ0lDQWdTR1ZzYkc4Z1YyOXliR1FnSUNBPSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiYXNlNjRDb252ZXJ0b3IoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgaGFuZGxlcyBhIHN0cmluZyBpbnB1dCB3aXRoIGxpbmUgYnJlYWtzIGFuZCBjb252ZXJ0cyBpdCB0byBiYXNlNjQgZm9ybWF0XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGEgc3RyaW5nIHdpdGggbGluZSBicmVha3MgdG8gYmFzZTY0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ0hlbGxvXFxuV29ybGQnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnU0dWc2JHOEtWMjl5YkdRPSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBiYXNlNjRDb252ZXJ0b3IoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ZhbGlkVXJsJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgdmFsaWQgVVJMIG9iamVjdCByZXR1cm5zIHRoZSBzYW1lIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCgnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nKTtcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCk/LnRvSlNPTigpKS50b0JlKHVybC50b0pTT04oKSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGEgVVJMIHdpdGggcXVlcnkgcGFyYW1ldGVycyByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggcXVlcnkgcGFyYW1ldGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbT9wYXJhbTE9dmFsdWUxJnBhcmFtMj12YWx1ZTInO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIGhhc2ggcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIFVSTCB3aXRoIGEgaGFzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbSNzZWN0aW9uMSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIFVSTCB3aXRoIGEgcG9ydCByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSBwb3J0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tOjgwODAnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZCByZXR1cm5zIGEgVVJMIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly91c2VybmFtZTpwYXNzd29yZEBleGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhbiBlbXB0eSBzdHJpbmcgcmV0dXJucyBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVsbCB3aGVuIGdpdmVuIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICcnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSB0ZXN0IG9iamVjdGl2ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gJ2lzVmFsaWRVcmwnIHJldHVybnMgbnVsbCB3aGVuIGdpdmVuIGFuIGludmFsaWQgVVJMIHN0cmluZy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gZ2l2ZW4gYW4gaW52YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2ludmFsaWQtdXJsJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGFuIFVSTCB3aXRoIGEgZGlmZmVyZW50IHByb3RvY29sIHJldHVybnMgdmFsaWQgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gVVJMIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnZnRwOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGFuIGludmFsaWQgVVJMIHdpdGggYW4gaW52YWxpZCBwb3J0IHJldHVybnMgbnVsbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBnaXZlbiBhIFVSTCB3aXRoIGFuIGludmFsaWQgcG9ydCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3d3dy5leGFtcGxlLmNvbTphYmMnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZU51bGwoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBpbnZhbGlkIHVzZXJuYW1lIGFuZCBwYXNzd29yZCByZXR1cm5zIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIGdpdmVuIGEgVVJMIHdpdGggdXNlcm5hbWUgYW5kIHBhc3N3b3JkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vdXNlcm5hbWU6cGFzc3dvcmRAZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSBVUkwgd2l0aCBhIHN1YmRvbWFpbiByZXR1cm5zIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gZ2l2ZW4gYSBVUkwgd2l0aCBhbiBpbnZhbGlkIHN1YmRvbWFpbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL2ludmFsaWQuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBwYXRoIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBwYXRoJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tL3BhdGgnO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHdpdGggYSBzdWJkb21haW4gcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcgd2l0aCBhIHN1YmRvbWFpbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHVybCA9ICdodHRwczovL3N1YmRvbWFpbi5leGFtcGxlLmNvbSc7XG4gICAgICBleHBlY3QoaXNWYWxpZFVybCh1cmwpKS50b0JlSW5zdGFuY2VPZihVUkwpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBhIHZhbGlkIFVSTCBzdHJpbmcgcmV0dXJucyBhIFVSTCBvYmplY3RcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVSTCBvYmplY3Qgd2hlbiBnaXZlbiBhIHZhbGlkIFVSTCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSAnaHR0cHM6Ly93d3cuZXhhbXBsZS5jb20nO1xuICAgICAgZXhwZWN0KGlzVmFsaWRVcmwodXJsKSkudG9CZUluc3RhbmNlT2YoVVJMKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgYSB2YWxpZCBVUkwgc3RyaW5nIHJldHVybnMgYSBVUkwgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBVUkwgb2JqZWN0IHdoZW4gZ2l2ZW4gYSB2YWxpZCBVUkwgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXJsID0gJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tJztcbiAgICAgIGV4cGVjdChpc1ZhbGlkVXJsKHVybCkpLnRvQmVJbnN0YW5jZU9mKFVSTCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHJpcFRyYWlsaW5nU2xhc2gnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2FtZSBzdHJpbmcgaWYgaXQgZG9lcyBub3QgZW5kIHdpdGggJy8nXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHN0cmluZyB3aGVuIGl0IGRvZXMgbm90IGVuZCB3aXRoICcvJ1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIHRyYWlsaW5nICcvJyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBpdFxuICAgIGl0KFwic2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgJy8nIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIGl0XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIG9ubHkgb25lIHRyYWlsaW5nICcvJyBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBtdWx0aXBsZVxuICAgIGl0KFwic2hvdWxkIHJlbW92ZSBvbmx5IG9uZSB0cmFpbGluZyAnLycgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggbXVsdGlwbGVcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnZXhhbXBsZS8vJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlLycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGlucHV0IGlzIGFuIGVtcHR5IHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCcnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZW1wdHkgc3RyaW5nIGlmIGl0IGNvbnRhaW5zIG9ubHkgJy8nXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZyB3aGVuIGl0IGNvbnRhaW5zIG9ubHkgJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lIHN0cmluZyBpZiBpdCBkb2VzIG5vdCBlbmQgd2l0aCAnLydcbiAgICBpdChcInNob3VsZCByZXR1cm4gdGhlIHNhbWUgc3RyaW5nIHdoZW4gaXQgZG9lcyBub3QgZW5kIHdpdGggJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gc3RyaXBUcmFpbGluZ1NsYXNoKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSBhIHN0cmluZyBpZiBpdCBleGlzdHNcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2ggd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlLyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSBhIHN0cmluZyBpZiBpdCBleGlzdHNcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0aGUgdHJhaWxpbmcgc2xhc2ggd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdleGFtcGxlLyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBzdHJpcFRyYWlsaW5nU2xhc2goaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZXhhbXBsZScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmVtb3ZlcyB0cmFpbGluZyBzbGFzaGVzIGZyb20gYSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSB0cmFpbGluZyBzbGFzaGVzIHdoZW4gdGhleSBleGlzdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGV4aXN0c1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHRoZSB0cmFpbGluZyBzbGFzaCB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZW1vdmVzIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tIGEgc3RyaW5nIGlmIGl0IGVuZHMgd2l0aCAnLydcbiAgICBpdChcInNob3VsZCByZW1vdmUgdGhlIHRyYWlsaW5nIHNsYXNoIHdoZW4gdGhlIHN0cmluZyBlbmRzIHdpdGggJy8nXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2V4YW1wbGUvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmlwVHJhaWxpbmdTbGFzaChpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdleGFtcGxlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc1ByaW1pdGl2ZScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgYSBwcmltaXRpdmUgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSgnaGVsbG8nKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgYSBwcmltaXRpdmUgbnVtYmVyXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSgxMjMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHByaW1pdGl2ZSBib29sZWFuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIHByaW1pdGl2ZSBib29sZWFuJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc1ByaW1pdGl2ZSByZXR1cm5zIHRydWUgZm9yIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGFyZ3VtZW50IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShudWxsKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzUHJpbWl0aXZlIHJldHVybnMgdHJ1ZSBmb3IgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhcmd1bWVudCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYW4gaW5zdGFuY2Ugb2YgYSBub24tcHJpbWl0aXZlIHdyYXBwZXIgY2xhc3MgKERhdGUpXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgYXJndW1lbnQgaXMgYW4gaW5zdGFuY2Ugb2YgYSBub24tcHJpbWl0aXZlIHdyYXBwZXIgY2xhc3MgKERhdGUpJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUobmV3IERhdGUoKSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYW4gaW5zdGFuY2Ugb2YgYSBjdXN0b20gY2xhc3NcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiBhIGN1c3RvbSBjbGFzcycsICgpID0+IHtcbiAgICAgIGNsYXNzIEN1c3RvbUNsYXNzIHt9XG4gICAgICBjb25zdCBhcmcgPSBuZXcgQ3VzdG9tQ2xhc3MoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzUHJpbWl0aXZlKGFyZyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyBmYWxzZSBmb3IgYSBmdW5jdGlvbiB3aXRoIHByb3BlcnRpZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIGZ1bmN0aW9uIHdpdGggcHJvcGVydGllcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGZ1bmMgPSAoKSA9PiB7fTtcbiAgICAgIGZ1bmMucHJvcGVydHkgPSAndmFsdWUnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNQcmltaXRpdmUoZnVuYyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNQcmltaXRpdmUgcmV0dXJucyB0cnVlIGZvciBhIHN5bWJvbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYXJndW1lbnQgaXMgYSBzeW1ib2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc1ByaW1pdGl2ZShTeW1ib2woJ3Rlc3QnKSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VHlwZScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBzdHJpbmcgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBzdHJpbmcgd2hlbiB0aGUgaW5wdXQgaXMgYSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICdoZWxsbyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3N0cmluZycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgdGhlIGNvcnJlY3QgdHlwZSBmb3IgbnVtYmVyIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbnVtYmVyIHdoZW4gdGhlIGlucHV0IGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSA0MjtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnbnVtYmVyJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBib29sZWFuIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYm9vbGVhbiB3aGVuIHRoZSBpbnB1dCBpcyBhIGJvb2xlYW4gdmFsdWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0VHlwZSh0cnVlKSkudG9CZSgnYm9vbGVhbicpO1xuICAgICAgZXhwZWN0KGdldFR5cGUoZmFsc2UpKS50b0JlKCdib29sZWFuJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAnTlVMTCcgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbFxuICAgIGl0KFwic2hvdWxkIHJldHVybiAnTlVMTCcgd2hlbiB0aGUgaW5wdXQgaXMgbnVsbFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ05VTEwnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdvYmplY3QnIHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdvYmplY3QnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGZ1bmN0aW9uIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYSBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gKCkgPT4ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyB0aGUgY29ycmVjdCB0eXBlIGZvciBiaWdpbnQgaW5wdXRcbiAgICBpdChcInNob3VsZCByZXR1cm4gJ2JpZ2ludCcgd2hlbiB0aGUgaW5wdXQgaXMgYSBiaWdpbnRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBCaWdJbnQoMTApO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdiaWdpbnQnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdzeW1ib2wnIHdoZW4gdGhlIGlucHV0IGlzIGEgc3ltYm9sXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuICdzeW1ib2wnIHdoZW4gdGhlIGlucHV0IGlzIGEgc3ltYm9sXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gU3ltYm9sKCd0ZXN0Jyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3N5bWJvbCcpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ3VuZGVmaW5lZCcgd2hlbiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuICdOVUxMJyB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWRcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ05VTEwnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zIHRoZSBjb3JyZWN0IHR5cGUgZm9yIGFycm93IGZ1bmN0aW9uIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXJyb3cgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICgpID0+IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZXRUeXBlIHJldHVybnMgJ29iamVjdCcgd2hlbiB0aGUgaW5wdXQgaXMgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllc1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBpcyBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHlwZShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKCdvYmplY3QnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSBvYmplY3QgdGhlIGNvcnJlY3QgdHlwZSBmb3IgY2xhc3MgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBvYmplY3Qgd2hlbiB0aGUgaW5wdXQgaXMgYSBjbGFzcycsICgpID0+IHtcbiAgICAgIGNsYXNzIE15Q2xhc3Mge31cbiAgICAgIGNvbnN0IGlucHV0ID0gbmV3IE15Q2xhc3MoKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnb2JqZWN0Jyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGdldFR5cGUgcmV0dXJucyAnZnVuY3Rpb24nIHdoZW4gdGhlIGlucHV0IGlzIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZnVuY3Rpb24gd2hlbiB0aGUgaW5wdXQgaXMgYSBnZW5lcmF0b3IgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IGZ1bmN0aW9uKiAoKSB7fTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFR5cGUoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2V0VHlwZSByZXR1cm5zICdmdW5jdGlvbicgd2hlbiB0aGUgaW5wdXQgaXMgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmdW5jdGlvbiB3aGVuIHRoZSBpbnB1dCBpcyBhbiBhc3luYyBmdW5jdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gYXN5bmMgKCkgPT4ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRUeXBlKGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc09iamVjdCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgZm9yIGFuIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHt9O1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBmb3IgYSBmdW5jdGlvblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB2YWx1ZSBpcyBhIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAoKSA9PiB7fTtcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBudWxsXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB2YWx1ZSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBudWxsO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciB1bmRlZmluZWRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhbiBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYW4gYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFtdO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9ICd0ZXN0JztcbiAgICAgIGV4cGVjdChpc09iamVjdCh2YWx1ZSkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSBmb3IgYSBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHZhbHVlIGlzIGEgbnVtYmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAxMjM7XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGEgYm9vbGVhblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBib29sZWFuJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0cnVlO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIGZvciBhIHN5bWJvbFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgYSBzeW1ib2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFN5bWJvbCgpO1xuICAgICAgZXhwZWN0KGlzT2JqZWN0KHZhbHVlKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gdGhlIHZhbHVlIGlzIE5hTlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdmFsdWUgaXMgTmFOJywgKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBOYU47XG4gICAgICBleHBlY3QoaXNPYmplY3QodmFsdWUpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRW1wdHknLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGlucHV0IGlzIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyB0cnVlIGZvciBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBpbnB1dCBpcyBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gW107XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBpbnB1dCBpcyBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGEgbm9uLWVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJ2hlbGxvJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHkgcmV0dXJucyBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGlucHV0IGlzIGEgbm9uLWVtcHR5IGFycmF5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBbMSwgMiwgM107XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgZmFsc2UgZm9yIGEgbm9uLWVtcHR5IG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSB7IGtleTogJ3ZhbHVlJyB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eSByZXR1cm5zIHRydWUgZm9yIG51bGwgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gbnVsbDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRW1wdHkoaW5wdXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSB0ZXN0IG9iamVjdGl2ZSBpcyB0byB2ZXJpZnkgdGhhdCB0aGUgZnVuY3Rpb24gJ2lzRW1wdHknIHJldHVybnMgdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyB1bmRlZmluZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNFbXB0eShpbnB1dCk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5IHJldHVybnMgZmFsc2UgZm9yIE5hTiBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gaW5wdXQgaXMgTmFOJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBOYU47XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdCB0aGF0IHRoZSBmdW5jdGlvbiAnaXNFbXB0eScgcmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgd2hpdGVzcGFjZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gaW5wdXQgaXMgYSB3aGl0ZXNwYWNlIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gJyAgICc7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0VtcHR5KGlucHV0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdpc0VtcHR5T2JqZWN0JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IG9iamVjdCB7fVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBvYmplY3Qge2E6ICcxJ31cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBub24tZW1wdHkgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAnMScgfTtcbiAgICAgIGV4cGVjdChpc0VtcHR5T2JqZWN0KG9iaikpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBpc0VtcHR5T2JqZWN0IHJldHVybnMgdHJ1ZSBmb3IgYW4gZW1wdHkgYXJyYXkgW11cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3QoYXJyKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBhcnJheSBbMSwgMiwgM11cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgYSBub24tZW1wdHkgYXJyYXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnIgPSBbMSwgMiwgM107XG4gICAgICBleHBlY3QoaXNFbXB0eU9iamVjdChhcnIpKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIHRydWUgZm9yIGFuIGVtcHR5IHN0cmluZyAnJ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgZm9yIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9ICcnO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaXNFbXB0eU9iamVjdCByZXR1cm5zIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmcgJ2hlbGxvJ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhIG5vbi1lbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSAnaGVsbG8nO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGlzRW1wdHlPYmplY3QgcmV0dXJucyB0cnVlIGZvciBudW1iZXJcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBudW1iZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSAyO1xuICAgICAgZXhwZWN0KGlzRW1wdHlPYmplY3Qob2JqKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lzRGVmaW5lZE5vdE51bGxOb3RFbXB0eScsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1lbXB0eSBzdHJpbmcgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoJ3Rlc3QnKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIG5vbi1lbXB0eSBvYmplY3QgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IG9iamVjdCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoeyBrZXk6ICd2YWx1ZScgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gYSBub24tZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgbm9uLWVtcHR5IGFycmF5IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eShbMSwgMiwgM10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIGEgbm9uLXplcm8gbnVtYmVyIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhIG5vbi16ZXJvIG51bWJlciBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoMTIzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBhIGJvb2xlYW4gdmFsdWUgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIGEgYm9vbGVhbiB2YWx1ZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkodHJ1ZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoJycpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBmYWxzZSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gZmFsc2UgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KGZhbHNlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiAwIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiAwIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSgwKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gTmFOIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eShOYU4pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdW5kZWZpbmVkIGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gbnVsbCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnRcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIG51bGwgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaXNEZWZpbmVkTm90TnVsbE5vdEVtcHR5KG51bGwpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gZW1wdHkgYXJyYXkgaXMgcGFzc2VkIGFzIGFuIGFyZ3VtZW50XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBhbiBlbXB0eSBhcnJheSBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBpc0RlZmluZWROb3ROdWxsTm90RW1wdHkoW10pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGZhbHNlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gYW4gZW1wdHkgb2JqZWN0IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGlzRGVmaW5lZE5vdE51bGxOb3RFbXB0eSh7fSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgc2FtZSBvYmplY3Qgd2hlbiBpdCBkb2VzIG5vdCBjb250YWluIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4sIG9yIGludGVnZXIgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2JqID0geyBhOiAxLCBiOiAndGVzdCcsIGM6IHsgZDogJ25lc3RlZCcgfSB9O1xuICAgICAgZXhwZWN0KHJlbW92ZVVuZGVmaW5lZE51bGxFbXB0eUV4Y2xCb29sSW50KG9iaikpLnRvRXF1YWwob2JqKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJlbW92ZXMgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXMgZnJvbSB0aGUgb2JqZWN0IGFuZCByZXR1cm5zIHRoZSBjbGVhbmVkIG9iamVjdFxuICAgIGl0KCdzaG91bGQgcmVtb3ZlIHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4sIG9yIGludGVnZXIgdmFsdWVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBjbGVhbmVkIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHsgYTogMSwgYjogdW5kZWZpbmVkLCBjOiBudWxsLCBkOiAnJywgZToge30sIGY6IHRydWUsIGc6IDAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkID0geyBhOiAxLCBmOiB0cnVlLCBnOiAwIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQob2JqKSkudG9FcXVhbChleHBlY3RlZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZCBpZiB0aGUgaW5wdXQgaXMgdW5kZWZpbmVkXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIHdoZW4gdGhlIGlucHV0IGlzIHVuZGVmaW5lZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCh1bmRlZmluZWQpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIGlucHV0IGlzIG51bGxcbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGlucHV0IGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQobnVsbCkpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaW5wdXQgaXMgYW4gZW1wdHkgb2JqZWN0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IHdoZW4gdGhlIGlucHV0IGlzIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZW1vdmVVbmRlZmluZWROdWxsRW1wdHlFeGNsQm9vbEludCh7fSkpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGlucHV0IGNvbnRhaW5zIG9ubHkgdW5kZWZpbmVkLCBudWxsLCBlbXB0eSwgYm9vbGVhbiwgb3IgaW50ZWdlciB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIHZhbGlkIG9iamVjdCB3aGVuIHRoZSBpbnB1dCBjb250YWlucyBvbmx5IHVuZGVmaW5lZCwgbnVsbCwgZW1wdHksIGJvb2xlYW4gb3IgaW50ZWdlciB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBvYmogPSB7IGE6IHVuZGVmaW5lZCwgYjogbnVsbCwgYzogJycsIGQ6IHt9LCBlOiB0cnVlLCBmOiAwIH07XG4gICAgICBleHBlY3QocmVtb3ZlVW5kZWZpbmVkTnVsbEVtcHR5RXhjbEJvb2xJbnQob2JqKSkudG9FcXVhbCh7IGU6IHRydWUsIGY6IDAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRIYXNoRnJvbUFycmF5JywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IHdoZW4gZ2l2ZW4gYW4gZW1wdHkgYXJyYXlcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgaGFzaE1hcCB3aXRoIGNvcnJlY3Qga2V5LXZhbHVlIHBhaXJzIHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIGNvcnJlY3Qga2V5LXZhbHVlIHBhaXJzIHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnQScsIHRvOiAnMScgfSxcbiAgICAgICAgeyBmcm9tOiAnQicsIHRvOiAnMicgfSxcbiAgICAgICAgeyBmcm9tOiAnQycsIHRvOiAnMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgYTogJzEnLCBiOiAnMicsIGM6ICczJyB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gZW1wdHkgb2JqZWN0IHdoZW4gZ2l2ZW4gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGVtcHR5ICdmcm9tJyBwcm9wZXJ0eVxuICAgIGl0KFwic2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIHByb3BlcnR5XCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICcxJyB9LFxuICAgICAgICB7IGZyb206ICcnLCB0bzogJzInIH0sXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAnMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNoTWFwIHdpdGggb25seSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIG9ubHkgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSAnZnJvbScgcHJvcGVydHkgd2hlbiBnaXZlbiBhbiBhcnJheSB3aXRoIGR1cGxpY2F0ZSAnZnJvbScgcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzEnIH0sXG4gICAgICAgIHsgZnJvbTogJ0InLCB0bzogJzInIH0sXG4gICAgICAgIHsgZnJvbTogJ0EnLCB0bzogJzMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7IGE6ICczJywgYjogJzInIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGhhc2hNYXAgd2l0aCBvbmx5IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgYSAnZnJvbScgcHJvcGVydHkgd2hlbiBnaXZlbiBhbiBhcnJheSB3aXRoIGR1cGxpY2F0ZSAnZnJvbScgcHJvcGVydGllcyBhbmQgZGlmZmVyZW50ICd0bycgdmFsdWVzXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIGEgaGFzaE1hcCB3aXRoIG9ubHkgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhICdmcm9tJyBwcm9wZXJ0eSB3aGVuIGdpdmVuIGFuIGFycmF5IHdpdGggZHVwbGljYXRlICdmcm9tJyBwcm9wZXJ0aWVzIGFuZCBkaWZmZXJlbnQgJ3RvJyB2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdBJywgdG86ICcxJyB9LFxuICAgICAgICB7IGZyb206ICdCJywgdG86ICcyJyB9LFxuICAgICAgICB7IGZyb206ICdBJywgdG86ICczJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXkoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeyBhOiAnMycsIGI6ICcyJyB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNoTWFwIHdpdGggY29ycmVjdCBrZXktdmFsdWUgcGFpcnMgd2hlbiBnaXZlbiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbm9uLXN0cmluZyAnZnJvbScgYW5kICd0bycgcHJvcGVydGllc1xuICAgIGl0KFwic2hvdWxkIHJldHVybiBhIGhhc2hNYXAgd2l0aCBjb3JyZWN0IGtleS12YWx1ZSBwYWlycyB3aGVuIGdpdmVuIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBub24tc3RyaW5nICdmcm9tJyBhbmQgJ3RvJyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAxLCB0bzogdHJ1ZSB9LFxuICAgICAgICB7IGZyb206IG51bGwsIHRvOiB1bmRlZmluZWQgfSxcbiAgICAgICAgeyBmcm9tOiBbMSwgMiwgM10sIHRvOiB7IGE6ICdBJywgYjogJ0InIH0gfSxcbiAgICAgIF07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgJzEnOiB0cnVlLCBudWxsOiB1bmRlZmluZWQsICcxLDIsMyc6IHsgYTogJ0EnLCBiOiAnQicgfSB9KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvbnZlcnRzIHRoZSAnZnJvbScgcHJvcGVydHkgdG8gbG93ZXJjYXNlIGluIHRoZSBoYXNoTWFwIHdoZW4gdGhlIGlzTG93ZXJDYXNlIHBhcmFtZXRlciBpcyB0cnVlXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IFwiZnJvbVwiIHByb3BlcnR5IHRvIGxvd2VyY2FzZSBpbiBoYXNoTWFwIHdoZW4gaXNMb3dlckNhc2UgaXMgdHJ1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtcbiAgICAgICAgeyBmcm9tOiAnVkFMVUUxJywgdG86ICdWYWx1ZTEnIH0sXG4gICAgICAgIHsgZnJvbTogJ1ZBTFVFMicsIHRvOiAnVmFsdWUyJyB9LFxuICAgICAgICB7IGZyb206ICdWQUxVRTMnLCB0bzogJ1ZhbHVlMycgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBleHBlY3RlZCA9IHtcbiAgICAgICAgdmFsdWUxOiAnVmFsdWUxJyxcbiAgICAgICAgdmFsdWUyOiAnVmFsdWUyJyxcbiAgICAgICAgdmFsdWUzOiAnVmFsdWUzJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5KGFycmF5cywgJ2Zyb20nLCAndG8nLCB0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBvbmx5IG9uZSBvYmplY3RcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggb25seSBvbmUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW3sgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9XTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHsgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJ10pIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICdmcm9tJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGdlbmVyYXRlIGEgaGFzaE1hcCBmcm9tIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB1bmlxdWUgJ2Zyb20nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AzJywgdG86ICd2YWwzJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJ10pLFxuICAgICAgICBwcm9wMjogbmV3IFNldChbJ3ZhbDInXSksXG4gICAgICAgIHByb3AzOiBuZXcgU2V0KFsndmFsMyddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICd0bycga2V5c1xuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggdW5pcXVlICd0bycga2V5c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMicsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDMnLCB0bzogJ3ZhbDMnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgICAgcHJvcDM6IG5ldyBTZXQoWyd2YWwzJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIGFuIGVtcHR5IGhhc2hNYXAgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheVxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGhhc2hNYXAgd2hlbiBnaXZlbiBhbiBlbXB0eSBhcnJheScsICgpID0+IHtcbiAgICAgIGNvbnN0IGFycmF5cyA9IFtdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge307XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGhhbmRsZXMgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGVtcHR5ICdmcm9tJyBrZXlzXG4gICAgaXQoXCJzaG91bGQgY29ycmVjdGx5IGhhbmRsZSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggZW1wdHkgJ2Zyb20nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICcnLCB0bzogJ3ZhbDEnIH0sXG4gICAgICAgIHsgZnJvbTogJycsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAnJywgdG86ICd2YWwzJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHt9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0SGFzaEZyb21BcnJheVdpdGhEdXBsaWNhdGUoYXJyYXlzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBoYW5kbGVzIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBlbXB0eSAndG8nIGtleXNcbiAgICBpdChcInNob3VsZCByZXR1cm4gYW4gZW1wdHkgaGFzaE1hcCB3aGVuIHRoZSAndG8nIGtleSBpcyBlbXB0eSBpbiBhbGwgb2JqZWN0c1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICcnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICcnIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AzJywgdG86ICcnIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0geyBwcm9wMTogbmV3IFNldChbJyddKSwgcHJvcDI6IG5ldyBTZXQoWycnXSksIHByb3AzOiBuZXcgU2V0KFsnJ10pIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gY29ycmVjdGx5IGdlbmVyYXRlcyBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5cyB3aGVuIGlzTG93ZXJDYXNlIGlzIHNldCB0byBmYWxzZVxuICAgIGl0KFwic2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCAnZnJvbScgYW5kICd0bycga2V5cyB3aGVuIGlzTG93ZXJDYXNlIGlzIHNldCB0byBmYWxzZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cywgJ2Zyb20nLCAndG8nLCBmYWxzZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGN1c3RvbSBmcm9tS2V5IGFuZCB0b0tleSB2YWx1ZXNcbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBnZW5lcmF0ZSBhIGhhc2hNYXAgZnJvbSBhIHZhbGlkIGFycmF5IG9mIG9iamVjdHMgd2l0aCBjdXN0b20gZnJvbUtleSBhbmQgdG9LZXkgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICd2YWwyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJywgJ3ZhbDInXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMsICdmcm9tJywgJ3RvJyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkSGFzaE1hcCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiBjb3JyZWN0bHkgZ2VuZXJhdGVzIGEgaGFzaE1hcCBmcm9tIGEgdmFsaWQgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICdmcm9tJyBhbmQgJ3RvJyBrZXlzIHdoZW4gaXNMb3dlckNhc2UgaXMgc2V0IHRvIHRydWVcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgZ2VuZXJhdGUgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXMgd2hlbiBpc0xvd2VyQ2FzZSBpcyBzZXQgdG8gdHJ1ZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhcnJheXMgPSBbXG4gICAgICAgIHsgZnJvbTogJ3Byb3AxJywgdG86ICd2YWwxJyB9LFxuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMicgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDInLCB0bzogJ3ZhbDInIH0sXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRIYXNoTWFwID0ge1xuICAgICAgICBwcm9wMTogbmV3IFNldChbJ3ZhbDEnLCAndmFsMiddKSxcbiAgICAgICAgcHJvcDI6IG5ldyBTZXQoWyd2YWwyJ10pLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhhc2hGcm9tQXJyYXlXaXRoRHVwbGljYXRlKGFycmF5cywgJ2Zyb20nLCAndG8nLCB0cnVlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRIYXNoTWFwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIGNvcnJlY3RseSBnZW5lcmF0ZXMgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXNcbiAgICBpdChcInNob3VsZCBjb3JyZWN0bHkgZ2VuZXJhdGUgYSBoYXNoTWFwIGZyb20gYSB2YWxpZCBhcnJheSBvZiBvYmplY3RzIHdpdGggJ2Zyb20nIGFuZCAndG8nIGtleXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXJyYXlzID0gW1xuICAgICAgICB7IGZyb206ICdwcm9wMScsIHRvOiAndmFsMScgfSxcbiAgICAgICAgeyBmcm9tOiAncHJvcDEnLCB0bzogJ3ZhbDInIH0sXG4gICAgICAgIHsgZnJvbTogJ3Byb3AyJywgdG86ICd2YWwyJyB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaE1hcCA9IHtcbiAgICAgICAgcHJvcDE6IG5ldyBTZXQoWyd2YWwxJywgJ3ZhbDInXSksXG4gICAgICAgIHByb3AyOiBuZXcgU2V0KFsndmFsMiddKSxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRIYXNoRnJvbUFycmF5V2l0aER1cGxpY2F0ZShhcnJheXMpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZEhhc2hNYXApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBwcm9wZXJ0aWVzIGlmIGl0IGV4aXN0cy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIHByb3BlcnRpZXMgd2hlbiBpdCBleGlzdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAga2V5OiAndmFsdWUnLFxuICAgICAgICB9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAna2V5JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbHVlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUga2V5IGZyb20gdHJhaXRzIGlmIGl0IGV4aXN0cy5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGtleSBmcm9tIHRyYWl0cyB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHtcbiAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9ICdrZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgndmFsdWUnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBjb250ZXh0LnRyYWl0cyBpZiBpdCBleGlzdHMuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBrZXkgZnJvbSBjb250ZXh0LnRyYWl0cyB3aGVuIGl0IGV4aXN0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7XG4gICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAna2V5JztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFZhbHVlRnJvbVByb3BlcnRpZXNPclRyYWl0cyh7IG1lc3NhZ2UsIGtleSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoJ3ZhbHVlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgaWYgdGhlIG1lc3NhZ2UgaXMgbnVsbC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIG1lc3NhZ2UgaXMgbnVsbCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBudWxsO1xuICAgICAgY29uc3Qga2V5ID0gJ2tleSc7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIGlmIHRoZSBrZXkgaXMgbnVsbC5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGtleSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHtcbiAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIHRyYWl0czoge30sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleSA9IG51bGw7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRWYWx1ZUZyb21Qcm9wZXJ0aWVzT3JUcmFpdHMoeyBtZXNzYWdlLCBrZXkgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyBudWxsIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QgaW4gYW55IG9mIHRoZSBrZXlTZXRzLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUga2V5IGRvZXMgbm90IGV4aXN0IGluIGFueSBvZiB0aGUga2V5U2V0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgICAgIHByb3BlcnRpZXM6IHt9LFxuICAgICAgICB0cmFpdHM6IHt9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgdHJhaXRzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXkgPSAnbm9uZXhpc3RlbnRLZXknO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VmFsdWVGcm9tUHJvcGVydGllc09yVHJhaXRzKHsgbWVzc2FnZSwga2V5IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZsYXR0ZW5Kc29uJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgc2ltcGxlIEpTT04gb2JqZWN0IHdpdGggbm8gbmVzdGVkIG9iamVjdHMgb3IgYXJyYXlzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBzaW1wbGUgSlNPTiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGZsYXR0ZW5Kc29uIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgc3RyZWV0OiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICAgY291bnRyeTogJ1VTQScsXG4gICAgICAgIH0sXG4gICAgICAgIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZyddLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgICdhZGRyZXNzLnN0cmVldCc6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICdhZGRyZXNzLmNpdHknOiAnTmV3IFlvcmsnLFxuICAgICAgICAnYWRkcmVzcy5jb3VudHJ5JzogJ1VTQScsXG4gICAgICAgICdob2JiaWVzWzBdJzogJ3JlYWRpbmcnLFxuICAgICAgICAnaG9iYmllc1sxXSc6ICdwYWludGluZycsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiBudWxsLCBhZ2U6IHVuZGVmaW5lZCwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6IG51bGwsIGFnZTogdW5kZWZpbmVkLCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGVtcHR5IGFycmF5cyBhbmQgb2JqZWN0cy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBlbXB0eSBhcnJheXMgYW5kIG9iamVjdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyBuYW1lOiBbXSwgYWdlOiB7fSwgY2l0eTogJ05ldyBZb3JrJyB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7IG5hbWU6IFtdLCBhZ2U6IHt9LCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gLy8gTmVlZCB0byBmaXggdGhpcyB0ZXN0XG4gICAgLy8gLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBoYW5kbGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gYSBKU09OIG9iamVjdCBjb3JyZWN0bHkuXG4gICAgLy8gaXQoJ3Nob3VsZCBoYW5kbGUgY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiBhIEpTT04gb2JqZWN0IGNvcnJlY3RseScsICgpID0+IHtcbiAgICAvLyAgIGNvbnN0IGRhdGEgPSB7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9O1xuICAgIC8vICAgZGF0YVsnc2VsZiddID0gZGF0YTtcbiAgICAvLyAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIHNlbGY6ICdbQ2lyY3VsYXJdJyB9O1xuICAgIC8vICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgLy8gICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICAvLyB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBrZXlzIGNvbnRhaW5pbmcgc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyBzcGVjaWFsIGNoYXJhY3RlcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAnbmFtZS5maXJzdCc6ICdKb2huJywgJ25hbWUubGFzdCc6ICdEb2UnLCAnYWdlQCc6IDMwIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgJ25hbWUuZmlyc3QnOiAnSm9obicsICduYW1lLmxhc3QnOiAnRG9lJywgJ2FnZUAnOiAzMCB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3QgdGhhdCB0aGUgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tc3RyaW5nIGtleXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggbm9uLXN0cmluZyBrZXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHsgMTogJ29uZScsIDI6ICd0d28nLCAzOiAndGhyZWUnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgJzEnOiAnb25lJywgJzInOiAndHdvJywgJzMnOiAndGhyZWUnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGtleXMgY29udGFpbmluZyB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBrZXlzIGNvbnRhaW5pbmcgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXInLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0geyAnbmFtZS5maXJzdCc6ICdKb2huJywgJ25hbWUubGFzdCc6ICdEb2UnLCBhZ2U6IDMwLCBjaXR5OiAnTmV3IFlvcmsnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgJ25hbWUuZmlyc3QnOiAnSm9obicsXG4gICAgICAgICduYW1lLmxhc3QnOiAnRG9lJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGtleXMgdGhhdCBhcmUgcmVzZXJ2ZWQgd29yZHMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggcmVzZXJ2ZWQgd29yZCBrZXlzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHsgY2xhc3M6ICdNYXRoJywgZnVuY3Rpb246ICdhZGQnLCByZXR1cm46ICdyZXN1bHQnIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHsgY2xhc3M6ICdNYXRoJywgZnVuY3Rpb246ICdhZGQnLCByZXR1cm46ICdyZXN1bHQnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSAnZmxhdHRlbkpzb24nIGZ1bmN0aW9uIGNvcnJlY3RseSBmbGF0dGVucyBhIEpTT04gb2JqZWN0IHdpdGggZGVlcGx5IG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggZGVlcGx5IG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgICBzdGF0ZTogJ05ZJyxcbiAgICAgICAgICB6aXA6ICcxMDAwMScsXG4gICAgICAgIH0sXG4gICAgICAgIGhvYmJpZXM6IFsncmVhZGluZycsICdwYWludGluZycsICdjb29raW5nJ10sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnSmFuZScsXG4gICAgICAgICAgICBhZ2U6IDI4LFxuICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICBzdHJlZXQ6ICc0NTYgRWxtIFN0JyxcbiAgICAgICAgICAgICAgY2l0eTogJ0xvcyBBbmdlbGVzJyxcbiAgICAgICAgICAgICAgc3RhdGU6ICdDQScsXG4gICAgICAgICAgICAgIHppcDogJzkwMDAxJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob2JiaWVzOiBbJ2hpa2luZycsICdwaG90b2dyYXBoeSddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ01pa2UnLFxuICAgICAgICAgICAgYWdlOiAzMixcbiAgICAgICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICAgICAgc3RyZWV0OiAnNzg5IE9hayBTdCcsXG4gICAgICAgICAgICAgIGNpdHk6ICdDaGljYWdvJyxcbiAgICAgICAgICAgICAgc3RhdGU6ICdJTCcsXG4gICAgICAgICAgICAgIHppcDogJzYwMDA3JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBob2JiaWVzOiBbJ3J1bm5pbmcnLCAnZ2FtaW5nJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICAnYWRkcmVzcy5zdHJlZXQnOiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAnYWRkcmVzcy5jaXR5JzogJ05ldyBZb3JrJyxcbiAgICAgICAgJ2FkZHJlc3Muc3RhdGUnOiAnTlknLFxuICAgICAgICAnYWRkcmVzcy56aXAnOiAnMTAwMDEnLFxuICAgICAgICAnaG9iYmllc1swXSc6ICdyZWFkaW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMV0nOiAncGFpbnRpbmcnLFxuICAgICAgICAnaG9iYmllc1syXSc6ICdjb29raW5nJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0ubmFtZSc6ICdKYW5lJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWdlJzogMjgsXG4gICAgICAgICdmcmllbmRzWzBdLmFkZHJlc3Muc3RyZWV0JzogJzQ1NiBFbG0gU3QnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZGRyZXNzLmNpdHknOiAnTG9zIEFuZ2VsZXMnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZGRyZXNzLnN0YXRlJzogJ0NBJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0uYWRkcmVzcy56aXAnOiAnOTAwMDEnLFxuICAgICAgICAnZnJpZW5kc1swXS5ob2JiaWVzWzBdJzogJ2hpa2luZycsXG4gICAgICAgICdmcmllbmRzWzBdLmhvYmJpZXNbMV0nOiAncGhvdG9ncmFwaHknLFxuICAgICAgICAnZnJpZW5kc1sxXS5uYW1lJzogJ01pa2UnLFxuICAgICAgICAnZnJpZW5kc1sxXS5hZ2UnOiAzMixcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy5zdHJlZXQnOiAnNzg5IE9hayBTdCcsXG4gICAgICAgICdmcmllbmRzWzFdLmFkZHJlc3MuY2l0eSc6ICdDaGljYWdvJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWRkcmVzcy5zdGF0ZSc6ICdJTCcsXG4gICAgICAgICdmcmllbmRzWzFdLmFkZHJlc3MuemlwJzogJzYwMDA3JyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uaG9iYmllc1swXSc6ICdydW5uaW5nJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uaG9iYmllc1sxXSc6ICdnYW1pbmcnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZsYXR0ZW5Kc29uKGRhdGEpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgdGVzdCBvYmplY3RpdmUgaXMgdG8gdmVyaWZ5IHRoYXQgdGhlICdmbGF0dGVuSnNvbicgZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBpbiBrZXlzIGFuZCB2YWx1ZXMuXG4gICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgZmxhdHRlbiBhIEpTT04gb2JqZWN0IHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4ga2V5cyBhbmQgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICBhZGRyZXNzOiB7IHN0cmVldDogJzEyMyBNYWluIFN0JywgY2l0eTogJ1NhbiBGcmFuY2lzY28nIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgIG5hbWU6ICdKb2huJyxcbiAgICAgICAgYWdlOiAzMCxcbiAgICAgICAgY2l0eTogJ05ldyBZb3JrJyxcbiAgICAgICAgJ2FkZHJlc3Muc3RyZWV0JzogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgJ2FkZHJlc3MuY2l0eSc6ICdTYW4gRnJhbmNpc2NvJyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHRlc3Qgb2JqZWN0aXZlIGlzIHRvIHZlcmlmeSB0aGF0IHRoZSBmbGF0dGVuSnNvbiBmdW5jdGlvbiBjb3JyZWN0bHkgZmxhdHRlbnMgYSBKU09OIG9iamVjdCB3aXRoIGRlZXBseSBuZXN0ZWQgYXJyYXlzIGFuZCBvYmplY3RzLCBpbmNsdWRpbmcgbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlcy5cbiAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBmbGF0dGVuIGEgSlNPTiBvYmplY3Qgd2l0aCBkZWVwbHkgbmVzdGVkIGFycmF5cyBhbmQgb2JqZWN0cyB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgIGFkZHJlc3M6IHtcbiAgICAgICAgICBzdHJlZXQ6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICAgemlwOiAxMjM0NSxcbiAgICAgICAgICBjb3VudHJ5OiAnVVNBJyxcbiAgICAgICAgICBjb29yZGluYXRlczoge1xuICAgICAgICAgICAgbGF0aXR1ZGU6IDQwLjcxMjgsXG4gICAgICAgICAgICBsb25naXR1ZGU6IC03NC4wMDYsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaG9iYmllczogWydyZWFkaW5nJywgJ3BhaW50aW5nJywgJ3N3aW1taW5nJ10sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdKYW5lJywgYWdlOiAyOCB9LFxuICAgICAgICAgIHsgbmFtZTogJ01pa2UnLCBhZ2U6IDMyIH0sXG4gICAgICAgICAgeyBuYW1lOiAnU2FyYWgnLCBhZ2U6IDI3IH0sXG4gICAgICAgIF0sXG4gICAgICAgIHBldDogbnVsbCxcbiAgICAgICAgZmF2b3JpdGVDb2xvcjogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICdhZGRyZXNzLnN0cmVldCc6ICcxMjMgTWFpbiBTdCcsXG4gICAgICAgICdhZGRyZXNzLnppcCc6IDEyMzQ1LFxuICAgICAgICAnYWRkcmVzcy5jb3VudHJ5JzogJ1VTQScsXG4gICAgICAgICdhZGRyZXNzLmNvb3JkaW5hdGVzLmxhdGl0dWRlJzogNDAuNzEyOCxcbiAgICAgICAgJ2FkZHJlc3MuY29vcmRpbmF0ZXMubG9uZ2l0dWRlJzogLTc0LjAwNixcbiAgICAgICAgJ2hvYmJpZXNbMF0nOiAncmVhZGluZycsXG4gICAgICAgICdob2JiaWVzWzFdJzogJ3BhaW50aW5nJyxcbiAgICAgICAgJ2hvYmJpZXNbMl0nOiAnc3dpbW1pbmcnLFxuICAgICAgICAnZnJpZW5kc1swXS5uYW1lJzogJ0phbmUnLFxuICAgICAgICAnZnJpZW5kc1swXS5hZ2UnOiAyOCxcbiAgICAgICAgJ2ZyaWVuZHNbMV0ubmFtZSc6ICdNaWtlJyxcbiAgICAgICAgJ2ZyaWVuZHNbMV0uYWdlJzogMzIsXG4gICAgICAgICdmcmllbmRzWzJdLm5hbWUnOiAnU2FyYWgnLFxuICAgICAgICAnZnJpZW5kc1syXS5hZ2UnOiAyNyxcbiAgICAgICAgcGV0OiBudWxsLFxuICAgICAgICBmYXZvcml0ZUNvbG9yOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbkpzb24oZGF0YSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZmxhdHRlbkpzb24gZnVuY3Rpb24gY29ycmVjdGx5IGZsYXR0ZW5zIGEgSlNPTiBvYmplY3Qgd2l0aCBhcnJheXMgY29udGFpbmluZyBvYmplY3RzIHdpdGggZGlmZmVyZW50IG5lc3RpbmcgbGV2ZWxzLlxuICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGZsYXR0ZW4gYSBKU09OIG9iamVjdCB3aXRoIGFycmF5cyBjb250YWluaW5nIG9iamVjdHMgd2l0aCBkaWZmZXJlbnQgbmVzdGluZyBsZXZlbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBuYW1lOiAnSm9obicsXG4gICAgICAgIGFnZTogMzAsXG4gICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgIGhvYmJpZXM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdSZWFkaW5nJywgdHlwZTogJ0luZG9vcicgfSxcbiAgICAgICAgICB7IG5hbWU6ICdSdW5uaW5nJywgdHlwZTogJ091dGRvb3InIH0sXG4gICAgICAgICAgeyBuYW1lOiAnQ29va2luZycsIHR5cGU6ICdJbmRvb3InIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGZyaWVuZHM6IFtcbiAgICAgICAgICB7IG5hbWU6ICdBbGljZScsIGFnZTogMjggfSxcbiAgICAgICAgICB7IG5hbWU6ICdCb2InLCBhZ2U6IDMyIH0sXG4gICAgICAgICAgeyBuYW1lOiAnQ2hhcmxpZScsIGFnZTogMjcgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgbmFtZTogJ0pvaG4nLFxuICAgICAgICBhZ2U6IDMwLFxuICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICAnaG9iYmllc1swXS5uYW1lJzogJ1JlYWRpbmcnLFxuICAgICAgICAnaG9iYmllc1swXS50eXBlJzogJ0luZG9vcicsXG4gICAgICAgICdob2JiaWVzWzFdLm5hbWUnOiAnUnVubmluZycsXG4gICAgICAgICdob2JiaWVzWzFdLnR5cGUnOiAnT3V0ZG9vcicsXG4gICAgICAgICdob2JiaWVzWzJdLm5hbWUnOiAnQ29va2luZycsXG4gICAgICAgICdob2JiaWVzWzJdLnR5cGUnOiAnSW5kb29yJyxcbiAgICAgICAgJ2ZyaWVuZHNbMF0ubmFtZSc6ICdBbGljZScsXG4gICAgICAgICdmcmllbmRzWzBdLmFnZSc6IDI4LFxuICAgICAgICAnZnJpZW5kc1sxXS5uYW1lJzogJ0JvYicsXG4gICAgICAgICdmcmllbmRzWzFdLmFnZSc6IDMyLFxuICAgICAgICAnZnJpZW5kc1syXS5uYW1lJzogJ0NoYXJsaWUnLFxuICAgICAgICAnZnJpZW5kc1syXS5hZ2UnOiAyNyxcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBmbGF0dGVuSnNvbihkYXRhKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0T2Zmc2V0SW5TZWMnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2Zmc2V0IHZhbHVlIGluIHNlY29uZHMgZm9yIGEgdmFsaWQgdGltZXpvbmUgc3RyaW5nXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIG9mZnNldCB2YWx1ZSBpbiBzZWNvbmRzIGZvciBhIHZhbGlkIHRpbWV6b25lIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IGdldE9mZnNldEluU2VjKCdBc2lhL0tvbGthdGEnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoMTk4MDApO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nICdVVEMnXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gMCBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyBcIlVUQ1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ1VUQycpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSgwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgMCBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyAnRXRjL1VUQydcbiAgICBpdCgnc2hvdWxkIHJldHVybiAwIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiRXRjL1VUQ1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0V0Yy9VVEMnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoMCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHVuZGVmaW5lZCBmb3IgYW4gaW52YWxpZCB0aW1lem9uZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIGFuIGludmFsaWQgdGltZXpvbmUgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0ludmFsaWQvVGltZXpvbmUnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVuZGVmaW5lZCBvZmZzZXQgdmFsdWUgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgJyswNTozMCcgaW52YWxpZCB0aW1lem9uZSBzdHJpbmdcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdW5kZWZpbmVkIG9mZnNldCB2YWx1ZSBmb3IgdGhlIHRpbWV6b25lIHN0cmluZyBcIiswNTozMFwiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJyswNTozMCcpO1xuICAgICAgZXhwZWN0KG9mZnNldCkudG9CZSh1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29ycmVjdCBvZmZzZXQgdmFsdWUgZm9yIHRoZSB0aW1lem9uZSBzdHJpbmcgJ0FtZXJpY2EvTmV3X1lvcmsnXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3Qgb2Zmc2V0IHZhbHVlIGZvciB0aGUgdGltZXpvbmUgc3RyaW5nIFwiQW1lcmljYS9OZXdfWW9ya1wiJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0SW5TZWMoJ0FtZXJpY2EvTmV3X1lvcmsnKTtcbiAgICAgIGV4cGVjdChvZmZzZXQpLnRvQmUoLTE4MDAwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Zvcm1hdFRpbWVTdGFtcCcsICgpID0+IHtcbiAgICAvLyBUZXN0cyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHdoZW4gbm8gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHdoZW4gbm8gZm9ybWF0IGlzIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZVN0ciA9ICcyMDIyLTAxLTAxVDAwOjAwOjAwLjAwMFonO1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0VGltZVN0YW1wKGRhdGVTdHIpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgxNjQwOTk1MjAwMDAwKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWVzdGFtcCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBtb21lbnQgZm9ybWF0IHdoZW4gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB0aW1lc3RhbXAgZm9ybWF0dGVkIGFjY29yZGluZyB0byB0aGUgbW9tZW50IGZvcm1hdCB3aGVuIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnMjAyMi0wMS0wMVQwMDowMDowMC4wMDBaJztcbiAgICAgIGNvbnN0IGZvcm1hdCA9ICdZWVlZLU1NLUREJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyLCBmb3JtYXQpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSgnMjAyMi0wMS0wMScpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCB0aGUgZnVuY3Rpb24gdGhyb3dzIGFuIGVycm9yIHdoZW4gYW4gaW52YWxpZCBkYXRlIHN0cmluZyBpcyBwcm92aWRlZC5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gYW4gaW52YWxpZCBkYXRlIHN0cmluZyBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnaW52YWxpZC1kYXRlJztcbiAgICAgIGV4cGVjdChmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0cikpLnRvQmVOYU4oKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTmFOIHdoZW4gYW4gaW52YWxpZCBkYXRlIHN0cmluZyBpcyBwcm92aWRlZCBhbmQgbm8gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIE5hTiB3aGVuIGFuIGludmFsaWQgZGF0ZSBzdHJpbmcgaXMgcHJvdmlkZWQgYW5kIG5vIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnaW52YWxpZC1kYXRlJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOYU4oKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTmFOIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIHByb3ZpZGVkIGFzIHRoZSBkYXRlIHN0cmluZyBhbmQgbm8gZm9ybWF0IGlzIHByb3ZpZGVkLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIE5hTiB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwcm92aWRlZCBhcyB0aGUgZGF0ZSBzdHJpbmcgYW5kIG5vIGZvcm1hdCBpcyBwcm92aWRlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOYU4oKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgTmFOIHdoZW4gYW4gaW52YWxpZCBmb3JtYXQgaXMgcHJvdmlkZWQuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gTmFOIHdoZW4gYW4gaW52YWxpZCBmb3JtYXQgaXMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRlU3RyID0gJzIwMjItMDEtMDFUMDA6MDA6MDAuMDAwWic7XG4gICAgICBjb25zdCBmb3JtYXQgPSAnaW52YWxpZEZvcm1hdCc7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXRUaW1lU3RhbXAoZGF0ZVN0ciwgZm9ybWF0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoJ2ludmFtMS8xLzIwMjJpNkZvcjBhbXQnKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgd2hlbiBhIHZhbGlkIHRpbWVzdGFtcCBzdHJpbmcgaXMgcHJvdmlkZWQgaW5zdGVhZCBvZiBhIGRhdGUgc3RyaW5nLlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHdoZW4gYSB2YWxpZCB0aW1lc3RhbXAgc3RyaW5nIGlzIHByb3ZpZGVkIGluc3RlYWQgb2YgYSBkYXRlIHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVTdHIgPSAnMjAyMi0wMS0wMVQwMDowMDowMC4wMDBaJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdFRpbWVTdGFtcChkYXRlU3RyKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoMTY0MDk5NTIwMDAwMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdoYXNoVG9TaGEyNTYnLCAoKSA9PiB7XG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYSBzdHJpbmcgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYSBzdHJpbmcgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICd0ZXN0IHN0cmluZyc7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdkNTU3OWM0NmRmY2M3ZjE4MjA3MDEzZTY1YjQ0ZTRjYjRlMmMyMjk4ZjRhYzQ1N2JhOGY4Mjc0M2YzMWU5MzBiJztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGEgQnVmZmVyIGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGEgQnVmZmVyIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBCdWZmZXIuZnJvbSgndGVzdCBidWZmZXInKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJzUyNWVmNWY3YmFmNTY1MjhiNDg3NzA5MjJlOThlODAwMzEwZDM2ODU2ODFkMzRlZTU5MjkwMmFhMjUyNDU4YjMnO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBoYXNoVG9TaGEyNTYgcmV0dXJucyB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgbnVtYmVyIGFycmF5IGlucHV0XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IG51bWJlciBhcnJheSBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0OiBudW1iZXJbXSA9IFtdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBCdWZmZXIgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYW4gZW1wdHkgQnVmZmVyIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSBCdWZmZXIuZnJvbShbXSk7XG4gICAgICBjb25zdCBleHBlY3RlZE91dHB1dCA9ICdlM2IwYzQ0Mjk4ZmMxYzE0OWFmYmY0Yzg5OTZmYjkyNDI3YWU0MWU0NjQ5YjkzNGNhNDk1OTkxYjc4NTJiODU1JztcbiAgICAgIGNvbnN0IG91dHB1dCA9IGhhc2hUb1NoYTI1NihpbnB1dCk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b0JlKGV4cGVjdGVkT3V0cHV0KTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgaGFzaFRvU2hhMjU2IHJldHVybnMgdGhlIFNIQTI1NiBoYXNoIG9mIGFuIGVtcHR5IHN0cmluZyBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhbiBlbXB0eSBzdHJpbmcgaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnB1dCA9ICcnO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnZTNiMGM0NDI5OGZjMWMxNDlhZmJmNGM4OTk2ZmI5MjQyN2FlNDFlNDY0OWI5MzRjYTQ5NTk5MWI3ODUyYjg1NSc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhIG51bWJlciBhcnJheSBpbnB1dFxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBTSEEyNTYgaGFzaCBvZiBhIG51bWJlciBhcnJheSBpbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGlucHV0ID0gWzEsIDIsIDMsIDQsIDVdO1xuICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXQgPSAnNzRmODFmZTE2N2Q5OWI0Y2I0MWQ2ZDBjY2RhODIyNzhjYWVlOWYzZTJmMjVkNWU1YTM5MzZmZjNkY2VjNjBkMCc7XG4gICAgICBjb25zdCBvdXRwdXQgPSBoYXNoVG9TaGEyNTYoaW5wdXQpO1xuICAgICAgZXhwZWN0KG91dHB1dCkudG9CZShleHBlY3RlZE91dHB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBUZXN0cyB0aGF0IGhhc2hUb1NoYTI1NiByZXR1cm5zIHRoZSBTSEEyNTYgaGFzaCBvZiBhIG5vbi1BU0NJSSBzdHJpbmcgaW5wdXRcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgU0hBMjU2IGhhc2ggb2YgYSBub24tQVNDSUkgc3RyaW5nIGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgaW5wdXQgPSAn5L2g5aW95LiW55WMJztcbiAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0ID0gJzUwOGQ2OWRjMjFiZjVkMmY4MDQwMTRiMTY4ODk1M2ExMmQ1ZGZkZTcxYmU2Y2Q5NTQxNzc5ODBkNWQxNzQxYmInO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gaGFzaFRvU2hhMjU2KGlucHV0KTtcbiAgICAgIGV4cGVjdChvdXRwdXQpLnRvQmUoZXhwZWN0ZWRPdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2VuZXJhdGVVVUlEJywgKCkgPT4ge1xuICAgIC8vIFRlc3RzIHRoYXQgZ2VuZXJhdGVVVUlEIGZ1bmN0aW9uIHJldHVybnMgYSBVVUlEIHN0cmluZ1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVVJRCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBleHBlY3QodHlwZW9mIHV1aWQpLnRvQmUoJ3N0cmluZycpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZW5lcmF0ZVVVSUQgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgdW5pcXVlIFVVSUQgZWFjaCB0aW1lIGl0IGlzIGNhbGxlZFxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSB1bmlxdWUgVVVJRCBlYWNoIHRpbWUgaXQgaXMgY2FsbGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdXVpZDEgPSBnZW5lcmF0ZVVVSUQoKTtcbiAgICAgIGNvbnN0IHV1aWQyID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBleHBlY3QodXVpZDEpLm5vdC50b0JlKHV1aWQyKTtcbiAgICB9KTtcblxuICAgIC8vIFRlc3RzIHRoYXQgZ2VuZXJhdGVVVUlEIGZ1bmN0aW9uIHJldHVybnMgYSBVVUlEIHN0cmluZyB3aXRoIGxlbmd0aCAzNlxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVVVJRCBzdHJpbmcgd2l0aCBsZW5ndGggMzYnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBleHBlY3QodXVpZC5sZW5ndGgpLnRvQmUoMzYpO1xuICAgIH0pO1xuXG4gICAgLy8gVGVzdHMgdGhhdCBnZW5lcmF0ZVVVSUQgZnVuY3Rpb24gcmV0dXJucyBhIFVVSUQgc3RyaW5nIHdpdGggNCBkYXNoZXNcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFVVSUQgc3RyaW5nIHdpdGggNCBkYXNoZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB1dWlkID0gZ2VuZXJhdGVVVUlEKCk7XG4gICAgICBjb25zdCBkYXNoQ291bnQgPSAodXVpZC5tYXRjaCgvLS9nKSB8fCBbXSkubGVuZ3RoO1xuICAgICAgZXhwZWN0KGRhc2hDb3VudCkudG9CZSg0KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|