tnx-shared 5.3.398 → 5.3.399
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/bundles/tnx-shared.umd.js +11 -4
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/list-component-base.d.ts.map +1 -1
- package/components/crud/crud-list/crud-list.component.d.ts +6 -3
- package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
- package/esm2015/classes/base/list-component-base.js +2 -2
- package/esm2015/components/crud/crud-list/crud-list.component.js +12 -5
- package/fesm2015/tnx-shared.js +11 -4
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/tnx-shared.metadata.json +1 -1
|
@@ -3533,7 +3533,7 @@ ListComponentBase.propDecorators = {
|
|
|
3533
3533
|
contentRowGroup: [{ type: ContentChild, args: ['contentRowGroup', { static: true },] }],
|
|
3534
3534
|
dialogDetailTask: [{ type: ViewChild, args: ['dialogDetailTask', { static: true },] }],
|
|
3535
3535
|
dialogChoYKienForm: [{ type: ViewChild, args: ['dialogChoYKienForm', { static: true },] }],
|
|
3536
|
-
dialogProcessWorkflowForm: [{ type: ViewChild, args: ['dialogProcessWorkflowForm', { static:
|
|
3536
|
+
dialogProcessWorkflowForm: [{ type: ViewChild, args: ['dialogProcessWorkflowForm', { static: false },] }],
|
|
3537
3537
|
children: [{ type: ContentChildren, args: [TemplateRef,] }],
|
|
3538
3538
|
workflowsettingnewViewContainer: [{ type: ViewChild, args: ['workflowsettingnew', { read: ViewContainerRef },] }],
|
|
3539
3539
|
processWorkflowFormViewContainer: [{ type: ViewChild, args: ['processWorkflowForm', { read: ViewContainerRef },] }],
|
|
@@ -3612,4 +3612,4 @@ ListComponentBase.propDecorators = {
|
|
|
3612
3612
|
onExportAll: [{ type: Output }],
|
|
3613
3613
|
onSearched: [{ type: Output }]
|
|
3614
3614
|
};
|
|
3615
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb21wb25lbnQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvbGlzdC1jb21wb25lbnQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFSCxZQUFZLEVBQ1osZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUdULE1BQU0sRUFFTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQVUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzTixPQUFPLEVBQXFCLE9B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QyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7aURBQ3BELFNBQVMsU0FBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtvQkFFN0QsS0FBSztzQkFDTCxLQUFLO3VCQUNMLEtBQUs7bUJBQ0wsS0FBSzs0QkFHTCxLQUFLOytCQUNMLEtBQUs7a0NBR0wsS0FBSzs0QkFFTCxLQUFLOzRCQVNMLEtBQUs7K0JBQ0wsS0FBSztpQ0FDTCxLQUFLO3lCQUNMLEtBQUs7bUNBQ0wsS0FBSzswQkFDTCxLQUFLOzRCQUNMLEtBQUs7K0JBQ0wsS0FBSzs4QkFNTCxLQUFLO21DQUNMLEtBQUs7OEJBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7MkJBQ0wsS0FBSzt5QkFDTCxLQUFLOzZCQUNMLEtBQUs7eUJBQ0wsS0FBSzs0QkFDTCxLQUFLO3FDQUNMLEtBQUs7MkJBQ0wsS0FBSztxQkFDTCxLQUFLOzRCQUNMLEtBQUs7cUJBQ0wsS0FBSzsrQkFDTCxLQUFLO3dCQUNMLEtBQUs7a0NBQ0wsS0FBSztpQ0FDTCxLQUFLOzBCQUNMLEtBQUs7eUJBQ0wsS0FBSztvQkFHTCxLQUFLO3lCQU1MLEtBQUs7NEJBV0wsS0FBSzt5QkFhTCxLQUFLOzZCQVlMLEtBQUs7MEJBRUwsTUFBTTswQkFDTixNQUFNO3lCQUNOLE1BQU07dUJBQ04sTUFBTTt5QkFDTixNQUFNO3NCQUNOLE1BQU07NEJBQ04sTUFBTTtvQkFDTixNQUFNO3FCQUNOLE1BQU07eUJBQ04sTUFBTTtpQ0FDTixNQUFNO3FCQUNOLE1BQU07dUJBQ04sTUFBTTsrQkFDTixNQUFNO2dDQUNOLE1BQU07NkJBQ04sTUFBTTtnQ0FDTixNQUFNO2tDQUNOLE1BQU07bUNBQ04sTUFBTTtzQ0FDTixNQUFNO3dDQUNOLE1BQU07MEJBQ04sTUFBTTt5QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIGlzRGV2TW9kZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvY29udGV4dG1lbnUnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUcmVlVGFibGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy90cmVldGFibGUnO1xuXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IElMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2ktbGlzdC1jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aW9uQ2h1eWVuWHVMeUJhc2UsIEJ1dHRvblRleHRBY3Rpb25Db25nVmllYywgZGF0YVNvdXJjZUljb24sIEVudW1TdGF0ZVR5cGUsIEZpZWxkRGVmaW5lSGFzVGFzaywgRm9ybVN0YXRlLCBNYUFjdGlvbkJhdERhdVF1eVRyaW5oLCBUZXh0QWN0aW9uQ2h1eWVuWHVMeUJhc2UsIFdmQWN0aW9uLCBXZkl0ZW0gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNjaGVtYSwgaXNBcnJheSwgaXNMaXRlcmFsT2JqZWN0IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnZpcm9ubWVudC1zY2hlbWEnO1xuaW1wb3J0IHtcbiAgICBCdXR0b25BY3Rpb24sXG4gICAgQ2hlY2tCb3hMaXN0Q29udHJvbFNjaGVtYSxcbiAgICBDb2x1bW5TY2hlbWFCYXNlLFxuICAgIENvbHVtblNldHRpbmcsXG4gICAgQ29udHJvbFR5cGUsXG4gICAgQ3J1ZExpc3RDb25maWcsXG4gICAgQ3J1ZExpc3REYXRhLFxuICAgIENydWRMaXN0U2V0dGluZyxcbiAgICBEYXRhVHlwZSxcbiAgICBEYXRlVGltZVJhbmdlQ29udHJvbFNjaGVtYSxcbiAgICBEaWFsb2dNb2RlbCxcbiAgICBEcm9wZG93bkNvbnRyb2xTY2hlbWEsXG4gICAgRXhwb3J0SXRlbXNNb2RlLFxuICAgIEZpbGVVcGxvYWRNb2RlLFxuICAgIEZvcm1Db250cm9sQmFzZSxcbiAgICBIZWlnaHRUeXBlLFxuICAgIE51bWJlclJhbmdlQ29udHJvbFNjaGVtYSxcbiAgICBPcGVyYXRvcixcbiAgICBQb3B1cFNpemUsXG4gICAgUmVmRmllbGQsXG4gICAgVGV4dEFsaWduLFxuICAgIFRleHRDb250cm9sU2NoZW1hXG59IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgVG5NZW51SXRlbSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdG4tbWVudS1pdGVtJztcbmltcG9ydCB7IEFjdGlvbiwgV29ya2Zsb3dTZXR0aW5nTmV3IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy93b3JrZmxvdy1zY2hlbWEnO1xuaW1wb3J0IHsgQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb25ndmllYy1waWNrZXIvc2VydmljZXMvY29uZ3ZpZWMuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRSZWdleFJlc3VsdCwgcmVuZGVyVGV4dFRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL3V0aWxzJztcbmltcG9ydCB7IFNlYXJjaEluZm8gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vZGVscy9zZWFyY2gnO1xuaW1wb3J0IHsgVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3RuLWN1c3RvbS1zY3JvbGxiYXIvdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtLCBSZWdleFNwbGl0RmllbGRCeUl0ZW0gfSBmcm9tICcuLi8uLi9jb25zdC9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBFbnVtUHJvcGVydGllcyxcbiAgICBGaWVsZENoZWNrYm94Q3J1ZExpc3QsXG4gICAgRmllbGRDb2xFeHBhbmRDcnVkTGlzdCxcbiAgICBGaWVsZENvbFJlb3JkZXJDcnVkTGlzdCxcbiAgICBGaWVsZEZ1bmN0aW9uQ3J1ZExpc3QsXG4gICAgRmllbGRJbmRleEluRGF0YVNvdXJjZSxcbiAgICBGaWVsZE9yZGVyQ3J1ZExpc3QsXG59IGZyb20gJy4uLy4uL2VudW1zL2NvbW1vbic7XG5pbXBvcnQgeyBGaWx0ZXIsIEdyaWRJbmZvLCBTb3J0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBUblVzZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvdG4tdXNlcic7XG5pbXBvcnQgeyBLZXlWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdHlwZXMnO1xuaW1wb3J0IHsgQmFzZVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZXBlcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBDYW5Cb0hvU29TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FuYm8taG9zby5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERtTG9haUNvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RtLWxvYWktY29uZ3ZpZWMuc2VydmljZSc7XG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBFbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LXdvcmtmbG93LWhpc3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRmVkZXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mZWRlcmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBQcmludFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmludC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0YXRlTWFjaGluZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGVtYWNoaW5lcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGVtcGxhdGVpbnN0YW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtmbG93SGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dvcmtmbG93LXBlcm1pc3Npb24tZGV0YWlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgbXVsdGlwbGVTb3J0IH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXknO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmRlY2xhcmUgbGV0ICQ6IGFueTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGlzdENvbXBvbmVudEJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgSUxpc3RDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCd0cmVldGFibGUnKSB0cmVlVGFibGU6IFRyZWVUYWJsZTtcbiAgICB0YWJsZTogVGFibGU7XG5cbiAgICBAVmlld0NoaWxkKFRhYmxlLCB7IHN0YXRpYzogZmFsc2UgfSkgc2V0IF90YWJsZSh2OiBUYWJsZSkge1xuICAgICAgICB0aGlzLnRhYmxlID0gdjtcbiAgICAgICAgdGhpcy50YWJsZVJlYWR5Lm5leHQodGhpcyk7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZHJlbignYnV0dG9uQmFzZScpIGxzdEJ1dHRvbkVsZW1lbnQ6IFF1ZXJ5TGlzdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyOiBFbGVtZW50UmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgnaWNvblRvZ2dsZVJvd0dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgaWNvblRvZ2dsZVJvd0dyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2ljb25Ub2dnbGVSb3dEYXRhJywgeyBzdGF0aWM6IHRydWUgfSkgaWNvblRvZ2dsZVJvd0RhdGE6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgndHJhbmdUaGFpVjUnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZVRyYW5nVGhhaVY1OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ3ZpZXdIaXN0b3J5JywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGVDb2xWaWV3SGlzdG9yeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCd3b3JrZmxvd0NvcmVTdGF0dXMnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZVdvcmtmbG93Q29yZVN0YXR1czogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCdzY3JvbGxiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzY3JvbGxiYXI6IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbnRleHRNZW51OiBDb250ZXh0TWVudTtcbiAgICBAQ29udGVudENoaWxkKCdwYWdpbmF0aW9uJywgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ3NlYXJjaEN1c3RvbScsIHsgc3RhdGljOiB0cnVlIH0pIHNlYXJjaEN1c3RvbTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBoZWFkZXI6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyRmlsdGVyJywgeyBzdGF0aWM6IHRydWUgfSkgaGVhZGVyRmlsdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ3Jvd0V4cGFuc2lvbicsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0V4cGFuc2lvbjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdzdW1tYXJ5JywgeyBzdGF0aWM6IHRydWUgfSkgc3VtbWFyeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdmb290ZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBmb290ZXI6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnY29sZ3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb2xncm91cDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdyb3dHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0dyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2NvbnRlbnRSb3dHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRlbnRSb3dHcm91cDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCdkaWFsb2dEZXRhaWxUYXNrJywgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nRGV0YWlsVGFzazogYW55O1xuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZ0Nob1lLaWVuRm9ybScsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0Nob1lLaWVuRm9ybTogYW55O1xuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZ1Byb2Nlc3NXb3JrZmxvd0Zvcm0nLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFsb2dQcm9jZXNzV29ya2Zsb3dGb3JtOiBhbnk7XG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZVJlZikgY2hpbGRyZW46IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIEBWaWV3Q2hpbGQoJ3dvcmtmbG93c2V0dGluZ25ldycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSB3b3JrZmxvd3NldHRpbmduZXdWaWV3Q29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAVmlld0NoaWxkKCdwcm9jZXNzV29ya2Zsb3dGb3JtJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHByb2Nlc3NXb3JrZmxvd0Zvcm1WaWV3Q29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAVmlld0NoaWxkKCd3b3JrZmxvd0hpc3RvcnlOZXcnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgd29ya2Zsb3dIaXN0b3J5TmV3Vmlld0NvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgnd29ya2Zsb3dQZXJtaXNzaW9uJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHdvcmtmbG93UGVybWlzc2lvblZpZXdDb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3N0YXJ0V29ya2Zsb3cnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgc3RhcnRXb3JrZmxvd1ZpZXdDb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3Blcm1pc3Npb25TaGFyaW5nJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHBlcm1pc3Npb25TaGFyaW5nVmlld0NvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgnZGV0YWlsVGFzaycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBkZXRhaWxUYXNrVmlld0NvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgnYmFzZUNvbmdWaWVjRm9ybScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBiYXNlQ29uZ1ZpZWNGb3JtVmlld0NvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgnYmFzZUNvbmdWaWVjJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGJhc2VDb25nVmllY1ZpZXdDb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2Nob1lLaWVuRm9ybScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBjaG9ZS2llbkZvcm1WaWV3Q29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAVmlld0NoaWxkKCd3b3JrZmxvd1NldHRpbmdEaWFsb2cnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgd29ya2Zsb3dTZXR0aW5nRGlhbG9nVmlld0NvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICBASW5wdXQoKSBtb2RlbDogQ3J1ZExpc3REYXRhID0gbmV3IENydWRMaXN0RGF0YSgpO1xuICAgIEBJbnB1dCgpIHNldHRpbmc6IENydWRMaXN0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcbiAgICBASW5wdXQoKSBmaWxlTmFtZSA9ICdleHBvcnQnO1xuICAgIEBJbnB1dCgpIGxhenkgPSB0cnVlOyAvLyDEkeG6t3QgZ2nDoSB0cuG7iyBuw6B5IGLhurFuZyBmYWxzZSB0aMOsIHPhur0gZmlsdGVyIMSRYyBjbGllbnRcblxuICAgIC8vIGR1bmcgZG9uIHZpIHJlbSBkZSB3aWR0aCBraG9uZyBiaSBhbmggaHVvbmcgYm9pIGZvbnQgc2l6ZSBjdWEgdGgsIG5vIHNlIGxheSB0aGVvIGZvbnQgc2l6ZSBjdWEgdGhlIGh0bWxcbiAgICBASW5wdXQoKSB3aWR0aENoZWNrYm94ID0gJzIuNXJlbSc7XG4gICAgQElucHV0KCkgd2lkdGhPcmRlckNvbHVtbiA9ICczLjVyZW0nO1xuICAgIF9kZWZhdWx0V2l0aEZ1bmN0aW9uQ29sdW1uID0gODE7XG4gICAgX3dpZHRoRnVuY3Rpb25Db2x1bW4gPSBgJHt0aGlzLl9kZWZhdWx0V2l0aEZ1bmN0aW9uQ29sdW1ufXB4YDtcbiAgICBASW5wdXQoKSB3aWR0aEZ1bmN0aW9uQ29sdW1uOiBzdHJpbmc7XG4gICAgX2NsYXNzUm93R3JvdXAgPSAnbm8tcGFkZGluZyc7XG4gICAgQElucHV0KCkgc2V0IGNsYXNzUm93R3JvdXAodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzUm93R3JvdXAgPSBgbm8tcGFkZGluZyAke3ZhbHVlfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jbGFzc1Jvd0dyb3VwID0gYG5vLXBhZGRpbmdgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2hvd1Njcm9sbEJhciA9IHRydWU7XG4gICAgQElucHV0KCkgcFRhYmxlU2Nyb2xsYWJsZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHBUYWJsZVNjcm9sbEhlaWdodDogc3RyaW5nID0gbnVsbDtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBlbmFibGVCYXNpY0F1dGhvcml6ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNlcnZpY2VDb2RlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0aG9yaXplUGF0aDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGF1dGhvcml6ZUJ1dHRvbnM6IHN0cmluZ1tdID0gW1xuICAgICAgICBDb21DdHhDb25zdGFudHMuQ09NTU9OLkFERCxcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FRElULFxuICAgICAgICBDb21DdHhDb25zdGFudHMuQ09NTU9OLkRFTEVURSxcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5ERUxFVEVfTVVMVElQTEVcbiAgICBdO1xuICAgIEBJbnB1dCgpIGNvbmZpZ1Njcm9sbEJhcjogYW55ID0geyBzdXBwcmVzc1Njcm9sbFg6IHRydWUsIHN1cHByZXNzU2Nyb2xsWTogZmFsc2UgfTtcbiAgICBASW5wdXQoKSBzaG93U2Nyb2xsSG9yaXpvbnRhbCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNob3dNZW51QnV0dG9ucyA9IHRydWU7XG4gICAgQElucHV0KCkgc2hvd1JhZGlvID0gZmFsc2U7XG4gICAgQElucHV0KCkgaGlkZGVuQWRkID0gZmFsc2U7XG4gICAgQElucHV0KCkgaGlkZGVuRGVsZXRlID0gZmFsc2U7XG4gICAgQElucHV0KCkgaGlkZGVuRWRpdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlbkNvcHlMaW5rID0gZmFsc2U7XG4gICAgQElucHV0KCkgaGlkZGVuVmlldyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlblJlb3JkZXIgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlS2V5cHJlc3NDb250cm9sID0gZmFsc2U7XG4gICAgQElucHV0KCkgY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBlc2NhcGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb25maWc6IENydWRMaXN0Q29uZmlnID0gbmV3IENydWRMaXN0Q29uZmlnKCk7XG4gICAgQElucHV0KCkgZW5hYmxlUmVvcmRlclJvdyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlc0Zyb21QYXJlbnQ6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcbiAgICBASW5wdXQoKSBjaGlsZHJlbkZyb21QYXJlbnQ6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcbiAgICBASW5wdXQoKSBtZW51QnV0dG9uczogKHJvd0RhdGEpID0+IFRuTWVudUl0ZW1bXSB8IFByb21pc2U8VG5NZW51SXRlbVtdPjtcbiAgICBASW5wdXQoKSBmaWVsZE9yZGVyOiBzdHJpbmcgPSBGaWVsZE9yZGVyQ3J1ZExpc3Q7XG5cbiAgICBfc3R5bGU6IGFueSA9IHt9O1xuICAgIEBJbnB1dCgpIHNldCBzdHlsZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB0YWJsZUNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGFibGVDbGFzcyA9IHRoaXMuX2RlZmF1bHRUYWJsZUNsYXNzO1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS50cmltKCkgIT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gYCAke3ZhbHVlfWA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHVwVGFibGVDbGFzcygpO1xuICAgIH1cblxuICAgIF9yYXdEYXRhU291cmNlOiBhbnlbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgc2V0IGFsbERhdGFTb3VyY2UodmFsdWU6IGFueSkge1xuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdLFxuICAgICAgICAgICAgcmF3RGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUucmF3KSB7XG4gICAgICAgICAgICBkYXRhU291cmNlID0gdmFsdWUuZGF0YTtcbiAgICAgICAgICAgIHJhd0RhdGFTb3VyY2UgPSB2YWx1ZS5yYXc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzRGF0YVNvdXJjZShyYXdEYXRhU291cmNlKTtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UgPSByYXdEYXRhU291cmNlO1xuICAgIH1cblxuICAgIF9kYXRhU291cmNlOiBhbnlbXSA9IFtdO1xuICAgIEBJbnB1dCgpIHNldCBkYXRhU291cmNlKHZhbHVlOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5pc1RyZWVUYWJsZSkgcmV0dXJuO1xuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5fcmF3RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIG3hurdjIMSR4buLbmggY2hvIGRldiBjb2RlXG4gICAgQElucHV0KCkgZmlsdGVyX2RlZmF1bHQ6IEZpbHRlcltdID0gW107XG5cbiAgICBAT3V0cHV0KCkgb25Sb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25SZW9yZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25DaGVja0FsbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db250ZW50SW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db3B5TGluayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNvcHlMaW5rTXVsdGlwbGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25WaWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGVsZXRlTXVsdGlwbGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25JbnZhbGlkV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25BZnRlclRyaW5oS3kgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TdGFydGVkV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Qcm9jZXNzZWRXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJvbGxiYWNrZWRXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWRTdGF0dXNXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSB3aWR0aEZ1bmN0aW9uQ29sdW1uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRXhwb3J0QWxsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uU2VhcmNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBwcml2YXRlIGlzVHJlZVRhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSB0YWJsZVJlYWR5ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHRhYmxlUmVhZHlTb3VyY2UkID0gdGhpcy50YWJsZVJlYWR5LmFzT2JzZXJ2YWJsZSgpO1xuICAgIGZpZWxkQ2hlY2tib3ggPSBGaWVsZENoZWNrYm94Q3J1ZExpc3Q7XG4gICAgZmllbGRDb2xFeHBhbmQgPSBGaWVsZENvbEV4cGFuZENydWRMaXN0O1xuICAgIGZpZWxkQ29sUmVvcmRlciA9IEZpZWxkQ29sUmVvcmRlckNydWRMaXN0O1xuICAgIGZpZWxkRnVuY3Rpb24gPSBGaWVsZEZ1bmN0aW9uQ3J1ZExpc3Q7XG4gICAgZmllbGRJbmRleEluRGF0YVNvdXJjZSA9IEZpZWxkSW5kZXhJbkRhdGFTb3VyY2U7XG5cbiAgICBjaGVja2VkQWxsID0gbnVsbDtcbiAgICBkYXRhU2VhcmNoQ29tbW9uOiBhbnkgPSB7fTtcbiAgICByb3dHcm91cENoZWNrZWQ6IGFueSA9IHt9O1xuICAgIHJvd0dyb3VwTWV0YWRhdGE6IGFueSA9IHt9O1xuICAgIGRhdGFTb3VyY2VJbnRlcm5hbDogYW55W107XG4gICAgY2xhc3NUb29sYmFyID0gJyc7XG4gICAgaXRlbVNldHRpbmdzOiBhbnkgPSB7fTtcbiAgICBzb3J0SGlzdG9yeTogU29ydFtdID0gW107XG4gICAgc29ydENsaWVudEhpc3Rvcnk6IGFueSA9IHt9O1xuICAgIF9ncm91cEZpZWxkOiBzdHJpbmcgPSBudWxsO1xuICAgIF9ncm91cEluQ2xpZW50ID0gZmFsc2U7XG4gICAgZW5hYmxlZFdmMSA9IHVuZGVmaW5lZDtcbiAgICBzaG93aW5nQWN0aW9uV29ya2Zsb3cgPSBmYWxzZTtcbiAgICBidXR0b25Db250ZXh0czogTWVudUl0ZW1bXSA9IFtdO1xuICAgIGF1dGhvcml6ZVBhdGhzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICAgIGNvbW1vbkNvbnN0ID0gQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTjtcbiAgICBidXR0b25BcHBseUF1dGhvcml6ZTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuOyB9ID0ge307XG5cbiAgICBfZGVmYXVsdFRhYmxlQ2xhc3MgPSAnbmV3LXRhYmxlIHNjci10YWJsZSBjcnVkLWxpc3QtdGFibGUnO1xuICAgIF90YWJsZUNsYXNzID0gJyc7XG4gICAgX3Nob3dTZXR0aW5nc1Jvd0NvbG9yID0gZmFsc2U7XG4gICAgX3Nob3dTZXR0aW5ncyA9IGZhbHNlO1xuICAgIF9zaG93U2V0dGluZ3NXb3JrZmxvdyA9IGZhbHNlO1xuICAgIF9zaG93U2V0dGluZ3NQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgX2NvbG9yRmlsdGVyVGFibGUgPSBbXTtcbiAgICBfc29ydEZpZWxkID0gJyc7XG4gICAgX3NvcnREaXI6IC0xIHwgMCB8IDEgfCAyID0gLTE7XG5cbiAgICB0ZW1wbGF0ZTogYW55ID0ge307XG4gICAgdGVtcGxhdGVGaWx0ZXI6IEZpbHRlcltdID0gW107XG4gICAgdGVtcGxhdGVIZWFkZXJDb250ZW50OiBhbnkgPSB7fTtcblxuICAgIGNhY2hlZFRyYW5zZm9ybXMgPSB7fTtcblxuICAgIGZpbHRlclNjaGVtYTogYW55ID0ge307XG4gICAgZmlsdGVyRGF0YTogYW55ID0ge307XG4gICAgY3VycmVudEZpZWxkRmlsdGVyOiBzdHJpbmc7XG4gICAgY2hlY2tCb3hDb250ZXh0TWVudTogTWVudUl0ZW1bXSA9IFtcbiAgICAgICAgeyBsYWJlbDogYEPDs2AsIGljb246ICdwaSBwaS1jaGVjaycsIGNvbW1hbmQ6ICgpID0+IHRoaXMuY2hhbmdlRmlsdGVyQm9vbGVhbih0cnVlKSB9LFxuICAgICAgICB7IGxhYmVsOiBgS2jDtG5nYCwgaWNvbjogJ3BpIHBpLXRpbWVzJywgY29tbWFuZDogKCkgPT4gdGhpcy5jaGFuZ2VGaWx0ZXJCb29sZWFuKGZhbHNlKSB9LFxuICAgICAgICB7IGxhYmVsOiBgSOG7p3kgYuG7j2AsIGljb246ICdwaSBwaS11bmRvJywgY29tbWFuZDogKCkgPT4gdGhpcy5jaGFuZ2VGaWx0ZXJCb29sZWFuKG51bGwpIH1cbiAgICBdO1xuICAgIHNlYXJjaEluZm86IFNlYXJjaEluZm8gPSBuZXcgU2VhcmNoSW5mbygpO1xuICAgIGNyZWF0aW5nU2VhcmNoSW5mbyA9IGZhbHNlO1xuXG4gICAgZmlsdGVyX2N1c3RvbTogRmlsdGVyW10gPSBbXTtcbiAgICAvLyBmaWx0ZXIgY+G7p2EgYWR2YW5jZSBzZWFyY2ggdHLhuqMgduG7gVxuICAgIGZpbHRlcl9hZHZhbmNlU2VhcmNoOiBGaWx0ZXJbXSA9IFtdO1xuICAgIGZpbHRlcl9jb21tb25TZWFyY2g6IEZpbHRlcltdID0gW107XG4gICAgLy8gZmlsdGVyIHRoZW8gY8OhYyBmaWx0ZXIgaGnhu4NuIHRo4buLIHRyb25nIGPhu5l0IGPhu6dhIGdyaWRcbiAgICBmaWx0ZXJfY29sdW1uOiBGaWx0ZXJbXSA9IFtdO1xuXG4gICAgdGltZW91dDogYW55O1xuICAgIGludGVydmFsOiBhbnk7XG4gICAgZGF0YUFkdmFuY2U6IGFueSA9IHt9O1xuICAgIHNlYXJjaE1vZGVsOiBhbnkgPSB7fTtcbiAgICBhdXRob3JpemVCdXR0b25LZXkgPSAnJztcbiAgICBsc3RCdXR0b25QZXJtaXNzaW9uID0gW107XG4gICAgbHN0QnV0dG9uVGVtcGxhdGUgPSBbXTtcblxuICAgIGN1cnJlbnRJdGVtOiBhbnk7XG4gICAgaXNCdG5SZWFkeSA9IGZhbHNlO1xuICAgIGlzU3VwZXJVc2VyID0gZmFsc2U7XG4gICAgc2hvd0Zvcm1Xb3JrZmxvdyA9IGZhbHNlO1xuICAgIGhlYWRlcldvcmtmbG93ID0gJyc7XG4gICAgY29tcG9uZW50S2V5ID0gJyc7XG4gICAgYWN0aW9uV29ya2Zsb3c6IEFjdGlvbjtcbiAgICBsc3RCdG5BdXRob3JpemVNZW51OiBCdXR0b25BY3Rpb25bXSA9IFtdO1xuXG4gICAgcG9wdXBTaXplV29ya2Zsb3c6IFBvcHVwU2l6ZSA9IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogOTUwLCBoZWlnaHQ6IDU0MCB9KTtcbiAgICBzaG93SGlzdG9yeVdvcmtmbG93ID0gZmFsc2U7XG4gICAgc2hvd0FsbEJ1dHRvbnMgPSBmYWxzZTtcbiAgICBoaWRkZW5CdG5GdW5jdGlvbiA9IGZhbHNlO1xuICAgIGxzdEJ1dHRvbkFjdGlvbiA9IFtdO1xuICAgIC8vIEJp4bq/biDEkeG7gyBraeG7g20gdHJhIGzhuqduIGNsaWNrIMSR4bqndSB0acOqbiBj4bunYSB1c2VyIHbDoG8gZMOybmcgdHLDqm4gZ3JpZFxuICAgIC8vIFPhu60gZOG7pW5nIMSR4buDIGZpeCBidWcgc2V0IHNlbGVjdGVkIHJvdyB04burIGZvcm0gY2hhLCBuaMawbmcgdsOgbyBmb3JtIGNvbiDhuqVuIHNhbmcgcm93IGtow6FjIG7DsyBrIGLhu48gc2VsZWN0ZWQgcm93IMSRw6Mgc2V0IHThu6sgYsOqbiBuZ2/DoGlcbiAgICBmaXJzdFJvd0NsaWNrID0gdHJ1ZTtcblxuICAgIHN0YXJ0V29ya2Zsb3dNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdDaOG7jW4gcXV5IHRyw6xuaCBuZ2hp4buHcCB24bulIHPhu60gZOG7pW5nJ1xuICAgIH0pO1xuICAgIHByb2Nlc3NXb3JrZmxvd01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCgpO1xuICAgIGNob1lLaWVuTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ2hvIMO9IGtp4bq/bicsXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiAxMTAwLCBoZWlnaHQ6IDY1MCB9KVxuICAgIH0pO1xuICAgIHdvcmtmbG93U2V0dGluZ01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCgpO1xuICAgIHdvcmtmbG93SGlzdG9yeU1vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ1hlbSBs4buLY2ggc+G7rSdcbiAgICB9KTtcbiAgICBwZXJtaXNzaW9uU2hhcmluZ01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ1hlbSBkYW5oIHPDoWNoIGxpbmsgY2hpYSBz4bq7JyxcbiAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDExMDAsIGhlaWdodDogNjUwIH0pLFxuICAgIH0pO1xuICAgIHBlcm1pc3Npb25MaXN0TW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnWGVtIGRhbmggc8OhY2ggY8OzIHF1eeG7gW4nLFxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogMTEwMCwgaGVpZ2h0OiA2NTAgfSksXG4gICAgfSk7XG4gICAgY29uZ1ZpZWNNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdDaOG6oXkgcXV5IHRyw6xuaCBjw7RuZyB2aeG7h2MnLFxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogMTEwMCwgaGVpZ2h0OiA2NTAgfSksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNvbmdWaWVjU2V0dGluZzogbmV3IENydWRMaXN0U2V0dGluZygpXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBkZXRhaWxUYXNrTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ2hpIHRp4bq/dCBjw7RuZyB2aeG7h2MnXG4gICAgfSk7XG4gICAgYnV0dG9uQXV0aG9yaXplTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdQaMOibiBxdXnhu4FuIG7DunQgY2jhu6ljIG7Eg25nJyxcbiAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHsgbWF4aW1pemU6IHRydWUgfSksXG4gICAgICAgIGRhdGE6IHsgZGF0YVNvdWNlOiBbXSB9XG4gICAgfSk7XG5cbiAgICBzaGFyZUxpbmtNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdDaGlhIHPhursgcXV54buBbicsXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiA2NTAsIGhlaWdodDogMzEwIH0pXG4gICAgfSk7XG4gICAgYXR0YWNoZWRUYXNrTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnRGFuaCBzw6FjaCBjw7RuZyB2aeG7h2MgxJHDrW5oIGvDqG0nXG4gICAgfSk7XG5cbiAgICBCVVRUT05fUEhBTl9RVVlFTiA9IEJ1dHRvblBlcm1pc3Npb24uQlVUVE9OX1BIQU5fUVVZRU47XG4gICAgQlVUVE9OX0NBVV9ISU5IX1FVWV9UUklOSCA9IEJ1dHRvblBlcm1pc3Npb24uQlVUVE9OX0NBVV9ISU5IX1FVWV9UUklOSDtcbiAgICBidXR0b25QZXJtaXNzaW9uTWFwOiBNYXA8c3RyaW5nLCBib29sZWFuPiA9IG5ldyBNYXAoKTtcblxuICAgIGVudGl0eU1ldGFkYXRhU2VydmljZTogRW50aXR5TWV0YWRhdGFTZXJ2aWNlO1xuICAgIGVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U6IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U7XG5cbiAgICBzdGF0ZU1hY2hpbmVzU2VydmljZTogU3RhdGVNYWNoaW5lc1NlcnZpY2U7XG5cbiAgICBjYW5Cb19Ib1NvU2VydmljZTogQ2FuQm9Ib1NvU2VydmljZTtcblxuICAgIHNvdXJjZUljb246IGFueSA9IHt9O1xuICAgIHN0b3BDYWxjdWxhdGluZ0Z1bmN0aW9uQ29sdW1uV2lkdGggPSBmYWxzZTtcbiAgICBpc0FmdGVyUmVsb2FkID0gZmFsc2U7XG4gICAgc2VsZWN0ZWRJdGVtTGFzdDogYW55O1xuXG4gICAgcm93RGF0YUN1cnJlbnQ6IGFueTtcbiAgICBlbnZpcm9ubWVudDogRW52aXJvbm1lbnRTY2hlbWE7XG4gICAgRmlsZVVwbG9hZE1vZGUgPSBGaWxlVXBsb2FkTW9kZTtcbiAgICBjdXJyZW50VXNlcjogVG5Vc2VyO1xuICAgIE9wZXJhdG9yID0gT3BlcmF0b3I7XG4gICAgc2hvd1NhdmVSZW9yZGVyID0gZmFsc2U7XG4gICAgc2V0dGluZ0RlZmF1bHQgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG5cbiAgICBwdWJsaWMgX3JvdXRlcjogUm91dGVyO1xuICAgIHB1YmxpYyBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuICAgIHB1YmxpYyBfY3VzdG9tUm91dGVyU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZTtcbiAgICBwdWJsaWMgX3VuU3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHB1YmxpYyBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2U7XG4gICAgcHVibGljIF9leHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlO1xuICAgIHB1YmxpYyBfbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZTtcbiAgICBwdWJsaWMgX2NvbmdWaWVjU2VydmljZTogQ29uZ1ZpZWNTZXJ2aWNlO1xuICAgIHB1YmxpYyBfZG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlOiBEbUxvYWlDb25nVmllY1NlcnZpY2U7XG4gICAgcHVibGljIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xuICAgIHB1YmxpYyBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xuICAgIHB1YmxpYyBfc2FudGlsaXplcjogRG9tU2FuaXRpemVyO1xuICAgIHB1YmxpYyBfZGF0ZVBpcGU6IERhdGVQaXBlO1xuXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcbiAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlO1xuICAgIHByaXZhdGUgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZTtcbiAgICBwcml2YXRlIF90ZW1wbGF0ZUluc3RhbmNlU2VydmljZTogVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2U7XG4gICAgcHJpdmF0ZSBfcHJpbnRTZXJ2aWNlOiBQcmludFNlcnZpY2U7XG4gICAgcHJpdmF0ZSBfZmVkZXJhdGlvblNlcnZpY2U6IEZlZGVyYXRpb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgX2Jhc2VQZXJtaXNzaW9uU2VydmljZTogQmFzZVBlcm1pc3Npb25TZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBfaXNUcmVlVGFibGU6IGJvb2xlYW5cbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgdGhpcy5pc1RyZWVUYWJsZSA9IF9pc1RyZWVUYWJsZTtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xuICAgICAgICB0aGlzLl9yb3V0ZXIgPSB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICAgICAgdGhpcy5fY3VzdG9tUm91dGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDdXN0b21Sb3V0ZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRXhwb3J0U2VydmljZSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTG9nZ2VyU2VydmljZSk7XG4gICAgICAgIHRoaXMuZW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5zdGF0ZU1hY2hpbmVzU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChTdGF0ZU1hY2hpbmVzU2VydmljZSk7XG4gICAgICAgIHRoaXMuY2FuQm9fSG9Tb1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ2FuQm9Ib1NvU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb25nVmllY1NlcnZpY2UpO1xuICAgICAgICB0aGlzLl9kbUxvYWlDb25nVmllY1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlKTtcblxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9jcnVkU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDcnVkU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3NhbnRpbGl6ZXIgPSB0aGlzLl9pbmplY3Rvci5nZXQoRG9tU2FuaXRpemVyKTtcbiAgICAgICAgdGhpcy5fZGF0ZVBpcGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoRGF0ZVBpcGUpO1xuICAgICAgICB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1vZHVsZUNvbmZpZ1NlcnZpY2UpO1xuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChQZXJtaXNzaW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fcHJpbnRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFByaW50U2VydmljZSk7XG4gICAgICAgIHRoaXMuX2ZlZGVyYXRpb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEZlZGVyYXRpb25TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fYmFzZVBlcm1pc3Npb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEJhc2VQZXJtaXNzaW9uU2VydmljZSk7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja0FsbCA9IHRoaXMuaGFuZGxlQ2hlY2tBbGwuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja0FsbF9Hcm91cCA9IHRoaXMuaGFuZGxlQ2hlY2tBbGxfR3JvdXAuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ0RlZmF1bHQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnNldHRpbmcpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuQ09NTU9OLkVOVElUWV9NRVRBREFUQV9SRUxPQURFRCwgc2VydmljZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVudGl0eU1ldGFkYXRhU2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmlsdGVyU2NoZW1hLmRhdGVSYW5nZSA9IG5ldyBEYXRlVGltZVJhbmdlQ29udHJvbFNjaGVtYSh7IGFwcGVuZFRvOiAnYm9keScgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVyU2NoZW1hLmRhdGVUaW1lUmFuZ2UgPSBuZXcgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEoeyBhcHBlbmRUbzogJ2JvZHknLCBzaG93VGltZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5maWx0ZXJTY2hlbWEuZHJvcGRvd24gPSB7fTtcblxuICAgICAgICBkYXRhU291cmNlSWNvbi5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUljb25bc291cmNlLmlkXSA9IHNvdXJjZS50ZW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudGVtcGxhdGVGaWx0ZXIgPSBbXTtcblxuICAgICAgICBpZiAoIXRoaXMuX3RhYmxlQ2xhc3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgPSB0aGlzLl9kZWZhdWx0VGFibGVDbGFzcztcblxuICAgICAgICAgICAgdGhpcy5zZXR1cFRhYmxlQ2xhc3MoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluaXRDb2x1bW5TY2hlbWEodGhpcy5zZXR0aW5nLmNvbHMpO1xuICAgICAgICB0aGlzLmNyZWF0ZVNlYXJjaFNjaGVtYSgpO1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5GaWx0ZXJSb3cpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5GaWx0ZXJSb3cgPSB0aGlzLnNldHRpbmcudXNlQ29tbW9uU2VhcmNoO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmhpZGRlblRyaW5oS3kgfHwgIXRoaXMuc2V0dGluZy5kaXNhYmxlU2hhcmUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5tZW51QnV0dG9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMubWVudUJ1dHRvbnMgPSBhc3luYyAoKSA9PiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE7hur91IG3DoCDhuqluIGFkdmFuY2VzZWFyY2ggPT4gc+G6vSBraMO0bmcgY8OzIHRyaWdnZXIgbG9hZCBkYXRhIHThu6sgYWR2YW5jZSBzZWFyY2ggPT4gcGjhuqNpIHThu7EgZ+G7jWkgZ2V0RGF0YSDhu58gT25Jbml0XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGlkZGVuQWR2YW5jZVNlYXJjaCkge1xuICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc2VydmljZUNvZGUgJiYgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VDb2RlID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNCdG5SZWFkeSA9IHRoaXMuc2V0dGluZy5oaWRkZW5BdXRob3JpemVCdXR0b24gfHwgdGhpcy5zZXR0aW5nLmN1c3RvbUdldERhdGE7XG5cbiAgICAgICAgaWYgKHRoaXMuYXV0aG9yaXplUGF0aCkge1xuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkFERF0gPSBgJHt0aGlzLmF1dGhvcml6ZVBhdGh9L0FERGA7XG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6ZVBhdGhzW0NvbUN0eENvbnN0YW50cy5DT01NT04uRURJVF0gPSBgJHt0aGlzLmF1dGhvcml6ZVBhdGh9L0VESVRgO1xuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkRFTEVURV0gPSBgJHt0aGlzLmF1dGhvcml6ZVBhdGh9L0RFTEVURWA7XG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6ZVBhdGhzW0NvbUN0eENvbnN0YW50cy5DT01NT04uREVMRVRFX01VTFRJUExFXSA9IGAke3RoaXMuYXV0aG9yaXplUGF0aH0vREVMRVRFX01VTFRJUExFYDtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FWFBPUlRfRVhDRUxdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9FWFBPUlRfRVhDRUxgO1xuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkVYUE9SVF9BTExfRVhDRUxdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9FWFBPUlRfQUxMX0VYQ0VMYDtcblxuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbkFwcGx5QXV0aG9yaXplW2J1dHRvbl0gPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGNvbnN0IHVzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcbiAgICAgICAgY29uc3QgdGVtcCA9IHVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgIGlmICh0ZW1wICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSBuZXcgVG5Vc2VyKHVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpO1xuICAgICAgICAgICAgdGhpcy5pc1N1cGVyVXNlciA9IHRoaXMuY3VycmVudFVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBidXR0b25QZXJtaXNzaW9uQ29kZSBvZiB0aGlzLmxzdEJ1dHRvblBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b25QZXJtaXNzaW9uID0gYCR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlfS8ke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lfS8ke2J1dHRvblBlcm1pc3Npb25Db2RlfWAudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvblBlcm1pc3Npb25NYXAuc2V0KGJ1dHRvblBlcm1pc3Npb24sIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBza2lwIGNoZWNrIHBlcm1pc3Npb24gaWYgY3VycmVudCB1c2VyIGlzIHN1cGVydXNlciBvciAoaWdub3JlQWRtaW4gPT0gZmFsc2UgYW5kIHVzZXIgaXMgYWRtaW4pXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgIT09ICd0cnVlJ1xuICAgICAgICAgICAgJiYgKHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuaWdub3JlQWRtaW4gPT09IHRydWVcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmN1cnJlbnRVc2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSAhPT0gJ3RydWUnXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5fcGVybWlzc2lvblNlcnZpY2UuZ2V0U2VydmljZVBlcm1pc3Npb24odGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbHN0QmFzZVBlcm1pc3Npb24gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5sc3RCdXR0b25QZXJtaXNzaW9uID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5idXR0b25QZXJtaXNzaW9ucyBhcyBzdHJpbmdbXSA/PyBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvblBlcm1pc3Npb25Db2RlIG9mIHRoaXMubHN0QnV0dG9uUGVybWlzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBidXR0b25QZXJtaXNzaW9uID0gYCR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlfS8ke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lfS8ke2J1dHRvblBlcm1pc3Npb25Db2RlfWAudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25QZXJtaXNzaW9uTWFwLnNldChidXR0b25QZXJtaXNzaW9uLCBsc3RCYXNlUGVybWlzc2lvbi5pbmNsdWRlcyhidXR0b25QZXJtaXNzaW9uKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuZmluZFRlbXBsYXRlKGBoZWFkZXIke2NvbC5maWVsZC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKX0ke2NvbC5maWVsZC5zdWJzdHJpbmcoMSl9YCk7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVIZWFkZXJDb250ZW50W2NvbC5maWVsZF0gPSB0ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uQ29udGVudEluaXQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXR1cFRhYmxlQ2xhc3MoKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcubXVsdGlwbGVDaGVja1doZW5DbGlja1JvdyB8fCAhdGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94KSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzICs9ICcgbXVsdGktY2hlY2snO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVDbGFzcyArPSAnIHNpbmdsZS1jaGVjayc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnN0aWNreUNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVDbGFzcyArPSAnIHN0aWNreS1jb2x1bW5zLWFjdGl2ZSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94KSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzICs9ICcgaGlkZGVuLWNvbHVtbi1jaGVja2JveCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmhpZGRlbk9yZGVyQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzICs9ICcgaGlkZGVuLWNvbHVtbi1vcmRlcic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0Q29sdW1uU2NoZW1hKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSkge1xuICAgICAgICBpZiAoIWNvbHMgfHwgIWNvbHMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGxldCBjb2xGdW5jdGlvbiA9IG51bGwsIGNvbEdyb3VwID0gbnVsbCwgY29sSGFzVG9nZ2xlSWNvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wuc2hvd1RvZ2dsZUljb24pIHtcbiAgICAgICAgICAgICAgICBjb2xIYXNUb2dnbGVJY29uID0gY29sO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbC5maWVsZCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY29sRnVuY3Rpb24gPSBjb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2wuZ3JvdXApIHtcbiAgICAgICAgICAgICAgICBjb2wuZ3JvdXAgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb2xHcm91cCA9IGNvbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb2xGdW5jdGlvbiAmJiAhY29sRnVuY3Rpb24ud2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoRnVuY3Rpb25Db2x1bW4gPSBjb2xGdW5jdGlvbi53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbEhhc1RvZ2dsZUljb24pIHtcbiAgICAgICAgICAgIGNvbEhhc1RvZ2dsZUljb24gPSB0aGlzLnNldHRpbmcuY29sc1swXTtcbiAgICAgICAgfVxuICAgICAgICBjb2xIYXNUb2dnbGVJY29uLmNvbEhhc1RvZ2dsZUljb24gPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50S2V5KCk7XG4gICAgICAgIHRoaXMuZ2V0Q29sb3JTZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuZ2V0Q29sdW1uU2V0dGluZyhjb2xHcm91cCk7XG4gICAgICAgIHRoaXMuZ2V0UGFnZVNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5leHRlbmRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5hcHBseUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlckNvbHVtbih0aGlzLnNldHRpbmcuY29scyk7XG4gICAgfVxuXG4gICAgZ2V0Q29tcG9uZW50S2V5KCkge1xuICAgICAgICBjb25zdCBwYXJlbnRDbGFzcyA9IHRoaXMuaXNUcmVlVGFibGUgPyBFbnVtUHJvcGVydGllcy5UUkVFX0xJU1QgOiBFbnVtUHJvcGVydGllcy5DUlVEX0xJU1Q7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xvc2VzdChwYXJlbnRDbGFzcyk/LnBhcmVudE5vZGU/LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgICAgIHRoaXMuY29tcG9uZW50S2V5ID0gYCR7bG9jYXRpb24ucGF0aG5hbWV9JHtjb21wb25lbnROYW1lID8gJy8nICsgY29tcG9uZW50TmFtZSA6ICcnfSR7dGhpcy5zZXR0aW5nLnNldHRpbmdLZXkgPyAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleSA6ICcnfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRlbmRDb2x1bW5zKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSwgYXBwZW5kQ29sID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmID0gW107XG4gICAgICAgIGlmICghY29scykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGVtcDogQ29sdW1uU2NoZW1hQmFzZVtdID0gW107XG4gICAgICAgIGNvbnN0IHRtcENvbHMgPSBbLi4uY29sc107XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzLmZvckVhY2goY29sUmVvcmRlciA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xzW2ldLmZpZWxkID09IGNvbFJlb3JkZXIuY29sdW1uQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKGNvbHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29scy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gQ8OybiBs4bqhaSBuaOG7r25nIGNvZGUgbcOgIGtow7RuZyDEkcaw4bujYyBj4bqldSBow6xuaCB0aMOsIGdow6lwIGzhuqFpIHRoZW8gaW5kZXggxJHGsOG7o2Mga2hhaSBiw6FvXG4gICAgICAgICAgICBsZXQgdGVtcENvbHM6IENvbHVtblNjaGVtYUJhc2VbXSA9IFtdO1xuICAgICAgICAgICAgY29scy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4Q29sT2xkID0gdG1wQ29scy5maW5kSW5kZXgocCA9PiBwLmZpZWxkID09IGNvbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4Q29sT2xkID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcC5zcGxpY2UoMCwgMCwgY29sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFTDrG0gduG7iyB0csOtIGPhu6dhIGPhu5l0IHBow61hIHRyxrDhu5tjIHRyb25nIGxpc3QgcmVvcmRlciBt4bubaVxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXhDb2xCZWZvcmVOZXcgPSB0ZW1wLmZpbmRJbmRleChwID0+IHAuZmllbGQgPT0gdG1wQ29sc1tpbmRleENvbE9sZCAtIDFdLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4Q29sQmVmb3JlTmV3ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29scy5zcGxpY2UoMCwgMCwgY29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFTDrG0gduG7iyB0csOtIGPhu6dhIGPhu5l0IHRyxrDhu5tjIGPhu5l0IMSRYW5nIGtp4buDbSB0cmEgdHJvbmcgbGlzdCBj4buZdCBn4buRY1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb2xPbGQgPSB0bXBDb2xzLmZpbmRJbmRleChwID0+IHAuZmllbGQgPT0gdG1wQ29sc1tpbmRleENvbE9sZCAtIDFdLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Q29sQmVmb3JlTmV3ID0gdGVtcC5maW5kSW5kZXgocCA9PiBwLmZpZWxkID09IHRtcENvbHNbaW5kZXhDb2xPbGQgLSAxXS5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gPT4gxJDhur9uIGtoaSB0aOG6pXkgdGjDrCBhZGQgY+G7mXQgaGnhu4duIHThuqFpIHbDoCBsaXN0IHThuqFtIHbDoG8gduG7iyB0csOtIGNow6huXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleENvbEJlZm9yZU5ldyA9PSB0ZW1wLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaChjb2wsIC4uLnRlbXBDb2xzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuc3BsaWNlKGluZGV4Q29sQmVmb3JlTmV3ICsgMSwgMCwgY29sLCAuLi50ZW1wQ29scyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVtcENvbHMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgICBjb2xzLnNwbGljZSgwLCBjb2xzLmxlbmd0aCk7XG4gICAgICAgIGNvbHMuc3BsaWNlKDAsIDAsIC4uLnRlbXApO1xuXG4gICAgICAgIGxldCBmaXJzdENvbFZpc2libGUgPSBudWxsO1xuICAgICAgICBsZXQgZm91bmRJdGVtU2hvd0VkaXRMaW5rID0gZmFsc2U7XG4gICAgICAgIHRlbXAuc3BsaWNlKDAsIHRlbXAubGVuZ3RoKTtcbiAgICAgICAgbGV0IHRtcENvbDogQ29sdW1uU2NoZW1hQmFzZSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBjb2xzKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5yYXdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXAucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmRldGFpbHMuZmluZChwID0+IHAuY29sdW1uQ29kZSA9PSBlbGVtZW50LmZpZWxkKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbmQocCA9PiBwLmZpZWxkID09IGVsZW1lbnQuZmllbGQpO1xuXG4gICAgICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy52aXNpYmxlICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLnZpc2libGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBjb25maWcudmlzaWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbCkge1xuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQudmlzaWJsZSA9IGNvbC52aXNpYmxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQubGFiZWwgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZWxlbWVudC5sYWJlbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLnRleHRBbGlnbiAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy50ZXh0QWxpZ24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnRleHRBbGlnbiA9IGNvbmZpZy50ZXh0QWxpZ247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2wpIHtcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50LnRleHRBbGlnbiA9IGNvbC50ZXh0QWxpZ247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLndpZHRoICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLndpZHRoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC53aWR0aCA9IGNvbmZpZy53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbCkge1xuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQud2lkdGggPSBjb2wud2lkdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LmRhdGFUeXBlID09IG51bGwgfHwgZWxlbWVudC5kYXRhVHlwZSA9PSB1bmRlZmluZWQgfHwgZWxlbWVudC5kYXRhVHlwZSA9PSAnJykge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZGF0YVR5cGUgPSBEYXRhVHlwZS5zdHJpbmc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnZpc2libGVcbiAgICAgICAgICAgICAgICB8fCAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQuZmllbGQgPT0gdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZpZWxkXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYmFzZVNlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvbnRyb2xUeXBlID0gQ29udHJvbFR5cGUuZHJvcGRvd247XG4gICAgICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5yYXdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYucHVzaChuZXcgUmVmRmllbGQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlRmllbGQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmFsdWVGaWVsZCA9ICdpZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kaXNwbGF5RmllbGQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZGlzcGxheUZpZWxkID0gJ3Rlbic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXBDb2wgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlZkZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd0NvbHVtbjogZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGVsZW1lbnQuZGF0YVR5cGVSZWZGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBlbGVtZW50LmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBlbGVtZW50LmFsbG93RmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICEodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQuZmllbGQgPT0gdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdSZWZGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmRldGFpbHMuZmluZChwID0+IHAuY29sdW1uQ29kZSA9PSB0bXBDb2wuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ1JlZkZpZWxkICYmIGNvbmZpZ1JlZkZpZWxkLnZpc2libGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcENvbC52aXNpYmxlID0gY29uZmlnUmVmRmllbGQudmlzaWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCh0bXBDb2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Q29sVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q29sVmlzaWJsZSA9IHRtcENvbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50LmRhdGFTb3VyY2UgJiYgZWxlbWVudC5kYXRhU291cmNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cm9sVHlwZSA9IENvbnRyb2xUeXBlLmRyb3Bkb3duO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQucmF3Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ29sID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWZGaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdDb2x1bW46IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBlbGVtZW50LmRhdGFUeXBlUmVmRmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgZWxlbWVudC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZWxlbWVudC5hbGxvd0ZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhKHRoaXMuc2V0dGluZy5ncm91cENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlbGVtZW50LmZpZWxkID09IHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnUmVmRmllbGQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzLmZpbmQocCA9PiBwLmNvbHVtbkNvZGUgPT0gdG1wQ29sLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdSZWZGaWVsZCAmJiBjb25maWdSZWZGaWVsZC52aXNpYmxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDb2wudmlzaWJsZSA9IGNvbmZpZ1JlZkZpZWxkLnZpc2libGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2godG1wQ29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdENvbFZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENvbFZpc2libGUgPSB0bXBDb2w7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWZpcnN0Q29sVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdENvbFZpc2libGUgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuZm9yY2VHZXREYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYmFzZVNlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWVGaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlRmllbGQgPSAnaWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXlGaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRpc3BsYXlGaWVsZCA9ICd0ZW4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnNob3dFZGl0TGluaykge1xuICAgICAgICAgICAgICAgIGZvdW5kSXRlbVNob3dFZGl0TGluayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZEl0ZW1TaG93RWRpdExpbmsgJiYgZmlyc3RDb2xWaXNpYmxlKSB7XG4gICAgICAgICAgICBmaXJzdENvbFZpc2libGUuc2hvd0VkaXRMaW5rID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb2xzLmxlbmd0aCA9IDA7XG4gICAgICAgIGNvbHMucHVzaCguLi50ZW1wKTtcblxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtTGVuZ3RoID0gW107XG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZEhhc01heGltdW1Xb3JkID0gW107XG4gICAgICAgIGNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb2wudmlzaWJsZSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGNvbC5tYXhXb3JkRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZEhhc01heGltdW1Xb3JkLnB1c2goY29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5tYXhMZW5ndGhEaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bUxlbmd0aC5wdXNoKGNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JtYXRDb2x1bW5zKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICAgICAgICBpZiAoY29sLmRhdGFUeXBlID09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgIGlmICghY29sLmZvcm1hdCkgY29sLmZvcm1hdCA9ICdub3JtYWwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sLmV4dGVuZERhdGEuc3R5bGUgPSB0aGlzLmdldENvbHVtblN0eWxlKGNvbCk7XG4gICAgICAgICAgICBjb2wuZXh0ZW5kRGF0YS5oZWFkZXJTdHlsZSA9IHRoaXMuZ2V0Q29sdW1uU3R5bGUoY29sLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbC5leHRlbmREYXRhLmhlYWRlckNsYXNzID0gdGhpcy5nZXRDZWxsQ2xhc3NIZWFkZXIoY29sKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uU2V0dGluZyhjb2xHcm91cDogQ29sdW1uU2NoZW1hQmFzZSkge1xuICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gPSBjb2xHcm91cDtcbiAgICAgICAgY29uc3QgZGF0YVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xVTU5fU0VUVElORyk7XG4gICAgICAgIGNvbnN0IGpzb25EYXRhID0gdGhpcy50cnlQYXJzZUpzb24oZGF0YVNldHRpbmcpO1xuICAgICAgICBpZiAoZGF0YVNldHRpbmcgJiYganNvbkRhdGEudmFsaWQgJiYganNvbkRhdGEudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBqc29uRGF0YS52YWx1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZXR0aW5ncykge1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IGVsZW1lbnQgPSBzZXR0aW5nc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gdGhpcy5jb21wb25lbnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkID0gZWxlbWVudC5zZXR0aW5nLnNvcnRGaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydERpciA9IGVsZW1lbnQuc2V0dGluZy5zb3J0RGlyID8gZWxlbWVudC5zZXR0aW5nLnNvcnREaXIgOiAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydERpciA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQgPSBlbGVtZW50LnNldHRpbmcuZ3JvdXBGaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBJbkNsaWVudCA9IGVsZW1lbnQuc2V0dGluZy5ncm91cEluQ2xpZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQgJiYgY29sR3JvdXAgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRHcm91cEZpZWxkKGNvbEdyb3VwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzID0gZWxlbWVudC5zZXR0aW5nLmRldGFpbHM7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2xHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5zZXRHcm91cEZpZWxkKGNvbEdyb3VwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0R3JvdXBGaWVsZChjb2xHcm91cCkge1xuICAgICAgICBpZiAoKGNvbEdyb3VwLmRhdGFTb3VyY2UgJiYgY29sR3JvdXAuZGF0YVNvdXJjZS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgfHwgY29sR3JvdXAuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQgPSBgc3RyJHtjb2xHcm91cC5maWVsZH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCA9IGNvbEdyb3VwLmZpZWxkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlQ29sdW1uU2V0dGluZygpIHtcbiAgICAgICAgbGV0IGNvbHVtblNldHRpbmcgPSBbXTtcbiAgICAgICAgbGV0IGNoZWNrRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZGF0YVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xVTU5fU0VUVElORyk7XG4gICAgICAgIGlmIChkYXRhU2V0dGluZykge1xuICAgICAgICAgICAgY29sdW1uU2V0dGluZyA9IEpTT04ucGFyc2UoZGF0YVNldHRpbmcpO1xuICAgICAgICAgICAgY29uc3QgaXRlbVNldHRpbmcgPSBjb2x1bW5TZXR0aW5nLmZpbmQocSA9PiBxLnBhdGhuYW1lID09IHRoaXMuY29tcG9uZW50S2V5KTtcbiAgICAgICAgICAgIGlmIChpdGVtU2V0dGluZykge1xuICAgICAgICAgICAgICAgIGl0ZW1TZXR0aW5nLnNldHRpbmcuc29ydEZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkO1xuICAgICAgICAgICAgICAgIGl0ZW1TZXR0aW5nLnNldHRpbmcuc29ydERpciA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXI7XG4gICAgICAgICAgICAgICAgaXRlbVNldHRpbmcuc2V0dGluZy5ncm91cEZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZDtcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLmdyb3VwSW5DbGllbnQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEluQ2xpZW50O1xuICAgICAgICAgICAgICAgIGl0ZW1TZXR0aW5nLnNldHRpbmcuZGV0YWlscyA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmRldGFpbHM7XG4gICAgICAgICAgICAgICAgY2hlY2tFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoZWNrRXhpc3QpIHtcbiAgICAgICAgICAgIGNvbHVtblNldHRpbmcucHVzaCh7IHBhdGhuYW1lOiB0aGlzLmNvbXBvbmVudEtleSwgc2V0dGluZzogdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xVTU5fU0VUVElORywgSlNPTi5zdHJpbmdpZnkoY29sdW1uU2V0dGluZykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVsZXRlQ29sdW1uU2V0dGluZygpIHtcbiAgICAgICAgbGV0IGNvbHVtblNldHRpbmcgPSBbXTtcbiAgICAgICAgY29uc3QgZGF0YVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xVTU5fU0VUVElORyk7XG4gICAgICAgIGlmIChkYXRhU2V0dGluZykge1xuICAgICAgICAgICAgY29sdW1uU2V0dGluZyA9IEpTT04ucGFyc2UoZGF0YVNldHRpbmcpO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb2x1bW5TZXR0aW5nLmZpbmRJbmRleChxID0+IHEucGF0aG5hbWUgPT0gdGhpcy5jb21wb25lbnRLZXkpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIGNvbHVtblNldHRpbmcuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmRldGFpbHMgPSBbXTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcsIEpTT04uc3RyaW5naWZ5KGNvbHVtblNldHRpbmcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbG9yU2V0dGluZygpIHtcbiAgICAgICAgY29uc3QgZGF0YVBhZ2VTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MT1JfU0VUVElORyk7XG4gICAgICAgIGlmIChkYXRhUGFnZVNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhUGFnZVNldHRpbmcpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBzZXR0aW5nc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gdGhpcy5jb21wb25lbnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQgPSBlbGVtZW50LmNvbG9yRmlsdGVyRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlID0gZWxlbWVudC5jb2xvckZpbHRlclRhYmxlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZUNvbG9yU2V0dGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FjaGVDb2xvclNldHRpbmcoKSB7XG4gICAgICAgIHRoaXMuX2NvbG9yRmlsdGVyVGFibGUgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGVbaV07XG4gICAgICAgICAgICBjb25zdCBpdGVtVmFsdWVzID0gW107XG4gICAgICAgICAgICBpdGVtVmFsdWVzWzBdID0gaXRlbS5jb21wYXJlVHlwZTtcbiAgICAgICAgICAgIGl0ZW1WYWx1ZXNbMV0gPSBpdGVtLmZpbHRlclZhbHVlO1xuICAgICAgICAgICAgaXRlbVZhbHVlc1syXSA9IHRoaXMuY29udmVydFRvRGF0ZShpdGVtLmZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgIGl0ZW1WYWx1ZXNbM10gPSBOdW1iZXIoaXRlbS5maWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICBpdGVtVmFsdWVzWzRdID0gKC90cnVlL2kpLnRlc3QoaXRlbS5maWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICBpdGVtVmFsdWVzWzVdID0gaXRlbS5jb2xvcjtcbiAgICAgICAgICAgIHRoaXMuX2NvbG9yRmlsdGVyVGFibGUucHVzaChpdGVtVmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29sb3JTZXR0aW5nKCkge1xuICAgICAgICBsZXQgY29sb3JTZXR0aW5nID0gW107XG4gICAgICAgIGxldCBjaGVja0V4aXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRhdGFDb2xvclNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xPUl9TRVRUSU5HKTtcbiAgICAgICAgaWYgKGRhdGFDb2xvclNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbG9yU2V0dGluZyA9IEpTT04ucGFyc2UoZGF0YUNvbG9yU2V0dGluZyk7XG4gICAgICAgICAgICBjb2xvclNldHRpbmcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gdGhpcy5jb21wb25lbnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb2xvckZpbHRlckZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29sb3JGaWx0ZXJUYWJsZSA9IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlO1xuICAgICAgICAgICAgICAgICAgICBjaGVja0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hlY2tFeGlzdCkge1xuICAgICAgICAgICAgY29sb3JTZXR0aW5nLnB1c2goe1xuICAgICAgICAgICAgICAgIHBhdGhuYW1lOiB0aGlzLmNvbXBvbmVudEtleSxcbiAgICAgICAgICAgICAgICBjb2xvckZpbHRlckZpZWxkOiB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgICBjb2xvckZpbHRlclRhYmxlOiB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJUYWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xPUl9TRVRUSU5HLCBKU09OLnN0cmluZ2lmeShjb2xvclNldHRpbmcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhZ2VTZXR0aW5nKCkge1xuICAgICAgICBjb25zdCBkYXRhUGFnZVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5QQUdFX1NFVFRJTkcpO1xuICAgICAgICBpZiAoZGF0YVBhZ2VTZXR0aW5nKSB7XG4gICAgICAgICAgICBjb25zdCBwYWdlU2V0dGluZ3MgPSBKU09OLnBhcnNlKGRhdGFQYWdlU2V0dGluZyk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VTZXR0aW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwYWdlU2V0dGluZ3NbaV07XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHRoaXMuY29tcG9uZW50S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSA9IGVsZW1lbnQucGFnZVNpemU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZVBhZ2VTZXR0aW5nKCkge1xuICAgICAgICBsZXQgcGFnZVNldHRpbmcgPSBbXTtcbiAgICAgICAgbGV0IGNoZWNrRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZGF0YVBhZ2VTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuUEFHRV9TRVRUSU5HKTtcbiAgICAgICAgaWYgKGRhdGFQYWdlU2V0dGluZykge1xuICAgICAgICAgICAgcGFnZVNldHRpbmcgPSBKU09OLnBhcnNlKGRhdGFQYWdlU2V0dGluZyk7XG4gICAgICAgICAgICBwYWdlU2V0dGluZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhdGhuYW1lID09PSB0aGlzLmNvbXBvbmVudEtleSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhZ2VTaXplID0gdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2VTaXplO1xuICAgICAgICAgICAgICAgICAgICBjaGVja0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hlY2tFeGlzdCkge1xuICAgICAgICAgICAgcGFnZVNldHRpbmcucHVzaCh7IHBhdGhuYW1lOiB0aGlzLmNvbXBvbmVudEtleSwgcGFnZVNpemU6IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLlBBR0VfU0VUVElORywgSlNPTi5zdHJpbmdpZnkocGFnZVNldHRpbmcpKTtcbiAgICB9XG5cbiAgICBjaGVja0lzSW5zaWRlRGlhbG9nKCkge1xuICAgICAgICBjb25zdCAkZGlhbG9nID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5jbG9zZXN0KCcucC1kaWFsb2cnKTtcbiAgICAgICAgcmV0dXJuICEhJGRpYWxvZztcbiAgICB9XG5cbiAgICBoYW5kbGVSZWFkeSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maXhIZWlnaHRUeXBlSW5EaWFsb2cpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrSXNJbnNpZGVEaWFsb2coKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5oZWlnaHRUeXBlID0gSGVpZ2h0VHlwZS5jdXN0b207XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblJlYWR5LmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0FsbG93U2VsZWN0Um93KGV2dCwgcm93RGF0YSkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcuZGlzYWJsZVJvd1NlbGVjdFdoZW5DbGlja0FjdGlvblxuICAgICAgICAgICAgJiYgKGV2dC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCcubGluay1vci1hY3Rpb24nKVxuICAgICAgICAgICAgICAgIHx8IGV2dC50YXJnZXQuY2xvc2VzdCgnLmxpbmstb3ItYWN0aW9uJylcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2xpY2sgdsOgbyBjaGVja2JveFxuICAgICAgICBpZiAoZXZ0LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3AtY2hlY2tib3gtYm94JykgfHwgZXZ0LnRhcmdldC5jbG9zZXN0KCcucC1jaGVja2JveC1ib3gnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY2hlY2tBbGxvd1NlbGVjdFJvdyAmJiAhdGhpcy5zZXR0aW5nLmNoZWNrQWxsb3dTZWxlY3RSb3cocm93RGF0YSwgZXZ0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGhhbmRsZVNlbGVjdFJvdyA9IChldnQsIGRhdGEpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oYXNDdXN0b21IYW5kbGVDbGlja1Jvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQWxsb3dTZWxlY3RSb3coZXZ0LCBkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9sZENoZWNrZWQgPSBkYXRhLl9jaGVja2VkO1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93KSB7XG4gICAgICAgICAgICBsZXQgZGF0YVRvQ2xlYXJDaGVja2VkID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0Um93Q2xpY2spIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0Um93Q2xpY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkYXRhVG9DbGVhckNoZWNrZWQgPSB0aGlzLl9yYXdEYXRhU291cmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YVRvQ2xlYXJDaGVja2VkID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YVRvQ2xlYXJDaGVja2VkLmZvckVhY2goKHAsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgcC5fY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLl9jaGVja2VkID0gIW9sZENoZWNrZWQ7XG4gICAgICAgIGxldCBmaXJlRXZlbnQgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5maXJlRXZlbnRXaGVuUmVTZWxlY3QpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbUxhc3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtTGFzdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGEoZGF0YSwgZXZ0LnRhcmdldC5jbG9zZXN0KCd0cicpLCBmaXJlRXZlbnQpO1xuICAgIH07XG5cbiAgICBoYW5kbGVTZWxlY3RSb3dHcm91cCA9IChldnQsIGRhdGEpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQWxsb3dTZWxlY3RSb3coZXZ0LCBkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLm11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zTW9kaWZpZWQgPSBbLi4udGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zXTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChwLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHAuX2NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFpdGVtc01vZGlmaWVkLnNvbWUocSA9PiBxLmlkID09IGRhdGEuaWQpKSB7XG4gICAgICAgICAgICAgICAgaXRlbXNNb2RpZmllZC5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbXNNb2RpZmllZC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhX0dyb3VwKGl0ZW0sIG51bGwsIGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEuX2NoZWNrZWQgPSAhZGF0YS5fY2hlY2tlZDtcblxuICAgICAgICBsZXQgZmlyZUV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuZmlyZUV2ZW50V2hlblJlU2VsZWN0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1MYXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhc3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIGZpcmVFdmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhX0dyb3VwKGRhdGEsIGV2dC50YXJnZXQuY2xvc2VzdCgndHInKSwgZmlyZUV2ZW50KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBzZXRMYXN0SXRlbVNlbGVjdGVkKCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtTGFzdCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc1t0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3QgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZW1pdFJvd1NlbGVjdCh0ckVsZW1lbnQsIGRhdGEpIHtcbiAgICAgICAgdGhpcy5vblJvd1NlbGVjdC5lbWl0KHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IHRyRWxlbWVudCxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZVRvZ2dsZVJvdyhyb3dEYXRhLCBldnQpIHtcbiAgICAgICAgdGhpcy50YWJsZS50b2dnbGVSb3cocm93RGF0YSwgZXZ0KTtcbiAgICB9XG4gICAgcHVibGljIGhhbmRsZUV4cGFuZFJvdyhyb3dEYXRhLCBmaWVsZCwgaXNDb2xsYXBzZSkge1xuICAgICAgICByb3dEYXRhLl9fZXhwYW5kW2ZpZWxkXSA9ICFpc0NvbGxhcHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3dDb250ZXh0TWVudShldnQpIHtcbiAgICAgICAgLy8gc2V0VGltZW91dCDEkeG7gyBmaXggYnVnIGhp4buDbiB0aOG7iyBjb250ZXh0IG1lbnUgdHLDoG4gcmEgbmdvw6BpIG3DoG4gaMOsbmhcbiAgICAgICAgc2V0VGltZW91dChmID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dE1lbnUuc2hvdyhldnQpO1xuICAgICAgICB9LCAxMCk7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJzKCk6IEZpbHRlcltdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9kZWZhdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9kZWZhdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJfY29tbW9uU2VhcmNoKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9jb21tb25TZWFyY2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9jdXN0b20pIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmlsdGVyX2N1c3RvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2NvbHVtbikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJfYWR2YW5jZVNlYXJjaCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfYWR2YW5jZVNlYXJjaCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRHcmlkSW5mbygpIHtcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xuICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2VTaXplXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsdGVyczogdGhpcy5nZXRGaWx0ZXJzKCksXG4gICAgICAgICAgICBzb3J0czogW10sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5fZ3JvdXBGaWVsZCAmJiAhdGhpcy5fZ3JvdXBJbkNsaWVudCkge1xuICAgICAgICAgICAgZ3JpZEluZm8uc29ydHMudW5zaGlmdCh7IGZpZWxkOiB0aGlzLl9ncm91cEZpZWxkLCBkaXI6IDEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3NvcnRGaWVsZCAmJiB0aGlzLl9zb3J0RGlyICE9PSAwKSB7XG4gICAgICAgICAgICBncmlkSW5mby5zb3J0cy5wdXNoKHsgZmllbGQ6IHRoaXMuX3NvcnRGaWVsZCwgZGlyOiB0aGlzLl9zb3J0RGlyIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdyaWRJbmZvO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVTZWFyY2hBZHZzKGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyX2FkdmFuY2VTZWFyY2ggPSBmaWx0ZXJzO1xuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IDE7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGVTZWFyY2goZGF0YSkge1xuICAgICAgICB0aGlzLmZpbHRlcl9jb21tb25TZWFyY2ggPSBkYXRhLmZpbHRlcnM7XG4gICAgICAgIHRoaXMuZGF0YVNlYXJjaENvbW1vbiA9IGRhdGEuZGF0YUZvcm07XG4gICAgICAgIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlID0gMTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlSW5pdEFkdmFuY2VTZWFyY2goZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICAgICAgdGhpcy5maWx0ZXJfYWR2YW5jZVNlYXJjaCA9IGZpbHRlcnM7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREYXRhKCkge1xuICAgICAgICBjb25zdCBpbmZvR2V0RGF0YSA9IHtcbiAgICAgICAgICAgIGdyaWRJbmZvOiB0aGlzLmdldEdyaWRJbmZvKCksXG4gICAgICAgICAgICBkYXRhU2VhcmNoQ29tbW9uOiB0aGlzLmRhdGFTZWFyY2hDb21tb25cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zaG93U2F2ZVJlb3JkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vblJlbG9hZC5lbWl0KGluZm9HZXREYXRhKTtcbiAgICB9XG5cbiAgICByZWxvYWQoZmlsdGVyX2N1c3RvbT86IEZpbHRlcltdLCBwYWdlID0gMSkge1xuICAgICAgICB0aGlzLmZpbHRlcl9jdXN0b20gPSBmaWx0ZXJfY3VzdG9tO1xuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IHBhZ2U7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkYW5oU29UaHVUdUdyb3VwTGFzdGVzdCgpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNvcnRHcm91cExhc3RNb2RlbEJhc2UoKS50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJ8SQw6FuaCBs4bqhaSBz4buRIHRo4bupIHThu7EgdGjDoG5oIGPDtG5nJywgZiA9PiB7XG5cbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGQoKSB7XG4gICAgICAgIHRoaXMub25BZGQuZW1pdCgpO1xuICAgIH1cbiAgICBwdWJsaWMgZXhwb3J0QWxsRGF0YSgpIHtcbiAgICAgICAgdGhpcy5vbkV4cG9ydEFsbC5lbWl0KCk7XG4gICAgfVxuXG4gICAgYXN5bmMgeHVhdENhY011Y0RhQ2hvbihpc1RyZWUgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dDb25maXJtRXhwb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBycyA9IGF3YWl0IHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIHh14bqldCBi4bqjbiBnaGkgxJHDoyBjaOG7jW4gKFbDoCBjw6FjIGLhuqNuIGdoaSBjb24gdMawxqFuZyDhu6luZyknLCAnWMOhYyBuaOG6rW4geHXhuqV0IGZpbGUnKTtcbiAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLnNldHRpbmcuZXhwb3J0SXRlbXNNb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydEl0ZW1zTW9kZS5Gcm9tSHRtbDpcbiAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydEJ5UmVhZGluZ0h0bWwoZmFsc2UsIGlzVHJlZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydEl0ZW1zTW9kZS5NYW51YWxHZXREYXRhOlxuICAgICAgICAgICAgY2FzZSBFeHBvcnRJdGVtc01vZGUuQXV0b0dldERhdGE6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVGhlIGZ1bmN0aW9uIGhhdmVuXFwndCBzdXBwb3J0ZWQgeWV0Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBwcmludEJ5UmVhZGluZ0h0bWwoaXNUcmVlID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93Q29uZmlybUV4cG9ydCkge1xuICAgICAgICAgICAgY29uc3QgcnMgPSBhd2FpdCB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBpbiBi4bqjbiBnaGkgxJHDoyBjaOG7jW4gKFbDoCBjw6FjIGLhuqNuIGdoaSBjb24gdMawxqFuZyDhu6luZyknLCAnWMOhYyBuaOG6rW4gaW4gZmlsZScpO1xuICAgICAgICAgICAgaWYgKCFycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkZXIgPSAnRGFuaCBzw6FjaCAnICsgdGhpcy5zZXR0aW5nLm9iamVjdE5hbWU7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpc1RyZWUgPyB0aGlzLnRyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50IDogdGhpcy50YWJsZS5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0YWJsZUVsZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICAgICAgY29uc3QgaGVhZEVsZSA9IHRhYmxlRWxlLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJyk7XG4gICAgICAgIGNvbnN0IGJvZHlFbGUgPSB0YWJsZUVsZS5xdWVyeVNlbGVjdG9yKCd0Ym9keScpO1xuXG4gICAgICAgIC8vIGNvbnN0IGFyckhlYWRFbGUgPSB0aGlzLmdldEFyckhlYWRCeUh0bWwoaGVhZEVsZSk7XG4gICAgICAgIGNvbnN0IGFyckhlYWRFbGUgPSB0aGlzLmdldEFyckhlYWRCeUh0bWxGb3JQcmludChoZWFkRWxlKTtcbiAgICAgICAgY29uc3QgZmlyc3RIZWFkID0gYXJySGVhZEVsZS5hbGxDb2w7XG4gICAgICAgIGNvbnN0IGFyclJvd0RhdGEgPSB0aGlzLmdldEFyclJvd0RhdGFCeUh0bWwoYm9keUVsZSwgZmlyc3RIZWFkKTtcblxuICAgICAgICAvLyBjb25zdCBzdHJIZWFkRWxlID0gdGhpcy5oZWFkSHRtbFRvU3RyaW5nKGFyckhlYWRFbGUpO1xuICAgICAgICBjb25zdCBzdHJIZWFkRWxlID0gdGhpcy5oZWFkSHRtbFRvU3RyaW5nTmV3KGFyckhlYWRFbGUuaGVhZGVyKTtcbiAgICAgICAgY29uc3Qgc3RyQm9keUVsZSA9IHRoaXMucm93RGF0YUh0bWxUb1N0cmluZyhhcnJSb3dEYXRhKTtcbiAgICAgICAgY29uc3QgY3NzID0gJzxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj50YWJsZSB0aCwgdGFibGUgdGQge2JvcmRlcjoxcHggc29saWQgIzAwMDt9IHRhYmxlIHRoIHt0ZXh0LWFsaWduOiBjZW50ZXI7fSB0YWJsZSB7d2lkdGg6IDEwMCU7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTt9IHRhYmxlIHRkOmZpcnN0LWNoaWxkIHt0ZXh0LWFsaWduOiBjZW50ZXI7fTwvc3R5bGU+JztcbiAgICAgICAgY29uc3QgdGFibGUgPSBgJHtjc3N9PHRhYmxlPiR7c3RySGVhZEVsZX0ke3N0ckJvZHlFbGV9PC90YWJsZT5gO1xuICAgICAgICB0aGlzLl9wcmludFNlcnZpY2UucHJpbnRIdG1sQ29udGVudCh0YWJsZSwgaGVhZGVyLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludEJ5UmVhZGluZ0h0bWxIYXNSb3dTcGFuKGlzVHJlZSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9ICdEYW5oIHPDoWNoICcgKyB0aGlzLnNldHRpbmcub2JqZWN0TmFtZTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGlzVHJlZSA/IHRoaXMudHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQgOiB0aGlzLnRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRhYmxlRWxlID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0YWJsZScpO1xuICAgICAgICBjb25zdCBoZWFkRWxlID0gdGFibGVFbGUucXVlcnlTZWxlY3RvcigndGhlYWQnKTtcbiAgICAgICAgY29uc3QgYm9keUVsZSA9IHRhYmxlRWxlLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5Jyk7XG5cbiAgICAgICAgLy8gY29uc3QgYXJySGVhZEVsZSA9IHRoaXMuZ2V0QXJySGVhZEJ5SHRtbChoZWFkRWxlKTtcbiAgICAgICAgY29uc3QgYXJySGVhZEVsZSA9IHRoaXMuZ2V0QXJySGVhZEJ5SHRtbEZvclByaW50KGhlYWRFbGUpO1xuICAgICAgICBjb25zdCBmaXJzdEhlYWQgPSBhcnJIZWFkRWxlLmFsbENvbDtcbiAgICAgICAgY29uc3QgYXJyUm93RGF0YSA9IHRoaXMuZ2V0QXJyUm93RGF0YUhhc1Jvd1NwYW5CeUh0bWwoYm9keUVsZSwgZmlyc3RIZWFkKTtcblxuICAgICAgICAvLyBjb25zdCBzdHJIZWFkRWxlID0gdGhpcy5oZWFkSHRtbFRvU3RyaW5nKGFyckhlYWRFbGUpO1xuICAgICAgICBjb25zdCBzdHJIZWFkRWxlID0gdGhpcy5oZWFkSHRtbFRvU3RyaW5nTmV3KGFyckhlYWRFbGUpO1xuICAgICAgICBjb25zdCBzdHJCb2R5RWxlID0gdGhpcy5yb3dEYXRhSHRtbEhhc1Jvd1NwYW5Ub1N0cmluZyhhcnJSb3dEYXRhKTtcbiAgICAgICAgY29uc3QgY3NzID0gJzxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj50YWJsZSB0aCwgdGFibGUgdGQge2JvcmRlcjoxcHggc29saWQgIzAwMDt9IHRhYmxlIHRoIHt0ZXh0LWFsaWduOiBjZW50ZXI7fSB0YWJsZSB7d2lkdGg6IDEwMCU7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTt9IHRhYmxlIHRkOmZpcnN0LWNoaWxkIHt0ZXh0LWFsaWduOiBjZW50ZXI7fTwvc3R5bGU+JztcbiAgICAgICAgY29uc3QgdGFibGUgPSBgJHtjc3N9PHRhYmxlPiR7c3RySGVhZEVsZX0ke3N0ckJvZHlFbGV9PC90YWJsZT5gO1xuICAgICAgICB0aGlzLl9wcmludFNlcnZpY2UucHJpbnRIdG1sQ29udGVudCh0YWJsZSwgaGVhZGVyLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRBbGwoaXNUcmVlID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5leHBvcnRCeVJlYWRpbmdIdG1sKHRydWUsIGlzVHJlZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4cG9ydEJ5UmVhZGluZ0h0bWwoZXhwb3J0QWxsID0gZmFsc2UsIGlzVHJlZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0NoxrBhIGjhu5cgdHLhu6MgeHXhuqV0IGPDsyBuaMOzbSBk4buvIGxp4buHdSEnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpc1RyZWUgPyB0aGlzLnRyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50IDogdGhpcy50YWJsZS5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0YWJsZUVsZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICAgICAgY29uc3QgaGVhZEVsZSA9IHRhYmxlRWxlLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJyk7XG4gICAgICAgIGNvbnN0IGJvZHlFbGUgPSB0YWJsZUVsZS5xdWVyeVNlbGVjdG9yKCd0Ym9keScpO1xuXG4gICAgICAgIC8vIGhlYWRlci5cbiAgICAgICAgLy8gY29uc3QgYXJySGVhZCA9IHRoaXMuZ2V0QXJySGVhZEJ5SHRtbChoZWFkRWxlKTtcbiAgICAgICAgbGV0IGFyckhlYWQgPSB0aGlzLmdldEFyckhlYWRCeUh0bWxOZXcoaGVhZEVsZSk7XG4gICAgICAgIGlmICghYXJySGVhZD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBib2R5LlxuICAgICAgICBjb25zdCBmaXJzdEhlYWQgPSBhcnJIZWFkWzBdO1xuICAgICAgICAvLyBjb25zdCBhcnJSb3dEYXRhID0gdGhpcy5nZXRBcnJSb3dEYXRhQnlIdG1sKGJvZHlFbGUsIGFyckhlYWQsIGV4cG9ydEFsbCk7XG4gICAgICAgIGNvbnN0IGFyclJvd0RhdGFBbGwgPSB0aGlzLmdldEFyclJvd0RhdGFIYXNSb3dTcGFuQnlIdG1sKGJvZHlFbGUsIGZpcnN0SGVhZCwgZXhwb3J0QWxsKTtcbiAgICAgICAgY29uc3QgYXJyUm93RGF0YSA9IHRoaXMuZ2V0QXJyUm93RGF0YUhhc1Jvd1NwYW5CeVJhd0RhdGEoYXJyUm93RGF0YUFsbCk7XG5cbiAgICAgICAgLy8gZXhwb3J0LlxuICAgICAgICBhcnJIZWFkID0gYXJySGVhZC5tYXAoeCA9PiB4Lm1hcCh6ID0+IHoudmFsdWUpKTtcbiAgICAgICAgLy8gY29uc3QgZGF0YUV4cG9ydCA9IFthcnJIZWFkLm1hcChpID0+IGkudmFsdWUpLCAuLi5hcnJSb3dEYXRhXTtcbiAgICAgICAgY29uc3QgZGF0YUV4cG9ydCA9IFsuLi5hcnJIZWFkLCAuLi5hcnJSb3dEYXRhXTtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBgRGFuaCBzw6FjaCAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfWA7XG4gICAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2Uub2JqZWN0VG9FeGNlbChkYXRhRXhwb3J0LCBmaWxlTmFtZSwgYXJySGVhZD8ubGVuZ3RoID8/IDEpO1xuICAgIH1cblxuICAgIGdldEFyclJvd0RhdGFIYXNSb3dTcGFuQnlSYXdEYXRhKHJhd0RhdGE6IGFueVtdID0gW10pIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHJhd0RhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhd0RhdGFbaW5kZXhdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByYXdEYXRhW2luZGV4XVtpXS5yb3dTcGFuOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZFtpbmRleCArIGpdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFtpbmRleCArIGpdID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVSb3codHJhbnNmb3JtZWRbaW5kZXhdLCBpLCByYXdEYXRhW2luZGV4XVtpXS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFtpbmRleCArIGpdW2ldID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkLm1hcChyb3cgPT4gcm93Lm1hcChjZWxsID0+IGNlbGwgfHwgJycpKTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZVJvdyhyb3dEYXRhLCBpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHJvd0RhdGFbaW5kZXhdICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVSb3cocm93RGF0YSwgaW5kZXggKyAxLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByb3dEYXRhW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhlYWRIdG1sVG9TdHJpbmcoYXJySGVhZEVsZSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGFyckhlYWRFbGUuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBgPHRoPiR7ZWxlbWVudC52YWx1ZX08L3RoPmA7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBoZWFkSHRtbFRvU3RyaW5nTmV3KGFyckhlYWRFbGUpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW1IZWFkZXIgb2YgYXJySGVhZEVsZSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICc8dHI+JztcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbVRoIG9mIGl0ZW1IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYDx0aCBjb2xTcGFuPVwiJHtpdGVtVGguY29sU3Bhbn1cIiByb3dTcGFuPVwiJHtpdGVtVGgucm93U3Bhbn1cIj4ke2l0ZW1UaC52YWx1ZX08L3RoPmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQgKz0gJzwvdHI+JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyByb3dEYXRhSHRtbFRvU3RyaW5nKHJvd0RhdGFzKSB7XG4gICAgICAgIGNvbnN0IGFyclJvd0RhdGEgPSBbXTtcbiAgICAgICAgcm93RGF0YXMuZm9yRWFjaCgoYXJyUm93RGF0YUNoaWxkLCBpbmRleENoaWxkKSA9PiB7XG4gICAgICAgICAgICBsZXQgcm93RGF0YSA9ICc8dHI+JztcbiAgICAgICAgICAgIGFyclJvd0RhdGFDaGlsZC5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAwICYmICF0aGlzLnNldHRpbmcuaGlkZGVuT3JkZXJDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YSArPSBgPHRkPiR7aW5kZXhDaGlsZCArIDF9PC90ZD5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YSArPSBgPHRkPiR7ZWxlbWVudH08L3RkPmA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByb3dEYXRhICs9ICc8L3RyPic7XG4gICAgICAgICAgICBhcnJSb3dEYXRhLnB1c2gocm93RGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXJyUm93RGF0YS5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFyckhlYWRCeUh0bWwoaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Um93ID0gaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJ3RyJyk7XG4gICAgICAgIGlmICghZmlyc3RSb3cpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFyclRoID0gZmlyc3RSb3cucXVlcnlTZWxlY3RvckFsbCgndGgnKTtcblxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94ID8gMCA6IDE7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gYXJyVGgubGVuZ3RoIC0gKHRoaXMuc2V0dGluZy5oaWRkZW5GdW5jdGlvbkNvbHVtbiA/IDAgOiAxKSAtIDE7XG4gICAgICAgIGlmIChzdGFydEluZGV4ID4gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJySGVhZGVyID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJUaFtpXS5pbm5lclRleHQpIHtcbiAgICAgICAgICAgICAgICBhcnJIZWFkZXIucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXJyVGhbaV0uaW5uZXJUZXh0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJySGVhZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBcnJIZWFkQnlIdG1sTmV3KGhlYWRlcikge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyO1xuICAgICAgICBjb25zdCBhbGxSb3cgPSBoZWFkZXIucXVlcnlTZWxlY3RvckFsbCgndHInKTtcbiAgICAgICAgY29uc3QgbHN0Um93ID0gZmlsdGVyLmNhbGwoYWxsUm93LCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuICFub2RlLmNsYXNzTmFtZS5pbmNsdWRlcygnZmlsdGVyLXJvdycpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGNvbnN0IGFsbFRoID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxzdFJvdykge1xuICAgICAgICAgICAgYWxsVGgucHVzaChpdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoJykpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heENvbFNpemUgPSBhbGxUaC5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0FyciA9IFsuLi5iXTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ld0Fyci5yZWR1Y2UoKHgsIHkpID0+IHkuY29sU3BhbiArIHgsIDApO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA+IGEgPyByZXN1bHQgOiBhO1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBtYXhDb2xTaXplIC0gKHRoaXMuc2V0dGluZy5oaWRkZW5GdW5jdGlvbkNvbHVtbiA/IDEgOiAyKTtcbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgbHN0Um93Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGFyclRoID0gWy4uLmFsbFRoW2luZF1dO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGFyclRoWzBdLmNsYXNzTmFtZS5pbmNsdWRlcygnY2hrYm94JykgPyAxIDogMDtcbiAgICAgICAgICAgIGlmIChzdGFydEluZGV4ID4gZW5kSW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0W2luZF0gPSByZXN1bHRbaW5kXSA/PyBbXTtcbiAgICAgICAgICAgIGxldCBjb2xJbmRleCA9IHJlc3VsdFtpbmRdLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG51bU9mQ29sU3BhbiA9IGFyclRoLnJlZHVjZSgoeCwgeSkgPT4geCArIHkuY29sU3BhbiAtIDEsIDApO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXggLSBudW1PZkNvbFNwYW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChhcnJUaFtpXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyVGhbaV0ucm93U3BhbiAmJiBhcnJUaFtpXS5yb3dTcGFuID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBhcnJUaFtpXS5yb3dTcGFuOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbaW5kICsgal0gPSByZXN1bHRbaW5kICsgal0gPz8gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpbmQgKyBqXVtjb2xJbmRleF0gPT0gbnVsbCB8fCByZXN1bHRbaW5kICsgal1bY29sSW5kZXhdID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbaW5kICsgal1bY29sSW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyclRoW2ldLmNvbFNwYW4gJiYgYXJyVGhbaV0uY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYXJyVGhbaV0uY29sU3BhbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpbmRdW2NvbEluZGV4XSA9PSBudWxsIHx8IHJlc3VsdFtpbmRdW2NvbEluZGV4XSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2luZF1bY29sSW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGNvbEluZGV4ICsgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBqID09IDAgPyBhcnJUaFtpXS5pbm5lclRleHQgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSBpbmQgKyAxOyBrIDwgbHN0Um93Lmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyUm93ID0gWy4uLmFsbFRoW2tdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2luZCArIGtdID0gcmVzdWx0W2luZCArIGtdID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFtpbmQgKyBrXVtjb2xJbmRleF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpbmQgKyBrXVtjb2xJbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGNvbEluZGV4ICsgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogb3RoZXJSb3dbal0uaW5uZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0W2luZF1bY29sSW5kZXhdID09IG51bGwgfHwgcmVzdWx0W2luZF1bY29sSW5kZXhdID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpbmRdW2NvbEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGNvbEluZGV4ICsgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFyclRoW2ldLmlubmVyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0W2luZF1bY29sSW5kZXhdID09IG51bGwgfHwgcmVzdWx0W2luZF1bY29sSW5kZXhdID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2luZF1bY29sSW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjb2xJbmRleCArIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBcnJIZWFkQnlIdG1sRm9yUHJpbnQoaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXI7XG4gICAgICAgIGNvbnN0IGFsbFJvdyA9IGhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKCd0cicpO1xuICAgICAgICBjb25zdCBsc3RSb3cgPSBbLi4uZmlsdGVyLmNhbGwoYWxsUm93LCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuICFub2RlLmNsYXNzTmFtZS5pbmNsdWRlcygnZmlsdGVyLXJvdycpO1xuICAgICAgICB9KV07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgICAgICAgIGFsbENvbDogW10sXG4gICAgICAgICAgICBoZWFkZXI6IFtdXG4gICAgICAgIH07XG5cbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgbHN0Um93Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGxzdENlbGwgPSBbLi4ubHN0Um93W2luZF0ucXVlcnlTZWxlY3RvckFsbCgndGgnKV07XG4gICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94IHx8IGluZCAhPSAwID8gMCA6IDE7XG4gICAgICAgICAgICBsZXQgY29sSW5kZXggPSBzdGFydEluZGV4O1xuICAgICAgICAgICAgY29uc3QgaXRlbUhlYWRlciA9IFtdO1xuICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSBsc3RDZWxsLmxlbmd0aCAtICh0aGlzLnNldHRpbmcuaGlkZGVuRnVuY3Rpb25Db2x1bW4gfHwgaW5kICE9IDAgPyAxIDogMik7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsc3RDZWxsW2ldLmNvbFNwYW4gJiYgbHN0Q2VsbFtpXS5jb2xTcGFuID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsc3RDZWxsW2ldLmNvbFNwYW47IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hbGxDb2wucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjb2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hbGxDb2wucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW1IZWFkZXIucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbHN0Q2VsbFtpXS5pbm5lclRleHQsXG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IGxzdENlbGxbaV0uY29sU3BhbixcbiAgICAgICAgICAgICAgICAgICAgcm93U3BhbjogbHN0Q2VsbFtpXS5yb3dTcGFuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuaGVhZGVyLnB1c2goaXRlbUhlYWRlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBcnJSb3dEYXRhSGFzUm93U3BhbkJ5SHRtbChib2R5RWxlLCBhcnJIZWFkLCBleHBvcnRBbGwgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBhcnJSb3cgPSBleHBvcnRBbGwgPyBib2R5RWxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykgOiBib2R5RWxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyLnVpLXN0YXRlLWhpZ2hsaWdodCcpO1xuICAgICAgICBpZiAoIWFyclJvdy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyclJvd0RhdGEgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyclJvdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gYXJyUm93W2ldO1xuICAgICAgICAgICAgY29uc3QgYXJyVGQgPSByb3cucXVlcnlTZWxlY3RvckFsbCgndGQnKTtcbiAgICAgICAgICAgIGFyclJvd0RhdGEucHVzaChbLi4uYXJyVGRdLmZpbHRlcih4ID0+ICF4LmNsYXNzTmFtZS5pbmNsdWRlcygnY2hrYm94IGxpbmstb3ItYWN0aW9uIGNlbGwtY2hlY2tib3gnKSkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHguaW5uZXJUZXh0O1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldFZhbHVlQ2hlY2tib3hGb3JtYXQoeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbHVlLCByb3dTcGFuOiB4LnJvd1NwYW4gfTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJSb3dEYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyByb3dEYXRhSHRtbEhhc1Jvd1NwYW5Ub1N0cmluZyhyb3dEYXRhcykge1xuICAgICAgICBjb25zdCBhcnJSb3dEYXRhID0gW107XG4gICAgICAgIHJvd0RhdGFzLmZvckVhY2goYXJyUm93RGF0YUNoaWxkID0+IHtcbiAgICAgICAgICAgIGxldCByb3dEYXRhID0gJzx0cj4nO1xuICAgICAgICAgICAgYXJyUm93RGF0YUNoaWxkLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgcm93RGF0YSArPSBgPHRkIHJvd1NwYW49XCIke2VsZW1lbnQucm93U3Bhbn1cIj4ke2VsZW1lbnQudmFsdWV9PC90ZD5gO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByb3dEYXRhICs9ICc8L3RyPic7XG4gICAgICAgICAgICBhcnJSb3dEYXRhLnB1c2gocm93RGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXJyUm93RGF0YS5qb2luKCcgJyk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgZ2V0QXJyUm93RGF0YUJ5SHRtbChib2R5RWxlLCBhcnJIZWFkLCBleHBvcnRBbGwgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBhcnJSb3cgPSBleHBvcnRBbGwgPyBib2R5RWxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJykgOiBib2R5RWxlLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyLnVpLXN0YXRlLWhpZ2hsaWdodCcpO1xuICAgICAgICBpZiAoIWFyclJvdy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyclJvd0RhdGEgPSBbXTtcblxuICAgICAgICAvLyBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYXJyUm93KSB7XG4gICAgICAgIGFyclJvdy5mb3JFYWNoKChyb3dFbGVtZW50LCBpbmRleFJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gcm93RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGFyclRkID0gcm93LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICAgICAgICBsZXQgY3VycmVudFRkO1xuICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IFtdO1xuXG4gICAgICAgICAgICBhcnJIZWFkLmZvckVhY2goKGhlYWQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY3VycmVudFRkID0gYXJyVGRbaGVhZC5pbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRUZC5pbm5lclRleHQgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGEucHVzaCh0aGlzLmdldFZhbHVlQ2hlY2tib3hGb3JtYXQoY3VycmVudFRkKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gMCAmJiAhdGhpcy5zZXR0aW5nLmhpZGRlbk9yZGVyQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhLnB1c2goaW5kZXhSb3cgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGEucHVzaChjdXJyZW50VGQuaW5uZXJUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhcnJSb3dEYXRhLnB1c2gocm93RGF0YSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhcnJSb3dEYXRhO1xuICAgIH1cblxuICAgIGdldFZhbHVlQ2hlY2tib3hGb3JtYXQoZGF0YSkge1xuICAgICAgICBjb25zdCBjaGVja0JveCA9IGRhdGEucXVlcnlTZWxlY3RvcigncC1jaGVja2JveCcpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGRhdGEucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgICAgaWYgKGNoZWNrQm94KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEucXVlcnlTZWxlY3Rvcignc3Bhbi5waS1jaGVjaycpO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDw7MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdLaMO0bmcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgdmlldyhyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vblZpZXcuZW1pdChyb3dEYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZWRpdChyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkVkaXQuZW1pdChyb3dEYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlKHJvd0RhdGE6IGFueSkge1xuICAgICAgICB0aGlzLm9uRGVsZXRlLmVtaXQocm93RGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZU11dGlwbGUoKSB7XG4gICAgICAgIHRoaXMub25EZWxldGVNdWx0aXBsZS5lbWl0KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2hvd0NvbnRleHRNZW51KGV2dCwgcm93RGF0YSkge1xuICAgICAgICB0aGlzLnJvd0RhdGFDdXJyZW50ID0gcm93RGF0YTtcbiAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0TWVudUJ1dHRvbkF1dGhvcml6ZWQoYXdhaXQgdGhpcy5tZW51QnV0dG9ucyhyb3dEYXRhKSk7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmRpc2FibGVTaGFyZSkge1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVCdXR0b25zOiBNZW51SXRlbVtdID0gW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdDaGlhIHPhursnLCBpY29uOiAncGkgcGktbGluaycsIGNvbW1hbmQ6IHRoaXMuY3JlYXRlU2hhcmVMaW5rLmJpbmQodGhpcykgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnRGFuaCBzw6FjaCBjaGlhIHPhursnLCBpY29uOiAncGkgcGktbGlzdCcsIGNvbW1hbmQ6IHRoaXMuc2hvd0xpbmtTaGFyaW5nLmJpbmQodGhpcykgfSxcbiAgICAgICAgICAgICAgICAvLyB7IGxhYmVsOiAnRGFuaCBzw6FjaCBuaMOsbiB0aOG6pXknLCBpY29uOiAncGkgcGktbGlzdCcsIGNvbW1hbmQ6IHRoaXMuc2hvd0xpc3RQZXJtaXNzaW9uQnlJdGVtLmJpbmQodGhpcykgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMucHVzaCguLi5zaGFyZUJ1dHRvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNob3dXb3JrZmxvd0F0dGFjaCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdfX3Nob3dXb3JrZmxvd0F0dGFjaCcpO1xuICAgICAgICBpZiAoc2hvd1dvcmtmbG93QXR0YWNoID09ICd0cnVlJykge1xuICAgICAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0Rhbmggc8OhY2ggY8O0bmcgdmnhu4djJywgaWNvbjogJ3BpIHBpLWxpc3QnLCBjb21tYW5kOiB0aGlzLnNob3dBdHRhY2hlZFRhc2suYmluZCh0aGlzKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uQ29udGV4dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc2hvd0NvbnRleHRNZW51KGV2dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyBjw7MgaMOgbmggxJHhu5luZyBraOG6oyBk4bulbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0TWVudUJ1dHRvbkF1dGhvcml6ZWQobWVudUJ1dHRvbnM6IFRuTWVudUl0ZW1bXSkge1xuICAgICAgICBjb25zdCBhdXRob3JpemVkQnV0dG9uczogVG5NZW51SXRlbVtdID0gW107XG4gICAgICAgIGNvbnN0IHNlcnZpY2VDb2RlQnlCYXNlID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICE9IG51bGwgPyB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUudG9VcHBlckNhc2UoKSA6ICcnO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWVudUJ1dHRvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLmxzdEJ0bkF1dGhvcml6ZU1lbnUuZmluZChwID0+IHAucmF3VGV4dCA9PSBpdGVtLmxhYmVsKTtcbiAgICAgICAgICAgIGlmICghaXRlbS5hdXRob3JpemF0aW9uUGVybWlzc2lvbiAmJiAhcGVybWlzc2lvbikge1xuICAgICAgICAgICAgICAgIGF1dGhvcml6ZWRCdXR0b25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlQ29kZSA9IGl0ZW0uYXV0aG9yaXphdGlvblNlcnZpY2VDb2RlID8gaXRlbS5hdXRob3JpemF0aW9uU2VydmljZUNvZGUgOiBzZXJ2aWNlQ29kZUJ5QmFzZTtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25Db2RlID0gcGVybWlzc2lvbiA/IHBlcm1pc3Npb24ucGVybWlzc2lvbkNvZGUgOiBpdGVtLmF1dGhvcml6YXRpb25QZXJtaXNzaW9uO1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQoc2VydmljZUNvZGUsIHBlcm1pc3Npb25Db2RlLCB0cnVlKS50aGVuKGF1dGhvcml6ZWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXplZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF1dGhvcml6ZWRCdXR0b25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgIHJldHVybiBhdXRob3JpemVkQnV0dG9ucztcbiAgICB9XG5cblxuICAgIGhhbmRsZUNoZWNrQWxsX0dyb3VwID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jaGVja2VkQWxsID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5fcmF3RGF0YVNvdXJjZV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZEFsbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRMYXN0SXRlbVNlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0uX2NoZWNrZWQgPSB0aGlzLmNoZWNrZWRBbGw7XG4gICAgICAgICAgICB0aGlzLnJvd0dyb3VwQ2hlY2tlZFtpdGVtW3RoaXMuX2dyb3VwRmllbGRdXSA9IHRoaXMuY2hlY2tlZEFsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25DaGVja0FsbC5lbWl0KHRoaXMuY2hlY2tlZEFsbCk7XG4gICAgfTtcblxuICAgIGhhbmRsZUNoZWNrUm93R3JvdXAgPSAocm93RGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBncm91cENoZWNrZWQgPSB0aGlzLnJvd0dyb3VwQ2hlY2tlZFtyb3dEYXRhW3RoaXMuX2dyb3VwRmllbGRdXSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV1bdGhpcy5fZ3JvdXBGaWVsZF0gPT0gcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV0uX2NoZWNrZWQgPSBncm91cENoZWNrZWQ7XG4gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZm91bmQpIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV0uX2NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLl9yYXdEYXRhU291cmNlW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldExhc3RJdGVtU2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2VkQWxsKCk7XG4gICAgfTtcblxuICAgIGhhbmRsZUNoZWNrUm93RGF0YV9Hcm91cCA9IChyb3dEYXRhLCB0ckVsZW1lbnQgPSBudWxsLCBmaXJlRXZlbnQgPSB0cnVlKSA9PiB7XG4gICAgICAgIGlmICghcm93RGF0YS5fY2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5yb3dHcm91cENoZWNrZWRbcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXV0gPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmZpbmRJbmRleChwID0+IHAuaWQgPT0gcm93RGF0YS5pZCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNoZWNrR3JvdXAgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnB1c2gocm93RGF0YSk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbSA9IHJvd0RhdGE7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3Jhd0RhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3Jhd0RhdGFTb3VyY2VbaV0uX2NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV1bdGhpcy5fZ3JvdXBGaWVsZF0gPT0gcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tHcm91cCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb3dHcm91cENoZWNrZWRbcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXV0gPSBjaGVja0dyb3VwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0TGFzdEl0ZW1TZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrZWRBbGwoKTtcbiAgICAgICAgaWYgKGZpcmVFdmVudCkge1xuICAgICAgICAgICAgaWYgKCF0ckVsZW1lbnQpIHRyRWxlbWVudCA9IHRoaXMuZ2V0VHJCeVJvd0RhdGEocm93RGF0YSk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0KHRyRWxlbWVudCwgcm93RGF0YSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG5cbiAgICBoYW5kbGVDaGVja0FsbCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tlZEFsbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gWy4uLnRoaXMuX3Jhd0RhdGFTb3VyY2VdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRMYXN0SXRlbVNlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0uX2NoZWNrZWQgPSB0aGlzLmNoZWNrZWRBbGwgPT09IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uQ2hlY2tBbGwuZW1pdCh0aGlzLmNoZWNrZWRBbGwpO1xuICAgIH07XG5cbiAgICBoYW5kbGVDaGVja1Jvd0RhdGEgPSAocm93RGF0YSwgdHJFbGVtZW50ID0gbnVsbCwgZmlyZUV2ZW50ID0gdHJ1ZSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5pc1RyZWVUYWJsZSA/IHRoaXMubW9kZWwuZGF0YVNvdXJjZS5tYXAoaXRlbSA9PiBpdGVtLmRhdGEpIDogdGhpcy5tb2RlbC5kYXRhU291cmNlO1xuICAgICAgICBjb25zdCBpbmRleEhhc1Jvd1NwYW4gPSB0aGlzLl9jb21tb25TZXJ2aWNlLmZpbmRMYXN0SW5kZXgoZGF0YVNvdXJjZSwgKHgsIGkpID0+IE9iamVjdC52YWx1ZXMoeC5yb3dTcGFuKS5sZW5ndGggPiAwICYmIGkgPD0gcm93RGF0YS5faW5kZXhJbkRhdGFTb3VyY2UpO1xuICAgICAgICBpZiAoIXJvd0RhdGEuX2NoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4SGFzUm93U3BhblVuQ2hlY2tlZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZmluZExhc3RJbmRleCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMsICh4LCBpKSA9PiBPYmplY3QudmFsdWVzKHgucm93U3BhbikubGVuZ3RoID4gMCAmJiBpIDw9IHJvd0RhdGEuX2luZGV4SW5EYXRhU291cmNlKTtcbiAgICAgICAgICAgIGlmIChpbmRleEhhc1Jvd1NwYW5VbkNoZWNrZWQgPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1NwYW4gPSBPYmplY3QudmFsdWVzKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc1tpbmRleEhhc1Jvd1NwYW5VbkNoZWNrZWRdLnJvd1NwYW4pO1xuICAgICAgICAgICAgICAgIGlmIChyb3dTcGFuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4Um93U3BhbjogYW55ID0gcm93U3Bhbi5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGFjY3VtdWxhdG9yID4gZWxlbWVudCkgPyBhY2N1bXVsYXRvciA6IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4SGFzUm93U3BhbjsgaSA8IG1heFJvd1NwYW4gKyBpbmRleEhhc1Jvd1NwYW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZVtpXS5fY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnNwbGljZShpbmRleEhhc1Jvd1NwYW5VbkNoZWNrZWQsIG1heFJvd1NwYW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuZmluZEluZGV4KHAgPT4gcC5pZCA9PSByb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXJvd0RhdGEuaGlkZGVuQ2hlY2tCb3gpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhIYXNSb3dTcGFuID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93U3BhbiA9IE9iamVjdC52YWx1ZXModGhpcy5tb2RlbC5kYXRhU291cmNlW2luZGV4SGFzUm93U3Bhbl0ucm93U3Bhbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyb3dTcGFuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFJvd1NwYW46IGFueSA9IHJvd1NwYW4ucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYWNjdW11bGF0b3IgPiBlbGVtZW50KSA/IGFjY3VtdWxhdG9yIDogZWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvd0RhdGEuX2luZGV4SW5EYXRhU291cmNlIDwgbWF4Um93U3BhbiArIGluZGV4SGFzUm93U3Bhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBpbmRleEhhc1Jvd1NwYW47IGkgPCBtYXhSb3dTcGFuICsgaW5kZXhIYXNSb3dTcGFuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlW2ldLl9jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2Vbcm93RGF0YS5faW5kZXhJbkRhdGFTb3VyY2VdLl9jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5jb25jYXQodGhpcy5tb2RlbC5kYXRhU291cmNlLnNsaWNlKGluZGV4SGFzUm93U3BhbiwgaW5kZXhIYXNSb3dTcGFuICsgbWF4Um93U3BhbikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW0gPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2Uuc2xpY2UoaW5kZXhIYXNSb3dTcGFuLCBpbmRleEhhc1Jvd1NwYW4gKyBtYXhSb3dTcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3dEYXRhLmhpZGRlbkNoZWNrQm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMucHVzaChyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtID0gcm93RGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0TGFzdEl0ZW1TZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrZWRBbGwoKTtcbiAgICAgICAgaWYgKCF0ckVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRyRWxlbWVudCA9IHRoaXMuZ2V0VHJCeVJvd0RhdGEocm93RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpcmVFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdFJvd1NlbGVjdCh0ckVsZW1lbnQsIHJvd0RhdGEpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgdXBkYXRlQ2hlY2tlZEFsbCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT0gdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGggJiYgdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZEFsbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0Um93KGRhdGFzOiBhbnlbXSA9IFtdKSB7XG4gICAgICAgIGlmICghZGF0YXMgfHwgZGF0YXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94KSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0SXRlbSA9IGRhdGFzW2RhdGFzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgbGFzdEl0ZW0uX2NoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2dyb3VwRmllbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoZWNrUm93RGF0YV9Hcm91cChsYXN0SXRlbSwgdGhpcy5nZXRUckJ5Um93RGF0YShsYXN0SXRlbSksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGEobGFzdEl0ZW0sIHRoaXMuZ2V0VHJCeVJvd0RhdGEobGFzdEl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGFzLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YS5fY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2dyb3VwRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGFfR3JvdXAoZGF0YSwgdGhpcy5nZXRUckJ5Um93RGF0YShkYXRhKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoZWNrUm93RGF0YShkYXRhLCB0aGlzLmdldFRyQnlSb3dEYXRhKGRhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblNvcnQoZXZlbnQ6IGFueSwgX3RhYmxlOiBUYWJsZSkge1xuICAgICAgICB0aGlzLnNvcnRXaXRoQXBpKGV2ZW50LCBfdGFibGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydFdpdGhBcGkoZXZlbnQ6IGFueSwgX3RhYmxlOiBUYWJsZSkge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwubG9hZGluZykge1xuICAgICAgICAgICAgX3RhYmxlLnJlc2V0KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zb3J0SGlzdG9yeS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRGaWVsZCA9IGV2ZW50LmZpZWxkO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnREaXIgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zb3J0SGlzdG9yeVswXS5maWVsZCA9PSBldmVudC5maWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRGaWVsZCA9IGV2ZW50LmZpZWxkO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zb3J0RGlyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnREaXIgPSAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fc29ydERpciA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydERpciA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RGlyID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldmVudC5maWVsZCAhPSB0aGlzLnNvcnRIaXN0b3J5WzBdLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydEZpZWxkID0gZXZlbnQuZmllbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydERpciA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgICAgIHRoaXMuc29ydEhpc3RvcnkudW5zaGlmdCh7IGZpZWxkOiB0aGlzLl9zb3J0RmllbGQsIGRpcjogdGhpcy5fc29ydERpciB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwcm9jZXNzRGF0YVNvdXJjZShkYXRhU291cmNlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZEFsbCA9IG51bGw7XG4gICAgICAgIHRoaXMucm93R3JvdXBDaGVja2VkID0ge307XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSkgcmV0dXJuO1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goc291cmNlID0+IHtcbiAgICAgICAgICAgIGlmIChzb3VyY2UuaWQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc291cmNlLmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzb3VyY2Uub2JqU3R5bGVDbGFzcyA9IHt9O1xuICAgICAgICAgICAgaWYgKCFzb3VyY2UuY29sU3Bhbikge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5jb2xTcGFuID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNvdXJjZS5yb3dTcGFuKSB7XG4gICAgICAgICAgICAgICAgc291cmNlLnJvd1NwYW4gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc291cmNlLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5oaWRkZW4gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzb3VyY2UuaXNOZXcpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2Uub2JqU3R5bGVDbGFzcy5pc05ldyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc291cmNlLmlzRXhwaXJpbmcpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2Uub2JqU3R5bGVDbGFzcy5leHBpcmluZyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc291cmNlLmNsYXNzKSB7XG4gICAgICAgICAgICAgICAgc291cmNlLmNsYXNzLnNwbGl0KCcgJykuZmlsdGVyKHAgPT4gcCkuZm9yRWFjaChjbHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2Uub2JqU3R5bGVDbGFzc1tjbHNdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc291cmNlLl9fZXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgc291cmNlLl9fZXhwYW5kID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzb3VyY2UuYm9va21hcmtTdHlsZSA9IHRoaXMuZ2V0Qm9va21hcmtDb2xvcihzb3VyY2UsIHRoaXMuc2V0dGluZy5jb2xzKTtcblxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bUxlbmd0aCAmJiB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtTGVuZ3RoLmZvckVhY2goX2NvbCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sID0gPENvbHVtblNjaGVtYUJhc2U+X2NvbDtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtjb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5zdWJzdHJpbmcgJiYgdmFsdWUubGVuZ3RoID4gY29sLm1heExlbmd0aERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Y6IHNob3J0IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVtgJHtjb2wuZmllbGR9X19zdmBdID0gYCR7dmFsdWUuc3Vic3RyaW5nKDAsIGNvbC5tYXhMZW5ndGhEaXNwbGF5KX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtV29yZCAmJiB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtV29yZC5mb3JFYWNoKF9jb2wgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IDxDb2x1bW5TY2hlbWFCYXNlPl9jb2w7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVTaG9ydFdvcmQgPSB0aGlzLnN1YldvcmQoc291cmNlW2NvbC5maWVsZF0sIGNvbC5tYXhXb3JkRGlzcGxheSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlU2hvcnRXb3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN2OiBzaG9ydCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VbYCR7Y29sLmZpZWxkfV9fc3ZgXSA9IGAke3ZhbHVlU2hvcnRXb3JkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZVJvd0dyb3VwTWV0YURhdGEoZGF0YVNvdXJjZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN1YldvcmQodmFsdWU6IHN0cmluZywgd29yZENvdW50OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUudHJpbSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgbGV0IGluZGV4ID0gLTEsIGJlZm9yZUNoYXIgPSAnYSc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtpXSA9PSAnJyAmJiBiZWZvcmVDaGFyICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgd29yZENvdW50LS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiZWZvcmVDaGFyID0gdmFsdWVbaV07XG4gICAgICAgICAgICBpZiAod29yZENvdW50ID09IDApIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0b2dnbGVTaG93RnVsbChyb3dEYXRhLCBmaWVsZCkge1xuICAgICAgICByb3dEYXRhW2ZpZWxkICsgJ19fc2hvd0Z1bGwnXSA9ICFyb3dEYXRhW2ZpZWxkICsgJ19fc2hvd0Z1bGwnXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWVyZ2VDbGFzc09iaihzb3VyY2UsIG90aGVyT2JqID0ge30pIHtcbiAgICAgICAgY29uc3Qgb2JqID0gc291cmNlLm9ialN0eWxlQ2xhc3M7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG90aGVyT2JqKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IG90aGVyT2JqW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGV4dFJvd0dyb3VwKHJvd0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICByb3dHcm91cE1ldGFkYXRhOiB0aGlzLnJvd0dyb3VwTWV0YWRhdGEsXG4gICAgICAgICAgICBncm91cENvbDogdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLFxuICAgICAgICAgICAgZ3JvdXBGaWVsZDogdGhpcy5fZ3JvdXBGaWVsZCxcbiAgICAgICAgICAgIGdyb3VwSW5DbGllbnQ6IHRoaXMuX2dyb3VwSW5DbGllbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGV4dFJvd0dyb3VwUm9vdChyb3dEYXRhLCBleHBhbmRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udGhpcy5nZXRDb250ZXh0Um93R3JvdXAocm93RGF0YSksXG4gICAgICAgICAgICBleHBhbmRlZCxcbiAgICAgICAgICAgIGhhbmRsZUNoZWNrUm93R3JvdXA6IHRoaXMuaGFuZGxlQ2hlY2tSb3dHcm91cCxcbiAgICAgICAgICAgIGdldENvbFNwYW5Hcm91cDogdGhpcy5nZXRDb2xTcGFuR3JvdXAsXG4gICAgICAgICAgICB0YWJsZTogdGhpcy50YWJsZSxcbiAgICAgICAgICAgIGNsYXNzUm93R3JvdXA6IHRoaXMuX2NsYXNzUm93R3JvdXAsXG4gICAgICAgICAgICBpY29uVG9nZ2xlUm93R3JvdXA6IHRoaXMuaWNvblRvZ2dsZVJvd0dyb3VwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbnRleHRDZWxsKHJvd0RhdGEsIHJvd0luZGV4LCBjb2wsIGV4cGFuZGVkLCAkdGhpcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3J1ZExpc3Q6ICR0aGlzLFxuICAgICAgICAgICAgcm93RGF0YSxcbiAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgICAgaWNvblRvZ2dsZVJvd0RhdGE6IHRoaXMuaWNvblRvZ2dsZVJvd0RhdGFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2xhc3NSb3dEYXRhT2ZHcm91cChyb3dEYXRhKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuY29udGFpblNlbGVjdEl0ZW0ocm93RGF0YSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIHVpLXN0YXRlLWhpZ2hsaWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2dyb3VwRmllbGQgIT09ICcnKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyBpcy1jaGlsZC1ncm91cCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0RhdGEuY2xhc3MpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyByb3dEYXRhLmNsYXNzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb250YWluU2VsZWN0SXRlbShpdGVtKSB7XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuZmluZEluZGV4KHggPT4geCAmJiB4W3RoaXMuc2V0dGluZy5lbnRpdHlLZXldID09PSBpdGVtW3RoaXMuc2V0dGluZy5lbnRpdHlLZXldKSA+IC0xO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9wKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbGJhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsYmFyLnNjcm9sbFRvVG9wKDAsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzY3JvbGxUb0JvdHRvbSgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxiYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbGJhci5zY3JvbGxUb0JvdHRvbSgwLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChldmVudCkge1xuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlICsgMTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9wKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJldihldmVudCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PbGRlc3QoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSBNYXRoLmNlaWwodGhpcy5tb2RlbC50b3RhbCAvIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSk7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvcCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkxhdGVzdChldmVudCkge1xuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IDE7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvcCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5VG9vbGJhcihlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBub2RlcyA9IGVsZW1lbnQuY2hpbGROb2RlcztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLml0ZW0oaSk7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gOCAmJiBub2Rlcy5pdGVtKGkpLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRW1wdHlGdW5jdGlvbkJ1dHRvbnMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSBlbGVtZW50LmNoaWxkTm9kZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5pdGVtKGkpO1xuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IDggJiYgbm9kZXMuaXRlbShpKS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kVGVtcGxhdGUodGVtcGxhdGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21tb25TZXJ2aWNlLmZpbmRUZW1wbGF0ZUZyb21MaXN0KHRoaXMuY2hpbGRyZW4sIHRlbXBsYXRlTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc1RlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlW3RlbXBsYXRlTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdID0gdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdICE9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbXBvbmVudEJ5VHlwZShjb250cm9sVHlwZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChjb250cm9sVHlwZSA9PSAndHJhbmdUaGFpVjUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVRyYW5nVGhhaVY1O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sVHlwZSA9PSAnX192aWV3SGlzdG9yeScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlQ29sVmlld0hpc3Rvcnk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9jb21tb25TZXJ2aWNlLmZpbmRUZW1wbGF0ZUZyb21MaXN0KHRoaXMuY2hpbGRyZW4sIGNvbnRyb2xUeXBlKTtcbiAgICAgICAgaWYgKCFpdGVtICYmIHRoaXMudGVtcGxhdGVzKSB7XG4gICAgICAgICAgICBpdGVtID0gdGhpcy5fY29tbW9uU2VydmljZS5maW5kVGVtcGxhdGVGcm9tTGlzdCh0aGlzLnRlbXBsYXRlcywgY29udHJvbFR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlW3RlbXBsYXRlTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdID0gdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSb3dHcm91cE1ldGFEYXRhKGRhdGFTb3VyY2U6IGFueSkge1xuICAgICAgICB0aGlzLnJvd0dyb3VwTWV0YWRhdGEgPSB7fTtcbiAgICAgICAgbGV0IGluZGV4R3JvdXAgPSAwO1xuICAgICAgICBjb25zdCBncm91cEZpZWxkTmFtZTogc3RyaW5nID0gdGhpcy5fZ3JvdXBGaWVsZDtcbiAgICAgICAgLy8gVOG6oW8gYuG7q2EgMSBncm91cCB2YWx1ZSBiZWZvcmVcbiAgICAgICAgbGV0IHByZXZpb3VzR3JvdXBWYWx1ZSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xuICAgICAgICBpZiAoZ3JvdXBGaWVsZE5hbWUgJiYgZ3JvdXBGaWVsZE5hbWUgIT0gJycpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSBkYXRhU291cmNlW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwVmFsdWUgPSByb3dEYXRhW2dyb3VwRmllbGROYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBWYWx1ZSAhPT0gcHJldmlvdXNHcm91cFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93R3JvdXBNZXRhZGF0YVtncm91cFZhbHVlXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLCBpbmRleEdyb3VwOiBpbmRleEdyb3VwKyssIHNpemU6IDEsIGl0ZW1Sb290OiByb3dEYXRhLCBpdGVtczogW3Jvd0RhdGFdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzW2dyb3VwVmFsdWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNHcm91cFZhbHVlID0gZ3JvdXBWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IHRoaXMucm93R3JvdXBNZXRhZGF0YVtncm91cFZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUdyb3VwLnNpemUrKztcbiAgICAgICAgICAgICAgICAgICAgaXRlbUdyb3VwLml0ZW1zLnB1c2gocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJvd0RhdGFbdGhpcy5maWVsZE9yZGVyXSA9IHRoaXMucm93R3JvdXBNZXRhZGF0YVtncm91cFZhbHVlXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dTZXR0aW5ncygpIHtcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlQ29sb3JTZXR0aW5ncyhkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLmNvbG9yRmlsdGVyVGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lQXJyID0gZGF0YS5jb2xvckZpbHRlclRhYmxlLnNsaWNlKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY2xvbmVBcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY2xvbmVBcnJbaV0uZmlsdGVyVmFsdWUgPT0gJycgfHwgY2xvbmVBcnJbaV0uZmlsdGVyVmFsdWUgPT0gbnVsbCB8fCBjbG9uZUFycltpXS5maWx0ZXJWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5jb2xvckZpbHRlclRhYmxlLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZCA9IGRhdGEuY29sb3JGaWx0ZXJGaWVsZDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGUgPSBkYXRhLmNvbG9yRmlsdGVyVGFibGU7XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1Jvd0NvbG9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FjaGVDb2xvclNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRDb2xvclNldHRpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlU2V0dGluZ3MoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzID0gZXZlbnQuZGV0YWlscztcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCA9IGV2ZW50LnNvcnRGaWVsZDtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPSBldmVudC5zb3J0RGlyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydERpciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkID0gZXZlbnQuZ3JvdXBGaWVsZDtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwSW5DbGllbnQgPSBldmVudC5ncm91cEluQ2xpZW50O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbiA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbmQocCA9PiBwLmZpZWxkID09IGV2ZW50Lmdyb3VwRmllbGQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZvcmNlR2V0RGF0YSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2F2ZUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kQ29sdW1ucyh0aGlzLnNldHRpbmcuY29scyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdENvbHVtbnModGhpcy5zZXR0aW5nLmNvbHMpO1xuICAgICAgICAgICAgdGhpcy5hcHBseUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5ncyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRlbGV0ZVNldHRpbmdzKCkge1xuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3MgPSBmYWxzZTtcbiAgICAgICAgLy8gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcgPSBuZXcgQ29sdW1uU2V0dGluZygpO1xuICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZyA9IHRoaXMuc2V0dGluZ0RlZmF1bHQ/LmNvbHVtblNldHRpbmcgPz8gbmV3IENvbHVtblNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5kZWxldGVDb2x1bW5TZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuZXh0ZW5kQ29sdW1ucyh0aGlzLnNldHRpbmcuY29scyk7XG4gICAgICAgIHRoaXMuZm9ybWF0Q29sdW1ucyh0aGlzLnNldHRpbmcuY29scyk7XG4gICAgICAgIHRoaXMuYXBwbHlDb2x1bW5TZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhcHBseUNvbHVtblNldHRpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gPSB0aGlzLnNldHRpbmcuY29scy5maW5kKHAgPT4gcC5maWVsZCA9PSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4uZm9yY2VHZXREYXRhID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4ucmF3Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dyb3VwRmllbGQgPSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4ucmF3Q29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ3JvdXBGaWVsZCA9IHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5maWVsZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ncm91cEZpZWxkID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2dyb3VwSW5DbGllbnQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEluQ2xpZW50O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZ3JvdXBGaWVsZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQ7XG4gICAgICAgIHRoaXMuX3NvcnREaXIgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RGlyO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICYmIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZyAmJiB0aGlzLl9zb3J0RmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuc29ydEhpc3RvcnkgPSBbeyBmaWVsZDogdGhpcy5fc29ydEZpZWxkLCBkaXI6IHRoaXMuX3NvcnREaXIgPyB0aGlzLl9zb3J0RGlyIDogMCB9XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc29ydEhpc3RvcnkgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2VsbENsYXNzSGVhZGVyKGNvbCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGlmIChjb2wuY2VsbENsYXNzKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gY29sLmNlbGxDbGFzcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbC5zb3J0KSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyBOb1NvcnRDb2x1bW4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wuZmllbGQgPT0gdGhpcy5fc29ydEZpZWxkKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyBwLXNvcnRhYmxlLWNvbHVtbic7XG4gICAgICAgICAgICBpZiAodGhpcy5fc29ydERpciAhPSAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgcC1oaWdobGlnaHQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblN0eWxlKGNvbDogYW55LCBmb3JIZWFkZXIgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBzdHlsZTogYW55ID0ge307XG4gICAgICAgIGlmIChjb2wuZmllbGQgPT0gJ21ldGFkYXRhU3RhdHVzJykge1xuICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdjZW50ZXInO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvckhlYWRlcikge1xuICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdjZW50ZXInO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNvbC50ZXh0QWxpZ24gPT0gVGV4dEFsaWduLkxlZnQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2xlZnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sLnRleHRBbGlnbiA9PSBUZXh0QWxpZ24uQ2VudGVyKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdjZW50ZXInO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sLnRleHRBbGlnbiA9PSBUZXh0QWxpZ24uUmlnaHQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ3JpZ2h0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYWxpZ25DZW50ZXJDb2x1bW4oY29sKSkge1xuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnY2VudGVyJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYWxpZ25SaWdodENvbHVtbihjb2wpKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdyaWdodCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2xlZnQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBnZXRCb29rbWFya0NvbG9yKHJvd0RhdGEsIGNvbHVtbnMpIHtcbiAgICAgICAgY29uc3QgcjogYW55ID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkICYmIHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlKSB7XG4gICAgICAgICAgICBsZXQgY29sO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjIGluIGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uc1tjXS5maWVsZCA9PSB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBjb2wgPSBjb2x1bW5zW2NdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBmb3JEYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZm9yTnVtYmVyID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgZm9yQm9vbCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gcm93RGF0YVt0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZF07XG4gICAgICAgICAgICBpZiAoY29sKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5kYXRlIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5kYXRldGltZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY29udmVydFRvRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGZvckRhdGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuaW50IHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5kZWNpbWFsXG4gICAgICAgICAgICAgICAgICAgIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5pbnRXaXRob3V0TWFzayB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuY3VycmVuY3lcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBmb3JOdW1iZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuYm9vbGVhbikge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgvdHJ1ZS9pKS50ZXN0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yQm9vbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5fY29sb3JGaWx0ZXJUYWJsZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9jb2xvckZpbHRlclRhYmxlW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVUeXBlID0gaXRlbVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xvciA9IGl0ZW1bNV07XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlclZhbHVlOiBhbnkgPSBpdGVtWzFdO1xuICAgICAgICAgICAgICAgIGlmIChmb3JEYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gaXRlbVsyXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlID09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBpdGVtWzNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVyVmFsdWUpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9yQm9vbCkgZmlsdGVyVmFsdWUgPSBpdGVtWzRdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVUeXBlID09ICdyZWdleCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChmaWx0ZXJWYWx1ZSwgJ2knKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaChyZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ2VxdWFscycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IGZpbHRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdub3RFcXVhbHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBmaWx0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgci5iYWNrZ3JvdW5kID0gdGhpcy5idWlsZEdyYWRpZW50Q29sb3IoY29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wYXJlVHlwZSA9PSAnY29udGFpbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGZpbHRlclZhbHVlLCAnaScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubWF0Y2gocmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdub3RDb250YWlucycpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSArICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoZmlsdGVyVmFsdWUsICdpJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUubWF0Y2gocmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdncmVhdGVyJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiBmaWx0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgci5iYWNrZ3JvdW5kID0gdGhpcy5idWlsZEdyYWRpZW50Q29sb3IoY29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wYXJlVHlwZSA9PSAnbGl0dGVyJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCBmaWx0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgci5iYWNrZ3JvdW5kID0gdGhpcy5idWlsZEdyYWRpZW50Q29sb3IoY29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRUb0RhdGUodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAne25vd30nKSByZXR1cm4gRGF0ZSgpO1xuXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCd7JykgJiYgdmFsdWUuZW5kc1dpdGgoJ2R9JykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnZH0nLCAnJykpO1xuICAgICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCd7JykgJiYgdmFsdWUuZW5kc1dpdGgoJ2h9JykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnaH0nLCAnJykpO1xuICAgICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSArIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ3snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnbX0nKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCdtfScsICcnKSk7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSArIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmluZGV4T2YoJy8nKSA+IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbHVlLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShwYXJ0c1syXSArICctJyArIHBhcnRzWzFdICsgJy0nICsgcGFydHNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICBpZiAoIWlzTmFOKGRhdGUuZ2V0RGF0ZSgpKSkgcmV0dXJuIGRhdGU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKSB7XG4gICAgICAgIHJldHVybiBgbGluZWFyLWdyYWRpZW50KDkwZGVnLCAke2NvbG9yfSAwJSwgJHtjb2xvcn00ZCAzNSUsICR7Y29sb3J9MWEgNjAlLCB0cmFuc3BhcmVudCAxMDAlKWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhbGlnbkNlbnRlckNvbHVtbihjb2wpIHtcbiAgICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5kYXRldGltZSB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuZGF0ZSB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuYm9vbGVhbiB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuZW51bSB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUudGltZXNwYW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhbGlnblJpZ2h0Q29sdW1uKGNvbCkge1xuICAgICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmludCB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuZGVjaW1hbCB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuaW50V2l0aG91dE1hc2sgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmN1cnJlbmN5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb2xTcGFuR3JvdXAgPSAobnVtT2ZDb2xDdXN0b206IG51bWJlciA9IDApID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5jb2xzLmZpbHRlcih4ID0+IHgudmlzaWJsZSA9PT0gbnVsbCB8fCB4LnZpc2libGUgPT09IHVuZGVmaW5lZCB8fCB4LnZpc2libGUgPT09IHRydWUpLmxlbmd0aFxuICAgICAgICAgICAgKyAodGhpcy5zZXR0aW5nLmhpZGRlbk9yZGVyQ29sdW1uID8gMCA6IDEpXG4gICAgICAgICAgICArICh0aGlzLnNldHRpbmcuaGlkZGVuRnVuY3Rpb25Db2x1bW4gPyAwIDogMSlcbiAgICAgICAgICAgIC0gbnVtT2ZDb2xDdXN0b207XG4gICAgfTtcblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZUtleXByZXNzQ29udHJvbCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dCAmJiB0aGlzLmNvbnRleHQucm9vdC5kYXRhLmxpc3RRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RRdWV1ZSA9IHRoaXMuY29udGV4dC5yb290LmRhdGEubGlzdFF1ZXVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdFF1ZXVlLmluZGV4T2YodGhpcyk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGlzdFF1ZXVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlTXVsdGlwbGVEZWxldGUoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVEZWxldGUoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVFZGl0KHJvd0RhdGEpIHtcbiAgICAgICAgaWYgKHJvd0RhdGEuX19kaXNhYmxlRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuRWRpdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gJiYgcm93RGF0YVsnbWV0YWRhdGFTdGF0dXMnXSAhPSAnMCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZURlbGV0ZShyb3dEYXRhKSB7XG4gICAgICAgIGlmIChyb3dEYXRhLl9fZGlzYWJsZURlbGV0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuRGVsZXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93RGF0YVsnbWV0YWRhdGFTdGF0dXMnXSAmJiByb3dEYXRhWydtZXRhZGF0YVN0YXR1cyddICE9ICcwJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93SGlzdG9yeShyb3dEYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5zaG93SGlzdG9yeSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZy5oaXN0b3J5ID0gcm93RGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0xpc3RWZXJzaW9uKHJvd0RhdGEpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnZlcnNpb25Nb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgICAgICB0aGlzLnNldHRpbmcudmVyc2lvbk1vZGVsLml0ZW1EYXRhID0gcm93RGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFdpZHRoRnVuY3Rpb24odGFibGUpIHtcbiAgICAgICAgaWYgKHRoaXMud2lkdGhGdW5jdGlvbkNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHdpZHRoSW5QaXhlbCA9IHRoaXMuX2RlZmF1bHRXaXRoRnVuY3Rpb25Db2x1bW47XG4gICAgICAgIGNvbnN0IHRkID0gdGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0ZFtjbGFzcyo9XCJjb2x1bW4tZnVuY3Rpb25cIl0nKTtcbiAgICAgICAgaWYgKHRkKSB7XG4gICAgICAgICAgICBjb25zdCBlbVRvUGl4Y2VsID0gdGhpcy5nZXRGb250U2l6ZUluUGl4ZWwodGQpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gYnV0dG9ucy5sZW5ndGggKiAyLjQ7IC8vIGJ1dHRvbiB3aWR0aDogMi40cmVtXG4gICAgICAgICAgICBjb25zdCB0bXBXaWR0aEluUGl4ZWwgPSB3aWR0aCAqIGVtVG9QaXhjZWwgKyA2OyAvLyA2IGxhIHRvbmcgcGFkZGluZyBsZWZ0LCByaWdodCBjdWEgdGhcbiAgICAgICAgICAgIGlmICh3aWR0aEluUGl4ZWwgPCB0bXBXaWR0aEluUGl4ZWwpIHtcbiAgICAgICAgICAgICAgICB3aWR0aEluUGl4ZWwgPSB0bXBXaWR0aEluUGl4ZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aCA9IHRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGhbY2xhc3MqPVwic2V0dGluZy1jZWxsXCJdJyk7XG4gICAgICAgIGlmICh0aCkge1xuICAgICAgICAgICAgY29uc3QgZW1Ub1BpeGNlbCA9IHRoaXMuZ2V0Rm9udFNpemVJblBpeGVsKHRoKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0aC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJyk7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGJ1dHRvbnMubGVuZ3RoICogMi40IC8gMC44NTsgLy8gYnV0dG9uIHdpZHRoOiAyLjRyZW0sIGZvbnQtc2l6ZSB0aCAwLjg1cmVtXG4gICAgICAgICAgICBjb25zdCB0bXBXaWR0aEluUGl4ZWwgPSB3aWR0aCAqIGVtVG9QaXhjZWwgKyA2OyAvLyA2IGxhIHRvbmcgcGFkZGluZyBsZWZ0LCByaWdodCBjdWEgdGhcbiAgICAgICAgICAgIGlmICh3aWR0aEluUGl4ZWwgPCB0bXBXaWR0aEluUGl4ZWwpIHtcbiAgICAgICAgICAgICAgICB3aWR0aEluUGl4ZWwgPSB0bXBXaWR0aEluUGl4ZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl93aWR0aEZ1bmN0aW9uQ29sdW1uID0gYCR7d2lkdGhJblBpeGVsfXB4YDtcbiAgICAgICAgdGhpcy53aWR0aEZ1bmN0aW9uQ29sdW1uQ2hhbmdlLmVtaXQodGhpcy5fd2lkdGhGdW5jdGlvbkNvbHVtbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb250U2l6ZUluUGl4ZWwoZWwpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihnZXRDb21wdXRlZFN0eWxlKGVsLCAnJykuZm9udFNpemUubWF0Y2goLygoXFxkfC4pKylweC8pWzFdKTtcbiAgICB9XG5cbiAgICBhc3luYyBwcm9jZXNzQmFzZURhdGEoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJlUHJvY2Vzc0RhdGEodGhpcy5fcmF3RGF0YVNvdXJjZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwcmVQcm9jZXNzRGF0YShkYXRhU291cmNlKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgY29sSGFzUGlwZSA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbHRlcih4ID0+IHgucGlwZSk7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbEhhc1BpcGUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0oPFBpcGVUcmFuc2Zvcm0+Y29sLnBpcGUsIGNvbC5hc3luY1BpcGUsIGl0ZW1bY29sLmZpZWxkXSkudGhlbihycyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1bYHBpcGVfXyR7Y29sLmZpZWxkfSBgXSA9IHJzO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB0cmFuc2Zvcm0ocGlwZTogUGlwZVRyYW5zZm9ybSwgYXN5bmNQaXBlOiBib29sZWFuLCB2YWx1ZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZFRyYW5zZm9ybXNbdmFsdWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRUcmFuc2Zvcm1zW3ZhbHVlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhc3luY1BpcGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IHBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVHJhbnNmb3Jtc1t2YWx1ZV0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gcGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jYWNoZWRUcmFuc2Zvcm1zW3ZhbHVlXSA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlUm93T3JkZXJlZChldnQpIHtcbiAgICAgICAgdGhpcy5zaG93U2F2ZVJlb3JkZXIgPSB0aGlzLmZpbHRlcl9jb2x1bW4ubGVuZ3RoID09IDA7XG4gICAgICAgIHRoaXMub25SZW9yZGVyZWQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93U2V0dGluZ1Jvd0NvbG9yKCkge1xuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NSb3dDb2xvciA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlQnVpbGRGaWx0ZXJDb2x1bW4oY29sczogQ29sdW1uU2NoZW1hQmFzZVtdKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVGaWx0ZXIgPSBbXTtcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlckNvbHVtbihjb2xzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGRGaWx0ZXJDb2x1bW4oY29sczogQ29sdW1uU2NoZW1hQmFzZVtdKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlRmlsdGVyID0gdGhpcy50ZW1wbGF0ZUZpbHRlcjtcbiAgICAgICAgY29uc3QgZmlsdGVyTXVsaXBsZSA9IFtPcGVyYXRvci5pbiwgT3BlcmF0b3Iubm90SW5dO1xuICAgICAgICBjb2xzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wuY29udHJvbFR5cGUgPT0gQ29udHJvbFR5cGUuZHJvcGRvd24pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sLmJhc2VTZXJ2aWNlIHx8IChjb2wuZGF0YVNvdXJjZSAmJiBjb2wuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogY29sLmlzT3ZlcnJpZGVGaWx0ZXIgPyBjb2wub3BlcmF0b3IgOiBjb2wuc2luZ2xlID8gT3BlcmF0b3IuZXF1YWwgOiBPcGVyYXRvci5pbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FycmF5RmllbGQ6IGNvbC5pc0FycmF5RmllbGQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJTY2hlbWEuZHJvcGRvd25bY29sLmZpZWxkXSA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG86ICdib2R5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBgQ2jhu41uICR7Y29sLmxhYmVsfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZTogZmlsdGVyTXVsaXBsZS5pbmNsdWRlcyhmaWx0ZXIub3BlcmF0b3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE9uSW5pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VydmVyTG9hZDogY29sLmlzU2VydmVyTG9hZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQWxsb3dEaXNhYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYENoxrBhIGPhuqV1IGjDrG5oIGJhc2VTZXJ2aWNlIGhv4bq3YyBkYXRhU291cmNlIGNobyBj4buZdCAke2NvbC5maWVsZH06ICR7Y29sLmxhYmVsfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2wuaXNPdmVycmlkZUZpbHRlcikge1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZ2V0RmllbGRGaWx0ZXIoY29sKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBjb2wub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWVsZDogY29sLmZpZWxkXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKGNvbC5kYXRhVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuYm9vbGVhbjpcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGNvbC5zaW5nbGUgPyBPcGVyYXRvci5lcXVhbCA6IE9wZXJhdG9yLmluLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuaW50OlxuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuaW50V2l0aG91dE1hc2s6XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kZWNpbWFsOlxuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuY3VycmVuY3k6XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2wub3BlcmF0b3IgPT09IE9wZXJhdG9yLmVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5nZXRGaWVsZEZpbHRlcihjb2wpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRWYWx1ZTogKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2wubWF4ICYmIGl0ZW0gPiBjb2wubWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbC5tYXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sLm1pbiAmJiBpdGVtIDwgY29sLm1pbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2wubWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goLi4udGhpcy5nZXRSYW5nZUZpbHRlcihjb2wpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRhdGU6XG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldERhdGVSYW5nZUZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGUpID0+IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGUpID0+IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSArIDEsIDAsIDAsIC0xKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZGF0ZXRpbWU6XG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldERhdGVSYW5nZUZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGUpID0+IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlKSA9PiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZ2V0RmllbGRGaWx0ZXIoY29sKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWVsZDogY29sLmZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRlUmFuZ2VGaWx0ZXIoY29sOiBDb2x1bW5TY2hlbWFCYXNlLCBwYXJzZURhdGVGcm9tOiAoZGF0ZTogRGF0ZSkgPT4gRGF0ZSwgcGFyc2VEYXRlVG86IChkYXRlOiBEYXRlKSA9PiBEYXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJhbmdlRmlsdGVyKGNvbCxcbiAgICAgICAgICAgIGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwgfHwgaXRlbVswXSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoaXRlbVswXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGF0ZUZyb20oZGF0ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCB8fCBpdGVtWzFdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtWzFdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VEYXRlVG8oZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSYW5nZUZpbHRlcihjb2w6IENvbHVtblNjaGVtYUJhc2UsIGZ1bmNHZXRWYWx1ZUZyb206IChpdGVtKSA9PiBhbnkgPSBudWxsLCBmdW5jR2V0VmFsdWVUbzogKGl0ZW0pID0+IGFueSA9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWwsXG4gICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgICAgICAgICBzdWJGaWVsZDogMCxcbiAgICAgICAgICAgICAgICBmdW5jR2V0VmFsdWU6IGZ1bmNHZXRWYWx1ZUZyb20gPyBmdW5jR2V0VmFsdWVGcm9tIDogKGl0ZW0pID0+IGl0ZW1bMF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmxvd2VyVGhhbkVxdWFsLFxuICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgc3ViRmllbGQ6IDEsXG4gICAgICAgICAgICAgICAgZnVuY0dldFZhbHVlOiBmdW5jR2V0VmFsdWVUbyA/IGZ1bmNHZXRWYWx1ZVRvIDogKGl0ZW0pID0+IGl0ZW1bMV0sXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmllbGRGaWx0ZXIoY29sOiBDb2x1bW5TY2hlbWFCYXNlKSB7XG4gICAgICAgIHJldHVybiBjb2wuZmllbGRGaWx0ZXIgPz8gY29sLmZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250ZXh0Q3VzdG9tRmlsdGVyKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIHNldEluaXRGaWx0ZXIoZGVmYXVsdEZpbHRlcjogS2V5VmFsdWVUeXBlKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0RmlsdGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2tleV0gPSBkZWZhdWx0RmlsdGVyW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyX2NvbHVtbiA9IHRoaXMuX2NydWRTZXJ2aWNlLmdldEZpbHRlckZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlRmlsdGVyLCB0aGlzLmdldE1pbmltaXplRGF0YSh0aGlzLmZpbHRlckRhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwcmVwYXJlU2VhcmNoKGNvbDogQ29sdW1uU2NoZW1hQmFzZSkge1xuICAgICAgICBpZiAoY29sLmlzT3ZlcnJpZGVGaWx0ZXIgJiYgKGNvbC5vcGVyYXRvciA9PT0gT3BlcmF0b3IuY29udGFpbiB8fCBjb2wub3BlcmF0b3IgPT09IE9wZXJhdG9yLmVxdWFsKSkge1xuICAgICAgICAgICAgdGhpcy5vblNlYXJjaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VhcmNoID0gKG5vZGU/KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmxvYWRpbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKTtcbiAgICAgICAgdGhpcy5maWx0ZXJfY29sdW1uID0gdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0RmlsdGVyRnJvbVRlbXBsYXRlKHRoaXMudGVtcGxhdGVGaWx0ZXIsIHRoaXMuZ2V0TWluaW1pemVEYXRhKHRoaXMuZmlsdGVyRGF0YSkpO1xuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IDE7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGdldE1pbmltaXplRGF0YShtb2RlbCkge1xuICAgICAgICBpZiAoaXNMaXRlcmFsT2JqZWN0KG1vZGVsKSkge1xuICAgICAgICAgICAgaWYgKG1vZGVsLl9kcm9wZG93bnZhbHVlICE9IG51bGwgJiYgbW9kZWwuX2Ryb3Bkb3dudmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsW21vZGVsLl9kcm9wZG93bnZhbHVlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbW9kZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9ICdfc3RhdHVzJyAmJiBrZXkgIT0gJ19lcnJvcnMnICYmIGtleSAhPSAnX3NvdXJjZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldE1pbmltaXplRGF0YShtb2RlbFtrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQXJyYXkobW9kZWwpKSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtb2RlbCkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHRoaXMuZ2V0TWluaW1pemVEYXRhKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcnI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kZWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXJTZWFyY2gobm9kZSwgZmllbGQpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwubG9hZGluZykgcmV0dXJuO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJEYXRhW2ZpZWxkXSAhPSBudWxsICYmIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0gIT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckRhdGFbZmllbGRdID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckJveEZvY3VzKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXJOdW1iZXJTZWFyY2gobm9kZSwgY29udHJvbCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5sb2FkaW5nKSByZXR1cm47XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbC5jbGVhcigpKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gbmVlZCBjbGVhciBkYXRhIGJlY2F1c2UgaXQncyAyIHdheXMgYmluZGluZ1xuICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2gobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckJveEZvY3VzKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xlYXJEYXRlU2VhcmNoKG5vZGUsIGNvbnRyb2wsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmxvYWRpbmcpIHJldHVybjtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sLmNsZWFyKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBuZWVkIGNsZWFyIGRhdGEgYmVjYXVzZSBub3QgMiB3YXlzIGJpbmRpbmdcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckRhdGFbZmllbGRdID0gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoYW5nZURhdGVUaW1lKGV2dCwgZmllbGQpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2ZpZWxkXSA9IGV2dC52YWx1ZTtcbiAgICAgICAgdGhpcy5vblNlYXJjaCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoYW5nZUJvb2xlYW4oZXZ0LCBmaWVsZCkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJEYXRhW2ZpZWxkXS5sZW5ndGggPT0gMikge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2ZpZWxkXS5zcGxpY2UoMCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblNlYXJjaCgpO1xuICAgIH1cblxuICAgIHNob3dDaGVja0JveEZpbHRlck1lbnUoZXZ0LCBmaWVsZCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWVsZEZpbHRlciA9IGZpZWxkO1xuICAgICAgICB0aGlzLmJ1dHRvbkNvbnRleHRzID0gWy4uLnRoaXMuY2hlY2tCb3hDb250ZXh0TWVudV07XG4gICAgICAgIHRoaXMuX3Nob3dDb250ZXh0TWVudShldnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2VGaWx0ZXJCb29sZWFuKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW3RoaXMuY3VycmVudEZpZWxkRmlsdGVyXSA9IFt2YWx1ZV07XG4gICAgICAgICAgICB0aGlzLmNoZWNrQm94Q29udGV4dE1lbnUuZm9yRWFjaChtZW51ID0+IG1lbnUuc3R5bGVDbGFzcyA9IG51bGwpO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0JveENvbnRleHRNZW51WzBdLnN0eWxlQ2xhc3MgPSAnYWN0aXZlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tCb3hDb250ZXh0TWVudVsxXS5zdHlsZUNsYXNzID0gJ2FjdGl2ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckRhdGFbdGhpcy5jdXJyZW50RmllbGRGaWx0ZXJdID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uU2VhcmNoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUZpbHRlckJveEZvY3VzKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUVsOiBhbnkgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpblNhbWVCb3ggPSB0aGlzLmNoZWNrSW5Ob2RlKGFjdGl2ZUVsLCBub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWluU2FtZUJveCB8fCAoYWN0aXZlRWwgJiYgYWN0aXZlRWwubm9kZU5hbWUgIT0gJ0lOUFVUJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBub2RlLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCkgaW5wdXQuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluU2FtZUJveCkge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmVFbC5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2hvd0ZpbHRlckRyb3Bkb3duUGFuZWwoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQuY29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkcm9wZG93biA9IGV2ZW50LmNvbXBvbmVudC5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBjZWxsSGVhZGVyRmlsdGVyID0gZHJvcGRvd24uY2xvc2VzdCgndGgnKTtcblxuICAgICAgICAvLyB0aGVtIGNsYXNzIGZvY3VzLXdpdGhpbiBkZSBkcm9wZG93biBpbnB1dCBsdWMgZm9jdXMga2hvbmcgYmkgZGUgYm9pIGNhYyBzdGlja3kgY29sdW1uXG4gICAgICAgIGNlbGxIZWFkZXJGaWx0ZXIgJiYgY2VsbEhlYWRlckZpbHRlci5jbGFzc0xpc3QuYWRkKCdmb2N1cy13aXRoaW4nKTtcbiAgICB9XG5cbiAgICBvbkhpZGVGaWx0ZXJEcm9wZG93blBhbmVsKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHJvcGRvd24gPSBldmVudC5jb21wb25lbnQuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2VsbEhlYWRlckZpbHRlciA9IGRyb3Bkb3duLmNsb3Nlc3QoJ3RoJyk7XG4gICAgICAgIGNlbGxIZWFkZXJGaWx0ZXIgJiYgY2VsbEhlYWRlckZpbHRlci5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1cy13aXRoaW4nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW5pdEZpbHRlckJveEZvY3VzKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5wYXJlbnROb2RlLm9mZnNldFdpZHRoIDwgMjUwKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKCdzaG9ydC1maWx0ZXItYm94Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3J0LWZpbHRlci1ib3gnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJbk5vZGUoY2hpbGQsIHBhcmVudCkge1xuICAgICAgICBsZXQgc3RhcnQgPSBjaGlsZDtcbiAgICAgICAgd2hpbGUgKHN0YXJ0ICYmIHN0YXJ0LnBhcmVudE5vZGUgIT0gcGFyZW50KSB7XG4gICAgICAgICAgICBzdGFydCA9IHN0YXJ0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3RhcnQgIT0gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2F2ZVBhZ2VTaXplKCkge1xuICAgICAgICB0aGlzLnNhdmVQYWdlU2V0dGluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGVUYWJsZVJlbmRlcmVkKCkge1xuICAgICAgICBpZiAodGhpcy50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0FmdGVyUmVuZGVyZWQodGhpcy50YWJsZS5lbC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnRyZWVUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0FmdGVyUmVuZGVyZWQodGhpcy50cmVlVGFibGUuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeUJ1dHRvbkZ1bmN0aW9uSW5Sb3coKTtcbiAgICAgICAgdGhpcy5vblJlbG9hZGVkLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJvY2Vzc0FmdGVyUmVuZGVyZWQodGFibGVFbGVtZW50OiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN0b3BDYWxjdWxhdGluZ0Z1bmN0aW9uQ29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRhYmxlKSB0aGlzLmdldFdpZHRoRnVuY3Rpb24odGhpcy50YWJsZSk7XG5cbiAgICAgICAgICAgIHRoaXMuc3RvcENhbGN1bGF0aW5nRnVuY3Rpb25Db2x1bW5XaWR0aCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgJHRoRmlyc3QgPSB0YWJsZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQnKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0VG9wID0gJHRoRmlyc3Qub2Zmc2V0VG9wO1xuICAgICAgICBjb25zdCAkdGhzID0gdGFibGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoZWFkIHRyOm5vdCg6Zmlyc3QtY2hpbGQpIHRoJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgJHRocy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgJHRoc1tpXS5zdHlsZS50b3AgPSBgJHskdGhzW2ldLm9mZnNldFRvcCAtIG9mZnNldFRvcH1weGA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2VsZWN0IGzhuqFpIGl0ZW0gY3Xhu5FpIGPDuW5nIMSRxrDhu6NjIHNlbGVjdCB0csaw4bubYyDEkcOzXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcucmVTZWxlY3RMYXN0SXRlbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtTGFzdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0ICR0ciA9IHRoaXMuZ2V0VHJCeVJvd0RhdGEodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1MYXN0KTtcbiAgICAgICAgICAgICAgICBpZiAoJHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtTGFzdCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtTGFzdDtcbiAgICAgICAgICAgICAgICAgICAgJHRyLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBtb2RpZnlCdXR0b25GdW5jdGlvbkluUm93KCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJvd0RhdGEgb2YgdGhpcy5tb2RlbC5kYXRhU291cmNlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsID0gKGF3YWl0IHRoaXMuZ2V0TWVudUJ1dHRvbkF1dGhvcml6ZWQoYXdhaXQgdGhpcy5tZW51QnV0dG9ucyhyb3dEYXRhKSA/PyBbXSkpO1xuICAgICAgICAgICAgICAgIHJvd0RhdGEuZGlzYWJsZUZ1bmN0aW9uUm93ID0gdG90YWwubGVuZ3RoIDwgMSAmJiB0aGlzLnNldHRpbmcuZGlzYWJsZVNoYXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRkZW5CdG5GdW5jdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGlkZGVuQnRuRnVuY3Rpb24gPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZXZlcnkocCA9PiBwLmRpc2FibGVGdW5jdGlvblJvdyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUckJ5Um93RGF0YShyb3dEYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVUYWJsZSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9yYXdEYXRhU291cmNlLmZpbmRJbmRleChwID0+IHAuaWQgPT0gcm93RGF0YS5pZCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmVlVGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGB0Ym9keSB0cltyb3dJbmRleD1cIiR7aW5kZXh9XCJdYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fcmF3RGF0YVNvdXJjZS5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ciA9IHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGB0Ym9keSB0cltyb3dJbmRleD1cIiR7aW5kZXh9XCJdYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlU2VhcmNoU2NoZW1hKCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4gY2jGsGEgY+G6pXUgaMOsbmggY+G7mXQgY2hvIGRhbmggc8OhY2gnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0aW5nU2VhcmNoSW5mbyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSBuZXcgU2VhcmNoSW5mbygpO1xuICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYSA9IDxGb3JtQ29udHJvbEJhc2VbXT5bXTtcbiAgICAgICAgc2VhcmNoSW5mby5maWVsZERyb3Bkb3duID0ge307XG4gICAgICAgIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuc2V0dGluZy5jb2xzKSB7XG4gICAgICAgICAgICBpZiAoY29sLmFsbG93RmlsdGVyICE9IGZhbHNlICYmIGNvbC5yYXdDb2x1bW4gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2wuZnVsbFRleHRTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LmluZGV4T2YoY29sLmZpZWxkKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5maWVsZFNlYXJjaFRleHQucHVzaChjb2wuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCA9ICdUw6xtIGtp4bq/bSB0aGVvIGPDoWMgdHLGsOG7nW5nOic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0ICs9IGAgXCIke2NvbC5sYWJlbCA/IGNvbC5sYWJlbCA6IGNvbC5maWVsZH1cIixgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBhd2FpdCB0aGlzLnNldHRpbmcuZnVuY3Rpb24uZ2V0U2VhcmNoQ29udHJvbChjb2wuZmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaCguLi5jb250cm9sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2wuYmFzZVNlcnZpY2UgfHwgKGNvbC5kYXRhU291cmNlICYmIGNvbC5kYXRhU291cmNlLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLmZpZWxkRHJvcGRvd25bY29sLmZpZWxkXSA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBjb2wubXVsdGlwbGUgPyBPcGVyYXRvci5pbiA6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IGNvbC5tZFdpZHRoID8gY29sLm1kV2lkdGggOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkT25Jbml0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQWxsb3dEaXNhYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLmZpZWxkRHJvcGRvd25bY29sLmZpZWxkXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZGF0YVR5cGUgPT0gJ2ludCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE51bWJlclJhbmdlQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tUeXBlOiAnaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kYXRhVHlwZSA9PSAnZGVjaW1hbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE51bWJlclJhbmdlQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tUeXBlOiAnZGVjaW1hbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IDZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZGF0YVR5cGUgPT0gJ2RhdGUnIHx8IGNvbC5kYXRhVHlwZSA9PSAnZGF0ZXRpbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBEYXRlVGltZVJhbmdlQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiA2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ2hlY2tCb3hMaXN0Q29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IHRydWUsIGxhYmVsOiBgQ8OzYCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogZmFsc2UsIGxhYmVsOiBgS2jDtG5nYCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IGNvbC5tZFdpZHRoID8gY29sLm1kV2lkdGggOiAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbC5maWVsZCAhPSBjb2wuZGF0YVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGV4dENvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2wubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IGNvbC5tZFdpZHRoID8gY29sLm1kV2lkdGggOiAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VhcmNoSW5mby5maWVsZFNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2Ygc2VhcmNoSW5mby5maWVsZFNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VhcmNoSW5mby5maWVsZFNlYXJjaFRleHQuaW5kZXhPZihmaWVsZCkgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5maWVsZFNlYXJjaFRleHQucHVzaChmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCA9ICdUw6xtIGtp4bq/bSB0aGVvIGPDoWMgdHLGsOG7nW5nOic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sID0gdGhpcy5zZXR0aW5nLm1vZGVsU2NoZW1hcy5maW5kKHAgPT4gcC5maWVsZCA9PSBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2wgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCArPSBgIFwiJHtjb2wubmFtZX1cIixgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgIHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQgPSBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0LnN1YnN0cmluZygwLCBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VhcmNoSW5mbyA9IHNlYXJjaEluZm87XG4gICAgICAgIHRoaXMuY3JlYXRpbmdTZWFyY2hJbmZvID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY2hlY2tQZXJtaXNzaW9uVG9Vc2VCdXR0b24oYnV0dG9uUGVybWlzc2lvbkNvZGU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlciA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgICAgICAgIGlmICh0ZW1wID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xuICAgICAgICAgICAgfHwgKHRoaXMuY3VycmVudFVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgJiYgdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5pZ25vcmVBZG1pbiA9PT0gZmFsc2UpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5idXR0b25QZXJtaXNzaW9uTWFwLmdldChgJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGV9LyR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWV9LyR7YnV0dG9uUGVybWlzc2lvbkNvZGV9YCk7XG4gICAgfVxuXG4gICAgc2V0RHJvcGRvd25EYXRhc291cmNlKGZpZWxkOiBzdHJpbmcsIGRhdGFTb3VyY2U6IGFueVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclNjaGVtYS5kcm9wZG93bltmaWVsZF0pIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyU2NoZW1hLmRyb3Bkb3duW2ZpZWxkXS5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJdGVtV29ya2Zsb3dTZXR0aW5nKHNldHRpbmc6IENydWRMaXN0U2V0dGluZywgcm93RGF0YSkge1xuICAgICAgICBsZXQgd29ya2Zsb3dTZXR0aW5nID0gc2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXc7XG4gICAgICAgIGlmIChzZXR0aW5nLmlzV29ya2Zsb3dUcmVlXG4gICAgICAgICAgICAmJiBzZXR0aW5nLndvcmtmbG93Q29uZmlnQWR2YW5jZVxuICAgICAgICAgICAgJiYgc2V0dGluZy53b3JrZmxvd0NvbmZpZ0FkdmFuY2UuZ2V0V29ya2Zsb3dTZXR0aW5nXG4gICAgICAgICkge1xuICAgICAgICAgICAgd29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgc2V0dGluZy53b3JrZmxvd0NvbmZpZ0FkdmFuY2UuZ2V0V29ya2Zsb3dTZXR0aW5nKHJvd0RhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghd29ya2Zsb3dTZXR0aW5nIHx8IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3MubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ8SQ4buRaSB0xrDhu6NuZyBjaMawYSDEkcaw4bujYyBj4bqldSBow6xuaCBxdXkgdHLDrG5oIG5naGnhu4dwIHbhu6UnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd29ya2Zsb3dTZXR0aW5nO1xuICAgIH1cblxuICAgIGFzeW5jIHNob3dGb3JtU3RhcnRXb3JrZmxvdyhyb3dEYXRhLCBkaWFsb2c/OiBhbnkpIHtcbiAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgICBjb25zdCB3b3JrZmxvd1NldHRpbmcgPSBhd2FpdCB0aGlzLmdldEl0ZW1Xb3JrZmxvd1NldHRpbmcodGhpcy5zZXR0aW5nLCByb3dEYXRhKTtcbiAgICAgICAgaWYgKCF3b3JrZmxvd1NldHRpbmcpIHtcbiAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTuG6v3UgY3JlYXRlIHRhc2sgdGhheSB2w6wgY2jhuqF5IHF1eSB0csOsbmggduG7m2kgxJHhu5FpIHTGsOG7o25nIGNow61uaCB0aMOsIG3hu58gZm9ybSB0aMOqbSBjw7RuZyB2aeG7h2NcbiAgICAgICAgaWYgKHdvcmtmbG93U2V0dGluZy5jcmVhdGVUYXNrSW5zdGVhZCkge1xuICAgICAgICAgICAgLy8gS2nhu4NtIHRyYSDEkcOjIHThuqFvIGPDtG5nIHZp4buHYyBn4bqvbiB24bubaSBi4bqjbiBnaGkgY2jGsGFcbiAgICAgICAgICAgIC8vIE7hur91IGPDsyBy4buTaSB0aMOsIGLDoW9cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdENoZWNrRXhpc3QgPSAoYXdhaXQgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmNoZWNrRXhpc3RCeUZpbHRlcihbXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ3NlcnZpY2VDb2RlJywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZSksXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2VudGl0eScsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZW50aXR5TmFtZSksXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2VudGl0eUtleScsIE9wZXJhdG9yLmVxdWFsLCByb3dEYXRhLmlkKVxuICAgICAgICAgICAgXSkpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHRDaGVja0V4aXN0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYSBraGkga2nhu4NtIHRyYSB0cuG6oW5nIHRow6FpIMSRw6MgdOG6oW8gY8O0bmcgdmnhu4djIGhheSBjaMawYScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdENoZWNrRXhpc3QuZGF0YSkge1xuICAgICAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6o24gZ2hpIMSRw6MgxJHGsOG7o2MgdOG6oW8gY8O0bmcgdmnhu4djJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLm1vZGlmeVJvd0RhdGFGb3JUYXNrKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXR0aW5nLm1vZGlmeVJvd0RhdGFGb3JUYXNrKHJvd0RhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbW9kZWxUYXNrID0ge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKSwgLy8gSWQgbsOgeSBj4bqnbiB0aGnhur90IHbDrCBz4bq9IGTDuW5nIHRyb25nIGjDoG0gaW5zZXJ0VGFza0FuZFJlbG9hZFxuICAgICAgICAgICAgICAgIGNoZWNrVW5pcXVlVGFza0ZvckVudGl0eTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAvLyBhdXRvTmV4dFN0ZXA6IHdvcmtmbG93U2V0dGluZy5hdXRvTmV4dFN0ZXAsXG4gICAgICAgICAgICAgICAgaWRMb2FpQ29uZ1ZpZWM6IHdvcmtmbG93U2V0dGluZy5pZExvYWlDb25nVmllY0RlZmF1bHQsXG4gICAgICAgICAgICAgICAgc2VydmljZUNvZGU6IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZSxcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lLFxuICAgICAgICAgICAgICAgIGVudGl0eUtleTogcm93RGF0YS5pZCxcbiAgICAgICAgICAgICAgICB0ZW46IHRoaXMuZ2V0VGVuQ29uZ1ZpZWMod29ya2Zsb3dTZXR0aW5nLnRlbXBsYXRlVGFza05hbWUsIHJvd0RhdGEpLFxuICAgICAgICAgICAgICAgIGRpbmhLZW1OZ2hpZXBWdUR0b3M6IFtdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBU4buVbmcgaOG7o3AgbW9kZWwgxJHDrW5oIGvDqG0gbmdoaeG7h3AgduG7pSBlbnRpdHlcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRMaW5rID0gYXdhaXQgdGhpcy5nZXRDb3B5UGF0aCh0aGlzLnNldHRpbmcsIHJvd0RhdGEpO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRMaW5rKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxFbnRpdHkgPSB0aGlzLnBhcnNlQXR0YWNoTGluayhjb250ZW50TGluayk7XG4gICAgICAgICAgICAgICAgbW9kZWxUYXNrLmRpbmhLZW1OZ2hpZXBWdUR0b3MgPSBtb2RlbEVudGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcubW9kaWZ5SXRlbVRhc2spIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmcubW9kaWZ5SXRlbVRhc2sobW9kZWxUYXNrLCByb3dEYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gS2nhu4NtIHRyYSBu4bq/dSBjw7MgY+G6pXUgaMOsbmggdOG7sSDEkeG7mW5nIGLhuq90IMSR4bqndSB0YXNrLCB2w6AgcGjhuqNpIGPDsyBsb+G6oWkgY8O0bmcgdmnhu4djIG3hurdjIMSR4buLbmhcbiAgICAgICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcuYXV0b1N0YXJ0VGFza1xuICAgICAgICAgICAgICAgICYmIHdvcmtmbG93U2V0dGluZy5pZExvYWlDb25nVmllY0RlZmF1bHRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vID0+IFRow6wgbOG6pXkgdGjDqm0gdGjDtG5nIHRpbiBxdXkgdHLDrG5oIG3hurdjIMSR4buLbmggY2hvIHRhc2tcbiAgICAgICAgICAgICAgICAvLyBO4bq/dSBs4bqleSDEkcaw4bujYyB0aMOsIHThu7EgxJHhu5luZyBi4bqvdCDEkeG6p3UsIG7hur91IGtow7RuZyB0aMOsIHbhuqtuIHBo4bqjaSBt4bufIGzDqm4gZm9ybSBjw7RuZyB2aeG7h2NcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrV29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgdGhpcy5fZG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlLmdldFdvcmtmbG93U2V0dGluZ0J5SWRMb2FpQ29uZ1ZpZWMod29ya2Zsb3dTZXR0aW5nLmlkTG9haUNvbmdWaWVjRGVmYXVsdCk7XG4gICAgICAgICAgICAgICAgaWYgKHRhc2tXb3JrZmxvd1NldHRpbmcgIT0gbnVsbCAmJiB0YXNrV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZSkge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbFRhc2tbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSA9IHRhc2tXb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydFRhc2tBbmRSZWxvYWQobW9kZWxUYXNrLCByb3dEYXRhLCB0YXNrV29ya2Zsb3dTZXR0aW5nKTtcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFdvcmtmbG93KHJvd0RhdGEsIHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3NbMF0pO1xuICAgICAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGFydFdvcmtmbG93TW9kZWwuZGF0YS5pdGVtID0gcm93RGF0YTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBjb21wUmVmID0gYXdhaXQgdGhpcy5fZmVkZXJhdGlvblNlcnZpY2UubG9hZFJlbW90ZU5ld0NvbXBvbmVudCgnY29tbW9uYXBwJywgJ1N0YXJ0V29ya2Zsb3dDb21wb25lbnQnLCB0aGlzLnN0YXJ0V29ya2Zsb3dWaWV3Q29udGFpbmVyKTtcbiAgICAgICAgICAgIGlmIChkaWFsb2cpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2cuYnV0dG9uVGVtcGxhdGVJbnB1dCA9IGNvbXBSZWYuaW5zdGFuY2UuYnV0dG9uVGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wUmVmLndvcmtmbG93cyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3M7XG4gICAgICAgICAgICBjb21wUmVmLmRlZmF1bHRXb3JrZmxvdyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGU7XG4gICAgICAgICAgICBjb21wUmVmLmluc3RhbmNlLm9uU2F2ZWQuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuaGFuZGxlU3RhcnRXb3JrZmxvd0Zyb21EaWFsb2coZXZlbnQpKTtcbiAgICAgICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25DYW5jZWwuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFRlbkNvbmdWaWVjKHRlbXBsYXRlVGV4dDogc3RyaW5nLCByb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlclRleHRUZW1wbGF0ZShcbiAgICAgICAgICAgIGdldFJlZ2V4UmVzdWx0KHRlbXBsYXRlVGV4dCwgUmVnZXhTcGxpdEZpZWxkQnlJdGVtLCBleGVjUmVzdWx0ID0+IGV4ZWNSZXN1bHRbMV0pLFxuICAgICAgICAgICAgdGVtcGxhdGVUZXh0LCByb3dEYXRhXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b25nSG9wV29ya2Zsb3dIaXN0b3J5Rm9yTmV4dEZpcnN0U3RlcChcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeTogYW55LCBpdGVtVGFzazogYW55LCB3b3JrZmxvd1NldHRpbmc6IFdvcmtmbG93U2V0dGluZ05ldywgd29ya2Zsb3dDb2RlOiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuaWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5pZ25vcmVWYWxpZGF0ZUJhc2VJbkJ1c3NpbmVzcyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93ID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cy5maW5kKHEgPT4gcS5jb2RlID09IHdvcmtmbG93Q29kZSk7XG4gICAgICAgIGlmICh3b3JrZmxvdyA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3Qgc3RhdGVTdGFydCA9IHdvcmtmbG93LmRhdGEubWFjaGluZXMuZmluZChxID0+IHEudHlwZSA9PSBFbnVtU3RhdGVUeXBlLlNUQVJUKTtcbiAgICAgICAgaWYgKHN0YXRlU3RhcnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGFjdGlvbkNvZGUgPSBpdGVtV29ya2Zsb3dIaXN0b3J5LmFjdGlvbkNvZGU7XG4gICAgICAgIGNvbnN0IGV4aXN0QWN0aW9uID0gd29ya2Zsb3cuZGF0YS5jb25uZWN0aW9ucy5zb21lKHggPT4geC5zb3VyY2UgPT0gc3RhdGVTdGFydC5pZFxuICAgICAgICAgICAgJiYgeC5jb2RlID09IGFjdGlvbkNvZGVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFleGlzdEFjdGlvbikgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xuICAgICAgICB0aGlzLl9jb25nVmllY1NlcnZpY2UuYWRqdXN0U2V0dGluZ1dvcmtmbG93Rm9yQ3J1ZExpc3QoY3J1ZExpc3RTZXR0aW5nKTtcbiAgICAgICAgbGV0IG5hbWUgPSAnJztcbiAgICAgICAgaWYgKHR5cGVvZiBjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBuYW1lID0gaXRlbVRhc2tbPHN0cmluZz4oY3J1ZExpc3RTZXR0aW5nLmRpc3BsYXlGaWVsZCldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbmFtZSA9ICg8RnVuY3Rpb24+KGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQpKShpdGVtVGFzayk7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZSA9IGAke2NydWRMaXN0U2V0dGluZy5iYXNlU2VydmljZS5vYmplY3ROYW1lfSAke25hbWV9YDtcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS50YWJsZU5hbWUgPSB0aGlzLl9jb25nVmllY1NlcnZpY2UuZW50aXR5TmFtZTtcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5vYmplY3RGdWxsTmFtZSA9IG5hbWU7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnkub2JqZWN0TmFtZSA9IGNydWRMaXN0U2V0dGluZy5iYXNlU2VydmljZS5vYmplY3ROYW1lO1xuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LndvcmtmbG93Q29kZSA9IHdvcmtmbG93Q29kZTtcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5pdGVtSWQgPSBpdGVtVGFzay5pZDtcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5zb3VyY2VTdGF0dXNDb2RlID0gc3RhdGVTdGFydC5jb2RlO1xuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LmFjdGlvbkNvZGUgPSBhY3Rpb25Db2RlO1xuICAgICAgICByZXR1cm4gaXRlbVdvcmtmbG93SGlzdG9yeTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGluc2VydFRhc2tBbmRSZWxvYWQobW9kZWxUYXNrLCByb3dEYXRhLCB3b3JrZmxvd1NldHRpbmc6IFdvcmtmbG93U2V0dGluZ05ldykge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmdldERhdGFGb3JOZXh0Rmlyc3RTdGVwVGFzaykge1xuICAgICAgICAgICAgbW9kZWxUYXNrLml0ZW1Xb3JrZmxvd0hpc3RvcnkgPSBhd2FpdCB0aGlzLnNldHRpbmcuZ2V0RGF0YUZvck5leHRGaXJzdFN0ZXBUYXNrKHJvd0RhdGEpO1xuICAgICAgICAgICAgbW9kZWxUYXNrLml0ZW1Xb3JrZmxvd0hpc3RvcnkgPSB0aGlzLnRvbmdIb3BXb3JrZmxvd0hpc3RvcnlGb3JOZXh0Rmlyc3RTdGVwKFxuICAgICAgICAgICAgICAgIG1vZGVsVGFzay5pdGVtV29ya2Zsb3dIaXN0b3J5LCBtb2RlbFRhc2ssIHdvcmtmbG93U2V0dGluZywgbW9kZWxUYXNrW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLnBvc3QobW9kZWxUYXNrKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzLCAnJywgZiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblN0YXJ0ZWRXb3JrZmxvdy5lbWl0KHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNhbGwgYmFjayBraGkg4bqlbiBsxrB1IHRyw6puIGZvcm0gYuG6r3QgxJHhuqd1IHF1eSB0csOsbmhcbiAgICAgKiBjcnVkLWxpc3Qgc+G6vSBn4buNaSBow6BtIGzGsHUgY2jhu6kgZm9ybSBzdGFydCB3b3JrZmxvdyBrIGzDoG0gZ8OsIGPhuqNcbiAgICAgKiDEkOG7giBU4bqsTiBE4bukTkcgTOG6oEkgSMOATSBzdGFydFdvcmtmbG93IGPhu6dhIGNydWQtbGlzdFxuICAgICAqL1xuICAgIGhhbmRsZVN0YXJ0V29ya2Zsb3dGcm9tRGlhbG9nKHdvcmtmbG93OiBXZkl0ZW0pIHtcbiAgICAgICAgdGhpcy5zdGFydFdvcmtmbG93TW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhcnRXb3JrZmxvdyh0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5kYXRhLml0ZW0sIHdvcmtmbG93KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2hvd0FjdGlvbldvcmtmbG93KGV2dCwgcm93RGF0YSwgZGlhbG9nUHJvY2Vzc1dvcmtmbG93Rm9ybSA9IG51bGwsIGRpYWxvZ0RldGFpbFRhc2sgPSBudWxsLCBkaWFsb2dDaG9ZS2llbkZvcm0gPSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dpbmdBY3Rpb25Xb3JrZmxvdykgcmV0dXJuO1xuICAgICAgICBpZiAoIXJvd0RhdGEpIHJvd0RhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5kaWFsb2dQcm9jZXNzV29ya2Zsb3dGb3JtID0gZGlhbG9nUHJvY2Vzc1dvcmtmbG93Rm9ybTtcbiAgICAgICAgdGhpcy5kaWFsb2dEZXRhaWxUYXNrID0gZGlhbG9nRGV0YWlsVGFzaztcbiAgICAgICAgdGhpcy5kaWFsb2dDaG9ZS2llbkZvcm0gPSBkaWFsb2dDaG9ZS2llbkZvcm07XG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMgPSBhd2FpdCB0aGlzLmdldEJ1dHRvbkNvbnRleHQocm93RGF0YSk7XG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbkNvbnRleHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3dDb250ZXh0TWVudShldnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRCdXR0b25Db250ZXh0KHJvd0RhdGEpIHtcbiAgICAgICAgdGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgICBsZXQgcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cgPSBudWxsO1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5pc1dvcmtmbG93VHJlZSAmJiB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XG4gICAgICAgICAgICByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdyA9IGF3YWl0IHRoaXMuZ2V0QWN0aW9uV29ya2Zsb3dCeVRhc2socm93RGF0YSwgcm93RGF0YS5kaWFsb2dIaXN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdEdldEFjdGlvbldvcmtmbG93ID0gYXdhaXQgdGhpcy5nZXRBY3Rpb25Xb3JrZmxvdyhyb3dEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dpbmdBY3Rpb25Xb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cpKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyBjw7MgaMOgbmggxJHhu5luZyBraOG6oyBk4bulbmcnKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidXR0b25Db250ZXh0cyA9IHJlc3VsdEdldEFjdGlvbldvcmtmbG93O1xuICAgICAgICAvLyBO4bq/dSBsw6AgYuG6o24gZ2hpIG5naGnhu4dwIHbhu6UgbcOgIGPDsyBn4bqvbiB0aMO0bmcgdGluIHRhc2sgdGjDrCBi4buVIHN1bmcgdGjDqm0gbWVudSB4ZW0gY8O0bmcgdmnhu4djXG4gICAgICAgIGlmIChyb3dEYXRhW0ZpZWxkRGVmaW5lSGFzVGFza10pIHtcbiAgICAgICAgICAgIGJ1dHRvbkNvbnRleHRzLnVuc2hpZnQoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYFhlbSBjw7RuZyB2aeG7h2NgLFxuICAgICAgICAgICAgICAgICAgICBpY29uOiAncGkgcGktbWFwJyxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy52aWV3VGFza0RldGFpbChyb3dEYXRhKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnV0dG9uQ29udGV4dHM7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QWN0aW9uV29ya2Zsb3cocm93RGF0YSk6IFByb21pc2U8YW55W10gfCB2b2lkPiB7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuZ2V0SXRlbVdvcmtmbG93U2V0dGluZyh0aGlzLnNldHRpbmcsIHJvd0RhdGEpO1xuICAgICAgICBpZiAoIXdvcmtmbG93U2V0dGluZykgcmV0dXJuO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QWN0aW9uV29ya2Zsb3dCYXNlKHRoaXMuc2V0dGluZywgcm93RGF0YSwgd29ya2Zsb3dTZXR0aW5nKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRBY3Rpb25Xb3JrZmxvd0J5VGFzayhyb3dEYXRhLCBkaWFsb2c/OiBhbnkpOiBQcm9taXNlPGFueVtdIHwgdm9pZD4ge1xuICAgICAgICBpZiAoIXJvd0RhdGEuX19pc0dvdENvbmdWaWVjKSB7XG4gICAgICAgICAgICByb3dEYXRhLl9faXRlbUNvbmdWaWVjID0gKGF3YWl0IHRoaXMuX2NvbmdWaWVjU2VydmljZS5nZXREZXRhaWxCeUZpbHRlcihcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdzZXJ2aWNlQ29kZScsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5JywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2VudGl0eUtleScsIE9wZXJhdG9yLmVxdWFsLCByb3dEYXRhLmlkKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICkpLmRhdGE7XG4gICAgICAgICAgICByb3dEYXRhLl9faXNHb3RDb25nVmllYyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcm93RGF0YSA9IHJvd0RhdGEuX19pdGVtQ29uZ1ZpZWM7XG4gICAgICAgIGlmICghcm93RGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY8O0bmcgdmnhu4djIGfhuq9uIHbhu5tpIGLhuqNuIGdoaScpO1xuICAgICAgICB9XG4gICAgICAgIHJvd0RhdGEuX193b3JrZmxvd0NvZGUgPSByb3dEYXRhLndvcmtmbG93Q29kZTtcblxuICAgICAgICBjb25zdCB3b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UpO1xuICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UuY2hhbmdlRW5kcG9pbnQodGhpcy5fY29uZ1ZpZWNTZXJ2aWNlKVxuICAgICAgICAgICAgLmFwcGVuZEluZm9Gb3JXb3JrZmxvdyhcbiAgICAgICAgICAgICAgICB1c2VyU2VydmljZS5nZXRVc2VySWRDb21iaW5lKCksIFtyb3dEYXRhXSwgJ2lkJywgdGhpcy5zZXR0aW5nLmlnbm9yZVdvcmtmbG93XG4gICAgICAgICAgICApO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZS5nZXRXb3JrZmxvd1NldHRpbmdCeUlkTG9haUNvbmdWaWVjKHJvd0RhdGEuaWRMb2FpQ29uZ1ZpZWMpO1xuXG4gICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZS5hZGp1c3RTZXR0aW5nV29ya2Zsb3dGb3JDcnVkTGlzdChjcnVkTGlzdFNldHRpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QWN0aW9uV29ya2Zsb3dCYXNlKGNydWRMaXN0U2V0dGluZywgcm93RGF0YSwgd29ya2Zsb3dTZXR0aW5nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRBY3Rpb25Xb3JrZmxvd0Jhc2UoY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEsIHdvcmtmbG93U2V0dGluZzogV29ya2Zsb3dTZXR0aW5nTmV3KTogUHJvbWlzZTxhbnlbXSB8IHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IHJvd0RhdGE7XG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMgPSBbXTtcbiAgICAgICAgY29uc3QgYnV0dG9uQ29udGV4dHMgPSBbXTtcbiAgICAgICAgLy8gTuG6v3UgayBjw7Mgd29ya2Zsb3cgY29kZSBuZ2jEqWEgbMOgIGNoxrBhIGNo4bqheSBxdXkgdHLDrG5oIGhv4bq3YyBxdXkgdHLDrG5oIGzhu5dpID0+IENobyBjaOG6oXkgbOG6oWlcbiAgICAgICAgaWYgKCFyb3dEYXRhLl9fd29ya2Zsb3dDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtV29ya2Zsb3dTZXR0aW5nID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cy5maW5kKHEgPT4gcS5jb2RlID09IHJvd0RhdGEuX193b3JrZmxvd0NvZGUpO1xuICAgICAgICAgICAgaWYgKCFpdGVtV29ya2Zsb3dTZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgS2jDtG5nIHTDrG0gdGjhuqV5IHF1eSB0csOsbmggY8OzIG3DoyAke3Jvd0RhdGEuX193b3JrZmxvd0NvZGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gaXRlbVdvcmtmbG93U2V0dGluZy5kYXRhLmFjdGlvbnNbcm93RGF0YS5fX3RyYW5nVGhhaV07XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25BbGxvd3MgPSAoYXdhaXQgY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEFjdGlvbkFsbG93KHJvd0RhdGEuaWQpKS5kYXRhO1xuICAgICAgICAgICAgaWYgKGFjdGlvbkFsbG93cykge1xuICAgICAgICAgICAgICAgIGFjdGlvbkFsbG93cy5mb3JFYWNoKGFjdGlvbkNvZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25zLmZpbmQocSA9PiBxLmNvZGUgPT0gYWN0aW9uQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbkNvbnRleHRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvVGh1VHU6IGFjdGlvbi5zb1RodVR1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkNvZGU6IGFjdGlvbi5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246IHRoaXMuc291cmNlSWNvblthY3Rpb24uaWNvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGFjdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMucHJvY2Vzc1dvcmtmbG93KGNydWRMaXN0U2V0dGluZywgaXRlbVdvcmtmbG93U2V0dGluZywgYWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEzhu5dpIGsgbOG6pXkgxJHGsOG7o2MgYWN0aW9uIGFsbG93XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidXR0b25Db250ZXh0cy5zb3J0KG11bHRpcGxlU29ydCgnc29UaHVUdScpKTtcbiAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgbmfGsOG7nWkgY3Xhu5FpIGPDuW5nIHRo4buxYyBoaeG7h24gY8OzIHBo4bqjaSBuZ8aw4budaSBoaeG7h24gdOG6oWkga2jDtG5nIHRow6wgY2hvIHBow6lwIHJvbGxiYWNrXG4gICAgICAgICAgICBjb25zdCB3b3JrZmxvd0hpc3RvcnlTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93SGlzdG9yeVNlcnZpY2UpO1xuICAgICAgICAgICAgd29ya2Zsb3dIaXN0b3J5U2VydmljZS5jaGFuZ2VFbmRwb2ludCh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xuICAgICAgICAgICAgY29uc3QgdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xuICAgICAgICAgICAgY29uc3QgdXNlcklkID0gdXNlclNlcnZpY2UuZ2V0SWQoKTtcbiAgICAgICAgICAgIGxldCB1c2VySWRTdHJpbmdVcHBlciA9ICcnO1xuXG4gICAgICAgICAgICBpZiAodXNlcklkKSB7XG4gICAgICAgICAgICAgICAgdXNlcklkU3RyaW5nVXBwZXIgPSB1c2VySWQudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyb3dEYXRhLl9faXNDb0VkaXQpIHtcbiAgICAgICAgICAgICAgICBidXR0b25Db250ZXh0cy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAncGkgcGktYmFja3dhcmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFRleHRBY3Rpb25DaHV5ZW5YdUx5QmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkNvZGU6IEFjdGlvbkNodXllblh1THlCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5zaG93Rm9ybUNodXllblh1THkoY3J1ZExpc3RTZXR0aW5nLCBpdGVtV29ya2Zsb3dTZXR0aW5nLCByb3dEYXRhKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Xb3JrZmxvd0hpc3RvcnlMYXN0ID0gKGF3YWl0IHdvcmtmbG93SGlzdG9yeVNlcnZpY2UuY2hhbmdlRW5kcG9pbnQoY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlKS5nZXRMYXN0QnlJdGVtSWQocm93RGF0YS5pZCkpLmRhdGE7XG4gICAgICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeUxhc3RcbiAgICAgICAgICAgICAgICAmJiBpdGVtV29ya2Zsb3dIaXN0b3J5TGFzdC5hY3Rpb25Db2RlICE9IE1hQWN0aW9uQmF0RGF1UXV5VHJpbmhcbiAgICAgICAgICAgICAgICAmJiBpdGVtV29ya2Zsb3dIaXN0b3J5TGFzdC51c2VySWRDcmVhdGVkLnRvVXBwZXJDYXNlKCkgPT0gdXNlcklkU3RyaW5nVXBwZXJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuc2hvd0J1dHRvblRodUhvaVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgYnV0dG9uQ29udGV4dHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXJlcGxheScsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1RodSBo4buTaScsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnJvbGxiYWNrV29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1dHRvbkNvbnRleHRzLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAncGkgcGktY29tbWVudHMnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NobyDDvSBraeG6v24nLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnNob3dGb3JtQ2hvWUtpZW4oY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAncGkgcGktY2FsZW5kYXInLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogQnV0dG9uVGV4dEFjdGlvbkNvbmdWaWVjLlhFTV9MSUNIX1NVLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnZpZXdIaXN0b3J5V29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnV0dG9uQ29udGV4dHM7XG4gICAgfVxuXG4gICAgYXN5bmMgdmlld1Rhc2tEZXRhaWwocm93RGF0YSkge1xuICAgICAgICBjb25zdCBpdGVtVGFzayA9IChhd2FpdCB0aGlzLl9jb25nVmllY1NlcnZpY2UuZ2V0RGV0YWlsQnlGaWx0ZXIoW1xuICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2VudGl0eUtleScsIE9wZXJhdG9yLmVxdWFsLCByb3dEYXRhLmlkKVxuICAgICAgICBdKSkuZGF0YTtcbiAgICAgICAgaWYgKGl0ZW1UYXNrID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBjw7RuZyB2aeG7h2MgZ+G6r24gduG7m2kgYuG6o24gZ2hpJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFza0Zvcm1Nb2RlbDogYW55ID0ge307XG4gICAgICAgIHRhc2tGb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLlZJRVc7XG4gICAgICAgIHRhc2tGb3JtTW9kZWwuZGF0YSA9IGl0ZW1UYXNrO1xuICAgICAgICB0aGlzLmRldGFpbFRhc2tNb2RlbC5kYXRhLnRhc2tGb3JtTW9kZWwgPSB0YXNrRm9ybU1vZGVsO1xuICAgICAgICB0aGlzLmRldGFpbFRhc2tNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSBhd2FpdCB0aGlzLl9mZWRlcmF0aW9uU2VydmljZS5sb2FkUmVtb3RlTmV3Q29tcG9uZW50KCdjb25ndmllYycsICdCYXNlQ29uZ1ZpZWNGb3JtQ29tcG9uZW50JywgdGhpcy5kZXRhaWxUYXNrVmlld0NvbnRhaW5lcik7XG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0RldGFpbFRhc2spIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nRGV0YWlsVGFzay5idXR0b25UZW1wbGF0ZUlucHV0ID0gY29tcFJlZi5pbnN0YW5jZS5idXR0b25UZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb21wUmVmLmluc3RhbmNlLm1vZGVsID0gdGFza0Zvcm1Nb2RlbDtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5mb3JjZU9ubHlWaWV3ID0gdHJ1ZTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vbkNhbmNlbC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5kZXRhaWxUYXNrTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2UpO1xuICAgIH1cblxuICAgIHJvbGxiYWNrV29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEpIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4ga2jDtGkgcGjhu6VjIHRy4bqhbmcgdGjDoWkgdHLGsOG7m2MgxJHDsycpXG4gICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcmVzKSByZXR1cm47XG4gICAgICAgICAgICAgICAgbGV0IG5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHJvd0RhdGFbPHN0cmluZz4oY3J1ZExpc3RTZXR0aW5nLmRpc3BsYXlGaWVsZCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9ICg8RnVuY3Rpb24+KGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQpKShyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlLnJvbGxiYWNrKHJvd0RhdGEsIFtjcnVkTGlzdFNldHRpbmcub2JqZWN0TmFtZSwgbmFtZV0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJ0tow7RpIHBo4bulYyB0cuG6oW5nIHRow6FpIHRyxrDhu5tjIHRow6BuaCBjw7RuZycsIGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJvbGxiYWNrZWRXb3JrZmxvdy5lbWl0KHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWRTdGF0dXNXb3JrZmxvdy5lbWl0KHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIHZpZXdIaXN0b3J5V29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGE6IG51bWJlcikge1xuICAgICAgICBjb25zdCB3b3JrZmxvd1NldHRpbmcgPSBhd2FpdCB0aGlzLmdldEl0ZW1Xb3JrZmxvd1NldHRpbmcoY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKTtcbiAgICAgICAgaWYgKCF3b3JrZmxvd1NldHRpbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IHJvd0RhdGE7XG4gICAgICAgIHRoaXMud29ya2Zsb3dIaXN0b3J5TW9kZWwuZGF0YSA9IHt9O1xuICAgICAgICB0aGlzLndvcmtmbG93SGlzdG9yeU1vZGVsLmRhdGEuc2V0dGluZyA9IGNydWRMaXN0U2V0dGluZztcbiAgICAgICAgdGhpcy53b3JrZmxvd0hpc3RvcnlNb2RlbC5kYXRhLndvcmtmbG93U2V0dGluZyA9IHdvcmtmbG93U2V0dGluZztcbiAgICAgICAgdGhpcy53b3JrZmxvd0hpc3RvcnlNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSBhd2FpdCB0aGlzLl9mZWRlcmF0aW9uU2VydmljZS5sb2FkUmVtb3RlTmV3Q29tcG9uZW50KCdjb21tb25hcHAnLCAnV29ya2Zsb3dIaXN0b3J5TmV3Q29tcG9uZW50JywgdGhpcy53b3JrZmxvd0hpc3RvcnlOZXdWaWV3Q29udGFpbmVyKTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5idXNpbmVzc1NldHRpbmcgPSBjcnVkTGlzdFNldHRpbmc7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UudGFibGVOYW1lID0gdGhpcy53b3JrZmxvd0hpc3RvcnlNb2RlbC5kYXRhLnRhYmxlTmFtZTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5pdGVtID0gcm93RGF0YTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS53b3JrZmxvd1NldHRpbmcgPSB3b3JrZmxvd1NldHRpbmc7XG4gICAgICAgIC8vIGNvbXBSZWYuaW5zdGFuY2Uub25DYW5jZWwuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMud29ya2Zsb3dIaXN0b3J5TW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2UpO1xuICAgIH1cblxuICAgIGhhbmRsZUhpZGVIaXN0b3J5V29ya2Zsb3coKSB7XG4gICAgICAgIHRoaXMuc2hvd0hpc3RvcnlXb3JrZmxvdyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlV29ya2Zsb3dDdXN0b20oY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIGl0ZW1Xb3JrZmxvd1NldHRpbmc6IGFueSwgd29ya2Zsb3dBY3Rpb246IFdmQWN0aW9uLCBjdXJyZW50SXRlbTogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHByb2Nlc3NXb3JrZmxvdyhjcnVkTGlzdFNldHRpbmc6IENydWRMaXN0U2V0dGluZywgaXRlbVdvcmtmbG93U2V0dGluZzogYW55LCB3b3JrZmxvd0FjdGlvbjogV2ZBY3Rpb24pIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVSZXMgPSBhd2FpdCB0aGlzLnZhbGlkYXRlV29ya2Zsb3dDdXN0b20oY3J1ZExpc3RTZXR0aW5nLCBpdGVtV29ya2Zsb3dTZXR0aW5nLCB3b3JrZmxvd0FjdGlvbiwgdGhpcy5jdXJyZW50SXRlbSk7XG4gICAgICAgIGlmICghdmFsaWRhdGVSZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAod29ya2Zsb3dBY3Rpb24ub3Blbk5ld1RhYikge1xuICAgICAgICAgICAgbGV0IGRvbWFpbk5ld1RhYiA9IHdvcmtmbG93QWN0aW9uLmRvbWFpbk5ld1RhYjtcbiAgICAgICAgICAgIGlmICghZG9tYWluTmV3VGFiKSBkb21haW5OZXdUYWIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgICAgICAgICAgd2luZG93Lm9wZW4oYCR7ZG9tYWluTmV3VGFifS8ke3dvcmtmbG93QWN0aW9uLmxpbmtOZXdUYWJ9I19pdGVtSWQ9JHt0aGlzLmN1cnJlbnRJdGVtLmlkfWAsICdfYmxhbmsnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghd29ya2Zsb3dBY3Rpb24ub3BlblBvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dXYWl0Qm94KCk7XG4gICAgICAgICAgICBjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2UuY2hhbmdlU3RhdGVCYXNlQnlBY3Rpb24odGhpcy5jdXJyZW50SXRlbS5pZCwgd29ya2Zsb3dBY3Rpb24uY29kZSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZVdpdGhXYWl0Qm94KHJlcywgJycsIGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVByb2Nlc3NlZFdvcmtmbG93QmFzZSgpO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5oaWRlV2FpdEJveCgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuaGVhZGVyID0gd29ya2Zsb3dBY3Rpb24ubmFtZTtcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5wb3B1cFNpemUgPSBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDEwMDAsIGhlaWdodDogODAwIH0pO1xuICAgICAgICBpZiAoIXRoaXMucHJvY2Vzc1dvcmtmbG93Rm9ybVZpZXdDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuZGF0YS5zZXR0aW5nID0gY3J1ZExpc3RTZXR0aW5nO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5kYXRhLmFjdGlvbiA9IHdvcmtmbG93QWN0aW9uO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5kYXRhLndvcmtmbG93ID0gaXRlbVdvcmtmbG93U2V0dGluZztcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCBjb21wUmVmID0gYXdhaXQgdGhpcy5fZmVkZXJhdGlvblNlcnZpY2UubG9hZFJlbW90ZU5ld0NvbXBvbmVudCgnY29tbW9uYXBwJywgJ1Byb2Nlc3NXb3JrZmxvd0Zvcm1Db21wb25lbnQnLCB0aGlzLnByb2Nlc3NXb3JrZmxvd0Zvcm1WaWV3Q29udGFpbmVyKTtcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nUHJvY2Vzc1dvcmtmbG93Rm9ybSkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dQcm9jZXNzV29ya2Zsb3dGb3JtLmJ1dHRvblRlbXBsYXRlSW5wdXQgPSBjb21wUmVmLmluc3RhbmNlLmJ1dHRvblRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuaXRlbSA9IHRoaXMuY3VycmVudEl0ZW07XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuYnVzaW5lc3NTZXR0aW5nID0gY3J1ZExpc3RTZXR0aW5nO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLndvcmtmbG93ID0gaXRlbVdvcmtmbG93U2V0dGluZztcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5hY3Rpb24gPSB3b3JrZmxvd0FjdGlvbjtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vblNhdmVkLnN1YnNjcmliZShldmVudCA9PiB0aGlzLmhhbmRsZVByb2Nlc3NlZFdvcmtmbG93QmFzZSgpKTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vbkNhbmNlbC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2hvd0Zvcm1DaG9ZS2llbihjcnVkTGlzdFNldHRpbmc6IENydWRMaXN0U2V0dGluZywgcm93RGF0YTogYW55KSB7XG4gICAgICAgIHRoaXMuY2hvWUtpZW5Nb2RlbC5kYXRhLnJvd0RhdGEgPSByb3dEYXRhO1xuICAgICAgICB0aGlzLmNob1lLaWVuTW9kZWwuZGF0YS5zZXR0aW5nID0gY3J1ZExpc3RTZXR0aW5nO1xuICAgICAgICB0aGlzLmNob1lLaWVuTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBjb21wUmVmID0gYXdhaXQgdGhpcy5fZmVkZXJhdGlvblNlcnZpY2UubG9hZFJlbW90ZU5ld0NvbXBvbmVudCgnY29tbW9uYXBwJywgJ0Nob1lLaWVuRm9ybUNvbXBvbmVudCcsIHRoaXMuY2hvWUtpZW5Gb3JtVmlld0NvbnRhaW5lcik7XG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ0Nob1lLaWVuRm9ybSkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dDaG9ZS2llbkZvcm0uYnV0dG9uVGVtcGxhdGVJbnB1dCA9IGNvbXBSZWYuaW5zdGFuY2UuYnV0dG9uVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5idXNzaW5lc3NTZXR0aW5nID0gY3J1ZExpc3RTZXR0aW5nO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnJvd0l0ZW0gPSByb3dEYXRhO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLm9uU2F2ZWQuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuY2hvWUtpZW5Nb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZSk7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25DYW5jZWwuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuY2hvWUtpZW5Nb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZSk7XG4gICAgfVxuICAgIGFzeW5jIHNob3dGb3JtQ2h1eWVuWHVMeShjcnVkTGlzdFNldHRpbmc6IENydWRMaXN0U2V0dGluZywgaXRlbVdvcmtmbG93U2V0dGluZzogYW55LCByb3dEYXRhKSB7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93SGlzdG9yeVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dIaXN0b3J5U2VydmljZSk7XG4gICAgICAgIHdvcmtmbG93SGlzdG9yeVNlcnZpY2UuY2hhbmdlRW5kcG9pbnQodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcbiAgICAgICAgY29uc3QgaXRlbVdvcmtmbG93SGlzdG9yeUxhc3QgPSAoYXdhaXQgd29ya2Zsb3dIaXN0b3J5U2VydmljZS5jaGFuZ2VFbmRwb2ludChjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2UpLmdldExhc3RCeUl0ZW1JZChyb3dEYXRhLmlkKSkuZGF0YTtcbiAgICAgICAgaWYgKCFpdGVtV29ya2Zsb3dIaXN0b3J5TGFzdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGLGsOG7m2MgdGjhu7FjIGhp4buHbiBn4bqnbiBuaOG6pXQgY+G7p2EgYuG6o25nIGdoaSEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IGl0ZW1Xb3JrZmxvd1NldHRpbmcuZGF0YS5tYWNoaW5lcy5maW5kKHggPT4geC5jb2RlID09IHJvd0RhdGEuX190cmFuZ1RoYWkpO1xuICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuaGVhZGVyID0gVGV4dEFjdGlvbkNodXllblh1THlCYXNlO1xuXG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSBhd2FpdCB0aGlzLl9mZWRlcmF0aW9uU2VydmljZS5sb2FkUmVtb3RlTmV3Q29tcG9uZW50KCdjb21tb25hcHAnLCAnUHJvY2Vzc1dvcmtmbG93Rm9ybUNvbXBvbmVudCcsIHRoaXMucHJvY2Vzc1dvcmtmbG93Rm9ybVZpZXdDb250YWluZXIpO1xuICAgICAgICBpZiAodGhpcy5kaWFsb2dQcm9jZXNzV29ya2Zsb3dGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1Byb2Nlc3NXb3JrZmxvd0Zvcm0uYnV0dG9uVGVtcGxhdGVJbnB1dCA9IGNvbXBSZWYuaW5zdGFuY2UuYnV0dG9uVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5pdGVtID0gdGhpcy5jdXJyZW50SXRlbTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5idXNpbmVzc1NldHRpbmcgPSBjcnVkTGlzdFNldHRpbmc7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uud29ya2Zsb3cgPSBpdGVtV29ya2Zsb3dTZXR0aW5nO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBuZXcgV2ZBY3Rpb24oKTtcbiAgICAgICAgYWN0aW9uLmNvZGUgPSBBY3Rpb25DaHV5ZW5YdUx5QmFzZTtcbiAgICAgICAgYWN0aW9uLm5hbWUgPSBUZXh0QWN0aW9uQ2h1eWVuWHVMeUJhc2U7XG4gICAgICAgIGFjdGlvbi5kYXRhID0ge307XG4gICAgICAgIGFjdGlvbi5vcGVuUG9wdXAgPSB0cnVlO1xuICAgICAgICBhY3Rpb24udGFyZ2V0ID0gY3VycmVudFN0YXRlLmlkIHx8IHRoaXMuZ3VpZEVtcHR5O1xuICAgICAgICBhY3Rpb24uc291cmNlID0gY3VycmVudFN0YXRlLmlkIHx8IHRoaXMuZ3VpZEVtcHR5O1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLmFjdGlvbiA9IGFjdGlvbjtcblxuICAgICAgICBjb21wUmVmLmluc3RhbmNlLm9uU2F2ZWQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25DYW5jZWwuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2UpO1xuICAgIH1cbiAgICBhc3luYyBzdGFydFdvcmtmbG93KHJvd0RhdGEsIHdvcmtmbG93OiBXZkl0ZW0pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnN0YXJ0V29ya2Zsb3cocm93RGF0YS5pZCwgd29ya2Zsb3cuY29kZSlcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJ0No4bqheSBxdXkgdHLDrG5oIHRow6BuaCBjw7RuZycsIGYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25TdGFydGVkV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZFN0YXR1c1dvcmtmbG93LmVtaXQocm93RGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgaGFuZGxlUHJvY2Vzc2VkV29ya2Zsb3dCYXNlKCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uUHJvY2Vzc2VkV29ya2Zsb3cuZW1pdCh0aGlzLmN1cnJlbnRJdGVtLmlkKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZWRTdGF0dXNXb3JrZmxvdy5lbWl0KHRoaXMuY3VycmVudEl0ZW0uaWQpO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weUxpbmsocm93RGF0YTogYW55KSB7XG4gICAgICAgIHRoaXMub25Db3B5TGluay5lbWl0KHJvd0RhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5TGlua011bHRpcGxlKCkge1xuICAgICAgICB0aGlzLm9uQ29weUxpbmtNdWx0aXBsZS5lbWl0KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuXG4gICAgc2hvd1NoYXJlTGlua0Zvcm0obHN0SXRlbSkge1xuICAgICAgICB0aGlzLnNoYXJlTGlua01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2hhcmVMaW5rTW9kZWwuZGF0YS5sc3RJdGVtID0gbHN0SXRlbTtcbiAgICB9XG5cbiAgICBhc3luYyBjcmVhdGVTaGFyZUxpbmsoKSB7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmNoZWNrUmVhZHlUb1RyaW5oS3koKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnxJBhbmcgdOG6o2kgZOG7ryBsaeG7h3UgZGFuaCBzw6FjaCwgY2jhu50gbeG7mXQgbMO6YyBy4buTaSB0aOG7rSBs4bqhaScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLnJvd0RhdGFDdXJyZW50O1xuICAgICAgICB0aGlzLnNob3dTaGFyZUxpbmtGb3JtKFtyb3dEYXRhXSk7XG4gICAgfVxuXG4gICAgYXN5bmMgY3JlYXRlU2hhcmVMaW5rTXVsdGlwbGUoKSB7XG4gICAgICAgIHRoaXMuc2hvd1NoYXJlTGlua0Zvcm0odGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZU11bHRpcGxlQ29weUxpbmsoKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVDb3B5TGluayhpdGVtKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZUNvcHlMaW5rKHJvd0RhdGEpIHtcbiAgICAgICAgaWYgKHJvd0RhdGEuX19kaXNhYmxlQ29weUxpbmspIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhpZGRlbkNvcHlMaW5rKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93RGF0YVsnbWV0YWRhdGFTdGF0dXMnXSAmJiByb3dEYXRhWydtZXRhZGF0YVN0YXR1cyddICE9ICcwJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzaG93U2V0dGluZ3NQZXJtaXNzaW9uKCkge1xuICAgICAgICBpZiAodGhpcy5jcmVhdGluZ1NlYXJjaEluZm8pIHJldHVybjtcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzUGVybWlzc2lvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNob3dTZXR0aW5nc1dvcmtmbG93KCkge1xuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NXb3JrZmxvdyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSBhd2FpdCB0aGlzLl9mZWRlcmF0aW9uU2VydmljZS5sb2FkUmVtb3RlTmV3Q29tcG9uZW50KCdjb21tb25hcHAnLCAnV29ya2Zsb3dTZXR0aW5nRGlhbG9nQ29tcG9uZW50JywgdGhpcy53b3JrZmxvd1NldHRpbmdEaWFsb2dWaWV3Q29udGFpbmVyKTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5wYXJlbnRTZXR0aW5nID0gdGhpcy5zZXR0aW5nO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnBhcmVudENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UucGFyZW50TW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLm9uU2F2ZWQuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMub25TYXZlV29ya2Zsb3dTZXR0aW5ncyhldmVudCkpO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLm9uUmVtb3ZlZC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5vblJlbW92ZVdvcmtmbG93U2V0dGluZ3MoZXZlbnQpKTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vbkNhbmNlbC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5fc2hvd1NldHRpbmdzV29ya2Zsb3cgPSBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2hvd1NldHRpbmdzV29ya2Zsb3dOZXcoZGlhbG9nKSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dTZXR0aW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY29tcFJlZiA9IGF3YWl0IHRoaXMuX2ZlZGVyYXRpb25TZXJ2aWNlLmxvYWRSZW1vdGVOZXdDb21wb25lbnQoJ2NvbW1vbmFwcCcsICdXb3JrZmxvd1NldHRpbmdOZXdDb21wb25lbnQnLCB0aGlzLndvcmtmbG93c2V0dGluZ25ld1ZpZXdDb250YWluZXIpO1xuICAgICAgICBkaWFsb2cuYnV0dG9uVGVtcGxhdGVJbnB1dCA9IGNvbXBSZWYuaW5zdGFuY2UuYnV0dG9uVGVtcGxhdGU7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UucGFyZW50U2V0dGluZyA9IHRoaXMuc2V0dGluZztcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vblNhdmVkLnN1YnNjcmliZShldmVudCA9PiB0aGlzLm9uU2F2ZVdvcmtmbG93U2V0dGluZ3NOZXcobnVsbCkpO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLm9uQ2FuY2VsLnN1YnNjcmliZShldmVudCA9PiB0aGlzLndvcmtmbG93U2V0dGluZ01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2hvd0xpbmtTaGFyaW5nKCkge1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25TaGFyaW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY29tcFJlZiA9IGF3YWl0IHRoaXMuX2ZlZGVyYXRpb25TZXJ2aWNlLmxvYWRSZW1vdGVOZXdDb21wb25lbnQoJ2NvbW1vbmFwcCcsICdQZXJtaXNzaW9uU2hhcmluZ0NvbXBvbmVudCcsIHRoaXMucGVybWlzc2lvblNoYXJpbmdWaWV3Q29udGFpbmVyKTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5pdGVtID0gdGhpcy5yb3dEYXRhQ3VycmVudDtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5iYXNlU2VydmljZSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vbkNhbmNlbC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5wZXJtaXNzaW9uU2hhcmluZ01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlKTtcbiAgICB9XG5cbiAgICBhc3luYyBzaG93QXR0YWNoZWRUYXNrKCkge1xuICAgICAgICB0aGlzLmF0dGFjaGVkVGFza01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgICAgIC8vIHRoaXMucGVybWlzc2lvblNoYXJpbmdNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgICAgICBjb25zdCBjb21wUmVmID0gYXdhaXQgdGhpcy5fZmVkZXJhdGlvblNlcnZpY2UubG9hZFJlbW90ZU5ld0NvbXBvbmVudCgnY29uZ3ZpZWMnLCAnQmFzZUNvbmdWaWVjQ29tcG9uZW50JywgdGhpcy5iYXNlQ29uZ1ZpZWNWaWV3Q29udGFpbmVyKTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5zZXJ2aWNlQ29kZSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5lbnRpdHkgPSB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZW50aXR5TmFtZTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5pdGVtSWRBdHRhY2ggPSB0aGlzLnJvd0RhdGFDdXJyZW50LmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzaG93TGlzdFBlcm1pc3Npb25CeUl0ZW0oKSB7XG4gICAgICAgIHRoaXMucGVybWlzc2lvbkxpc3RNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgICAgICBjb25zdCBjb21wUmVmID0gYXdhaXQgdGhpcy5fZmVkZXJhdGlvblNlcnZpY2UubG9hZFJlbW90ZU5ld0NvbXBvbmVudCgnY29tbW9uYXBwJywgJ1dvcmtmbG93UGVybWlzc2lvbkNvbXBvbmVudCcsIHRoaXMud29ya2Zsb3dQZXJtaXNzaW9uVmlld0NvbnRhaW5lcik7XG4gICAgICAgIC8vIHRoaXMuZGlhbG9nV29ya2Zsb3dQZXJtaXNzaW9uLmJ1dHRvblRlbXBsYXRlSW5wdXQgPSBjb21wUmVmLmluc3RhbmNlLmJ1dHRvblRlbXBsYXRlO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLml0ZW0gPSB0aGlzLnJvd0RhdGFDdXJyZW50O1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLmJ1c2luZXNzU2V0dGluZyA9IHRoaXMuc2V0dGluZztcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vbkNhbmNlbC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5wZXJtaXNzaW9uTGlzdE1vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlV29ya2Zsb3dTZXR0aW5ncyhldmVudCkge1xuICAgICAgICB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nID0gZXZlbnQ7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UucmVsb2FkUGFnZSgpO1xuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlV29ya2Zsb3dTZXR0aW5nc05ldyhldnQpIHtcbiAgICAgICAgdGhpcy53b3JrZmxvd1NldHRpbmdNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5yZWxvYWRQYWdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUmVtb3ZlV29ya2Zsb3dTZXR0aW5ncyhldnQpIHtcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgZ29Ub1Rhc2soZXZlbnQpIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDaOG7qWMgbsSDbmcgeGVtIGNoaSB0aeG6v3QgY8O0bmcgdmnhu4djIHjhu60gbMO9IHThu50gdHLDrG5oIMSRYW5nIMSRxrDhu6NjIGhvw6BuIHRoaeG7h24uLi4nKTtcbiAgICB9XG5cbiAgICBhZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCkge1xuICAgICAgICAvL1xuICAgIH1cblxuICAgIHNhdmVSZW9yZGVyKCkge1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0No4bqvYyBjaOG6r24gbMawdSB0aGF5IMSR4buVaScpLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgaWYgKCFycykgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuZGF0YVNvdXJjZS5sZW5ndGggPT0gMCB8fCAhdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydERpcikgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcmVvcmRlckRhdGEgPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UubWFwKCh4LCBpKSA9PiAoeyBpZDogeC5pZCwgb3JkZXI6IGkgKyAxICsgKCh0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSAtIDEpICogdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2VTaXplKSB9KSk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNldHRpbmcucmVvcmRlckZpZWxkLFxuICAgICAgICAgICAgICAgIG9mZnNldDogdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UsXG4gICAgICAgICAgICAgICAgcmVvcmRlckRhdGFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2U/LnJlb3JkZXJEYXRhQnlGaWVsZChkYXRhKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnU+G6r3AgeOG6v3AgZOG7ryBsaeG7h3UgdGjDoG5oIGPDtG5nJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmdCeVJlc3BvbnNlKHJlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLCB2dWkgbMOybmcgbGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHVibGljIHJldHJpZXZlQnV0dG9uVGVtcGxhdGUobHN0QnV0dG9uVGVtcGxhdGU6IEVsZW1lbnRSZWZbXSkge1xuICAgICAgICB0aGlzLmxzdEJ1dHRvblRlbXBsYXRlID0gbHN0QnV0dG9uVGVtcGxhdGU7XG4gICAgfVxuICAgIGFzeW5jIGhhbmRsZVNob3dGb3JtU2V0dGluZ0J1dHRvbigpIHtcbiAgICAgICAgLy8gVOG7lW5nIGjhu6NwIGThu68gbGnhu4d1IGPDoWMgbsO6dCB04burIG5nVGVtcGxhdGUgKyBiYXNlICsgbWVudUJ1dHRvblxuICAgICAgICB0aGlzLm9uUmVsb2FkZWQuZW1pdChFbnVtUHJvcGVydGllcy5SRVRSSUVWRV9CVVRUT05fVEVNUExBVEUpO1xuICAgICAgICB0aGlzLmJ1dHRvbkF1dGhvcml6ZU1vZGVsLmRhdGEuZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBjb25zdCBsc3RCdG5DdXN0b206IGFueVtdID0gdGhpcy5sc3RCdXR0b25FbGVtZW50W0VudW1Qcm9wZXJ0aWVzLlJFU1VMVFNdLmNvbmNhdCh0aGlzLmxzdEJ1dHRvblRlbXBsYXRlKTtcbiAgICAgICAgY29uc3QgbHN0QnRuQWN0aW9uOiBCdXR0b25BY3Rpb25bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbHN0QnRuQ3VzdG9tKSB7XG4gICAgICAgICAgICBjb25zdCBidXR0b25UZXh0ID0gaXRlbS5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZShFbnVtUHJvcGVydGllcy5MQUJFTCkgPz8gaXRlbS5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZShFbnVtUHJvcGVydGllcy5UT09MVElQKVxuICAgICAgICAgICAgICAgID8/IGl0ZW0ubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoRW51bVByb3BlcnRpZXMuTkdfUkVGTEVDVF9URVhUKSA/PyBpdGVtLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKEVudW1Qcm9wZXJ0aWVzLk5HX1JFRkxFQ1RfTEFCRUwpID8/IGl0ZW0ubmF0aXZlRWxlbWVudC5pbm5lclRleHQ7XG4gICAgICAgICAgICBpZiAoIWJ1dHRvblRleHQgfHwgbHN0QnRuQWN0aW9uLnNvbWUocCA9PiBwLnJhd1RleHQgPT09IGJ1dHRvblRleHQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFkZEJ1dHRvbkFjdGlvbihsc3RCdG5BY3Rpb24sIGJ1dHRvblRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsc3RNZW51QnV0dG9uczogYW55O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbHN0TWVudUJ1dHRvbnMgPSBhd2FpdCB0aGlzLm1lbnVCdXR0b25zKHt9KSA/PyBbXTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICBsc3RNZW51QnV0dG9ucyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsc3RNZW51QnV0dG9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxzdE1lbnVCdXR0b25zLmZvckVhY2goaXRlbSA9PiB0aGlzLmFkZEJ1dHRvbkFjdGlvbihsc3RCdG5BY3Rpb24sIGl0ZW0ubGFiZWwpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJ1dHRvbnNQZXJtaXNzaW9uQ3VzdG9tLmxlbmd0aCkge1xuICAgICAgICAgICAgbHN0QnRuQWN0aW9uLnB1c2goLi4udGhpcy5zZXR0aW5nLmJ1dHRvbnNQZXJtaXNzaW9uQ3VzdG9tKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidXR0b25TZXR0aW5nOiBhbnkgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQlVUVE9OX0FVVEhPUklaRSkgfHwgJ3t9Jyk7XG4gICAgICAgIGJ1dHRvblNldHRpbmdbdGhpcy5hdXRob3JpemVCdXR0b25LZXldPy5sZW5ndGggJiYgYnV0dG9uU2V0dGluZ1t0aGlzLmF1dGhvcml6ZUJ1dHRvbktleV0uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb25JdGVtID0gbHN0QnRuQWN0aW9uLmZpbmQocCA9PiBwLnBlcm1pc3Npb25Db2RlID09IGl0ZW0uY29kZSk7XG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbkl0ZW0pIHtcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uSXRlbS5pc0F1dGhvcml6ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbkl0ZW0uaWQgPSBpdGVtLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5idXR0b25BdXRob3JpemVNb2RlbC5kYXRhLmRhdGFTb3VyY2UgPSBsc3RCdG5BY3Rpb247XG4gICAgICAgIHRoaXMuYnV0dG9uQXV0aG9yaXplTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBvblNob3dGb3JtU2V0dGluZ0J1dHRvbigpIHtcbiAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja0FsbCgpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2hvd0Zvcm1TZXR0aW5nQnV0dG9uKCk7XG4gICAgICAgIH0sIDEwMCk7XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0QnRuUmVhZHkoaXNSZWFkeTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmlzQnRuUmVhZHkgPSBpc1JlYWR5O1xuICAgIH1cblxuICAgIGFkZEJ1dHRvbkFjdGlvbihsc3RCdG5BY3Rpb246IEJ1dHRvbkFjdGlvbltdLCByYXdUZXh0OiBzdHJpbmcsIGlkPzogc3RyaW5nKSB7XG4gICAgICAgIGlkID8/PSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbkNvZGUgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmNvbnZlcnRTdHJpbmdUb1VuU2lnbihyYXdUZXh0KS5yZXBsYWNlKC8gL2csICdfJykudG9VcHBlckNhc2UoKTtcbiAgICAgICAgbHN0QnRuQWN0aW9uLnB1c2goXG4gICAgICAgICAgICBuZXcgQnV0dG9uQWN0aW9uKHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgcmF3VGV4dDogcmF3VGV4dCxcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uQ29kZTogYFske3RoaXMuYXV0aG9yaXplQnV0dG9uS2V5fV1fWyR7cGVybWlzc2lvbkNvZGV9XWBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuICAgIHB1YmxpYyBhc3luYyBzZXRBdXRob3JpemVCdXR0b24obHN0QnV0dG9uVGVtcGxhdGU6IEVsZW1lbnRSZWZbXSkge1xuICAgICAgICB0aGlzLmF1dGhvcml6ZUJ1dHRvbktleSA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSkudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9cXC8vZywgJ18nKTtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6ZUJ1dHRvbktleSA9IGAke3RoaXMuc2VydmljZUNvZGUudG9VcHBlckNhc2UoKSB8fCB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcENvZGUudG9VcHBlckNhc2UoKX1fJHt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLnRvVXBwZXJDYXNlKCl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLnNldHRpbmcuc3VmZml4QXV0aG9yaXplQ29kZSkge1xuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVCdXR0b25LZXkgKz0gYF8ke3RoaXMuc2V0dGluZy5zdWZmaXhBdXRob3JpemVDb2RlfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbHN0UGVybWlzc2lvbkNvZGUgPSAoYXdhaXQgdGhpcy5fYmFzZVBlcm1pc3Npb25TZXJ2aWNlLmdldFBlcm1pc3Npb25CeUNvZGUoYFske3RoaXMuYXV0aG9yaXplQnV0dG9uS2V5fV1gKSkuZGF0YSA/PyBbXTtcbiAgICAgICAgY29uc3QgYnV0dG9uU2V0dGluZzogYW55ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkJVVFRPTl9BVVRIT1JJWkUpIHx8ICd7fScpO1xuICAgICAgICBidXR0b25TZXR0aW5nW3RoaXMuYXV0aG9yaXplQnV0dG9uS2V5XSA9IGxzdFBlcm1pc3Npb25Db2RlO1xuICAgICAgICB0aGlzLmxzdEJ1dHRvblRlbXBsYXRlID0gbHN0QnV0dG9uVGVtcGxhdGU7XG4gICAgICAgIGlmICghYnV0dG9uU2V0dGluZ1t0aGlzLmF1dGhvcml6ZUJ1dHRvbktleV0ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlzQnRuUmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQlVUVE9OX0FVVEhPUklaRSwgSlNPTi5zdHJpbmdpZnkoYnV0dG9uU2V0dGluZykpO1xuICAgICAgICBjb25zdCBsc3RNZW51QnV0dG9uOiBCdXR0b25BY3Rpb25bXSA9IFtdO1xuICAgICAgICBsZXQgbHN0TWVudUJ1dHRvbnM6IGFueTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxzdE1lbnVCdXR0b25zID0gYXdhaXQgdGhpcy5tZW51QnV0dG9ucyh7fSkgPz8gW107XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgbHN0TWVudUJ1dHRvbnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWxzdE1lbnVCdXR0b25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pc0J0blJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsc3RNZW51QnV0dG9ucy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5hZGRCdXR0b25BY3Rpb24obHN0TWVudUJ1dHRvbiwgaXRlbS5sYWJlbCkpO1xuICAgICAgICBidXR0b25TZXR0aW5nW3RoaXMuYXV0aG9yaXplQnV0dG9uS2V5XS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbUJ0bk1lbnUgPSBsc3RNZW51QnV0dG9uLmZpbmQocCA9PiBwLnBlcm1pc3Npb25Db2RlID09IGl0ZW0uY29kZSk7XG4gICAgICAgICAgICBpZiAoaXRlbUJ0bk1lbnUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxzdEJ0bkF1dGhvcml6ZU1lbnUucHVzaChpdGVtQnRuTWVudSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlzQnRuUmVhZHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmhhbmRsZVRhYmxlUmVuZGVyZWQoKTtcbiAgICB9XG4gICAgaGFuZGxlQ2xvc2VBdXRob3JpemVCdXR0b25Gb3JtKCkge1xuICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja0FsbCgpO1xuICAgICAgICB0aGlzLmJ1dHRvbkF1dGhvcml6ZU1vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVDbG9zZVByb2Nlc3NXb3JrZmxvd0Jhc2UoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgfVxufVxuIl19
|
|
3615
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb21wb25lbnQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvbGlzdC1jb21wb25lbnQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFSCxZQUFZLEVBQ1osZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUdULE1BQU0sRUFFTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEdBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQVUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzTixPQUFPLEVBQXFCLE9B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QyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7aURBQ3BELFNBQVMsU0FBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtvQkFFN0QsS0FBSztzQkFDTCxLQUFLO3VCQUNMLEtBQUs7bUJBQ0wsS0FBSzs0QkFHTCxLQUFLOytCQUNMLEtBQUs7a0NBR0wsS0FBSzs0QkFFTCxLQUFLOzRCQVNMLEtBQUs7K0JBQ0wsS0FBSztpQ0FDTCxLQUFLO3lCQUNMLEtBQUs7bUNBQ0wsS0FBSzswQkFDTCxLQUFLOzRCQUNMLEtBQUs7K0JBQ0wsS0FBSzs4QkFNTCxLQUFLO21DQUNMLEtBQUs7OEJBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7MkJBQ0wsS0FBSzt5QkFDTCxLQUFLOzZCQUNMLEtBQUs7eUJBQ0wsS0FBSzs0QkFDTCxLQUFLO3FDQUNMLEtBQUs7MkJBQ0wsS0FBSztxQkFDTCxLQUFLOzRCQUNMLEtBQUs7cUJBQ0wsS0FBSzsrQkFDTCxLQUFLO3dCQUNMLEtBQUs7a0NBQ0wsS0FBSztpQ0FDTCxLQUFLOzBCQUNMLEtBQUs7eUJBQ0wsS0FBSztvQkFHTCxLQUFLO3lCQU1MLEtBQUs7NEJBV0wsS0FBSzt5QkFhTCxLQUFLOzZCQVlMLEtBQUs7MEJBRUwsTUFBTTswQkFDTixNQUFNO3lCQUNOLE1BQU07dUJBQ04sTUFBTTt5QkFDTixNQUFNO3NCQUNOLE1BQU07NEJBQ04sTUFBTTtvQkFDTixNQUFNO3FCQUNOLE1BQU07eUJBQ04sTUFBTTtpQ0FDTixNQUFNO3FCQUNOLE1BQU07dUJBQ04sTUFBTTsrQkFDTixNQUFNO2dDQUNOLE1BQU07NkJBQ04sTUFBTTtnQ0FDTixNQUFNO2tDQUNOLE1BQU07bUNBQ04sTUFBTTtzQ0FDTixNQUFNO3dDQUNOLE1BQU07MEJBQ04sTUFBTTt5QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIGlzRGV2TW9kZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvY29udGV4dG1lbnUnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBUcmVlVGFibGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy90cmVldGFibGUnO1xuXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IElMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2ktbGlzdC1jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aW9uQ2h1eWVuWHVMeUJhc2UsIEJ1dHRvblRleHRBY3Rpb25Db25nVmllYywgZGF0YVNvdXJjZUljb24sIEVudW1TdGF0ZVR5cGUsIEZpZWxkRGVmaW5lSGFzVGFzaywgRm9ybVN0YXRlLCBNYUFjdGlvbkJhdERhdVF1eVRyaW5oLCBUZXh0QWN0aW9uQ2h1eWVuWHVMeUJhc2UsIFdmQWN0aW9uLCBXZkl0ZW0gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNjaGVtYSwgaXNBcnJheSwgaXNMaXRlcmFsT2JqZWN0IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnZpcm9ubWVudC1zY2hlbWEnO1xuaW1wb3J0IHtcbiAgICBCdXR0b25BY3Rpb24sXG4gICAgQ2hlY2tCb3hMaXN0Q29udHJvbFNjaGVtYSxcbiAgICBDb2x1bW5TY2hlbWFCYXNlLFxuICAgIENvbHVtblNldHRpbmcsXG4gICAgQ29udHJvbFR5cGUsXG4gICAgQ3J1ZExpc3RDb25maWcsXG4gICAgQ3J1ZExpc3REYXRhLFxuICAgIENydWRMaXN0U2V0dGluZyxcbiAgICBEYXRhVHlwZSxcbiAgICBEYXRlVGltZVJhbmdlQ29udHJvbFNjaGVtYSxcbiAgICBEaWFsb2dNb2RlbCxcbiAgICBEcm9wZG93bkNvbnRyb2xTY2hlbWEsXG4gICAgRXhwb3J0SXRlbXNNb2RlLFxuICAgIEZpbGVVcGxvYWRNb2RlLFxuICAgIEZvcm1Db250cm9sQmFzZSxcbiAgICBIZWlnaHRUeXBlLFxuICAgIE51bWJlclJhbmdlQ29udHJvbFNjaGVtYSxcbiAgICBPcGVyYXRvcixcbiAgICBQb3B1cFNpemUsXG4gICAgUmVmRmllbGQsXG4gICAgVGV4dEFsaWduLFxuICAgIFRleHRDb250cm9sU2NoZW1hXG59IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgVG5NZW51SXRlbSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdG4tbWVudS1pdGVtJztcbmltcG9ydCB7IEFjdGlvbiwgV29ya2Zsb3dTZXR0aW5nTmV3IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy93b3JrZmxvdy1zY2hlbWEnO1xuaW1wb3J0IHsgQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb25ndmllYy1waWNrZXIvc2VydmljZXMvY29uZ3ZpZWMuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRSZWdleFJlc3VsdCwgcmVuZGVyVGV4dFRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL3V0aWxzJztcbmltcG9ydCB7IFNlYXJjaEluZm8gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vZGVscy9zZWFyY2gnO1xuaW1wb3J0IHsgVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3RuLWN1c3RvbS1zY3JvbGxiYXIvdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtLCBSZWdleFNwbGl0RmllbGRCeUl0ZW0gfSBmcm9tICcuLi8uLi9jb25zdC9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBFbnVtUHJvcGVydGllcyxcbiAgICBGaWVsZENoZWNrYm94Q3J1ZExpc3QsXG4gICAgRmllbGRDb2xFeHBhbmRDcnVkTGlzdCxcbiAgICBGaWVsZENvbFJlb3JkZXJDcnVkTGlzdCxcbiAgICBGaWVsZEZ1bmN0aW9uQ3J1ZExpc3QsXG4gICAgRmllbGRJbmRleEluRGF0YVNvdXJjZSxcbiAgICBGaWVsZE9yZGVyQ3J1ZExpc3QsXG59IGZyb20gJy4uLy4uL2VudW1zL2NvbW1vbic7XG5pbXBvcnQgeyBGaWx0ZXIsIEdyaWRJbmZvLCBTb3J0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBUblVzZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvdG4tdXNlcic7XG5pbXBvcnQgeyBLZXlWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdHlwZXMnO1xuaW1wb3J0IHsgQmFzZVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZXBlcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBDYW5Cb0hvU29TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FuYm8taG9zby5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERtTG9haUNvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RtLWxvYWktY29uZ3ZpZWMuc2VydmljZSc7XG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBFbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LXdvcmtmbG93LWhpc3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRmVkZXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mZWRlcmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBQcmludFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcmludC5zZXJ2aWNlJztcbmltcG9ydCB7IFN0YXRlTWFjaGluZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGVtYWNoaW5lcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGVtcGxhdGVpbnN0YW5jZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtmbG93SGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dvcmtmbG93LXBlcm1pc3Npb24tZGV0YWlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgbXVsdGlwbGVTb3J0IH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXknO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmRlY2xhcmUgbGV0ICQ6IGFueTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGlzdENvbXBvbmVudEJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgSUxpc3RDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCd0cmVldGFibGUnKSB0cmVlVGFibGU6IFRyZWVUYWJsZTtcbiAgICB0YWJsZTogVGFibGU7XG5cbiAgICBAVmlld0NoaWxkKFRhYmxlLCB7IHN0YXRpYzogZmFsc2UgfSkgc2V0IF90YWJsZSh2OiBUYWJsZSkge1xuICAgICAgICB0aGlzLnRhYmxlID0gdjtcbiAgICAgICAgdGhpcy50YWJsZVJlYWR5Lm5leHQodGhpcyk7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZHJlbignYnV0dG9uQmFzZScpIGxzdEJ1dHRvbkVsZW1lbnQ6IFF1ZXJ5TGlzdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyOiBFbGVtZW50UmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgnaWNvblRvZ2dsZVJvd0dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgaWNvblRvZ2dsZVJvd0dyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2ljb25Ub2dnbGVSb3dEYXRhJywgeyBzdGF0aWM6IHRydWUgfSkgaWNvblRvZ2dsZVJvd0RhdGE6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgndHJhbmdUaGFpVjUnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZVRyYW5nVGhhaVY1OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ3ZpZXdIaXN0b3J5JywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGVDb2xWaWV3SGlzdG9yeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCd3b3JrZmxvd0NvcmVTdGF0dXMnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZVdvcmtmbG93Q29yZVN0YXR1czogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCdzY3JvbGxiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzY3JvbGxiYXI6IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbnRleHRNZW51OiBDb250ZXh0TWVudTtcbiAgICBAQ29udGVudENoaWxkKCdwYWdpbmF0aW9uJywgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ3NlYXJjaEN1c3RvbScsIHsgc3RhdGljOiB0cnVlIH0pIHNlYXJjaEN1c3RvbTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBoZWFkZXI6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyRmlsdGVyJywgeyBzdGF0aWM6IHRydWUgfSkgaGVhZGVyRmlsdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ3Jvd0V4cGFuc2lvbicsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0V4cGFuc2lvbjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdzdW1tYXJ5JywgeyBzdGF0aWM6IHRydWUgfSkgc3VtbWFyeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdmb290ZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBmb290ZXI6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnY29sZ3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb2xncm91cDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdyb3dHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0dyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2NvbnRlbnRSb3dHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRlbnRSb3dHcm91cDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCdkaWFsb2dEZXRhaWxUYXNrJywgeyBzdGF0aWM6IHRydWUgfSkgZGlhbG9nRGV0YWlsVGFzazogYW55O1xuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZ0Nob1lLaWVuRm9ybScsIHsgc3RhdGljOiB0cnVlIH0pIGRpYWxvZ0Nob1lLaWVuRm9ybTogYW55O1xuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZ1Byb2Nlc3NXb3JrZmxvd0Zvcm0nLCB7IHN0YXRpYzogZmFsc2UgfSkgZGlhbG9nUHJvY2Vzc1dvcmtmbG93Rm9ybTogYW55O1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVSZWYpIGNoaWxkcmVuOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBAVmlld0NoaWxkKCd3b3JrZmxvd3NldHRpbmduZXcnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgd29ya2Zsb3dzZXR0aW5nbmV3Vmlld0NvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgncHJvY2Vzc1dvcmtmbG93Rm9ybScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwcm9jZXNzV29ya2Zsb3dGb3JtVmlld0NvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgnd29ya2Zsb3dIaXN0b3J5TmV3JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHdvcmtmbG93SGlzdG9yeU5ld1ZpZXdDb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3dvcmtmbG93UGVybWlzc2lvbicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSB3b3JrZmxvd1Blcm1pc3Npb25WaWV3Q29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAVmlld0NoaWxkKCdzdGFydFdvcmtmbG93JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHN0YXJ0V29ya2Zsb3dWaWV3Q29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAVmlld0NoaWxkKCdwZXJtaXNzaW9uU2hhcmluZycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwZXJtaXNzaW9uU2hhcmluZ1ZpZXdDb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2RldGFpbFRhc2snLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgZGV0YWlsVGFza1ZpZXdDb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2Jhc2VDb25nVmllY0Zvcm0nLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgYmFzZUNvbmdWaWVjRm9ybVZpZXdDb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2Jhc2VDb25nVmllYycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBiYXNlQ29uZ1ZpZWNWaWV3Q29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcbiAgICBAVmlld0NoaWxkKCdjaG9ZS2llbkZvcm0nLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgY2hvWUtpZW5Gb3JtVmlld0NvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG4gICAgQFZpZXdDaGlsZCgnd29ya2Zsb3dTZXR0aW5nRGlhbG9nJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHdvcmtmbG93U2V0dGluZ0RpYWxvZ1ZpZXdDb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgQElucHV0KCkgbW9kZWw6IENydWRMaXN0RGF0YSA9IG5ldyBDcnVkTGlzdERhdGEoKTtcbiAgICBASW5wdXQoKSBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgQElucHV0KCkgZmlsZU5hbWUgPSAnZXhwb3J0JztcbiAgICBASW5wdXQoKSBsYXp5ID0gdHJ1ZTsgLy8gxJHhurd0IGdpw6EgdHLhu4sgbsOgeSBi4bqxbmcgZmFsc2UgdGjDrCBz4bq9IGZpbHRlciDEkWMgY2xpZW50XG5cbiAgICAvLyBkdW5nIGRvbiB2aSByZW0gZGUgd2lkdGgga2hvbmcgYmkgYW5oIGh1b25nIGJvaSBmb250IHNpemUgY3VhIHRoLCBubyBzZSBsYXkgdGhlbyBmb250IHNpemUgY3VhIHRoZSBodG1sXG4gICAgQElucHV0KCkgd2lkdGhDaGVja2JveCA9ICcyLjVyZW0nO1xuICAgIEBJbnB1dCgpIHdpZHRoT3JkZXJDb2x1bW4gPSAnMy41cmVtJztcbiAgICBfZGVmYXVsdFdpdGhGdW5jdGlvbkNvbHVtbiA9IDgxO1xuICAgIF93aWR0aEZ1bmN0aW9uQ29sdW1uID0gYCR7dGhpcy5fZGVmYXVsdFdpdGhGdW5jdGlvbkNvbHVtbn1weGA7XG4gICAgQElucHV0KCkgd2lkdGhGdW5jdGlvbkNvbHVtbjogc3RyaW5nO1xuICAgIF9jbGFzc1Jvd0dyb3VwID0gJ25vLXBhZGRpbmcnO1xuICAgIEBJbnB1dCgpIHNldCBjbGFzc1Jvd0dyb3VwKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jbGFzc1Jvd0dyb3VwID0gYG5vLXBhZGRpbmcgJHt2YWx1ZX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY2xhc3NSb3dHcm91cCA9IGBuby1wYWRkaW5nYDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIHNob3dTY3JvbGxCYXIgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHBUYWJsZVNjcm9sbGFibGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwVGFibGVTY3JvbGxIZWlnaHQ6IHN0cmluZyA9IG51bGw7XG4gICAgQElucHV0KCkgcmVzcG9uc2l2ZSA9IHRydWU7XG4gICAgQElucHV0KCkgZW5hYmxlQmFzaWNBdXRob3JpemU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGF1dGhvcml6ZVBhdGg6IHN0cmluZztcbiAgICBASW5wdXQoKSBhdXRob3JpemVCdXR0b25zOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5BREQsXG4gICAgICAgIENvbUN0eENvbnN0YW50cy5DT01NT04uRURJVCxcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5ERUxFVEUsXG4gICAgICAgIENvbUN0eENvbnN0YW50cy5DT01NT04uREVMRVRFX01VTFRJUExFXG4gICAgXTtcbiAgICBASW5wdXQoKSBjb25maWdTY3JvbGxCYXI6IGFueSA9IHsgc3VwcHJlc3NTY3JvbGxYOiB0cnVlLCBzdXBwcmVzc1Njcm9sbFk6IGZhbHNlIH07XG4gICAgQElucHV0KCkgc2hvd1Njcm9sbEhvcml6b250YWwgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzaG93TWVudUJ1dHRvbnMgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dSYWRpbyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlbkFkZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlbkRlbGV0ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlbkVkaXQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBoaWRkZW5Db3B5TGluayA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlblZpZXcgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBoaWRkZW5SZW9yZGVyID0gZmFsc2U7XG4gICAgQElucHV0KCkgZGlzYWJsZUtleXByZXNzQ29udHJvbCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgQElucHV0KCkgZXNjYXBlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29uZmlnOiBDcnVkTGlzdENvbmZpZyA9IG5ldyBDcnVkTGlzdENvbmZpZygpO1xuICAgIEBJbnB1dCgpIGVuYWJsZVJlb3JkZXJSb3cgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcbiAgICBASW5wdXQoKSB0ZW1wbGF0ZXNGcm9tUGFyZW50OiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XG4gICAgQElucHV0KCkgY2hpbGRyZW5Gcm9tUGFyZW50OiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XG4gICAgQElucHV0KCkgbWVudUJ1dHRvbnM6IChyb3dEYXRhKSA9PiBUbk1lbnVJdGVtW10gfCBQcm9taXNlPFRuTWVudUl0ZW1bXT47XG4gICAgQElucHV0KCkgZmllbGRPcmRlcjogc3RyaW5nID0gRmllbGRPcmRlckNydWRMaXN0O1xuXG4gICAgX3N0eWxlOiBhbnkgPSB7fTtcbiAgICBASW5wdXQoKSBzZXQgc3R5bGUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgdGFibGVDbGFzcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgPSB0aGlzLl9kZWZhdWx0VGFibGVDbGFzcztcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUudHJpbSgpICE9ICcnKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzICs9IGAgJHt2YWx1ZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXR1cFRhYmxlQ2xhc3MoKTtcbiAgICB9XG5cbiAgICBfcmF3RGF0YVNvdXJjZTogYW55W10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHNldCBhbGxEYXRhU291cmNlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXSxcbiAgICAgICAgICAgIHJhd0RhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnJhdykge1xuICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHZhbHVlLmRhdGE7XG4gICAgICAgICAgICByYXdEYXRhU291cmNlID0gdmFsdWUucmF3O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc0RhdGFTb3VyY2UocmF3RGF0YVNvdXJjZSk7XG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgICB0aGlzLl9yYXdEYXRhU291cmNlID0gcmF3RGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICBfZGF0YVNvdXJjZTogYW55W10gPSBbXTtcbiAgICBASW5wdXQoKSBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogYW55W10pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmVlVGFibGUpIHJldHVybjtcbiAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBkYXRhU291cmNlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzRGF0YVNvdXJjZShkYXRhU291cmNlKTtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8vIGZpbHRlciBt4bq3YyDEkeG7i25oIGNobyBkZXYgY29kZVxuICAgIEBJbnB1dCgpIGZpbHRlcl9kZWZhdWx0OiBGaWx0ZXJbXSA9IFtdO1xuXG4gICAgQE91dHB1dCgpIG9uUm93U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uUmVvcmRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2hlY2tBbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25SZWxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25SZWxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ29udGVudEluaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25BZGQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25FZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ29weUxpbmsgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db3B5TGlua011bHRpcGxlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uVmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkRlbGV0ZU11bHRpcGxlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uSW52YWxpZFdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJUcmluaEt5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uU3RhcnRlZFdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uUHJvY2Vzc2VkV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Sb2xsYmFja2VkV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkU3RhdHVzV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgd2lkdGhGdW5jdGlvbkNvbHVtbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkV4cG9ydEFsbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblNlYXJjaGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgcHJpdmF0ZSBpc1RyZWVUYWJsZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgdGFibGVSZWFkeSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICB0YWJsZVJlYWR5U291cmNlJCA9IHRoaXMudGFibGVSZWFkeS5hc09ic2VydmFibGUoKTtcbiAgICBmaWVsZENoZWNrYm94ID0gRmllbGRDaGVja2JveENydWRMaXN0O1xuICAgIGZpZWxkQ29sRXhwYW5kID0gRmllbGRDb2xFeHBhbmRDcnVkTGlzdDtcbiAgICBmaWVsZENvbFJlb3JkZXIgPSBGaWVsZENvbFJlb3JkZXJDcnVkTGlzdDtcbiAgICBmaWVsZEZ1bmN0aW9uID0gRmllbGRGdW5jdGlvbkNydWRMaXN0O1xuICAgIGZpZWxkSW5kZXhJbkRhdGFTb3VyY2UgPSBGaWVsZEluZGV4SW5EYXRhU291cmNlO1xuXG4gICAgY2hlY2tlZEFsbCA9IG51bGw7XG4gICAgZGF0YVNlYXJjaENvbW1vbjogYW55ID0ge307XG4gICAgcm93R3JvdXBDaGVja2VkOiBhbnkgPSB7fTtcbiAgICByb3dHcm91cE1ldGFkYXRhOiBhbnkgPSB7fTtcbiAgICBkYXRhU291cmNlSW50ZXJuYWw6IGFueVtdO1xuICAgIGNsYXNzVG9vbGJhciA9ICcnO1xuICAgIGl0ZW1TZXR0aW5nczogYW55ID0ge307XG4gICAgc29ydEhpc3Rvcnk6IFNvcnRbXSA9IFtdO1xuICAgIHNvcnRDbGllbnRIaXN0b3J5OiBhbnkgPSB7fTtcbiAgICBfZ3JvdXBGaWVsZDogc3RyaW5nID0gbnVsbDtcbiAgICBfZ3JvdXBJbkNsaWVudCA9IGZhbHNlO1xuICAgIGVuYWJsZWRXZjEgPSB1bmRlZmluZWQ7XG4gICAgc2hvd2luZ0FjdGlvbldvcmtmbG93ID0gZmFsc2U7XG4gICAgYnV0dG9uQ29udGV4dHM6IE1lbnVJdGVtW10gPSBbXTtcbiAgICBhdXRob3JpemVQYXRoczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmc7IH0gPSB7fTtcbiAgICBjb21tb25Db25zdCA9IENvbUN0eENvbnN0YW50cy5DT01NT047XG4gICAgYnV0dG9uQXBwbHlBdXRob3JpemU6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbjsgfSA9IHt9O1xuXG4gICAgX2RlZmF1bHRUYWJsZUNsYXNzID0gJ25ldy10YWJsZSBzY3ItdGFibGUgY3J1ZC1saXN0LXRhYmxlJztcbiAgICBfdGFibGVDbGFzcyA9ICcnO1xuICAgIF9zaG93U2V0dGluZ3NSb3dDb2xvciA9IGZhbHNlO1xuICAgIF9zaG93U2V0dGluZ3MgPSBmYWxzZTtcbiAgICBfc2hvd1NldHRpbmdzV29ya2Zsb3cgPSBmYWxzZTtcbiAgICBfc2hvd1NldHRpbmdzUGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIF9jb2xvckZpbHRlclRhYmxlID0gW107XG4gICAgX3NvcnRGaWVsZCA9ICcnO1xuICAgIF9zb3J0RGlyOiAtMSB8IDAgfCAxIHwgMiA9IC0xO1xuXG4gICAgdGVtcGxhdGU6IGFueSA9IHt9O1xuICAgIHRlbXBsYXRlRmlsdGVyOiBGaWx0ZXJbXSA9IFtdO1xuICAgIHRlbXBsYXRlSGVhZGVyQ29udGVudDogYW55ID0ge307XG5cbiAgICBjYWNoZWRUcmFuc2Zvcm1zID0ge307XG5cbiAgICBmaWx0ZXJTY2hlbWE6IGFueSA9IHt9O1xuICAgIGZpbHRlckRhdGE6IGFueSA9IHt9O1xuICAgIGN1cnJlbnRGaWVsZEZpbHRlcjogc3RyaW5nO1xuICAgIGNoZWNrQm94Q29udGV4dE1lbnU6IE1lbnVJdGVtW10gPSBbXG4gICAgICAgIHsgbGFiZWw6IGBDw7NgLCBpY29uOiAncGkgcGktY2hlY2snLCBjb21tYW5kOiAoKSA9PiB0aGlzLmNoYW5nZUZpbHRlckJvb2xlYW4odHJ1ZSkgfSxcbiAgICAgICAgeyBsYWJlbDogYEtow7RuZ2AsIGljb246ICdwaSBwaS10aW1lcycsIGNvbW1hbmQ6ICgpID0+IHRoaXMuY2hhbmdlRmlsdGVyQm9vbGVhbihmYWxzZSkgfSxcbiAgICAgICAgeyBsYWJlbDogYEjhu6d5IGLhu49gLCBpY29uOiAncGkgcGktdW5kbycsIGNvbW1hbmQ6ICgpID0+IHRoaXMuY2hhbmdlRmlsdGVyQm9vbGVhbihudWxsKSB9XG4gICAgXTtcbiAgICBzZWFyY2hJbmZvOiBTZWFyY2hJbmZvID0gbmV3IFNlYXJjaEluZm8oKTtcbiAgICBjcmVhdGluZ1NlYXJjaEluZm8gPSBmYWxzZTtcblxuICAgIGZpbHRlcl9jdXN0b206IEZpbHRlcltdID0gW107XG4gICAgLy8gZmlsdGVyIGPhu6dhIGFkdmFuY2Ugc2VhcmNoIHRy4bqjIHbhu4FcbiAgICBmaWx0ZXJfYWR2YW5jZVNlYXJjaDogRmlsdGVyW10gPSBbXTtcbiAgICBmaWx0ZXJfY29tbW9uU2VhcmNoOiBGaWx0ZXJbXSA9IFtdO1xuICAgIC8vIGZpbHRlciB0aGVvIGPDoWMgZmlsdGVyIGhp4buDbiB0aOG7iyB0cm9uZyBj4buZdCBj4bunYSBncmlkXG4gICAgZmlsdGVyX2NvbHVtbjogRmlsdGVyW10gPSBbXTtcblxuICAgIHRpbWVvdXQ6IGFueTtcbiAgICBpbnRlcnZhbDogYW55O1xuICAgIGRhdGFBZHZhbmNlOiBhbnkgPSB7fTtcbiAgICBzZWFyY2hNb2RlbDogYW55ID0ge307XG4gICAgYXV0aG9yaXplQnV0dG9uS2V5ID0gJyc7XG4gICAgbHN0QnV0dG9uUGVybWlzc2lvbiA9IFtdO1xuICAgIGxzdEJ1dHRvblRlbXBsYXRlID0gW107XG5cbiAgICBjdXJyZW50SXRlbTogYW55O1xuICAgIGlzQnRuUmVhZHkgPSBmYWxzZTtcbiAgICBpc1N1cGVyVXNlciA9IGZhbHNlO1xuICAgIHNob3dGb3JtV29ya2Zsb3cgPSBmYWxzZTtcbiAgICBoZWFkZXJXb3JrZmxvdyA9ICcnO1xuICAgIGNvbXBvbmVudEtleSA9ICcnO1xuICAgIGFjdGlvbldvcmtmbG93OiBBY3Rpb247XG4gICAgbHN0QnRuQXV0aG9yaXplTWVudTogQnV0dG9uQWN0aW9uW10gPSBbXTtcblxuICAgIHBvcHVwU2l6ZVdvcmtmbG93OiBQb3B1cFNpemUgPSBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDk1MCwgaGVpZ2h0OiA1NDAgfSk7XG4gICAgc2hvd0hpc3RvcnlXb3JrZmxvdyA9IGZhbHNlO1xuICAgIHNob3dBbGxCdXR0b25zID0gZmFsc2U7XG4gICAgaGlkZGVuQnRuRnVuY3Rpb24gPSBmYWxzZTtcbiAgICBsc3RCdXR0b25BY3Rpb24gPSBbXTtcbiAgICAvLyBCaeG6v24gxJHhu4Mga2nhu4NtIHRyYSBs4bqnbiBjbGljayDEkeG6p3UgdGnDqm4gY+G7p2EgdXNlciB2w6BvIGTDsm5nIHRyw6puIGdyaWRcbiAgICAvLyBT4butIGThu6VuZyDEkeG7gyBmaXggYnVnIHNldCBzZWxlY3RlZCByb3cgdOG7qyBmb3JtIGNoYSwgbmjGsG5nIHbDoG8gZm9ybSBjb24g4bqlbiBzYW5nIHJvdyBraMOhYyBuw7MgayBi4buPIHNlbGVjdGVkIHJvdyDEkcOjIHNldCB04burIGLDqm4gbmdvw6BpXG4gICAgZmlyc3RSb3dDbGljayA9IHRydWU7XG5cbiAgICBzdGFydFdvcmtmbG93TW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ2jhu41uIHF1eSB0csOsbmggbmdoaeG7h3AgduG7pSBz4butIGThu6VuZydcbiAgICB9KTtcbiAgICBwcm9jZXNzV29ya2Zsb3dNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoKTtcbiAgICBjaG9ZS2llbk1vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ0NobyDDvSBraeG6v24nLFxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogMTEwMCwgaGVpZ2h0OiA2NTAgfSlcbiAgICB9KTtcbiAgICB3b3JrZmxvd1NldHRpbmdNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoKTtcbiAgICB3b3JrZmxvd0hpc3RvcnlNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdYZW0gbOG7i2NoIHPhu60nXG4gICAgfSk7XG4gICAgcGVybWlzc2lvblNoYXJpbmdNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdYZW0gZGFuaCBzw6FjaCBsaW5rIGNoaWEgc+G6uycsXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiAxMTAwLCBoZWlnaHQ6IDY1MCB9KSxcbiAgICB9KTtcbiAgICBwZXJtaXNzaW9uTGlzdE1vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ1hlbSBkYW5oIHPDoWNoIGPDsyBxdXnhu4FuJyxcbiAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDExMDAsIGhlaWdodDogNjUwIH0pLFxuICAgIH0pO1xuICAgIGNvbmdWaWVjTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ2jhuqF5IHF1eSB0csOsbmggY8O0bmcgdmnhu4djJyxcbiAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDExMDAsIGhlaWdodDogNjUwIH0pLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBjb25nVmllY1NldHRpbmc6IG5ldyBDcnVkTGlzdFNldHRpbmcoKVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgZGV0YWlsVGFza01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ0NoaSB0aeG6v3QgY8O0bmcgdmnhu4djJ1xuICAgIH0pO1xuICAgIGJ1dHRvbkF1dGhvcml6ZU1vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnUGjDom4gcXV54buBbiBuw7p0IGNo4bupYyBuxINuZycsXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IG1heGltaXplOiB0cnVlIH0pLFxuICAgICAgICBkYXRhOiB7IGRhdGFTb3VjZTogW10gfVxuICAgIH0pO1xuXG4gICAgc2hhcmVMaW5rTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ2hpYSBz4bq7IHF1eeG7gW4nLFxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogNjUwLCBoZWlnaHQ6IDMxMCB9KVxuICAgIH0pO1xuICAgIGF0dGFjaGVkVGFza01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ0Rhbmggc8OhY2ggY8O0bmcgdmnhu4djIMSRw61uaCBrw6htJ1xuICAgIH0pO1xuXG4gICAgQlVUVE9OX1BIQU5fUVVZRU4gPSBCdXR0b25QZXJtaXNzaW9uLkJVVFRPTl9QSEFOX1FVWUVOO1xuICAgIEJVVFRPTl9DQVVfSElOSF9RVVlfVFJJTkggPSBCdXR0b25QZXJtaXNzaW9uLkJVVFRPTl9DQVVfSElOSF9RVVlfVFJJTkg7XG4gICAgYnV0dG9uUGVybWlzc2lvbk1hcDogTWFwPHN0cmluZywgYm9vbGVhbj4gPSBuZXcgTWFwKCk7XG5cbiAgICBlbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZTtcbiAgICBlbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlOiBFbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlO1xuXG4gICAgc3RhdGVNYWNoaW5lc1NlcnZpY2U6IFN0YXRlTWFjaGluZXNTZXJ2aWNlO1xuXG4gICAgY2FuQm9fSG9Tb1NlcnZpY2U6IENhbkJvSG9Tb1NlcnZpY2U7XG5cbiAgICBzb3VyY2VJY29uOiBhbnkgPSB7fTtcbiAgICBzdG9wQ2FsY3VsYXRpbmdGdW5jdGlvbkNvbHVtbldpZHRoID0gZmFsc2U7XG4gICAgaXNBZnRlclJlbG9hZCA9IGZhbHNlO1xuICAgIHNlbGVjdGVkSXRlbUxhc3Q6IGFueTtcblxuICAgIHJvd0RhdGFDdXJyZW50OiBhbnk7XG4gICAgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50U2NoZW1hO1xuICAgIEZpbGVVcGxvYWRNb2RlID0gRmlsZVVwbG9hZE1vZGU7XG4gICAgY3VycmVudFVzZXI6IFRuVXNlcjtcbiAgICBPcGVyYXRvciA9IE9wZXJhdG9yO1xuICAgIHNob3dTYXZlUmVvcmRlciA9IGZhbHNlO1xuICAgIHNldHRpbmdEZWZhdWx0ID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xuXG4gICAgcHVibGljIF9yb3V0ZXI6IFJvdXRlcjtcbiAgICBwdWJsaWMgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBwdWJsaWMgX2N1c3RvbVJvdXRlclNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2U7XG4gICAgcHVibGljIF91blN1YnNjcmliZUFsbCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICBwdWJsaWMgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBfZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZTtcbiAgICBwdWJsaWMgX2xvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgcHVibGljIF9jb25nVmllY1NlcnZpY2U6IENvbmdWaWVjU2VydmljZTtcbiAgICBwdWJsaWMgX2RtTG9haUNvbmdWaWVjU2VydmljZTogRG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlO1xuICAgIHB1YmxpYyBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZTtcbiAgICBwdWJsaWMgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZTtcbiAgICBwdWJsaWMgX3NhbnRpbGl6ZXI6IERvbVNhbml0aXplcjtcbiAgICBwdWJsaWMgX2RhdGVQaXBlOiBEYXRlUGlwZTtcblxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZTtcbiAgICBwcml2YXRlIF9wZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2U7XG4gICAgcHJpdmF0ZSBfdGVtcGxhdGVJbnN0YW5jZVNlcnZpY2U6IFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlO1xuICAgIHByaXZhdGUgX3ByaW50U2VydmljZTogUHJpbnRTZXJ2aWNlO1xuICAgIHByaXZhdGUgX2ZlZGVyYXRpb25TZXJ2aWNlOiBGZWRlcmF0aW9uU2VydmljZTtcbiAgICBwcml2YXRlIF9iYXNlUGVybWlzc2lvblNlcnZpY2U6IEJhc2VQZXJtaXNzaW9uU2VydmljZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgX2lzVHJlZVRhYmxlOiBib29sZWFuXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG4gICAgICAgIHRoaXMuaXNUcmVlVGFibGUgPSBfaXNUcmVlVGFibGU7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICAgIHRoaXMuX2N1c3RvbVJvdXRlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3VzdG9tUm91dGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEV4cG9ydFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KExvZ2dlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLmVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSk7XG4gICAgICAgIHRoaXMuc3RhdGVNYWNoaW5lc1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoU3RhdGVNYWNoaW5lc1NlcnZpY2UpO1xuICAgICAgICB0aGlzLmNhbkJvX0hvU29TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENhbkJvSG9Tb1NlcnZpY2UpO1xuICAgICAgICB0aGlzLl9jb25nVmllY1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29uZ1ZpZWNTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KERtTG9haUNvbmdWaWVjU2VydmljZSk7XG5cbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9zYW50aWxpemVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KERvbVNhbml0aXplcik7XG4gICAgICAgIHRoaXMuX2RhdGVQaXBlID0gdGhpcy5faW5qZWN0b3IuZ2V0KERhdGVQaXBlKTtcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNb2R1bGVDb25maWdTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fcGVybWlzc2lvblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoUGVybWlzc2lvblNlcnZpY2UpO1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZUluc3RhbmNlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUZW1wbGF0ZUluc3RhbmNlU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3ByaW50U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChQcmludFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9mZWRlcmF0aW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChGZWRlcmF0aW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2Jhc2VQZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChCYXNlUGVybWlzc2lvblNlcnZpY2UpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tBbGwgPSB0aGlzLmhhbmRsZUNoZWNrQWxsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tBbGxfR3JvdXAgPSB0aGlzLmhhbmRsZUNoZWNrQWxsX0dyb3VwLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldHRpbmdEZWZhdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zZXR0aW5nKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FTlRJVFlfTUVUQURBVEFfUkVMT0FERUQsIHNlcnZpY2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbnRpdHlNZXRhZGF0YVNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kYXRlUmFuZ2UgPSBuZXcgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEoeyBhcHBlbmRUbzogJ2JvZHknIH0pO1xuICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kYXRlVGltZVJhbmdlID0gbmV3IERhdGVUaW1lUmFuZ2VDb250cm9sU2NoZW1hKHsgYXBwZW5kVG86ICdib2R5Jywgc2hvd1RpbWU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVyU2NoZW1hLmRyb3Bkb3duID0ge307XG5cbiAgICAgICAgZGF0YVNvdXJjZUljb24uZm9yRWFjaChzb3VyY2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VJY29uW3NvdXJjZS5pZF0gPSBzb3VyY2UudGVuO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRlbXBsYXRlRmlsdGVyID0gW107XG5cbiAgICAgICAgaWYgKCF0aGlzLl90YWJsZUNsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzID0gdGhpcy5fZGVmYXVsdFRhYmxlQ2xhc3M7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0dXBUYWJsZUNsYXNzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0Q29sdW1uU2NoZW1hKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5jcmVhdGVTZWFyY2hTY2hlbWEoKTtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuRmlsdGVyUm93KSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuRmlsdGVyUm93ID0gdGhpcy5zZXR0aW5nLnVzZUNvbW1vblNlYXJjaDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5UcmluaEt5IHx8ICF0aGlzLnNldHRpbmcuZGlzYWJsZVNoYXJlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWVudUJ1dHRvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVCdXR0b25zID0gYXN5bmMgKCkgPT4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBO4bq/dSBtw6Ag4bqpbiBhZHZhbmNlc2VhcmNoID0+IHPhur0ga2jDtG5nIGPDsyB0cmlnZ2VyIGxvYWQgZGF0YSB04burIGFkdmFuY2Ugc2VhcmNoID0+IHBo4bqjaSB04buxIGfhu41pIGdldERhdGEg4bufIE9uSW5pdFxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmhpZGRlbkFkdmFuY2VTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2VDb2RlICYmIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlQ29kZSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzQnRuUmVhZHkgPSB0aGlzLnNldHRpbmcuaGlkZGVuQXV0aG9yaXplQnV0dG9uIHx8IHRoaXMuc2V0dGluZy5jdXN0b21HZXREYXRhO1xuXG4gICAgICAgIGlmICh0aGlzLmF1dGhvcml6ZVBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5BRERdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9BRERgO1xuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkVESVRdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9FRElUYDtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5ERUxFVEVdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9ERUxFVEVgO1xuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkRFTEVURV9NVUxUSVBMRV0gPSBgJHt0aGlzLmF1dGhvcml6ZVBhdGh9L0RFTEVURV9NVUxUSVBMRWA7XG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6ZVBhdGhzW0NvbUN0eENvbnN0YW50cy5DT01NT04uRVhQT1JUX0VYQ0VMXSA9IGAke3RoaXMuYXV0aG9yaXplUGF0aH0vRVhQT1JUX0VYQ0VMYDtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FWFBPUlRfQUxMX0VYQ0VMXSA9IGAke3RoaXMuYXV0aG9yaXplUGF0aH0vRVhQT1JUX0FMTF9FWENFTGA7XG5cbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplQnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25BcHBseUF1dGhvcml6ZVtidXR0b25dID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XG4gICAgICAgIGNvbnN0IHRlbXAgPSB1c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICBpZiAodGVtcCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gbmV3IFRuVXNlcih1c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKTtcbiAgICAgICAgICAgIHRoaXMuaXNTdXBlclVzZXIgPSB0aGlzLmN1cnJlbnRVc2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcblxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyID09IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYnV0dG9uUGVybWlzc2lvbkNvZGUgb2YgdGhpcy5sc3RCdXR0b25QZXJtaXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uUGVybWlzc2lvbiA9IGAke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZX0vJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZW50aXR5TmFtZX0vJHtidXR0b25QZXJtaXNzaW9uQ29kZX1gLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25QZXJtaXNzaW9uTWFwLnNldChidXR0b25QZXJtaXNzaW9uLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2tpcCBjaGVjayBwZXJtaXNzaW9uIGlmIGN1cnJlbnQgdXNlciBpcyBzdXBlcnVzZXIgb3IgKGlnbm9yZUFkbWluID09IGZhbHNlIGFuZCB1c2VyIGlzIGFkbWluKVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpICE9PSAndHJ1ZSdcbiAgICAgICAgICAgICYmICh0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50Lmlnbm9yZUFkbWluID09PSB0cnVlXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5jdXJyZW50VXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgIT09ICd0cnVlJ1xuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmdldFNlcnZpY2VQZXJtaXNzaW9uKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxzdEJhc2VQZXJtaXNzaW9uID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHRoaXMubHN0QnV0dG9uUGVybWlzc2lvbiA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYnV0dG9uUGVybWlzc2lvbnMgYXMgc3RyaW5nW10gPz8gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBidXR0b25QZXJtaXNzaW9uQ29kZSBvZiB0aGlzLmxzdEJ1dHRvblBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uUGVybWlzc2lvbiA9IGAke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZX0vJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZW50aXR5TmFtZX0vJHtidXR0b25QZXJtaXNzaW9uQ29kZX1gLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uUGVybWlzc2lvbk1hcC5zZXQoYnV0dG9uUGVybWlzc2lvbiwgbHN0QmFzZVBlcm1pc3Npb24uaW5jbHVkZXMoYnV0dG9uUGVybWlzc2lvbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29sLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmZpbmRUZW1wbGF0ZShgaGVhZGVyJHtjb2wuZmllbGQuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCl9JHtjb2wuZmllbGQuc3Vic3RyaW5nKDEpfWApO1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlSGVhZGVyQ29udGVudFtjb2wuZmllbGRdID0gdGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbkNvbnRlbnRJbml0LmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgc2V0dXBUYWJsZUNsYXNzKCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLm11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3cgfHwgIXRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCkge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVDbGFzcyArPSAnIG11bHRpLWNoZWNrJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBzaW5nbGUtY2hlY2snO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zdGlja3lDb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBzdGlja3ktY29sdW1ucy1hY3RpdmUnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCkge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVDbGFzcyArPSAnIGhpZGRlbi1jb2x1bW4tY2hlY2tib3gnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5PcmRlckNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5fdGFibGVDbGFzcyArPSAnIGhpZGRlbi1jb2x1bW4tb3JkZXInO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdENvbHVtblNjaGVtYShjb2xzOiBDb2x1bW5TY2hlbWFCYXNlW10pIHtcbiAgICAgICAgaWYgKCFjb2xzIHx8ICFjb2xzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBsZXQgY29sRnVuY3Rpb24gPSBudWxsLCBjb2xHcm91cCA9IG51bGwsIGNvbEhhc1RvZ2dsZUljb24gPSBudWxsO1xuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29sLnNob3dUb2dnbGVJY29uKSB7XG4gICAgICAgICAgICAgICAgY29sSGFzVG9nZ2xlSWNvbiA9IGNvbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2wuZmllbGQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbEZ1bmN0aW9uID0gY29sO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sLmdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY29sLmdyb3VwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29sR3JvdXAgPSBjb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29sRnVuY3Rpb24gJiYgIWNvbEZ1bmN0aW9uLndpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLl93aWR0aEZ1bmN0aW9uQ29sdW1uID0gY29sRnVuY3Rpb24ud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb2xIYXNUb2dnbGVJY29uKSB7XG4gICAgICAgICAgICBjb2xIYXNUb2dnbGVJY29uID0gdGhpcy5zZXR0aW5nLmNvbHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgY29sSGFzVG9nZ2xlSWNvbi5jb2xIYXNUb2dnbGVJY29uID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmdldENvbXBvbmVudEtleSgpO1xuICAgICAgICB0aGlzLmdldENvbG9yU2V0dGluZygpO1xuICAgICAgICB0aGlzLmdldENvbHVtblNldHRpbmcoY29sR3JvdXApO1xuICAgICAgICB0aGlzLmdldFBhZ2VTZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuZXh0ZW5kQ29sdW1ucyh0aGlzLnNldHRpbmcuY29scyk7XG4gICAgICAgIHRoaXMuZm9ybWF0Q29sdW1ucyh0aGlzLnNldHRpbmcuY29scyk7XG4gICAgICAgIHRoaXMuYXBwbHlDb2x1bW5TZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJDb2x1bW4odGhpcy5zZXR0aW5nLmNvbHMpO1xuICAgIH1cblxuICAgIGdldENvbXBvbmVudEtleSgpIHtcbiAgICAgICAgY29uc3QgcGFyZW50Q2xhc3MgPSB0aGlzLmlzVHJlZVRhYmxlID8gRW51bVByb3BlcnRpZXMuVFJFRV9MSVNUIDogRW51bVByb3BlcnRpZXMuQ1JVRF9MSVNUO1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QocGFyZW50Q2xhc3MpPy5wYXJlbnROb2RlPy50YWdOYW1lPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgICAgICB0aGlzLmNvbXBvbmVudEtleSA9IGAke2xvY2F0aW9uLnBhdGhuYW1lfSR7Y29tcG9uZW50TmFtZSA/ICcvJyArIGNvbXBvbmVudE5hbWUgOiAnJ30ke3RoaXMuc2V0dGluZy5zZXR0aW5nS2V5ID8gJy8nICsgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXkgOiAnJ31gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXh0ZW5kQ29sdW1ucyhjb2xzOiBDb2x1bW5TY2hlbWFCYXNlW10sIGFwcGVuZENvbCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZiA9IFtdO1xuICAgICAgICBpZiAoIWNvbHMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRlbXA6IENvbHVtblNjaGVtYUJhc2VbXSA9IFtdO1xuICAgICAgICBjb25zdCB0bXBDb2xzID0gWy4uLmNvbHNdO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscykge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscy5mb3JFYWNoKGNvbFJlb3JkZXIgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sc1tpXS5maWVsZCA9PSBjb2xSZW9yZGVyLmNvbHVtbkNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaChjb2xzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIEPDsm4gbOG6oWkgbmjhu69uZyBjb2RlIG3DoCBraMO0bmcgxJHGsOG7o2MgY+G6pXUgaMOsbmggdGjDrCBnaMOpcCBs4bqhaSB0aGVvIGluZGV4IMSRxrDhu6NjIGtoYWkgYsOhb1xuICAgICAgICAgICAgbGV0IHRlbXBDb2xzOiBDb2x1bW5TY2hlbWFCYXNlW10gPSBbXTtcbiAgICAgICAgICAgIGNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleENvbE9sZCA9IHRtcENvbHMuZmluZEluZGV4KHAgPT4gcC5maWVsZCA9PSBjb2wuZmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleENvbE9sZCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRlbXAuc3BsaWNlKDAsIDAsIGNvbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUw6xtIHbhu4sgdHLDrSBj4bunYSBj4buZdCBwaMOtYSB0csaw4bubYyB0cm9uZyBsaXN0IHJlb3JkZXIgbeG7m2lcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4Q29sQmVmb3JlTmV3ID0gdGVtcC5maW5kSW5kZXgocCA9PiBwLmZpZWxkID09IHRtcENvbHNbaW5kZXhDb2xPbGQgLSAxXS5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleENvbEJlZm9yZU5ldyA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbHMuc3BsaWNlKDAsIDAsIGNvbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUw6xtIHbhu4sgdHLDrSBj4bunYSBj4buZdCB0csaw4bubYyBj4buZdCDEkWFuZyBraeG7g20gdHJhIHRyb25nIGxpc3QgY+G7mXQgZ+G7kWNcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Q29sT2xkID0gdG1wQ29scy5maW5kSW5kZXgocCA9PiBwLmZpZWxkID09IHRtcENvbHNbaW5kZXhDb2xPbGQgLSAxXS5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvbEJlZm9yZU5ldyA9IHRlbXAuZmluZEluZGV4KHAgPT4gcC5maWVsZCA9PSB0bXBDb2xzW2luZGV4Q29sT2xkIC0gMV0uZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vID0+IMSQ4bq/biBraGkgdGjhuqV5IHRow6wgYWRkIGPhu5l0IGhp4buHbiB04bqhaSB2w6AgbGlzdCB04bqhbSB2w6BvIHbhu4sgdHLDrSBjaMOoblxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXhDb2xCZWZvcmVOZXcgPT0gdGVtcC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2goY29sLCAuLi50ZW1wQ29scyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnNwbGljZShpbmRleENvbEJlZm9yZU5ldyArIDEsIDAsIGNvbCwgLi4udGVtcENvbHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRlbXBDb2xzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgIH1cbiAgICAgICAgY29scy5zcGxpY2UoMCwgY29scy5sZW5ndGgpO1xuICAgICAgICBjb2xzLnNwbGljZSgwLCAwLCAuLi50ZW1wKTtcblxuICAgICAgICBsZXQgZmlyc3RDb2xWaXNpYmxlID0gbnVsbDtcbiAgICAgICAgbGV0IGZvdW5kSXRlbVNob3dFZGl0TGluayA9IGZhbHNlO1xuICAgICAgICB0ZW1wLnNwbGljZSgwLCB0ZW1wLmxlbmd0aCk7XG4gICAgICAgIGxldCB0bXBDb2w6IENvbHVtblNjaGVtYUJhc2UgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY29scykge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQucmF3Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzLmZpbmQocCA9PiBwLmNvbHVtbkNvZGUgPT0gZWxlbWVudC5maWVsZCk7XG4gICAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLnNldHRpbmcuY29scy5maW5kKHAgPT4gcC5maWVsZCA9PSBlbGVtZW50LmZpZWxkKTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcudmlzaWJsZSAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy52aXNpYmxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2wpIHtcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50LnZpc2libGUgPSBjb2wudmlzaWJsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVsZW1lbnQubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmxhYmVsID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGVsZW1lbnQubGFiZWwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy50ZXh0QWxpZ24gIT09IHVuZGVmaW5lZCAmJiBjb25maWcudGV4dEFsaWduICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC50ZXh0QWxpZ24gPSBjb25maWcudGV4dEFsaWduO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sKSB7XG4gICAgICAgICAgICAgICAgLy8gZWxlbWVudC50ZXh0QWxpZ24gPSBjb2wudGV4dEFsaWduO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy53aWR0aCAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy53aWR0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQud2lkdGggPSBjb25maWcud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2wpIHtcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50LndpZHRoID0gY29sLndpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kYXRhVHlwZSA9PSBudWxsIHx8IGVsZW1lbnQuZGF0YVR5cGUgPT0gdW5kZWZpbmVkIHx8IGVsZW1lbnQuZGF0YVR5cGUgPT0gJycpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmRhdGFUeXBlID0gRGF0YVR5cGUuc3RyaW5nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC52aXNpYmxlXG4gICAgICAgICAgICAgICAgfHwgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtblxuICAgICAgICAgICAgICAgICAgICAmJiBlbGVtZW50LmZpZWxkID09IHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5maWVsZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmJhc2VTZXJ2aWNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cm9sVHlwZSA9IENvbnRyb2xUeXBlLmRyb3Bkb3duO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQucmF3Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLnB1c2gobmV3IFJlZkZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZUZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlRmllbGQgPSAnaWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheUZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRpc3BsYXlGaWVsZCA9ICd0ZW4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ29sID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWZGaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdDb2x1bW46IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBlbGVtZW50LmRhdGFUeXBlUmVmRmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgZWxlbWVudC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZWxlbWVudC5hbGxvd0ZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAhKHRoaXMuc2V0dGluZy5ncm91cENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlbGVtZW50LmZpZWxkID09IHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnUmVmRmllbGQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzLmZpbmQocCA9PiBwLmNvbHVtbkNvZGUgPT0gdG1wQ29sLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdSZWZGaWVsZCAmJiBjb25maWdSZWZGaWVsZC52aXNpYmxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDb2wudmlzaWJsZSA9IGNvbmZpZ1JlZkZpZWxkLnZpc2libGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2godG1wQ29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdENvbFZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENvbFZpc2libGUgPSB0bXBDb2w7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5kYXRhU291cmNlICYmIGVsZW1lbnQuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29udHJvbFR5cGUgPSBDb250cm9sVHlwZS5kcm9wZG93bjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50LnJhd0NvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcENvbCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVmRmllbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Q29sdW1uOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogZWxlbWVudC5kYXRhVHlwZVJlZkZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGVsZW1lbnQuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGVsZW1lbnQuYWxsb3dGaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogISh0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgZWxlbWVudC5maWVsZCA9PSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4uZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ1JlZkZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscy5maW5kKHAgPT4gcC5jb2x1bW5Db2RlID09IHRtcENvbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnUmVmRmllbGQgJiYgY29uZmlnUmVmRmllbGQudmlzaWJsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ29sLnZpc2libGUgPSBjb25maWdSZWZGaWVsZC52aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKHRtcENvbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RDb2xWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb2xWaXNpYmxlID0gdG1wQ29sO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFmaXJzdENvbFZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RDb2xWaXNpYmxlID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50LmZvcmNlR2V0RGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmJhc2VTZXJ2aWNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlRmllbGQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZUZpZWxkID0gJ2lkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kaXNwbGF5RmllbGQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kaXNwbGF5RmllbGQgPSAndGVuJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5zaG93RWRpdExpbmspIHtcbiAgICAgICAgICAgICAgICBmb3VuZEl0ZW1TaG93RWRpdExpbmsgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmRJdGVtU2hvd0VkaXRMaW5rICYmIGZpcnN0Q29sVmlzaWJsZSkge1xuICAgICAgICAgICAgZmlyc3RDb2xWaXNpYmxlLnNob3dFZGl0TGluayA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29scy5sZW5ndGggPSAwO1xuICAgICAgICBjb2xzLnB1c2goLi4udGVtcCk7XG5cbiAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bUxlbmd0aCA9IFtdO1xuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtV29yZCA9IFtdO1xuICAgICAgICBjb2xzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGlmICghY29sLnZpc2libGUpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChjb2wubWF4V29yZERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtV29yZC5wdXNoKGNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2wubWF4TGVuZ3RoRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZEhhc01heGltdW1MZW5ndGgucHVzaChjb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9ybWF0Q29sdW1ucyhjb2xzOiBDb2x1bW5TY2hlbWFCYXNlW10pOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xuICAgICAgICAgICAgaWYgKGNvbC5kYXRhVHlwZSA9PSAnZGF0ZScpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbC5mb3JtYXQpIGNvbC5mb3JtYXQgPSAnbm9ybWFsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbC5leHRlbmREYXRhLnN0eWxlID0gdGhpcy5nZXRDb2x1bW5TdHlsZShjb2wpO1xuICAgICAgICAgICAgY29sLmV4dGVuZERhdGEuaGVhZGVyU3R5bGUgPSB0aGlzLmdldENvbHVtblN0eWxlKGNvbCwgdHJ1ZSk7XG4gICAgICAgICAgICBjb2wuZXh0ZW5kRGF0YS5oZWFkZXJDbGFzcyA9IHRoaXMuZ2V0Q2VsbENsYXNzSGVhZGVyKGNvbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblNldHRpbmcoY29sR3JvdXA6IENvbHVtblNjaGVtYUJhc2UpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uID0gY29sR3JvdXA7XG4gICAgICAgIGNvbnN0IGRhdGFTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcpO1xuICAgICAgICBjb25zdCBqc29uRGF0YSA9IHRoaXMudHJ5UGFyc2VKc29uKGRhdGFTZXR0aW5nKTtcbiAgICAgICAgaWYgKGRhdGFTZXR0aW5nICYmIGpzb25EYXRhLnZhbGlkICYmIGpzb25EYXRhLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0ganNvbkRhdGEudmFsdWU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBlbGVtZW50ID0gc2V0dGluZ3NbaV07XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHRoaXMuY29tcG9uZW50S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCA9IGVsZW1lbnQuc2V0dGluZy5zb3J0RmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPSBlbGVtZW50LnNldHRpbmcuc29ydERpciA/IGVsZW1lbnQuc2V0dGluZy5zb3J0RGlyIDogMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkID0gZWxlbWVudC5zZXR0aW5nLmdyb3VwRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwSW5DbGllbnQgPSBlbGVtZW50LnNldHRpbmcuZ3JvdXBJbkNsaWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkICYmIGNvbEdyb3VwICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0R3JvdXBGaWVsZChjb2xHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscyA9IGVsZW1lbnQuc2V0dGluZy5kZXRhaWxzO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29sR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JvdXBGaWVsZChjb2xHcm91cCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEdyb3VwRmllbGQoY29sR3JvdXApIHtcbiAgICAgICAgaWYgKChjb2xHcm91cC5kYXRhU291cmNlICYmIGNvbEdyb3VwLmRhdGFTb3VyY2UubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHx8IGNvbEdyb3VwLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkID0gYHN0ciR7Y29sR3JvdXAuZmllbGR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQgPSBjb2xHcm91cC5maWVsZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZUNvbHVtblNldHRpbmcoKSB7XG4gICAgICAgIGxldCBjb2x1bW5TZXR0aW5nID0gW107XG4gICAgICAgIGxldCBjaGVja0V4aXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRhdGFTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcpO1xuICAgICAgICBpZiAoZGF0YVNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbHVtblNldHRpbmcgPSBKU09OLnBhcnNlKGRhdGFTZXR0aW5nKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1TZXR0aW5nID0gY29sdW1uU2V0dGluZy5maW5kKHEgPT4gcS5wYXRobmFtZSA9PSB0aGlzLmNvbXBvbmVudEtleSk7XG4gICAgICAgICAgICBpZiAoaXRlbVNldHRpbmcpIHtcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLnNvcnRGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZDtcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLnNvcnREaXIgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RGlyO1xuICAgICAgICAgICAgICAgIGl0ZW1TZXR0aW5nLnNldHRpbmcuZ3JvdXBGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQ7XG4gICAgICAgICAgICAgICAgaXRlbVNldHRpbmcuc2V0dGluZy5ncm91cEluQ2xpZW50ID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBJbkNsaWVudDtcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLmRldGFpbHMgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzO1xuICAgICAgICAgICAgICAgIGNoZWNrRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjaGVja0V4aXN0KSB7XG4gICAgICAgICAgICBjb2x1bW5TZXR0aW5nLnB1c2goeyBwYXRobmFtZTogdGhpcy5jb21wb25lbnRLZXksIHNldHRpbmc6IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcsIEpTT04uc3RyaW5naWZ5KGNvbHVtblNldHRpbmcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZUNvbHVtblNldHRpbmcoKSB7XG4gICAgICAgIGxldCBjb2x1bW5TZXR0aW5nID0gW107XG4gICAgICAgIGNvbnN0IGRhdGFTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcpO1xuICAgICAgICBpZiAoZGF0YVNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbHVtblNldHRpbmcgPSBKU09OLnBhcnNlKGRhdGFTZXR0aW5nKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY29sdW1uU2V0dGluZy5maW5kSW5kZXgocSA9PiBxLnBhdGhuYW1lID09IHRoaXMuY29tcG9uZW50S2V5KTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSBjb2x1bW5TZXR0aW5nLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzID0gW107XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkNPTFVNTl9TRVRUSU5HLCBKU09OLnN0cmluZ2lmeShjb2x1bW5TZXR0aW5nKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2xvclNldHRpbmcoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFQYWdlU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkNPTE9SX1NFVFRJTkcpO1xuICAgICAgICBpZiAoZGF0YVBhZ2VTZXR0aW5nKSB7XG4gICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IEpTT04ucGFyc2UoZGF0YVBhZ2VTZXR0aW5nKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0dGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gc2V0dGluZ3NbaV07XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHRoaXMuY29tcG9uZW50S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkID0gZWxlbWVudC5jb2xvckZpbHRlckZpZWxkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJUYWJsZSA9IGVsZW1lbnQuY29sb3JGaWx0ZXJUYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVDb2xvclNldHRpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhY2hlQ29sb3JTZXR0aW5nKCkge1xuICAgICAgICB0aGlzLl9jb2xvckZpbHRlclRhYmxlID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJUYWJsZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlW2ldO1xuICAgICAgICAgICAgY29uc3QgaXRlbVZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgaXRlbVZhbHVlc1swXSA9IGl0ZW0uY29tcGFyZVR5cGU7XG4gICAgICAgICAgICBpdGVtVmFsdWVzWzFdID0gaXRlbS5maWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgIGl0ZW1WYWx1ZXNbMl0gPSB0aGlzLmNvbnZlcnRUb0RhdGUoaXRlbS5maWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICBpdGVtVmFsdWVzWzNdID0gTnVtYmVyKGl0ZW0uZmlsdGVyVmFsdWUpO1xuICAgICAgICAgICAgaXRlbVZhbHVlc1s0XSA9ICgvdHJ1ZS9pKS50ZXN0KGl0ZW0uZmlsdGVyVmFsdWUpO1xuICAgICAgICAgICAgaXRlbVZhbHVlc1s1XSA9IGl0ZW0uY29sb3I7XG4gICAgICAgICAgICB0aGlzLl9jb2xvckZpbHRlclRhYmxlLnB1c2goaXRlbVZhbHVlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENvbG9yU2V0dGluZygpIHtcbiAgICAgICAgbGV0IGNvbG9yU2V0dGluZyA9IFtdO1xuICAgICAgICBsZXQgY2hlY2tFeGlzdCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBkYXRhQ29sb3JTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MT1JfU0VUVElORyk7XG4gICAgICAgIGlmIChkYXRhQ29sb3JTZXR0aW5nKSB7XG4gICAgICAgICAgICBjb2xvclNldHRpbmcgPSBKU09OLnBhcnNlKGRhdGFDb2xvclNldHRpbmcpO1xuICAgICAgICAgICAgY29sb3JTZXR0aW5nLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHRoaXMuY29tcG9uZW50S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29sb3JGaWx0ZXJGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvbG9yRmlsdGVyVGFibGUgPSB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJUYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoZWNrRXhpc3QpIHtcbiAgICAgICAgICAgIGNvbG9yU2V0dGluZy5wdXNoKHtcbiAgICAgICAgICAgICAgICBwYXRobmFtZTogdGhpcy5jb21wb25lbnRLZXksXG4gICAgICAgICAgICAgICAgY29sb3JGaWx0ZXJGaWVsZDogdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgICAgY29sb3JGaWx0ZXJUYWJsZTogdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MT1JfU0VUVElORywgSlNPTi5zdHJpbmdpZnkoY29sb3JTZXR0aW5nKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYWdlU2V0dGluZygpIHtcbiAgICAgICAgY29uc3QgZGF0YVBhZ2VTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuUEFHRV9TRVRUSU5HKTtcbiAgICAgICAgaWYgKGRhdGFQYWdlU2V0dGluZykge1xuICAgICAgICAgICAgY29uc3QgcGFnZVNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhUGFnZVNldHRpbmcpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlU2V0dGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gcGFnZVNldHRpbmdzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhdGhuYW1lID09PSB0aGlzLmNvbXBvbmVudEtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgPSBlbGVtZW50LnBhZ2VTaXplO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVQYWdlU2V0dGluZygpIHtcbiAgICAgICAgbGV0IHBhZ2VTZXR0aW5nID0gW107XG4gICAgICAgIGxldCBjaGVja0V4aXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRhdGFQYWdlU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLlBBR0VfU0VUVElORyk7XG4gICAgICAgIGlmIChkYXRhUGFnZVNldHRpbmcpIHtcbiAgICAgICAgICAgIHBhZ2VTZXR0aW5nID0gSlNPTi5wYXJzZShkYXRhUGFnZVNldHRpbmcpO1xuICAgICAgICAgICAgcGFnZVNldHRpbmcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gdGhpcy5jb21wb25lbnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYWdlU2l6ZSA9IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoZWNrRXhpc3QpIHtcbiAgICAgICAgICAgIHBhZ2VTZXR0aW5nLnB1c2goeyBwYXRobmFtZTogdGhpcy5jb21wb25lbnRLZXksIHBhZ2VTaXplOiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5QQUdFX1NFVFRJTkcsIEpTT04uc3RyaW5naWZ5KHBhZ2VTZXR0aW5nKSk7XG4gICAgfVxuXG4gICAgY2hlY2tJc0luc2lkZURpYWxvZygpIHtcbiAgICAgICAgY29uc3QgJGRpYWxvZyA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgnLnAtZGlhbG9nJyk7XG4gICAgICAgIHJldHVybiAhISRkaWFsb2c7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVhZHkoKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZml4SGVpZ2h0VHlwZUluRGlhbG9nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja0lzSW5zaWRlRGlhbG9nKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuaGVpZ2h0VHlwZSA9IEhlaWdodFR5cGUuY3VzdG9tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25SZWFkeS5lbWl0KHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tBbGxvd1NlbGVjdFJvdyhldnQsIHJvd0RhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRpc2FibGVSb3dTZWxlY3RXaGVuQ2xpY2tBY3Rpb25cbiAgICAgICAgICAgICYmIChldnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnLmxpbmstb3ItYWN0aW9uJylcbiAgICAgICAgICAgICAgICB8fCBldnQudGFyZ2V0LmNsb3Nlc3QoJy5saW5rLW9yLWFjdGlvbicpXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENsaWNrIHbDoG8gY2hlY2tib3hcbiAgICAgICAgaWYgKGV2dC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdwLWNoZWNrYm94LWJveCcpIHx8IGV2dC50YXJnZXQuY2xvc2VzdCgnLnAtY2hlY2tib3gtYm94JykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNoZWNrQWxsb3dTZWxlY3RSb3cgJiYgIXRoaXMuc2V0dGluZy5jaGVja0FsbG93U2VsZWN0Um93KHJvd0RhdGEsIGV2dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVTZWxlY3RSb3cgPSAoZXZ0LCBkYXRhKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGFzQ3VzdG9tSGFuZGxlQ2xpY2tSb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FsbG93U2VsZWN0Um93KGV2dCwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbGRDaGVja2VkID0gZGF0YS5fY2hlY2tlZDtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcubXVsdGlwbGVDaGVja1doZW5DbGlja1Jvdykge1xuICAgICAgICAgICAgbGV0IGRhdGFUb0NsZWFyQ2hlY2tlZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5maXJzdFJvd0NsaWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdFJvd0NsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZGF0YVRvQ2xlYXJDaGVja2VkID0gdGhpcy5fcmF3RGF0YVNvdXJjZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGFUb0NsZWFyQ2hlY2tlZCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGFUb0NsZWFyQ2hlY2tlZC5mb3JFYWNoKChwLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHAuX2NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fY2hlY2tlZCA9ICFvbGRDaGVja2VkO1xuICAgICAgICBsZXQgZmlyZUV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuZmlyZUV2ZW50V2hlblJlU2VsZWN0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1MYXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhc3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIGZpcmVFdmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhKGRhdGEsIGV2dC50YXJnZXQuY2xvc2VzdCgndHInKSwgZmlyZUV2ZW50KTtcbiAgICB9O1xuXG4gICAgaGFuZGxlU2VsZWN0Um93R3JvdXAgPSAoZXZ0LCBkYXRhKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0FsbG93U2VsZWN0Um93KGV2dCwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93KSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtc01vZGlmaWVkID0gWy4uLnRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc107XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCgocCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBwLl9jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaXRlbXNNb2RpZmllZC5zb21lKHEgPT4gcS5pZCA9PSBkYXRhLmlkKSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zTW9kaWZpZWQucHVzaChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW1zTW9kaWZpZWQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoZWNrUm93RGF0YV9Hcm91cChpdGVtLCBudWxsLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLl9jaGVja2VkID0gIWRhdGEuX2NoZWNrZWQ7XG5cbiAgICAgICAgbGV0IGZpcmVFdmVudCA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmZpcmVFdmVudFdoZW5SZVNlbGVjdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtTGFzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1MYXN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmaXJlRXZlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrUm93RGF0YV9Hcm91cChkYXRhLCBldnQudGFyZ2V0LmNsb3Nlc3QoJ3RyJyksIGZpcmVFdmVudCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2V0TGFzdEl0ZW1TZWxlY3RlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3QgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXNbdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1MYXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VtaXRSb3dTZWxlY3QodHJFbGVtZW50LCBkYXRhKSB7XG4gICAgICAgIHRoaXMub25Sb3dTZWxlY3QuZW1pdCh7XG4gICAgICAgICAgICBlbGVtZW50OiB0ckVsZW1lbnQsXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVUb2dnbGVSb3cocm93RGF0YSwgZXZ0KSB7XG4gICAgICAgIHRoaXMudGFibGUudG9nZ2xlUm93KHJvd0RhdGEsIGV2dCk7XG4gICAgfVxuICAgIHB1YmxpYyBoYW5kbGVFeHBhbmRSb3cocm93RGF0YSwgZmllbGQsIGlzQ29sbGFwc2UpIHtcbiAgICAgICAgcm93RGF0YS5fX2V4cGFuZFtmaWVsZF0gPSAhaXNDb2xsYXBzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zaG93Q29udGV4dE1lbnUoZXZ0KSB7XG4gICAgICAgIC8vIHNldFRpbWVvdXQgxJHhu4MgZml4IGJ1ZyBoaeG7g24gdGjhu4sgY29udGV4dCBtZW51IHRyw6BuIHJhIG5nb8OgaSBtw6BuIGjDrG5oXG4gICAgICAgIHNldFRpbWVvdXQoZiA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51LnNob3coZXZ0KTtcbiAgICAgICAgfSwgMTApO1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmlsdGVycygpOiBGaWx0ZXJbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJfZGVmYXVsdCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfZGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2NvbW1vblNlYXJjaCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfY29tbW9uU2VhcmNoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJfY3VzdG9tKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9jdXN0b20pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9jb2x1bW4pIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmlsdGVyX2NvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2FkdmFuY2VTZWFyY2gpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmlsdGVyX2FkdmFuY2VTZWFyY2gpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0R3JpZEluZm8oKSB7XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpbHRlcnM6IHRoaXMuZ2V0RmlsdGVycygpLFxuICAgICAgICAgICAgc29ydHM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuX2dyb3VwRmllbGQgJiYgIXRoaXMuX2dyb3VwSW5DbGllbnQpIHtcbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzLnVuc2hpZnQoeyBmaWVsZDogdGhpcy5fZ3JvdXBGaWVsZCwgZGlyOiAxIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zb3J0RmllbGQgJiYgdGhpcy5fc29ydERpciAhPT0gMCkge1xuICAgICAgICAgICAgZ3JpZEluZm8uc29ydHMucHVzaCh7IGZpZWxkOiB0aGlzLl9zb3J0RmllbGQsIGRpcjogdGhpcy5fc29ydERpciB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBncmlkSW5mbztcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlU2VhcmNoQWR2cyhmaWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgICAgICB0aGlzLmZpbHRlcl9hZHZhbmNlU2VhcmNoID0gZmlsdGVycztcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFuZGxlU2VhcmNoKGRhdGEpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJfY29tbW9uU2VhcmNoID0gZGF0YS5maWx0ZXJzO1xuICAgICAgICB0aGlzLmRhdGFTZWFyY2hDb21tb24gPSBkYXRhLmRhdGFGb3JtO1xuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IDE7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIGhhbmRsZUluaXRBZHZhbmNlU2VhcmNoKGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyX2FkdmFuY2VTZWFyY2ggPSBmaWx0ZXJzO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YSgpIHtcbiAgICAgICAgY29uc3QgaW5mb0dldERhdGEgPSB7XG4gICAgICAgICAgICBncmlkSW5mbzogdGhpcy5nZXRHcmlkSW5mbygpLFxuICAgICAgICAgICAgZGF0YVNlYXJjaENvbW1vbjogdGhpcy5kYXRhU2VhcmNoQ29tbW9uXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2hvd1NhdmVSZW9yZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25SZWxvYWQuZW1pdChpbmZvR2V0RGF0YSk7XG4gICAgfVxuXG4gICAgcmVsb2FkKGZpbHRlcl9jdXN0b20/OiBGaWx0ZXJbXSwgcGFnZSA9IDEpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJfY3VzdG9tID0gZmlsdGVyX2N1c3RvbTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGFuaFNvVGh1VHVHcm91cExhc3Rlc3QoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zb3J0R3JvdXBMYXN0TW9kZWxCYXNlKCkudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICfEkMOhbmggbOG6oWkgc+G7kSB0aOG7qSB04buxIHRow6BuaCBjw7RuZycsIGYgPT4ge1xuXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkKCkge1xuICAgICAgICB0aGlzLm9uQWRkLmVtaXQoKTtcbiAgICB9XG4gICAgcHVibGljIGV4cG9ydEFsbERhdGEoKSB7XG4gICAgICAgIHRoaXMub25FeHBvcnRBbGwuZW1pdCgpO1xuICAgIH1cblxuICAgIGFzeW5jIHh1YXRDYWNNdWNEYUNob24oaXNUcmVlID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93Q29uZmlybUV4cG9ydCkge1xuICAgICAgICAgICAgY29uc3QgcnMgPSBhd2FpdCB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiB4deG6pXQgYuG6o24gZ2hpIMSRw6MgY2jhu41uIChWw6AgY8OhYyBi4bqjbiBnaGkgY29uIHTGsMahbmcg4bupbmcpJywgJ1jDoWMgbmjhuq1uIHh14bqldCBmaWxlJyk7XG4gICAgICAgICAgICBpZiAoIXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGhpcy5zZXR0aW5nLmV4cG9ydEl0ZW1zTW9kZSkge1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRJdGVtc01vZGUuRnJvbUh0bWw6XG4gICAgICAgICAgICAgICAgdGhpcy5leHBvcnRCeVJlYWRpbmdIdG1sKGZhbHNlLCBpc1RyZWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBFeHBvcnRJdGVtc01vZGUuTWFudWFsR2V0RGF0YTpcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0SXRlbXNNb2RlLkF1dG9HZXREYXRhOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1RoZSBmdW5jdGlvbiBoYXZlblxcJ3Qgc3VwcG9ydGVkIHlldCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgcHJpbnRCeVJlYWRpbmdIdG1sKGlzVHJlZSA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2hvd0NvbmZpcm1FeHBvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJzID0gYXdhaXQgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4gaW4gYuG6o24gZ2hpIMSRw6MgY2jhu41uIChWw6AgY8OhYyBi4bqjbiBnaGkgY29uIHTGsMahbmcg4bupbmcpJywgJ1jDoWMgbmjhuq1uIGluIGZpbGUnKTtcbiAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVyID0gJ0Rhbmggc8OhY2ggJyArIHRoaXMuc2V0dGluZy5vYmplY3ROYW1lO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gaXNUcmVlID8gdGhpcy50cmVlVGFibGUuZWwubmF0aXZlRWxlbWVudCA6IHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgdGFibGVFbGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XG4gICAgICAgIGNvbnN0IGhlYWRFbGUgPSB0YWJsZUVsZS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpO1xuICAgICAgICBjb25zdCBib2R5RWxlID0gdGFibGVFbGUucXVlcnlTZWxlY3RvcigndGJvZHknKTtcblxuICAgICAgICAvLyBjb25zdCBhcnJIZWFkRWxlID0gdGhpcy5nZXRBcnJIZWFkQnlIdG1sKGhlYWRFbGUpO1xuICAgICAgICBjb25zdCBhcnJIZWFkRWxlID0gdGhpcy5nZXRBcnJIZWFkQnlIdG1sRm9yUHJpbnQoaGVhZEVsZSk7XG4gICAgICAgIGNvbnN0IGZpcnN0SGVhZCA9IGFyckhlYWRFbGUuYWxsQ29sO1xuICAgICAgICBjb25zdCBhcnJSb3dEYXRhID0gdGhpcy5nZXRBcnJSb3dEYXRhQnlIdG1sKGJvZHlFbGUsIGZpcnN0SGVhZCk7XG5cbiAgICAgICAgLy8gY29uc3Qgc3RySGVhZEVsZSA9IHRoaXMuaGVhZEh0bWxUb1N0cmluZyhhcnJIZWFkRWxlKTtcbiAgICAgICAgY29uc3Qgc3RySGVhZEVsZSA9IHRoaXMuaGVhZEh0bWxUb1N0cmluZ05ldyhhcnJIZWFkRWxlLmhlYWRlcik7XG4gICAgICAgIGNvbnN0IHN0ckJvZHlFbGUgPSB0aGlzLnJvd0RhdGFIdG1sVG9TdHJpbmcoYXJyUm93RGF0YSk7XG4gICAgICAgIGNvbnN0IGNzcyA9ICc8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+dGFibGUgdGgsIHRhYmxlIHRkIHtib3JkZXI6MXB4IHNvbGlkICMwMDA7fSB0YWJsZSB0aCB7dGV4dC1hbGlnbjogY2VudGVyO30gdGFibGUge3dpZHRoOiAxMDAlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7fSB0YWJsZSB0ZDpmaXJzdC1jaGlsZCB7dGV4dC1hbGlnbjogY2VudGVyO308L3N0eWxlPic7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gYCR7Y3NzfTx0YWJsZT4ke3N0ckhlYWRFbGV9JHtzdHJCb2R5RWxlfTwvdGFibGU+YDtcbiAgICAgICAgdGhpcy5fcHJpbnRTZXJ2aWNlLnByaW50SHRtbENvbnRlbnQodGFibGUsIGhlYWRlci50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnRCeVJlYWRpbmdIdG1sSGFzUm93U3Bhbihpc1RyZWUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBoZWFkZXIgPSAnRGFuaCBzw6FjaCAnICsgdGhpcy5zZXR0aW5nLm9iamVjdE5hbWU7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpc1RyZWUgPyB0aGlzLnRyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50IDogdGhpcy50YWJsZS5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0YWJsZUVsZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICAgICAgY29uc3QgaGVhZEVsZSA9IHRhYmxlRWxlLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJyk7XG4gICAgICAgIGNvbnN0IGJvZHlFbGUgPSB0YWJsZUVsZS5xdWVyeVNlbGVjdG9yKCd0Ym9keScpO1xuXG4gICAgICAgIC8vIGNvbnN0IGFyckhlYWRFbGUgPSB0aGlzLmdldEFyckhlYWRCeUh0bWwoaGVhZEVsZSk7XG4gICAgICAgIGNvbnN0IGFyckhlYWRFbGUgPSB0aGlzLmdldEFyckhlYWRCeUh0bWxGb3JQcmludChoZWFkRWxlKTtcbiAgICAgICAgY29uc3QgZmlyc3RIZWFkID0gYXJySGVhZEVsZS5hbGxDb2w7XG4gICAgICAgIGNvbnN0IGFyclJvd0RhdGEgPSB0aGlzLmdldEFyclJvd0RhdGFIYXNSb3dTcGFuQnlIdG1sKGJvZHlFbGUsIGZpcnN0SGVhZCk7XG5cbiAgICAgICAgLy8gY29uc3Qgc3RySGVhZEVsZSA9IHRoaXMuaGVhZEh0bWxUb1N0cmluZyhhcnJIZWFkRWxlKTtcbiAgICAgICAgY29uc3Qgc3RySGVhZEVsZSA9IHRoaXMuaGVhZEh0bWxUb1N0cmluZ05ldyhhcnJIZWFkRWxlKTtcbiAgICAgICAgY29uc3Qgc3RyQm9keUVsZSA9IHRoaXMucm93RGF0YUh0bWxIYXNSb3dTcGFuVG9TdHJpbmcoYXJyUm93RGF0YSk7XG4gICAgICAgIGNvbnN0IGNzcyA9ICc8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+dGFibGUgdGgsIHRhYmxlIHRkIHtib3JkZXI6MXB4IHNvbGlkICMwMDA7fSB0YWJsZSB0aCB7dGV4dC1hbGlnbjogY2VudGVyO30gdGFibGUge3dpZHRoOiAxMDAlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7fSB0YWJsZSB0ZDpmaXJzdC1jaGlsZCB7dGV4dC1hbGlnbjogY2VudGVyO308L3N0eWxlPic7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gYCR7Y3NzfTx0YWJsZT4ke3N0ckhlYWRFbGV9JHtzdHJCb2R5RWxlfTwvdGFibGU+YDtcbiAgICAgICAgdGhpcy5fcHJpbnRTZXJ2aWNlLnByaW50SHRtbENvbnRlbnQodGFibGUsIGhlYWRlci50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwb3J0QWxsKGlzVHJlZSA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuZXhwb3J0QnlSZWFkaW5nSHRtbCh0cnVlLCBpc1RyZWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRCeVJlYWRpbmdIdG1sKGV4cG9ydEFsbCA9IGZhbHNlLCBpc1RyZWUgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5fZ3JvdXBGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDaMawYSBo4buXIHRy4bujIHh14bqldCBjw7MgbmjDs20gZOG7ryBsaeG7h3UhJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50ID0gaXNUcmVlID8gdGhpcy50cmVlVGFibGUuZWwubmF0aXZlRWxlbWVudCA6IHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgdGFibGVFbGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XG4gICAgICAgIGNvbnN0IGhlYWRFbGUgPSB0YWJsZUVsZS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpO1xuICAgICAgICBjb25zdCBib2R5RWxlID0gdGFibGVFbGUucXVlcnlTZWxlY3RvcigndGJvZHknKTtcblxuICAgICAgICAvLyBoZWFkZXIuXG4gICAgICAgIC8vIGNvbnN0IGFyckhlYWQgPSB0aGlzLmdldEFyckhlYWRCeUh0bWwoaGVhZEVsZSk7XG4gICAgICAgIGxldCBhcnJIZWFkID0gdGhpcy5nZXRBcnJIZWFkQnlIdG1sTmV3KGhlYWRFbGUpO1xuICAgICAgICBpZiAoIWFyckhlYWQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYm9keS5cbiAgICAgICAgY29uc3QgZmlyc3RIZWFkID0gYXJySGVhZFswXTtcbiAgICAgICAgLy8gY29uc3QgYXJyUm93RGF0YSA9IHRoaXMuZ2V0QXJyUm93RGF0YUJ5SHRtbChib2R5RWxlLCBhcnJIZWFkLCBleHBvcnRBbGwpO1xuICAgICAgICBjb25zdCBhcnJSb3dEYXRhQWxsID0gdGhpcy5nZXRBcnJSb3dEYXRhSGFzUm93U3BhbkJ5SHRtbChib2R5RWxlLCBmaXJzdEhlYWQsIGV4cG9ydEFsbCk7XG4gICAgICAgIGNvbnN0IGFyclJvd0RhdGEgPSB0aGlzLmdldEFyclJvd0RhdGFIYXNSb3dTcGFuQnlSYXdEYXRhKGFyclJvd0RhdGFBbGwpO1xuXG4gICAgICAgIC8vIGV4cG9ydC5cbiAgICAgICAgYXJySGVhZCA9IGFyckhlYWQubWFwKHggPT4geC5tYXAoeiA9PiB6LnZhbHVlKSk7XG4gICAgICAgIC8vIGNvbnN0IGRhdGFFeHBvcnQgPSBbYXJySGVhZC5tYXAoaSA9PiBpLnZhbHVlKSwgLi4uYXJyUm93RGF0YV07XG4gICAgICAgIGNvbnN0IGRhdGFFeHBvcnQgPSBbLi4uYXJySGVhZCwgLi4uYXJyUm93RGF0YV07XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gYERhbmggc8OhY2ggJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xuICAgICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlLm9iamVjdFRvRXhjZWwoZGF0YUV4cG9ydCwgZmlsZU5hbWUsIGFyckhlYWQ/Lmxlbmd0aCA/PyAxKTtcbiAgICB9XG5cbiAgICBnZXRBcnJSb3dEYXRhSGFzUm93U3BhbkJ5UmF3RGF0YShyYXdEYXRhOiBhbnlbXSA9IFtdKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gW107XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCByYXdEYXRhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdEYXRhW2luZGV4XS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmF3RGF0YVtpbmRleF1baV0ucm93U3BhbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRbaW5kZXggKyBqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRbaW5kZXggKyBqXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFZhbHVlUm93KHRyYW5zZm9ybWVkW2luZGV4XSwgaSwgcmF3RGF0YVtpbmRleF1baV0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRbaW5kZXggKyBqXVtpXSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZC5tYXAocm93ID0+IHJvdy5tYXAoY2VsbCA9PiBjZWxsIHx8ICcnKSk7XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVSb3cocm93RGF0YSwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICAgIGlmIChyb3dEYXRhW2luZGV4XSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmdldFZhbHVlUm93KHJvd0RhdGEsIGluZGV4ICsgMSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcm93RGF0YVtpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoZWFkSHRtbFRvU3RyaW5nKGFyckhlYWRFbGUpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBhcnJIZWFkRWxlLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICByZXN1bHQgKz0gYDx0aD4ke2VsZW1lbnQudmFsdWV9PC90aD5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGVhZEh0bWxUb1N0cmluZ05ldyhhcnJIZWFkRWxlKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBpdGVtSGVhZGVyIG9mIGFyckhlYWRFbGUpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnPHRyPic7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW1UaCBvZiBpdGVtSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGA8dGggY29sU3Bhbj1cIiR7aXRlbVRoLmNvbFNwYW59XCIgcm93U3Bhbj1cIiR7aXRlbVRoLnJvd1NwYW59XCI+JHtpdGVtVGgudmFsdWV9PC90aD5gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ICs9ICc8L3RyPic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RGF0YUh0bWxUb1N0cmluZyhyb3dEYXRhcykge1xuICAgICAgICBjb25zdCBhcnJSb3dEYXRhID0gW107XG4gICAgICAgIHJvd0RhdGFzLmZvckVhY2goKGFyclJvd0RhdGFDaGlsZCwgaW5kZXhDaGlsZCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJvd0RhdGEgPSAnPHRyPic7XG4gICAgICAgICAgICBhcnJSb3dEYXRhQ2hpbGQuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gMCAmJiAhdGhpcy5zZXR0aW5nLmhpZGRlbk9yZGVyQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGEgKz0gYDx0ZD4ke2luZGV4Q2hpbGQgKyAxfTwvdGQ+YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGEgKz0gYDx0ZD4ke2VsZW1lbnR9PC90ZD5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcm93RGF0YSArPSAnPC90cj4nO1xuICAgICAgICAgICAgYXJyUm93RGF0YS5wdXNoKHJvd0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFyclJvd0RhdGEuam9pbignICcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBcnJIZWFkQnlIdG1sKGhlYWRlcikge1xuICAgICAgICBjb25zdCBmaXJzdFJvdyA9IGhlYWRlci5xdWVyeVNlbGVjdG9yKCd0cicpO1xuICAgICAgICBpZiAoIWZpcnN0Um93KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcnJUaCA9IGZpcnN0Um93LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoJyk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCA/IDAgOiAxO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IGFyclRoLmxlbmd0aCAtICh0aGlzLnNldHRpbmcuaGlkZGVuRnVuY3Rpb25Db2x1bW4gPyAwIDogMSkgLSAxO1xuICAgICAgICBpZiAoc3RhcnRJbmRleCA+IGVuZEluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyckhlYWRlciA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYXJyVGhbaV0uaW5uZXJUZXh0KSB7XG4gICAgICAgICAgICAgICAgYXJySGVhZGVyLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFyclRoW2ldLmlubmVyVGV4dFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyckhlYWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXJySGVhZEJ5SHRtbE5ldyhoZWFkZXIpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gQXJyYXkucHJvdG90eXBlLmZpbHRlcjtcbiAgICAgICAgY29uc3QgYWxsUm93ID0gaGVhZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJyk7XG4gICAgICAgIGNvbnN0IGxzdFJvdyA9IGZpbHRlci5jYWxsKGFsbFJvdywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiAhbm9kZS5jbGFzc05hbWUuaW5jbHVkZXMoJ2ZpbHRlci1yb3cnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBjb25zdCBhbGxUaCA9IFtdO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsc3RSb3cpIHtcbiAgICAgICAgICAgIGFsbFRoLnB1c2goaXRlbS5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhDb2xTaXplID0gYWxsVGgucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdBcnIgPSBbLi4uYl07XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXdBcnIucmVkdWNlKCh4LCB5KSA9PiB5LmNvbFNwYW4gKyB4LCAwKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPiBhID8gcmVzdWx0IDogYTtcbiAgICAgICAgfSwgMCk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gbWF4Q29sU2l6ZSAtICh0aGlzLnNldHRpbmcuaGlkZGVuRnVuY3Rpb25Db2x1bW4gPyAxIDogMik7XG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGxzdFJvdy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICBjb25zdCBhcnJUaCA9IFsuLi5hbGxUaFtpbmRdXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBhcnJUaFswXS5jbGFzc05hbWUuaW5jbHVkZXMoJ2Noa2JveCcpID8gMSA6IDA7XG4gICAgICAgICAgICBpZiAoc3RhcnRJbmRleCA+IGVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdFtpbmRdID0gcmVzdWx0W2luZF0gPz8gW107XG4gICAgICAgICAgICBsZXQgY29sSW5kZXggPSByZXN1bHRbaW5kXS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBudW1PZkNvbFNwYW4gPSBhcnJUaC5yZWR1Y2UoKHgsIHkpID0+IHggKyB5LmNvbFNwYW4gLSAxLCAwKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDw9IGVuZEluZGV4IC0gbnVtT2ZDb2xTcGFuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyVGhbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyclRoW2ldLnJvd1NwYW4gJiYgYXJyVGhbaV0ucm93U3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgYXJyVGhbaV0ucm93U3BhbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2luZCArIGpdID0gcmVzdWx0W2luZCArIGpdID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbaW5kICsgal1bY29sSW5kZXhdID09IG51bGwgfHwgcmVzdWx0W2luZCArIGpdW2NvbEluZGV4XSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2luZCArIGpdW2NvbEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJUaFtpXS5jb2xTcGFuICYmIGFyclRoW2ldLmNvbFNwYW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFyclRoW2ldLmNvbFNwYW47IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRbaW5kXVtjb2xJbmRleF0gPT0gbnVsbCB8fCByZXN1bHRbaW5kXVtjb2xJbmRleF0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpbmRdW2NvbEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjb2xJbmRleCArIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaiA9PSAwID8gYXJyVGhbaV0uaW5uZXJUZXh0IDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gaW5kICsgMTsgayA8IGxzdFJvdy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvdGhlclJvdyA9IFsuLi5hbGxUaFtrXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpbmQgKyBrXSA9IHJlc3VsdFtpbmQgKyBrXSA/PyBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRbaW5kICsga11bY29sSW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbaW5kICsga11bY29sSW5kZXhdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjb2xJbmRleCArIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG90aGVyUm93W2pdLmlubmVyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpbmRdW2NvbEluZGV4XSA9PSBudWxsIHx8IHJlc3VsdFtpbmRdW2NvbEluZGV4XSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbaW5kXVtjb2xJbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjb2xJbmRleCArIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhcnJUaFtpXS5pbm5lclRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtpbmRdW2NvbEluZGV4XSA9PSBudWxsIHx8IHJlc3VsdFtpbmRdW2NvbEluZGV4XSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtpbmRdW2NvbEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogY29sSW5kZXggKyBzdGFydEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXJySGVhZEJ5SHRtbEZvclByaW50KGhlYWRlcikge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyO1xuICAgICAgICBjb25zdCBhbGxSb3cgPSBoZWFkZXIucXVlcnlTZWxlY3RvckFsbCgndHInKTtcbiAgICAgICAgY29uc3QgbHN0Um93ID0gWy4uLmZpbHRlci5jYWxsKGFsbFJvdywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiAhbm9kZS5jbGFzc05hbWUuaW5jbHVkZXMoJ2ZpbHRlci1yb3cnKTtcbiAgICAgICAgfSldO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICBhbGxDb2w6IFtdLFxuICAgICAgICAgICAgaGVhZGVyOiBbXVxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGxzdFJvdy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICBjb25zdCBsc3RDZWxsID0gWy4uLmxzdFJvd1tpbmRdLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoJyldO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCB8fCBpbmQgIT0gMCA/IDAgOiAxO1xuICAgICAgICAgICAgbGV0IGNvbEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1IZWFkZXIgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gbHN0Q2VsbC5sZW5ndGggLSAodGhpcy5zZXR0aW5nLmhpZGRlbkZ1bmN0aW9uQ29sdW1uIHx8IGluZCAhPSAwID8gMSA6IDIpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobHN0Q2VsbFtpXS5jb2xTcGFuICYmIGxzdENlbGxbaV0uY29sU3BhbiA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbHN0Q2VsbFtpXS5jb2xTcGFuOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWxsQ29sLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogY29sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWxsQ29sLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjb2xJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJydcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtSGVhZGVyLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGxzdENlbGxbaV0uaW5uZXJUZXh0LFxuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiBsc3RDZWxsW2ldLmNvbFNwYW4sXG4gICAgICAgICAgICAgICAgICAgIHJvd1NwYW46IGxzdENlbGxbaV0ucm93U3BhblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmhlYWRlci5wdXNoKGl0ZW1IZWFkZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXJyUm93RGF0YUhhc1Jvd1NwYW5CeUh0bWwoYm9keUVsZSwgYXJySGVhZCwgZXhwb3J0QWxsID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgYXJyUm93ID0gZXhwb3J0QWxsID8gYm9keUVsZS5xdWVyeVNlbGVjdG9yQWxsKCd0cicpIDogYm9keUVsZS5xdWVyeVNlbGVjdG9yQWxsKCd0ci51aS1zdGF0ZS1oaWdobGlnaHQnKTtcbiAgICAgICAgaWYgKCFhcnJSb3cubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcnJSb3dEYXRhID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJSb3cubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IGFyclJvd1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGFyclRkID0gcm93LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICAgICAgICBhcnJSb3dEYXRhLnB1c2goWy4uLmFyclRkXS5maWx0ZXIoeCA9PiAheC5jbGFzc05hbWUuaW5jbHVkZXMoJ2Noa2JveCBsaW5rLW9yLWFjdGlvbiBjZWxsLWNoZWNrYm94JykpLm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB4LmlubmVyVGV4dDtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUNoZWNrYm94Rm9ybWF0KHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZSwgcm93U3BhbjogeC5yb3dTcGFuIH07XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyUm93RGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RGF0YUh0bWxIYXNSb3dTcGFuVG9TdHJpbmcocm93RGF0YXMpIHtcbiAgICAgICAgY29uc3QgYXJyUm93RGF0YSA9IFtdO1xuICAgICAgICByb3dEYXRhcy5mb3JFYWNoKGFyclJvd0RhdGFDaGlsZCA9PiB7XG4gICAgICAgICAgICBsZXQgcm93RGF0YSA9ICc8dHI+JztcbiAgICAgICAgICAgIGFyclJvd0RhdGFDaGlsZC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIHJvd0RhdGEgKz0gYDx0ZCByb3dTcGFuPVwiJHtlbGVtZW50LnJvd1NwYW59XCI+JHtlbGVtZW50LnZhbHVlfTwvdGQ+YDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcm93RGF0YSArPSAnPC90cj4nO1xuICAgICAgICAgICAgYXJyUm93RGF0YS5wdXNoKHJvd0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFyclJvd0RhdGEuam9pbignICcpO1xuICAgIH1cblxuXG4gICAgcHVibGljIGdldEFyclJvd0RhdGFCeUh0bWwoYm9keUVsZSwgYXJySGVhZCwgZXhwb3J0QWxsID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgYXJyUm93ID0gZXhwb3J0QWxsID8gYm9keUVsZS5xdWVyeVNlbGVjdG9yQWxsKCd0cicpIDogYm9keUVsZS5xdWVyeVNlbGVjdG9yQWxsKCd0ci51aS1zdGF0ZS1oaWdobGlnaHQnKTtcbiAgICAgICAgaWYgKCFhcnJSb3cubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcnJSb3dEYXRhID0gW107XG5cbiAgICAgICAgLy8gZm9yIChjb25zdCBlbGVtZW50IG9mIGFyclJvdykge1xuICAgICAgICBhcnJSb3cuZm9yRWFjaCgocm93RWxlbWVudCwgaW5kZXhSb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHJvd0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBhcnJUZCA9IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRUZDtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSBbXTtcblxuICAgICAgICAgICAgYXJySGVhZC5mb3JFYWNoKChoZWFkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRUZCA9IGFyclRkW2hlYWQuaW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGQuaW5uZXJUZXh0ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICByb3dEYXRhLnB1c2godGhpcy5nZXRWYWx1ZUNoZWNrYm94Rm9ybWF0KGN1cnJlbnRUZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IDAgJiYgIXRoaXMuc2V0dGluZy5oaWRkZW5PcmRlckNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5wdXNoKGluZGV4Um93ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhLnB1c2goY3VycmVudFRkLmlubmVyVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgYXJyUm93RGF0YS5wdXNoKHJvd0RhdGEpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXJyUm93RGF0YTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUNoZWNrYm94Rm9ybWF0KGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2hlY2tCb3ggPSBkYXRhLnF1ZXJ5U2VsZWN0b3IoJ3AtY2hlY2tib3gnKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBkYXRhLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XG4gICAgICAgIGlmIChjaGVja0JveCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4ucGktY2hlY2snKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnQ8OzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnS2jDtG5nJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcHVibGljIHZpZXcocm93RGF0YTogYW55KSB7XG4gICAgICAgIHRoaXMub25WaWV3LmVtaXQocm93RGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGVkaXQocm93RGF0YTogYW55KSB7XG4gICAgICAgIHRoaXMub25FZGl0LmVtaXQocm93RGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZShyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkRlbGV0ZS5lbWl0KHJvd0RhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVNdXRpcGxlKCkge1xuICAgICAgICB0aGlzLm9uRGVsZXRlTXVsdGlwbGUuZW1pdCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpO1xuICAgIH1cblxuICAgIGFzeW5jIHNob3dDb250ZXh0TWVudShldnQsIHJvd0RhdGEpIHtcbiAgICAgICAgdGhpcy5yb3dEYXRhQ3VycmVudCA9IHJvd0RhdGE7XG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMgPSBhd2FpdCB0aGlzLmdldE1lbnVCdXR0b25BdXRob3JpemVkKGF3YWl0IHRoaXMubWVudUJ1dHRvbnMocm93RGF0YSkpO1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5kaXNhYmxlU2hhcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlQnV0dG9uczogTWVudUl0ZW1bXSA9IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnQ2hpYSBz4bq7JywgaWNvbjogJ3BpIHBpLWxpbmsnLCBjb21tYW5kOiB0aGlzLmNyZWF0ZVNoYXJlTGluay5iaW5kKHRoaXMpIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0Rhbmggc8OhY2ggY2hpYSBz4bq7JywgaWNvbjogJ3BpIHBpLWxpc3QnLCBjb21tYW5kOiB0aGlzLnNob3dMaW5rU2hhcmluZy5iaW5kKHRoaXMpIH0sXG4gICAgICAgICAgICAgICAgLy8geyBsYWJlbDogJ0Rhbmggc8OhY2ggbmjDrG4gdGjhuqV5JywgaWNvbjogJ3BpIHBpLWxpc3QnLCBjb21tYW5kOiB0aGlzLnNob3dMaXN0UGVybWlzc2lvbkJ5SXRlbS5iaW5kKHRoaXMpIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkNvbnRleHRzLnB1c2goLi4uc2hhcmVCdXR0b25zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaG93V29ya2Zsb3dBdHRhY2ggPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnX19zaG93V29ya2Zsb3dBdHRhY2gnKTtcbiAgICAgICAgaWYgKHNob3dXb3JrZmxvd0F0dGFjaCA9PSAndHJ1ZScpIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdEYW5oIHPDoWNoIGPDtG5nIHZp4buHYycsIGljb246ICdwaSBwaS1saXN0JywgY29tbWFuZDogdGhpcy5zaG93QXR0YWNoZWRUYXNrLmJpbmQodGhpcylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbkNvbnRleHRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3Nob3dDb250ZXh0TWVudShldnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgY8OzIGjDoG5oIMSR4buZbmcga2jhuqMgZOG7pW5nJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldE1lbnVCdXR0b25BdXRob3JpemVkKG1lbnVCdXR0b25zOiBUbk1lbnVJdGVtW10pIHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXplZEJ1dHRvbnM6IFRuTWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICBjb25zdCBzZXJ2aWNlQ29kZUJ5QmFzZSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAhPSBudWxsID8gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlLnRvVXBwZXJDYXNlKCkgOiAnJztcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1lbnVCdXR0b25zKSB7XG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gdGhpcy5sc3RCdG5BdXRob3JpemVNZW51LmZpbmQocCA9PiBwLnJhd1RleHQgPT0gaXRlbS5sYWJlbCk7XG4gICAgICAgICAgICBpZiAoIWl0ZW0uYXV0aG9yaXphdGlvblBlcm1pc3Npb24gJiYgIXBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgICAgICBhdXRob3JpemVkQnV0dG9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvZGUgPSBpdGVtLmF1dGhvcml6YXRpb25TZXJ2aWNlQ29kZSA/IGl0ZW0uYXV0aG9yaXphdGlvblNlcnZpY2VDb2RlIDogc2VydmljZUNvZGVCeUJhc2U7XG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uQ29kZSA9IHBlcm1pc3Npb24gPyBwZXJtaXNzaW9uLnBlcm1pc3Npb25Db2RlIDogaXRlbS5hdXRob3JpemF0aW9uUGVybWlzc2lvbjtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5fcGVybWlzc2lvblNlcnZpY2UuaXNBdXRob3JpemVkKHNlcnZpY2VDb2RlLCBwZXJtaXNzaW9uQ29kZSwgdHJ1ZSkudGhlbihhdXRob3JpemVkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml6ZWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhdXRob3JpemVkQnV0dG9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICByZXR1cm4gYXV0aG9yaXplZEJ1dHRvbnM7XG4gICAgfVxuXG5cbiAgICBoYW5kbGVDaGVja0FsbF9Hcm91cCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tlZEFsbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gWy4uLnRoaXMuX3Jhd0RhdGFTb3VyY2VdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0TGFzdEl0ZW1TZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLl9yYXdEYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLl9jaGVja2VkID0gdGhpcy5jaGVja2VkQWxsO1xuICAgICAgICAgICAgdGhpcy5yb3dHcm91cENoZWNrZWRbaXRlbVt0aGlzLl9ncm91cEZpZWxkXV0gPSB0aGlzLmNoZWNrZWRBbGw7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uQ2hlY2tBbGwuZW1pdCh0aGlzLmNoZWNrZWRBbGwpO1xuICAgIH07XG5cbiAgICBoYW5kbGVDaGVja1Jvd0dyb3VwID0gKHJvd0RhdGEpID0+IHtcbiAgICAgICAgY29uc3QgZ3JvdXBDaGVja2VkID0gdGhpcy5yb3dHcm91cENoZWNrZWRbcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXV0gPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3Jhd0RhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yYXdEYXRhU291cmNlW2ldW3RoaXMuX2dyb3VwRmllbGRdID09IHJvd0RhdGFbdGhpcy5fZ3JvdXBGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yYXdEYXRhU291cmNlW2ldLl9jaGVja2VkID0gZ3JvdXBDaGVja2VkO1xuICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZvdW5kKSBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3Jhd0RhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yYXdEYXRhU291cmNlW2ldLl9jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5fcmF3RGF0YVNvdXJjZVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRMYXN0SXRlbVNlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ2hlY2tlZEFsbCgpO1xuICAgIH07XG5cbiAgICBoYW5kbGVDaGVja1Jvd0RhdGFfR3JvdXAgPSAocm93RGF0YSwgdHJFbGVtZW50ID0gbnVsbCwgZmlyZUV2ZW50ID0gdHJ1ZSkgPT4ge1xuICAgICAgICBpZiAoIXJvd0RhdGEuX2NoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucm93R3JvdXBDaGVja2VkW3Jvd0RhdGFbdGhpcy5fZ3JvdXBGaWVsZF1dID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjaGVja0dyb3VwID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5wdXNoKHJvd0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW0gPSByb3dEYXRhO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9yYXdEYXRhU291cmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9yYXdEYXRhU291cmNlW2ldLl9jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yYXdEYXRhU291cmNlW2ldW3RoaXMuX2dyb3VwRmllbGRdID09IHJvd0RhdGFbdGhpcy5fZ3JvdXBGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrR3JvdXAgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucm93R3JvdXBDaGVja2VkW3Jvd0RhdGFbdGhpcy5fZ3JvdXBGaWVsZF1dID0gY2hlY2tHcm91cDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldExhc3RJdGVtU2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2VkQWxsKCk7XG4gICAgICAgIGlmIChmaXJlRXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghdHJFbGVtZW50KSB0ckVsZW1lbnQgPSB0aGlzLmdldFRyQnlSb3dEYXRhKHJvd0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5fZW1pdFJvd1NlbGVjdCh0ckVsZW1lbnQsIHJvd0RhdGEpO1xuICAgICAgICB9XG4gICAgfTtcblxuXG4gICAgaGFuZGxlQ2hlY2tBbGwgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWRBbGwgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLl9yYXdEYXRhU291cmNlXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0TGFzdEl0ZW1TZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLl9yYXdEYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLl9jaGVja2VkID0gdGhpcy5jaGVja2VkQWxsID09PSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbkNoZWNrQWxsLmVtaXQodGhpcy5jaGVja2VkQWxsKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlQ2hlY2tSb3dEYXRhID0gKHJvd0RhdGEsIHRyRWxlbWVudCA9IG51bGwsIGZpcmVFdmVudCA9IHRydWUpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMuaXNUcmVlVGFibGUgPyB0aGlzLm1vZGVsLmRhdGFTb3VyY2UubWFwKGl0ZW0gPT4gaXRlbS5kYXRhKSA6IHRoaXMubW9kZWwuZGF0YVNvdXJjZTtcbiAgICAgICAgY29uc3QgaW5kZXhIYXNSb3dTcGFuID0gdGhpcy5fY29tbW9uU2VydmljZS5maW5kTGFzdEluZGV4KGRhdGFTb3VyY2UsICh4LCBpKSA9PiBPYmplY3QudmFsdWVzKHgucm93U3BhbikubGVuZ3RoID4gMCAmJiBpIDw9IHJvd0RhdGEuX2luZGV4SW5EYXRhU291cmNlKTtcbiAgICAgICAgaWYgKCFyb3dEYXRhLl9jaGVja2VkKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbSA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBpbmRleEhhc1Jvd1NwYW5VbkNoZWNrZWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmZpbmRMYXN0SW5kZXgodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLCAoeCwgaSkgPT4gT2JqZWN0LnZhbHVlcyh4LnJvd1NwYW4pLmxlbmd0aCA+IDAgJiYgaSA8PSByb3dEYXRhLl9pbmRleEluRGF0YVNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoaW5kZXhIYXNSb3dTcGFuVW5DaGVja2VkID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dTcGFuID0gT2JqZWN0LnZhbHVlcyh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXNbaW5kZXhIYXNSb3dTcGFuVW5DaGVja2VkXS5yb3dTcGFuKTtcbiAgICAgICAgICAgICAgICBpZiAocm93U3Bhbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFJvd1NwYW46IGFueSA9IHJvd1NwYW4ucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhY2N1bXVsYXRvciA+IGVsZW1lbnQpID8gYWNjdW11bGF0b3IgOiBlbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuZmluZEluZGV4KHAgPT4gcC5pZCA9PSByb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBpbmRleEhhc1Jvd1NwYW47IGkgPCBtYXhSb3dTcGFuICsgaW5kZXhIYXNSb3dTcGFuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2VbaV0uX2NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXhIYXNSb3dTcGFuVW5DaGVja2VkLCBtYXhSb3dTcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmZpbmRJbmRleChwID0+IHAuaWQgPT0gcm93RGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFyb3dEYXRhLmhpZGRlbkNoZWNrQm94KSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4SGFzUm93U3BhbiA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd1NwYW4gPSBPYmplY3QudmFsdWVzKHRoaXMubW9kZWwuZGF0YVNvdXJjZVtpbmRleEhhc1Jvd1NwYW5dLnJvd1NwYW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocm93U3Bhbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhSb3dTcGFuOiBhbnkgPSByb3dTcGFuLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGFjY3VtdWxhdG9yID4gZWxlbWVudCkgPyBhY2N1bXVsYXRvciA6IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3dEYXRhLl9pbmRleEluRGF0YVNvdXJjZSA8IG1heFJvd1NwYW4gKyBpbmRleEhhc1Jvd1NwYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gaW5kZXhIYXNSb3dTcGFuOyBpIDwgbWF4Um93U3BhbiArIGluZGV4SGFzUm93U3BhbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZVtpXS5fY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlW3Jvd0RhdGEuX2luZGV4SW5EYXRhU291cmNlXS5fY2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuY29uY2F0KHRoaXMubW9kZWwuZGF0YVNvdXJjZS5zbGljZShpbmRleEhhc1Jvd1NwYW4sIGluZGV4SGFzUm93U3BhbiArIG1heFJvd1NwYW4pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtID0gdGhpcy5tb2RlbC5kYXRhU291cmNlLnNsaWNlKGluZGV4SGFzUm93U3BhbiwgaW5kZXhIYXNSb3dTcGFuICsgbWF4Um93U3Bhbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcm93RGF0YS5oaWRkZW5DaGVja0JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnB1c2gocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbSA9IHJvd0RhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldExhc3RJdGVtU2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2VkQWxsKCk7XG4gICAgICAgIGlmICghdHJFbGVtZW50KSB7XG4gICAgICAgICAgICB0ckVsZW1lbnQgPSB0aGlzLmdldFRyQnlSb3dEYXRhKHJvd0RhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaXJlRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSb3dTZWxlY3QodHJFbGVtZW50LCByb3dEYXRhKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNoZWNrZWRBbGwoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09IHRoaXMuX3Jhd0RhdGFTb3VyY2UubGVuZ3RoICYmIHRoaXMuX3Jhd0RhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdFJvdyhkYXRhczogYW55W10gPSBbXSkge1xuICAgICAgICBpZiAoIWRhdGFzIHx8IGRhdGFzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCkge1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBkYXRhc1tkYXRhcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGxhc3RJdGVtLl9jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGFfR3JvdXAobGFzdEl0ZW0sIHRoaXMuZ2V0VHJCeVJvd0RhdGEobGFzdEl0ZW0pLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhKGxhc3RJdGVtLCB0aGlzLmdldFRyQnlSb3dEYXRhKGxhc3RJdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhcy5mb3JFYWNoKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGEuX2NoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhX0dyb3VwKGRhdGEsIHRoaXMuZ2V0VHJCeVJvd0RhdGEoZGF0YSksIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGEoZGF0YSwgdGhpcy5nZXRUckJ5Um93RGF0YShkYXRhKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Tb3J0KGV2ZW50OiBhbnksIF90YWJsZTogVGFibGUpIHtcbiAgICAgICAgdGhpcy5zb3J0V2l0aEFwaShldmVudCwgX3RhYmxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRXaXRoQXBpKGV2ZW50OiBhbnksIF90YWJsZTogVGFibGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIF90YWJsZS5yZXNldCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc29ydEhpc3RvcnkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSBldmVudC5maWVsZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RGlyID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc29ydEhpc3RvcnlbMF0uZmllbGQgPT0gZXZlbnQuZmllbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSBldmVudC5maWVsZDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc29ydERpciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RGlyID0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NvcnREaXIgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnREaXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydERpciA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQuZmllbGQgIT0gdGhpcy5zb3J0SGlzdG9yeVswXS5maWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRGaWVsZCA9IGV2ZW50LmZpZWxkO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnREaXIgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgICAgICB0aGlzLnNvcnRIaXN0b3J5LnVuc2hpZnQoeyBmaWVsZDogdGhpcy5fc29ydEZpZWxkLCBkaXI6IHRoaXMuX3NvcnREaXIgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcHJvY2Vzc0RhdGFTb3VyY2UoZGF0YVNvdXJjZSkge1xuICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xuICAgICAgICB0aGlzLnJvd0dyb3VwQ2hlY2tlZCA9IHt9O1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIHJldHVybjtcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICBpZiAoc291cmNlLmlkID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5pZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3MgPSB7fTtcbiAgICAgICAgICAgIGlmICghc291cmNlLmNvbFNwYW4pIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UuY29sU3BhbiA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzb3VyY2Uucm93U3Bhbikge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5yb3dTcGFuID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNvdXJjZS5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UuaGlkZGVuID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc291cmNlLmlzTmV3KSB7XG4gICAgICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3MuaXNOZXcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZS5pc0V4cGlyaW5nKSB7XG4gICAgICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3MuZXhwaXJpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZS5jbGFzcykge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5jbGFzcy5zcGxpdCgnICcpLmZpbHRlcihwID0+IHApLmZvckVhY2goY2xzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3NbY2xzXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNvdXJjZS5fX2V4cGFuZCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5fX2V4cGFuZCA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc291cmNlLmJvb2ttYXJrU3R5bGUgPSB0aGlzLmdldEJvb2ttYXJrQ29sb3Ioc291cmNlLCB0aGlzLnNldHRpbmcuY29scyk7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZEhhc01heGltdW1MZW5ndGggJiYgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bUxlbmd0aC5mb3JFYWNoKF9jb2wgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IDxDb2x1bW5TY2hlbWFCYXNlPl9jb2w7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBzb3VyY2VbY29sLmZpZWxkXTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuc3Vic3RyaW5nICYmIHZhbHVlLmxlbmd0aCA+IGNvbC5tYXhMZW5ndGhEaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN2OiBzaG9ydCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VbYCR7Y29sLmZpZWxkfV9fc3ZgXSA9IGAke3ZhbHVlLnN1YnN0cmluZygwLCBjb2wubWF4TGVuZ3RoRGlzcGxheSl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bVdvcmQgJiYgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bVdvcmQuZm9yRWFjaChfY29sID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSA8Q29sdW1uU2NoZW1hQmFzZT5fY29sO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlU2hvcnRXb3JkID0gdGhpcy5zdWJXb3JkKHNvdXJjZVtjb2wuZmllbGRdLCBjb2wubWF4V29yZERpc3BsYXkpO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZVNob3J0V29yZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzdjogc2hvcnQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgc291cmNlW2Ake2NvbC5maWVsZH1fX3N2YF0gPSBgJHt2YWx1ZVNob3J0V29yZH1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVSb3dHcm91cE1ldGFEYXRhKGRhdGFTb3VyY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdWJXb3JkKHZhbHVlOiBzdHJpbmcsIHdvcmRDb3VudDogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLnRyaW0pIHJldHVybiB2YWx1ZTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gICAgICAgIGxldCBpbmRleCA9IC0xLCBiZWZvcmVDaGFyID0gJ2EnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVbaV0gPT0gJycgJiYgYmVmb3JlQ2hhciAhPSAnJykge1xuICAgICAgICAgICAgICAgIHdvcmRDb3VudC0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYmVmb3JlQ2hhciA9IHZhbHVlW2ldO1xuICAgICAgICAgICAgaWYgKHdvcmRDb3VudCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2hvd0Z1bGwocm93RGF0YSwgZmllbGQpIHtcbiAgICAgICAgcm93RGF0YVtmaWVsZCArICdfX3Nob3dGdWxsJ10gPSAhcm93RGF0YVtmaWVsZCArICdfX3Nob3dGdWxsJ107XG4gICAgfVxuXG4gICAgcHVibGljIG1lcmdlQ2xhc3NPYmooc291cmNlLCBvdGhlck9iaiA9IHt9KSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHNvdXJjZS5vYmpTdHlsZUNsYXNzO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvdGhlck9iaikge1xuICAgICAgICAgICAgb2JqW2tleV0gPSBvdGhlck9ialtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbnRleHRSb3dHcm91cChyb3dEYXRhKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3dEYXRhLFxuICAgICAgICAgICAgcm93R3JvdXBNZXRhZGF0YTogdGhpcy5yb3dHcm91cE1ldGFkYXRhLFxuICAgICAgICAgICAgZ3JvdXBDb2w6IHRoaXMuc2V0dGluZy5ncm91cENvbHVtbixcbiAgICAgICAgICAgIGdyb3VwRmllbGQ6IHRoaXMuX2dyb3VwRmllbGQsXG4gICAgICAgICAgICBncm91cEluQ2xpZW50OiB0aGlzLl9ncm91cEluQ2xpZW50XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbnRleHRSb3dHcm91cFJvb3Qocm93RGF0YSwgZXhwYW5kZWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0Q29udGV4dFJvd0dyb3VwKHJvd0RhdGEpLFxuICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICBoYW5kbGVDaGVja1Jvd0dyb3VwOiB0aGlzLmhhbmRsZUNoZWNrUm93R3JvdXAsXG4gICAgICAgICAgICBnZXRDb2xTcGFuR3JvdXA6IHRoaXMuZ2V0Q29sU3Bhbkdyb3VwLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMudGFibGUsXG4gICAgICAgICAgICBjbGFzc1Jvd0dyb3VwOiB0aGlzLl9jbGFzc1Jvd0dyb3VwLFxuICAgICAgICAgICAgaWNvblRvZ2dsZVJvd0dyb3VwOiB0aGlzLmljb25Ub2dnbGVSb3dHcm91cFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250ZXh0Q2VsbChyb3dEYXRhLCByb3dJbmRleCwgY29sLCBleHBhbmRlZCwgJHRoaXMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNydWRMaXN0OiAkdGhpcyxcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICBleHBhbmRlZCxcbiAgICAgICAgICAgIGljb25Ub2dnbGVSb3dEYXRhOiB0aGlzLmljb25Ub2dnbGVSb3dEYXRhXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldENsYXNzUm93RGF0YU9mR3JvdXAocm93RGF0YSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5TZWxlY3RJdGVtKHJvd0RhdGEpKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyB1aS1zdGF0ZS1oaWdobGlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkICE9PSAnJykge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICcgaXMtY2hpbGQtZ3JvdXAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dEYXRhLmNsYXNzKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyAnICsgcm93RGF0YS5jbGFzcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udGFpblNlbGVjdEl0ZW0oaXRlbSkge1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmZpbmRJbmRleCh4ID0+IHggJiYgeFt0aGlzLnNldHRpbmcuZW50aXR5S2V5XSA9PT0gaXRlbVt0aGlzLnNldHRpbmcuZW50aXR5S2V5XSkgPiAtMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNjcm9sbFRvcCgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxiYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbGJhci5zY3JvbGxUb1RvcCgwLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9Cb3R0b20oKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsYmFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxiYXIuc2Nyb2xsVG9Cb3R0b20oMCwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5leHQoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSArIDE7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvcCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblByZXYoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlID4gMSkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9wKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uT2xkZXN0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlID0gTWF0aC5jZWlsKHRoaXMubW9kZWwudG90YWwgLyB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUpO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25MYXRlc3QoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFbXB0eVRvb2xiYXIoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSBlbGVtZW50LmNoaWxkTm9kZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5pdGVtKGkpO1xuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IDggJiYgbm9kZXMuaXRlbShpKS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5RnVuY3Rpb25CdXR0b25zKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gZWxlbWVudC5jaGlsZE5vZGVzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXMuaXRlbShpKTtcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSA4ICYmIG5vZGVzLml0ZW0oaSkudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmluZFRlbXBsYXRlKHRlbXBsYXRlTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tbW9uU2VydmljZS5maW5kVGVtcGxhdGVGcm9tTGlzdCh0aGlzLmNoaWxkcmVuLCB0ZW1wbGF0ZU5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVbdGVtcGxhdGVOYW1lXSA9IHRoaXMuZmluZFRlbXBsYXRlKHRlbXBsYXRlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVbdGVtcGxhdGVOYW1lXSAhPSBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb21wb25lbnRCeVR5cGUoY29udHJvbFR5cGU6IHN0cmluZykge1xuICAgICAgICBpZiAoY29udHJvbFR5cGUgPT0gJ3RyYW5nVGhhaVY1Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVUcmFuZ1RoYWlWNTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udHJvbFR5cGUgPT0gJ19fdmlld0hpc3RvcnknKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZUNvbFZpZXdIaXN0b3J5O1xuICAgICAgICB9XG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5fY29tbW9uU2VydmljZS5maW5kVGVtcGxhdGVGcm9tTGlzdCh0aGlzLmNoaWxkcmVuLCBjb250cm9sVHlwZSk7XG4gICAgICAgIGlmICghaXRlbSAmJiB0aGlzLnRlbXBsYXRlcykge1xuICAgICAgICAgICAgaXRlbSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZmluZFRlbXBsYXRlRnJvbUxpc3QodGhpcy50ZW1wbGF0ZXMsIGNvbnRyb2xUeXBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVbdGVtcGxhdGVOYW1lXSA9IHRoaXMuZmluZFRlbXBsYXRlKHRlbXBsYXRlTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVbdGVtcGxhdGVOYW1lXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlUm93R3JvdXBNZXRhRGF0YShkYXRhU291cmNlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5yb3dHcm91cE1ldGFkYXRhID0ge307XG4gICAgICAgIGxldCBpbmRleEdyb3VwID0gMDtcbiAgICAgICAgY29uc3QgZ3JvdXBGaWVsZE5hbWU6IHN0cmluZyA9IHRoaXMuX2dyb3VwRmllbGQ7XG4gICAgICAgIC8vIFThuqFvIGLhu6thIDEgZ3JvdXAgdmFsdWUgYmVmb3JlXG4gICAgICAgIGxldCBwcmV2aW91c0dyb3VwVmFsdWUgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcbiAgICAgICAgaWYgKGdyb3VwRmllbGROYW1lICYmIGdyb3VwRmllbGROYW1lICE9ICcnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gZGF0YVNvdXJjZVtpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cFZhbHVlID0gcm93RGF0YVtncm91cEZpZWxkTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwVmFsdWUgIT09IHByZXZpb3VzR3JvdXBWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0dyb3VwTWV0YWRhdGFbZ3JvdXBWYWx1ZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSwgaW5kZXhHcm91cDogaW5kZXhHcm91cCsrLCBzaXplOiAxLCBpdGVtUm9vdDogcm93RGF0YSwgaXRlbXM6IFtyb3dEYXRhXVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5c1tncm91cFZhbHVlXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzR3JvdXBWYWx1ZSA9IGdyb3VwVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtR3JvdXAgPSB0aGlzLnJvd0dyb3VwTWV0YWRhdGFbZ3JvdXBWYWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Hcm91cC5zaXplKys7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Hcm91cC5pdGVtcy5wdXNoKHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByb3dEYXRhW3RoaXMuZmllbGRPcmRlcl0gPSB0aGlzLnJvd0dyb3VwTWV0YWRhdGFbZ3JvdXBWYWx1ZV0uc2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzaG93U2V0dGluZ3MoKSB7XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5ncyA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZUNvbG9yU2V0dGluZ3MoZGF0YSkge1xuICAgICAgICBpZiAoZGF0YS5jb2xvckZpbHRlclRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZUFyciA9IGRhdGEuY29sb3JGaWx0ZXJUYWJsZS5zbGljZSgpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNsb25lQXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNsb25lQXJyW2ldLmZpbHRlclZhbHVlID09ICcnIHx8IGNsb25lQXJyW2ldLmZpbHRlclZhbHVlID09IG51bGwgfHwgY2xvbmVBcnJbaV0uZmlsdGVyVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuY29sb3JGaWx0ZXJUYWJsZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQgPSBkYXRhLmNvbG9yRmlsdGVyRmllbGQ7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlID0gZGF0YS5jb2xvckZpbHRlclRhYmxlO1xuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NSb3dDb2xvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhY2hlQ29sb3JTZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0Q29sb3JTZXR0aW5nKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZVNldHRpbmdzKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscyA9IGV2ZW50LmRldGFpbHM7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQgPSBldmVudC5zb3J0RmllbGQ7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RGlyID0gZXZlbnQuc29ydERpcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCA9IGV2ZW50Lmdyb3VwRmllbGQ7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEluQ2xpZW50ID0gZXZlbnQuZ3JvdXBJbkNsaWVudDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gPSB0aGlzLnNldHRpbmcuY29scy5maW5kKHAgPT4gcC5maWVsZCA9PSBldmVudC5ncm91cEZpZWxkKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5mb3JjZUdldERhdGEgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNhdmVDb2x1bW5TZXR0aW5nKCk7XG4gICAgICAgICAgICB0aGlzLmV4dGVuZENvbHVtbnModGhpcy5zZXR0aW5nLmNvbHMpO1xuICAgICAgICAgICAgdGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDb2x1bW5TZXR0aW5nKCk7XG4gICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EZWxldGVTZXR0aW5ncygpIHtcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzID0gZmFsc2U7XG4gICAgICAgIC8vIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nID0gbmV3IENvbHVtblNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcgPSB0aGlzLnNldHRpbmdEZWZhdWx0Py5jb2x1bW5TZXR0aW5nID8/IG5ldyBDb2x1bW5TZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuZGVsZXRlQ29sdW1uU2V0dGluZygpO1xuICAgICAgICB0aGlzLmV4dGVuZENvbHVtbnModGhpcy5zZXR0aW5nLmNvbHMpO1xuICAgICAgICB0aGlzLmZvcm1hdENvbHVtbnModGhpcy5zZXR0aW5nLmNvbHMpO1xuICAgICAgICB0aGlzLmFwcGx5Q29sdW1uU2V0dGluZygpO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXBwbHlDb2x1bW5TZXR0aW5nKCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uID0gdGhpcy5zZXR0aW5nLmNvbHMuZmluZChwID0+IHAuZmllbGQgPT0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZvcmNlR2V0RGF0YSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ncm91cEZpZWxkID0gdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbi5maWVsZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dyb3VwRmllbGQgPSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ3JvdXBGaWVsZCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9ncm91cEluQ2xpZW50ID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBJbkNsaWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2dyb3VwRmllbGQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc29ydEZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkO1xuICAgICAgICB0aGlzLl9zb3J0RGlyID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydERpcjtcblxuICAgICAgICBpZiAodGhpcy5tb2RlbCAmJiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcgJiYgdGhpcy5fc29ydEZpZWxkKSB7XG4gICAgICAgICAgICB0aGlzLnNvcnRIaXN0b3J5ID0gW3sgZmllbGQ6IHRoaXMuX3NvcnRGaWVsZCwgZGlyOiB0aGlzLl9zb3J0RGlyID8gdGhpcy5fc29ydERpciA6IDAgfV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNvcnRIaXN0b3J5ID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENlbGxDbGFzc0hlYWRlcihjb2wpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBpZiAoY29sLmNlbGxDbGFzcykge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGNvbC5jZWxsQ2xhc3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb2wuc29ydCkge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICcgTm9Tb3J0Q29sdW1uJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sLmZpZWxkID09IHRoaXMuX3NvcnRGaWVsZCkge1xuICAgICAgICAgICAgcmVzdWx0ICs9ICcgcC1zb3J0YWJsZS1jb2x1bW4nO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3NvcnREaXIgIT0gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnIHAtaGlnaGxpZ2h0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5TdHlsZShjb2w6IGFueSwgZm9ySGVhZGVyID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xuICAgICAgICBpZiAoY29sLmZpZWxkID09ICdtZXRhZGF0YVN0YXR1cycpIHtcbiAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnY2VudGVyJztcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmb3JIZWFkZXIpIHtcbiAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnY2VudGVyJztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjb2wudGV4dEFsaWduID09IFRleHRBbGlnbi5MZWZ0KSB7XG4gICAgICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdsZWZ0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbC50ZXh0QWxpZ24gPT0gVGV4dEFsaWduLkNlbnRlcikge1xuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnY2VudGVyJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbC50ZXh0QWxpZ24gPT0gVGV4dEFsaWduLlJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdyaWdodCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmFsaWduQ2VudGVyQ29sdW1uKGNvbCkpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2NlbnRlcic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmFsaWduUmlnaHRDb2x1bW4oY29sKSkge1xuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAncmlnaHQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdsZWZ0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgZ2V0Qm9va21hcmtDb2xvcihyb3dEYXRhLCBjb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IHI6IGFueSA9IHsgZGlzcGxheTogJ25vbmUnIH07XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZCAmJiB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJUYWJsZSkge1xuICAgICAgICAgICAgbGV0IGNvbDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBpbiBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbnNbY10uZmllbGQgPT0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sID0gY29sdW1uc1tjXTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgZm9yRGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGZvck51bWJlciA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IGZvckJvb2wgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGRdO1xuICAgICAgICAgICAgaWYgKGNvbCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuZGF0ZSB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuZGF0ZXRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNvbnZlcnRUb0RhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBmb3JEYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmludCB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuZGVjaW1hbFxuICAgICAgICAgICAgICAgICAgICB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuaW50V2l0aG91dE1hc2sgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yTnVtYmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoL3RydWUvaSkudGVzdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGZvckJvb2wgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2NvbG9yRmlsdGVyVGFibGUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fY29sb3JGaWx0ZXJUYWJsZVtpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wYXJlVHlwZSA9IGl0ZW1bMF07XG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSBpdGVtWzVdO1xuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJWYWx1ZTogYW55ID0gaXRlbVsxXTtcbiAgICAgICAgICAgICAgICBpZiAoZm9yRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IGl0ZW1bMl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZSA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9yTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gaXRlbVszXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGZpbHRlclZhbHVlKSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvckJvb2wpIGZpbHRlclZhbHVlID0gaXRlbVs0XTtcblxuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlVHlwZSA9PSAncmVnZXgnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoZmlsdGVyVmFsdWUsICdpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubWF0Y2gocmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5iYWNrZ3JvdW5kID0gdGhpcy5idWlsZEdyYWRpZW50Q29sb3IoY29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdlcXVhbHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBmaWx0ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgci5iYWNrZ3JvdW5kID0gdGhpcy5idWlsZEdyYWRpZW50Q29sb3IoY29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wYXJlVHlwZSA9PSAnbm90RXF1YWxzJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gZmlsdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ2NvbnRhaW5zJykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChmaWx0ZXJWYWx1ZSwgJ2knKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1hdGNoKHJlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgci5iYWNrZ3JvdW5kID0gdGhpcy5idWlsZEdyYWRpZW50Q29sb3IoY29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wYXJlVHlwZSA9PSAnbm90Q29udGFpbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGZpbHRlclZhbHVlLCAnaScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLm1hdGNoKHJlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgci5iYWNrZ3JvdW5kID0gdGhpcy5idWlsZEdyYWRpZW50Q29sb3IoY29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgci5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wYXJlVHlwZSA9PSAnZ3JlYXRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gZmlsdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ2xpdHRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgZmlsdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb252ZXJ0VG9EYXRlKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ3tub3d9JykgcmV0dXJuIERhdGUoKTtcblxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgneycpICYmIHZhbHVlLmVuZHNXaXRoKCdkfScpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ2R9JywgJycpKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgneycpICYmIHZhbHVlLmVuZHNXaXRoKCdofScpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ2h9JywgJycpKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgKyB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCd7JykgJiYgdmFsdWUuZW5kc1dpdGgoJ219JykpIHtcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnbX0nLCAnJykpO1xuICAgICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMoZGF0ZS5nZXRNaW51dGVzKCkgKyB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCcvJykgPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocGFydHNbMl0gKyAnLScgKyBwYXJ0c1sxXSArICctJyArIHBhcnRzWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFpc05hTihkYXRlLmdldERhdGUoKSkpIHJldHVybiBkYXRlO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcikge1xuICAgICAgICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCg5MGRlZywgJHtjb2xvcn0gMCUsICR7Y29sb3J9NGQgMzUlLCAke2NvbG9yfTFhIDYwJSwgdHJhbnNwYXJlbnQgMTAwJSlgO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWxpZ25DZW50ZXJDb2x1bW4oY29sKSB7XG4gICAgICAgIHJldHVybiBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuZGF0ZXRpbWUgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRhdGUgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmJvb2xlYW4gfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmVudW0gfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLnRpbWVzcGFuO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWxpZ25SaWdodENvbHVtbihjb2wpIHtcbiAgICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5pbnQgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRlY2ltYWwgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmludFdpdGhvdXRNYXNrIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5jdXJyZW5jeTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29sU3Bhbkdyb3VwID0gKG51bU9mQ29sQ3VzdG9tOiBudW1iZXIgPSAwKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIoeCA9PiB4LnZpc2libGUgPT09IG51bGwgfHwgeC52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgeC52aXNpYmxlID09PSB0cnVlKS5sZW5ndGhcbiAgICAgICAgICAgICsgKHRoaXMuc2V0dGluZy5oaWRkZW5PcmRlckNvbHVtbiA/IDAgOiAxKVxuICAgICAgICAgICAgKyAodGhpcy5zZXR0aW5nLmhpZGRlbkZ1bmN0aW9uQ29sdW1uID8gMCA6IDEpXG4gICAgICAgICAgICAtIG51bU9mQ29sQ3VzdG9tO1xuICAgIH07XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVLZXlwcmVzc0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQgJiYgdGhpcy5jb250ZXh0LnJvb3QuZGF0YS5saXN0UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0UXVldWUgPSB0aGlzLmNvbnRleHQucm9vdC5kYXRhLmxpc3RRdWV1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGxpc3RRdWV1ZS5pbmRleE9mKHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RRdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZU11bHRpcGxlRGVsZXRlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlRGVsZXRlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlRWRpdChyb3dEYXRhKSB7XG4gICAgICAgIGlmIChyb3dEYXRhLl9fZGlzYWJsZUVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhpZGRlbkVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dEYXRhWydtZXRhZGF0YVN0YXR1cyddICYmIHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gIT0gJzAnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVEZWxldGUocm93RGF0YSkge1xuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVEZWxldGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhpZGRlbkRlbGV0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gJiYgcm93RGF0YVsnbWV0YWRhdGFTdGF0dXMnXSAhPSAnMCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0hpc3Rvcnkocm93RGF0YSkge1xuICAgICAgICB0aGlzLnNldHRpbmcuc2hvd0hpc3RvcnkgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldHRpbmcuaGlzdG9yeSA9IHJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dMaXN0VmVyc2lvbihyb3dEYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy52ZXJzaW9uTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnZlcnNpb25Nb2RlbC5pdGVtRGF0YSA9IHJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXaWR0aEZ1bmN0aW9uKHRhYmxlKSB7XG4gICAgICAgIGlmICh0aGlzLndpZHRoRnVuY3Rpb25Db2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB3aWR0aEluUGl4ZWwgPSB0aGlzLl9kZWZhdWx0V2l0aEZ1bmN0aW9uQ29sdW1uO1xuICAgICAgICBjb25zdCB0ZCA9IHRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGRbY2xhc3MqPVwiY29sdW1uLWZ1bmN0aW9uXCJdJyk7XG4gICAgICAgIGlmICh0ZCkge1xuICAgICAgICAgICAgY29uc3QgZW1Ub1BpeGNlbCA9IHRoaXMuZ2V0Rm9udFNpemVJblBpeGVsKHRkKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJyk7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGJ1dHRvbnMubGVuZ3RoICogMi40OyAvLyBidXR0b24gd2lkdGg6IDIuNHJlbVxuICAgICAgICAgICAgY29uc3QgdG1wV2lkdGhJblBpeGVsID0gd2lkdGggKiBlbVRvUGl4Y2VsICsgNjsgLy8gNiBsYSB0b25nIHBhZGRpbmcgbGVmdCwgcmlnaHQgY3VhIHRoXG4gICAgICAgICAgICBpZiAod2lkdGhJblBpeGVsIDwgdG1wV2lkdGhJblBpeGVsKSB7XG4gICAgICAgICAgICAgICAgd2lkdGhJblBpeGVsID0gdG1wV2lkdGhJblBpeGVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGggPSB0YWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RoW2NsYXNzKj1cInNldHRpbmctY2VsbFwiXScpO1xuICAgICAgICBpZiAodGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtVG9QaXhjZWwgPSB0aGlzLmdldEZvbnRTaXplSW5QaXhlbCh0aCk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25zID0gdGguZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBidXR0b25zLmxlbmd0aCAqIDIuNCAvIDAuODU7IC8vIGJ1dHRvbiB3aWR0aDogMi40cmVtLCBmb250LXNpemUgdGggMC44NXJlbVxuICAgICAgICAgICAgY29uc3QgdG1wV2lkdGhJblBpeGVsID0gd2lkdGggKiBlbVRvUGl4Y2VsICsgNjsgLy8gNiBsYSB0b25nIHBhZGRpbmcgbGVmdCwgcmlnaHQgY3VhIHRoXG4gICAgICAgICAgICBpZiAod2lkdGhJblBpeGVsIDwgdG1wV2lkdGhJblBpeGVsKSB7XG4gICAgICAgICAgICAgICAgd2lkdGhJblBpeGVsID0gdG1wV2lkdGhJblBpeGVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fd2lkdGhGdW5jdGlvbkNvbHVtbiA9IGAke3dpZHRoSW5QaXhlbH1weGA7XG4gICAgICAgIHRoaXMud2lkdGhGdW5jdGlvbkNvbHVtbkNoYW5nZS5lbWl0KHRoaXMuX3dpZHRoRnVuY3Rpb25Db2x1bW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9udFNpemVJblBpeGVsKGVsKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoZ2V0Q29tcHV0ZWRTdHlsZShlbCwgJycpLmZvbnRTaXplLm1hdGNoKC8oKFxcZHwuKSspcHgvKVsxXSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJvY2Vzc0Jhc2VEYXRhKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnByZVByb2Nlc3NEYXRhKHRoaXMuX3Jhd0RhdGFTb3VyY2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcHJlUHJvY2Vzc0RhdGEoZGF0YVNvdXJjZSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGNvbEhhc1BpcGUgPSB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIoeCA9PiB4LnBpcGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xIYXNQaXBlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKDxQaXBlVHJhbnNmb3JtPmNvbC5waXBlLCBjb2wuYXN5bmNQaXBlLCBpdGVtW2NvbC5maWVsZF0pLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtW2BwaXBlX18ke2NvbC5maWVsZH0gYF0gPSBycztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdHJhbnNmb3JtKHBpcGU6IFBpcGVUcmFuc2Zvcm0sIGFzeW5jUGlwZTogYm9vbGVhbiwgdmFsdWUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy5jYWNoZWRUcmFuc2Zvcm1zW3ZhbHVlXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkVHJhbnNmb3Jtc1t2YWx1ZV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXN5bmNQaXBlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBhd2FpdCBwaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRyYW5zZm9ybXNbdmFsdWVdID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVHJhbnNmb3Jtc1t2YWx1ZV0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZVJvd09yZGVyZWQoZXZ0KSB7XG4gICAgICAgIHRoaXMuc2hvd1NhdmVSZW9yZGVyID0gdGhpcy5maWx0ZXJfY29sdW1uLmxlbmd0aCA9PSAwO1xuICAgICAgICB0aGlzLm9uUmVvcmRlcmVkLmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd1NldHRpbmdSb3dDb2xvcigpIHtcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzUm93Q29sb3IgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZUJ1aWxkRmlsdGVyQ29sdW1uKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlRmlsdGVyID0gW107XG4gICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJDb2x1bW4oY29scyk7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkRmlsdGVyQ29sdW1uKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUZpbHRlciA9IHRoaXMudGVtcGxhdGVGaWx0ZXI7XG4gICAgICAgIGNvbnN0IGZpbHRlck11bGlwbGUgPSBbT3BlcmF0b3IuaW4sIE9wZXJhdG9yLm5vdEluXTtcbiAgICAgICAgY29scy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29sLmNvbnRyb2xUeXBlID09IENvbnRyb2xUeXBlLmRyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbC5iYXNlU2VydmljZSB8fCAoY29sLmRhdGFTb3VyY2UgJiYgY29sLmRhdGFTb3VyY2UubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5nZXRGaWVsZEZpbHRlcihjb2wpLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGNvbC5pc092ZXJyaWRlRmlsdGVyID8gY29sLm9wZXJhdG9yIDogY29sLnNpbmdsZSA/IE9wZXJhdG9yLmVxdWFsIDogT3BlcmF0b3IuaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBcnJheUZpZWxkOiBjb2wuaXNBcnJheUZpZWxkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyU2NoZW1hLmRyb3Bkb3duW2NvbC5maWVsZF0gPSBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvOiAnYm9keScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogYENo4buNbiAke2NvbC5sYWJlbH1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IGZpbHRlck11bGlwbGUuaW5jbHVkZXMoZmlsdGVyLm9wZXJhdG9yKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRPbkluaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlcnZlckxvYWQ6IGNvbC5pc1NlcnZlckxvYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FsbG93RGlzYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBDaMawYSBj4bqldSBow6xuaCBiYXNlU2VydmljZSBob+G6t2MgZGF0YVNvdXJjZSBjaG8gY+G7mXQgJHtjb2wuZmllbGR9OiAke2NvbC5sYWJlbH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sLmlzT3ZlcnJpZGVGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogY29sLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChjb2wuZGF0YVR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmJvb2xlYW46XG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5nZXRGaWVsZEZpbHRlcihjb2wpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBjb2wuc2luZ2xlID8gT3BlcmF0b3IuZXF1YWwgOiBPcGVyYXRvci5pbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWVsZDogY29sLmZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmludDpcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmludFdpdGhvdXRNYXNrOlxuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZGVjaW1hbDpcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmN1cnJlbmN5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sLm9wZXJhdG9yID09PSBPcGVyYXRvci5lcXVhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZ2V0RmllbGRGaWx0ZXIoY29sKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0VmFsdWU6IChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sLm1heCAmJiBpdGVtID4gY29sLm1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2wubWF4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbC5taW4gJiYgaXRlbSA8IGNvbC5taW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sLm1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKC4uLnRoaXMuZ2V0UmFuZ2VGaWx0ZXIoY29sKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kYXRlOlxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXREYXRlUmFuZ2VGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlKSA9PiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlKSA9PiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkgKyAxLCAwLCAwLCAtMSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRhdGV0aW1lOlxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXREYXRlUmFuZ2VGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlKSA9PiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZSkgPT4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0ZVJhbmdlRmlsdGVyKGNvbDogQ29sdW1uU2NoZW1hQmFzZSwgcGFyc2VEYXRlRnJvbTogKGRhdGU6IERhdGUpID0+IERhdGUsIHBhcnNlRGF0ZVRvOiAoZGF0ZTogRGF0ZSkgPT4gRGF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZUZpbHRlcihjb2wsXG4gICAgICAgICAgICBpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSA9PSBudWxsIHx8IGl0ZW1bMF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bMF0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZURhdGVGcm9tKGRhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtID09IG51bGwgfHwgaXRlbVsxXSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoaXRlbVsxXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGF0ZVRvKGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmFuZ2VGaWx0ZXIoY29sOiBDb2x1bW5TY2hlbWFCYXNlLCBmdW5jR2V0VmFsdWVGcm9tOiAoaXRlbSkgPT4gYW55ID0gbnVsbCwgZnVuY0dldFZhbHVlVG86IChpdGVtKSA9PiBhbnkgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5nZXRGaWVsZEZpbHRlcihjb2wpLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsLFxuICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgc3ViRmllbGQ6IDAsXG4gICAgICAgICAgICAgICAgZnVuY0dldFZhbHVlOiBmdW5jR2V0VmFsdWVGcm9tID8gZnVuY0dldFZhbHVlRnJvbSA6IChpdGVtKSA9PiBpdGVtWzBdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5nZXRGaWVsZEZpbHRlcihjb2wpLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5sb3dlclRoYW5FcXVhbCxcbiAgICAgICAgICAgICAgICBzb3VyY2VGaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgIHN1YkZpZWxkOiAxLFxuICAgICAgICAgICAgICAgIGZ1bmNHZXRWYWx1ZTogZnVuY0dldFZhbHVlVG8gPyBmdW5jR2V0VmFsdWVUbyA6IChpdGVtKSA9PiBpdGVtWzFdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpZWxkRmlsdGVyKGNvbDogQ29sdW1uU2NoZW1hQmFzZSkge1xuICAgICAgICByZXR1cm4gY29sLmZpZWxkRmlsdGVyID8/IGNvbC5maWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGV4dEN1c3RvbUZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRJbml0RmlsdGVyKGRlZmF1bHRGaWx0ZXI6IEtleVZhbHVlVHlwZSkge1xuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdEZpbHRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVtrZXldID0gZGVmYXVsdEZpbHRlcltrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcl9jb2x1bW4gPSB0aGlzLl9jcnVkU2VydmljZS5nZXRGaWx0ZXJGcm9tVGVtcGxhdGUodGhpcy50ZW1wbGF0ZUZpbHRlciwgdGhpcy5nZXRNaW5pbWl6ZURhdGEodGhpcy5maWx0ZXJEYXRhKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZVNlYXJjaChjb2w6IENvbHVtblNjaGVtYUJhc2UpIHtcbiAgICAgICAgaWYgKGNvbC5pc092ZXJyaWRlRmlsdGVyICYmIChjb2wub3BlcmF0b3IgPT09IE9wZXJhdG9yLmNvbnRhaW4gfHwgY29sLm9wZXJhdG9yID09PSBPcGVyYXRvci5lcXVhbCkpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblNlYXJjaCA9IChub2RlPykgPT4ge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5sb2FkaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyQm94Rm9jdXMobm9kZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyX2NvbHVtbiA9IHRoaXMuX2NydWRTZXJ2aWNlLmdldEZpbHRlckZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlRmlsdGVyLCB0aGlzLmdldE1pbmltaXplRGF0YSh0aGlzLmZpbHRlckRhdGEpKTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBnZXRNaW5pbWl6ZURhdGEobW9kZWwpIHtcbiAgICAgICAgaWYgKGlzTGl0ZXJhbE9iamVjdChtb2RlbCkpIHtcbiAgICAgICAgICAgIGlmIChtb2RlbC5fZHJvcGRvd252YWx1ZSAhPSBudWxsICYmIG1vZGVsLl9kcm9wZG93bnZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbFttb2RlbC5fZHJvcGRvd252YWx1ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1vZGVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPSAnX3N0YXR1cycgJiYga2V5ICE9ICdfZXJyb3JzJyAmJiBrZXkgIT0gJ19zb3VyY2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRNaW5pbWl6ZURhdGEobW9kZWxba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KG1vZGVsKSkge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbW9kZWwpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmdldE1pbmltaXplRGF0YShpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBtb2RlbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyU2VhcmNoKG5vZGUsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmxvYWRpbmcpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0gIT0gbnVsbCAmJiB0aGlzLmZpbHRlckRhdGFbZmllbGRdICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2ZpZWxkXSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyTnVtYmVyU2VhcmNoKG5vZGUsIGNvbnRyb2wpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwubG9hZGluZykgcmV0dXJuO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wuY2xlYXIoKSkge1xuICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgY2xlYXIgZGF0YSBiZWNhdXNlIGl0J3MgMiB3YXlzIGJpbmRpbmdcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyRGF0ZVNlYXJjaChub2RlLCBjb250cm9sLCBmaWVsZCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5sb2FkaW5nKSByZXR1cm47XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbC5jbGVhcigpKSB7XG4gICAgICAgICAgICAgICAgLy8gbmVlZCBjbGVhciBkYXRhIGJlY2F1c2Ugbm90IDIgd2F5cyBiaW5kaW5nXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2ZpZWxkXSA9IFt1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlYXJjaChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyQm94Rm9jdXMobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGFuZ2VEYXRlVGltZShldnQsIGZpZWxkKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0gPSBldnQudmFsdWU7XG4gICAgICAgIHRoaXMub25TZWFyY2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGFuZ2VCb29sZWFuKGV2dCwgZmllbGQpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0ubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0uc3BsaWNlKDAsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25TZWFyY2goKTtcbiAgICB9XG5cbiAgICBzaG93Q2hlY2tCb3hGaWx0ZXJNZW51KGV2dCwgZmllbGQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RmllbGRGaWx0ZXIgPSBmaWVsZDtcbiAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cyA9IFsuLi50aGlzLmNoZWNrQm94Q29udGV4dE1lbnVdO1xuICAgICAgICB0aGlzLl9zaG93Q29udGV4dE1lbnUoZXZ0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlRmlsdGVyQm9vbGVhbih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVt0aGlzLmN1cnJlbnRGaWVsZEZpbHRlcl0gPSBbdmFsdWVdO1xuICAgICAgICAgICAgdGhpcy5jaGVja0JveENvbnRleHRNZW51LmZvckVhY2gobWVudSA9PiBtZW51LnN0eWxlQ2xhc3MgPSBudWxsKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tCb3hDb250ZXh0TWVudVswXS5zdHlsZUNsYXNzID0gJ2FjdGl2ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQm94Q29udGV4dE1lbnVbMV0uc3R5bGVDbGFzcyA9ICdhY3RpdmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW3RoaXMuY3VycmVudEZpZWxkRmlsdGVyXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblNlYXJjaCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVFbDogYW55ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5TYW1lQm94ID0gdGhpcy5jaGVja0luTm9kZShhY3RpdmVFbCwgbm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpblNhbWVCb3ggfHwgKGFjdGl2ZUVsICYmIGFjdGl2ZUVsLm5vZGVOYW1lICE9ICdJTlBVVCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gbm9kZS5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQpIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpblNhbWVCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlRWwuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNob3dGaWx0ZXJEcm9wZG93blBhbmVsKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHJvcGRvd24gPSBldmVudC5jb21wb25lbnQuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2VsbEhlYWRlckZpbHRlciA9IGRyb3Bkb3duLmNsb3Nlc3QoJ3RoJyk7XG5cbiAgICAgICAgLy8gdGhlbSBjbGFzcyBmb2N1cy13aXRoaW4gZGUgZHJvcGRvd24gaW5wdXQgbHVjIGZvY3VzIGtob25nIGJpIGRlIGJvaSBjYWMgc3RpY2t5IGNvbHVtblxuICAgICAgICBjZWxsSGVhZGVyRmlsdGVyICYmIGNlbGxIZWFkZXJGaWx0ZXIuY2xhc3NMaXN0LmFkZCgnZm9jdXMtd2l0aGluJyk7XG4gICAgfVxuXG4gICAgb25IaWRlRmlsdGVyRHJvcGRvd25QYW5lbChldmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5jb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyb3Bkb3duID0gZXZlbnQuY29tcG9uZW50LmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNlbGxIZWFkZXJGaWx0ZXIgPSBkcm9wZG93bi5jbG9zZXN0KCd0aCcpO1xuICAgICAgICBjZWxsSGVhZGVyRmlsdGVyICYmIGNlbGxIZWFkZXJGaWx0ZXIuY2xhc3NMaXN0LnJlbW92ZSgnZm9jdXMtd2l0aGluJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRGaWx0ZXJCb3hGb2N1cyhub2RlKSB7XG4gICAgICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZS5vZmZzZXRXaWR0aCA8IDI1MCkge1xuICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZCgnc2hvcnQtZmlsdGVyLWJveCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdzaG9ydC1maWx0ZXItYm94Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSW5Ob2RlKGNoaWxkLCBwYXJlbnQpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gY2hpbGQ7XG4gICAgICAgIHdoaWxlIChzdGFydCAmJiBzdGFydC5wYXJlbnROb2RlICE9IHBhcmVudCkge1xuICAgICAgICAgICAgc3RhcnQgPSBzdGFydC5wYXJlbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0YXJ0ICE9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmVQYWdlU2l6ZSgpIHtcbiAgICAgICAgdGhpcy5zYXZlUGFnZVNldHRpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFuZGxlVGFibGVSZW5kZXJlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZnRlclJlbmRlcmVkKHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy50cmVlVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZnRlclJlbmRlcmVkKHRoaXMudHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlCdXR0b25GdW5jdGlvbkluUm93KCk7XG4gICAgICAgIHRoaXMub25SZWxvYWRlZC5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Byb2Nlc3NBZnRlclJlbmRlcmVkKHRhYmxlRWxlbWVudDogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5zdG9wQ2FsY3VsYXRpbmdGdW5jdGlvbkNvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZSkgdGhpcy5nZXRXaWR0aEZ1bmN0aW9uKHRoaXMudGFibGUpO1xuXG4gICAgICAgICAgICB0aGlzLnN0b3BDYWxjdWxhdGluZ0Z1bmN0aW9uQ29sdW1uV2lkdGggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0ICR0aEZpcnN0ID0gdGFibGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkJyk7XG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9ICR0aEZpcnN0Lm9mZnNldFRvcDtcbiAgICAgICAgY29uc3QgJHRocyA9IHRhYmxlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0aGVhZCB0cjpub3QoOmZpcnN0LWNoaWxkKSB0aCcpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR0aHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICR0aHNbaV0uc3R5bGUudG9wID0gYCR7JHRoc1tpXS5vZmZzZXRUb3AgLSBvZmZzZXRUb3B9cHhgO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlbGVjdCBs4bqhaSBpdGVtIGN14buRaSBjw7luZyDEkcaw4bujYyBzZWxlY3QgdHLGsOG7m2MgxJHDs1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnJlU2VsZWN0TGFzdEl0ZW0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkdHIgPSB0aGlzLmdldFRyQnlSb3dEYXRhKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtTGFzdCk7XG4gICAgICAgICAgICAgICAgaWYgKCR0cikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhc3QgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3Q7XG4gICAgICAgICAgICAgICAgICAgICR0ci5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbW9kaWZ5QnV0dG9uRnVuY3Rpb25JblJvdygpIHtcbiAgICAgICAgZm9yIChjb25zdCByb3dEYXRhIG9mIHRoaXMubW9kZWwuZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbCA9IChhd2FpdCB0aGlzLmdldE1lbnVCdXR0b25BdXRob3JpemVkKGF3YWl0IHRoaXMubWVudUJ1dHRvbnMocm93RGF0YSkgPz8gW10pKTtcbiAgICAgICAgICAgICAgICByb3dEYXRhLmRpc2FibGVGdW5jdGlvblJvdyA9IHRvdGFsLmxlbmd0aCA8IDEgJiYgdGhpcy5zZXR0aW5nLmRpc2FibGVTaGFyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZGVuQnRuRnVuY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhpZGRlbkJ0bkZ1bmN0aW9uID0gdGhpcy5tb2RlbC5kYXRhU291cmNlLmV2ZXJ5KHAgPT4gcC5kaXNhYmxlRnVuY3Rpb25Sb3cpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJCeVJvd0RhdGEocm93RGF0YSkge1xuICAgICAgICBpZiAodGhpcy50cmVlVGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fcmF3RGF0YVNvdXJjZS5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgdGJvZHkgdHJbcm93SW5kZXg9XCIke2luZGV4fVwiXWApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX3Jhd0RhdGFTb3VyY2UuZmluZEluZGV4KHAgPT4gcC5pZCA9PSByb3dEYXRhLmlkKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHIgPSB0aGlzLnRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgdGJvZHkgdHJbcm93SW5kZXg9XCIke2luZGV4fVwiXWApO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZVNlYXJjaFNjaGVtYSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2xzID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0LhuqFuIGNoxrBhIGPhuqV1IGjDrG5oIGPhu5l0IGNobyBkYW5oIHPDoWNoJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGluZ1NlYXJjaEluZm8gPSB0cnVlO1xuICAgICAgICBjb25zdCBzZWFyY2hJbmZvID0gbmV3IFNlYXJjaEluZm8oKTtcbiAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEgPSA8Rm9ybUNvbnRyb2xCYXNlW10+W107XG4gICAgICAgIHNlYXJjaEluZm8uZmllbGREcm9wZG93biA9IHt9O1xuICAgICAgICBzZWFyY2hJbmZvLmZpZWxkU2VhcmNoVGV4dCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLnNldHRpbmcuY29scykge1xuICAgICAgICAgICAgaWYgKGNvbC5hbGxvd0ZpbHRlciAhPSBmYWxzZSAmJiBjb2wucmF3Q29sdW1uID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sLmZ1bGxUZXh0U2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2hJbmZvLmZpZWxkU2VhcmNoVGV4dC5pbmRleE9mKGNvbC5maWVsZCkgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LnB1c2goY29sLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQgPSAnVMOsbSBraeG6v20gdGhlbyBjw6FjIHRyxrDhu51uZzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCArPSBgIFwiJHtjb2wubGFiZWwgPyBjb2wubGFiZWwgOiBjb2wuZmllbGR9XCIsYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gYXdhaXQgdGhpcy5zZXR0aW5nLmZ1bmN0aW9uLmdldFNlYXJjaENvbnRyb2woY29sLmZpZWxkKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goLi4uY29udHJvbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sLmJhc2VTZXJ2aWNlIHx8IChjb2wuZGF0YVNvdXJjZSAmJiBjb2wuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5maWVsZERyb3Bkb3duW2NvbC5maWVsZF0gPSBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbC5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogY29sLm11bHRpcGxlID8gT3BlcmF0b3IuaW4gOiBPcGVyYXRvci5lcXVhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiBjb2wubWRXaWR0aCA/IGNvbC5tZFdpZHRoIDogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE9uSW5pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FsbG93RGlzYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5maWVsZERyb3Bkb3duW2NvbC5maWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09ICdpbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOdW1iZXJSYW5nZUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrVHlwZTogJ2ludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IDZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZGF0YVR5cGUgPT0gJ2RlY2ltYWwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOdW1iZXJSYW5nZUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrVHlwZTogJ2RlY2ltYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiA2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09ICdkYXRlJyB8fCBjb2wuZGF0YVR5cGUgPT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kYXRhVHlwZSA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENoZWNrQm94TGlzdENvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiB0cnVlLCBsYWJlbDogYEPDs2AgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IGZhbHNlLCBsYWJlbDogYEtow7RuZ2AgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiBjb2wubWRXaWR0aCA/IGNvbC5tZFdpZHRoIDogMTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2wuZmllbGQgIT0gY29sLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRleHRDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiBjb2wubWRXaWR0aCA/IGNvbC5tZFdpZHRoIDogMTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LmluZGV4T2YoZmllbGQpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LnB1c2goZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQgPSAnVMOsbSBraeG6v20gdGhlbyBjw6FjIHRyxrDhu51uZzonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMuZmluZChwID0+IHAuZmllbGQgPT0gZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQgKz0gYCBcIiR7Y29sLm5hbWV9XCIsYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0ID0gc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dC5zdWJzdHJpbmcoMCwgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaEluZm8gPSBzZWFyY2hJbmZvO1xuICAgICAgICB0aGlzLmNyZWF0aW5nU2VhcmNoSW5mbyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNoZWNrUGVybWlzc2lvblRvVXNlQnV0dG9uKGJ1dHRvblBlcm1pc3Npb25Db2RlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgICAgICBpZiAodGVtcCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcbiAgICAgICAgICAgIHx8ICh0aGlzLmN1cnJlbnRVc2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnICYmIHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuaWdub3JlQWRtaW4gPT09IGZhbHNlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uUGVybWlzc2lvbk1hcC5nZXQoYCR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlfS8ke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lfS8ke2J1dHRvblBlcm1pc3Npb25Db2RlfWApO1xuICAgIH1cblxuICAgIHNldERyb3Bkb3duRGF0YXNvdXJjZShmaWVsZDogc3RyaW5nLCBkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJTY2hlbWEuZHJvcGRvd25bZmllbGRdKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kcm9wZG93bltmaWVsZF0uZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SXRlbVdvcmtmbG93U2V0dGluZyhzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEpIHtcbiAgICAgICAgbGV0IHdvcmtmbG93U2V0dGluZyA9IHNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3O1xuICAgICAgICBpZiAoc2V0dGluZy5pc1dvcmtmbG93VHJlZVxuICAgICAgICAgICAgJiYgc2V0dGluZy53b3JrZmxvd0NvbmZpZ0FkdmFuY2VcbiAgICAgICAgICAgICYmIHNldHRpbmcud29ya2Zsb3dDb25maWdBZHZhbmNlLmdldFdvcmtmbG93U2V0dGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHNldHRpbmcud29ya2Zsb3dDb25maWdBZHZhbmNlLmdldFdvcmtmbG93U2V0dGluZyhyb3dEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXdvcmtmbG93U2V0dGluZyB8fCB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCfEkOG7kWkgdMaw4bujbmcgY2jGsGEgxJHGsOG7o2MgY+G6pXUgaMOsbmggcXV5IHRyw6xuaCBuZ2hp4buHcCB24bulJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmtmbG93U2V0dGluZztcbiAgICB9XG5cbiAgICBhc3luYyBzaG93Rm9ybVN0YXJ0V29ya2Zsb3cocm93RGF0YSwgZGlhbG9nPzogYW55KSB7XG4gICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgdGhpcy5nZXRJdGVtV29ya2Zsb3dTZXR0aW5nKHRoaXMuc2V0dGluZywgcm93RGF0YSk7XG4gICAgICAgIGlmICghd29ya2Zsb3dTZXR0aW5nKSB7XG4gICAgICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE7hur91IGNyZWF0ZSB0YXNrIHRoYXkgdsOsIGNo4bqheSBxdXkgdHLDrG5oIHbhu5tpIMSR4buRaSB0xrDhu6NuZyBjaMOtbmggdGjDrCBt4bufIGZvcm0gdGjDqm0gY8O0bmcgdmnhu4djXG4gICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcuY3JlYXRlVGFza0luc3RlYWQpIHtcbiAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgxJHDoyB04bqhbyBjw7RuZyB2aeG7h2MgZ+G6r24gduG7m2kgYuG6o24gZ2hpIGNoxrBhXG4gICAgICAgICAgICAvLyBO4bq/dSBjw7MgcuG7k2kgdGjDrCBiw6FvXG4gICAgICAgICAgICBjb25zdCByZXN1bHRDaGVja0V4aXN0ID0gKGF3YWl0IHRoaXMuX2NvbmdWaWVjU2VydmljZS5jaGVja0V4aXN0QnlGaWx0ZXIoW1xuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdzZXJ2aWNlQ29kZScsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUpLFxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHknLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWUpLFxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHlLZXknLCBPcGVyYXRvci5lcXVhbCwgcm93RGF0YS5pZClcbiAgICAgICAgICAgIF0pKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0Q2hlY2tFeGlzdC5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEga2hpIGtp4buDbSB0cmEgdHLhuqFuZyB0aMOhaSDEkcOjIHThuqFvIGPDtG5nIHZp4buHYyBoYXkgY2jGsGEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHRDaGVja0V4aXN0LmRhdGEpIHtcbiAgICAgICAgICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0LhuqNuIGdoaSDEkcOjIMSRxrDhu6NjIHThuqFvIGPDtG5nIHZp4buHYycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5tb2RpZnlSb3dEYXRhRm9yVGFzaykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZy5tb2RpZnlSb3dEYXRhRm9yVGFzayhyb3dEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsVGFzayA9IHtcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCksIC8vIElkIG7DoHkgY+G6p24gdGhp4bq/dCB2w6wgc+G6vSBkw7luZyB0cm9uZyBow6BtIGluc2VydFRhc2tBbmRSZWxvYWRcbiAgICAgICAgICAgICAgICBjaGVja1VuaXF1ZVRhc2tGb3JFbnRpdHk6IHRydWUsXG4gICAgICAgICAgICAgICAgLy8gYXV0b05leHRTdGVwOiB3b3JrZmxvd1NldHRpbmcuYXV0b05leHRTdGVwLFxuICAgICAgICAgICAgICAgIGlkTG9haUNvbmdWaWVjOiB3b3JrZmxvd1NldHRpbmcuaWRMb2FpQ29uZ1ZpZWNEZWZhdWx0LFxuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUsXG4gICAgICAgICAgICAgICAgZW50aXR5OiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZW50aXR5TmFtZSxcbiAgICAgICAgICAgICAgICBlbnRpdHlLZXk6IHJvd0RhdGEuaWQsXG4gICAgICAgICAgICAgICAgdGVuOiB0aGlzLmdldFRlbkNvbmdWaWVjKHdvcmtmbG93U2V0dGluZy50ZW1wbGF0ZVRhc2tOYW1lLCByb3dEYXRhKSxcbiAgICAgICAgICAgICAgICBkaW5oS2VtTmdoaWVwVnVEdG9zOiBbXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gVOG7lW5nIGjhu6NwIG1vZGVsIMSRw61uaCBrw6htIG5naGnhu4dwIHbhu6UgZW50aXR5XG4gICAgICAgICAgICBjb25zdCBjb250ZW50TGluayA9IGF3YWl0IHRoaXMuZ2V0Q29weVBhdGgodGhpcy5zZXR0aW5nLCByb3dEYXRhKTtcbiAgICAgICAgICAgIGlmIChjb250ZW50TGluaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsRW50aXR5ID0gdGhpcy5wYXJzZUF0dGFjaExpbmsoY29udGVudExpbmspO1xuICAgICAgICAgICAgICAgIG1vZGVsVGFzay5kaW5oS2VtTmdoaWVwVnVEdG9zID0gbW9kZWxFbnRpdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLm1vZGlmeUl0ZW1UYXNrKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXR0aW5nLm1vZGlmeUl0ZW1UYXNrKG1vZGVsVGFzaywgcm93RGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgbuG6v3UgY8OzIGPhuqV1IGjDrG5oIHThu7EgxJHhu5luZyBi4bqvdCDEkeG6p3UgdGFzaywgdsOgIHBo4bqjaSBjw7MgbG/huqFpIGPDtG5nIHZp4buHYyBt4bq3YyDEkeG7i25oXG4gICAgICAgICAgICBpZiAod29ya2Zsb3dTZXR0aW5nLmF1dG9TdGFydFRhc2tcbiAgICAgICAgICAgICAgICAmJiB3b3JrZmxvd1NldHRpbmcuaWRMb2FpQ29uZ1ZpZWNEZWZhdWx0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyA9PiBUaMOsIGzhuqV5IHRow6ptIHRow7RuZyB0aW4gcXV5IHRyw6xuaCBt4bq3YyDEkeG7i25oIGNobyB0YXNrXG4gICAgICAgICAgICAgICAgLy8gTuG6v3UgbOG6pXkgxJHGsOG7o2MgdGjDrCB04buxIMSR4buZbmcgYuG6r3QgxJHhuqd1LCBu4bq/dSBraMO0bmcgdGjDrCB24bqrbiBwaOG6o2kgbeG7nyBsw6puIGZvcm0gY8O0bmcgdmnhu4djXG4gICAgICAgICAgICAgICAgY29uc3QgdGFza1dvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZS5nZXRXb3JrZmxvd1NldHRpbmdCeUlkTG9haUNvbmdWaWVjKHdvcmtmbG93U2V0dGluZy5pZExvYWlDb25nVmllY0RlZmF1bHQpO1xuICAgICAgICAgICAgICAgIGlmICh0YXNrV29ya2Zsb3dTZXR0aW5nICE9IG51bGwgJiYgdGFza1dvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxUYXNrW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV0gPSB0YXNrV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRUYXNrQW5kUmVsb2FkKG1vZGVsVGFzaywgcm93RGF0YSwgdGFza1dvcmtmbG93U2V0dGluZyk7XG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAod29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRXb3JrZmxvdyhyb3dEYXRhLCB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzWzBdKTtcbiAgICAgICAgICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhcnRXb3JrZmxvd01vZGVsLmRhdGEuaXRlbSA9IHJvd0RhdGE7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgY29tcFJlZiA9IGF3YWl0IHRoaXMuX2ZlZGVyYXRpb25TZXJ2aWNlLmxvYWRSZW1vdGVOZXdDb21wb25lbnQoJ2NvbW1vbmFwcCcsICdTdGFydFdvcmtmbG93Q29tcG9uZW50JywgdGhpcy5zdGFydFdvcmtmbG93Vmlld0NvbnRhaW5lcik7XG4gICAgICAgICAgICBpZiAoZGlhbG9nKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nLmJ1dHRvblRlbXBsYXRlSW5wdXQgPSBjb21wUmVmLmluc3RhbmNlLmJ1dHRvblRlbXBsYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcFJlZi53b3JrZmxvd3MgPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzO1xuICAgICAgICAgICAgY29tcFJlZi5kZWZhdWx0V29ya2Zsb3cgPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlO1xuICAgICAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vblNhdmVkLnN1YnNjcmliZShldmVudCA9PiB0aGlzLmhhbmRsZVN0YXJ0V29ya2Zsb3dGcm9tRGlhbG9nKGV2ZW50KSk7XG4gICAgICAgICAgICBjb21wUmVmLmluc3RhbmNlLm9uQ2FuY2VsLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRUZW5Db25nVmllYyh0ZW1wbGF0ZVRleHQ6IHN0cmluZywgcm93RGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiByZW5kZXJUZXh0VGVtcGxhdGUoXG4gICAgICAgICAgICBnZXRSZWdleFJlc3VsdCh0ZW1wbGF0ZVRleHQsIFJlZ2V4U3BsaXRGaWVsZEJ5SXRlbSwgZXhlY1Jlc3VsdCA9PiBleGVjUmVzdWx0WzFdKSxcbiAgICAgICAgICAgIHRlbXBsYXRlVGV4dCwgcm93RGF0YVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9uZ0hvcFdvcmtmbG93SGlzdG9yeUZvck5leHRGaXJzdFN0ZXAoXG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSwgaXRlbVRhc2s6IGFueSwgd29ya2Zsb3dTZXR0aW5nOiBXb3JrZmxvd1NldHRpbmdOZXcsIHdvcmtmbG93Q29kZTogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGlmIChpdGVtV29ya2Zsb3dIaXN0b3J5ID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuaWdub3JlVmFsaWRhdGVCYXNlSW5CdXNzaW5lc3MgPSB0cnVlO1xuICAgICAgICBjb25zdCB3b3JrZmxvdyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3MuZmluZChxID0+IHEuY29kZSA9PSB3b3JrZmxvd0NvZGUpO1xuICAgICAgICBpZiAod29ya2Zsb3cgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHN0YXRlU3RhcnQgPSB3b3JrZmxvdy5kYXRhLm1hY2hpbmVzLmZpbmQocSA9PiBxLnR5cGUgPT0gRW51bVN0YXRlVHlwZS5TVEFSVCk7XG4gICAgICAgIGlmIChzdGF0ZVN0YXJ0ID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBhY3Rpb25Db2RlID0gaXRlbVdvcmtmbG93SGlzdG9yeS5hY3Rpb25Db2RlO1xuICAgICAgICBjb25zdCBleGlzdEFjdGlvbiA9IHdvcmtmbG93LmRhdGEuY29ubmVjdGlvbnMuc29tZSh4ID0+IHguc291cmNlID09IHN0YXRlU3RhcnQuaWRcbiAgICAgICAgICAgICYmIHguY29kZSA9PSBhY3Rpb25Db2RlXG4gICAgICAgICk7XG4gICAgICAgIGlmICghZXhpc3RBY3Rpb24pIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBjcnVkTGlzdFNldHRpbmc6IENydWRMaXN0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmFkanVzdFNldHRpbmdXb3JrZmxvd0ZvckNydWRMaXN0KGNydWRMaXN0U2V0dGluZyk7XG4gICAgICAgIGxldCBuYW1lID0gJyc7XG4gICAgICAgIGlmICh0eXBlb2YgY3J1ZExpc3RTZXR0aW5nLmRpc3BsYXlGaWVsZCA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbmFtZSA9IGl0ZW1UYXNrWzxzdHJpbmc+KGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5hbWUgPSAoPEZ1bmN0aW9uPihjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkKSkoaXRlbVRhc2spO1xuICAgICAgICB9XG4gICAgICAgIG5hbWUgPSBgJHtjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2Uub2JqZWN0TmFtZX0gJHtuYW1lfWA7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkudGFibGVOYW1lID0gdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmVudGl0eU5hbWU7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnkub2JqZWN0RnVsbE5hbWUgPSBuYW1lO1xuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5Lm9iamVjdE5hbWUgPSBjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2Uub2JqZWN0TmFtZTtcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS53b3JrZmxvd0NvZGUgPSB3b3JrZmxvd0NvZGU7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuaXRlbUlkID0gaXRlbVRhc2suaWQ7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnkuc291cmNlU3RhdHVzQ29kZSA9IHN0YXRlU3RhcnQuY29kZTtcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5hY3Rpb25Db2RlID0gYWN0aW9uQ29kZTtcbiAgICAgICAgcmV0dXJuIGl0ZW1Xb3JrZmxvd0hpc3Rvcnk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBpbnNlcnRUYXNrQW5kUmVsb2FkKG1vZGVsVGFzaywgcm93RGF0YSwgd29ya2Zsb3dTZXR0aW5nOiBXb3JrZmxvd1NldHRpbmdOZXcpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5nZXREYXRhRm9yTmV4dEZpcnN0U3RlcFRhc2spIHtcbiAgICAgICAgICAgIG1vZGVsVGFzay5pdGVtV29ya2Zsb3dIaXN0b3J5ID0gYXdhaXQgdGhpcy5zZXR0aW5nLmdldERhdGFGb3JOZXh0Rmlyc3RTdGVwVGFzayhyb3dEYXRhKTtcbiAgICAgICAgICAgIG1vZGVsVGFzay5pdGVtV29ya2Zsb3dIaXN0b3J5ID0gdGhpcy50b25nSG9wV29ya2Zsb3dIaXN0b3J5Rm9yTmV4dEZpcnN0U3RlcChcbiAgICAgICAgICAgICAgICBtb2RlbFRhc2suaXRlbVdvcmtmbG93SGlzdG9yeSwgbW9kZWxUYXNrLCB3b3JrZmxvd1NldHRpbmcsIG1vZGVsVGFza1tGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbmdWaWVjU2VydmljZS5wb3N0KG1vZGVsVGFzaylcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJycsIGYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25TdGFydGVkV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjYWxsIGJhY2sga2hpIOG6pW4gbMawdSB0csOqbiBmb3JtIGLhuq90IMSR4bqndSBxdXkgdHLDrG5oXG4gICAgICogY3J1ZC1saXN0IHPhur0gZ+G7jWkgaMOgbSBsxrB1IGNo4bupIGZvcm0gc3RhcnQgd29ya2Zsb3cgayBsw6BtIGfDrCBj4bqjXG4gICAgICogxJDhu4IgVOG6rE4gROG7pE5HIEzhuqBJIEjDgE0gc3RhcnRXb3JrZmxvdyBj4bunYSBjcnVkLWxpc3RcbiAgICAgKi9cbiAgICBoYW5kbGVTdGFydFdvcmtmbG93RnJvbURpYWxvZyh3b3JrZmxvdzogV2ZJdGVtKSB7XG4gICAgICAgIHRoaXMuc3RhcnRXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3codGhpcy5zdGFydFdvcmtmbG93TW9kZWwuZGF0YS5pdGVtLCB3b3JrZmxvdyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNob3dBY3Rpb25Xb3JrZmxvdyhldnQsIHJvd0RhdGEsIGRpYWxvZ1Byb2Nlc3NXb3JrZmxvd0Zvcm0gPSBudWxsLCBkaWFsb2dEZXRhaWxUYXNrID0gbnVsbCwgZGlhbG9nQ2hvWUtpZW5Gb3JtID0gbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cpIHJldHVybjtcbiAgICAgICAgaWYgKCFyb3dEYXRhKSByb3dEYXRhID0ge307XG4gICAgICAgIHRoaXMuZGlhbG9nUHJvY2Vzc1dvcmtmbG93Rm9ybSA9IGRpYWxvZ1Byb2Nlc3NXb3JrZmxvd0Zvcm07XG4gICAgICAgIHRoaXMuZGlhbG9nRGV0YWlsVGFzayA9IGRpYWxvZ0RldGFpbFRhc2s7XG4gICAgICAgIHRoaXMuZGlhbG9nQ2hvWUtpZW5Gb3JtID0gZGlhbG9nQ2hvWUtpZW5Gb3JtO1xuICAgICAgICB0aGlzLmJ1dHRvbkNvbnRleHRzID0gYXdhaXQgdGhpcy5nZXRCdXR0b25Db250ZXh0KHJvd0RhdGEpO1xuICAgICAgICBpZiAodGhpcy5idXR0b25Db250ZXh0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zaG93Q29udGV4dE1lbnUoZXZ0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QnV0dG9uQ29udGV4dChyb3dEYXRhKSB7XG4gICAgICAgIHRoaXMuc2hvd2luZ0FjdGlvbldvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgbGV0IHJlc3VsdEdldEFjdGlvbldvcmtmbG93ID0gbnVsbDtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWUgJiYgdGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldy5jcmVhdGVUYXNrSW5zdGVhZCkge1xuICAgICAgICAgICAgcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cgPSBhd2FpdCB0aGlzLmdldEFjdGlvbldvcmtmbG93QnlUYXNrKHJvd0RhdGEsIHJvd0RhdGEuZGlhbG9nSGlzdG9yeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdyA9IGF3YWl0IHRoaXMuZ2V0QWN0aW9uV29ya2Zsb3cocm93RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdEdldEFjdGlvbldvcmtmbG93KSkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgY8OzIGjDoG5oIMSR4buZbmcga2jhuqMgZOG7pW5nJyk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnV0dG9uQ29udGV4dHMgPSByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdztcbiAgICAgICAgLy8gTuG6v3UgbMOgIGLhuqNuIGdoaSBuZ2hp4buHcCB24bulIG3DoCBjw7MgZ+G6r24gdGjDtG5nIHRpbiB0YXNrIHRow6wgYuG7lSBzdW5nIHRow6ptIG1lbnUgeGVtIGPDtG5nIHZp4buHY1xuICAgICAgICBpZiAocm93RGF0YVtGaWVsZERlZmluZUhhc1Rhc2tdKSB7XG4gICAgICAgICAgICBidXR0b25Db250ZXh0cy51bnNoaWZ0KFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGBYZW0gY8O0bmcgdmnhu4djYCxcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudmlld1Rhc2tEZXRhaWwocm93RGF0YSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJ1dHRvbkNvbnRleHRzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEFjdGlvbldvcmtmbG93KHJvd0RhdGEpOiBQcm9taXNlPGFueVtdIHwgdm9pZD4ge1xuICAgICAgICBjb25zdCB3b3JrZmxvd1NldHRpbmcgPSBhd2FpdCB0aGlzLmdldEl0ZW1Xb3JrZmxvd1NldHRpbmcodGhpcy5zZXR0aW5nLCByb3dEYXRhKTtcbiAgICAgICAgaWYgKCF3b3JrZmxvd1NldHRpbmcpIHJldHVybjtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFjdGlvbldvcmtmbG93QmFzZSh0aGlzLnNldHRpbmcsIHJvd0RhdGEsIHdvcmtmbG93U2V0dGluZyk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QWN0aW9uV29ya2Zsb3dCeVRhc2socm93RGF0YSwgZGlhbG9nPzogYW55KTogUHJvbWlzZTxhbnlbXSB8IHZvaWQ+IHtcbiAgICAgICAgaWYgKCFyb3dEYXRhLl9faXNHb3RDb25nVmllYykge1xuICAgICAgICAgICAgcm93RGF0YS5fX2l0ZW1Db25nVmllYyA9IChhd2FpdCB0aGlzLl9jb25nVmllY1NlcnZpY2UuZ2V0RGV0YWlsQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignc2VydmljZUNvZGUnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2VudGl0eScsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZW50aXR5TmFtZSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHlLZXknLCBPcGVyYXRvci5lcXVhbCwgcm93RGF0YS5pZClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApKS5kYXRhO1xuICAgICAgICAgICAgcm93RGF0YS5fX2lzR290Q29uZ1ZpZWMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJvd0RhdGEgPSByb3dEYXRhLl9faXRlbUNvbmdWaWVjO1xuICAgICAgICBpZiAoIXJvd0RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd2luZ0FjdGlvbldvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPDtG5nIHZp4buHYyBn4bqvbiB24bubaSBi4bqjbiBnaGknKTtcbiAgICAgICAgfVxuICAgICAgICByb3dEYXRhLl9fd29ya2Zsb3dDb2RlID0gcm93RGF0YS53b3JrZmxvd0NvZGU7XG5cbiAgICAgICAgY29uc3Qgd29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlKTtcbiAgICAgICAgY29uc3QgdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlLmNoYW5nZUVuZHBvaW50KHRoaXMuX2NvbmdWaWVjU2VydmljZSlcbiAgICAgICAgICAgIC5hcHBlbmRJbmZvRm9yV29ya2Zsb3coXG4gICAgICAgICAgICAgICAgdXNlclNlcnZpY2UuZ2V0VXNlcklkQ29tYmluZSgpLCBbcm93RGF0YV0sICdpZCcsIHRoaXMuc2V0dGluZy5pZ25vcmVXb3JrZmxvd1xuICAgICAgICAgICAgKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkgcmV0dXJuO1xuICAgICAgICBjb25zdCB3b3JrZmxvd1NldHRpbmcgPSBhd2FpdCB0aGlzLl9kbUxvYWlDb25nVmllY1NlcnZpY2UuZ2V0V29ya2Zsb3dTZXR0aW5nQnlJZExvYWlDb25nVmllYyhyb3dEYXRhLmlkTG9haUNvbmdWaWVjKTtcblxuICAgICAgICBpZiAod29ya2Zsb3dTZXR0aW5nID09IG51bGwpIHJldHVybjtcbiAgICAgICAgY29uc3QgY3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xuICAgICAgICB0aGlzLl9jb25nVmllY1NlcnZpY2UuYWRqdXN0U2V0dGluZ1dvcmtmbG93Rm9yQ3J1ZExpc3QoY3J1ZExpc3RTZXR0aW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFjdGlvbldvcmtmbG93QmFzZShjcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEsIHdvcmtmbG93U2V0dGluZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0QWN0aW9uV29ya2Zsb3dCYXNlKGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhLCB3b3JrZmxvd1NldHRpbmc6IFdvcmtmbG93U2V0dGluZ05ldyk6IFByb21pc2U8YW55W10gfCB2b2lkPiB7XG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSByb3dEYXRhO1xuICAgICAgICB0aGlzLmJ1dHRvbkNvbnRleHRzID0gW107XG4gICAgICAgIGNvbnN0IGJ1dHRvbkNvbnRleHRzID0gW107XG4gICAgICAgIC8vIE7hur91IGsgY8OzIHdvcmtmbG93IGNvZGUgbmdoxKlhIGzDoCBjaMawYSBjaOG6oXkgcXV5IHRyw6xuaCBob+G6t2MgcXV5IHRyw6xuaCBs4buXaSA9PiBDaG8gY2jhuqF5IGzhuqFpXG4gICAgICAgIGlmICghcm93RGF0YS5fX3dvcmtmbG93Q29kZSkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXRlbVdvcmtmbG93U2V0dGluZyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3MuZmluZChxID0+IHEuY29kZSA9PSByb3dEYXRhLl9fd29ya2Zsb3dDb2RlKTtcbiAgICAgICAgICAgIGlmICghaXRlbVdvcmtmbG93U2V0dGluZykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYEtow7RuZyB0w6xtIHRo4bqleSBxdXkgdHLDrG5oIGPDsyBtw6MgJHtyb3dEYXRhLl9fd29ya2Zsb3dDb2RlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IGl0ZW1Xb3JrZmxvd1NldHRpbmcuZGF0YS5hY3Rpb25zW3Jvd0RhdGEuX190cmFuZ1RoYWldO1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uQWxsb3dzID0gKGF3YWl0IGNydWRMaXN0U2V0dGluZy5iYXNlU2VydmljZS5nZXRBY3Rpb25BbGxvdyhyb3dEYXRhLmlkKSkuZGF0YTtcbiAgICAgICAgICAgIGlmIChhY3Rpb25BbGxvd3MpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25BbGxvd3MuZm9yRWFjaChhY3Rpb25Db2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gYWN0aW9ucy5maW5kKHEgPT4gcS5jb2RlID09IGFjdGlvbkNvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25Db250ZXh0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb1RodVR1OiBhY3Rpb24uc29UaHVUdSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db2RlOiBhY3Rpb24uY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiB0aGlzLnNvdXJjZUljb25bYWN0aW9uLmljb25dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnByb2Nlc3NXb3JrZmxvdyhjcnVkTGlzdFNldHRpbmcsIGl0ZW1Xb3JrZmxvd1NldHRpbmcsIGFjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBM4buXaSBrIGzhuqV5IMSRxrDhu6NjIGFjdGlvbiBhbGxvd1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnV0dG9uQ29udGV4dHMuc29ydChtdWx0aXBsZVNvcnQoJ3NvVGh1VHUnKSk7XG4gICAgICAgICAgICAvLyBLaeG7g20gdHJhIG5nxrDhu51pIGN14buRaSBjw7luZyB0aOG7sWMgaGnhu4duIGPDsyBwaOG6o2kgbmfGsOG7nWkgaGnhu4duIHThuqFpIGtow7RuZyB0aMOsIGNobyBwaMOpcCByb2xsYmFja1xuICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dIaXN0b3J5U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlKTtcbiAgICAgICAgICAgIHdvcmtmbG93SGlzdG9yeVNlcnZpY2UuY2hhbmdlRW5kcG9pbnQodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJZCA9IHVzZXJTZXJ2aWNlLmdldElkKCk7XG4gICAgICAgICAgICBsZXQgdXNlcklkU3RyaW5nVXBwZXIgPSAnJztcblxuICAgICAgICAgICAgaWYgKHVzZXJJZCkge1xuICAgICAgICAgICAgICAgIHVzZXJJZFN0cmluZ1VwcGVyID0gdXNlcklkLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm93RGF0YS5fX2lzQ29FZGl0KSB7XG4gICAgICAgICAgICAgICAgYnV0dG9uQ29udGV4dHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLWJhY2t3YXJkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBUZXh0QWN0aW9uQ2h1eWVuWHVMeUJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db2RlOiBBY3Rpb25DaHV5ZW5YdUx5QmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuc2hvd0Zvcm1DaHV5ZW5YdUx5KGNydWRMaXN0U2V0dGluZywgaXRlbVdvcmtmbG93U2V0dGluZywgcm93RGF0YSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdGVtV29ya2Zsb3dIaXN0b3J5TGFzdCA9IChhd2FpdCB3b3JrZmxvd0hpc3RvcnlTZXJ2aWNlLmNoYW5nZUVuZHBvaW50KGNydWRMaXN0U2V0dGluZy5iYXNlU2VydmljZSkuZ2V0TGFzdEJ5SXRlbUlkKHJvd0RhdGEuaWQpKS5kYXRhO1xuICAgICAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnlMYXN0XG4gICAgICAgICAgICAgICAgJiYgaXRlbVdvcmtmbG93SGlzdG9yeUxhc3QuYWN0aW9uQ29kZSAhPSBNYUFjdGlvbkJhdERhdVF1eVRyaW5oXG4gICAgICAgICAgICAgICAgJiYgaXRlbVdvcmtmbG93SGlzdG9yeUxhc3QudXNlcklkQ3JlYXRlZC50b1VwcGVyQ2FzZSgpID09IHVzZXJJZFN0cmluZ1VwcGVyXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nLnNob3dCdXR0b25UaHVIb2lcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGJ1dHRvbkNvbnRleHRzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdwaSBwaS1yZXBsYXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdUaHUgaOG7k2knLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5yb2xsYmFja1dvcmtmbG93KGNydWRMaXN0U2V0dGluZywgcm93RGF0YSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidXR0b25Db250ZXh0cy5wdXNoKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLWNvbW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDaG8gw70ga2nhur9uJyxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5zaG93Rm9ybUNob1lLaWVuKGNydWRMaXN0U2V0dGluZywgcm93RGF0YSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLWNhbGVuZGFyJyxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IEJ1dHRvblRleHRBY3Rpb25Db25nVmllYy5YRU1fTElDSF9TVSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy52aWV3SGlzdG9yeVdvcmtmbG93KGNydWRMaXN0U2V0dGluZywgcm93RGF0YSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1dHRvbkNvbnRleHRzO1xuICAgIH1cblxuICAgIGFzeW5jIHZpZXdUYXNrRGV0YWlsKHJvd0RhdGEpIHtcbiAgICAgICAgY29uc3QgaXRlbVRhc2sgPSAoYXdhaXQgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmdldERldGFpbEJ5RmlsdGVyKFtcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHlLZXknLCBPcGVyYXRvci5lcXVhbCwgcm93RGF0YS5pZClcbiAgICAgICAgXSkpLmRhdGE7XG4gICAgICAgIGlmIChpdGVtVGFzayA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgY8O0bmcgdmnhu4djIGfhuq9uIHbhu5tpIGLhuqNuIGdoaScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhc2tGb3JtTW9kZWw6IGFueSA9IHt9O1xuICAgICAgICB0YXNrRm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xuICAgICAgICB0YXNrRm9ybU1vZGVsLmRhdGEgPSBpdGVtVGFzaztcbiAgICAgICAgdGhpcy5kZXRhaWxUYXNrTW9kZWwuZGF0YS50YXNrRm9ybU1vZGVsID0gdGFza0Zvcm1Nb2RlbDtcbiAgICAgICAgdGhpcy5kZXRhaWxUYXNrTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBjb21wUmVmID0gYXdhaXQgdGhpcy5fZmVkZXJhdGlvblNlcnZpY2UubG9hZFJlbW90ZU5ld0NvbXBvbmVudCgnY29uZ3ZpZWMnLCAnQmFzZUNvbmdWaWVjRm9ybUNvbXBvbmVudCcsIHRoaXMuZGV0YWlsVGFza1ZpZXdDb250YWluZXIpO1xuICAgICAgICBpZiAodGhpcy5kaWFsb2dEZXRhaWxUYXNrKSB7XG4gICAgICAgICAgICB0aGlzLmRpYWxvZ0RldGFpbFRhc2suYnV0dG9uVGVtcGxhdGVJbnB1dCA9IGNvbXBSZWYuaW5zdGFuY2UuYnV0dG9uVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5tb2RlbCA9IHRhc2tGb3JtTW9kZWw7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuZm9yY2VPbmx5VmlldyA9IHRydWU7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25DYW5jZWwuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuZGV0YWlsVGFza01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlKTtcbiAgICB9XG5cbiAgICByb2xsYmFja1dvcmtmbG93KGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGtow7RpIHBo4bulYyB0cuG6oW5nIHRow6FpIHRyxrDhu5tjIMSRw7MnKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSByb3dEYXRhWzxzdHJpbmc+KGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSAoPEZ1bmN0aW9uPihjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkKSkocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNydWRMaXN0U2V0dGluZy5iYXNlU2VydmljZS5yb2xsYmFjayhyb3dEYXRhLCBbY3J1ZExpc3RTZXR0aW5nLm9iamVjdE5hbWUsIG5hbWVdKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICdLaMO0aSBwaOG7pWMgdHLhuqFuZyB0aMOhaSB0csaw4bubYyB0aMOgbmggY8O0bmcnLCBmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Sb2xsYmFja2VkV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkU3RhdHVzV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyB2aWV3SGlzdG9yeVdvcmtmbG93KGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgdGhpcy5nZXRJdGVtV29ya2Zsb3dTZXR0aW5nKGNydWRMaXN0U2V0dGluZywgcm93RGF0YSk7XG4gICAgICAgIGlmICghd29ya2Zsb3dTZXR0aW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSByb3dEYXRhO1xuICAgICAgICB0aGlzLndvcmtmbG93SGlzdG9yeU1vZGVsLmRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy53b3JrZmxvd0hpc3RvcnlNb2RlbC5kYXRhLnNldHRpbmcgPSBjcnVkTGlzdFNldHRpbmc7XG4gICAgICAgIHRoaXMud29ya2Zsb3dIaXN0b3J5TW9kZWwuZGF0YS53b3JrZmxvd1NldHRpbmcgPSB3b3JrZmxvd1NldHRpbmc7XG4gICAgICAgIHRoaXMud29ya2Zsb3dIaXN0b3J5TW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBjb21wUmVmID0gYXdhaXQgdGhpcy5fZmVkZXJhdGlvblNlcnZpY2UubG9hZFJlbW90ZU5ld0NvbXBvbmVudCgnY29tbW9uYXBwJywgJ1dvcmtmbG93SGlzdG9yeU5ld0NvbXBvbmVudCcsIHRoaXMud29ya2Zsb3dIaXN0b3J5TmV3Vmlld0NvbnRhaW5lcik7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuYnVzaW5lc3NTZXR0aW5nID0gY3J1ZExpc3RTZXR0aW5nO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnRhYmxlTmFtZSA9IHRoaXMud29ya2Zsb3dIaXN0b3J5TW9kZWwuZGF0YS50YWJsZU5hbWU7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuaXRlbSA9IHJvd0RhdGE7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uud29ya2Zsb3dTZXR0aW5nID0gd29ya2Zsb3dTZXR0aW5nO1xuICAgICAgICAvLyBjb21wUmVmLmluc3RhbmNlLm9uQ2FuY2VsLnN1YnNjcmliZShldmVudCA9PiB0aGlzLndvcmtmbG93SGlzdG9yeU1vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlKTtcbiAgICB9XG5cbiAgICBoYW5kbGVIaWRlSGlzdG9yeVdvcmtmbG93KCkge1xuICAgICAgICB0aGlzLnNob3dIaXN0b3J5V29ya2Zsb3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZVdvcmtmbG93Q3VzdG9tKGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCBpdGVtV29ya2Zsb3dTZXR0aW5nOiBhbnksIHdvcmtmbG93QWN0aW9uOiBXZkFjdGlvbiwgY3VycmVudEl0ZW06IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBwcm9jZXNzV29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIGl0ZW1Xb3JrZmxvd1NldHRpbmc6IGFueSwgd29ya2Zsb3dBY3Rpb246IFdmQWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlUmVzID0gYXdhaXQgdGhpcy52YWxpZGF0ZVdvcmtmbG93Q3VzdG9tKGNydWRMaXN0U2V0dGluZywgaXRlbVdvcmtmbG93U2V0dGluZywgd29ya2Zsb3dBY3Rpb24sIHRoaXMuY3VycmVudEl0ZW0pO1xuICAgICAgICBpZiAoIXZhbGlkYXRlUmVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdvcmtmbG93QWN0aW9uLm9wZW5OZXdUYWIpIHtcbiAgICAgICAgICAgIGxldCBkb21haW5OZXdUYWIgPSB3b3JrZmxvd0FjdGlvbi5kb21haW5OZXdUYWI7XG4gICAgICAgICAgICBpZiAoIWRvbWFpbk5ld1RhYikgZG9tYWluTmV3VGFiID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGAke2RvbWFpbk5ld1RhYn0vJHt3b3JrZmxvd0FjdGlvbi5saW5rTmV3VGFifSNfaXRlbUlkPSR7dGhpcy5jdXJyZW50SXRlbS5pZH1gLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXdvcmtmbG93QWN0aW9uLm9wZW5Qb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5zaG93V2FpdEJveCgpO1xuICAgICAgICAgICAgY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlLmNoYW5nZVN0YXRlQmFzZUJ5QWN0aW9uKHRoaXMuY3VycmVudEl0ZW0uaWQsIHdvcmtmbG93QWN0aW9uLmNvZGUpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2VXaXRoV2FpdEJveChyZXMsICcnLCBmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9jZXNzZWRXb3JrZmxvd0Jhc2UoKTtcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHRoaXMuaGlkZVdhaXRCb3goKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLmhlYWRlciA9IHdvcmtmbG93QWN0aW9uLm5hbWU7XG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwucG9wdXBTaXplID0gbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiAxMDAwLCBoZWlnaHQ6IDgwMCB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnByb2Nlc3NXb3JrZmxvd0Zvcm1WaWV3Q29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLmRhdGEuc2V0dGluZyA9IGNydWRMaXN0U2V0dGluZztcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuZGF0YS5hY3Rpb24gPSB3b3JrZmxvd0FjdGlvbjtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuZGF0YS53b3JrZmxvdyA9IGl0ZW1Xb3JrZmxvd1NldHRpbmc7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgY29uc3QgY29tcFJlZiA9IGF3YWl0IHRoaXMuX2ZlZGVyYXRpb25TZXJ2aWNlLmxvYWRSZW1vdGVOZXdDb21wb25lbnQoJ2NvbW1vbmFwcCcsICdQcm9jZXNzV29ya2Zsb3dGb3JtQ29tcG9uZW50JywgdGhpcy5wcm9jZXNzV29ya2Zsb3dGb3JtVmlld0NvbnRhaW5lcik7XG4gICAgICAgIGlmICh0aGlzLmRpYWxvZ1Byb2Nlc3NXb3JrZmxvd0Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUHJvY2Vzc1dvcmtmbG93Rm9ybS5idXR0b25UZW1wbGF0ZUlucHV0ID0gY29tcFJlZi5pbnN0YW5jZS5idXR0b25UZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICBjb21wUmVmLmluc3RhbmNlLml0ZW0gPSB0aGlzLmN1cnJlbnRJdGVtO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLmJ1c2luZXNzU2V0dGluZyA9IGNydWRMaXN0U2V0dGluZztcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS53b3JrZmxvdyA9IGl0ZW1Xb3JrZmxvd1NldHRpbmc7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuYWN0aW9uID0gd29ya2Zsb3dBY3Rpb247XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25TYXZlZC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5oYW5kbGVQcm9jZXNzZWRXb3JrZmxvd0Jhc2UoKSk7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25DYW5jZWwuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2UpO1xuICAgIH1cblxuICAgIGFzeW5jIHNob3dGb3JtQ2hvWUtpZW4oY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGE6IGFueSkge1xuICAgICAgICB0aGlzLmNob1lLaWVuTW9kZWwuZGF0YS5yb3dEYXRhID0gcm93RGF0YTtcbiAgICAgICAgdGhpcy5jaG9ZS2llbk1vZGVsLmRhdGEuc2V0dGluZyA9IGNydWRMaXN0U2V0dGluZztcbiAgICAgICAgdGhpcy5jaG9ZS2llbk1vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgY29tcFJlZiA9IGF3YWl0IHRoaXMuX2ZlZGVyYXRpb25TZXJ2aWNlLmxvYWRSZW1vdGVOZXdDb21wb25lbnQoJ2NvbW1vbmFwcCcsICdDaG9ZS2llbkZvcm1Db21wb25lbnQnLCB0aGlzLmNob1lLaWVuRm9ybVZpZXdDb250YWluZXIpO1xuICAgICAgICBpZiAodGhpcy5kaWFsb2dDaG9ZS2llbkZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nQ2hvWUtpZW5Gb3JtLmJ1dHRvblRlbXBsYXRlSW5wdXQgPSBjb21wUmVmLmluc3RhbmNlLmJ1dHRvblRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuYnVzc2luZXNzU2V0dGluZyA9IGNydWRMaXN0U2V0dGluZztcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5yb3dJdGVtID0gcm93RGF0YTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vblNhdmVkLnN1YnNjcmliZShldmVudCA9PiB0aGlzLmNob1lLaWVuTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2UpO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLm9uQ2FuY2VsLnN1YnNjcmliZShldmVudCA9PiB0aGlzLmNob1lLaWVuTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2UpO1xuICAgIH1cbiAgICBhc3luYyBzaG93Rm9ybUNodXllblh1THkoY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIGl0ZW1Xb3JrZmxvd1NldHRpbmc6IGFueSwgcm93RGF0YSkge1xuICAgICAgICBjb25zdCB3b3JrZmxvd0hpc3RvcnlTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93SGlzdG9yeVNlcnZpY2UpO1xuICAgICAgICB3b3JrZmxvd0hpc3RvcnlTZXJ2aWNlLmNoYW5nZUVuZHBvaW50KHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XG4gICAgICAgIGNvbnN0IGl0ZW1Xb3JrZmxvd0hpc3RvcnlMYXN0ID0gKGF3YWl0IHdvcmtmbG93SGlzdG9yeVNlcnZpY2UuY2hhbmdlRW5kcG9pbnQoY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlKS5nZXRMYXN0QnlJdGVtSWQocm93RGF0YS5pZCkpLmRhdGE7XG4gICAgICAgIGlmICghaXRlbVdvcmtmbG93SGlzdG9yeUxhc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBixrDhu5tjIHRo4buxYyBoaeG7h24gZ+G6p24gbmjhuqV0IGPhu6dhIGLhuqNuZyBnaGkhJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBpdGVtV29ya2Zsb3dTZXR0aW5nLmRhdGEubWFjaGluZXMuZmluZCh4ID0+IHguY29kZSA9PSByb3dEYXRhLl9fdHJhbmdUaGFpKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLmhlYWRlciA9IFRleHRBY3Rpb25DaHV5ZW5YdUx5QmFzZTtcblxuICAgICAgICBjb25zdCBjb21wUmVmID0gYXdhaXQgdGhpcy5fZmVkZXJhdGlvblNlcnZpY2UubG9hZFJlbW90ZU5ld0NvbXBvbmVudCgnY29tbW9uYXBwJywgJ1Byb2Nlc3NXb3JrZmxvd0Zvcm1Db21wb25lbnQnLCB0aGlzLnByb2Nlc3NXb3JrZmxvd0Zvcm1WaWV3Q29udGFpbmVyKTtcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nUHJvY2Vzc1dvcmtmbG93Rm9ybSkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dQcm9jZXNzV29ya2Zsb3dGb3JtLmJ1dHRvblRlbXBsYXRlSW5wdXQgPSBjb21wUmVmLmluc3RhbmNlLmJ1dHRvblRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuaXRlbSA9IHRoaXMuY3VycmVudEl0ZW07XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuYnVzaW5lc3NTZXR0aW5nID0gY3J1ZExpc3RTZXR0aW5nO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLndvcmtmbG93ID0gaXRlbVdvcmtmbG93U2V0dGluZztcbiAgICAgICAgY29uc3QgYWN0aW9uID0gbmV3IFdmQWN0aW9uKCk7XG4gICAgICAgIGFjdGlvbi5jb2RlID0gQWN0aW9uQ2h1eWVuWHVMeUJhc2U7XG4gICAgICAgIGFjdGlvbi5uYW1lID0gVGV4dEFjdGlvbkNodXllblh1THlCYXNlO1xuICAgICAgICBhY3Rpb24uZGF0YSA9IHt9O1xuICAgICAgICBhY3Rpb24ub3BlblBvcHVwID0gdHJ1ZTtcbiAgICAgICAgYWN0aW9uLnRhcmdldCA9IGN1cnJlbnRTdGF0ZS5pZCB8fCB0aGlzLmd1aWRFbXB0eTtcbiAgICAgICAgYWN0aW9uLnNvdXJjZSA9IGN1cnJlbnRTdGF0ZS5pZCB8fCB0aGlzLmd1aWRFbXB0eTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5hY3Rpb24gPSBhY3Rpb247XG5cbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vblNhdmVkLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLm9uQ2FuY2VsLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlKTtcbiAgICB9XG4gICAgYXN5bmMgc3RhcnRXb3JrZmxvdyhyb3dEYXRhLCB3b3JrZmxvdzogV2ZJdGVtKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zdGFydFdvcmtmbG93KHJvd0RhdGEuaWQsIHdvcmtmbG93LmNvZGUpXG4gICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICdDaOG6oXkgcXV5IHRyw6xuaCB0aMOgbmggY8O0bmcnLCBmID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uU3RhcnRlZFdvcmtmbG93LmVtaXQocm93RGF0YS5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWRTdGF0dXNXb3JrZmxvdy5lbWl0KHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGhhbmRsZVByb2Nlc3NlZFdvcmtmbG93QmFzZSgpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vblByb2Nlc3NlZFdvcmtmbG93LmVtaXQodGhpcy5jdXJyZW50SXRlbS5pZCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkU3RhdHVzV29ya2Zsb3cuZW1pdCh0aGlzLmN1cnJlbnRJdGVtLmlkKTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHlMaW5rKHJvd0RhdGE6IGFueSkge1xuICAgICAgICB0aGlzLm9uQ29weUxpbmsuZW1pdChyb3dEYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29weUxpbmtNdWx0aXBsZSgpIHtcbiAgICAgICAgdGhpcy5vbkNvcHlMaW5rTXVsdGlwbGUuZW1pdCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpO1xuICAgIH1cblxuICAgIHNob3dTaGFyZUxpbmtGb3JtKGxzdEl0ZW0pIHtcbiAgICAgICAgdGhpcy5zaGFyZUxpbmtNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgICAgICB0aGlzLnNoYXJlTGlua01vZGVsLmRhdGEubHN0SXRlbSA9IGxzdEl0ZW07XG4gICAgfVxuXG4gICAgYXN5bmMgY3JlYXRlU2hhcmVMaW5rKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5jaGVja1JlYWR5VG9UcmluaEt5KCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ8SQYW5nIHThuqNpIGThu68gbGnhu4d1IGRhbmggc8OhY2gsIGNo4budIG3hu5l0IGzDumMgcuG7k2kgdGjhu60gbOG6oWknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5yb3dEYXRhQ3VycmVudDtcbiAgICAgICAgdGhpcy5zaG93U2hhcmVMaW5rRm9ybShbcm93RGF0YV0pO1xuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZVNoYXJlTGlua011bHRpcGxlKCkge1xuICAgICAgICB0aGlzLnNob3dTaGFyZUxpbmtGb3JtKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVNdWx0aXBsZUNvcHlMaW5rKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlQ29weUxpbmsoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVDb3B5TGluayhyb3dEYXRhKSB7XG4gICAgICAgIGlmIChyb3dEYXRhLl9fZGlzYWJsZUNvcHlMaW5rKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oaWRkZW5Db3B5TGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gJiYgcm93RGF0YVsnbWV0YWRhdGFTdGF0dXMnXSAhPSAnMCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2hvd1NldHRpbmdzUGVybWlzc2lvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY3JlYXRpbmdTZWFyY2hJbmZvKSByZXR1cm47XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1Blcm1pc3Npb24gPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzaG93U2V0dGluZ3NXb3JrZmxvdygpIHtcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgICBjb25zdCBjb21wUmVmID0gYXdhaXQgdGhpcy5fZmVkZXJhdGlvblNlcnZpY2UubG9hZFJlbW90ZU5ld0NvbXBvbmVudCgnY29tbW9uYXBwJywgJ1dvcmtmbG93U2V0dGluZ0RpYWxvZ0NvbXBvbmVudCcsIHRoaXMud29ya2Zsb3dTZXR0aW5nRGlhbG9nVmlld0NvbnRhaW5lcik7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UucGFyZW50U2V0dGluZyA9IHRoaXMuc2V0dGluZztcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5wYXJlbnRDb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnBhcmVudE1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vblNhdmVkLnN1YnNjcmliZShldmVudCA9PiB0aGlzLm9uU2F2ZVdvcmtmbG93U2V0dGluZ3MoZXZlbnQpKTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vblJlbW92ZWQuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMub25SZW1vdmVXb3JrZmxvd1NldHRpbmdzKGV2ZW50KSk7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25DYW5jZWwuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuX3Nob3dTZXR0aW5nc1dvcmtmbG93ID0gZmFsc2UpO1xuICAgIH1cblxuICAgIGFzeW5jIHNob3dTZXR0aW5nc1dvcmtmbG93TmV3KGRpYWxvZykge1xuICAgICAgICB0aGlzLndvcmtmbG93U2V0dGluZ01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSBhd2FpdCB0aGlzLl9mZWRlcmF0aW9uU2VydmljZS5sb2FkUmVtb3RlTmV3Q29tcG9uZW50KCdjb21tb25hcHAnLCAnV29ya2Zsb3dTZXR0aW5nTmV3Q29tcG9uZW50JywgdGhpcy53b3JrZmxvd3NldHRpbmduZXdWaWV3Q29udGFpbmVyKTtcbiAgICAgICAgZGlhbG9nLmJ1dHRvblRlbXBsYXRlSW5wdXQgPSBjb21wUmVmLmluc3RhbmNlLmJ1dHRvblRlbXBsYXRlO1xuICAgICAgICBjb21wUmVmLmluc3RhbmNlLnBhcmVudFNldHRpbmcgPSB0aGlzLnNldHRpbmc7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25TYXZlZC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5vblNhdmVXb3JrZmxvd1NldHRpbmdzTmV3KG51bGwpKTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5vbkNhbmNlbC5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy53b3JrZmxvd1NldHRpbmdNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNob3dMaW5rU2hhcmluZygpIHtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2hhcmluZ01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGNvbXBSZWYgPSBhd2FpdCB0aGlzLl9mZWRlcmF0aW9uU2VydmljZS5sb2FkUmVtb3RlTmV3Q29tcG9uZW50KCdjb21tb25hcHAnLCAnUGVybWlzc2lvblNoYXJpbmdDb21wb25lbnQnLCB0aGlzLnBlcm1pc3Npb25TaGFyaW5nVmlld0NvbnRhaW5lcik7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuaXRlbSA9IHRoaXMucm93RGF0YUN1cnJlbnQ7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuYmFzZVNlcnZpY2UgPSB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2U7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25DYW5jZWwuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMucGVybWlzc2lvblNoYXJpbmdNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2hvd0F0dGFjaGVkVGFzaygpIHtcbiAgICAgICAgdGhpcy5hdHRhY2hlZFRhc2tNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgICAgICAvLyB0aGlzLnBlcm1pc3Npb25TaGFyaW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY29tcFJlZiA9IGF3YWl0IHRoaXMuX2ZlZGVyYXRpb25TZXJ2aWNlLmxvYWRSZW1vdGVOZXdDb21wb25lbnQoJ2Nvbmd2aWVjJywgJ0Jhc2VDb25nVmllY0NvbXBvbmVudCcsIHRoaXMuYmFzZUNvbmdWaWVjVmlld0NvbnRhaW5lcik7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uuc2VydmljZUNvZGUgPSB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGU7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuZW50aXR5ID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWU7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2UuaXRlbUlkQXR0YWNoID0gdGhpcy5yb3dEYXRhQ3VycmVudC5pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2hvd0xpc3RQZXJtaXNzaW9uQnlJdGVtKCkge1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25MaXN0TW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgY29tcFJlZiA9IGF3YWl0IHRoaXMuX2ZlZGVyYXRpb25TZXJ2aWNlLmxvYWRSZW1vdGVOZXdDb21wb25lbnQoJ2NvbW1vbmFwcCcsICdXb3JrZmxvd1Blcm1pc3Npb25Db21wb25lbnQnLCB0aGlzLndvcmtmbG93UGVybWlzc2lvblZpZXdDb250YWluZXIpO1xuICAgICAgICAvLyB0aGlzLmRpYWxvZ1dvcmtmbG93UGVybWlzc2lvbi5idXR0b25UZW1wbGF0ZUlucHV0ID0gY29tcFJlZi5pbnN0YW5jZS5idXR0b25UZW1wbGF0ZTtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5pdGVtID0gdGhpcy5yb3dEYXRhQ3VycmVudDtcbiAgICAgICAgY29tcFJlZi5pbnN0YW5jZS5idXNpbmVzc1NldHRpbmcgPSB0aGlzLnNldHRpbmc7XG4gICAgICAgIGNvbXBSZWYuaW5zdGFuY2Uub25DYW5jZWwuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMucGVybWlzc2lvbkxpc3RNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZVdvcmtmbG93U2V0dGluZ3MoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZyA9IGV2ZW50O1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLnJlbG9hZFBhZ2UoKTtcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZVdvcmtmbG93U2V0dGluZ3NOZXcoZXZ0KSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dTZXR0aW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UucmVsb2FkUGFnZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZVdvcmtmbG93U2V0dGluZ3MoZXZ0KSB7XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIGdvVG9UYXNrKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ2jhu6ljIG7Eg25nIHhlbSBjaGkgdGnhur90IGPDtG5nIHZp4buHYyB44butIGzDvSB04budIHRyw6xuaCDEkWFuZyDEkcaw4bujYyBob8OgbiB0aGnhu4duLi4uJyk7XG4gICAgfVxuXG4gICAgYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzaygpIHtcbiAgICAgICAgLy9cbiAgICB9XG5cbiAgICBzYXZlUmVvcmRlcigpIHtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdDaOG6r2MgY2jhuq9uIGzGsHUgdGhheSDEkeG7lWknKS50aGVuKHJzID0+IHtcbiAgICAgICAgICAgIGlmICghcnMpIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmRhdGFTb3VyY2UubGVuZ3RoID09IDAgfHwgIXRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHJlb3JkZXJEYXRhID0gdGhpcy5tb2RlbC5kYXRhU291cmNlLm1hcCgoeCwgaSkgPT4gKHsgaWQ6IHguaWQsIG9yZGVyOiBpICsgMSArICgodGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgLSAxKSAqIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSkgfSkpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5zZXR0aW5nLnJlb3JkZXJGaWVsZCxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlLFxuICAgICAgICAgICAgICAgIHJlb3JkZXJEYXRhXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlPy5yZW9yZGVyRGF0YUJ5RmllbGQoZGF0YSkudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1Phuq9wIHjhur9wIGThu68gbGnhu4d1IHRow6BuaCBjw7RuZycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYSwgdnVpIGzDsm5nIGxpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHB1YmxpYyByZXRyaWV2ZUJ1dHRvblRlbXBsYXRlKGxzdEJ1dHRvblRlbXBsYXRlOiBFbGVtZW50UmVmW10pIHtcbiAgICAgICAgdGhpcy5sc3RCdXR0b25UZW1wbGF0ZSA9IGxzdEJ1dHRvblRlbXBsYXRlO1xuICAgIH1cbiAgICBhc3luYyBoYW5kbGVTaG93Rm9ybVNldHRpbmdCdXR0b24oKSB7XG4gICAgICAgIC8vIFThu5VuZyBo4bujcCBk4buvIGxp4buHdSBjw6FjIG7DunQgdOG7qyBuZ1RlbXBsYXRlICsgYmFzZSArIG1lbnVCdXR0b25cbiAgICAgICAgdGhpcy5vblJlbG9hZGVkLmVtaXQoRW51bVByb3BlcnRpZXMuUkVUUklFVkVfQlVUVE9OX1RFTVBMQVRFKTtcbiAgICAgICAgdGhpcy5idXR0b25BdXRob3JpemVNb2RlbC5kYXRhLmRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgY29uc3QgbHN0QnRuQ3VzdG9tOiBhbnlbXSA9IHRoaXMubHN0QnV0dG9uRWxlbWVudFtFbnVtUHJvcGVydGllcy5SRVNVTFRTXS5jb25jYXQodGhpcy5sc3RCdXR0b25UZW1wbGF0ZSk7XG4gICAgICAgIGNvbnN0IGxzdEJ0bkFjdGlvbjogQnV0dG9uQWN0aW9uW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxzdEJ0bkN1c3RvbSkge1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uVGV4dCA9IGl0ZW0ubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoRW51bVByb3BlcnRpZXMuTEFCRUwpID8/IGl0ZW0ubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoRW51bVByb3BlcnRpZXMuVE9PTFRJUClcbiAgICAgICAgICAgICAgICA/PyBpdGVtLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKEVudW1Qcm9wZXJ0aWVzLk5HX1JFRkxFQ1RfVEVYVCkgPz8gaXRlbS5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZShFbnVtUHJvcGVydGllcy5OR19SRUZMRUNUX0xBQkVMKSA/PyBpdGVtLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0O1xuICAgICAgICAgICAgaWYgKCFidXR0b25UZXh0IHx8IGxzdEJ0bkFjdGlvbi5zb21lKHAgPT4gcC5yYXdUZXh0ID09PSBidXR0b25UZXh0KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hZGRCdXR0b25BY3Rpb24obHN0QnRuQWN0aW9uLCBidXR0b25UZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbHN0TWVudUJ1dHRvbnM6IGFueTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxzdE1lbnVCdXR0b25zID0gYXdhaXQgdGhpcy5tZW51QnV0dG9ucyh7fSkgPz8gW107XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgbHN0TWVudUJ1dHRvbnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobHN0TWVudUJ1dHRvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBsc3RNZW51QnV0dG9ucy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5hZGRCdXR0b25BY3Rpb24obHN0QnRuQWN0aW9uLCBpdGVtLmxhYmVsKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5idXR0b25zUGVybWlzc2lvbkN1c3RvbS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxzdEJ0bkFjdGlvbi5wdXNoKC4uLnRoaXMuc2V0dGluZy5idXR0b25zUGVybWlzc2lvbkN1c3RvbSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnV0dG9uU2V0dGluZzogYW55ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkJVVFRPTl9BVVRIT1JJWkUpIHx8ICd7fScpO1xuICAgICAgICBidXR0b25TZXR0aW5nW3RoaXMuYXV0aG9yaXplQnV0dG9uS2V5XT8ubGVuZ3RoICYmIGJ1dHRvblNldHRpbmdbdGhpcy5hdXRob3JpemVCdXR0b25LZXldLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uSXRlbSA9IGxzdEJ0bkFjdGlvbi5maW5kKHAgPT4gcC5wZXJtaXNzaW9uQ29kZSA9PSBpdGVtLmNvZGUpO1xuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25JdGVtKSB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbkl0ZW0uaXNBdXRob3JpemUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25JdGVtLmlkID0gaXRlbS5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYnV0dG9uQXV0aG9yaXplTW9kZWwuZGF0YS5kYXRhU291cmNlID0gbHN0QnRuQWN0aW9uO1xuICAgICAgICB0aGlzLmJ1dHRvbkF1dGhvcml6ZU1vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgb25TaG93Rm9ybVNldHRpbmdCdXR0b24oKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZEFsbCA9IHRydWU7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tBbGwoKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNob3dGb3JtU2V0dGluZ0J1dHRvbigpO1xuICAgICAgICB9LCAxMDApO1xuXG4gICAgfVxuXG4gICAgcHVibGljIHNldEJ0blJlYWR5KGlzUmVhZHk6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pc0J0blJlYWR5ID0gaXNSZWFkeTtcbiAgICB9XG5cbiAgICBhZGRCdXR0b25BY3Rpb24obHN0QnRuQWN0aW9uOiBCdXR0b25BY3Rpb25bXSwgcmF3VGV4dDogc3RyaW5nLCBpZD86IHN0cmluZykge1xuICAgICAgICBpZCA/Pz0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25Db2RlID0gdGhpcy5fY29tbW9uU2VydmljZS5jb252ZXJ0U3RyaW5nVG9VblNpZ24ocmF3VGV4dCkucmVwbGFjZSgvIC9nLCAnXycpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIGxzdEJ0bkFjdGlvbi5wdXNoKFxuICAgICAgICAgICAgbmV3IEJ1dHRvbkFjdGlvbih7XG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgIHJhd1RleHQ6IHJhd1RleHQsXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbkNvZGU6IGBbJHt0aGlzLmF1dGhvcml6ZUJ1dHRvbktleX1dX1ske3Blcm1pc3Npb25Db2RlfV1gXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbiAgICBwdWJsaWMgYXN5bmMgc2V0QXV0aG9yaXplQnV0dG9uKGxzdEJ1dHRvblRlbXBsYXRlOiBFbGVtZW50UmVmW10pIHtcbiAgICAgICAgdGhpcy5hdXRob3JpemVCdXR0b25LZXkgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvXFwvL2csICdfJyk7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVCdXR0b25LZXkgPSBgJHt0aGlzLnNlcnZpY2VDb2RlLnRvVXBwZXJDYXNlKCkgfHwgdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBDb2RlLnRvVXBwZXJDYXNlKCl9XyR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhdGhpcy5zZXR0aW5nLnN1ZmZpeEF1dGhvcml6ZUNvZGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplQnV0dG9uS2V5ICs9IGBfJHt0aGlzLnNldHRpbmcuc3VmZml4QXV0aG9yaXplQ29kZX1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxzdFBlcm1pc3Npb25Db2RlID0gKGF3YWl0IHRoaXMuX2Jhc2VQZXJtaXNzaW9uU2VydmljZS5nZXRQZXJtaXNzaW9uQnlDb2RlKGBbJHt0aGlzLmF1dGhvcml6ZUJ1dHRvbktleX1dYCkpLmRhdGEgPz8gW107XG4gICAgICAgIGNvbnN0IGJ1dHRvblNldHRpbmc6IGFueSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5CVVRUT05fQVVUSE9SSVpFKSB8fCAne30nKTtcbiAgICAgICAgYnV0dG9uU2V0dGluZ1t0aGlzLmF1dGhvcml6ZUJ1dHRvbktleV0gPSBsc3RQZXJtaXNzaW9uQ29kZTtcbiAgICAgICAgdGhpcy5sc3RCdXR0b25UZW1wbGF0ZSA9IGxzdEJ1dHRvblRlbXBsYXRlO1xuICAgICAgICBpZiAoIWJ1dHRvblNldHRpbmdbdGhpcy5hdXRob3JpemVCdXR0b25LZXldLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pc0J0blJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkJVVFRPTl9BVVRIT1JJWkUsIEpTT04uc3RyaW5naWZ5KGJ1dHRvblNldHRpbmcpKTtcbiAgICAgICAgY29uc3QgbHN0TWVudUJ1dHRvbjogQnV0dG9uQWN0aW9uW10gPSBbXTtcbiAgICAgICAgbGV0IGxzdE1lbnVCdXR0b25zOiBhbnk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsc3RNZW51QnV0dG9ucyA9IGF3YWl0IHRoaXMubWVudUJ1dHRvbnMoe30pID8/IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIGxzdE1lbnVCdXR0b25zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsc3RNZW51QnV0dG9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNCdG5SZWFkeSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbHN0TWVudUJ1dHRvbnMuZm9yRWFjaChpdGVtID0+IHRoaXMuYWRkQnV0dG9uQWN0aW9uKGxzdE1lbnVCdXR0b24sIGl0ZW0ubGFiZWwpKTtcbiAgICAgICAgYnV0dG9uU2V0dGluZ1t0aGlzLmF1dGhvcml6ZUJ1dHRvbktleV0uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1CdG5NZW51ID0gbHN0TWVudUJ1dHRvbi5maW5kKHAgPT4gcC5wZXJtaXNzaW9uQ29kZSA9PSBpdGVtLmNvZGUpO1xuICAgICAgICAgICAgaWYgKGl0ZW1CdG5NZW51KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sc3RCdG5BdXRob3JpemVNZW51LnB1c2goaXRlbUJ0bk1lbnUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pc0J0blJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oYW5kbGVUYWJsZVJlbmRlcmVkKCk7XG4gICAgfVxuICAgIGhhbmRsZUNsb3NlQXV0aG9yaXplQnV0dG9uRm9ybSgpIHtcbiAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tBbGwoKTtcbiAgICAgICAgdGhpcy5idXR0b25BdXRob3JpemVNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlQ2xvc2VQcm9jZXNzV29ya2Zsb3dCYXNlKCkge1xuICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==
|