commons-assessment 12.1.0 → 12.1.2-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/bundles/commons-assessment.umd.js +2304 -247
- package/bundles/commons-assessment.umd.js.map +1 -1
- package/esm2015/lib/modules/assessment-maker/assessment-maker.component.js +293 -32
- package/esm2015/lib/modules/assessment-maker/assessment-maker.module.js +10 -5
- package/esm2015/lib/modules/assessment-maker/components/add-edit-section-introduction/add-edit-section-introduction.component.js +1 -1
- package/esm2015/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.js +77 -22
- package/esm2015/lib/modules/assessment-maker/components/question-bank-picker/question-bank-picker.component.js +276 -0
- package/esm2015/lib/modules/assessment-maker/components/question-details/question-details.component.js +22 -2
- package/esm2015/lib/modules/assessment-maker/services/assessment-builder.service.js +22 -7
- package/esm2015/lib/modules/assessment-maker/services/assessment-maker.service.js +32 -5
- package/esm2015/lib/modules/assessment-taker/assessment-taker.component.js +365 -42
- package/esm2015/lib/modules/assessment-taker/assessment-taker.module.js +9 -3
- package/esm2015/lib/modules/assessment-taker/components/proctoring-consent/proctoring-consent.component.js +137 -0
- package/esm2015/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.js +177 -0
- package/esm2015/lib/modules/assessment-taker/components/question-type-date-picker/question-type-date-picker.component.js +2 -3
- package/esm2015/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.js +5 -2
- package/esm2015/lib/modules/assessment-taker/components/question-type-long/question-type-long.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.js +7 -3
- package/esm2015/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.js +7 -3
- package/esm2015/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.js +9 -4
- package/esm2015/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.js +78 -8
- package/esm2015/lib/modules/assessment-taker/components/section-instructions/section-instructions.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/services/assessment-taker.service.js +18 -3
- package/esm2015/lib/modules/assessment-taker/services/proctoring.service.js +125 -0
- package/esm2015/lib/modules/assessment-taker/services/response-builder.service.js +15 -1
- package/esm2015/lib/modules/question-bank/question-bank.component.js +313 -0
- package/esm2015/lib/modules/question-bank/question-bank.module.js +45 -0
- package/esm2015/lib/shared/components/confirmation-dialog/confirmation-dialog.component.js +56 -0
- package/esm2015/lib/shared/components/skill-allocation/skill-allocation.component.js +5 -2
- package/esm2015/lib/shared/controllers.js +18 -4
- package/esm2015/lib/shared/interfaces/assessment.interface.js +1 -1
- package/esm2015/lib/shared/interfaces/proctoring.interface.js +2 -0
- package/esm2015/lib/shared/material-modules.js +1 -16
- package/esm2015/lib/shared/shared.module.js +8 -3
- package/esm2015/lib/shared/utils.js +19 -1
- package/esm2015/public-api.js +4 -1
- package/fesm2015/commons-assessment.js +2071 -152
- package/fesm2015/commons-assessment.js.map +1 -1
- package/lib/modules/assessment-maker/assessment-maker.component.d.ts +40 -2
- package/lib/modules/assessment-maker/assessment-maker.module.d.ts +6 -5
- package/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.d.ts +7 -0
- package/lib/modules/assessment-maker/components/question-bank-picker/question-bank-picker.component.d.ts +81 -0
- package/lib/modules/assessment-maker/components/question-details/question-details.component.d.ts +6 -1
- package/lib/modules/assessment-maker/services/assessment-builder.service.d.ts +10 -3
- package/lib/modules/assessment-maker/services/assessment-maker.service.d.ts +15 -11
- package/lib/modules/assessment-taker/assessment-taker.component.d.ts +81 -2
- package/lib/modules/assessment-taker/assessment-taker.module.d.ts +7 -5
- package/lib/modules/assessment-taker/components/proctoring-consent/proctoring-consent.component.d.ts +39 -0
- package/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.d.ts +82 -0
- package/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.d.ts +1 -0
- package/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.d.ts +1 -0
- package/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.d.ts +1 -0
- package/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.d.ts +1 -0
- package/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.d.ts +14 -2
- package/lib/modules/assessment-taker/services/assessment-taker.service.d.ts +5 -0
- package/lib/modules/assessment-taker/services/proctoring.service.d.ts +40 -0
- package/lib/modules/assessment-taker/services/response-builder.service.d.ts +9 -0
- package/lib/modules/question-bank/question-bank.component.d.ts +65 -0
- package/lib/modules/question-bank/question-bank.module.d.ts +12 -0
- package/lib/shared/components/confirmation-dialog/confirmation-dialog.component.d.ts +36 -0
- package/lib/shared/components/skill-allocation/skill-allocation.component.d.ts +1 -0
- package/lib/shared/controllers.d.ts +14 -1
- package/lib/shared/interfaces/assessment.interface.d.ts +8 -0
- package/lib/shared/interfaces/proctoring.interface.d.ts +101 -0
- package/lib/shared/material-modules.d.ts +5 -8
- package/lib/shared/shared.module.d.ts +5 -4
- package/lib/shared/utils.d.ts +4 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
- package/src/lib/assets/images/arrow-down-blue.svg +3 -0
- package/src/lib/assets/images/arrow-up-blue.svg +3 -0
- package/src/lib/assets/images/file-import.svg +11 -0
- package/src/lib/assets/images/plus-white.svg +1 -0
- package/src/lib/assets/images/proctoring.svg +3 -0
- package/src/lib/assets/images/user.svg +3 -0
- package/src/lib/assets/json/imageConfig.json +7 -1
- package/src/lib/assets/json/labelConfig.json +107 -2
- package/src/lib/assets/theme/_theme.global.scss +6 -0
- package/src/lib/assets/theme/_theme.scss +17 -346
- package/src/lib/assets/theme/styles.scss +13 -0
|
@@ -3,6 +3,20 @@ import { deepClone } from '../../../shared/utils';
|
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export class ResponseBuilderService {
|
|
5
5
|
constructor() { }
|
|
6
|
+
/**
|
|
7
|
+
* Builds the payload used to create the assessee record up front (marked in-progress) so the
|
|
8
|
+
* backend issues a proctoring session / anchors the timer. Optionally carries the captured
|
|
9
|
+
* reference image (base64) for proctoring's first attempt.
|
|
10
|
+
*/
|
|
11
|
+
buildInitAssesseePayload(assesseeResponse, assessmentData, sectionFormGroups, questionBank, tenant, referenceImageBase64 = '') {
|
|
12
|
+
assesseeResponse.assessmentTaken = { code: 'ASSESSMENT_TAKEN.INCOMPLETE' };
|
|
13
|
+
const payload = this.buildResponsePayload(assesseeResponse, assessmentData, sectionFormGroups, questionBank, tenant);
|
|
14
|
+
// send the captured reference image + host origin so the backend registers it for identity verification
|
|
15
|
+
if (referenceImageBase64) {
|
|
16
|
+
payload.proctoring = Object.assign(Object.assign({}, (payload.proctoring || {})), { referenceImageBase64, appBaseUrl: window.location.origin });
|
|
17
|
+
}
|
|
18
|
+
return payload;
|
|
19
|
+
}
|
|
6
20
|
buildResponsePayload(assesseeResponse, assessmentData, sectionFormGroups, questionBank, tenant) {
|
|
7
21
|
var _a;
|
|
8
22
|
const requestPayload = deepClone(assesseeResponse);
|
|
@@ -240,4 +254,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
240
254
|
providedIn: 'root'
|
|
241
255
|
}]
|
|
242
256
|
}], ctorParameters: function () { return []; } });
|
|
243
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UtYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LXRha2VyL3NlcnZpY2VzL3Jlc3BvbnNlLWJ1aWxkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFRbEQsTUFBTSxPQUFPLHNCQUFzQjtJQUUvQixnQkFBZ0IsQ0FBQztJQUVqQixvQkFBb0IsQ0FDaEIsZ0JBQThDLEVBQzlDLGNBQXVDLEVBQ3ZDLGlCQUFnRSxFQUNoRSxZQUFnRCxFQUNoRCxNQUFjOztRQUVkLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25ELGNBQWMsQ0FBQyxzQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFFM0MsTUFBQSxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsd0JBQXdCLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFOztZQUMvRCxNQUFNLHVCQUF1QixHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0YsSUFBSSx1QkFBdUIsRUFBRTtnQkFDekIsTUFBTSxTQUFTLEdBQUcsdUJBQXVCLENBQUMsU0FBUyxDQUFDO2dCQUVwRCxNQUFBLE9BQU8sQ0FBQyxvQkFBb0IsMENBQUUsT0FBTyxDQUFDLENBQUMsZUFBZ0MsRUFBRSxFQUFFOztvQkFDdkUsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUEsZUFBZSxhQUFmLGVBQWUsdUJBQWYs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QUNILDRCQUE0QixFQUFFLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFFLEVBQUU7WUFDbEQsU0FBUyxFQUFFLFNBQVM7U0FDdkIsQ0FBQztJQUNOLENBQUM7O29IQWpTUSxzQkFBc0I7d0hBQXRCLHNCQUFzQixjQUZuQixNQUFNOzRGQUVULHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXIsIFNlY3Rpb25RdWVzdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLXBhcGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRJbnN0YW5jZUFzc2Vzc2VEVE8gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLmludGVyZmFjZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3BvbnNlQnVpbGRlclNlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgYnVpbGRSZXNwb25zZVBheWxvYWQoXHJcbiAgICAgICAgYXNzZXNzZWVSZXNwb25zZTogQXNzZXNzbWVudEluc3RhbmNlQXNzZXNzZURUTyxcclxuICAgICAgICBhc3Nlc3NtZW50RGF0YTogQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXIsXHJcbiAgICAgICAgc2VjdGlvbkZvcm1Hcm91cHM6IHsgc2VjdGlvbklkOiBudW1iZXI7IGZvcm1Hcm91cDogRm9ybUdyb3VwIH1bXSxcclxuICAgICAgICBxdWVzdGlvbkJhbms6IFJlY29yZDxudW1iZXIsIEFzc2Vzc21lbnRRdWVzdGlvbj4sXHJcbiAgICAgICAgdGVuYW50OiBudW1iZXJcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXlsb2FkID0gZGVlcENsb25lKGFzc2Vzc2VlUmVzcG9uc2UpO1xyXG4gICAgICAgIHJlcXVlc3RQYXlsb2FkLmFpYWRlZmF1bHRSZXNwb25zZUxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgYXNzZXNzbWVudERhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25Gb3JtR3JvdXBXcmFwcGVyID0gc2VjdGlvbkZvcm1Hcm91cHMuZmluZCgoczogYW55KSA9PiBzLnNlY3Rpb25JZCA9PT0gc2VjdGlvbi5pZCk7XHJcbiAgICAgICAgICAgIGlmIChzZWN0aW9uRm9ybUdyb3VwV3JhcHBlcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUdyb3VwID0gc2VjdGlvbkZvcm1Hcm91cFdyYXBwZXIuZm9ybUdyb3VwO1xyXG5cclxuICAgICAgICAgICAgICAgIHNlY3Rpb24uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/LmZvckVhY2goKHNlY3Rpb25RdWVzdGlvbjogU2VjdGlvblF1ZXN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlcyA9IHF1ZXN0aW9uQmFua1tzZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgfHwgLTFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcXVlcykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzUmVzT2JqID0gdGhpcy5nZXRRdWVzdGlvblJlc3BvbnNlT2JqKGZvcm1Hcm91cCwgcXVlcz8uaWQsIHF1ZXN0aW9uQmFuayk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25SZXNwb25zZU9iaiA9IHF1ZXNSZXNPYmoucXVlc3Rpb25SZXNwb25zZU9iajtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uUmVzcG9uc2VPYmopIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlcU9iaiA9IE9iamVjdC5hc3NpZ24oe30sIHF1ZXN0aW9uUmVzcG9uc2VPYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVxT2JqLmRlZmF1bHRPcHRpb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0FucyA9IGFzc2Vzc2VlUmVzcG9uc2UuYWlhZGVmYXVsdFJlc3BvbnNlTGlzdD8uZmluZCgoYTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5zZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgPT09IHNlY3Rpb25RdWVzdGlvbi5xdWVzdGlvbklkICYmICFhLmNoaWxkUXVlc3Rpb25JZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUV4aXN0aW5nSWRzKHJlcU9iaiwgZXhpc3RpbmdBbnMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ0FucyAmJiByZXFPYmouZHJvYmplY3RpdmVyZXNwb25zZUxpc3QgJiYgcmVxT2JqLmRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nQW5zICYmIHJlcU9iai5hdHRhY2htZW50UmVzcG9uc2VMaXN0ICYmIHJlcU9iai5hdHRhY2htZW50UmVzcG9uc2VMaXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBheWxvYWQuYWlhZGVmYXVsdFJlc3BvbnNlTGlzdD8ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXFPYmosXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZXhpc3RpbmdBbnM/LmlkIHx8IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25RdWVzdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbmFudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtzOiBmb3JtR3JvdXAuZ2V0KGAke3F1ZXMuaWR9X21hcmtzYCk/LnZhbHVlICE9IG51bGwgPyBOdW1iZXIoZm9ybUdyb3VwLmdldChgJHtxdWVzLmlkfV9tYXJrc2ApPy52YWx1ZSkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXNSZXNPYmouY2hpbGRRdWVzUmVzT2JqPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXNSZXNPYmouY2hpbGRRdWVzUmVzT2JqLmZvckVhY2goKGNoaWxkRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRPYmogPSBjaGlsZERhdGE/LnF1ZXN0aW9uUmVzcG9uc2VPYmo7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGREZXRhaWxzID0gY2hpbGREYXRhPy5jaGlsZFF1ZXN0aW9uRGV0YWlscztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkT2JqIHx8ICFjaGlsZERldGFpbHMpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwZWNpZmljQ2hpbGRSZXFPYmogPSBPYmplY3QuYXNzaWduKHt9LCBjaGlsZE9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNwZWNpZmljQ2hpbGRSZXFPYmouZGVmYXVsdE9wdGlvbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdDaGlsZEFucyA9IGFzc2Vzc2VlUmVzcG9uc2UuYWlhZGVmYXVsdFJlc3BvbnNlTGlzdD8uZmluZCgoYTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmNoaWxkUXVlc3Rpb25JZCA9PT0gY2hpbGREZXRhaWxzLmlkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuY2hpbGRRdWVzdGlvblBhcmVudFF1ZXN0aW9uSWQgPT09IHNlY3Rpb25RdWVzdGlvbi5xdWVzdGlvbklkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUV4aXN0aW5nSWRzKHNwZWNpZmljQ2hpbGRSZXFPYmosIGV4aXN0aW5nQ2hpbGRBbnMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nQ2hpbGRBbnMgJiYgc3BlY2lmaWNDaGlsZFJlcU9iai5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdCAmJiBzcGVjaWZpY0NoaWxkUmVxT2JqLmRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdDaGlsZEFucyAmJiBzcGVjaWZpY0NoaWxkUmVxT2JqLmF0dGFjaG1lbnRSZXNwb25zZUxpc3QgJiYgc3BlY2lmaWNDaGlsZFJlcU9iai5hdHRhY2htZW50UmVzcG9uc2VMaXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0UGF5bG9hZC5haWFkZWZhdWx0UmVzcG9uc2VMaXN0Py5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRRdWVzdGlvbklkOiBjaGlsZERldGFpbHMuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkUXVlc3Rpb25QYXJlbnRRdWVzdGlvbklkOiBzZWN0aW9uUXVlc3Rpb24ucXVlc3Rpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREZWZhdWx0T3B0aW9uSWQ6IGNoaWxkRGF0YS5wYXJlbnRPcHRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc3BlY2lmaWNDaGlsZFJlcU9iaixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGV4aXN0aW5nQ2hpbGRBbnM/LmlkIHx8IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uUXVlc3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbmFudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3M6IGZvcm1Hcm91cC5nZXQoYCR7Y2hpbGREZXRhaWxzLmlkfV9tYXJrc2ApPy52YWx1ZSAhPSBudWxsID8gTnVtYmVyKGZvcm1Hcm91cC5nZXQoYCR7Y2hpbGREZXRhaWxzLmlkfV9tYXJrc2ApPy52YWx1ZSkgOiBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXF1ZXN0UGF5bG9hZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlRXhpc3RpbmdJZHMobmV3QW5zOiBhbnksIGV4aXN0aW5nQW5zOiBhbnkpIHtcclxuICAgICAgICBpZiAoIWV4aXN0aW5nQW5zKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmIChuZXdBbnMuZHJzdWJqZWN0aXZlcmVzcG9uc2VMaXN0ICYmIGV4aXN0aW5nQW5zLmRyc3ViamVjdGl2ZXJlc3BvbnNlTGlzdCkge1xyXG4gICAgICAgICAgICBuZXdBbnMuZHJzdWJqZWN0aXZlcmVzcG9uc2VMaXN0LmZvckVhY2goKG5JdGVtOiBhbnksIGlkeDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdBbnMuZHJzdWJqZWN0aXZlcmVzcG9uc2VMaXN0W2lkeF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBuSXRlbS5pZCA9IGV4aXN0aW5nQW5zLmRyc3ViamVjdGl2ZXJlc3BvbnNlTGlzdFtpZHhdLmlkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5ld0Fucy5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdCAmJiBleGlzdGluZ0Fucy5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdCkge1xyXG4gICAgICAgICAgICBuZXdBbnMuZHJvYmplY3RpdmVyZXNwb25zZUxpc3QuZm9yRWFjaCgobkl0ZW06IGFueSwgaWR4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbSA9IGV4aXN0aW5nQW5zLmRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0LmZpbmQoKGVJdGVtOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgZUl0ZW0uZGVmYXVsdE9wdGlvbj8ub3B0aW9ucz8uaWQgPT09IG5JdGVtLmRlZmF1bHRPcHRpb24/Lm9wdGlvbnM/LmlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG5JdGVtLmlkID0gZXhpc3RpbmdJdGVtLmlkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGV4aXN0aW5nQW5zLmRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0LmZvckVhY2goKGVJdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0aWxsRXhpc3RzID0gbmV3QW5zLmRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0LmZpbmQoKG5JdGVtOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgbkl0ZW0uZGVmYXVsdE9wdGlvbj8ub3B0aW9ucz8uaWQgPT09IGVJdGVtLmRlZmF1bHRPcHRpb24/Lm9wdGlvbnM/LmlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzdGlsbEV4aXN0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld0Fucy5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZUl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGlsbEV4aXN0cy5pc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG5ld0Fucy5hdHRhY2htZW50UmVzcG9uc2VMaXN0ICYmIGV4aXN0aW5nQW5zLmF0dGFjaG1lbnRSZXNwb25zZUxpc3QpIHtcclxuICAgICAgICAgICAgbmV3QW5zLmF0dGFjaG1lbnRSZXNwb25zZUxpc3QuZm9yRWFjaCgobkl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJdGVtID0gZXhpc3RpbmdBbnMuYXR0YWNobWVudFJlc3BvbnNlTGlzdC5maW5kKChlSXRlbTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGVJdGVtLmlkID09PSBuSXRlbS5pZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0l0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBuSXRlbS5pZCA9IGV4aXN0aW5nSXRlbS5pZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBleGlzdGluZ0Fucy5hdHRhY2htZW50UmVzcG9uc2VMaXN0LmZvckVhY2goKGVJdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0aWxsRXhpc3RzID0gbmV3QW5zLmF0dGFjaG1lbnRSZXNwb25zZUxpc3QuZmluZCgobkl0ZW06IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBuSXRlbS5pZCA9PT0gZUl0ZW0uaWRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXN0aWxsRXhpc3RzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QW5zLmF0dGFjaG1lbnRSZXNwb25zZUxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVJdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZTogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpbGxFeGlzdHMuaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRRdWVzdGlvblJlc3BvbnNlT2JqKGZvcm1Hcm91cDogYW55LCBxdWVzSWQ6IG51bWJlciA9IC0xLCBxdWVzdGlvbkJhbms6IGFueSk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25EZXRhaWxzID0gcXVlc3Rpb25CYW5rW3F1ZXNJZF07XHJcbiAgICAgICAgaWYgKCFxdWVzdGlvbkRldGFpbHMpIHJldHVybiB7IHF1ZXN0aW9uUmVzcG9uc2VPYmo6IG51bGwsIGNoaWxkUXVlc1Jlc09iajogW10gfTtcclxuXHJcbiAgICAgICAgbGV0IHF1ZXN0aW9uUmVzcG9uc2VPYmo6IGFueSA9IHt9O1xyXG4gICAgICAgIGxldCBjaGlsZFF1ZXNSZXNPYmo6IGFueSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlcyA9IGZvcm1Hcm91cD8uZ2V0UmF3VmFsdWUgPyBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSA6IChmb3JtR3JvdXA/LnZhbHVlIHx8IHt9KTtcclxuICAgICAgICBjb25zdCB2YWwgPSByYXdWYWx1ZXNbcXVlc0lkXTtcclxuXHJcbiAgICAgICAgY29uc3QgcVR5cGUgPSBxdWVzdGlvbkRldGFpbHMucXVlc3Rpb25UeXBlPy5jb2RlO1xyXG5cclxuICAgICAgICAvLyBpZiAoIXZhbCAmJiBxVHlwZSAhPT0gJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJyAmJiBxVHlwZSAhPT0gJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRScgJiYgcVR5cGUgIT09ICdRVUVTVElPTl9UWVBFLkZJTEVfVVBMT0FEJykge1xyXG4gICAgICAgIC8vICAgICByZXR1cm4geyBxdWVzdGlvblJlc3BvbnNlT2JqOiBudWxsLCBjaGlsZFF1ZXNSZXNPYmo6IFtdIH07XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBpZiAocVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLk9CSkVDVElWRScpIHtcclxuICAgICAgICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSBxdWVzdGlvbkRldGFpbHM/LmRlZmF1bHRPcHRpb25zTGlzdCB8fCBbXTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBkZWZhdWx0T3B0aW9ucz8uZmluZCgoaTogYW55KSA9PiBpPy5vcHRpb25zPy5pZCA9PT0gdmFsPy5pZCkgfHwge307XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uUmVzcG9uc2VPYmogPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uSWQ6IHNlbGVjdGVkT3B0aW9uPy5vcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRPcHRpb246IHNlbGVjdGVkT3B0aW9uXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbi5yZW1hcmtzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1hcmtzVmFsID0gcmF3VmFsdWVzW2Ake3F1ZXNJZH1fcmVtYXJrc18ke3NlbGVjdGVkT3B0aW9uLmlkfWBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1hcmtzVmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uUmVzcG9uc2VPYmoucmVtYXJrcyA9IHJlbWFya3NWYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUXVlc0lkcyA9IHNlbGVjdGVkT3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0IHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRRdWVzSWRzLmZvckVhY2goKGNoaWxkSWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVzcG9uc2UgPSB0aGlzLmdldFF1ZXN0aW9uUmVzcG9uc2VPYmooZm9ybUdyb3VwLCBjaGlsZElkLCBxdWVzdGlvbkJhbmspO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFJlc3BvbnNlPy5xdWVzdGlvblJlc3BvbnNlT2JqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkUXVlc1Jlc09iai5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uUmVzcG9uc2VPYmo6IGNoaWxkUmVzcG9uc2UucXVlc3Rpb25SZXNwb25zZU9iaixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkUXVlc3Rpb25EZXRhaWxzOiBxdWVzdGlvbkJhbmtbY2hpbGRJZF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPcHRpb25JZDogc2VsZWN0ZWRPcHRpb24ub3B0aW9ucy5pZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUmVzcG9uc2UuY2hpbGRRdWVzUmVzT2JqPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkUXVlc1Jlc09iaiA9IGNoaWxkUXVlc1Jlc09iai5jb25jYXQoY2hpbGRSZXNwb25zZS5jaGlsZFF1ZXNSZXNPYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvblJlc3BvbnNlT2JqID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAocVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLk1VTFRJX1NFTEVDVCcgfHwgcVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLlBSRUZFUkVOQ0UnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gcXVlc3Rpb25EZXRhaWxzLmRlZmF1bHRPcHRpb25zTGlzdCB8fCBbXTtcclxuICAgICAgICAgICAgY29uc3QgZHJvYmplY3RpdmVyZXNwb25zZUxpc3Q6IGFueVtdID0gW107XHJcblxyXG4gICAgICAgICAgICBsZXQgdmFsQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbCkgPyB2YWwgOiAodmFsID8gW3ZhbF0gOiBbXSk7XHJcblxyXG4gICAgICAgICAgICB2YWxBcnJheS5mb3JFYWNoKChvcHQ6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBkZWZhdWx0T3B0aW9ucy5maW5kKChpOiBhbnkpID0+IGkub3B0aW9ucz8uaWQgPT09IG9wdC5pZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmo6IGFueSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRPcHRpb246IHNlbGVjdGVkT3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5QUkVGRVJFTkNFJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmoub3JkZXJObyA9IGluZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbi5yZW1hcmtzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtYXJrc1ZhbCA9IHJhd1ZhbHVlc1tgJHtxdWVzSWR9X3JlbWFya3NfJHtzZWxlY3RlZE9wdGlvbi5pZH1gXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFya3NWYWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5yZW1hcmtzID0gcmVtYXJrc1ZhbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvYmplY3RpdmVyZXNwb25zZUxpc3QucHVzaChvYmopO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFF1ZXNJZHMgPSBzZWxlY3RlZE9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdCB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZFF1ZXNJZHMuZm9yRWFjaCgoY2hpbGRJZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUmVzcG9uc2UgPSB0aGlzLmdldFF1ZXN0aW9uUmVzcG9uc2VPYmooZm9ybUdyb3VwLCBjaGlsZElkLCBxdWVzdGlvbkJhbmspO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRSZXNwb25zZT8ucXVlc3Rpb25SZXNwb25zZU9iaikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRRdWVzUmVzT2JqLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uUmVzcG9uc2VPYmo6IGNoaWxkUmVzcG9uc2UucXVlc3Rpb25SZXNwb25zZU9iaixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFF1ZXN0aW9uRGV0YWlsczogcXVlc3Rpb25CYW5rW2NoaWxkSWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9wdGlvbklkOiBzZWxlY3RlZE9wdGlvbi5vcHRpb25zLmlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFJlc3BvbnNlLmNoaWxkUXVlc1Jlc09iaj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRRdWVzUmVzT2JqID0gY2hpbGRRdWVzUmVzT2JqLmNvbmNhdChjaGlsZFJlc3BvbnNlLmNoaWxkUXVlc1Jlc09iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBxdWVzdGlvblJlc3BvbnNlT2JqID0geyBkcm9iamVjdGl2ZXJlc3BvbnNlTGlzdCB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAocVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLkZJTEVfVVBMT0FEJykge1xyXG4gICAgICAgICAgICBjb25zdCBhdHRhY2htZW50UmVzcG9uc2VMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgbGV0IHZhbEFycmF5ID0gQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogKHZhbCA/IFt2YWxdIDogW10pO1xyXG4gICAgICAgICAgICB2YWxBcnJheS5mb3JFYWNoKChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFJlc3BvbnNlTGlzdC5wdXNoKG9wdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcXVlc3Rpb25SZXNwb25zZU9iaiA9IHsgYXR0YWNobWVudFJlc3BvbnNlTGlzdCB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCByZXNwb25zZVRleHQgPSB2YWw7XHJcbiAgICAgICAgICAgIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuREFURV9QSUNLRVInICYmIHZhbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZU9iaiA9IG5ldyBEYXRlKHZhbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKGRhdGVPYmouZ2V0VGltZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVGV4dCA9IGRhdGVPYmoudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBxdWVzdGlvblJlc3BvbnNlT2JqID0ge1xyXG4gICAgICAgICAgICAgICAgZHJzdWJqZWN0aXZlcmVzcG9uc2VMaXN0OiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUZXh0OiByZXNwb25zZVRleHRcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geyBxdWVzdGlvblJlc3BvbnNlT2JqLCBjaGlsZFF1ZXNSZXNPYmogfTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZE1hcmtzUGF5bG9hZChhc3Nlc3NlZVJlc3BvbnNlOiBBc3Nlc3NtZW50SW5zdGFuY2VBc3Nlc3NlRFRPKSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2VzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICBhc3Nlc3NlZVJlc3BvbnNlLmFpYWRlZmF1bHRSZXNwb25zZUxpc3Q/LmZvckVhY2goKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5tYXJrcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgYWlhRGVmYXVsdFJlc3BvbnNlSWQ6IHJlc3BvbnNlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmtzOiBOdW1iZXIocmVzcG9uc2UubWFya3MpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhc3Nlc3NtZW50SW5zdGFuY2VBc3Nlc3NlZUlkOiBhc3Nlc3NlZVJlc3BvbnNlPy5pZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VzOiByZXNwb25zZXNcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UtYnVpbGRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9ucy1hc3Nlc3NtZW50L3NyYy9saWIvbW9kdWxlcy9hc3Nlc3NtZW50LXRha2VyL3NlcnZpY2VzL3Jlc3BvbnNlLWJ1aWxkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFRbEQsTUFBTSxPQUFPLHNCQUFzQjtJQUUvQixnQkFBZ0IsQ0FBQztJQUVqQjs7OztPQUlHO0lBQ0gsd0JBQXdCLENBQ3BCLGdCQUE4QyxFQUM5QyxjQUF1QyxFQUN2QyxpQkFBZ0UsRUFDaEUsWUFBZ0QsRUFDaEQsTUFBYyxFQUNkLHVCQUErQixFQUFFO1FBRWpDLGdCQUFnQixDQUFDLGVBQWUsR0FBRyxFQUFFLElBQUksRUFBRSw2QkFBNkIsRUFBRSxDQUFDO1FBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JILHdHQUF3RztRQUN4RyxJQUFJLG9CQUFvQixFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxVQUFVLG1DQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsS0FBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUUsQ0FBQztTQUNwSDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRCxvQkFBb0IsQ0FDaEIsZ0JBQThDLEVBQzlDLGNBQXVDLEVBQ3ZDLGlCQUFnRSxFQUNoRSxZQUFnRCxFQUNoRCxNQUFjOztRQUVkLE1BQU0sY0FBYyxH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LEVBQUUsQ0FBQzt3QkFDTCxZQUFZLEVBQUUsWUFBWTtxQkFDN0I7aUJBQ0o7YUFDSixDQUFDO1NBQ0w7UUFFRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQixDQUFDLGdCQUE4Qzs7UUFDNUQsTUFBTSxTQUFTLEdBQVUsRUFBRSxDQUFDO1FBRTVCLE1BQUEsZ0JBQWdCLENBQUMsc0JBQXNCLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQy9ELElBQUksQ0FBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsS0FBSyxLQUFJLElBQUksRUFBRTtnQkFDekIsU0FBUyxDQUFDLElBQUksQ0FBQztvQkFDWCxvQkFBb0IsRUFBRSxRQUFRLENBQUMsRUFBRTtvQkFDakMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2lCQUNoQyxDQUFDLENBQUM7YUFDTjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNILDRCQUE0QixFQUFFLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFFLEVBQUU7WUFDbEQsU0FBUyxFQUFFLFNBQVM7U0FDdkIsQ0FBQztJQUNOLENBQUM7O29IQXZUUSxzQkFBc0I7d0hBQXRCLHNCQUFzQixjQUZuQixNQUFNOzRGQUVULHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXIsIFNlY3Rpb25RdWVzdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLXBhcGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRJbnN0YW5jZUFzc2Vzc2VEVE8gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLmludGVyZmFjZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlc3BvbnNlQnVpbGRlclNlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCdWlsZHMgdGhlIHBheWxvYWQgdXNlZCB0byBjcmVhdGUgdGhlIGFzc2Vzc2VlIHJlY29yZCB1cCBmcm9udCAobWFya2VkIGluLXByb2dyZXNzKSBzbyB0aGVcclxuICAgICAqIGJhY2tlbmQgaXNzdWVzIGEgcHJvY3RvcmluZyBzZXNzaW9uIC8gYW5jaG9ycyB0aGUgdGltZXIuIE9wdGlvbmFsbHkgY2FycmllcyB0aGUgY2FwdHVyZWRcclxuICAgICAqIHJlZmVyZW5jZSBpbWFnZSAoYmFzZTY0KSBmb3IgcHJvY3RvcmluZydzIGZpcnN0IGF0dGVtcHQuXHJcbiAgICAgKi9cclxuICAgIGJ1aWxkSW5pdEFzc2Vzc2VlUGF5bG9hZChcclxuICAgICAgICBhc3Nlc3NlZVJlc3BvbnNlOiBBc3Nlc3NtZW50SW5zdGFuY2VBc3Nlc3NlRFRPLFxyXG4gICAgICAgIGFzc2Vzc21lbnREYXRhOiBBc3Nlc3NtZW50UXVlc3Rpb25QYXBlcixcclxuICAgICAgICBzZWN0aW9uRm9ybUdyb3VwczogeyBzZWN0aW9uSWQ6IG51bWJlcjsgZm9ybUdyb3VwOiBGb3JtR3JvdXAgfVtdLFxyXG4gICAgICAgIHF1ZXN0aW9uQmFuazogUmVjb3JkPG51bWJlciwgQXNzZXNzbWVudFF1ZXN0aW9uPixcclxuICAgICAgICB0ZW5hbnQ6IG51bWJlcixcclxuICAgICAgICByZWZlcmVuY2VJbWFnZUJhc2U2NDogc3RyaW5nID0gJydcclxuICAgICkge1xyXG4gICAgICAgIGFzc2Vzc2VlUmVzcG9uc2UuYXNzZXNzbWVudFRha2VuID0geyBjb2RlOiAnQVNTRVNTTUVOVF9UQUtFTi5JTkNPTVBMRVRFJyB9O1xyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmJ1aWxkUmVzcG9uc2VQYXlsb2FkKGFzc2Vzc2VlUmVzcG9uc2UsIGFzc2Vzc21lbnREYXRhLCBzZWN0aW9uRm9ybUdyb3VwcywgcXVlc3Rpb25CYW5rLCB0ZW5hbnQpO1xyXG4gICAgICAgIC8vIHNlbmQgdGhlIGNhcHR1cmVkIHJlZmVyZW5jZSBpbWFnZSArIGhvc3Qgb3JpZ2luIHNvIHRoZSBiYWNrZW5kIHJlZ2lzdGVycyBpdCBmb3IgaWRlbnRpdHkgdmVyaWZpY2F0aW9uXHJcbiAgICAgICAgaWYgKHJlZmVyZW5jZUltYWdlQmFzZTY0KSB7XHJcbiAgICAgICAgICAgIHBheWxvYWQucHJvY3RvcmluZyA9IHsgLi4uKHBheWxvYWQucHJvY3RvcmluZyB8fCB7fSksIHJlZmVyZW5jZUltYWdlQmFzZTY0LCBhcHBCYXNlVXJsOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkUmVzcG9uc2VQYXlsb2FkKFxyXG4gICAgICAgIGFzc2Vzc2VlUmVzcG9uc2U6IEFzc2Vzc21lbnRJbnN0YW5jZUFzc2Vzc2VEVE8sXHJcbiAgICAgICAgYXNzZXNzbWVudERhdGE6IEFzc2Vzc21lbnRRdWVzdGlvblBhcGVyLFxyXG4gICAgICAgIHNlY3Rpb25Gb3JtR3JvdXBzOiB7IHNlY3Rpb25JZDogbnVtYmVyOyBmb3JtR3JvdXA6IEZvcm1Hcm91cCB9W10sXHJcbiAgICAgICAgcXVlc3Rpb25CYW5rOiBSZWNvcmQ8bnVtYmVyLCBBc3Nlc3NtZW50UXVlc3Rpb24+LFxyXG4gICAgICAgIHRlbmFudDogbnVtYmVyXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0UGF5bG9hZCA9IGRlZXBDbG9uZShhc3Nlc3NlZVJlc3BvbnNlKTtcclxuICAgICAgICByZXF1ZXN0UGF5bG9hZC5haWFkZWZhdWx0UmVzcG9uc2VMaXN0ID0gW107XHJcblxyXG4gICAgICAgIGFzc2Vzc21lbnREYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uRm9ybUdyb3VwV3JhcHBlciA9IHNlY3Rpb25Gb3JtR3JvdXBzLmZpbmQoKHM6IGFueSkgPT4gcy5zZWN0aW9uSWQgPT09IHNlY3Rpb24uaWQpO1xyXG4gICAgICAgICAgICBpZiAoc2VjdGlvbkZvcm1Hcm91cFdyYXBwZXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHNlY3Rpb25Gb3JtR3JvdXBXcmFwcGVyLmZvcm1Hcm91cDtcclxuXHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5mb3JFYWNoKChzZWN0aW9uUXVlc3Rpb246IFNlY3Rpb25RdWVzdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXMgPSBxdWVzdGlvbkJhbmtbc2VjdGlvblF1ZXN0aW9uPy5xdWVzdGlvbklkIHx8IC0xXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXF1ZXMpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc1Jlc09iaiA9IHRoaXMuZ2V0UXVlc3Rpb25SZXNwb25zZU9iaihmb3JtR3JvdXAsIHF1ZXM/LmlkLCBxdWVzdGlvbkJhbmspO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uUmVzcG9uc2VPYmogPSBxdWVzUmVzT2JqLnF1ZXN0aW9uUmVzcG9uc2VPYmo7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxdWVzdGlvblJlc3BvbnNlT2JqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXFPYmogPSBPYmplY3QuYXNzaWduKHt9LCBxdWVzdGlvblJlc3BvbnNlT2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlcU9iai5kZWZhdWx0T3B0aW9uO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdBbnMgPSBhc3Nlc3NlZVJlc3BvbnNlLmFpYWRlZmF1bHRSZXNwb25zZUxpc3Q/LmZpbmQoKGE6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuc2VjdGlvblF1ZXN0aW9uPy5xdWVzdGlvbklkID09PSBzZWN0aW9uUXVlc3Rpb24ucXVlc3Rpb25JZCAmJiAhYS5jaGlsZFF1ZXN0aW9uSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VFeGlzdGluZ0lkcyhyZXFPYmosIGV4aXN0aW5nQW5zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdBbnMgJiYgcmVxT2JqLmRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0ICYmIHJlcU9iai5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdC5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ0FucyAmJiByZXFPYmouYXR0YWNobWVudFJlc3BvbnNlTGlzdCAmJiByZXFPYmouYXR0YWNobWVudFJlc3BvbnNlTGlzdC5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQYXlsb2FkLmFpYWRlZmF1bHRSZXNwb25zZUxpc3Q/LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVxT2JqLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGV4aXN0aW5nQW5zPy5pZCB8fCAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uUXVlc3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5hbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrczogZm9ybUdyb3VwLmdldChgJHtxdWVzLmlkfV9tYXJrc2ApPy52YWx1ZSAhPSBudWxsID8gTnVtYmVyKGZvcm1Hcm91cC5nZXQoYCR7cXVlcy5pZH1fbWFya3NgKT8udmFsdWUpIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVzUmVzT2JqLmNoaWxkUXVlc1Jlc09iaj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzUmVzT2JqLmNoaWxkUXVlc1Jlc09iai5mb3JFYWNoKChjaGlsZERhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkT2JqID0gY2hpbGREYXRhPy5xdWVzdGlvblJlc3BvbnNlT2JqO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRGV0YWlscyA9IGNoaWxkRGF0YT8uY2hpbGRRdWVzdGlvbkRldGFpbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZE9iaiB8fCAhY2hpbGREZXRhaWxzKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzcGVjaWZpY0NoaWxkUmVxT2JqID0gT2JqZWN0LmFzc2lnbih7fSwgY2hpbGRPYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzcGVjaWZpY0NoaWxkUmVxT2JqLmRlZmF1bHRPcHRpb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQ2hpbGRBbnMgPSBhc3Nlc3NlZVJlc3BvbnNlLmFpYWRlZmF1bHRSZXNwb25zZUxpc3Q/LmZpbmQoKGE6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYS5jaGlsZFF1ZXN0aW9uSWQgPT09IGNoaWxkRGV0YWlscy5pZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmNoaWxkUXVlc3Rpb25QYXJlbnRRdWVzdGlvbklkID09PSBzZWN0aW9uUXVlc3Rpb24ucXVlc3Rpb25JZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VFeGlzdGluZ0lkcyhzcGVjaWZpY0NoaWxkUmVxT2JqLCBleGlzdGluZ0NoaWxkQW5zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ0NoaWxkQW5zICYmIHNwZWNpZmljQ2hpbGRSZXFPYmouZHJvYmplY3RpdmVyZXNwb25zZUxpc3QgJiYgc3BlY2lmaWNDaGlsZFJlcU9iai5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdC5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nQ2hpbGRBbnMgJiYgc3BlY2lmaWNDaGlsZFJlcU9iai5hdHRhY2htZW50UmVzcG9uc2VMaXN0ICYmIHNwZWNpZmljQ2hpbGRSZXFPYmouYXR0YWNobWVudFJlc3BvbnNlTGlzdC5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBheWxvYWQuYWlhZGVmYXVsdFJlc3BvbnNlTGlzdD8ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkUXVlc3Rpb25JZDogY2hpbGREZXRhaWxzLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFF1ZXN0aW9uUGFyZW50UXVlc3Rpb25JZDogc2VjdGlvblF1ZXN0aW9uLnF1ZXN0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGVmYXVsdE9wdGlvbklkOiBjaGlsZERhdGEucGFyZW50T3B0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNwZWNpZmljQ2hpbGRSZXFPYmosXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBleGlzdGluZ0NoaWxkQW5zPy5pZCB8fCAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvblF1ZXN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5hbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtzOiBmb3JtR3JvdXAuZ2V0KGAke2NoaWxkRGV0YWlscy5pZH1fbWFya3NgKT8udmFsdWUgIT0gbnVsbCA/IE51bWJlcihmb3JtR3JvdXAuZ2V0KGAke2NoaWxkRGV0YWlscy5pZH1fbWFya3NgKT8udmFsdWUpIDogbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVxdWVzdFBheWxvYWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtZXJnZUV4aXN0aW5nSWRzKG5ld0FuczogYW55LCBleGlzdGluZ0FuczogYW55KSB7XHJcbiAgICAgICAgaWYgKCFleGlzdGluZ0FucykgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAobmV3QW5zLmRyc3ViamVjdGl2ZXJlc3BvbnNlTGlzdCAmJiBleGlzdGluZ0Fucy5kcnN1YmplY3RpdmVyZXNwb25zZUxpc3QpIHtcclxuICAgICAgICAgICAgbmV3QW5zLmRyc3ViamVjdGl2ZXJlc3BvbnNlTGlzdC5mb3JFYWNoKChuSXRlbTogYW55LCBpZHg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nQW5zLmRyc3ViamVjdGl2ZXJlc3BvbnNlTGlzdFtpZHhdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbkl0ZW0uaWQgPSBleGlzdGluZ0Fucy5kcnN1YmplY3RpdmVyZXNwb25zZUxpc3RbaWR4XS5pZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChuZXdBbnMuZHJvYmplY3RpdmVyZXNwb25zZUxpc3QgJiYgZXhpc3RpbmdBbnMuZHJvYmplY3RpdmVyZXNwb25zZUxpc3QpIHtcclxuICAgICAgICAgICAgbmV3QW5zLmRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0LmZvckVhY2goKG5JdGVtOiBhbnksIGlkeDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0l0ZW0gPSBleGlzdGluZ0Fucy5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdC5maW5kKChlSXRlbTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGVJdGVtLmRlZmF1bHRPcHRpb24/Lm9wdGlvbnM/LmlkID09PSBuSXRlbS5kZWZhdWx0T3B0aW9uPy5vcHRpb25zPy5pZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0l0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBuSXRlbS5pZCA9IGV4aXN0aW5nSXRlbS5pZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBleGlzdGluZ0Fucy5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdC5mb3JFYWNoKChlSXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGlsbEV4aXN0cyA9IG5ld0Fucy5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdC5maW5kKChuSXRlbTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG5JdGVtLmRlZmF1bHRPcHRpb24/Lm9wdGlvbnM/LmlkID09PSBlSXRlbS5kZWZhdWx0T3B0aW9uPy5vcHRpb25zPy5pZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmICghc3RpbGxFeGlzdHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdBbnMuZHJvYmplY3RpdmVyZXNwb25zZUxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVJdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZTogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RpbGxFeGlzdHMuaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChuZXdBbnMuYXR0YWNobWVudFJlc3BvbnNlTGlzdCAmJiBleGlzdGluZ0Fucy5hdHRhY2htZW50UmVzcG9uc2VMaXN0KSB7XHJcbiAgICAgICAgICAgIG5ld0Fucy5hdHRhY2htZW50UmVzcG9uc2VMaXN0LmZvckVhY2goKG5JdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbSA9IGV4aXN0aW5nQW5zLmF0dGFjaG1lbnRSZXNwb25zZUxpc3QuZmluZCgoZUl0ZW06IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBlSXRlbS5pZCA9PT0gbkl0ZW0uaWRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbkl0ZW0uaWQgPSBleGlzdGluZ0l0ZW0uaWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgZXhpc3RpbmdBbnMuYXR0YWNobWVudFJlc3BvbnNlTGlzdC5mb3JFYWNoKChlSXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGlsbEV4aXN0cyA9IG5ld0Fucy5hdHRhY2htZW50UmVzcG9uc2VMaXN0LmZpbmQoKG5JdGVtOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgbkl0ZW0uaWQgPT09IGVJdGVtLmlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzdGlsbEV4aXN0cykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld0Fucy5hdHRhY2htZW50UmVzcG9uc2VMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5lSXRlbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0aWxsRXhpc3RzLmlzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UXVlc3Rpb25SZXNwb25zZU9iaihmb3JtR3JvdXA6IGFueSwgcXVlc0lkOiBudW1iZXIgPSAtMSwgcXVlc3Rpb25CYW5rOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRGV0YWlscyA9IHF1ZXN0aW9uQmFua1txdWVzSWRdO1xyXG4gICAgICAgIGlmICghcXVlc3Rpb25EZXRhaWxzKSByZXR1cm4geyBxdWVzdGlvblJlc3BvbnNlT2JqOiBudWxsLCBjaGlsZFF1ZXNSZXNPYmo6IFtdIH07XHJcblxyXG4gICAgICAgIGxldCBxdWVzdGlvblJlc3BvbnNlT2JqOiBhbnkgPSB7fTtcclxuICAgICAgICBsZXQgY2hpbGRRdWVzUmVzT2JqOiBhbnkgPSBbXTtcclxuICAgICAgICBjb25zdCByYXdWYWx1ZXMgPSBmb3JtR3JvdXA/LmdldFJhd1ZhbHVlID8gZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkgOiAoZm9ybUdyb3VwPy52YWx1ZSB8fCB7fSk7XHJcbiAgICAgICAgY29uc3QgdmFsID0gcmF3VmFsdWVzW3F1ZXNJZF07XHJcblxyXG4gICAgICAgIGNvbnN0IHFUeXBlID0gcXVlc3Rpb25EZXRhaWxzLnF1ZXN0aW9uVHlwZT8uY29kZTtcclxuXHJcbiAgICAgICAgLy8gaWYgKCF2YWwgJiYgcVR5cGUgIT09ICdRVUVTVElPTl9UWVBFLk1VTFRJX1NFTEVDVCcgJiYgcVR5cGUgIT09ICdRVUVTVElPTl9UWVBFLlBSRUZFUkVOQ0UnICYmIHFUeXBlICE9PSAnUVVFU1RJT05fVFlQRS5GSUxFX1VQTE9BRCcpIHtcclxuICAgICAgICAvLyAgICAgcmV0dXJuIHsgcXVlc3Rpb25SZXNwb25zZU9iajogbnVsbCwgY2hpbGRRdWVzUmVzT2JqOiBbXSB9O1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5PQkpFQ1RJVkUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0gcXVlc3Rpb25EZXRhaWxzPy5kZWZhdWx0T3B0aW9uc0xpc3QgfHwgW107XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gZGVmYXVsdE9wdGlvbnM/LmZpbmQoKGk6IGFueSkgPT4gaT8ub3B0aW9ucz8uaWQgPT09IHZhbD8uaWQpIHx8IHt9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBxdWVzdGlvblJlc3BvbnNlT2JqID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbklkOiBzZWxlY3RlZE9wdGlvbj8ub3B0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0T3B0aW9uOiBzZWxlY3RlZE9wdGlvblxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24ucmVtYXJrc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtYXJrc1ZhbCA9IHJhd1ZhbHVlc1tgJHtxdWVzSWR9X3JlbWFya3NfJHtzZWxlY3RlZE9wdGlvbi5pZH1gXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVtYXJrc1ZhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblJlc3BvbnNlT2JqLnJlbWFya3MgPSByZW1hcmtzVmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFF1ZXNJZHMgPSBzZWxlY3RlZE9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdCB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGNoaWxkUXVlc0lkcy5mb3JFYWNoKChjaGlsZElkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFJlc3BvbnNlID0gdGhpcy5nZXRRdWVzdGlvblJlc3BvbnNlT2JqKGZvcm1Hcm91cCwgY2hpbGRJZCwgcXVlc3Rpb25CYW5rKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRSZXNwb25zZT8ucXVlc3Rpb25SZXNwb25zZU9iaikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFF1ZXNSZXNPYmoucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblJlc3BvbnNlT2JqOiBjaGlsZFJlc3BvbnNlLnF1ZXN0aW9uUmVzcG9uc2VPYmosXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFF1ZXN0aW9uRGV0YWlsczogcXVlc3Rpb25CYW5rW2NoaWxkSWRdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T3B0aW9uSWQ6IHNlbGVjdGVkT3B0aW9uLm9wdGlvbnMuaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFJlc3BvbnNlLmNoaWxkUXVlc1Jlc09iaj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZFF1ZXNSZXNPYmogPSBjaGlsZFF1ZXNSZXNPYmouY29uY2F0KGNoaWxkUmVzcG9uc2UuY2hpbGRRdWVzUmVzT2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25SZXNwb25zZU9iaiA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5NVUxUSV9TRUxFQ1QnIHx8IHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5QUkVGRVJFTkNFJykge1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHF1ZXN0aW9uRGV0YWlscy5kZWZhdWx0T3B0aW9uc0xpc3QgfHwgW107XHJcbiAgICAgICAgICAgIGNvbnN0IGRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgbGV0IHZhbEFycmF5ID0gQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogKHZhbCA/IFt2YWxdIDogW10pO1xyXG5cclxuICAgICAgICAgICAgdmFsQXJyYXkuZm9yRWFjaCgob3B0OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gZGVmYXVsdE9wdGlvbnMuZmluZCgoaTogYW55KSA9PiBpLm9wdGlvbnM/LmlkID09PSBvcHQuaWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0T3B0aW9uOiBzZWxlY3RlZE9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqLm9yZGVyTm8gPSBpbmRleCArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24ucmVtYXJrc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFya3NWYWwgPSByYXdWYWx1ZXNbYCR7cXVlc0lkfV9yZW1hcmtzXyR7c2VsZWN0ZWRPcHRpb24uaWR9YF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1hcmtzVmFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmoucmVtYXJrcyA9IHJlbWFya3NWYWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGRyb2JqZWN0aXZlcmVzcG9uc2VMaXN0LnB1c2gob2JqKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRRdWVzSWRzID0gc2VsZWN0ZWRPcHRpb24uY2hpbGRRdWVzdGlvbkxpc3QgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRRdWVzSWRzLmZvckVhY2goKGNoaWxkSWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZFJlc3BvbnNlID0gdGhpcy5nZXRRdWVzdGlvblJlc3BvbnNlT2JqKGZvcm1Hcm91cCwgY2hpbGRJZCwgcXVlc3Rpb25CYW5rKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUmVzcG9uc2U/LnF1ZXN0aW9uUmVzcG9uc2VPYmopIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkUXVlc1Jlc09iai5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvblJlc3BvbnNlT2JqOiBjaGlsZFJlc3BvbnNlLnF1ZXN0aW9uUmVzcG9uc2VPYmosXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRRdWVzdGlvbkRldGFpbHM6IHF1ZXN0aW9uQmFua1tjaGlsZElkXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRPcHRpb25JZDogc2VsZWN0ZWRPcHRpb24ub3B0aW9ucy5pZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRSZXNwb25zZS5jaGlsZFF1ZXNSZXNPYmo/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkUXVlc1Jlc09iaiA9IGNoaWxkUXVlc1Jlc09iai5jb25jYXQoY2hpbGRSZXNwb25zZS5jaGlsZFF1ZXNSZXNPYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcXVlc3Rpb25SZXNwb25zZU9iaiA9IHsgZHJvYmplY3RpdmVyZXNwb25zZUxpc3QgfTtcclxuICAgICAgICB9IGVsc2UgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5GSUxFX1VQTE9BRCcpIHtcclxuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFJlc3BvbnNlTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGxldCB2YWxBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6ICh2YWwgPyBbdmFsXSA6IFtdKTtcclxuICAgICAgICAgICAgdmFsQXJyYXkuZm9yRWFjaCgob3B0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRSZXNwb25zZUxpc3QucHVzaChvcHQpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHF1ZXN0aW9uUmVzcG9uc2VPYmogPSB7IGF0dGFjaG1lbnRSZXNwb25zZUxpc3QgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VUZXh0ID0gdmFsO1xyXG4gICAgICAgICAgICBpZiAocVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLkRBVEVfUElDS0VSJyAmJiB2YWwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVPYmogPSBuZXcgRGF0ZSh2YWwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihkYXRlT2JqLmdldFRpbWUoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVRleHQgPSBkYXRlT2JqLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcXVlc3Rpb25SZXNwb25zZU9iaiA9IHtcclxuICAgICAgICAgICAgICAgIGRyc3ViamVjdGl2ZXJlc3BvbnNlTGlzdDogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVGV4dDogcmVzcG9uc2VUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHsgcXVlc3Rpb25SZXNwb25zZU9iaiwgY2hpbGRRdWVzUmVzT2JqIH07XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRNYXJrc1BheWxvYWQoYXNzZXNzZWVSZXNwb25zZTogQXNzZXNzbWVudEluc3RhbmNlQXNzZXNzZURUTykge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlczogYW55W10gPSBbXTtcclxuXHJcbiAgICAgICAgYXNzZXNzZWVSZXNwb25zZS5haWFkZWZhdWx0UmVzcG9uc2VMaXN0Py5mb3JFYWNoKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZT8ubWFya3MgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGFpYURlZmF1bHRSZXNwb25zZUlkOiByZXNwb25zZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBtYXJrczogTnVtYmVyKHJlc3BvbnNlLm1hcmtzKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYXNzZXNzbWVudEluc3RhbmNlQXNzZXNzZWVJZDogYXNzZXNzZWVSZXNwb25zZT8uaWQsXHJcbiAgICAgICAgICAgIHJlc3BvbnNlczogcmVzcG9uc2VzXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG4iXX0=
|