igniteui-angular 11.1.44 → 11.1.45
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/igniteui-angular.umd.js +14 -6
- package/bundles/igniteui-angular.umd.js.map +1 -1
- package/bundles/igniteui-angular.umd.min.js +1 -1
- package/bundles/igniteui-angular.umd.min.js.map +1 -1
- package/esm2015/lib/grids/grid-base.directive.js +6 -5
- package/esm2015/lib/grids/state.directive.js +5 -2
- package/esm2015/lib/time-picker/time-picker.component.js +3 -1
- package/fesm2015/igniteui-angular.js +11 -5
- package/fesm2015/igniteui-angular.js.map +1 -1
- package/igniteui-angular.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -648,6 +648,8 @@ export class IgxTimePickerComponent {
|
|
|
648
648
|
this.determineCursorPos();
|
|
649
649
|
if (this._ngControl) {
|
|
650
650
|
this._statusChanges$ = this._ngControl.statusChanges.subscribe(this.onStatusChanged.bind(this));
|
|
651
|
+
this._inputGroup.isRequired = this.required;
|
|
652
|
+
this._cdr.detectChanges();
|
|
651
653
|
}
|
|
652
654
|
}
|
|
653
655
|
}
|
|
@@ -1854,4 +1856,4 @@ IgxTimePickerModule.decorators = [
|
|
|
1854
1856
|
providers: []
|
|
1855
1857
|
},] }
|
|
1856
1858
|
];
|
|
1857
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsWUFBWSxFQUNmLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFFBQVEsRUFHUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUVWLFFBQVEsRUFDUixpQkFBaUIsRUFFcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxTQUFTLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RixPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQiw4QkFBOEIsRUFDOUIsNkJBQTZCLEVBQ2hDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFnQixJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakcsT0FBTyxFQUFxQix5QkFB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QUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7NkJBU3hDLFlBQVksU0FBQyx1QkFBdUI7O0FBcTFDekM7O0dBRUc7QUFpQ0gsTUFBTSxPQUFPLG1CQUFtQjs7O1lBaEMvQixRQUFRLFNBQUM7Z0JBQ04sWUFBWSxFQUFFO29CQUNWLHNCQUFzQjtvQkFDdEIsb0JBQW9CO29CQUNwQixzQkFBc0I7b0JBQ3RCLHVCQUF1QjtvQkFDdkIsb0JBQW9CO29CQUNwQixvQkFBb0I7b0JBQ3BCLDhCQUE4QjtvQkFDOUIsNkJBQTZCO29CQUM3QixxQkFBcUI7b0JBQ3JCLG1CQUFtQjtpQkFDdEI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNMLHNCQUFzQjtvQkFDdEIsOEJBQThCO29CQUM5Qiw2QkFBNkI7b0JBQzdCLHFCQUFxQjtvQkFDckIsbUJBQW1CO29CQUNuQixtQkFBbUI7aUJBQ3RCO2dCQUNELE9BQU8sRUFBRTtvQkFDTCxZQUFZO29CQUNaLG1CQUFtQjtvQkFDbkIsYUFBYTtvQkFDYixlQUFlO29CQUNmLGFBQWE7b0JBQ2IsZUFBZTtvQkFDZixzQkFBc0I7aUJBQ3pCO2dCQUNELFNBQVMsRUFBRSxFQUFFO2FBQ2hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21tb25Nb2R1bGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEluamVjdGFibGUsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBJbmplY3RvcixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBBZnRlclZpZXdDaGVja2VkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ0NvbnRyb2wsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEhBTU1FUl9HRVNUVVJFX0NPTkZJRywgSGFtbWVyR2VzdHVyZUNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSWd4SWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwTW9kdWxlLCBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvaW5wdXQtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlLCBJZ3hJbnB1dFN0YXRlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgICBJZ3hBbVBtSXRlbURpcmVjdGl2ZSxcbiAgICBJZ3hIb3VySXRlbURpcmVjdGl2ZSxcbiAgICBJZ3hNaW51dGVJdGVtRGlyZWN0aXZlLFxuICAgIElneFNlY29uZHNJdGVtRGlyZWN0aXZlLFxuICAgIElneEl0ZW1MaXN0RGlyZWN0aXZlLFxuICAgIElneFRpbWVQaWNrZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hUaW1lUGlja2VyQWN0aW9uc0RpcmVjdGl2ZVxufSBmcm9tICcuL3RpbWUtcGlja2VyLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIFN1YnNjcmlwdGlvbiwgbm9vcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRWRpdG9yUHJvdmlkZXIgfSBmcm9tICcuLi9jb3JlL2VkaXQtcHJvdmlkZXInO1xuaW1wb3J0IHsgSWd4VGltZVBpY2tlckJhc2UsIElHWF9USU1FX1BJQ0tFUl9DT01QT05FTlQsIFRpbWVQYXJ0cyB9IGZyb20gJy4vdGltZS1waWNrZXIuY29tbW9uJztcbmltcG9ydCB7IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9vdmVybGF5L3Njcm9sbCc7XG5pbXBvcnQgeyBBdXRvUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4uL3NlcnZpY2VzL292ZXJsYXkvcG9zaXRpb24nO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vc2VydmljZXMvb3ZlcmxheS91dGlsaXRpZXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0aHJvdHRsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElneEJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYnV0dG9uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4TWFza01vZHVsZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvbWFzay9tYXNrLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlLCBJZ3hUb2dnbGVNb2R1bGUsIElneFRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGltZURpc3BsYXlGb3JtYXRQaXBlLCBUaW1lSW5wdXRGb3JtYXRQaXBlIH0gZnJvbSAnLi90aW1lLXBpY2tlci5waXBlcyc7XG5pbXBvcnQgeyBJVGltZVBpY2tlclJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi90aW1lLXBpY2tlci1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgS0VZUywgSUJhc2VFdmVudEFyZ3MsIElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEludGVyYWN0aW9uTW9kZSB9IGZyb20gJy4uL2NvcmUvZW51bXMnO1xuaW1wb3J0IHsgSWd4VGV4dFNlbGVjdGlvbk1vZHVsZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGV4dC1zZWxlY3Rpb24vdGV4dC1zZWxlY3Rpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneExhYmVsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9sYWJlbC9sYWJlbC5kaXJlY3RpdmUnO1xuXG5cbmxldCBORVhUX0lEID0gMDtcbmNvbnN0IElURU1TX0NPVU5UID0gNztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRpbWVQaWNrZXJIYW1tZXJDb25maWcgZXh0ZW5kcyBIYW1tZXJHZXN0dXJlQ29uZmlnIHtcbiAgICBwdWJsaWMgb3ZlcnJpZGVzID0ge1xuICAgICAgICBwYW46IHsgZGlyZWN0aW9uOiBIYW1tZXIuRElSRUNUSU9OX1ZFUlRJQ0FMLCB0aHJlc2hvbGQ6IDEgfVxuICAgIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWd4VGltZVBpY2tlclZhbHVlQ2hhbmdlZEV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBvbGRWYWx1ZTogRGF0ZTtcbiAgICBuZXdWYWx1ZTogRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZ3hUaW1lUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICB0aW1lUGlja2VyOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50O1xuICAgIGN1cnJlbnRWYWx1ZTogRGF0ZTtcbiAgICBzZXRUaHJvdWdoVUk6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogSEFNTUVSX0dFU1RVUkVfQ09ORklHLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IFRpbWVQaWNrZXJIYW1tZXJDb25maWdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogSUdYX1RJTUVfUElDS0VSX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnaWd4LXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYDpob3N0IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9YFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4VGltZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzXG4gICAgSWd4VGltZVBpY2tlckJhc2UsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRWRpdG9yUHJvdmlkZXIsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyVmlld0NoZWNrZWQge1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFtpZF09XCInaWd4LXRpbWUtcGlja2VyLTUnXCIgZm9ybWF0PVwiaDptbSB0dFwiID48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC10aW1lLXBpY2tlci0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoZSBgaWd4LXRpbWUtcGlja2VyYCBjb21wb25lbnQuIEJ5IGRlZmF1bHQgYGRpc2FibGVkYCBpcyBzZXQgdG8gZmFsc2UuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgW2Rpc2FibGVkXT1cIid0cnVlJ1wiIFt2ZXJ0aWNhbF09XCJ0cnVlXCIgZm9ybWF0PVwiaDptbSB0dFwiID48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBzZXQgdGhlIGBtaW5WYWx1ZWAgdG8gbGltaXQgdGhlIHVzZXIgaW5wdXQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIHB1YmxpYyBtaW46IHN0cmluZyA9IFwiMDk6MDBcIjtcbiAgICAgKiAgLy8uLlxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgZm9ybWF0PVwiSEg6bW1cIiBbdmVydGljYWxdPVwidHJ1ZVwiIFttaW5WYWx1ZV09XCJtaW5cIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtaW5WYWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBzZXQgdGhlIGBtYXhWYWx1ZWAgdG8gbGltaXQgdGhlIHVzZXIgaW5wdXQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIHB1YmxpYyBtYXg6IHN0cmluZyA9IFwiMTg6MDBcIjtcbiAgICAgKiAgLy8uLlxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgZm9ybWF0PVwiSEg6bW1cIiBbdmVydGljYWxdPVwidHJ1ZVwiIFttYXhWYWx1ZV09XCJtYXhcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtYXhWYWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZGV0ZXJtaW5lcyB0aGUgc3BpbiBiZWhhdmlvci4gQnkgZGVmYXVsdCBgaXNTcGluTG9vcGAgaXMgc2V0IHRvIHRydWUuXG4gICAgICogVGhlIHNlY29uZHMsIG1pbnV0ZXMgYW5kIGhvdXIgc3Bpbm5pbmcgd2lsbCB3cmFwIGFyb3VuZCBieSBkZWZhdWx0LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFtpc1NwaW5Mb29wXT1cImZhbHNlXCIgaWQ9XCJ0aW1lLXBpY2tlclwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlzU3Bpbkxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgR2V0cy9TZXRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgYGlneFRpbWVQaWNrZXJgLiBCeSBkZWZhdWx0IGB2ZXJ0aWNhbGAgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFt2ZXJ0aWNhbF09XCJ0cnVlXCIgaWQ9XCJ0aW1lLXBpY2tlclwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBwcm9tcHQgdGhlIHVzZXIgZm9yIGlucHV0LlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgXCInLSdcIi5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbcHJvbXB0Q2hhcl0gPSBcIidfJ1wiPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFRpbWVQaWNrZXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwcm9tcHRDaGFyID0gJy0nO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBzd2l0Y2ggdGhlIGludGVyYWN0aW9uIG1vZGUgYmV0d2VlblxuICAgICAqIGEgZGlhbG9nIHBpY2tlciBvciBkcm9wZG93biB3aXRoIGVkaXRhYmxlIG1hc2tlZCBpbnB1dC5cbiAgICAgKiBEZWFmdWx0IGlzIGRpYWxvZyBwaWNrZXIuXG4gICAgICogYGBgaHRtbFxuICAgICAqIHB1YmxpYyBtb2RlID0gSW50ZXJhY3Rpb25Nb2RlLkRST1BET1dOO1xuICAgICAqICAvLy4uXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbbW9kZV09XCJtb2RlXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4VGltZVBpY2tlckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1vZGU6IEludGVyYWN0aW9uTW9kZSA9IEludGVyYWN0aW9uTW9kZS5EaWFsb2c7XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSBjb250YWluZXIgdGhlIHBvcHVwIGVsZW1lbnQgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXYgaWd4T3ZlcmxheU91dGxldCAjb3V0bGV0PVwib3ZlcmxheS1vdXRsZXRcIj48L2Rpdj5cbiAgICAgKiAvLy4uXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbb3V0bGV0XT1cIm91dGxldFwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKiBXaGVyZSBgb3V0bGV0YCBpcyBhbiBpbnN0YW5jZSBvZiBgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZWAgb3IgYW4gYEVsZW1lbnRSZWZgLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG91dGxldDogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB8IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gc2VsZWN0aW9uIGlzIG1hZGUuIFRoZSBldmVudCBjb250YWlucyB0aGUgc2VsZWN0ZWQgdmFsdWUuIFJldHVybnMge2BvbGRWYWx1ZWA6IGBEYXRlYCwgYG5ld1ZhbHVlYDogYERhdGVgfS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJ0b2FzdFwiKVxuICAgICAqIHByaXZhdGUgdG9hc3Q6IElneFRvYXN0Q29tcG9uZW50O1xuICAgICAqIHB1YmxpYyBvblZhbHVlQ2hhbmdlZCh0aW1lcGlja2VyKXtcbiAgICAgKiAgICAgdGhpcy50b2FzdC5vcGVuKClcbiAgICAgKiB9XG4gICAgICogIC8vLi4uXG4gICAgICogIGBgYFxuICAgICAqICBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciAob25WYWx1ZUNoYW5nZWQpPVwib25WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIDxpZ3gtdG9hc3QgI3RvYXN0IG1lc3NhZ2U9XCJUaGUgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCFcIj48L2lneC10b2FzdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElneFRpbWVQaWNrZXJWYWx1ZUNoYW5nZWRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gYW4gaW52YWxpZCB2YWx1ZSBpcyBiZWluZyBzZXQuIFJldHVybnMge2B0aW1lUGlja2VyYDogYGFueWAsIGBjdXJyZW50VmFsdWVgOiBgRGF0ZWAsIGBzZXRUaHJvdWdoVUlgOiBgYm9vbGVhbmB9XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBtaW46IHN0cmluZyA9IFwiMDk6MDBcIjtcbiAgICAgKiBwdWJsaWMgbWF4OiBzdHJpbmcgPSBcIjE4OjAwXCI7XG4gICAgICogIEBWaWV3Q2hpbGQoXCJ0b2FzdFwiKVxuICAgICAqIHByaXZhdGUgdG9hc3Q6IElneFRvYXN0Q29tcG9uZW50O1xuICAgICAqIHB1YmxpYyBvblZhbGlkYXRpb25GYWlsZWQodGltZXBpY2tlcil7XG4gICAgICogICAgIHRoaXMudG9hc3Qub3BlbigpO1xuICAgICAqIH1cbiAgICAgKiAgLy8uLi5cbiAgICAgKiAgYGBgXG4gICAgICogIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFttaW5WYWx1ZV09XCJtaW5cIiBbbWF4VmFsdWVdPVwibWF4XCIgKG9uVmFsaWRhdGlvbkZhaWxlZCk9XCJvblZhbGlkYXRpb25GYWlsZWQoJGV2ZW50KVwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIDxpZ3gtdG9hc3QgI3RvYXN0IG1lc3NhZ2U9XCJWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMDk6MDAgYW5kIDE4OjAwIVwiPjwvaWd4LXRvYXN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvblZhbGlkYXRpb25GYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElneFRpbWVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGEgdGltZVBpY2tlciBpcyBvcGVuZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hUaW1lUGlja2VyQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGEgdGltZVBpY2tlciBpcyBjbG9zZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hUaW1lUGlja2VyQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGEgdGltZVBpY2tlciBpcyBiZWluZyBjbG9zZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uQ2xvc2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdob3VyTGlzdCcpXG4gICAgcHVibGljIGhvdXJMaXN0OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ21pbnV0ZUxpc3QnKVxuICAgIHB1YmxpYyBtaW51dGVMaXN0OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlY29uZHNMaXN0JylcbiAgICBwdWJsaWMgc2Vjb25kc0xpc3Q6IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnYW1wbUxpc3QnKVxuICAgIHB1YmxpYyBhbXBtTGlzdDogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFRpbWVQaWNrZXJBY3Rpb25zRGlyZWN0aXZlLCB7IHJlYWQ6IElneFRpbWVQaWNrZXJBY3Rpb25zRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIHRpbWVQaWNrZXJBY3Rpb25zRGlyZWN0aXZlOiBJZ3hUaW1lUGlja2VyQWN0aW9uc0RpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hMYWJlbERpcmVjdGl2ZSlcbiAgICBwdWJsaWMgbGFiZWxEaXJlY3RpdmU6IElneExhYmVsRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4VG9nZ2xlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyB0b2dnbGVSZWY6IElneFRvZ2dsZURpcmVjdGl2ZTtcblxuICAgIC8qXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRUaW1lUGlja2VyVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFRpbWVQaWNrZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFRpbWVQaWNrZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hUaW1lUGlja2VyVGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwcm90ZWN0ZWQgdGltZVBpY2tlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hUaW1lUGlja2VyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKCdkcm9wZG93bklucHV0VGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGRyb3Bkb3duSW5wdXRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4SW5wdXREaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgX2lucHV0RWxlbWVudFJlZjogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4SW5wdXREaXJlY3RpdmUsIHsgcmVhZDogSWd4SW5wdXREaXJlY3RpdmUgfSlcbiAgICBwcml2YXRlIF9pbnB1dERpcmVjdGl2ZTogSWd4SW5wdXREaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneElucHV0RGlyZWN0aXZlLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlIH0pXG4gICAgcHJpdmF0ZSBfaW5wdXREaXJlY3RpdmVVc2VyVGVtcGxhdGU6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgQFZpZXdDaGlsZChJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LCB7IHJlYWQ6IElneElucHV0R3JvdXBDb21wb25lbnQgfSlcbiAgICBwcml2YXRlIF9pbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdGltZVBhcnRzOiBhbnkgPSBPYmplY3QuYXNzaWduKHt9LCBUaW1lUGFydHMpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBfaG91ckl0ZW1zID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIF9taW51dGVJdGVtcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBfc2Vjb25kc0l0ZW1zID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIF9hbXBtSXRlbXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBpc05vdEVtcHR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGRpc3BsYXlGb3JtYXQgPSBuZXcgVGltZURpc3BsYXlGb3JtYXRQaXBlKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBpbnB1dEZvcm1hdCA9IG5ldyBUaW1lSW5wdXRGb3JtYXRQaXBlKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZEhvdXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRNaW51dGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRTZWNvbmRzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdGVkQW1QbTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbWFzaygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFzayB8fCAnMDA6MDAgTEwnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgbWFzayh2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9tYXNrID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fZGlzcGxheVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRUaW1lKHRoaXMudmFsdWUsIHRoaXMuZm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheVZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGlzcGxheVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCB0aW1lIGZvcm1hdHRlZCBhcyBzdHJpbmcgdXNpbmcgdGhlIGBmb3JtYXRgIG9wdGlvbi5cbiAgICAgKiBJZiB0aGVyZSBpcyBubyBzZXQgdGltZSB0aGUgcmV0dXJuIGlzIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwcml2YXRlIHBpY2tlcjogSWd4VGltZVBpY2tlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgdGltZSA9IHRoaXMucGlja2VyLmRpc3BsYXlUaW1lO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlUaW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0VGltZSh0aGlzLnZhbHVlLCB0aGlzLmZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhvdXJWaWV3KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hvdXJWaWV3O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1pbnV0ZVZpZXcoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWludXRlVmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWNvbmRzVmlldygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWNvbmRzVmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBhbXBtVmlldygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbXBtVmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93Q2xlYXJCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5kaXNwbGF5VmFsdWUgJiYgdGhpcy5kaXNwbGF5VmFsdWUgIT09IHRoaXMucGFyc2VNYXNrKGZhbHNlKSkgfHwgdGhpcy5pc05vdEVtcHR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dIb3Vyc0xpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdC5pbmRleE9mKCdoJykgIT09IC0gMSB8fCB0aGlzLmZvcm1hdC5pbmRleE9mKCdIJykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93TWludXRlc0xpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdC5pbmRleE9mKCdtJykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93U2Vjb25kc0xpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdC5pbmRleE9mKCdzJykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93QW1QbUxpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdC5pbmRleE9mKCd0JykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZFNlY29uZHNFbnRyaWVzKCk6IGFueVtdIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kc0VudHJpZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2MDsgaSsrKSB7XG4gICAgICAgICAgICBzZWNvbmRzRW50cmllcy5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWNvbmRzRW50cmllcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZE1pbnV0ZUVudHJpZXMoKTogYW55W10ge1xuICAgICAgICBjb25zdCBtaW51dGVFbnRyaWVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjA7IGkrKykge1xuICAgICAgICAgICAgbWludXRlRW50cmllcy5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW51dGVFbnRyaWVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbGlkSG91ckVudHJpZXMoKTogYW55W10ge1xuICAgICAgICBjb25zdCBob3VyRW50cmllcyA9IFtdO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZm9ybWF0LmluZGV4T2YoJ2gnKSAhPT0gLTEgPyAxMyA6IDI0O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGhvdXJFbnRyaWVzLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhvdXJFbnRyaWVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGlucHV0IGdyb3VwIHRlbXBsYXRlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4VGltZVBpY2tlckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXJUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGltZVBpY2tlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09IEludGVyYWN0aW9uTW9kZS5EaWFsb2cgPyB0aGlzLmRlZmF1bHRUaW1lUGlja2VyVGVtcGxhdGUgOiB0aGlzLmRyb3Bkb3duSW5wdXRUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb250ZXh0IHBhc3NlZCB0byB0aGUgaW5wdXQgZ3JvdXAgdGVtcGxhdGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4VGltZVBpY2tlckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgZGlzcGxheVRpbWU6IHRoaXMuZGlzcGxheVRpbWUsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuZGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgb3BlbkRpYWxvZzogKHRhcmdldD86IEhUTUxFbGVtZW50KSA9PiB0aGlzLm9wZW5EaWFsb2codGFyZ2V0KVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgICAgICAgLy8gUnVuIHRoZSB2YWxpZGF0aW9uIHdpdGggZW1wdHkgb2JqZWN0IHRvIGNoZWNrIGlmIHJlcXVpcmVkIGlzIGVuYWJsZWQuXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcih7fSBhcyBBYnN0cmFjdENvbnRyb2wpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yICYmIGVycm9yLnJlcXVpcmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX3ZhbHVlOiBEYXRlO1xuICAgIHByaXZhdGUgX292ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzO1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuVGltZVBpY2tlclJlc1N0cmluZ3M7XG4gICAgcHJpdmF0ZSBfb2tCdXR0b25MYWJlbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfY2FuY2VsQnV0dG9uTGFiZWwgPSBudWxsO1xuICAgIHByaXZhdGUgX2Zvcm1hdDogc3RyaW5nO1xuICAgIHByaXZhdGUgX21hc2s6IHN0cmluZztcbiAgICBwcml2YXRlIF9kaXNwbGF5VmFsdWU6IHN0cmluZztcbiAgICBwcml2YXRlIF9pdGVtc0RlbHRhOiB7IGhvdXJzOiBudW1iZXI7IG1pbnV0ZXM6IG51bWJlcjsgc2Vjb25kczogbnVtYmVyIH0gPSB7IGhvdXJzOiAxLCBtaW51dGVzOiAxLCBzZWNvbmRzOiAxIH07XG5cbiAgICBwcml2YXRlIF9pc0hvdXJMaXN0TG9vcCA9IHRoaXMuaXNTcGluTG9vcDtcbiAgICBwcml2YXRlIF9pc01pbnV0ZUxpc3RMb29wID0gdGhpcy5pc1NwaW5Mb29wO1xuICAgIHByaXZhdGUgX2lzU2Vjb25kc0xpc3RMb29wID0gdGhpcy5pc1NwaW5Mb29wO1xuXG4gICAgcHJpdmF0ZSBfaG91clZpZXcgPSBbXTtcbiAgICBwcml2YXRlIF9taW51dGVWaWV3ID0gW107XG4gICAgcHJpdmF0ZSBfc2Vjb25kc1ZpZXcgPSBbXTtcbiAgICBwcml2YXRlIF9hbXBtVmlldyA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfZGF0ZUZyb21Nb2RlbDogRGF0ZTtcbiAgICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlcyQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9kcm9wRG93bk92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzO1xuICAgIHByaXZhdGUgX2RpYWxvZ092ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzO1xuXG4gICAgcHJpdmF0ZSBfcHJldlNlbGVjdGVkSG91cjogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ByZXZTZWxlY3RlZE1pbnV0ZTogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ByZXZTZWxlY3RlZFNlY29uZHM6IHN0cmluZztcbiAgICBwcml2YXRlIF9wcmV2U2VsZWN0ZWRBbVBtOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9vbk9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyPElneFRpbWVQaWNrZXJDb21wb25lbnQ+KCk7XG4gICAgcHJpdmF0ZSBfb25DbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4VGltZVBpY2tlckNvbXBvbmVudD4oKTtcblxuICAgIHByaXZhdGUgX2hvdXJzUG9zID0gbmV3IFNldCgpO1xuICAgIHByaXZhdGUgX21pbnV0ZXNQb3MgPSBuZXcgU2V0KCk7XG4gICAgcHJpdmF0ZSBfc2Vjb25kc1BvcyA9IG5ldyBTZXQoKTtcbiAgICBwcml2YXRlIF9hbVBtUG9zID0gbmV3IFNldCgpO1xuICAgIHByaXZhdGUgX25nQ29udHJvbDogTmdDb250cm9sID0gbnVsbDtcblxuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBEYXRlKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IGFsbG93cyB5b3UgdG8gc2V0IGEgdGltZSB1c2luZyB0aGUgYHZhbHVlYCBpbnB1dC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogcHVibGljIGRhdGU6IERhdGUgPSBuZXcgRGF0ZShEYXRlLm5vdygpKTtcbiAgICAgKiAgLy8uLi5cbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFt2YWx1ZV09XCJkYXRlXCIgZm9ybWF0PVwiaDptbSB0dFwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5faXNWYWx1ZVZhbGlkKHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGhpcy5fdmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcblxuICAgICAgICAgICAgY29uc3QgZGlzcFZhbCA9IHRoaXMuX2Zvcm1hdFRpbWUodGhpcy52YWx1ZSwgdGhpcy5mb3JtYXQpO1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gSW50ZXJhY3Rpb25Nb2RlLkRyb3BEb3duICYmIHRoaXMuX2Rpc3BsYXlWYWx1ZSAhPT0gZGlzcFZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gZGlzcFZhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYXJnczogSWd4VGltZVBpY2tlclZhbHVlQ2hhbmdlZEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZTogb2xkVmFsLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZW1pdChhcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElneFRpbWVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgICAgIHRpbWVQaWNrZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBzZXRUaHJvdWdoVUk6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRpb25GYWlsZWQuZW1pdChhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgYGlneC10aW1lLXBpY2tlcmAgY29tcG9uZW50LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlQaWNrXCIpXG4gICAgICogcHVibGljIHBpY2s6IElneFRpbWVQaWNrZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IHBpY2tTZWxlY3QgPSB0aGlzLnBpY2sudmFsdWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJVGltZVBpY2tlclJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSVRpbWVQaWNrZXJSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHJlbmRlcnMgT0sgYnV0dG9uIHdpdGggY3VzdG9tIHRleHQuIEJ5IGRlZmF1bHQgYG9rQnV0dG9uTGFiZWxgIGlzIHNldCB0byBPSy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBva0J1dHRvbkxhYmVsPSdTRVQnIFt2YWx1ZV09XCJkYXRlXCIgZm9ybWF0PVwiaDptbSB0dFwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBva0J1dHRvbkxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fb2tCdXR0b25MYWJlbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgbGFiZWwgb2Ygb2sgYnV0dG9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgb2tCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fb2tCdXR0b25MYWJlbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF90aW1lX3BpY2tlcl9vaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fb2tCdXR0b25MYWJlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCByZW5kZXJzIGNhbmNlbCBidXR0b24gd2l0aCBjdXN0b20gdGV4dC5cbiAgICAgKiBCeSBkZWZhdWx0IGBjYW5jZWxCdXR0b25MYWJlbGAgaXMgc2V0IHRvIENhbmNlbC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBjYW5jZWxCdXR0b25MYWJlbD0nRXhpdCcgW3ZhbHVlXT1cImRhdGVcIiBmb3JtYXQ9XCJoOm1tIHR0XCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGNhbmNlbEJ1dHRvbkxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsQnV0dG9uTGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIGxhYmVsIG9mIGNhbmNlbCBidXR0b24uXG4gICAgICovXG4gICAgcHVibGljIGdldCBjYW5jZWxCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fY2FuY2VsQnV0dG9uTGFiZWwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfdGltZV9waWNrZXJfY2FuY2VsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW5jZWxCdXR0b25MYWJlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBnZXRzL3NldHMgdGhlIGRlbHRhIGJ5IHdoaWNoIGhvdXIgYW5kIG1pbnV0ZSBpdGVtcyB3b3VsZCBiZSBjaGFuZ2VkIDxicj5cbiAgICAgKiB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIFVwL0Rvd24ga2V5cy5cbiAgICAgKiBCeSBkZWZhdWx0IGBpdGVtc0RlbHRhYCBpcyBzZXQgdG8gYHtob3VyczogMSwgbWludXRlczogMSwgc2Vjb25kczogMX1gXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgW2l0ZW1zRGVsdGFdPVwie2hvdXJzOjMsIG1pbnV0ZXM6NSwgc2Vjb25kczoxMH1cIiBpZD1cInRpbWUtcGlja2VyXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGl0ZW1zRGVsdGEodmFsdWUpIHtcbiAgICAgICAgdGhpcy5faXRlbXNEZWx0YSA9IHsgaG91cnM6IDEsIG1pbnV0ZXM6IDEsIHNlY29uZHM6IDEsIC4uLnZhbHVlIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc0RlbHRhKCk6IHsgaG91cnM6IG51bWJlcjsgbWludXRlczogbnVtYmVyOyBzZWNvbmRzOiBudW1iZXIgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0RlbHRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IEdldHMvU2V0cyBmb3JtYXQgb2YgdGltZSB3aGlsZSBgaWd4VGltZVBpY2tlcmAgZG9lcyBub3QgaGF2ZSBmb2N1cy4gPGJyPlxuICAgICAqIEJ5IGRlZmF1bHQgYGZvcm1hdGAgaXMgc2V0IHRvIGhoOm1tIHR0LiA8YnI+XG4gICAgICogTGlzdCBvZiB0aW1lLWZsYWdzOiA8YnI+XG4gICAgICogYGhgIDogaG91cnMgZmllbGQgaW4gMTItaG91cnMgZm9ybWF0IHdpdGhvdXQgbGVhZGluZyB6ZXJvIDxicj5cbiAgICAgKiBgaGhgIDogaG91cnMgZmllbGQgaW4gMTItaG91cnMgZm9ybWF0IHdpdGggbGVhZGluZyB6ZXJvIDxicj5cbiAgICAgKiBgSGAgOiBob3VycyBmaWVsZCBpbiAyNC1ob3VycyBmb3JtYXQgd2l0aG91dCBsZWFkaW5nIHplcm8gPGJyPlxuICAgICAqIGBISGAgOiBob3VycyBmaWVsZCBpbiAyNC1ob3VycyBmb3JtYXQgd2l0aCBsZWFkaW5nIHplcm8gPGJyPlxuICAgICAqIGBtYCA6IG1pbnV0ZXMgZmllbGQgd2l0aG91dCBsZWFkaW5nIHplcm8gPGJyPlxuICAgICAqIGBtbWAgOiBtaW51dGVzIGZpZWxkIHdpdGggbGVhZGluZyB6ZXJvIDxicj5cbiAgICAgKiBgc2AgOiBzZWNvbmRzIGZpZWxkIHdpdGhvdXQgbGVhZGluZyB6ZXJvIDxicj5cbiAgICAgKiBgc3NgIDogc2Vjb25kcyBmaWVsZCB3aXRoIGxlYWRpbmcgemVybyA8YnI+XG4gICAgICogYHR0YCA6IDIgY2hhcmFjdGVyIHN0cmluZyB3aGljaCByZXByZXNlbnRzIEFNL1BNIGZpZWxkIDxicj5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBmb3JtYXQ9XCJISDptXCIgaWQ9XCJ0aW1lLXBpY2tlclwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBmb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXQgfHwgJ2hoOm1tIHR0JztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGZvcm1hdChmb3JtYXRWYWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9IGZvcm1hdFZhbHVlO1xuICAgICAgICB0aGlzLm1hc2sgPSB0aGlzLl9mb3JtYXQuaW5kZXhPZigndHQnKSAhPT0gLTEgPyAnMDA6MDA6MDAgTEwnIDogJzAwOjAwOjAwJztcblxuICAgICAgICBpZiAoIXRoaXMuc2hvd0hvdXJzTGlzdCB8fCAhdGhpcy5zaG93TWludXRlc0xpc3QpIHtcbiAgICAgICAgICAgIHRoaXMudHJpbU1hc2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zaG93U2Vjb25kc0xpc3QpIHtcbiAgICAgICAgICAgIHRoaXMudHJpbU1hc2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLl9mb3JtYXRUaW1lKHRoaXMudmFsdWUsIHRoaXMuX2Zvcm1hdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRldGVybWluZUN1cnNvclBvcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGFsbG93cyB5b3UgdG8gbW9kaWZ5IG92ZXJsYXkgcG9zaXRpb25pbmcsIGludGVyYWN0aW9uIGFuZCBzY3JvbGwgYmVoYXZpb3IuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICogICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAqICAgICAgbW9kYWw6IGZhbHNlXG4gICAgICogIH1cbiAgICAgKiBgYGBcbiAgICAgKiAtLS1cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbb3ZlcmxheVNldHRpbmdzXT1cInNldHRpbmdzXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4VGltZVBpY2tlckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBvdmVybGF5U2V0dGluZ3ModmFsdWU6IE92ZXJsYXlTZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9vdmVybGF5U2V0dGluZ3MgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG92ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVNldHRpbmdzID8gdGhpcy5fb3ZlcmxheVNldHRpbmdzIDpcbiAgICAgICAgICAgICh0aGlzLm1vZGUgPT09IEludGVyYWN0aW9uTW9kZS5EaWFsb2cgPyB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MgOiB0aGlzLl9kcm9wRG93bk92ZXJsYXlTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5zcGFjZWJhcicsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5zcGFjZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93blNwYWNlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMub3BlbkRpYWxvZyh0aGlzLmdldElucHV0R3JvdXBFbGVtZW50KCkpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkFsdC5BcnJvd0Rvd24nKVxuICAgIHB1YmxpYyBvbkFsdEFycm93RG93bigpIHtcbiAgICAgICAgdGhpcy5vcGVuRGlhbG9nKHRoaXMuZ2V0SW5wdXRHcm91cEVsZW1lbnQoKSk7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICAvLyB1c2UgdGhpcyBmbGFnIHRvIG1ha2Ugc3VyZSB0aGF0IG1pbi9tYXhWYWx1ZSBhcmUgY2hlY2tlZCAoaW4gX2NvbnZlcnRNaW5NYXhWYWx1ZSgpIG1ldGhvZClcbiAgICAgICAgLy8gYWdhaW5zdCB0aGUgcmVhbCB2YWx1ZSB3aGVuIGluaXRpYWxpemluZyB0aGUgY29tcG9uZW50IGFuZCB2YWx1ZSBpcyBib3VuZCB2aWEgbmdNb2RlbFxuICAgICAgICB0aGlzLl9kYXRlRnJvbU1vZGVsID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSBJbnRlcmFjdGlvbk1vZGUuRHJvcERvd24pIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5fZm9ybWF0VGltZSh0aGlzLnZhbHVlLCB0aGlzLmZvcm1hdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgYXBwbHlEaXNhYmxlZFN0eWxlRm9ySXRlbShwZXJpb2Q6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMubWluVmFsdWUgfHwgIXRoaXMubWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaW5WYWx1ZURhdGU6IERhdGUgPSB0aGlzLmNvbnZlcnRNaW5NYXhWYWx1ZSh0aGlzLm1pblZhbHVlKTtcbiAgICAgICAgY29uc3QgbWF4VmFsdWVEYXRlOiBEYXRlID0gdGhpcy5jb252ZXJ0TWluTWF4VmFsdWUodGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgIGxldCBob3VyOiBudW1iZXIgPSBwYXJzZUludCh0aGlzLnNlbGVjdGVkSG91ciwgMTApO1xuICAgICAgICBsZXQgbWludXRlOiBudW1iZXIgPSBwYXJzZUludCh0aGlzLnNlbGVjdGVkTWludXRlLCAxMCk7XG4gICAgICAgIGxldCBzZWNvbmRzOiBudW1iZXIgPSBwYXJzZUludCh0aGlzLnNlbGVjdGVkU2Vjb25kcywgMTApO1xuICAgICAgICBsZXQgYW1QTTogc3RyaW5nID0gdGhpcy5zZWxlY3RlZEFtUG07XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShtaW5WYWx1ZURhdGUpO1xuICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgY2FzZSBUaW1lUGFydHMuSG91cjpcbiAgICAgICAgICAgICAgICBob3VyID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBUaW1lUGFydHMuTWludXRlOlxuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgVGltZVBhcnRzLlNlY29uZHM6XG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgVGltZVBhcnRzLkFNUE06XG4gICAgICAgICAgICAgICAgYW1QTSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFtUE0gPT09ICdQTScpIHtcbiAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZS5zZXRIb3Vycyhob3VyKTtcbiAgICAgICAgZGF0ZS5zZXRNaW51dGVzKG1pbnV0ZSk7XG4gICAgICAgIGRhdGUuc2V0U2Vjb25kcyhzZWNvbmRzKTtcbiAgICAgICAgcmV0dXJuIGRhdGUgPCBtaW5WYWx1ZURhdGUgfHwgZGF0ZSA+IG1heFZhbHVlRGF0ZTtcblxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogRGF0ZSkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dlbmVyYXRlSG91cnMoKTtcbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVNaW51dGVzKCk7XG4gICAgICAgIHRoaXMuX2dlbmVyYXRlU2Vjb25kcygpO1xuICAgICAgICBpZiAodGhpcy5mb3JtYXQuaW5kZXhPZigndHQnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQW1QbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5fbmdDb250cm9sID0gdGhpcy5faW5qZWN0b3IuZ2V0PE5nQ29udHJvbD4oTmdDb250cm9sLCBudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gSW50ZXJhY3Rpb25Nb2RlLkRyb3BEb3duICYmIHRoaXMuX2lucHV0RWxlbWVudFJlZikge1xuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuX2lucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGhyb3R0bGUoKCkgPT4gaW50ZXJ2YWwoMCwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgICAgICApLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlTLlVQX0FSUk9XIHx8IGV2ZW50LmtleSA9PT0gS0VZUy5VUF9BUlJPV19JRSB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09IEtFWVMuRE9XTl9BUlJPVyB8fCBldmVudC5rZXkgPT09IEtFWVMuRE9XTl9BUlJPV19JRSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwaW5PbkVkaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudG9nZ2xlUmVmICYmIHRoaXMuX2lucHV0R3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLmVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLl9pbnB1dEdyb3VwLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArICdweCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50b2dnbGVSZWYpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLm9uQ2xvc2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSBJbnRlcmFjdGlvbk1vZGUuRHJvcERvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Ecm9wRG93bkNsb3NlZCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub25DbG9zZWQuZW1pdCh0aGlzKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVJlZi5vbk9wZW5lZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk9wZW5lZC5lbWl0KHRoaXMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLm9uQ2xvc2luZy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2luZy5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICAvLyBJZiBjYW5jZWxlZCBpbiBhIHVzZXIgb25DbG9zaW5nIGhhbmRsZXJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IGZvY3VzIHRoZSBpbnB1dCBpZiBjbGlja2luZyBvdXRzaWRlIGluIGRyb3Bkb3duIG1vZGVcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0RWRpdEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiYgIShldmVudC5ldmVudCAmJiB0aGlzLm1vZGUgPT09IEludGVyYWN0aW9uTW9kZS5Ecm9wRG93bikpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVWYWxpZGl0eU9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmRldGVybWluZUN1cnNvclBvcygpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdHVzQ2hhbmdlcyQgPSB0aGlzLl9uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUodGhpcy5vblN0YXR1c0NoYW5nZWQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICAvLyBpZiBvbmUgc2V0cyBtb2RlIGF0IHJ1biB0aW1lIHRoaXMgZm9yY2VzIGluaXRpYWxpemF0aW9uIG9mIG5ldyBpZ3hJbnB1dEdyb3VwXG4gICAgICAgIC8vIEFzIGEgcmVzdWx0IGEgbmV3IGlneElucHV0RGlyZWN0aXZlIGlzIGluaXRpYWxpemVkIHRvby4gSW4gbmdBZnRlclZpZXdJbml0IG9mXG4gICAgICAgIC8vIHRoZSBuZXcgZGlyZWN0aXZlIGlzUmVxdWlyZWQgb2YgdGhlIGlneElucHV0R3JvdXAgaXMgc2V0IGFnYWluLiBIb3dldmVyXG4gICAgICAgIC8vIG5nQWZ0ZXJWaWV3SW5pdCBvZiB0aGUgdGltZSBwaWNrZXIgaXMgbm90IGNhbGxlZCBhZ2FpbiBhbmQgd2UgbWF5IGZpbmlzaCB3aXRoIHdyb25nXG4gICAgICAgIC8vIGlzUmVxdWlyZWQgaW4gaWd4SW5wdXRHcm91cC4gVGhpcyBpcyB3aHkgd2Ugc2hvdWxkIHNldCBpdCBoZXIsIG9ubHkgd2hlbiBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMuX2lucHV0R3JvdXAgJiYgdGhpcy5faW5wdXRHcm91cC5pc1JlcXVpcmVkICE9PSB0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dEdyb3VwLmlzUmVxdWlyZWQgPSB0aGlzLnJlcXVpcmVkO1xuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0dXNDaGFuZ2VzJCkge1xuICAgICAgICAgICAgdGhpcy5fc3RhdHVzQ2hhbmdlcyQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBjb252ZXJ0TWluTWF4VmFsdWUodmFsdWU6IHN0cmluZyk6IERhdGUge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMudmFsdWUgPyBuZXcgRGF0ZSh0aGlzLnZhbHVlKSA6IHRoaXMuX2RhdGVGcm9tTW9kZWwgPyBuZXcgRGF0ZSh0aGlzLl9kYXRlRnJvbU1vZGVsKSA6IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gdmFsdWUuc3BsaXQoL1tcXHM6XSsvKTtcbiAgICAgICAgbGV0IGhvdXI7IGxldCBtaW51dGVzOyBsZXQgc2Vjb25kczsgbGV0IGFtUE07XG5cbiAgICAgICAgZGF0ZS5zZXRTZWNvbmRzKDApO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dIb3Vyc0xpc3QpIHtcbiAgICAgICAgICAgIGhvdXIgPSBzZWN0aW9uc1swXTtcbiAgICAgICAgICAgIGRhdGUuc2V0SG91cnMocGFyc2VJbnQoaG91ciwgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNob3dNaW51dGVzTGlzdCkge1xuICAgICAgICAgICAgbWludXRlcyA9IHRoaXMuc2hvd0hvdXJzTGlzdCA/IHNlY3Rpb25zWzFdIDogc2VjdGlvbnNbMF07XG4gICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMocGFyc2VJbnQobWludXRlcywgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNob3dTZWNvbmRzTGlzdCkge1xuICAgICAgICAgICAgc2Vjb25kcyA9IHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtICh0aGlzLnNob3dBbVBtTGlzdCA/IDIgOiAxKV07XG4gICAgICAgICAgICBkYXRlLnNldFNlY29uZHMocGFyc2VJbnQoc2Vjb25kcywgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNob3dBbVBtTGlzdCkge1xuICAgICAgICAgICAgYW1QTSA9IHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtIDFdLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmICgoKHRoaXMuc2hvd0hvdXJzTGlzdCAmJiBkYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKSAhPT0gJzEyJykgfHxcbiAgICAgICAgICAgICAgICAoIXRoaXMuc2hvd0hvdXJzTGlzdCAmJiBkYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKSA8PSAnMTEnKSkgJiYgYW1QTSA9PT0gJ1BNJykge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpICsgMTIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd0hvdXJzTGlzdCAmJiBhbVBNID09PSAnQU0nICYmIGRhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpID4gJzExJykge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpIC0gMTIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93SG91cnNMaXN0ICYmIGRhdGUuZ2V0SG91cnMoKSA9PT0gMTIgJiYgYW1QTSA9PT0gJ0FNJykge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRFbGVtZW50UmVmID8gdGhpcy5faW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW5wdXRHcm91cEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dEdyb3VwID8gdGhpcy5faW5wdXRHcm91cC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogb3BlbnMgdGhlIGRpYWxvZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0YXJnZXQgSFRNTEVsZW1lbnQgLSB0aGUgdGFyZ2V0IGVsZW1lbnQgdG8gdXNlIGZvciBwb3NpdGlvbmluZyB0aGUgZHJvcCBkb3duIGNvbnRhaW5lciBhY2NvcmRpbmcgdG9cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbdmFsdWVdPVwiZGF0ZVwiIG1vZGU9XCJkcm9wZG93blwiICNyZXRlbXBsYXRlZD5cbiAgICAgKiAgIDxuZy10ZW1wbGF0ZSBpZ3hUaW1lUGlja2VyVGVtcGxhdGUgbGV0LW9wZW5EaWFsb2c9XCJvcGVuRGlhbG9nXCJcbiAgICAgKiAgICAgICAgICAgICAgICBsZXQtZGlzcGxheVRpbWU9XCJkaXNwbGF5VGltZVwiPlxuICAgICAqICAgICA8aWd4LWlucHV0LWdyb3VwPlxuICAgICAqICAgICAgIDxpbnB1dCAjZHJvcERvd25UYXJnZXQgaWd4SW5wdXQgW3ZhbHVlXT1cImRpc3BsYXlUaW1lXCIgLz5cbiAgICAgKiAgICAgICA8aWd4LXN1ZmZpeCAoY2xpY2spPVwib3BlbkRpYWxvZyhkcm9wRG93blRhcmdldClcIj5cbiAgICAgKiAgICAgICAgIDxpZ3gtaWNvbj5hbGFybTwvaWd4LWljb24+XG4gICAgICogICAgICAgPC9pZ3gtc3VmZml4PlxuICAgICAqICAgICA8L2lneC1pbnB1dC1ncm91cD5cbiAgICAgKiAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogPC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG9wZW5EaWFsb2codGFyZ2V0PzogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRvZ2dsZVJlZi5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9vbkRyb3BEb3duQ2xvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLm92ZXJsYXlTZXR0aW5ncztcblxuICAgICAgICBpZiAodGFyZ2V0ICYmIHNldHRpbmdzICYmIHNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIHNldHRpbmdzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vdXRsZXQpIHtcbiAgICAgICAgICAgIHNldHRpbmdzLm91dGxldCA9IHRoaXMub3V0bGV0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b2dnbGVSZWYub3BlbihzZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVDb250YWluZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTY3JvbGxzIGEgaG91ciBpdGVtIGludG8gdmlldy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogc2NyaGludG9WaWV3KHBpY2tlcikge1xuICAgICAqIHBpY2tlci5zY3JvbGxIb3VySW50b1ZpZXcoJzInKTtcbiAgICAgKiB9XG4gICAgICogIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyICNwaWNrZXIgZm9ybWF0PVwiaDptbSB0dFwiIChvbk9wZW5lZCk9XCJzY3JoaW50b1ZpZXcocGlja2VyKVwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gdG8gYmUgc2Nyb2xsZWQgaW4gdmlldy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2Nyb2xsSG91ckludG9WaWV3KGl0ZW06IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zaG93SG91cnNMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBob3VySW50b1ZpZXcgPSB0aGlzLl9zY3JvbGxJdGVtSW50b1ZpZXcoaXRlbSwgdGhpcy5faG91ckl0ZW1zLCB0aGlzLnNlbGVjdGVkSG91ciwgdGhpcy5faXNIb3VyTGlzdExvb3AsICdob3VyJyk7XG4gICAgICAgICAgICBpZiAoaG91ckludG9WaWV3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faG91clZpZXcgPSBob3VySW50b1ZpZXcudmlldztcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGhvdXJJbnRvVmlldy5zZWxlY3RlZEl0ZW07XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVJbnB1dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2Nyb2xscyBhIG1pbnV0ZSBpdGVtIGludG8gdmlldy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogc2NyTWludG9WaWV3KHBpY2tlcikge1xuICAgICAqIHBpY2tlci5zY3JvbGxNaW51dGVJbnRvVmlldygnMycpO1xuICAgICAqIH1cbiAgICAgKiAgYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgI3BpY2tlciBmb3JtYXQ9XCJoOm1tIHR0XCIgKG9uT3BlbmVkKT1cInNjck1pbnRvVmlldyhwaWNrZXIpXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSB0byBiZSBzY3JvbGxlZCBpbiB2aWV3LlxuICAgICAqL1xuICAgIHB1YmxpYyBzY3JvbGxNaW51dGVJbnRvVmlldyhpdGVtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd01pbnV0ZXNMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBtaW51dGVJbnRvVmlldyA9IHRoaXMuX3Njcm9sbEl0ZW1JbnRvVmlldyhpdGVtLCB0aGlzLl9taW51dGVJdGVtcywgdGhpcy5zZWxlY3RlZE1pbnV0ZSwgdGhpcy5faXNNaW51dGVMaXN0TG9vcCwgJ21pbnV0ZScpO1xuICAgICAgICAgICAgaWYgKG1pbnV0ZUludG9WaWV3KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWludXRlVmlldyA9IG1pbnV0ZUludG9WaWV3LnZpZXc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IG1pbnV0ZUludG9WaWV3LnNlbGVjdGVkSXRlbTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZUlucHV0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTY3JvbGxzIGEgc2Vjb25kcyBpdGVtIGludG8gdmlldy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogc2NyTWludG9WaWV3KHBpY2tlcikge1xuICAgICAqIHBpY2tlci5zY3JvbGxTZWNvbmRzSW50b1ZpZXcoJzQnKTtcbiAgICAgKiB9XG4gICAgICogIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyICNwaWNrZXIgZm9ybWF0PVwiaDptbSB0dFwiIChvbk9wZW5lZCk9XCJzY3JNaW50b1ZpZXcocGlja2VyKVwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gdG8gYmUgc2Nyb2xsZWQgaW4gdmlldy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2Nyb2xsU2Vjb25kc0ludG9WaWV3KGl0ZW06IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zaG93U2Vjb25kc0xpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZHNJbnRvVmlldyA9IHRoaXMuX3Njcm9sbEl0ZW1JbnRvVmlldyhpdGVtLFxuICAgICAgICAgICAgICAgIHRoaXMuX3NlY29uZHNJdGVtcywgdGhpcy5zZWxlY3RlZFNlY29uZHMsIHRoaXMuX2lzU2Vjb25kc0xpc3RMb29wLCAnc2Vjb25kcycpO1xuICAgICAgICAgICAgaWYgKHNlY29uZHNJbnRvVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlY29uZHNWaWV3ID0gc2Vjb25kc0ludG9WaWV3LnZpZXc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZHMgPSBzZWNvbmRzSW50b1ZpZXcuc2VsZWN0ZWRJdGVtO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlSW5wdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNjcm9sbHMgYW4gYW1wbSBpdGVtIGludG8gdmlldy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogc2NyQW1QbUludG9WaWV3KHBpY2tlcikge1xuICAgICAqIHBpY2tlci5zY3JvbGxBbVBtSW50b1ZpZXcoJ1BNJyk7XG4gICAgICogfVxuICAgICAqICBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciAjcGlja2VyIGZvcm1hdD1cImg6bW0gdHRcIiAob25PcGVuZWQpPVwic2NyQW1QbUludG9WaWV3KHBpY2tlcilcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIHRvIGJlIHNjcm9sbGVkIGluIHZpZXcuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbEFtUG1JbnRvVmlldyhpdGVtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0FtUG1MaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBhbXBtSW50b1ZpZXcgPSB0aGlzLl9zY3JvbGxJdGVtSW50b1ZpZXcoaXRlbSwgdGhpcy5fYW1wbUl0ZW1zLCB0aGlzLnNlbGVjdGVkQW1QbSwgZmFsc2UsIG51bGwpO1xuICAgICAgICAgICAgaWYgKGFtcG1JbnRvVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2FtcG1WaWV3ID0gYW1wbUludG9WaWV3LnZpZXc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFtUG0gPSBhbXBtSW50b1ZpZXcuc2VsZWN0ZWRJdGVtO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlSW5wdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmV4dEhvdXIoKSB7XG4gICAgICAgIGNvbnN0IG5leHRIb3VyID0gdGhpcy5fbmV4dEl0ZW0odGhpcy5faG91ckl0ZW1zLCB0aGlzLnNlbGVjdGVkSG91ciwgdGhpcy5faXNIb3VyTGlzdExvb3AsICdob3VyJyk7XG4gICAgICAgIHRoaXMuX2hvdXJWaWV3ID0gbmV4dEhvdXIudmlldztcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBuZXh0SG91ci5zZWxlY3RlZEl0ZW07XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVJbnB1dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHJldkhvdXIoKSB7XG4gICAgICAgIGNvbnN0IHByZXZIb3VyID0gdGhpcy5fcHJldkl0ZW0odGhpcy5faG91ckl0ZW1zLCB0aGlzLnNlbGVjdGVkSG91ciwgdGhpcy5faXNIb3VyTGlzdExvb3AsICdob3VyJyk7XG4gICAgICAgIHRoaXMuX2hvdXJWaWV3ID0gcHJldkhvdXIudmlldztcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBwcmV2SG91ci5zZWxlY3RlZEl0ZW07XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVJbnB1dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmV4dE1pbnV0ZSgpIHtcbiAgICAgICAgY29uc3QgbmV4dE1pbnV0ZSA9IHRoaXMuX25leHRJdGVtKHRoaXMuX21pbnV0ZUl0ZW1zLCB0aGlzLnNlbGVjdGVkTWludXRlLCB0aGlzLl9pc01pbnV0ZUxpc3RMb29wLCAnbWludXRlJyk7XG4gICAgICAgIHRoaXMuX21pbnV0ZVZpZXcgPSBuZXh0TWludXRlLnZpZXc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBuZXh0TWludXRlLnNlbGVjdGVkSXRlbTtcblxuICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZUlucHV0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2TWludXRlKCkge1xuICAgICAgICBjb25zdCBwcmV2TWludXRlID0gdGhpcy5fcHJldkl0ZW0odGhpcy5fbWludXRlSXRlbXMsIHRoaXMuc2VsZWN0ZWRNaW51dGUsIHRoaXMuX2lzTWludXRlTGlzdExvb3AsICdtaW51dGUnKTtcbiAgICAgICAgdGhpcy5fbWludXRlVmlldyA9IHByZXZNaW51dGUudmlldztcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHByZXZNaW51dGUuc2VsZWN0ZWRJdGVtO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlSW5wdXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5leHRTZWNvbmRzKCkge1xuICAgICAgICBjb25zdCBuZXh0U2Vjb25kcyA9IHRoaXMuX25leHRJdGVtKHRoaXMuX3NlY29uZHNJdGVtcywgdGhpcy5zZWxlY3RlZFNlY29uZHMsIHRoaXMuX2lzU2Vjb25kc0xpc3RMb29wLCAnc2Vjb25kcycpO1xuICAgICAgICB0aGlzLl9zZWNvbmRzVmlldyA9IG5leHRTZWNvbmRzLnZpZXc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWNvbmRzID0gbmV4dFNlY29uZHMuc2VsZWN0ZWRJdGVtO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlSW5wdXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHByZXZTZWNvbmRzKCkge1xuICAgICAgICBjb25zdCBwcmV2U2Vjb25kcyA9IHRoaXMuX3ByZXZJdGVtKHRoaXMuX3NlY29uZHNJdGVtcywgdGhpcy5zZWxlY3RlZFNlY29uZHMsIHRoaXMuX2lzU2Vjb25kc0xpc3RMb29wLCAnc2Vjb25kcycpO1xuICAgICAgICB0aGlzLl9zZWNvbmRzVmlldyA9IHByZXZTZWNvbmRzLnZpZXc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWNvbmRzID0gcHJldlNlY29uZHMuc2VsZWN0ZWRJdGVtO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlSW5wdXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5leHRBbVBtKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5fYW1wbUl0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZEFtUG0pO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ICsgMSA8IHRoaXMuX2FtcG1JdGVtcy5sZW5ndGggLSAzKSB7XG4gICAgICAgICAgICB0aGlzLl91cGRhdGVBbVBtVmlldyhzZWxlY3RlZEluZGV4IC0gMiwgc2VsZWN0ZWRJbmRleCArIDUpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFtUG0gPSB0aGlzLl9hbXBtSXRlbXNbc2VsZWN0ZWRJbmRleCArIDFdO1xuXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZUlucHV0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHByZXZBbVBtKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5fYW1wbUl0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZEFtUG0pO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID4gMykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQW1QbVZpZXcoc2VsZWN0ZWRJbmRleCAtIDQsIHNlbGVjdGVkSW5kZXggKyAzKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtID0gdGhpcy5fYW1wbUl0ZW1zW3NlbGVjdGVkSW5kZXggLSAxXTtcblxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVJbnB1dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgY3VycmVudCB2YWx1ZSBpcyB2YWxpZCBzZWxlY3RzIGl0LCBjbG9zZXMgdGhlIGRpYWxvZyBhbmQgcmV0dXJucyB0cnVlLCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1kaWFsb2cgY2xhc3M9XCJpZ3gtdGltZS1waWNrZXJfX2RpYWxvZy1wb3B1cFwiIFtyaWdodEJ1dHRvbkxhYmVsXT1cIm9rQnV0dG9uTGFiZWxcIiAob25SaWdodEJ1dHRvblNlbGVjdCk9XCJva0J1dHRvbkNsaWNrKClcIj5cbiAgICAgKiAvLy4uXG4gICAgICogPC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBva0J1dHRvbkNsaWNrKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0aW1lID0gdGhpcy5fZ2V0U2VsZWN0ZWRUaW1lKCk7XG4gICAgICAgIGlmICh0aGlzLl9pc1ZhbHVlVmFsaWQodGltZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW1lO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzOiBJZ3hUaW1lUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICB0aW1lUGlja2VyOiB0aGlzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogdGltZSxcbiAgICAgICAgICAgICAgICBzZXRUaHJvdWdoVUk6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm9uVmFsaWRhdGlvbkZhaWxlZC5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBkaWFsb2cgd2l0aG91dCBzZWxlY3RpbmcgdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIGNsYXNzPVwiaWd4LXRpbWUtcGlja2VyX19kaWFsb2ctcG9wdXBcIiBbbGVmdEJ1dHRvbkxhYmVsXT1cImNhbmNlbEJ1dHRvbkxhYmVsXCIgKG9uTGVmdEJ1dHRvblNlbGVjdCk9XCJjYW5jZWxCdXR0b25DbGljaygpXCI+XG4gICAgICogLy8uLi5cbiAgICAgKiA8L2lneC1kaWFsb2c+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNhbmNlbEJ1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSBJbnRlcmFjdGlvbk1vZGUuRHJvcERvd24pIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMuX2Zvcm1hdFRpbWUodGhpcy52YWx1ZSwgdGhpcy5mb3JtYXQpIDogdGhpcy5wYXJzZU1hc2soZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGhpcy5fcHJldlNlbGVjdGVkSG91cjtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRoaXMuX3ByZXZTZWxlY3RlZE1pbnV0ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZHMgPSB0aGlzLl9wcmV2U2VsZWN0ZWRTZWNvbmRzO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQW1QbSA9IHRoaXMuX3ByZXZTZWxlY3RlZEFtUG07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0aGUgaG91cnMgY3VycmVudGx5IGluIHZpZXcuXG4gICAgICogYGBgaHRtbFxuICAgICAqICBAVmlld0NoaWxkKFwiTXlDaGlsZFwiKVxuICAgICAqIHByaXZhdGUgcGlja2VyOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgaEluVmlldyA9IHRoaXMucGlja2VyLmhvdXJzSW5WaWV3O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaG91cnNJblZpZXcoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5faG91clZpZXcuZmlsdGVyKChob3VyKSA9PiBob3VyICE9PSAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0aGUgbWludXRlcyBjdXJyZW50bHkgaW4gdmlldy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogIEBWaWV3Q2hpbGQoXCJNeUNoaWxkXCIpXG4gICAgICogcHJpdmF0ZSBwaWNrZXI6IElneFRpbWVQaWNrZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBtaW5JblZpZXcgPSB0aGlzLnBpY2tlci5taW51dGVzSW5WaWV3O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgbWludXRlc0luVmlldygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW51dGVWaWV3LmZpbHRlcigobWludXRlKSA9PiBtaW51dGUgIT09ICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBzZWNvbmRzIGN1cnJlbnRseSBpbiB2aWV3LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwcml2YXRlIHBpY2tlcjogSWd4VGltZVBpY2tlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IG1pbkluVmlldyA9IHRoaXMucGlja2VyLnNlY29uZHNJblZpZXc7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWNvbmRzSW5WaWV3KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlY29uZHNWaWV3LmZpbHRlcigoc2Vjb25kcykgPT4gc2Vjb25kcyAhPT0gJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdGhlIEFNL1BNIGN1cnJlbnRseSBpbiB2aWV3LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwcml2YXRlIHBpY2tlcjogSWd4VGltZVBpY2tlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IEFwSW5WaWV3ID0gdGhpcy5waWNrZXIuYW1wbUluVmlldztcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGFtcG1JblZpZXcoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYW1wbVZpZXcuZmlsdGVyKChhbXBtKSA9PiBhbXBtICE9PSAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBkcm9wZG93bi9kaWFsb2cuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgI3RpbWVQaWNrZXI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoJ3RpbWVQaWNrZXInLCB7IHJlYWQ6IElneFRpbWVQaWNrZXJDb21wb25lbnQgfSkgcGlja2VyOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50O1xuICAgICAqIHBpY2tlci5jbG9zZSgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2dnbGVSZWYuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHBhcnNlTWFzayhwcmVzZXJ2ZUFtUG0gPSB0cnVlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWFza1dpdGhBbVBtID0gdGhpcy5tYXNrLnJlcGxhY2UobmV3IFJlZ0V4cCgnMCcsICdnJyksIHRoaXMucHJvbXB0Q2hhcikucmVwbGFjZSgnTEwnLCAnQU0nKTtcbiAgICAgICAgY29uc3QgcHVyZU1hc2sgPSB0aGlzLm1hc2sucmVwbGFjZShuZXcgUmVnRXhwKCcwJywgJ2cnKSwgdGhpcy5wcm9tcHRDaGFyKS5yZXBsYWNlKG5ldyBSZWdFeHAoJ0wnLCAnZycpLCB0aGlzLnByb21wdENoYXIpO1xuXG4gICAgICAgIHJldHVybiBwcmVzZXJ2ZUFtUG0gPyBtYXNrV2l0aEFtUG0gOiBwdXJlTWFzaztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b2dnbGVSZWYuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc05vdEVtcHR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGNvbnN0IG9sZFZhbCA9IG5ldyBEYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLnBhcnNlTWFzayhmYWxzZSk7XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEN1cnNvclBvc2l0aW9uKDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBUT0RPOiByZWZhY3RvcmluZyAtIHRoaXMudmFsdWUgc2hvdWxkIGJlIG51bGwgIzY1ODVcbiAgICAgICAgICAgIHRoaXMudmFsdWU/LnNldEhvdXJzKDAsIDAsIDApO1xuXG4gICAgICAgICAgICBpZiAob2xkVmFsLmdldFRpbWUoKSAhPT0gdGhpcy52YWx1ZT8uZ2V0VGltZSgpIHx8IHRoaXMuaXNSZXNldCgpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJnczogSWd4VGltZVBpY2tlclZhbHVlQ2hhbmdlZEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6IG9sZFZhbCxcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IHRoaXMudmFsdWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25JbnB1dChldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dE1hc2s6IHN0cmluZyA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgY29uc3Qgb2xkVmFsID0gbmV3IERhdGUodGhpcy52YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5pc05vdEVtcHR5ID0gaW5wdXRNYXNrICE9PSB0aGlzLnBhcnNlTWFzayhmYWxzZSk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGNhc2VzIHdoZXJlIGFsbCBlbXB0eSBwb3NpdGlvbnMgKHByb210cykgYXJlIGZpbGxlZCBhbmQgd2Ugd2FudCB0byB1cGRhdGVcbiAgICAgICAgLy8gdGltZXBpY2tlciBvd24gdmFsdWUgcHJvcGVydHkgaWYgaXQgaXMgYSB2YWxpZCBEYXRlXG4gICAgICAgIGlmIChpbnB1dE1hc2suaW5kZXhPZih0aGlzLnByb21wdENoYXIpID09PSAtMSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzRW50cnlWYWxpZChpbnB1dE1hc2spKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsID0gdGhpcy5jb252ZXJ0TWluTWF4VmFsdWUoaW5wdXRNYXNrKTtcbiAgICAgICAgICAgICAgICBpZiAob2xkVmFsLmdldFRpbWUoKSAhPT0gbmV3VmFsLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJnczogSWd4VGltZVBpY2tlclZhbGlkYXRpb25GYWlsZWRFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVQaWNrZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogbmV3IERhdGUoaW5wdXRNYXNrKSxcbiAgICAgICAgICAgICAgICAgICAgc2V0VGhyb3VnaFVJOiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRpb25GYWlsZWQuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgdXNlciBkZWxldGVzIHRoZSBkaXNwbGF5IHZhbHVlICh3aGVuIHByZXNzaW5nIGJhY2tzcGFjZSBvciBkZWxldGUpXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMudmFsdWUgfHwgaW5wdXRNYXNrLmxlbmd0aCA9PT0gMCB8fCAhdGhpcy5pc05vdEVtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLmlzTm90RW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIFRPRE86IHJlZmFjdG9yaW5nIC0gdGhpcy52YWx1ZSBzaG91bGQgYmUgbnVsbCAjNjU4NVxuICAgICAgICAgICAgdGhpcy52YWx1ZT8uc2V0SG91cnMoMCwgMCwgMCk7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0TWFzaztcbiAgICAgICAgICAgIGlmIChvbGRWYWwuZ2V0VGltZSgpICE9PSB0aGlzLnZhbHVlPy5nZXRUaW1lKCkgfHwgdGhpcy5pc1Jlc2V0KCkpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBEbyBub3QgZW1pdCBldmVudCB3aGVuIHRoZSBlZGl0b3IgaXMgZW1wdHkgIzY0ODJcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzOiBJZ3hUaW1lUGlja2VyVmFsdWVDaGFuZ2VkRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZTogb2xkVmFsLFxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZTogdGhpcy52YWx1ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZvY3VzKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNOb3RFbXB0eSA9IGV2ZW50LnRhcmdldC52YWx1ZSAhPT0gdGhpcy5wYXJzZU1hc2soZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25CbHVyKGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IEludGVyYWN0aW9uTW9kZS5Ecm9wRG93bikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMuaXNOb3RFbXB0eSA9IHZhbHVlICE9PSAnJztcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAodmFsdWUgIT09IHRoaXMucGFyc2VNYXNrKCkgfHwgdmFsdWUgIT09IHRoaXMucGFyc2VNYXNrKGZhbHNlKSkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNFbnRyeVZhbGlkKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLmNvbnZlcnRNaW5NYXhWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZSB8fCB0aGlzLnZhbHVlLmdldFRpbWUoKSAhPT0gbmV3VmFsLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElneFRpbWVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGltZVBpY2tlcjogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaHJvdWdoVUk6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25WYWxpZGF0aW9uRmFpbGVkLmVtaXQoYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudG9nZ2xlUmVmLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmFsaWRpdHlPbkJsdXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBtb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgdGhlIGNsaWNrIGlzIG5vdCBvbiB0aGUgaW5wdXQgYnV0IGluIGlucHV0IGdyb3VwXG4gICAgICAgIC8vIGUuZy4gb24gcHJlZml4IG9yIHN1ZmZpeCwgcHJldmVudCBkZWZhdWx0IGFuZCB0aGlzIHdheSBwcmV2ZW50IGJsdXJcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gdGhpcy5nZXRFZGl0RWxlbWVudCgpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBzcGluT25FZGl0KGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IHNpZ246IG51bWJlcjtcbiAgICAgICAgbGV0IGRpc3BsYXlWYWw6IHN0cmluZztcbiAgICAgICAgY29uc3QgY3VycmVudFZhbCA9IG5ldyBEYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pblZhbHVlID8gdGhpcy5jb252ZXJ0TWluTWF4VmFsdWUodGhpcy5taW5WYWx1ZSkgOiB0aGlzLmNvbnZlcnRNaW5NYXhWYWx1ZSgnMDA6MDAnKTtcbiAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZSA/IHRoaXMuY29udmVydE1pbk1heFZhbHVlKHRoaXMubWF4VmFsdWUpIDogdGhpcy5jb252ZXJ0TWluTWF4VmFsdWUoJzI0OjAwJyk7XG5cbiAgICAgICAgY29uc3QgY3Vyc29yID0gdGhpcy5fZ2V0Q3Vyc29yUG9zaXRpb24oKTtcblxuICAgICAgICBpZiAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG4gICAgICAgICAgICBzaWduID0ga2V5ID09PSBLRVlTLkRPV05fQVJST1cgfHwga2V5ID09PSBLRVlTLkRPV05fQVJST1dfSUUgPyAtMSA6IDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuZGVsdGFZKSB7XG4gICAgICAgICAgICBzaWduID0gZXZlbnQuZGVsdGFZIDwgMCA/IDEgOiAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5kaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtaW47XG4gICAgICAgICAgICBkaXNwbGF5VmFsID0gdGhpcy5fZm9ybWF0VGltZSh0aGlzLnZhbHVlLCB0aGlzLmZvcm1hdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoRGVsdGEgPSB0aGlzLml0ZW1zRGVsdGEuaG91cnMgKiA2MCArIChzaWduICogdGhpcy52YWx1ZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICAgICAgY29uc3QgbURlbHRhID0gdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXM7XG4gICAgICAgICAgICBjb25zdCBzRGVsdGEgPSB0aGlzLml0ZW1zRGVsdGEuc2Vjb25kcztcblxuICAgICAgICAgICAgaWYgKHRoaXMuY3Vyc29yT25Ib3VycyhjdXJzb3IsIHRoaXMuc2hvd0hvdXJzTGlzdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5fc3BpbkhvdXJzKGN1cnJlbnRWYWwsIG1pbiwgbWF4LCBoRGVsdGEsIHNpZ24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY3Vyc29yT25NaW51dGVzKGN1cnNvciwgdGhpcy5zaG93SG91cnNMaXN0LCB0aGlzLnNob3dNaW51dGVzTGlzdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5fc3Bpbk1pbnV0ZXMoY3VycmVudFZhbCwgbURlbHRhLCBzaWduKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnNvck9uU2Vjb25kcyhjdXJzb3IsIHRoaXMuc2hvd0hvdXJzTGlzdCwgdGhpcy5zaG93TWludXRlc0xpc3QsIHRoaXMuc2hvd1NlY29uZHNMaXN0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLl9zcGluU2Vjb25kcyhjdXJyZW50VmFsLCBzRGVsdGEsIHNpZ24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY3Vyc29yT25BbVBtKGN1cnNvciwgdGhpcy5zaG93SG91cnNMaXN0LCB0aGlzLnNob3dNaW51dGVzTGlzdCwgdGhpcy5zaG93U2Vjb25kc0xpc3QsIHRoaXMuc2hvd0FtUG1MaXN0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25zID0gdGhpcy5kaXNwbGF5VmFsdWUuc3BsaXQoL1tcXHM6XSsvKTtcbiAgICAgICAgICAgICAgICBzaWduID0gc2VjdGlvbnNbc2VjdGlvbnMubGVuZ3RoIC0gMV0gPT09ICdBTScgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbC5zZXRIb3VycyhjdXJyZW50VmFsLmdldEhvdXJzKCkgKyAoc2lnbiAqIDEyKSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gY3VycmVudFZhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGlzcGxheVZhbCA9IHRoaXMuX2Zvcm1hdFRpbWUodGhpcy52YWx1ZSwgdGhpcy5mb3JtYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWlub3IgaGFjayBmb3IgcHJldmVudGluZyBjdXJzb3IganVtcGluZyBpbiBJRVxuICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSB0aGlzLmlucHV0Rm9ybWF0LnRyYW5zZm9ybShkaXNwbGF5VmFsKTtcbiAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLl9kaXNwbGF5VmFsdWU7XG4gICAgICAgIHRoaXMuX3NldEN1cnNvclBvc2l0aW9uKGN1cnNvcik7XG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NldEN1cnNvclBvc2l0aW9uKGN1cnNvcik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblN0YXR1c0NoYW5nZWQoKSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5faW5wdXREaXJlY3RpdmUgfHwgdGhpcy5faW5wdXREaXJlY3RpdmVVc2VyVGVtcGxhdGU7XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgaWYgKCh0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC50b3VjaGVkIHx8IHRoaXMuX25nQ29udHJvbC5jb250cm9sLmRpcnR5KSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC52YWxpZGF0b3IgfHwgdGhpcy5fbmdDb250cm9sLmNvbnRyb2wuYXN5bmNWYWxpZGF0b3IpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lucHV0R3JvdXAuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnZhbGlkID0gdGhpcy5fbmdDb250cm9sLnZhbGlkID8gSWd4SW5wdXRTdGF0ZS5WQUxJRCA6IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC52YWxpZCA9IHRoaXMuX25nQ29udHJvbC52YWxpZCA/IElneElucHV0U3RhdGUuSU5JVElBTCA6IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlucHV0LnZhbGlkID0gSWd4SW5wdXRTdGF0ZS5JTklUSUFMO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dEdyb3VwICYmIHRoaXMuX2lucHV0R3JvdXAuaXNSZXF1aXJlZCAhPT0gdGhpcy5yZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRHcm91cC5pc1JlcXVpcmVkID0gdGhpcy5yZXF1aXJlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdHJpbU1hc2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFzayA9IHRoaXMubWFzay5zbGljZSh0aGlzLm1hc2suaW5kZXhPZignOicpICsgMSwgdGhpcy5tYXNrLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXRlcm1pbmVDdXJzb3JQb3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJDdXJzb3JQb3MoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFyIG9mIHRoaXMuZm9ybWF0KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGNoYXIpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdIJzpcbiAgICAgICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2hvdXJzUG9zLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdXJzUG9zLmFkZCh0aGlzLmZvcm1hdC5pbmRleE9mKGNoYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdXJzUG9zLmFkZCh0aGlzLmZvcm1hdC5sYXN0SW5kZXhPZihjaGFyKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faG91cnNQb3MuYWRkKHRoaXMuZm9ybWF0Lmxhc3RJbmRleE9mKGNoYXIpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWludXRlc1Bvcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9taW51dGVzUG9zLmFkZCh0aGlzLmZvcm1hdC5pbmRleE9mKGNoYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21pbnV0ZXNQb3MuYWRkKHRoaXMuZm9ybWF0Lmxhc3RJbmRleE9mKGNoYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9taW51dGVzUG9zLmFkZCh0aGlzLmZvcm1hdC5sYXN0SW5kZXhPZihjaGFyKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NlY29uZHNQb3Muc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Vjb25kc1Bvcy5hZGQodGhpcy5mb3JtYXQuaW5kZXhPZihjaGFyKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWNvbmRzUG9zLmFkZCh0aGlzLmZvcm1hdC5sYXN0SW5kZXhPZihjaGFyKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Vjb25kc1Bvcy5hZGQodGhpcy5mb3JtYXQubGFzdEluZGV4T2YoY2hhcikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hbVBtUG9zLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FtUG1Qb3MuYWRkKHRoaXMuZm9ybWF0LmluZGV4T2YoY2hhcikpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYW1QbVBvcy5hZGQodGhpcy5mb3JtYXQubGFzdEluZGV4T2YoY2hhcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FtUG1Qb3MuYWRkKHRoaXMuZm9ybWF0Lmxhc3RJbmRleE9mKGNoYXIpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckN1cnNvclBvcygpIHtcbiAgICAgICAgdGhpcy5faG91cnNQb3MuZm9yRWFjaCh2ID0+IHRoaXMuX2hvdXJzUG9zLmRlbGV0ZSh2KSk7XG4gICAgICAgIHRoaXMuX21pbnV0ZXNQb3MuZm9yRWFjaCh2ID0+IHRoaXMuX21pbnV0ZXNQb3MuZGVsZXRlKHYpKTtcbiAgICAgICAgdGhpcy5fc2Vjb25kc1Bvcy5mb3JFYWNoKHYgPT4gdGhpcy5fc2Vjb25kc1Bvcy5kZWxldGUodikpO1xuICAgICAgICB0aGlzLl9hbVBtUG9zLmZvckVhY2godiA9PiB0aGlzLl9hbVBtUG9zLmRlbGV0ZSh2KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2Nyb2xsSXRlbUludG9WaWV3KGl0ZW06IHN0cmluZywgaXRlbXM6IGFueVtdLCBzZWxlY3RlZEl0ZW06IHN0cmluZywgaXNMaXN0TG9vcDogYm9vbGVhbiwgdmlld1R5cGU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGxldCBpdGVtSW50b1ZpZXc7XG4gICAgICAgIGlmIChpdGVtcykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSAoaXRlbSA9PT0gJ0FNJyB8fCBpdGVtID09PSAnUE0nKSA/IGl0ZW1zLmluZGV4T2YoaXRlbSkgOiBpdGVtcy5pbmRleE9mKHBhcnNlSW50KGl0ZW0sIDEwKSk7XG4gICAgICAgICAgICBsZXQgdmlldztcblxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0xpc3RMb29wKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbSA9IHRoaXMuX2l0ZW1Ub1N0cmluZyhpdGVtc1tpbmRleCAtIDFdLCB2aWV3VHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtSW50b1ZpZXcgPSB0aGlzLl9uZXh0SXRlbShpdGVtcywgc2VsZWN0ZWRJdGVtLCBpc0xpc3RMb29wLCB2aWV3VHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW0gPSB0aGlzLl9pdGVtVG9TdHJpbmcoaXRlbXNbMV0sIHZpZXdUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JbnRvVmlldyA9IHRoaXMuX3ByZXZJdGVtKGl0ZW1zLCBzZWxlY3RlZEl0ZW0sIGlzTGlzdExvb3AsIHZpZXdUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXcgPSBpdGVtcy5zbGljZShpbmRleCAtIDMsIGluZGV4ICsgNCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbSA9IHRoaXMuX2l0ZW1Ub1N0cmluZyhpdGVtc1tpbmRleF0sIHZpZXdUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUludG9WaWV3ID0geyBzZWxlY3RlZEl0ZW0sIHZpZXcgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXRlbUludG9WaWV3LnZpZXcgPSB0aGlzLl92aWV3VG9TdHJpbmcoaXRlbUludG9WaWV3LnZpZXcsIHZpZXdUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbUludG9WaWV3O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ZpZXdUb1N0cmluZyh2aWV3OiBhbnksIHZpZXdUeXBlOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgKHZpZXdbaV0pICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHZpZXdbaV0gPSB0aGlzLl9pdGVtVG9TdHJpbmcodmlld1tpXSwgdmlld1R5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2aWV3O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2l0ZW1Ub1N0cmluZyhpdGVtOiBhbnksIHZpZXdUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoaXRlbSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgaXRlbSA9ICcnO1xuICAgICAgICB9IGVsc2UgaWYgKHZpZXdUeXBlICYmIHR5cGVvZiAoaXRlbSkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBsZWFkWmVyb0hvdXIgPSAoaXRlbSA8IDEwICYmICh0aGlzLmZvcm1hdC5pbmRleE9mKCdoaCcpICE9PSAtMSB8fCB0aGlzLmZvcm1hdC5pbmRleE9mKCdISCcpICE9PSAtMSkpO1xuICAgICAgICAgICAgY29uc3QgbGVhZFplcm9NaW51dGUgPSAoaXRlbSA8IDEwICYmIHRoaXMuZm9ybWF0LmluZGV4T2YoJ21tJykgIT09IC0xKTtcbiAgICAgICAgICAgIGNvbnN0IGxlYWRaZXJvU2Vjb25kcyA9IChpdGVtIDwgMTAgJiYgdGhpcy5mb3JtYXQuaW5kZXhPZignc3MnKSAhPT0gLTEpO1xuXG4gICAgICAgICAgICBjb25zdCBsZWFkWmVybyA9IHtcbiAgICAgICAgICAgICAgICBob3VyOiBsZWFkWmVyb0hvdXIsXG4gICAgICAgICAgICAgICAgbWludXRlOiBsZWFkWmVyb01pbnV0ZSxcbiAgICAgICAgICAgICAgICBzZWNvbmRzOiBsZWFkWmVyb1NlY29uZHNcbiAgICAgICAgICAgIH1bdmlld1R5cGVdO1xuXG4gICAgICAgICAgICBpdGVtID0gKGxlYWRaZXJvKSA/ICcwJyArIGl0ZW0gOiBgJHtpdGVtfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcHJldkl0ZW0oaXRlbXM6IGFueVtdLCBzZWxlY3RlZEl0ZW06IHN0cmluZywgaXNMaXN0TG9vcDogYm9vbGVhbiwgdmlld1R5cGU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSBpdGVtcy5pbmRleE9mKHBhcnNlSW50KHNlbGVjdGVkSXRlbSwgMTApKTtcbiAgICAgICAgY29uc3QgaXRlbXNDb3VudCA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgbGV0IHZpZXc7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICB2aWV3ID0gaXRlbXMuc2xpY2UoMCwgNyk7XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW0gPSBpdGVtc1szXTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0xpc3RMb29wKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCAtIDQgPCAwKSB7XG4gICAgICAgICAgICAgICAgdmlldyA9IGl0ZW1zLnNsaWNlKGl0ZW1zQ291bnQgLSAoNCAtIHNlbGVjdGVkSW5kZXgpLCBpdGVtc0NvdW50KTtcbiAgICAgICAgICAgICAgICB2aWV3ID0gdmlldy5jb25jYXQoaXRlbXMuc2xpY2UoMCwgc2VsZWN0ZWRJbmRleCArIDMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRJbmRleCArIDQgPiBpdGVtc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgdmlldyA9IGl0ZW1zLnNsaWNlKHNlbGVjdGVkSW5kZXggLSA0LCBpdGVtc0NvdW50KTtcbiAgICAgICAgICAgICAgICB2aWV3ID0gdmlldy5jb25jYXQoaXRlbXMuc2xpY2UoMCwgc2VsZWN0ZWRJbmRleCArIDMgLSBpdGVtc0NvdW50KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZpZXcgPSBpdGVtcy5zbGljZShzZWxlY3RlZEluZGV4IC0gNCwgc2VsZWN0ZWRJbmRleCArIDMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW0gPSAoc2VsZWN0ZWRJbmRleCA9PT0gMCkgPyBpdGVtc1tpdGVtc0NvdW50IC0gMV0gOiBpdGVtc1tzZWxlY3RlZEluZGV4IC0gMV07XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRJbmRleCA+IDMpIHtcbiAgICAgICAgICAgIHZpZXcgPSBpdGVtcy5zbGljZShzZWxlY3RlZEluZGV4IC0gNCwgc2VsZWN0ZWRJbmRleCArIDMpO1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtID0gaXRlbXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkSW5kZXggPT09IDMpIHtcbiAgICAgICAgICAgIHZpZXcgPSBpdGVtcy5zbGljZSgwLCA3KTtcbiAgICAgICAgfVxuICAgICAgICB2aWV3ID0gdGhpcy5fdmlld1RvU3RyaW5nKHZpZXcsIHZpZXdUeXBlKTtcbiAgICAgICAgc2VsZWN0ZWRJdGVtID0gdGhpcy5faXRlbVRvU3RyaW5nKHNlbGVjdGVkSXRlbSwgdmlld1R5cGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX25leHRJdGVtKGl0ZW1zOiBhbnlbXSwgc2VsZWN0ZWRJdGVtOiBzdHJpbmcsIGlzTGlzdExvb3A6IGJvb2xlYW4sIHZpZXdUeXBlOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gaXRlbXMuaW5kZXhPZihwYXJzZUludChzZWxlY3RlZEl0ZW0sIDEwKSk7XG4gICAgICAgIGNvbnN0IGl0ZW1zQ291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIGxldCB2aWV3O1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdmlldyA9IGl0ZW1zLnNsaWNlKDAsIDcpO1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtID0gaXRlbXNbM107XG4gICAgICAgIH0gZWxzZSBpZiAoaXNMaXN0TG9vcCkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPCAyKSB7XG4gICAgICAgICAgICAgICAgdmlldyA9IGl0ZW1zLnNsaWNlKGl0ZW1zQ291bnQgLSAoMiAtIHNlbGVjdGVkSW5kZXgpLCBpdGVtc0NvdW50KTtcbiAgICAgICAgICAgICAgICB2aWV3ID0gdmlldy5jb25jYXQoaXRlbXMuc2xpY2UoMCwgc2VsZWN0ZWRJbmRleCArIDUpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRJbmRleCArIDQgPj0gaXRlbXNDb3VudCkge1xuICAgICAgICAgICAgICAgIHZpZXcgPSBpdGVtcy5zbGljZShzZWxlY3RlZEluZGV4IC0gMiwgaXRlbXNDb3VudCk7XG4gICAgICAgICAgICAgICAgdmlldyA9IHZpZXcuY29uY2F0KGl0ZW1zLnNsaWNlKDAsIHNlbGVjdGVkSW5kZXggKyA1IC0gaXRlbXNDb3VudCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2aWV3ID0gaXRlbXMuc2xpY2Uoc2VsZWN0ZWRJbmRleCAtIDIsIHNlbGVjdGVkSW5kZXggKyA1KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtID0gKHNlbGVjdGVkSW5kZXggPT09IGl0ZW1zQ291bnQgLSAxKSA/IGl0ZW1zWzBdIDogaXRlbXNbc2VsZWN0ZWRJbmRleCArIDFdO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkSW5kZXggKyAxIDwgaXRlbXNDb3VudCAtIDMpIHtcbiAgICAgICAgICAgIHZpZXcgPSBpdGVtcy5zbGljZShzZWxlY3RlZEluZGV4IC0gMiwgc2VsZWN0ZWRJbmRleCArIDUpO1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtID0gaXRlbXNbc2VsZWN0ZWRJbmRleCArIDFdO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkSW5kZXggPT09IGl0ZW1zQ291bnQgLSA0KSB7XG4gICAgICAgICAgICB2aWV3ID0gaXRlbXMuc2xpY2Uoc2VsZWN0ZWRJbmRleCAtIDMsIGl0ZW1zQ291bnQpO1xuICAgICAgICB9XG4gICAgICAgIHZpZXcgPSB0aGlzLl92aWV3VG9TdHJpbmcodmlldywgdmlld1R5cGUpO1xuICAgICAgICBzZWxlY3RlZEl0ZW0gPSB0aGlzLl9pdGVtVG9TdHJpbmcoc2VsZWN0ZWRJdGVtLCB2aWV3VHlwZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW0sXG4gICAgICAgICAgICB2aWV3XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZm9ybWF0VGltZSh2YWx1ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgaG91ciA9IHZhbHVlLmdldEhvdXJzKCk7XG4gICAgICAgICAgICBsZXQgZm9ybWF0dGVkSG91cjtcblxuICAgICAgICAgICAgY29uc3QgbWludXRlID0gdmFsdWUuZ2V0TWludXRlcygpO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHZhbHVlLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNvbnN0IGFtUE0gPSAoaG91ciA+IDExKSA/ICdQTScgOiAnQU0nO1xuXG4gICAgICAgICAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ2gnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgLT0gMTI7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZEhvdXIgPSBob3VyIDwgMTAgJiYgZm9ybWF0LmluZGV4T2YoJ2hoJykgIT09IC0xID8gJzAnICsgaG91ciA6IGAke2hvdXJ9YDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkSG91ciA9ICcxMic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTAgJiYgZm9ybWF0LmluZGV4T2YoJ2hoJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZEhvdXIgPSAnMCcgKyBob3VyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZEhvdXIgPSBgJHtob3VyfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA8IDEwICYmIGZvcm1hdC5pbmRleE9mKCdISCcpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRIb3VyID0gJzAnICsgaG91cjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRIb3VyID0gYCR7aG91cn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkTWludXRlID0gbWludXRlIDwgMTAgJiYgZm9ybWF0LmluZGV4T2YoJ21tJykgIT09IC0xID8gJzAnICsgbWludXRlIDogYCR7bWludXRlfWA7XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFNlY29uZHMgPSBzZWNvbmRzIDwgMTAgJiYgZm9ybWF0LmluZGV4T2YoJ3NzJykgIT09IC0xID8gJzAnICsgc2Vjb25kcyA6IGAke3NlY29uZHN9YDtcblxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKCdoaCcsIGZvcm1hdHRlZEhvdXIpLnJlcGxhY2UoJ2gnLCBmb3JtYXR0ZWRIb3VyKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdISCcsIGZvcm1hdHRlZEhvdXIpLnJlcGxhY2UoJ0gnLCBmb3JtYXR0ZWRIb3VyKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdtbScsIGZvcm1hdHRlZE1pbnV0ZSkucmVwbGFjZSgnbScsIGZvcm1hdHRlZE1pbnV0ZSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnc3MnLCBmb3JtYXR0ZWRTZWNvbmRzKS5yZXBsYWNlKCdzJywgZm9ybWF0dGVkU2Vjb25kcylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgndHQnLCBhbVBNKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZUhvdXJWaWV3KHN0YXJ0OiBhbnksIGVuZDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hvdXJWaWV3ID0gdGhpcy5fdmlld1RvU3RyaW5nKHRoaXMuX2hvdXJJdGVtcy5zbGljZShzdGFydCwgZW5kKSwgJ2hvdXInKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF91cGRhdGVNaW51dGVWaWV3KHN0YXJ0OiBhbnksIGVuZDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX21pbnV0ZVZpZXcgPSB0aGlzLl92aWV3VG9TdHJpbmcodGhpcy5fbWludXRlSXRlbXMuc2xpY2Uoc3RhcnQsIGVuZCksICdtaW51dGUnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF91cGRhdGVTZWNvbmRzVmlldyhzdGFydDogYW55LCBlbmQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWNvbmRzVmlldyA9IHRoaXMuX3ZpZXdUb1N0cmluZyh0aGlzLl9zZWNvbmRzSXRlbXMuc2xpY2Uoc3RhcnQsIGVuZCksICdzZWNvbmRzJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlQW1QbVZpZXcoc3RhcnQ6IGFueSwgZW5kOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYW1wbVZpZXcgPSB0aGlzLl9hbXBtSXRlbXMuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYWRkRW1wdHlJdGVtcyhpdGVtczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2gobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZW5lcmF0ZUhvdXJzKCk6IHZvaWQge1xuICAgICAgICBsZXQgaG91ckl0ZW1zQ291bnQgPSAyNDtcbiAgICAgICAgaWYgKHRoaXMuZm9ybWF0LmluZGV4T2YoJ2gnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGhvdXJJdGVtc0NvdW50ID0gMTM7XG4gICAgICAgIH1cblxuICAgICAgICBob3VySXRlbXNDb3VudCAvPSB0aGlzLml0ZW1zRGVsdGEuaG91cnM7XG5cbiAgICAgICAgbGV0IGkgPSB0aGlzLmZvcm1hdC5pbmRleE9mKCdIJykgIT09IC0xID8gMCA6IDE7XG5cbiAgICAgICAgaWYgKGhvdXJJdGVtc0NvdW50IDwgNyB8fCAhdGhpcy5pc1NwaW5Mb29wKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRFbXB0eUl0ZW1zKHRoaXMuX2hvdXJJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLl9pc0hvdXJMaXN0TG9vcCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhvdXJJdGVtc0NvdW50ID4gMSkge1xuICAgICAgICAgICAgZm9yIChpOyBpIDwgaG91ckl0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hvdXJJdGVtcy5wdXNoKGkgKiB0aGlzLml0ZW1zRGVsdGEuaG91cnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faG91ckl0ZW1zLnB1c2goMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaG91ckl0ZW1zQ291bnQgPCA3IHx8ICF0aGlzLmlzU3Bpbkxvb3ApIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZEVtcHR5SXRlbXModGhpcy5faG91ckl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2dlbmVyYXRlTWludXRlcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWludXRlSXRlbXNDb3VudCA9IDYwIC8gdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXM7XG5cbiAgICAgICAgaWYgKG1pbnV0ZUl0ZW1zQ291bnQgPCA3IHx8ICF0aGlzLmlzU3Bpbkxvb3ApIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZEVtcHR5SXRlbXModGhpcy5fbWludXRlSXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5faXNNaW51dGVMaXN0TG9vcCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaW51dGVJdGVtc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX21pbnV0ZUl0ZW1zLnB1c2goaSAqIHRoaXMuaXRlbXNEZWx0YS5taW51dGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW51dGVJdGVtc0NvdW50IDwgNyB8fCAhdGhpcy5pc1NwaW5Mb29wKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRFbXB0eUl0ZW1zKHRoaXMuX21pbnV0ZUl0ZW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2dlbmVyYXRlU2Vjb25kcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kc0l0ZW1zQ291bnQgPSA2MCAvIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzO1xuXG4gICAgICAgIGlmIChzZWNvbmRzSXRlbXNDb3VudCA8IDcgfHwgIXRoaXMuaXNTcGluTG9vcCkge1xuICAgICAgICAgICAgdGhpcy5fYWRkRW1wdHlJdGVtcyh0aGlzLl9zZWNvbmRzSXRlbXMpO1xuICAgICAgICAgICAgdGhpcy5faXNTZWNvbmRzTGlzdExvb3AgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vjb25kc0l0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fc2Vjb25kc0l0ZW1zLnB1c2goaSAqIHRoaXMuaXRlbXNEZWx0YS5zZWNvbmRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWNvbmRzSXRlbXNDb3VudCA8IDcgfHwgIXRoaXMuaXNTcGluTG9vcCkge1xuICAgICAgICAgICAgdGhpcy5fYWRkRW1wdHlJdGVtcyh0aGlzLl9zZWNvbmRzSXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVBbVBtKCk6IHZvaWQge1xuXG4gICAgICAgIHRoaXMuX2FkZEVtcHR5SXRlbXModGhpcy5fYW1wbUl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9hbXBtSXRlbXMucHVzaCgnQU0nKTtcbiAgICAgICAgdGhpcy5fYW1wbUl0ZW1zLnB1c2goJ1BNJyk7XG5cbiAgICAgICAgdGhpcy5fYWRkRW1wdHlJdGVtcyh0aGlzLl9hbXBtSXRlbXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFNlbGVjdGVkVGltZSgpOiBEYXRlIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IHRoaXMudmFsdWUgPyBuZXcgRGF0ZSh0aGlzLnZhbHVlKSA6IG5ldyBEYXRlKCk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91cikge1xuICAgICAgICAgICAgZGF0ZS5zZXRIb3VycyhwYXJzZUludCh0aGlzLnNlbGVjdGVkSG91ciwgMTApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1pbnV0ZSkge1xuICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKHBhcnNlSW50KHRoaXMuc2VsZWN0ZWRNaW51dGUsIDEwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWNvbmRzKSB7XG4gICAgICAgICAgICBkYXRlLnNldFNlY29uZHMocGFyc2VJbnQodGhpcy5zZWxlY3RlZFNlY29uZHMsIDEwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgodGhpcy5zaG93SG91cnNMaXN0ICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9PSAnMTInKSB8fCAoIXRoaXMuc2hvd0hvdXJzTGlzdCAmJiB0aGlzLnNlbGVjdGVkSG91ciA8PSAnMTEnKSkgJiZcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtID09PSAnUE0nKSB7XG4gICAgICAgICAgICBkYXRlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSArIDEyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2hvd0hvdXJzTGlzdCAmJiB0aGlzLnNlbGVjdGVkQW1QbSA9PT0gJ0FNJyAmJiB0aGlzLnNlbGVjdGVkSG91ciA+ICcxMScpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpIC0gMTIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQW1QbSA9PT0gJ0FNJyAmJiB0aGlzLnNlbGVjdGVkSG91ciA9PT0gJzEyJykge1xuICAgICAgICAgICAgZGF0ZS5zZXRIb3VycygwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc1ZhbHVlVmFsaWQodmFsdWU6IERhdGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMubWF4VmFsdWUgJiYgdmFsdWUgPiB0aGlzLmNvbnZlcnRNaW5NYXhWYWx1ZSh0aGlzLm1heFZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWluVmFsdWUgJiYgdmFsdWUgPCB0aGlzLmNvbnZlcnRNaW5NYXhWYWx1ZSh0aGlzLm1pblZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pc0VudHJ5VmFsaWQodmFsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHZhbGlkSCA9IHRydWU7XG4gICAgICAgIGxldCB2YWxpZE0gPSB0cnVlO1xuICAgICAgICBsZXQgdmFsaWRTID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHZhbC5zcGxpdCgvW1xcczpdKy8pO1xuICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAodGhpcy5wcm9tcHRDaGFyLCAnZycpO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dIb3Vyc0xpc3QpIHtcbiAgICAgICAgICAgIHZhbGlkSCA9IHRoaXMudmFsaWRIb3VyRW50cmllcy5pbmRleE9mKHBhcnNlSW50KHNlY3Rpb25zWzBdLnJlcGxhY2UocmUsICcnKSwgMTApKSAhPT0gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaG93TWludXRlc0xpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSB0aGlzLnNob3dIb3Vyc0xpc3QgPyBzZWN0aW9uc1sxXSA6IHNlY3Rpb25zWzBdO1xuICAgICAgICAgICAgdmFsaWRNID0gdGhpcy52YWxpZE1pbnV0ZUVudHJpZXMuaW5kZXhPZihwYXJzZUludChtaW51dGVzLnJlcGxhY2UocmUsICcnKSwgMTApKSAhPT0gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaG93U2Vjb25kc0xpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZHMgPSBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAodGhpcy5zaG93QW1QbUxpc3QgPyAyIDogMSldO1xuICAgICAgICAgICAgdmFsaWRTID0gdGhpcy52YWxpZFNlY29uZHNFbnRyaWVzLmluZGV4T2YocGFyc2VJbnQoc2Vjb25kcy5yZXBsYWNlKHJlLCAnJyksIDEwKSkgIT09IC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkSCAmJiB2YWxpZE0gJiYgdmFsaWRTO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldEN1cnNvclBvc2l0aW9uKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRDdXJzb3JQb3NpdGlvbihzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciA9IHN0YXJ0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZUVkaXRhYmxlSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IEludGVyYWN0aW9uTW9kZS5Ecm9wRG93bikge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLl9mb3JtYXRUaW1lKHRoaXMuX2dldFNlbGVjdGVkVGltZSgpLCB0aGlzLmZvcm1hdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zcGluSG91cnMoY3VycmVudFZhbDogRGF0ZSwgbWluVmFsOiBEYXRlLCBtYXhWYWw6IERhdGUsIGhEZWx0YTogbnVtYmVyLCBzaWduOiBudW1iZXIpOiBEYXRlIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsID0gbmV3IERhdGUoY3VycmVudFZhbCk7XG5cbiAgICAgICAgY3VycmVudFZhbC5zZXRNaW51dGVzKHNpZ24gKiBoRGVsdGEpO1xuICAgICAgICBpZiAoY3VycmVudFZhbC5nZXREYXRlKCkgIT09IG9sZFZhbC5nZXREYXRlKCkgJiYgdGhpcy5pc1NwaW5Mb29wKSB7XG4gICAgICAgICAgICBjdXJyZW50VmFsLnNldERhdGUob2xkVmFsLmdldERhdGUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWludXRlcyA9IGN1cnJlbnRWYWwuZ2V0TWludXRlcygpO1xuICAgICAgICBpZiAoY3VycmVudFZhbC5nZXRUaW1lKCkgPiBtYXhWYWwuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NwaW5Mb29wKSB7XG4gICAgICAgICAgICAgICAgbWludXRlcyA9IG1pbnV0ZXMgPCBtaW5WYWwuZ2V0TWludXRlcygpID8gNjAgKyBtaW51dGVzIDogbWludXRlcztcbiAgICAgICAgICAgICAgICBtaW5WYWwuc2V0TWludXRlcyhzaWduICogbWludXRlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pblZhbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9sZFZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VmFsLmdldFRpbWUoKSA8IG1pblZhbC5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3Bpbkxvb3ApIHtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gbWludXRlcyA8PSBtYXhWYWwuZ2V0TWludXRlcygpID8gbWludXRlcyA6IG1pbnV0ZXMgLSA2MDtcbiAgICAgICAgICAgICAgICBtYXhWYWwuc2V0TWludXRlcyhtaW51dGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF4VmFsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2xkVmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zcGluTWludXRlcyhjdXJyZW50VmFsOiBEYXRlLCBtRGVsdGE6IG51bWJlciwgc2lnbjogbnVtYmVyKSB7XG4gICAgICAgIGxldCBtaW51dGVzID0gY3VycmVudFZhbC5nZXRNaW51dGVzKCkgKyAoc2lnbiAqIG1EZWx0YSk7XG5cbiAgICAgICAgaWYgKG1pbnV0ZXMgPCAwIHx8IG1pbnV0ZXMgPj0gNjApIHtcbiAgICAgICAgICAgIG1pbnV0ZXMgPSB0aGlzLmlzU3Bpbkxvb3AgPyBtaW51dGVzIC0gKHNpZ24gKiA2MCkgOiBjdXJyZW50VmFsLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRWYWwuc2V0TWludXRlcyhtaW51dGVzKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc3BpblNlY29uZHMoY3VycmVudFZhbDogRGF0ZSwgc0RlbHRhOiBudW1iZXIsIHNpZ246IG51bWJlcikge1xuICAgICAgICBsZXQgc2Vjb25kcyA9IGN1cnJlbnRWYWwuZ2V0U2Vjb25kcygpICsgKHNpZ24gKiBzRGVsdGEpO1xuXG4gICAgICAgIGlmIChzZWNvbmRzIDwgMCB8fCBzZWNvbmRzID49IDYwKSB7XG4gICAgICAgICAgICBzZWNvbmRzID0gdGhpcy5pc1NwaW5Mb29wID8gc2Vjb25kcyAtIChzaWduICogNjApIDogY3VycmVudFZhbC5nZXRTZWNvbmRzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50VmFsLnNldFNlY29uZHMoc2Vjb25kcyk7XG4gICAgICAgIHJldHVybiBjdXJyZW50VmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRpYWxpemVDb250YWluZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtdHRlZFRpbWUgPSB0aGlzLl9mb3JtYXRUaW1lKHRoaXMudmFsdWUsIHRoaXMuZm9ybWF0KTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25zID0gZm9ybXR0ZWRUaW1lLnNwbGl0KC9bXFxzOl0rLyk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dIb3Vyc0xpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHNlY3Rpb25zWzBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93TWludXRlc0xpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdGhpcy5zaG93SG91cnNMaXN0ID8gc2VjdGlvbnNbMV0gOiBzZWN0aW9uc1swXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1NlY29uZHNMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlY29uZHMgPSBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAodGhpcy5zaG93QW1QbUxpc3QgPyAyIDogMSldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93QW1QbUxpc3QgJiYgdGhpcy5fYW1wbUl0ZW1zICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFtUG0gPSBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9ICF0aGlzLnNob3dIb3Vyc0xpc3QgJiYgdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUuZ2V0SG91cnMoKS50b1N0cmluZygpIDpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dIb3Vyc0xpc3QgPyBgJHt0aGlzLl9ob3VySXRlbXNbM119YCA6ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1pbnV0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gIXRoaXMuc2hvd01pbnV0ZXNMaXN0ICYmIHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpIDogJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2Vjb25kcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2Vjb25kcyA9ICF0aGlzLnNob3dTZWNvbmRzTGlzdCAmJiB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSA6ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEFtUG0gPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9hbXBtSXRlbXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtID0gdGhpcy5fYW1wbUl0ZW1zWzNdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJldlNlbGVjdGVkSG91ciA9IHRoaXMuc2VsZWN0ZWRIb3VyO1xuICAgICAgICB0aGlzLl9wcmV2U2VsZWN0ZWRNaW51dGUgPSB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgICB0aGlzLl9wcmV2U2VsZWN0ZWRTZWNvbmRzID0gdGhpcy5zZWxlY3RlZFNlY29uZHM7XG4gICAgICAgIHRoaXMuX3ByZXZTZWxlY3RlZEFtUG0gPSB0aGlzLnNlbGVjdGVkQW1QbTtcblxuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUhvdXJWaWV3KDAsIElURU1TX0NPVU5UKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlTWludXRlVmlldygwLCBJVEVNU19DT1VOVCk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNlY29uZHNWaWV3KDAsIElURU1TX0NPVU5UKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlQW1QbVZpZXcoMCwgSVRFTVNfQ09VTlQpO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91cikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxIb3VySW50b1ZpZXcodGhpcy5zZWxlY3RlZEhvdXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWludXRlKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbE1pbnV0ZUludG9WaWV3KHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2Vjb25kcykge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTZWNvbmRzSW50b1ZpZXcodGhpcy5zZWxlY3RlZFNlY29uZHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQW1QbSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxBbVBtSW50b1ZpZXcodGhpcy5zZWxlY3RlZEFtUG0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhvdXJMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ob3VyTGlzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWludXRlTGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWludXRlTGlzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Vjb25kc0xpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlY29uZHNMaXN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfb25Ecm9wRG93bkNsb3NlZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICBjb25zdCBuZXdWYWwgPSB0aGlzLmNvbnZlcnRNaW5NYXhWYWx1ZSh0aGlzLmRpc3BsYXlWYWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheVZhbHVlID09PSB0aGlzLnBhcnNlTWFzayhmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pc1ZhbHVlVmFsaWQobmV3VmFsKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnZhbHVlIHx8IG9sZFZhbHVlLmdldFRpbWUoKSAhPT0gbmV3VmFsLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMuaW5wdXRGb3JtYXQudHJhbnNmb3JtKHRoaXMuX2Zvcm1hdFRpbWUob2xkVmFsdWUsIHRoaXMuZm9ybWF0KSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElneFRpbWVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgICAgIHRpbWVQaWNrZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiBuZXdWYWwsXG4gICAgICAgICAgICAgICAgc2V0VGhyb3VnaFVJOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRpb25GYWlsZWQuZW1pdChhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3Vyc29yT25Ib3VycyhjdXJzb3I6IG51bWJlciwgc2hvd0hvdXJzOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzaG93SG91cnMgJiYgdGhpcy5faG91cnNQb3MuaGFzKGN1cnNvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXJzb3JPbk1pbnV0ZXMoY3Vyc29yOiBudW1iZXIsIHNob3dIb3VyczogYm9vbGVhbiwgc2hvd01pbnV0ZXM6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNob3dNaW51dGVzICYmXG4gICAgICAgICAgICAoc2hvd0hvdXJzICYmIHRoaXMuX21pbnV0ZXNQb3MuaGFzKGN1cnNvcikpIHx8XG4gICAgICAgICAgICAoIXNob3dIb3VycyAmJiB0aGlzLl9taW51dGVzUG9zLmhhcyhjdXJzb3IpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGN1cnNvck9uU2Vjb25kcyhjdXJzb3I6IG51bWJlciwgc2hvd0hvdXJzOiBib29sZWFuLCBzaG93TWludXRlczogYm9vbGVhbiwgc2hvd1NlY29uZHM6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNob3dTZWNvbmRzICYmXG4gICAgICAgICAgICAoc2hvd0hvdXJzICYmIHNob3dNaW51dGVzICYmIHRoaXMuX3NlY29uZHNQb3MuaGFzKGN1cnNvcikpIHx8XG4gICAgICAgICAgICAoKCFzaG93SG91cnMgfHwgIXNob3dNaW51dGVzKSAmJiB0aGlzLl9zZWNvbmRzUG9zLmhhcyhjdXJzb3IpKSB8fFxuICAgICAgICAgICAgKCFzaG93SG91cnMgJiYgIXNob3dNaW51dGVzICYmIHRoaXMuX3NlY29uZHNQb3MuaGFzKGN1cnNvcikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3Vyc29yT25BbVBtKGN1cnNvcjogbnVtYmVyLCBzaG93SG91cnM6IGJvb2xlYW4sIHNob3dNaW51dGVzOiBib29sZWFuLFxuICAgICAgICBzaG93U2Vjb25kczogYm9vbGVhbiwgc2hvd0FtUG06IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNob3dBbVBtICYmXG4gICAgICAgICAgICAoc2hvd0hvdXJzICYmIHNob3dNaW51dGVzICYmIHNob3dTZWNvbmRzICYmIHRoaXMuX2FtUG1Qb3MuaGFzKGN1cnNvcikpIHx8XG4gICAgICAgICAgICAoKCFzaG93SG91cnMgfHwgIXNob3dNaW51dGVzIHx8ICFzaG93U2Vjb25kcykgJiYgdGhpcy5fYW1QbVBvcy5oYXMoY3Vyc29yKSkgfHxcbiAgICAgICAgICAgICghc2hvd0hvdXJzICYmICghc2hvd01pbnV0ZXMgfHwgIXNob3dTZWNvbmRzKSAmJiB0aGlzLl9hbVBtUG9zLmhhcyhjdXJzb3IpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF91cGRhdGVWYWxpZGl0eU9uQmx1cigpIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLl9pbnB1dERpcmVjdGl2ZSB8fCB0aGlzLl9pbnB1dERpcmVjdGl2ZVVzZXJUZW1wbGF0ZTtcbiAgICAgICAgaWYgKHRoaXMuX25nQ29udHJvbCAmJiAhdGhpcy5fbmdDb250cm9sLnZhbGlkKSB7XG4gICAgICAgICAgICBpbnB1dC52YWxpZCA9IElneElucHV0U3RhdGUuSU5WQUxJRDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0LnZhbGlkID0gSWd4SW5wdXRTdGF0ZS5JTklUSUFMO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gV29ya2Fyb3VuZCBtZXRob2QgZm9yICM4MTM1XG4gICAgLy8gVE9ETzogSXQgbXVzdCBiZSByZW1vdmVkIGluICM2NDgyXG4gICAgcHJpdmF0ZSBpc1Jlc2V0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZT8uZ2V0SG91cnMoKSA9PT0gMFxuICAgICAgICAgICAgJiYgdGhpcy52YWx1ZT8uZ2V0TWludXRlcygpID09PSAwXG4gICAgICAgICAgICAmJiB0aGlzLnZhbHVlPy5nZXRTZWNvbmRzKCkgPT09IDA7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgSWd4VGltZVBpY2tlckNvbXBvbmVudCxcbiAgICAgICAgSWd4SG91ckl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIElneE1pbnV0ZUl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIElneFNlY29uZHNJdGVtRGlyZWN0aXZlLFxuICAgICAgICBJZ3hJdGVtTGlzdERpcmVjdGl2ZSxcbiAgICAgICAgSWd4QW1QbUl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIElneFRpbWVQaWNrZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgSWd4VGltZVBpY2tlckFjdGlvbnNEaXJlY3RpdmUsXG4gICAgICAgIFRpbWVEaXNwbGF5Rm9ybWF0UGlwZSxcbiAgICAgICAgVGltZUlucHV0Rm9ybWF0UGlwZVxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBJZ3hUaW1lUGlja2VyQ29tcG9uZW50LFxuICAgICAgICBJZ3hUaW1lUGlja2VyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIElneFRpbWVQaWNrZXJBY3Rpb25zRGlyZWN0aXZlLFxuICAgICAgICBUaW1lRGlzcGxheUZvcm1hdFBpcGUsXG4gICAgICAgIFRpbWVJbnB1dEZvcm1hdFBpcGUsXG4gICAgICAgIElneElucHV0R3JvdXBNb2R1bGVcbiAgICBdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBJZ3hJbnB1dEdyb3VwTW9kdWxlLFxuICAgICAgICBJZ3hJY29uTW9kdWxlLFxuICAgICAgICBJZ3hCdXR0b25Nb2R1bGUsXG4gICAgICAgIElneE1hc2tNb2R1bGUsXG4gICAgICAgIElneFRvZ2dsZU1vZHVsZSxcbiAgICAgICAgSWd4VGV4dFNlbGVjdGlvbk1vZHVsZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUaW1lUGlja2VyTW9kdWxlIHsgfVxuIl19
|
|
1859
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3RpbWUtcGlja2VyL3RpbWUtcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsWUFBWSxFQUNmLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLFFBQVEsRUFHUixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUVWLFFBQVEsRUFDUixpQkFBaUIsRUFFcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxTQUFTLEVBQW1CLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RixPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLG9CQUFvQixFQUNwQiw4QkFBOEIsRUFDOUIsNkJBQTZCLEVBQ2hDLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFnQixJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFakcsT0FBTyxFQUFxQix5QkFB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Szt5QkF1QkwsS0FBSztxQkEwQkwsS0FBSzs4QkF1Q0wsS0FBSzs2QkFpQkwsWUFBWSxTQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDLGNBQzNDLFlBQVksU0FBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7NkJBU3hDLFlBQVksU0FBQyx1QkFBdUI7O0FBczFDekM7O0dBRUc7QUFpQ0gsTUFBTSxPQUFPLG1CQUFtQjs7O1lBaEMvQixRQUFRLFNBQUM7Z0JBQ04sWUFBWSxFQUFFO29CQUNWLHNCQUFzQjtvQkFDdEIsb0JBQW9CO29CQUNwQixzQkFBc0I7b0JBQ3RCLHVCQUF1QjtvQkFDdkIsb0JBQW9CO29CQUNwQixvQkFBb0I7b0JBQ3BCLDhCQUE4QjtvQkFDOUIsNkJBQTZCO29CQUM3QixxQkFBcUI7b0JBQ3JCLG1CQUFtQjtpQkFDdEI7Z0JBQ0QsT0FBTyxFQUFFO29CQUNMLHNCQUFzQjtvQkFDdEIsOEJBQThCO29CQUM5Qiw2QkFBNkI7b0JBQzdCLHFCQUFxQjtvQkFDckIsbUJBQW1CO29CQUNuQixtQkFBbUI7aUJBQ3RCO2dCQUNELE9BQU8sRUFBRTtvQkFDTCxZQUFZO29CQUNaLG1CQUFtQjtvQkFDbkIsYUFBYTtvQkFDYixlQUFlO29CQUNmLGFBQWE7b0JBQ2IsZUFBZTtvQkFDZixzQkFBc0I7aUJBQ3pCO2dCQUNELFNBQVMsRUFBRSxFQUFFO2FBQ2hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21tb25Nb2R1bGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEluamVjdGFibGUsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBJbmplY3RvcixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBBZnRlclZpZXdDaGVja2VkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOZ0NvbnRyb2wsIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEhBTU1FUl9HRVNUVVJFX0NPTkZJRywgSGFtbWVyR2VzdHVyZUNvbmZpZyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgSWd4SWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24vcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwTW9kdWxlLCBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5wdXQtZ3JvdXAvaW5wdXQtZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlLCBJZ3hJbnB1dFN0YXRlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtcbiAgICBJZ3hBbVBtSXRlbURpcmVjdGl2ZSxcbiAgICBJZ3hIb3VySXRlbURpcmVjdGl2ZSxcbiAgICBJZ3hNaW51dGVJdGVtRGlyZWN0aXZlLFxuICAgIElneFNlY29uZHNJdGVtRGlyZWN0aXZlLFxuICAgIElneEl0ZW1MaXN0RGlyZWN0aXZlLFxuICAgIElneFRpbWVQaWNrZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hUaW1lUGlja2VyQWN0aW9uc0RpcmVjdGl2ZVxufSBmcm9tICcuL3RpbWUtcGlja2VyLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIFN1YnNjcmlwdGlvbiwgbm9vcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRWRpdG9yUHJvdmlkZXIgfSBmcm9tICcuLi9jb3JlL2VkaXQtcHJvdmlkZXInO1xuaW1wb3J0IHsgSWd4VGltZVBpY2tlckJhc2UsIElHWF9USU1FX1BJQ0tFUl9DT01QT05FTlQsIFRpbWVQYXJ0cyB9IGZyb20gJy4vdGltZS1waWNrZXIuY29tbW9uJztcbmltcG9ydCB7IEFic29sdXRlU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICcuLi9zZXJ2aWNlcy9vdmVybGF5L3Njcm9sbCc7XG5pbXBvcnQgeyBBdXRvUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4uL3NlcnZpY2VzL292ZXJsYXkvcG9zaXRpb24nO1xuaW1wb3J0IHsgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vc2VydmljZXMvb3ZlcmxheS91dGlsaXRpZXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0aHJvdHRsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElneEJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYnV0dG9uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4TWFza01vZHVsZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvbWFzay9tYXNrLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlLCBJZ3hUb2dnbGVNb2R1bGUsIElneFRvZ2dsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGltZURpc3BsYXlGb3JtYXRQaXBlLCBUaW1lSW5wdXRGb3JtYXRQaXBlIH0gZnJvbSAnLi90aW1lLXBpY2tlci5waXBlcyc7XG5pbXBvcnQgeyBJVGltZVBpY2tlclJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi90aW1lLXBpY2tlci1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ3VycmVudFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgS0VZUywgSUJhc2VFdmVudEFyZ3MsIElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEludGVyYWN0aW9uTW9kZSB9IGZyb20gJy4uL2NvcmUvZW51bXMnO1xuaW1wb3J0IHsgSWd4VGV4dFNlbGVjdGlvbk1vZHVsZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdGV4dC1zZWxlY3Rpb24vdGV4dC1zZWxlY3Rpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneExhYmVsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9sYWJlbC9sYWJlbC5kaXJlY3RpdmUnO1xuXG5cbmxldCBORVhUX0lEID0gMDtcbmNvbnN0IElURU1TX0NPVU5UID0gNztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRpbWVQaWNrZXJIYW1tZXJDb25maWcgZXh0ZW5kcyBIYW1tZXJHZXN0dXJlQ29uZmlnIHtcbiAgICBwdWJsaWMgb3ZlcnJpZGVzID0ge1xuICAgICAgICBwYW46IHsgZGlyZWN0aW9uOiBIYW1tZXIuRElSRUNUSU9OX1ZFUlRJQ0FMLCB0aHJlc2hvbGQ6IDEgfVxuICAgIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWd4VGltZVBpY2tlclZhbHVlQ2hhbmdlZEV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBvbGRWYWx1ZTogRGF0ZTtcbiAgICBuZXdWYWx1ZTogRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZ3hUaW1lUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICB0aW1lUGlja2VyOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50O1xuICAgIGN1cnJlbnRWYWx1ZTogRGF0ZTtcbiAgICBzZXRUaHJvdWdoVUk6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogSEFNTUVSX0dFU1RVUkVfQ09ORklHLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IFRpbWVQaWNrZXJIYW1tZXJDb25maWdcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogSUdYX1RJTUVfUElDS0VSX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnaWd4LXRpbWUtcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RpbWUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYDpob3N0IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9YFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4VGltZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzXG4gICAgSWd4VGltZVBpY2tlckJhc2UsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRWRpdG9yUHJvdmlkZXIsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyVmlld0NoZWNrZWQge1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFtpZF09XCInaWd4LXRpbWUtcGlja2VyLTUnXCIgZm9ybWF0PVwiaDptbSB0dFwiID48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC10aW1lLXBpY2tlci0ke05FWFRfSUQrK31gO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoZSBgaWd4LXRpbWUtcGlja2VyYCBjb21wb25lbnQuIEJ5IGRlZmF1bHQgYGRpc2FibGVkYCBpcyBzZXQgdG8gZmFsc2UuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgW2Rpc2FibGVkXT1cIid0cnVlJ1wiIFt2ZXJ0aWNhbF09XCJ0cnVlXCIgZm9ybWF0PVwiaDptbSB0dFwiID48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBzZXQgdGhlIGBtaW5WYWx1ZWAgdG8gbGltaXQgdGhlIHVzZXIgaW5wdXQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIHB1YmxpYyBtaW46IHN0cmluZyA9IFwiMDk6MDBcIjtcbiAgICAgKiAgLy8uLlxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgZm9ybWF0PVwiSEg6bW1cIiBbdmVydGljYWxdPVwidHJ1ZVwiIFttaW5WYWx1ZV09XCJtaW5cIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtaW5WYWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBzZXQgdGhlIGBtYXhWYWx1ZWAgdG8gbGltaXQgdGhlIHVzZXIgaW5wdXQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIHB1YmxpYyBtYXg6IHN0cmluZyA9IFwiMTg6MDBcIjtcbiAgICAgKiAgLy8uLlxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgZm9ybWF0PVwiSEg6bW1cIiBbdmVydGljYWxdPVwidHJ1ZVwiIFttYXhWYWx1ZV09XCJtYXhcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtYXhWYWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgZGV0ZXJtaW5lcyB0aGUgc3BpbiBiZWhhdmlvci4gQnkgZGVmYXVsdCBgaXNTcGluTG9vcGAgaXMgc2V0IHRvIHRydWUuXG4gICAgICogVGhlIHNlY29uZHMsIG1pbnV0ZXMgYW5kIGhvdXIgc3Bpbm5pbmcgd2lsbCB3cmFwIGFyb3VuZCBieSBkZWZhdWx0LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFtpc1NwaW5Mb29wXT1cImZhbHNlXCIgaWQ9XCJ0aW1lLXBpY2tlclwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlzU3Bpbkxvb3AgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgR2V0cy9TZXRzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgYGlneFRpbWVQaWNrZXJgLiBCeSBkZWZhdWx0IGB2ZXJ0aWNhbGAgaXMgc2V0IHRvIGZhbHNlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFt2ZXJ0aWNhbF09XCJ0cnVlXCIgaWQ9XCJ0aW1lLXBpY2tlclwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZlcnRpY2FsID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBwcm9tcHQgdGhlIHVzZXIgZm9yIGlucHV0LlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgXCInLSdcIi5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbcHJvbXB0Q2hhcl0gPSBcIidfJ1wiPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIElneFRpbWVQaWNrZXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwcm9tcHRDaGFyID0gJy0nO1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgYWxsb3dzIHlvdSB0byBzd2l0Y2ggdGhlIGludGVyYWN0aW9uIG1vZGUgYmV0d2VlblxuICAgICAqIGEgZGlhbG9nIHBpY2tlciBvciBkcm9wZG93biB3aXRoIGVkaXRhYmxlIG1hc2tlZCBpbnB1dC5cbiAgICAgKiBEZWFmdWx0IGlzIGRpYWxvZyBwaWNrZXIuXG4gICAgICogYGBgaHRtbFxuICAgICAqIHB1YmxpYyBtb2RlID0gSW50ZXJhY3Rpb25Nb2RlLkRST1BET1dOO1xuICAgICAqICAvLy4uXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbbW9kZV09XCJtb2RlXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4VGltZVBpY2tlckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG1vZGU6IEludGVyYWN0aW9uTW9kZSA9IEludGVyYWN0aW9uTW9kZS5EaWFsb2c7XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSBjb250YWluZXIgdGhlIHBvcHVwIGVsZW1lbnQgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxkaXYgaWd4T3ZlcmxheU91dGxldCAjb3V0bGV0PVwib3ZlcmxheS1vdXRsZXRcIj48L2Rpdj5cbiAgICAgKiAvLy4uXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbb3V0bGV0XT1cIm91dGxldFwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIC8vLi5cbiAgICAgKiBgYGBcbiAgICAgKiBXaGVyZSBgb3V0bGV0YCBpcyBhbiBpbnN0YW5jZSBvZiBgSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZWAgb3IgYW4gYEVsZW1lbnRSZWZgLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG91dGxldDogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB8IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gc2VsZWN0aW9uIGlzIG1hZGUuIFRoZSBldmVudCBjb250YWlucyB0aGUgc2VsZWN0ZWQgdmFsdWUuIFJldHVybnMge2BvbGRWYWx1ZWA6IGBEYXRlYCwgYG5ld1ZhbHVlYDogYERhdGVgfS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJ0b2FzdFwiKVxuICAgICAqIHByaXZhdGUgdG9hc3Q6IElneFRvYXN0Q29tcG9uZW50O1xuICAgICAqIHB1YmxpYyBvblZhbHVlQ2hhbmdlZCh0aW1lcGlja2VyKXtcbiAgICAgKiAgICAgdGhpcy50b2FzdC5vcGVuKClcbiAgICAgKiB9XG4gICAgICogIC8vLi4uXG4gICAgICogIGBgYFxuICAgICAqICBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciAob25WYWx1ZUNoYW5nZWQpPVwib25WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIDxpZ3gtdG9hc3QgI3RvYXN0IG1lc3NhZ2U9XCJUaGUgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCFcIj48L2lneC10b2FzdD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25WYWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElneFRpbWVQaWNrZXJWYWx1ZUNoYW5nZWRFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gYW4gaW52YWxpZCB2YWx1ZSBpcyBiZWluZyBzZXQuIFJldHVybnMge2B0aW1lUGlja2VyYDogYGFueWAsIGBjdXJyZW50VmFsdWVgOiBgRGF0ZWAsIGBzZXRUaHJvdWdoVUlgOiBgYm9vbGVhbmB9XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBtaW46IHN0cmluZyA9IFwiMDk6MDBcIjtcbiAgICAgKiBwdWJsaWMgbWF4OiBzdHJpbmcgPSBcIjE4OjAwXCI7XG4gICAgICogIEBWaWV3Q2hpbGQoXCJ0b2FzdFwiKVxuICAgICAqIHByaXZhdGUgdG9hc3Q6IElneFRvYXN0Q29tcG9uZW50O1xuICAgICAqIHB1YmxpYyBvblZhbGlkYXRpb25GYWlsZWQodGltZXBpY2tlcil7XG4gICAgICogICAgIHRoaXMudG9hc3Qub3BlbigpO1xuICAgICAqIH1cbiAgICAgKiAgLy8uLi5cbiAgICAgKiAgYGBgXG4gICAgICogIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFttaW5WYWx1ZV09XCJtaW5cIiBbbWF4VmFsdWVdPVwibWF4XCIgKG9uVmFsaWRhdGlvbkZhaWxlZCk9XCJvblZhbGlkYXRpb25GYWlsZWQoJGV2ZW50KVwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIDxpZ3gtdG9hc3QgI3RvYXN0IG1lc3NhZ2U9XCJWYWx1ZSBtdXN0IGJlIGJldHdlZW4gMDk6MDAgYW5kIDE4OjAwIVwiPjwvaWd4LXRvYXN0PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvblZhbGlkYXRpb25GYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElneFRpbWVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGEgdGltZVBpY2tlciBpcyBvcGVuZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hUaW1lUGlja2VyQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGEgdGltZVBpY2tlciBpcyBjbG9zZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJZ3hUaW1lUGlja2VyQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGEgdGltZVBpY2tlciBpcyBiZWluZyBjbG9zZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uQ2xvc2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdob3VyTGlzdCcpXG4gICAgcHVibGljIGhvdXJMaXN0OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ21pbnV0ZUxpc3QnKVxuICAgIHB1YmxpYyBtaW51dGVMaXN0OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlY29uZHNMaXN0JylcbiAgICBwdWJsaWMgc2Vjb25kc0xpc3Q6IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnYW1wbUxpc3QnKVxuICAgIHB1YmxpYyBhbXBtTGlzdDogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFRpbWVQaWNrZXJBY3Rpb25zRGlyZWN0aXZlLCB7IHJlYWQ6IElneFRpbWVQaWNrZXJBY3Rpb25zRGlyZWN0aXZlIH0pXG4gICAgcHVibGljIHRpbWVQaWNrZXJBY3Rpb25zRGlyZWN0aXZlOiBJZ3hUaW1lUGlja2VyQWN0aW9uc0RpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hMYWJlbERpcmVjdGl2ZSlcbiAgICBwdWJsaWMgbGFiZWxEaXJlY3RpdmU6IElneExhYmVsRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4VG9nZ2xlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyB0b2dnbGVSZWY6IElneFRvZ2dsZURpcmVjdGl2ZTtcblxuICAgIC8qXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRUaW1lUGlja2VyVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcm90ZWN0ZWQgZGVmYXVsdFRpbWVQaWNrZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFRpbWVQaWNrZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBJZ3hUaW1lUGlja2VyVGVtcGxhdGVEaXJlY3RpdmUgfSlcbiAgICBwcm90ZWN0ZWQgdGltZVBpY2tlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hUaW1lUGlja2VyVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKCdkcm9wZG93bklucHV0VGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGRyb3Bkb3duSW5wdXRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4SW5wdXREaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHByaXZhdGUgX2lucHV0RWxlbWVudFJlZjogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoSWd4SW5wdXREaXJlY3RpdmUsIHsgcmVhZDogSWd4SW5wdXREaXJlY3RpdmUgfSlcbiAgICBwcml2YXRlIF9pbnB1dERpcmVjdGl2ZTogSWd4SW5wdXREaXJlY3RpdmU7XG5cbiAgICBAQ29udGVudENoaWxkKElneElucHV0RGlyZWN0aXZlLCB7IHJlYWQ6IElneElucHV0RGlyZWN0aXZlIH0pXG4gICAgcHJpdmF0ZSBfaW5wdXREaXJlY3RpdmVVc2VyVGVtcGxhdGU6IElneElucHV0RGlyZWN0aXZlO1xuXG4gICAgQFZpZXdDaGlsZChJZ3hJbnB1dEdyb3VwQ29tcG9uZW50LCB7IHJlYWQ6IElneElucHV0R3JvdXBDb21wb25lbnQgfSlcbiAgICBwcml2YXRlIF9pbnB1dEdyb3VwOiBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdGltZVBhcnRzOiBhbnkgPSBPYmplY3QuYXNzaWduKHt9LCBUaW1lUGFydHMpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBfaG91ckl0ZW1zID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIF9taW51dGVJdGVtcyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBfc2Vjb25kc0l0ZW1zID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIF9hbXBtSXRlbXMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xlYXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBpc05vdEVtcHR5ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGRpc3BsYXlGb3JtYXQgPSBuZXcgVGltZURpc3BsYXlGb3JtYXRQaXBlKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBpbnB1dEZvcm1hdCA9IG5ldyBUaW1lSW5wdXRGb3JtYXRQaXBlKHRoaXMpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZEhvdXI6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRNaW51dGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRTZWNvbmRzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdGVkQW1QbTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbWFzaygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFzayB8fCAnMDA6MDAgTEwnO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgbWFzayh2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9tYXNrID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fZGlzcGxheVZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRUaW1lKHRoaXMudmFsdWUsIHRoaXMuZm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheVZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZGlzcGxheVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCB0aW1lIGZvcm1hdHRlZCBhcyBzdHJpbmcgdXNpbmcgdGhlIGBmb3JtYXRgIG9wdGlvbi5cbiAgICAgKiBJZiB0aGVyZSBpcyBubyBzZXQgdGltZSB0aGUgcmV0dXJuIGlzIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwcml2YXRlIHBpY2tlcjogSWd4VGltZVBpY2tlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgdGltZSA9IHRoaXMucGlja2VyLmRpc3BsYXlUaW1lO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlUaW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0VGltZSh0aGlzLnZhbHVlLCB0aGlzLmZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhvdXJWaWV3KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hvdXJWaWV3O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1pbnV0ZVZpZXcoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWludXRlVmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzZWNvbmRzVmlldygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWNvbmRzVmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBhbXBtVmlldygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbXBtVmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93Q2xlYXJCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5kaXNwbGF5VmFsdWUgJiYgdGhpcy5kaXNwbGF5VmFsdWUgIT09IHRoaXMucGFyc2VNYXNrKGZhbHNlKSkgfHwgdGhpcy5pc05vdEVtcHR5O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dIb3Vyc0xpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdC5pbmRleE9mKCdoJykgIT09IC0gMSB8fCB0aGlzLmZvcm1hdC5pbmRleE9mKCdIJykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93TWludXRlc0xpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdC5pbmRleE9mKCdtJykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93U2Vjb25kc0xpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdC5pbmRleE9mKCdzJykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93QW1QbUxpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdC5pbmRleE9mKCd0JykgIT09IC0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZFNlY29uZHNFbnRyaWVzKCk6IGFueVtdIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kc0VudHJpZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA2MDsgaSsrKSB7XG4gICAgICAgICAgICBzZWNvbmRzRW50cmllcy5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWNvbmRzRW50cmllcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWxpZE1pbnV0ZUVudHJpZXMoKTogYW55W10ge1xuICAgICAgICBjb25zdCBtaW51dGVFbnRyaWVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjA7IGkrKykge1xuICAgICAgICAgICAgbWludXRlRW50cmllcy5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW51dGVFbnRyaWVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbGlkSG91ckVudHJpZXMoKTogYW55W10ge1xuICAgICAgICBjb25zdCBob3VyRW50cmllcyA9IFtdO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZm9ybWF0LmluZGV4T2YoJ2gnKSAhPT0gLTEgPyAxMyA6IDI0O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGhvdXJFbnRyaWVzLnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhvdXJFbnRyaWVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGlucHV0IGdyb3VwIHRlbXBsYXRlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4VGltZVBpY2tlckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXJUZW1wbGF0ZURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGltZVBpY2tlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09IEludGVyYWN0aW9uTW9kZS5EaWFsb2cgPyB0aGlzLmRlZmF1bHRUaW1lUGlja2VyVGVtcGxhdGUgOiB0aGlzLmRyb3Bkb3duSW5wdXRUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb250ZXh0IHBhc3NlZCB0byB0aGUgaW5wdXQgZ3JvdXAgdGVtcGxhdGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4VGltZVBpY2tlckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgZGlzcGxheVRpbWU6IHRoaXMuZGlzcGxheVRpbWUsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHRoaXMuZGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgb3BlbkRpYWxvZzogKHRhcmdldD86IEhUTUxFbGVtZW50KSA9PiB0aGlzLm9wZW5EaWFsb2codGFyZ2V0KVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sICYmIHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcikge1xuICAgICAgICAgICAgLy8gUnVuIHRoZSB2YWxpZGF0aW9uIHdpdGggZW1wdHkgb2JqZWN0IHRvIGNoZWNrIGlmIHJlcXVpcmVkIGlzIGVuYWJsZWQuXG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuX25nQ29udHJvbC5jb250cm9sLnZhbGlkYXRvcih7fSBhcyBBYnN0cmFjdENvbnRyb2wpO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yICYmIGVycm9yLnJlcXVpcmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHByaXZhdGUgX3ZhbHVlOiBEYXRlO1xuICAgIHByaXZhdGUgX292ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzO1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuVGltZVBpY2tlclJlc1N0cmluZ3M7XG4gICAgcHJpdmF0ZSBfb2tCdXR0b25MYWJlbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfY2FuY2VsQnV0dG9uTGFiZWwgPSBudWxsO1xuICAgIHByaXZhdGUgX2Zvcm1hdDogc3RyaW5nO1xuICAgIHByaXZhdGUgX21hc2s6IHN0cmluZztcbiAgICBwcml2YXRlIF9kaXNwbGF5VmFsdWU6IHN0cmluZztcbiAgICBwcml2YXRlIF9pdGVtc0RlbHRhOiB7IGhvdXJzOiBudW1iZXI7IG1pbnV0ZXM6IG51bWJlcjsgc2Vjb25kczogbnVtYmVyIH0gPSB7IGhvdXJzOiAxLCBtaW51dGVzOiAxLCBzZWNvbmRzOiAxIH07XG5cbiAgICBwcml2YXRlIF9pc0hvdXJMaXN0TG9vcCA9IHRoaXMuaXNTcGluTG9vcDtcbiAgICBwcml2YXRlIF9pc01pbnV0ZUxpc3RMb29wID0gdGhpcy5pc1NwaW5Mb29wO1xuICAgIHByaXZhdGUgX2lzU2Vjb25kc0xpc3RMb29wID0gdGhpcy5pc1NwaW5Mb29wO1xuXG4gICAgcHJpdmF0ZSBfaG91clZpZXcgPSBbXTtcbiAgICBwcml2YXRlIF9taW51dGVWaWV3ID0gW107XG4gICAgcHJpdmF0ZSBfc2Vjb25kc1ZpZXcgPSBbXTtcbiAgICBwcml2YXRlIF9hbXBtVmlldyA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfZGF0ZUZyb21Nb2RlbDogRGF0ZTtcbiAgICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBfc3RhdHVzQ2hhbmdlcyQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9kcm9wRG93bk92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzO1xuICAgIHByaXZhdGUgX2RpYWxvZ092ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzO1xuXG4gICAgcHJpdmF0ZSBfcHJldlNlbGVjdGVkSG91cjogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ByZXZTZWxlY3RlZE1pbnV0ZTogc3RyaW5nO1xuICAgIHByaXZhdGUgX3ByZXZTZWxlY3RlZFNlY29uZHM6IHN0cmluZztcbiAgICBwcml2YXRlIF9wcmV2U2VsZWN0ZWRBbVBtOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIF9vbk9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyPElneFRpbWVQaWNrZXJDb21wb25lbnQ+KCk7XG4gICAgcHJpdmF0ZSBfb25DbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4VGltZVBpY2tlckNvbXBvbmVudD4oKTtcblxuICAgIHByaXZhdGUgX2hvdXJzUG9zID0gbmV3IFNldCgpO1xuICAgIHByaXZhdGUgX21pbnV0ZXNQb3MgPSBuZXcgU2V0KCk7XG4gICAgcHJpdmF0ZSBfc2Vjb25kc1BvcyA9IG5ldyBTZXQoKTtcbiAgICBwcml2YXRlIF9hbVBtUG9zID0gbmV3IFNldCgpO1xuICAgIHByaXZhdGUgX25nQ29udHJvbDogTmdDb250cm9sID0gbnVsbDtcblxuICAgIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBEYXRlKSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IGFsbG93cyB5b3UgdG8gc2V0IGEgdGltZSB1c2luZyB0aGUgYHZhbHVlYCBpbnB1dC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogcHVibGljIGRhdGU6IERhdGUgPSBuZXcgRGF0ZShEYXRlLm5vdygpKTtcbiAgICAgKiAgLy8uLi5cbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyIFt2YWx1ZV09XCJkYXRlXCIgZm9ybWF0PVwiaDptbSB0dFwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5faXNWYWx1ZVZhbGlkKHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGhpcy5fdmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcblxuICAgICAgICAgICAgY29uc3QgZGlzcFZhbCA9IHRoaXMuX2Zvcm1hdFRpbWUodGhpcy52YWx1ZSwgdGhpcy5mb3JtYXQpO1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gSW50ZXJhY3Rpb25Nb2RlLkRyb3BEb3duICYmIHRoaXMuX2Rpc3BsYXlWYWx1ZSAhPT0gZGlzcFZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gZGlzcFZhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYXJnczogSWd4VGltZVBpY2tlclZhbHVlQ2hhbmdlZEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZTogb2xkVmFsLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZW1pdChhcmdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElneFRpbWVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgICAgIHRpbWVQaWNrZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBzZXRUaHJvdWdoVUk6IGZhbHNlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRpb25GYWlsZWQuZW1pdChhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgb2YgYGlneC10aW1lLXBpY2tlcmAgY29tcG9uZW50LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiBAVmlld0NoaWxkKFwiTXlQaWNrXCIpXG4gICAgICogcHVibGljIHBpY2s6IElneFRpbWVQaWNrZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgbGV0IHBpY2tTZWxlY3QgPSB0aGlzLnBpY2sudmFsdWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogRGF0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJVGltZVBpY2tlclJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICovXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSVRpbWVQaWNrZXJSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IHJlbmRlcnMgT0sgYnV0dG9uIHdpdGggY3VzdG9tIHRleHQuIEJ5IGRlZmF1bHQgYG9rQnV0dG9uTGFiZWxgIGlzIHNldCB0byBPSy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBva0J1dHRvbkxhYmVsPSdTRVQnIFt2YWx1ZV09XCJkYXRlXCIgZm9ybWF0PVwiaDptbSB0dFwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBva0J1dHRvbkxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fb2tCdXR0b25MYWJlbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgbGFiZWwgb2Ygb2sgYnV0dG9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgb2tCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fb2tCdXR0b25MYWJlbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VTdHJpbmdzLmlneF90aW1lX3BpY2tlcl9vaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fb2tCdXR0b25MYWJlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCByZW5kZXJzIGNhbmNlbCBidXR0b24gd2l0aCBjdXN0b20gdGV4dC5cbiAgICAgKiBCeSBkZWZhdWx0IGBjYW5jZWxCdXR0b25MYWJlbGAgaXMgc2V0IHRvIENhbmNlbC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBjYW5jZWxCdXR0b25MYWJlbD0nRXhpdCcgW3ZhbHVlXT1cImRhdGVcIiBmb3JtYXQ9XCJoOm1tIHR0XCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGNhbmNlbEJ1dHRvbkxhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fY2FuY2VsQnV0dG9uTGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHJldHVybnMgdGhlIGxhYmVsIG9mIGNhbmNlbCBidXR0b24uXG4gICAgICovXG4gICAgcHVibGljIGdldCBjYW5jZWxCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5fY2FuY2VsQnV0dG9uTGFiZWwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfdGltZV9waWNrZXJfY2FuY2VsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jYW5jZWxCdXR0b25MYWJlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBnZXRzL3NldHMgdGhlIGRlbHRhIGJ5IHdoaWNoIGhvdXIgYW5kIG1pbnV0ZSBpdGVtcyB3b3VsZCBiZSBjaGFuZ2VkIDxicj5cbiAgICAgKiB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIFVwL0Rvd24ga2V5cy5cbiAgICAgKiBCeSBkZWZhdWx0IGBpdGVtc0RlbHRhYCBpcyBzZXQgdG8gYHtob3VyczogMSwgbWludXRlczogMSwgc2Vjb25kczogMX1gXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgW2l0ZW1zRGVsdGFdPVwie2hvdXJzOjMsIG1pbnV0ZXM6NSwgc2Vjb25kczoxMH1cIiBpZD1cInRpbWUtcGlja2VyXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGl0ZW1zRGVsdGEodmFsdWUpIHtcbiAgICAgICAgdGhpcy5faXRlbXNEZWx0YSA9IHsgaG91cnM6IDEsIG1pbnV0ZXM6IDEsIHNlY29uZHM6IDEsIC4uLnZhbHVlIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpdGVtc0RlbHRhKCk6IHsgaG91cnM6IG51bWJlcjsgbWludXRlczogbnVtYmVyOyBzZWNvbmRzOiBudW1iZXIgfSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtc0RlbHRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IEdldHMvU2V0cyBmb3JtYXQgb2YgdGltZSB3aGlsZSBgaWd4VGltZVBpY2tlcmAgZG9lcyBub3QgaGF2ZSBmb2N1cy4gPGJyPlxuICAgICAqIEJ5IGRlZmF1bHQgYGZvcm1hdGAgaXMgc2V0IHRvIGhoOm1tIHR0LiA8YnI+XG4gICAgICogTGlzdCBvZiB0aW1lLWZsYWdzOiA8YnI+XG4gICAgICogYGhgIDogaG91cnMgZmllbGQgaW4gMTItaG91cnMgZm9ybWF0IHdpdGhvdXQgbGVhZGluZyB6ZXJvIDxicj5cbiAgICAgKiBgaGhgIDogaG91cnMgZmllbGQgaW4gMTItaG91cnMgZm9ybWF0IHdpdGggbGVhZGluZyB6ZXJvIDxicj5cbiAgICAgKiBgSGAgOiBob3VycyBmaWVsZCBpbiAyNC1ob3VycyBmb3JtYXQgd2l0aG91dCBsZWFkaW5nIHplcm8gPGJyPlxuICAgICAqIGBISGAgOiBob3VycyBmaWVsZCBpbiAyNC1ob3VycyBmb3JtYXQgd2l0aCBsZWFkaW5nIHplcm8gPGJyPlxuICAgICAqIGBtYCA6IG1pbnV0ZXMgZmllbGQgd2l0aG91dCBsZWFkaW5nIHplcm8gPGJyPlxuICAgICAqIGBtbWAgOiBtaW51dGVzIGZpZWxkIHdpdGggbGVhZGluZyB6ZXJvIDxicj5cbiAgICAgKiBgc2AgOiBzZWNvbmRzIGZpZWxkIHdpdGhvdXQgbGVhZGluZyB6ZXJvIDxicj5cbiAgICAgKiBgc3NgIDogc2Vjb25kcyBmaWVsZCB3aXRoIGxlYWRpbmcgemVybyA8YnI+XG4gICAgICogYHR0YCA6IDIgY2hhcmFjdGVyIHN0cmluZyB3aGljaCByZXByZXNlbnRzIEFNL1BNIGZpZWxkIDxicj5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBmb3JtYXQ9XCJISDptXCIgaWQ9XCJ0aW1lLXBpY2tlclwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBmb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXQgfHwgJ2hoOm1tIHR0JztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGZvcm1hdChmb3JtYXRWYWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2Zvcm1hdCA9IGZvcm1hdFZhbHVlO1xuICAgICAgICB0aGlzLm1hc2sgPSB0aGlzLl9mb3JtYXQuaW5kZXhPZigndHQnKSAhPT0gLTEgPyAnMDA6MDA6MDAgTEwnIDogJzAwOjAwOjAwJztcblxuICAgICAgICBpZiAoIXRoaXMuc2hvd0hvdXJzTGlzdCB8fCAhdGhpcy5zaG93TWludXRlc0xpc3QpIHtcbiAgICAgICAgICAgIHRoaXMudHJpbU1hc2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zaG93U2Vjb25kc0xpc3QpIHtcbiAgICAgICAgICAgIHRoaXMudHJpbU1hc2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSB0aGlzLl9mb3JtYXRUaW1lKHRoaXMudmFsdWUsIHRoaXMuX2Zvcm1hdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRldGVybWluZUN1cnNvclBvcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIEBJbnB1dCBwcm9wZXJ0eSB0aGF0IGFsbG93cyB5b3UgdG8gbW9kaWZ5IG92ZXJsYXkgcG9zaXRpb25pbmcsIGludGVyYWN0aW9uIGFuZCBzY3JvbGwgYmVoYXZpb3IuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICogICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAqICAgICAgbW9kYWw6IGZhbHNlXG4gICAgICogIH1cbiAgICAgKiBgYGBcbiAgICAgKiAtLS1cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciBbb3ZlcmxheVNldHRpbmdzXT1cInNldHRpbmdzXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgSWd4VGltZVBpY2tlckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBvdmVybGF5U2V0dGluZ3ModmFsdWU6IE92ZXJsYXlTZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9vdmVybGF5U2V0dGluZ3MgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG92ZXJsYXlTZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVNldHRpbmdzID8gdGhpcy5fb3ZlcmxheVNldHRpbmdzIDpcbiAgICAgICAgICAgICh0aGlzLm1vZGUgPT09IEludGVyYWN0aW9uTW9kZS5EaWFsb2cgPyB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MgOiB0aGlzLl9kcm9wRG93bk92ZXJsYXlTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5zcGFjZWJhcicsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5zcGFjZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5ZG93blNwYWNlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMub3BlbkRpYWxvZyh0aGlzLmdldElucHV0R3JvdXBFbGVtZW50KCkpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkFsdC5BcnJvd0Rvd24nKVxuICAgIHB1YmxpYyBvbkFsdEFycm93RG93bigpIHtcbiAgICAgICAgdGhpcy5vcGVuRGlhbG9nKHRoaXMuZ2V0SW5wdXRHcm91cEVsZW1lbnQoKSk7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICAvLyB1c2UgdGhpcyBmbGFnIHRvIG1ha2Ugc3VyZSB0aGF0IG1pbi9tYXhWYWx1ZSBhcmUgY2hlY2tlZCAoaW4gX2NvbnZlcnRNaW5NYXhWYWx1ZSgpIG1ldGhvZClcbiAgICAgICAgLy8gYWdhaW5zdCB0aGUgcmVhbCB2YWx1ZSB3aGVuIGluaXRpYWxpemluZyB0aGUgY29tcG9uZW50IGFuZCB2YWx1ZSBpcyBib3VuZCB2aWEgbmdNb2RlbFxuICAgICAgICB0aGlzLl9kYXRlRnJvbU1vZGVsID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5tb2RlID09PSBJbnRlcmFjdGlvbk1vZGUuRHJvcERvd24pIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5fZm9ybWF0VGltZSh0aGlzLnZhbHVlLCB0aGlzLmZvcm1hdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgYXBwbHlEaXNhYmxlZFN0eWxlRm9ySXRlbShwZXJpb2Q6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMubWluVmFsdWUgfHwgIXRoaXMubWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaW5WYWx1ZURhdGU6IERhdGUgPSB0aGlzLmNvbnZlcnRNaW5NYXhWYWx1ZSh0aGlzLm1pblZhbHVlKTtcbiAgICAgICAgY29uc3QgbWF4VmFsdWVEYXRlOiBEYXRlID0gdGhpcy5jb252ZXJ0TWluTWF4VmFsdWUodGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgIGxldCBob3VyOiBudW1iZXIgPSBwYXJzZUludCh0aGlzLnNlbGVjdGVkSG91ciwgMTApO1xuICAgICAgICBsZXQgbWludXRlOiBudW1iZXIgPSBwYXJzZUludCh0aGlzLnNlbGVjdGVkTWludXRlLCAxMCk7XG4gICAgICAgIGxldCBzZWNvbmRzOiBudW1iZXIgPSBwYXJzZUludCh0aGlzLnNlbGVjdGVkU2Vjb25kcywgMTApO1xuICAgICAgICBsZXQgYW1QTTogc3RyaW5nID0gdGhpcy5zZWxlY3RlZEFtUG07XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShtaW5WYWx1ZURhdGUpO1xuICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgY2FzZSBUaW1lUGFydHMuSG91cjpcbiAgICAgICAgICAgICAgICBob3VyID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBUaW1lUGFydHMuTWludXRlOlxuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgVGltZVBhcnRzLlNlY29uZHM6XG4gICAgICAgICAgICAgICAgc2Vjb25kcyA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgVGltZVBhcnRzLkFNUE06XG4gICAgICAgICAgICAgICAgYW1QTSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFtUE0gPT09ICdQTScpIHtcbiAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZS5zZXRIb3Vycyhob3VyKTtcbiAgICAgICAgZGF0ZS5zZXRNaW51dGVzKG1pbnV0ZSk7XG4gICAgICAgIGRhdGUuc2V0U2Vjb25kcyhzZWNvbmRzKTtcbiAgICAgICAgcmV0dXJuIGRhdGUgPCBtaW5WYWx1ZURhdGUgfHwgZGF0ZSA+IG1heFZhbHVlRGF0ZTtcblxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogRGF0ZSkgPT4gdm9pZCkge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dlbmVyYXRlSG91cnMoKTtcbiAgICAgICAgdGhpcy5fZ2VuZXJhdGVNaW51dGVzKCk7XG4gICAgICAgIHRoaXMuX2dlbmVyYXRlU2Vjb25kcygpO1xuICAgICAgICBpZiAodGhpcy5mb3JtYXQuaW5kZXhPZigndHQnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQW1QbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZHJvcERvd25PdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgICAgICBjbG9zZU9uT3V0c2lkZUNsaWNrOiB0cnVlLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9kaWFsb2dPdmVybGF5U2V0dGluZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5fbmdDb250cm9sID0gdGhpcy5faW5qZWN0b3IuZ2V0PE5nQ29udHJvbD4oTmdDb250cm9sLCBudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gSW50ZXJhY3Rpb25Nb2RlLkRyb3BEb3duICYmIHRoaXMuX2lucHV0RWxlbWVudFJlZikge1xuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuX2lucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGhyb3R0bGUoKCkgPT4gaW50ZXJ2YWwoMCwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgICAgICApLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlTLlVQX0FSUk9XIHx8IGV2ZW50LmtleSA9PT0gS0VZUy5VUF9BUlJPV19JRSB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09IEtFWVMuRE9XTl9BUlJPVyB8fCBldmVudC5rZXkgPT09IEtFWVMuRE9XTl9BUlJPV19JRSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwaW5PbkVkaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudG9nZ2xlUmVmICYmIHRoaXMuX2lucHV0R3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLmVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLl9pbnB1dEdyb3VwLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArICdweCc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50b2dnbGVSZWYpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLm9uQ2xvc2VkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSBJbnRlcmFjdGlvbk1vZGUuRHJvcERvd24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Ecm9wRG93bkNsb3NlZCgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMub25DbG9zZWQuZW1pdCh0aGlzKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVJlZi5vbk9wZW5lZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk9wZW5lZC5lbWl0KHRoaXMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUmVmLm9uQ2xvc2luZy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2luZy5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICAvLyBJZiBjYW5jZWxlZCBpbiBhIHVzZXIgb25DbG9zaW5nIGhhbmRsZXJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IGZvY3VzIHRoZSBpbnB1dCBpZiBjbGlja2luZyBvdXRzaWRlIGluIGRyb3Bkb3duIG1vZGVcbiAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0RWRpdEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgJiYgIShldmVudC5ldmVudCAmJiB0aGlzLm1vZGUgPT09IEludGVyYWN0aW9uTW9kZS5Ecm9wRG93bikpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVWYWxpZGl0eU9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmRldGVybWluZUN1cnNvclBvcygpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdHVzQ2hhbmdlcyQgPSB0aGlzLl9uZ0NvbnRyb2wuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUodGhpcy5vblN0YXR1c0NoYW5nZWQuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faW5wdXRHcm91cC5pc1JlcXVpcmVkID0gdGhpcy5yZXF1aXJlZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgLy8gaWYgb25lIHNldHMgbW9kZSBhdCBydW4gdGltZSB0aGlzIGZvcmNlcyBpbml0aWFsaXphdGlvbiBvZiBuZXcgaWd4SW5wdXRHcm91cFxuICAgICAgICAvLyBBcyBhIHJlc3VsdCBhIG5ldyBpZ3hJbnB1dERpcmVjdGl2ZSBpcyBpbml0aWFsaXplZCB0b28uIEluIG5nQWZ0ZXJWaWV3SW5pdCBvZlxuICAgICAgICAvLyB0aGUgbmV3IGRpcmVjdGl2ZSBpc1JlcXVpcmVkIG9mIHRoZSBpZ3hJbnB1dEdyb3VwIGlzIHNldCBhZ2Fpbi4gSG93ZXZlclxuICAgICAgICAvLyBuZ0FmdGVyVmlld0luaXQgb2YgdGhlIHRpbWUgcGlja2VyIGlzIG5vdCBjYWxsZWQgYWdhaW4gYW5kIHdlIG1heSBmaW5pc2ggd2l0aCB3cm9uZ1xuICAgICAgICAvLyBpc1JlcXVpcmVkIGluIGlneElucHV0R3JvdXAuIFRoaXMgaXMgd2h5IHdlIHNob3VsZCBzZXQgaXQgaGVyLCBvbmx5IHdoZW4gbmVlZGVkXG4gICAgICAgIGlmICh0aGlzLl9pbnB1dEdyb3VwICYmIHRoaXMuX2lucHV0R3JvdXAuaXNSZXF1aXJlZCAhPT0gdGhpcy5yZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRHcm91cC5pc1JlcXVpcmVkID0gdGhpcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICBpZiAodGhpcy5fc3RhdHVzQ2hhbmdlcyQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXR1c0NoYW5nZXMkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY29udmVydE1pbk1heFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLnZhbHVlID8gbmV3IERhdGUodGhpcy52YWx1ZSkgOiB0aGlzLl9kYXRlRnJvbU1vZGVsID8gbmV3IERhdGUodGhpcy5fZGF0ZUZyb21Nb2RlbCkgOiBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHZhbHVlLnNwbGl0KC9bXFxzOl0rLyk7XG4gICAgICAgIGxldCBob3VyOyBsZXQgbWludXRlczsgbGV0IHNlY29uZHM7IGxldCBhbVBNO1xuXG4gICAgICAgIGRhdGUuc2V0U2Vjb25kcygwKTtcblxuICAgICAgICBpZiAodGhpcy5zaG93SG91cnNMaXN0KSB7XG4gICAgICAgICAgICBob3VyID0gc2VjdGlvbnNbMF07XG4gICAgICAgICAgICBkYXRlLnNldEhvdXJzKHBhcnNlSW50KGhvdXIsIDEwKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaG93TWludXRlc0xpc3QpIHtcbiAgICAgICAgICAgIG1pbnV0ZXMgPSB0aGlzLnNob3dIb3Vyc0xpc3QgPyBzZWN0aW9uc1sxXSA6IHNlY3Rpb25zWzBdO1xuICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKHBhcnNlSW50KG1pbnV0ZXMsIDEwKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaG93U2Vjb25kc0xpc3QpIHtcbiAgICAgICAgICAgIHNlY29uZHMgPSBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAodGhpcy5zaG93QW1QbUxpc3QgPyAyIDogMSldO1xuICAgICAgICAgICAgZGF0ZS5zZXRTZWNvbmRzKHBhcnNlSW50KHNlY29uZHMsIDEwKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaG93QW1QbUxpc3QpIHtcbiAgICAgICAgICAgIGFtUE0gPSBzZWN0aW9uc1tzZWN0aW9ucy5sZW5ndGggLSAxXS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoKCh0aGlzLnNob3dIb3Vyc0xpc3QgJiYgZGF0ZS5nZXRIb3VycygpLnRvU3RyaW5nKCkgIT09ICcxMicpIHx8XG4gICAgICAgICAgICAgICAgKCF0aGlzLnNob3dIb3Vyc0xpc3QgJiYgZGF0ZS5nZXRIb3VycygpLnRvU3RyaW5nKCkgPD0gJzExJykpICYmIGFtUE0gPT09ICdQTScpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSArIDEyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dIb3Vyc0xpc3QgJiYgYW1QTSA9PT0gJ0FNJyAmJiBkYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKSA+ICcxMScpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSAtIDEyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0hvdXJzTGlzdCAmJiBkYXRlLmdldEhvdXJzKCkgPT09IDEyICYmIGFtUE0gPT09ICdBTScpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEhvdXJzKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFJlZiA/IHRoaXMuX2lucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldElucHV0R3JvdXBFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRHcm91cCA/IHRoaXMuX2lucHV0R3JvdXAuZWxlbWVudC5uYXRpdmVFbGVtZW50IDogbnVsbDtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIG9wZW5zIHRoZSBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IEhUTUxFbGVtZW50IC0gdGhlIHRhcmdldCBlbGVtZW50IHRvIHVzZSBmb3IgcG9zaXRpb25pbmcgdGhlIGRyb3AgZG93biBjb250YWluZXIgYWNjb3JkaW5nIHRvXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgW3ZhbHVlXT1cImRhdGVcIiBtb2RlPVwiZHJvcGRvd25cIiAjcmV0ZW1wbGF0ZWQ+XG4gICAgICogICA8bmctdGVtcGxhdGUgaWd4VGltZVBpY2tlclRlbXBsYXRlIGxldC1vcGVuRGlhbG9nPVwib3BlbkRpYWxvZ1wiXG4gICAgICogICAgICAgICAgICAgICAgbGV0LWRpc3BsYXlUaW1lPVwiZGlzcGxheVRpbWVcIj5cbiAgICAgKiAgICAgPGlneC1pbnB1dC1ncm91cD5cbiAgICAgKiAgICAgICA8aW5wdXQgI2Ryb3BEb3duVGFyZ2V0IGlneElucHV0IFt2YWx1ZV09XCJkaXNwbGF5VGltZVwiIC8+XG4gICAgICogICAgICAgPGlneC1zdWZmaXggKGNsaWNrKT1cIm9wZW5EaWFsb2coZHJvcERvd25UYXJnZXQpXCI+XG4gICAgICogICAgICAgICA8aWd4LWljb24+YWxhcm08L2lneC1pY29uPlxuICAgICAqICAgICAgIDwvaWd4LXN1ZmZpeD5cbiAgICAgKiAgICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgICogICA8L25nLXRlbXBsYXRlPlxuICAgICAqIDwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuRGlhbG9nKHRhcmdldD86IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50b2dnbGVSZWYuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb25Ecm9wRG93bkNsb3NlZCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5vdmVybGF5U2V0dGluZ3M7XG5cbiAgICAgICAgaWYgKHRhcmdldCAmJiBzZXR0aW5ncyAmJiBzZXR0aW5ncy5wb3NpdGlvblN0cmF0ZWd5KSB7XG4gICAgICAgICAgICBzZXR0aW5ncy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3V0bGV0KSB7XG4gICAgICAgICAgICBzZXR0aW5ncy5vdXRsZXQgPSB0aGlzLm91dGxldDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9nZ2xlUmVmLm9wZW4oc2V0dGluZ3MpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplQ29udGFpbmVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2Nyb2xscyBhIGhvdXIgaXRlbSBpbnRvIHZpZXcuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHNjcmhpbnRvVmlldyhwaWNrZXIpIHtcbiAgICAgKiBwaWNrZXIuc2Nyb2xsSG91ckludG9WaWV3KCcyJyk7XG4gICAgICogfVxuICAgICAqICBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciAjcGlja2VyIGZvcm1hdD1cImg6bW0gdHRcIiAob25PcGVuZWQpPVwic2NyaGludG9WaWV3KHBpY2tlcilcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIHRvIGJlIHNjcm9sbGVkIGluIHZpZXcuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbEhvdXJJbnRvVmlldyhpdGVtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0hvdXJzTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgaG91ckludG9WaWV3ID0gdGhpcy5fc2Nyb2xsSXRlbUludG9WaWV3KGl0ZW0sIHRoaXMuX2hvdXJJdGVtcywgdGhpcy5zZWxlY3RlZEhvdXIsIHRoaXMuX2lzSG91ckxpc3RMb29wLCAnaG91cicpO1xuICAgICAgICAgICAgaWYgKGhvdXJJbnRvVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hvdXJWaWV3ID0gaG91ckludG9WaWV3LnZpZXc7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBob3VySW50b1ZpZXcuc2VsZWN0ZWRJdGVtO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlSW5wdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNjcm9sbHMgYSBtaW51dGUgaXRlbSBpbnRvIHZpZXcuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHNjck1pbnRvVmlldyhwaWNrZXIpIHtcbiAgICAgKiBwaWNrZXIuc2Nyb2xsTWludXRlSW50b1ZpZXcoJzMnKTtcbiAgICAgKiB9XG4gICAgICogIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyICNwaWNrZXIgZm9ybWF0PVwiaDptbSB0dFwiIChvbk9wZW5lZCk9XCJzY3JNaW50b1ZpZXcocGlja2VyKVwiPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gdG8gYmUgc2Nyb2xsZWQgaW4gdmlldy5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2Nyb2xsTWludXRlSW50b1ZpZXcoaXRlbTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNob3dNaW51dGVzTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgbWludXRlSW50b1ZpZXcgPSB0aGlzLl9zY3JvbGxJdGVtSW50b1ZpZXcoaXRlbSwgdGhpcy5fbWludXRlSXRlbXMsIHRoaXMuc2VsZWN0ZWRNaW51dGUsIHRoaXMuX2lzTWludXRlTGlzdExvb3AsICdtaW51dGUnKTtcbiAgICAgICAgICAgIGlmIChtaW51dGVJbnRvVmlldykge1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbnV0ZVZpZXcgPSBtaW51dGVJbnRvVmlldy52aWV3O1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBtaW51dGVJbnRvVmlldy5zZWxlY3RlZEl0ZW07XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVJbnB1dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2Nyb2xscyBhIHNlY29uZHMgaXRlbSBpbnRvIHZpZXcuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHNjck1pbnRvVmlldyhwaWNrZXIpIHtcbiAgICAgKiBwaWNrZXIuc2Nyb2xsU2Vjb25kc0ludG9WaWV3KCc0Jyk7XG4gICAgICogfVxuICAgICAqICBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC10aW1lLXBpY2tlciAjcGlja2VyIGZvcm1hdD1cImg6bW0gdHRcIiAob25PcGVuZWQpPVwic2NyTWludG9WaWV3KHBpY2tlcilcIj48L2lneC10aW1lLXBpY2tlcj5cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIHRvIGJlIHNjcm9sbGVkIGluIHZpZXcuXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbFNlY29uZHNJbnRvVmlldyhpdGVtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NlY29uZHNMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmRzSW50b1ZpZXcgPSB0aGlzLl9zY3JvbGxJdGVtSW50b1ZpZXcoaXRlbSxcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWNvbmRzSXRlbXMsIHRoaXMuc2VsZWN0ZWRTZWNvbmRzLCB0aGlzLl9pc1NlY29uZHNMaXN0TG9vcCwgJ3NlY29uZHMnKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmRzSW50b1ZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWNvbmRzVmlldyA9IHNlY29uZHNJbnRvVmlldy52aWV3O1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWNvbmRzID0gc2Vjb25kc0ludG9WaWV3LnNlbGVjdGVkSXRlbTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZUlucHV0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTY3JvbGxzIGFuIGFtcG0gaXRlbSBpbnRvIHZpZXcuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHNjckFtUG1JbnRvVmlldyhwaWNrZXIpIHtcbiAgICAgKiBwaWNrZXIuc2Nyb2xsQW1QbUludG9WaWV3KCdQTScpO1xuICAgICAqIH1cbiAgICAgKiAgYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtdGltZS1waWNrZXIgI3BpY2tlciBmb3JtYXQ9XCJoOm1tIHR0XCIgKG9uT3BlbmVkKT1cInNjckFtUG1JbnRvVmlldyhwaWNrZXIpXCI+PC9pZ3gtdGltZS1waWNrZXI+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSB0byBiZSBzY3JvbGxlZCBpbiB2aWV3LlxuICAgICAqL1xuICAgIHB1YmxpYyBzY3JvbGxBbVBtSW50b1ZpZXcoaXRlbTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNob3dBbVBtTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgYW1wbUludG9WaWV3ID0gdGhpcy5fc2Nyb2xsSXRlbUludG9WaWV3KGl0ZW0sIHRoaXMuX2FtcG1JdGVtcywgdGhpcy5zZWxlY3RlZEFtUG0sIGZhbHNlLCBudWxsKTtcbiAgICAgICAgICAgIGlmIChhbXBtSW50b1ZpZXcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hbXBtVmlldyA9IGFtcG1JbnRvVmlldy52aWV3O1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtID0gYW1wbUludG9WaWV3LnNlbGVjdGVkSXRlbTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZUlucHV0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5leHRIb3VyKCkge1xuICAgICAgICBjb25zdCBuZXh0SG91ciA9IHRoaXMuX25leHRJdGVtKHRoaXMuX2hvdXJJdGVtcywgdGhpcy5zZWxlY3RlZEhvdXIsIHRoaXMuX2lzSG91ckxpc3RMb29wLCAnaG91cicpO1xuICAgICAgICB0aGlzLl9ob3VyVmlldyA9IG5leHRIb3VyLnZpZXc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gbmV4dEhvdXIuc2VsZWN0ZWRJdGVtO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlSW5wdXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHByZXZIb3VyKCkge1xuICAgICAgICBjb25zdCBwcmV2SG91ciA9IHRoaXMuX3ByZXZJdGVtKHRoaXMuX2hvdXJJdGVtcywgdGhpcy5zZWxlY3RlZEhvdXIsIHRoaXMuX2lzSG91ckxpc3RMb29wLCAnaG91cicpO1xuICAgICAgICB0aGlzLl9ob3VyVmlldyA9IHByZXZIb3VyLnZpZXc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gcHJldkhvdXIuc2VsZWN0ZWRJdGVtO1xuXG4gICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlSW5wdXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5leHRNaW51dGUoKSB7XG4gICAgICAgIGNvbnN0IG5leHRNaW51dGUgPSB0aGlzLl9uZXh0SXRlbSh0aGlzLl9taW51dGVJdGVtcywgdGhpcy5zZWxlY3RlZE1pbnV0ZSwgdGhpcy5faXNNaW51dGVMaXN0TG9vcCwgJ21pbnV0ZScpO1xuICAgICAgICB0aGlzLl9taW51dGVWaWV3ID0gbmV4dE1pbnV0ZS52aWV3O1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gbmV4dE1pbnV0ZS5zZWxlY3RlZEl0ZW07XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVJbnB1dCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHJldk1pbnV0ZSgpIHtcbiAgICAgICAgY29uc3QgcHJldk1pbnV0ZSA9IHRoaXMuX3ByZXZJdGVtKHRoaXMuX21pbnV0ZUl0ZW1zLCB0aGlzLnNlbGVjdGVkTWludXRlLCB0aGlzLl9pc01pbnV0ZUxpc3RMb29wLCAnbWludXRlJyk7XG4gICAgICAgIHRoaXMuX21pbnV0ZVZpZXcgPSBwcmV2TWludXRlLnZpZXc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBwcmV2TWludXRlLnNlbGVjdGVkSXRlbTtcblxuICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZUlucHV0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0U2Vjb25kcygpIHtcbiAgICAgICAgY29uc3QgbmV4dFNlY29uZHMgPSB0aGlzLl9uZXh0SXRlbSh0aGlzLl9zZWNvbmRzSXRlbXMsIHRoaXMuc2VsZWN0ZWRTZWNvbmRzLCB0aGlzLl9pc1NlY29uZHNMaXN0TG9vcCwgJ3NlY29uZHMnKTtcbiAgICAgICAgdGhpcy5fc2Vjb25kc1ZpZXcgPSBuZXh0U2Vjb25kcy52aWV3O1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2Vjb25kcyA9IG5leHRTZWNvbmRzLnNlbGVjdGVkSXRlbTtcblxuICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZUlucHV0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2U2Vjb25kcygpIHtcbiAgICAgICAgY29uc3QgcHJldlNlY29uZHMgPSB0aGlzLl9wcmV2SXRlbSh0aGlzLl9zZWNvbmRzSXRlbXMsIHRoaXMuc2VsZWN0ZWRTZWNvbmRzLCB0aGlzLl9pc1NlY29uZHNMaXN0TG9vcCwgJ3NlY29uZHMnKTtcbiAgICAgICAgdGhpcy5fc2Vjb25kc1ZpZXcgPSBwcmV2U2Vjb25kcy52aWV3O1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2Vjb25kcyA9IHByZXZTZWNvbmRzLnNlbGVjdGVkSXRlbTtcblxuICAgICAgICB0aGlzLl91cGRhdGVFZGl0YWJsZUlucHV0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZXh0QW1QbSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuX2FtcG1JdGVtcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRBbVBtKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCArIDEgPCB0aGlzLl9hbXBtSXRlbXMubGVuZ3RoIC0gMykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQW1QbVZpZXcoc2VsZWN0ZWRJbmRleCAtIDIsIHNlbGVjdGVkSW5kZXggKyA1KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbVBtID0gdGhpcy5fYW1wbUl0ZW1zW3NlbGVjdGVkSW5kZXggKyAxXTtcblxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlRWRpdGFibGVJbnB1dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2QW1QbSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuX2FtcG1JdGVtcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRBbVBtKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA+IDMpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUFtUG1WaWV3KHNlbGVjdGVkSW5kZXggLSA0LCBzZWxlY3RlZEluZGV4ICsgMyk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQW1QbSA9IHRoaXMuX2FtcG1JdGVtc1tzZWxlY3RlZEluZGV4IC0gMV07XG5cbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUVkaXRhYmxlSW5wdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGN1cnJlbnQgdmFsdWUgaXMgdmFsaWQgc2VsZWN0cyBpdCwgY2xvc2VzIHRoZSBkaWFsb2cgYW5kIHJldHVybnMgdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZGlhbG9nIGNsYXNzPVwiaWd4LXRpbWUtcGlja2VyX19kaWFsb2ctcG9wdXBcIiBbcmlnaHRCdXR0b25MYWJlbF09XCJva0J1dHRvbkxhYmVsXCIgKG9uUmlnaHRCdXR0b25TZWxlY3QpPVwib2tCdXR0b25DbGljaygpXCI+XG4gICAgICogLy8uLlxuICAgICAqIDwvaWd4LWRpYWxvZz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgb2tCdXR0b25DbGljaygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuX2dldFNlbGVjdGVkVGltZSgpO1xuICAgICAgICBpZiAodGhpcy5faXNWYWx1ZVZhbGlkKHRpbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGltZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYXJnczogSWd4VGltZVBpY2tlclZhbGlkYXRpb25GYWlsZWRFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgdGltZVBpY2tlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IHRpbWUsXG4gICAgICAgICAgICAgICAgc2V0VGhyb3VnaFVJOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRpb25GYWlsZWQuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgZGlhbG9nIHdpdGhvdXQgc2VsZWN0aW5nIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWRpYWxvZyBjbGFzcz1cImlneC10aW1lLXBpY2tlcl9fZGlhbG9nLXBvcHVwXCIgW2xlZnRCdXR0b25MYWJlbF09XCJjYW5jZWxCdXR0b25MYWJlbFwiIChvbkxlZnRCdXR0b25TZWxlY3QpPVwiY2FuY2VsQnV0dG9uQ2xpY2soKVwiPlxuICAgICAqIC8vLi4uXG4gICAgICogPC9pZ3gtZGlhbG9nPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBjYW5jZWxCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gSW50ZXJhY3Rpb25Nb2RlLkRyb3BEb3duKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLl9mb3JtYXRUaW1lKHRoaXMudmFsdWUsIHRoaXMuZm9ybWF0KSA6IHRoaXMucGFyc2VNYXNrKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xvc2UoKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuX3ByZXZTZWxlY3RlZEhvdXI7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLl9wcmV2U2VsZWN0ZWRNaW51dGU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWNvbmRzID0gdGhpcy5fcHJldlNlbGVjdGVkU2Vjb25kcztcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFtUG0gPSB0aGlzLl9wcmV2U2VsZWN0ZWRBbVBtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdGhlIGhvdXJzIGN1cnJlbnRseSBpbiB2aWV3LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgQFZpZXdDaGlsZChcIk15Q2hpbGRcIilcbiAgICAgKiBwcml2YXRlIHBpY2tlcjogSWd4VGltZVBpY2tlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IGhJblZpZXcgPSB0aGlzLnBpY2tlci5ob3Vyc0luVmlldztcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGhvdXJzSW5WaWV3KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hvdXJWaWV3LmZpbHRlcigoaG91cikgPT4gaG91ciAhPT0gJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdGhlIG1pbnV0ZXMgY3VycmVudGx5IGluIHZpZXcuXG4gICAgICogYGBgaHRtbFxuICAgICAqICBAVmlld0NoaWxkKFwiTXlDaGlsZFwiKVxuICAgICAqIHByaXZhdGUgcGlja2VyOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgbWluSW5WaWV3ID0gdGhpcy5waWNrZXIubWludXRlc0luVmlldztcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIG1pbnV0ZXNJblZpZXcoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWludXRlVmlldy5maWx0ZXIoKG1pbnV0ZSkgPT4gbWludXRlICE9PSAnJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiB0aGUgc2Vjb25kcyBjdXJyZW50bHkgaW4gdmlldy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogIEBWaWV3Q2hpbGQoXCJNeUNoaWxkXCIpXG4gICAgICogcHJpdmF0ZSBwaWNrZXI6IElneFRpbWVQaWNrZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBtaW5JblZpZXcgPSB0aGlzLnBpY2tlci5zZWNvbmRzSW5WaWV3O1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2Vjb25kc0luVmlldygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWNvbmRzVmlldy5maWx0ZXIoKHNlY29uZHMpID0+IHNlY29uZHMgIT09ICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBBTS9QTSBjdXJyZW50bHkgaW4gdmlldy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogIEBWaWV3Q2hpbGQoXCJNeUNoaWxkXCIpXG4gICAgICogcHJpdmF0ZSBwaWNrZXI6IElneFRpbWVQaWNrZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBBcEluVmlldyA9IHRoaXMucGlja2VyLmFtcG1JblZpZXc7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhbXBtSW5WaWV3KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FtcG1WaWV3LmZpbHRlcigoYW1wbSkgPT4gYW1wbSAhPT0gJycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgZHJvcGRvd24vZGlhbG9nLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXRpbWUtcGlja2VyICN0aW1lUGlja2VyPjwvaWd4LXRpbWUtcGlja2VyPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKCd0aW1lUGlja2VyJywgeyByZWFkOiBJZ3hUaW1lUGlja2VyQ29tcG9uZW50IH0pIHBpY2tlcjogSWd4VGltZVBpY2tlckNvbXBvbmVudDtcbiAgICAgKiBwaWNrZXIuY2xvc2UoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9nZ2xlUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBwYXJzZU1hc2socHJlc2VydmVBbVBtID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG1hc2tXaXRoQW1QbSA9IHRoaXMubWFzay5yZXBsYWNlKG5ldyBSZWdFeHAoJzAnLCAnZycpLCB0aGlzLnByb21wdENoYXIpLnJlcGxhY2UoJ0xMJywgJ0FNJyk7XG4gICAgICAgIGNvbnN0IHB1cmVNYXNrID0gdGhpcy5tYXNrLnJlcGxhY2UobmV3IFJlZ0V4cCgnMCcsICdnJyksIHRoaXMucHJvbXB0Q2hhcikucmVwbGFjZShuZXcgUmVnRXhwKCdMJywgJ2cnKSwgdGhpcy5wcm9tcHRDaGFyKTtcblxuICAgICAgICByZXR1cm4gcHJlc2VydmVBbVBtID8gbWFza1dpdGhBbVBtIDogcHVyZU1hc2s7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9nZ2xlUmVmLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNOb3RFbXB0eSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCBvbGRWYWwgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5wYXJzZU1hc2soZmFsc2UpO1xuICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JQb3NpdGlvbigwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gVE9ETzogcmVmYWN0b3JpbmcgLSB0aGlzLnZhbHVlIHNob3VsZCBiZSBudWxsICM2NTg1XG4gICAgICAgICAgICB0aGlzLnZhbHVlPy5zZXRIb3VycygwLCAwLCAwKTtcblxuICAgICAgICAgICAgaWYgKG9sZFZhbC5nZXRUaW1lKCkgIT09IHRoaXMudmFsdWU/LmdldFRpbWUoKSB8fCB0aGlzLmlzUmVzZXQoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElneFRpbWVQaWNrZXJWYWx1ZUNoYW5nZWRFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRWYWwsXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiB0aGlzLnZhbHVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmVtaXQoYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uSW5wdXQoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXRNYXNrOiBzdHJpbmcgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgIGNvbnN0IG9sZFZhbCA9IG5ldyBEYXRlKHRoaXMudmFsdWUpO1xuXG4gICAgICAgIHRoaXMuaXNOb3RFbXB0eSA9IGlucHV0TWFzayAhPT0gdGhpcy5wYXJzZU1hc2soZmFsc2UpO1xuXG4gICAgICAgIC8vIGhhbmRsZSBjYXNlcyB3aGVyZSBhbGwgZW1wdHkgcG9zaXRpb25zIChwcm9tdHMpIGFyZSBmaWxsZWQgYW5kIHdlIHdhbnQgdG8gdXBkYXRlXG4gICAgICAgIC8vIHRpbWVwaWNrZXIgb3duIHZhbHVlIHByb3BlcnR5IGlmIGl0IGlzIGEgdmFsaWQgRGF0ZVxuICAgICAgICBpZiAoaW5wdXRNYXNrLmluZGV4T2YodGhpcy5wcm9tcHRDaGFyKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0VudHJ5VmFsaWQoaW5wdXRNYXNrKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuY29udmVydE1pbk1heFZhbHVlKGlucHV0TWFzayk7XG4gICAgICAgICAgICAgICAgaWYgKG9sZFZhbC5nZXRUaW1lKCkgIT09IG5ld1ZhbC5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElneFRpbWVQaWNrZXJWYWxpZGF0aW9uRmFpbGVkRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICB0aW1lUGlja2VyOiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IG5ldyBEYXRlKGlucHV0TWFzayksXG4gICAgICAgICAgICAgICAgICAgIHNldFRocm91Z2hVSTogZmFsc2VcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMub25WYWxpZGF0aW9uRmFpbGVkLmVtaXQoYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIHVzZXIgZGVsZXRlcyB0aGUgZGlzcGxheSB2YWx1ZSAod2hlbiBwcmVzc2luZyBiYWNrc3BhY2Ugb3IgZGVsZXRlKVxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnZhbHVlIHx8IGlucHV0TWFzay5sZW5ndGggPT09IDAgfHwgIXRoaXMuaXNOb3RFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5pc05vdEVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBUT0RPOiByZWZhY3RvcmluZyAtIHRoaXMudmFsdWUgc2hvdWxkIGJlIG51bGwgIzY1ODVcbiAgICAgICAgICAgIHRoaXMudmFsdWU/LnNldEhvdXJzKDAsIDAsIDApO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBpbnB1dE1hc2s7XG4gICAgICAgICAgICBpZiAob2xkVmFsLmdldFRpbWUoKSAhPT0gdGhpcy52YWx1ZT8uZ2V0VGltZSgpIHx8IHRoaXMuaXNSZXNldCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogRG8gbm90IGVtaXQgZXZlbnQgd2hlbiB0aGUgZWRpdG9yIGlzIGVtcHR5ICM2NDgyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJnczogSWd4VGltZVBpY2tlclZhbHVlQ2hhbmdlZEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6IG9sZFZhbCxcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IHRoaXMudmFsdWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Gb2N1cyhldmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTm90RW1wdHkgPSBldmVudC50YXJnZXQudmFsdWUgIT09IHRoaXMucGFyc2VNYXNrKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uQmx1cihldmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSBJbnRlcmFjdGlvbk1vZGUuRHJvcERvd24pIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgICAgICB0aGlzLmlzTm90RW1wdHkgPSB2YWx1ZSAhPT0gJyc7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgKHZhbHVlICE9PSB0aGlzLnBhcnNlTWFzaygpIHx8IHZhbHVlICE9PSB0aGlzLnBhcnNlTWFzayhmYWxzZSkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzRW50cnlWYWxpZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsID0gdGhpcy5jb252ZXJ0TWluTWF4VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZS5nZXRUaW1lKCkgIT09IG5ld1ZhbC5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmdzOiBJZ3hUaW1lUGlja2VyVmFsaWRhdGlvbkZhaWxlZEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVQaWNrZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGhyb3VnaFVJOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uVmFsaWRhdGlvbkZhaWxlZC5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRvZ2dsZVJlZi5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVZhbGlkaXR5T25CbHVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIGlmIHRoZSBjbGljayBpcyBub3Qgb24gdGhlIGlucHV0IGJ1dCBpbiBpbnB1dCBncm91cFxuICAgICAgICAvLyBlLmcuIG9uIHByZWZpeCBvciBzdWZmaXgsIHByZXZlbnQgZGVmYXVsdCBhbmQgdGhpcyB3YXkgcHJldmVudCBibHVyXG4gICAgICAgIGlmIChldmVudC50YXJnZXQgIT09IHRoaXMuZ2V0RWRpdEVsZW1lbnQoKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3Bpbk9uRWRpdChldmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGxldCBzaWduOiBudW1iZXI7XG4gICAgICAgIGxldCBkaXNwbGF5VmFsOiBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWwgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgY29uc3QgbWluID0gdGhpcy5taW5WYWx1ZSA/IHRoaXMuY29udmVydE1pbk1heFZhbHVlKHRoaXMubWluVmFsdWUpIDogdGhpcy5jb252ZXJ0TWluTWF4VmFsdWUoJzAwOjAwJyk7XG4gICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4VmFsdWUgPyB0aGlzLmNvbnZlcnRNaW5NYXhWYWx1ZSh0aGlzLm1heFZhbHVlKSA6IHRoaXMuY29udmVydE1pbk1heFZhbHVlKCcyNDowMCcpO1xuXG4gICAgICAgIGNvbnN0IGN1cnNvciA9IHRoaXMuX2dldEN1cnNvclBvc2l0aW9uKCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuICAgICAgICAgICAgc2lnbiA9IGtleSA9PT0gS0VZUy5ET1dOX0FSUk9XIHx8IGtleSA9PT0gS0VZUy5ET1dOX0FSUk9XX0lFID8gLTEgOiAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmRlbHRhWSkge1xuICAgICAgICAgICAgc2lnbiA9IGV2ZW50LmRlbHRhWSA8IDAgPyAxIDogLTE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbWluO1xuICAgICAgICAgICAgZGlzcGxheVZhbCA9IHRoaXMuX2Zvcm1hdFRpbWUodGhpcy52YWx1ZSwgdGhpcy5mb3JtYXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaERlbHRhID0gdGhpcy5pdGVtc0RlbHRhLmhvdXJzICogNjAgKyAoc2lnbiAqIHRoaXMudmFsdWUuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgIGNvbnN0IG1EZWx0YSA9IHRoaXMuaXRlbXNEZWx0YS5taW51dGVzO1xuICAgICAgICAgICAgY29uc3Qgc0RlbHRhID0gdGhpcy5pdGVtc0RlbHRhLnNlY29uZHM7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnNvck9uSG91cnMoY3Vyc29yLCB0aGlzLnNob3dIb3Vyc0xpc3QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX3NwaW5Ib3VycyhjdXJyZW50VmFsLCBtaW4sIG1heCwgaERlbHRhLCBzaWduKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnNvck9uTWludXRlcyhjdXJzb3IsIHRoaXMuc2hvd0hvdXJzTGlzdCwgdGhpcy5zaG93TWludXRlc0xpc3QpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuX3NwaW5NaW51dGVzKGN1cnJlbnRWYWwsIG1EZWx0YSwgc2lnbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJzb3JPblNlY29uZHMoY3Vyc29yLCB0aGlzLnNob3dIb3Vyc0xpc3QsIHRoaXMuc2hvd01pbnV0ZXNMaXN0LCB0aGlzLnNob3dTZWNvbmRzTGlzdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5fc3BpblNlY29uZHMoY3VycmVudFZhbCwgc0RlbHRhLCBzaWduKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnNvck9uQW1QbShjdXJzb3IsIHRoaXMuc2hvd0hvdXJzTGlzdCwgdGhpcy5zaG93TWludXRlc0xpc3QsIHRoaXMuc2hvd1NlY29uZHNMaXN0LCB0aGlzLnNob3dBbVBtTGlzdCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuZGlzcGxheVZhbHVlLnNwbGl0KC9bXFxzOl0rLyk7XG4gICAgICAgICAgICAgICAgc2lnbiA9IHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtIDFdID09PSAnQU0nID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWwuc2V0SG91cnMoY3VycmVudFZhbC5nZXRIb3VycygpICsgKHNpZ24gKiAxMikpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGN1cnJlbnRWYWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpc3BsYXlWYWwgPSB0aGlzLl9mb3JtYXRUaW1lKHRoaXMudmFsdWUsIHRoaXMuZm9ybWF0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1pbm9yIGhhY2sgZm9yIHByZXZlbnRpbmcgY3Vyc29yIGp1bXBpbmcgaW4gSUVcbiAgICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gdGhpcy5pbnB1dEZvcm1hdC50cmFuc2Zvcm0oZGlzcGxheVZhbCk7XG4gICAgICAgIHRoaXMuX2lucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fZGlzcGxheVZhbHVlO1xuICAgICAgICB0aGlzLl9zZXRDdXJzb3JQb3NpdGlvbihjdXJzb3IpO1xuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDdXJzb3JQb3NpdGlvbihjdXJzb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25TdGF0dXNDaGFuZ2VkKCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuX2lucHV0RGlyZWN0aXZlIHx8IHRoaXMuX2lucHV0RGlyZWN0aXZlVXNlclRlbXBsYXRlO1xuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIGlmICgodGhpcy5fbmdDb250cm9sLmNvbnRyb2wudG91Y2hlZCB8fCB0aGlzLl9uZ0NvbnRyb2wuY29udHJvbC5kaXJ0eSkgJiZcbiAgICAgICAgICAgICAgICAodGhpcy5fbmdDb250cm9sLmNvbnRyb2wudmFsaWRhdG9yIHx8IHRoaXMuX25nQ29udHJvbC5jb250cm9sLmFzeW5jVmFsaWRhdG9yKSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pbnB1dEdyb3VwLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC52YWxpZCA9IHRoaXMuX25nQ29udHJvbC52YWxpZCA/IElneElucHV0U3RhdGUuVkFMSUQgOiBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQudmFsaWQgPSB0aGlzLl9uZ0NvbnRyb2wudmFsaWQgPyBJZ3hJbnB1dFN0YXRlLklOSVRJQUwgOiBJZ3hJbnB1dFN0YXRlLklOVkFMSUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnB1dC52YWxpZCA9IElneElucHV0U3RhdGUuSU5JVElBTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5faW5wdXRHcm91cCAmJiB0aGlzLl9pbnB1dEdyb3VwLmlzUmVxdWlyZWQgIT09IHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0R3JvdXAuaXNSZXF1aXJlZCA9IHRoaXMucmVxdWlyZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaW1NYXNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1hc2sgPSB0aGlzLm1hc2suc2xpY2UodGhpcy5tYXNrLmluZGV4T2YoJzonKSArIDEsIHRoaXMubWFzay5sZW5ndGgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGV0ZXJtaW5lQ3Vyc29yUG9zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyQ3Vyc29yUG9zKCk7XG4gICAgICAgIGZvciAoY29uc3QgY2hhciBvZiB0aGlzLmZvcm1hdCkge1xuICAgICAgICAgICAgc3dpdGNoIChjaGFyKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnSCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ob3Vyc1Bvcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3Vyc1Bvcy5hZGQodGhpcy5mb3JtYXQuaW5kZXhPZihjaGFyKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3Vyc1Bvcy5hZGQodGhpcy5mb3JtYXQubGFzdEluZGV4T2YoY2hhcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvdXJzUG9zLmFkZCh0aGlzLmZvcm1hdC5sYXN0SW5kZXhPZihjaGFyKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21pbnV0ZXNQb3Muc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWludXRlc1Bvcy5hZGQodGhpcy5mb3JtYXQuaW5kZXhPZihjaGFyKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9taW51dGVzUG9zLmFkZCh0aGlzLmZvcm1hdC5sYXN0SW5kZXhPZihjaGFyKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWludXRlc1Bvcy5hZGQodGhpcy5mb3JtYXQubGFzdEluZGV4T2YoY2hhcikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnUyc6XG4gICAgICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zZWNvbmRzUG9zLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlY29uZHNQb3MuYWRkKHRoaXMuZm9ybWF0LmluZGV4T2YoY2hhcikpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2Vjb25kc1Bvcy5hZGQodGhpcy5mb3JtYXQubGFzdEluZGV4T2YoY2hhcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlY29uZHNQb3MuYWRkKHRoaXMuZm9ybWF0Lmxhc3RJbmRleE9mKGNoYXIpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYW1QbVBvcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbVBtUG9zLmFkZCh0aGlzLmZvcm1hdC5pbmRleE9mKGNoYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FtUG1Qb3MuYWRkKHRoaXMuZm9ybWF0Lmxhc3RJbmRleE9mKGNoYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbVBtUG9zLmFkZCh0aGlzLmZvcm1hdC5sYXN0SW5kZXhPZihjaGFyKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJDdXJzb3JQb3MoKSB7XG4gICAgICAgIHRoaXMuX2hvdXJzUG9zLmZvckVhY2godiA9PiB0aGlzLl9ob3Vyc1Bvcy5kZWxldGUodikpO1xuICAgICAgICB0aGlzLl9taW51dGVzUG9zLmZvckVhY2godiA9PiB0aGlzLl9taW51dGVzUG9zLmRlbGV0ZSh2KSk7XG4gICAgICAgIHRoaXMuX3NlY29uZHNQb3MuZm9yRWFjaCh2ID0+IHRoaXMuX3NlY29uZHNQb3MuZGVsZXRlKHYpKTtcbiAgICAgICAgdGhpcy5fYW1QbVBvcy5mb3JFYWNoKHYgPT4gdGhpcy5fYW1QbVBvcy5kZWxldGUodikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Njcm9sbEl0ZW1JbnRvVmlldyhpdGVtOiBzdHJpbmcsIGl0ZW1zOiBhbnlbXSwgc2VsZWN0ZWRJdGVtOiBzdHJpbmcsIGlzTGlzdExvb3A6IGJvb2xlYW4sIHZpZXdUeXBlOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBsZXQgaXRlbUludG9WaWV3O1xuICAgICAgICBpZiAoaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKGl0ZW0gPT09ICdBTScgfHwgaXRlbSA9PT0gJ1BNJykgPyBpdGVtcy5pbmRleE9mKGl0ZW0pIDogaXRlbXMuaW5kZXhPZihwYXJzZUludChpdGVtLCAxMCkpO1xuICAgICAgICAgICAgbGV0IHZpZXc7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNMaXN0TG9vcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW0gPSB0aGlzLl9pdGVtVG9TdHJpbmcoaXRlbXNbaW5kZXggLSAxXSwgdmlld1R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUludG9WaWV3ID0gdGhpcy5fbmV4dEl0ZW0oaXRlbXMsIHNlbGVjdGVkSXRlbSwgaXNMaXN0TG9vcCwgdmlld1R5cGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtID0gdGhpcy5faXRlbVRvU3RyaW5nKGl0ZW1zWzFdLCB2aWV3VHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtSW50b1ZpZXcgPSB0aGlzLl9wcmV2SXRlbShpdGVtcywgc2VsZWN0ZWRJdGVtLCBpc0xpc3RMb29wLCB2aWV3VHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2aWV3ID0gaXRlbXMuc2xpY2UoaW5kZXggLSAzLCBpbmRleCArIDQpO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW0gPSB0aGlzLl9pdGVtVG9TdHJpbmcoaXRlbXNbaW5kZXhdLCB2aWV3VHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JbnRvVmlldyA9IHsgc2VsZWN0ZWRJdGVtLCB2aWV3IH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW1JbnRvVmlldy52aWV3ID0gdGhpcy5fdmlld1RvU3RyaW5nKGl0ZW1JbnRvVmlldy52aWV3LCB2aWV3VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1JbnRvVmlldztcbiAgICB9XG5cbiAgICBwcml2YXRlIF92aWV3VG9TdHJpbmcodmlldzogYW55LCB2aWV3VHlwZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mICh2aWV3W2ldKSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB2aWV3W2ldID0gdGhpcy5faXRlbVRvU3RyaW5nKHZpZXdbaV0sIHZpZXdUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmlldztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pdGVtVG9TdHJpbmcoaXRlbTogYW55LCB2aWV3VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGl0ZW0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGl0ZW0gPSAnJztcbiAgICAgICAgfSBlbHNlIGlmICh2aWV3VHlwZSAmJiB0eXBlb2YgKGl0ZW0pICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgbGVhZFplcm9Ib3VyID0gKGl0ZW0gPCAxMCAmJiAodGhpcy5mb3JtYXQuaW5kZXhPZignaGgnKSAhPT0gLTEgfHwgdGhpcy5mb3JtYXQuaW5kZXhPZignSEgnKSAhPT0gLTEpKTtcbiAgICAgICAgICAgIGNvbnN0IGxlYWRaZXJvTWludXRlID0gKGl0ZW0gPCAxMCAmJiB0aGlzLmZvcm1hdC5pbmRleE9mKCdtbScpICE9PSAtMSk7XG4gICAgICAgICAgICBjb25zdCBsZWFkWmVyb1NlY29uZHMgPSAoaXRlbSA8IDEwICYmIHRoaXMuZm9ybWF0LmluZGV4T2YoJ3NzJykgIT09IC0xKTtcblxuICAgICAgICAgICAgY29uc3QgbGVhZFplcm8gPSB7XG4gICAgICAgICAgICAgICAgaG91cjogbGVhZFplcm9Ib3VyLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogbGVhZFplcm9NaW51dGUsXG4gICAgICAgICAgICAgICAgc2Vjb25kczogbGVhZFplcm9TZWNvbmRzXG4gICAgICAgICAgICB9W3ZpZXdUeXBlXTtcblxuICAgICAgICAgICAgaXRlbSA9IChsZWFkWmVybykgPyAnMCcgKyBpdGVtIDogYCR7aXRlbX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXZJdGVtKGl0ZW1zOiBhbnlbXSwgc2VsZWN0ZWRJdGVtOiBzdHJpbmcsIGlzTGlzdExvb3A6IGJvb2xlYW4sIHZpZXdUeXBlOiBzdHJpbmcpOiBhbnkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gaXRlbXMuaW5kZXhPZihwYXJzZUludChzZWxlY3RlZEl0ZW0sIDEwKSk7XG4gICAgICAgIGNvbnN0IGl0ZW1zQ291bnQgPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIGxldCB2aWV3O1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdmlldyA9IGl0ZW1zLnNsaWNlKDAsIDcpO1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtID0gaXRlbXNbM107XG4gICAgICAgIH0gZWxzZSBpZiAoaXNMaXN0TG9vcCkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggLSA0IDwgMCkge1xuICAgICAgICAgICAgICAgIHZpZXcgPSBpdGVtcy5zbGljZShpdGVtc0NvdW50IC0gKDQgLSBzZWxlY3RlZEluZGV4KSwgaXRlbXNDb3VudCk7XG4gICAgICAgICAgICAgICAgdmlldyA9IHZpZXcuY29uY2F0KGl0ZW1zLnNsaWNlKDAsIHNlbGVjdGVkSW5kZXggKyAzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkSW5kZXggKyA0ID4gaXRlbXNDb3VudCkge1xuICAgICAgICAgICAgICAgIHZpZXcgPSBpdGVtcy5zbGljZShzZWxlY3RlZEluZGV4IC0gNCwgaXRlbXNDb3VudCk7XG4gICAgICAgICAgICAgICAgdmlldyA9IHZpZXcuY29uY2F0KGl0ZW1zLnNsaWNlKDAsIHNlbGVjdGVkSW5kZXggKyAzIC0gaXRlbXNDb3VudCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2aWV3ID0gaXRlbXMuc2xpY2Uoc2VsZWN0ZWRJbmRleCAtIDQsIHNlbGVjdGVkSW5kZXggKyAzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtID0gKHNlbGVjdGVkSW5kZXggPT09IDApID8gaXRlbXNbaXRlbXNDb3VudCAtIDFdIDogaXRlbXNbc2VsZWN0ZWRJbmRleCAtIDFdO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkSW5kZXggPiAzKSB7XG4gICAgICAgICAgICB2aWV3ID0gaXRlbXMuc2xpY2Uoc2VsZWN0ZWRJbmRleCAtIDQsIHNlbGVjdGVkSW5kZXggKyAzKTtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbSA9IGl0ZW1zW3NlbGVjdGVkSW5kZXggLSAxXTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZEluZGV4ID09PSAzKSB7XG4gICAgICAgICAgICB2aWV3ID0gaXRlbXMuc2xpY2UoMCwgNyk7XG4gICAgICAgIH1cbiAgICAgICAgdmlldyA9IHRoaXMuX3ZpZXdUb1N0cmluZyh2aWV3LCB2aWV3VHlwZSk7XG4gICAgICAgIHNlbGVjdGVkSXRlbSA9IHRoaXMuX2l0ZW1Ub1N0cmluZyhzZWxlY3RlZEl0ZW0sIHZpZXdUeXBlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbSxcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9uZXh0SXRlbShpdGVtczogYW55W10sIHNlbGVjdGVkSXRlbTogc3RyaW5nLCBpc0xpc3RMb29wOiBib29sZWFuLCB2aWV3VHlwZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IGl0ZW1zLmluZGV4T2YocGFyc2VJbnQoc2VsZWN0ZWRJdGVtLCAxMCkpO1xuICAgICAgICBjb25zdCBpdGVtc0NvdW50ID0gaXRlbXMubGVuZ3RoO1xuICAgICAgICBsZXQgdmlldztcblxuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHZpZXcgPSBpdGVtcy5zbGljZSgwLCA3KTtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbSA9IGl0ZW1zWzNdO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTGlzdExvb3ApIHtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEluZGV4IDwgMikge1xuICAgICAgICAgICAgICAgIHZpZXcgPSBpdGVtcy5zbGljZShpdGVtc0NvdW50IC0gKDIgLSBzZWxlY3RlZEluZGV4KSwgaXRlbXNDb3VudCk7XG4gICAgICAgICAgICAgICAgdmlldyA9IHZpZXcuY29uY2F0KGl0ZW1zLnNsaWNlKDAsIHNlbGVjdGVkSW5kZXggKyA1KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkSW5kZXggKyA0ID49IGl0ZW1zQ291bnQpIHtcbiAgICAgICAgICAgICAgICB2aWV3ID0gaXRlbXMuc2xpY2Uoc2VsZWN0ZWRJbmRleCAtIDIsIGl0ZW1zQ291bnQpO1xuICAgICAgICAgICAgICAgIHZpZXcgPSB2aWV3LmNvbmNhdChpdGVtcy5zbGljZSgwLCBzZWxlY3RlZEluZGV4ICsgNSAtIGl0ZW1zQ291bnQpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmlldyA9IGl0ZW1zLnNsaWNlKHNlbGVjdGVkSW5kZXggLSAyLCBzZWxlY3RlZEluZGV4ICsgNSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbSA9IChzZWxlY3RlZEluZGV4ID09PSBpdGVtc0NvdW50IC0gMSkgPyBpdGVtc1swXSA6IGl0ZW1zW3NlbGVjdGVkSW5kZXggKyAxXTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZEluZGV4ICsgMSA8IGl0ZW1zQ291bnQgLSAzKSB7XG4gICAgICAgICAgICB2aWV3ID0gaXRlbXMuc2xpY2Uoc2VsZWN0ZWRJbmRleCAtIDIsIHNlbGVjdGVkSW5kZXggKyA1KTtcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbSA9IGl0ZW1zW3NlbGVjdGVkSW5kZXggKyAxXTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZEluZGV4ID09PSBpdGVtc0NvdW50IC0gNCkge1xuICAgICAgICAgICAgdmlldyA9IGl0ZW1zLnNsaWNlKHNlbGVjdGVkSW5kZXggLSAzLCBpdGVtc0NvdW50KTtcbiAgICAgICAgfVxuICAgICAgICB2aWV3ID0gdGhpcy5fdmlld1RvU3RyaW5nKHZpZXcsIHZpZXdUeXBlKTtcbiAgICAgICAgc2VsZWN0ZWRJdGVtID0gdGhpcy5faXRlbVRvU3RyaW5nKHNlbGVjdGVkSXRlbSwgdmlld1R5cGUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtLFxuICAgICAgICAgICAgdmlld1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2Zvcm1hdFRpbWUodmFsdWU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGhvdXIgPSB2YWx1ZS5nZXRIb3VycygpO1xuICAgICAgICAgICAgbGV0IGZvcm1hdHRlZEhvdXI7XG5cbiAgICAgICAgICAgIGNvbnN0IG1pbnV0ZSA9IHZhbHVlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZHMgPSB2YWx1ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgICAgICBjb25zdCBhbVBNID0gKGhvdXIgPiAxMSkgPyAnUE0nIDogJ0FNJztcblxuICAgICAgICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCdoJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyIC09IDEyO1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRIb3VyID0gaG91ciA8IDEwICYmIGZvcm1hdC5pbmRleE9mKCdoaCcpICE9PSAtMSA/ICcwJyArIGhvdXIgOiBgJHtob3VyfWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZEhvdXIgPSAnMTInO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwICYmIGZvcm1hdC5pbmRleE9mKCdoaCcpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRIb3VyID0gJzAnICsgaG91cjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRIb3VyID0gYCR7aG91cn1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPCAxMCAmJiBmb3JtYXQuaW5kZXhPZignSEgnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkSG91ciA9ICcwJyArIGhvdXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkSG91ciA9IGAke2hvdXJ9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE1pbnV0ZSA9IG1pbnV0ZSA8IDEwICYmIGZvcm1hdC5pbmRleE9mKCdtbScpICE9PSAtMSA/ICcwJyArIG1pbnV0ZSA6IGAke21pbnV0ZX1gO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkU2Vjb25kcyA9IHNlY29uZHMgPCAxMCAmJiBmb3JtYXQuaW5kZXhPZignc3MnKSAhPT0gLTEgPyAnMCcgKyBzZWNvbmRzIDogYCR7c2Vjb25kc31gO1xuXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoJ2hoJywgZm9ybWF0dGVkSG91cikucmVwbGFjZSgnaCcsIGZvcm1hdHRlZEhvdXIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ0hIJywgZm9ybWF0dGVkSG91cikucmVwbGFjZSgnSCcsIGZvcm1hdHRlZEhvdXIpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ21tJywgZm9ybWF0dGVkTWludXRlKS5yZXBsYWNlKCdtJywgZm9ybWF0dGVkTWludXRlKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdzcycsIGZvcm1hdHRlZFNlY29uZHMpLnJlcGxhY2UoJ3MnLCBmb3JtYXR0ZWRTZWNvbmRzKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd0dCcsIGFtUE0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlSG91clZpZXcoc3RhcnQ6IGFueSwgZW5kOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faG91clZpZXcgPSB0aGlzLl92aWV3VG9TdHJpbmcodGhpcy5faG91ckl0ZW1zLnNsaWNlKHN0YXJ0LCBlbmQpLCAnaG91cicpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZU1pbnV0ZVZpZXcoc3RhcnQ6IGFueSwgZW5kOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbWludXRlVmlldyA9IHRoaXMuX3ZpZXdUb1N0cmluZyh0aGlzLl9taW51dGVJdGVtcy5zbGljZShzdGFydCwgZW5kKSwgJ21pbnV0ZScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZVNlY29uZHNWaWV3KHN0YXJ0OiBhbnksIGVuZDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlY29uZHNWaWV3ID0gdGhpcy5fdmlld1RvU3RyaW5nKHRoaXMuX3NlY29uZHNJdGVtcy5zbGljZShzdGFydCwgZW5kKSwgJ3NlY29uZHMnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF91cGRhdGVBbVBtVmlldyhzdGFydDogYW55LCBlbmQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hbXBtVmlldyA9IHRoaXMuX2FtcG1JdGVtcy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hZGRFbXB0eUl0ZW1zKGl0ZW1zOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICAgICAgaXRlbXMucHVzaChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2dlbmVyYXRlSG91cnMoKTogdm9pZCB7XG4gICAgICAgIGxldCBob3VySXRlbXNDb3VudCA9IDI0O1xuICAgICAgICBpZiAodGhpcy5mb3JtYXQuaW5kZXhPZignaCcpICE9PSAtMSkge1xuICAgICAgICAgICAgaG91ckl0ZW1zQ291bnQgPSAxMztcbiAgICAgICAgfVxuXG4gICAgICAgIGhvdXJJdGVtc0NvdW50IC89IHRoaXMuaXRlbXNEZWx0YS5ob3VycztcblxuICAgICAgICBsZXQgaSA9IHRoaXMuZm9ybWF0LmluZGV4T2YoJ0gnKSAhPT0gLTEgPyAwIDogMTtcblxuICAgICAgICBpZiAoaG91ckl0ZW1zQ291bnQgPCA3IHx8ICF0aGlzLmlzU3Bpbkxvb3ApIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZEVtcHR5SXRlbXModGhpcy5faG91ckl0ZW1zKTtcbiAgICAgICAgICAgIHRoaXMuX2lzSG91ckxpc3RMb29wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaG91ckl0ZW1zQ291bnQgPiAxKSB7XG4gICAgICAgICAgICBmb3IgKGk7IGkgPCBob3VySXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faG91ckl0ZW1zLnB1c2goaSAqIHRoaXMuaXRlbXNEZWx0YS5ob3Vycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ob3VySXRlbXMucHVzaCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChob3VySXRlbXNDb3VudCA8IDcgfHwgIXRoaXMuaXNTcGluTG9vcCkge1xuICAgICAgICAgICAgdGhpcy5fYWRkRW1wdHlJdGVtcyh0aGlzLl9ob3VySXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVNaW51dGVzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBtaW51dGVJdGVtc0NvdW50ID0gNjAgLyB0aGlzLml0ZW1zRGVsdGEubWludXRlcztcblxuICAgICAgICBpZiAobWludXRlSXRlbXNDb3VudCA8IDcgfHwgIXRoaXMuaXNTcGluTG9vcCkge1xuICAgICAgICAgICAgdGhpcy5fYWRkRW1wdHlJdGVtcyh0aGlzLl9taW51dGVJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLl9pc01pbnV0ZUxpc3RMb29wID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1pbnV0ZUl0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5fbWludXRlSXRlbXMucHVzaChpICogdGhpcy5pdGVtc0RlbHRhLm1pbnV0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1pbnV0ZUl0ZW1zQ291bnQgPCA3IHx8ICF0aGlzLmlzU3Bpbkxvb3ApIHtcbiAgICAgICAgICAgIHRoaXMuX2FkZEVtcHR5SXRlbXModGhpcy5fbWludXRlSXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVTZWNvbmRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWNvbmRzSXRlbXNDb3VudCA9IDYwIC8gdGhpcy5pdGVtc0RlbHRhLnNlY29uZHM7XG5cbiAgICAgICAgaWYgKHNlY29uZHNJdGVtc0NvdW50IDwgNyB8fCAhdGhpcy5pc1NwaW5Mb29wKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRFbXB0eUl0ZW1zKHRoaXMuX3NlY29uZHNJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLl9pc1NlY29uZHNMaXN0TG9vcCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWNvbmRzSXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWNvbmRzSXRlbXMucHVzaChpICogdGhpcy5pdGVtc0RlbHRhLnNlY29uZHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlY29uZHNJdGVtc0NvdW50IDwgNyB8fCAhdGhpcy5pc1NwaW5Mb29wKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRFbXB0eUl0ZW1zKHRoaXMuX3NlY29uZHNJdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZW5lcmF0ZUFtUG0oKTogdm9pZCB7XG5cbiAgICAgICAgdGhpcy5fYWRkRW1wdHlJdGVtcyh0aGlzLl9hbXBtSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX2FtcG1JdGVtcy5wdXNoKCdBTScpO1xuICAgICAgICB0aGlzLl9hbXBtSXRlbXMucHVzaCgnUE0nKTtcblxuICAgICAgICB0aGlzLl9hZGRFbXB0eUl0ZW1zKHRoaXMuX2FtcG1JdGVtcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0U2VsZWN0ZWRUaW1lKCk6IERhdGUge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy52YWx1ZSA/IG5ldyBEYXRlKHRoaXMudmFsdWUpIDogbmV3IERhdGUoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIb3VyKSB7XG4gICAgICAgICAgICBkYXRlLnNldEhvdXJzKHBhcnNlSW50KHRoaXMuc2VsZWN0ZWRIb3VyLCAxMCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWludXRlKSB7XG4gICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMocGFyc2VJbnQodGhpcy5zZWxlY3RlZE1pbnV0ZSwgMTApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNlY29uZHMpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0U2Vjb25kcyhwYXJzZUludCh0aGlzLnNlbGVjdGVkU2Vjb25kcywgMTApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKCh0aGlzLnNob3dIb3Vyc0xpc3QgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT09ICcxMicpIHx8ICghdGhpcy5zaG93SG91cnNMaXN0ICYmIHRoaXMuc2VsZWN0ZWRIb3VyIDw9ICcxMScpKSAmJlxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFtUG0gPT09ICdQTScpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpICsgMTIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zaG93SG91cnNMaXN0ICYmIHRoaXMuc2VsZWN0ZWRBbVBtID09PSAnQU0nICYmIHRoaXMuc2VsZWN0ZWRIb3VyID4gJzExJykge1xuICAgICAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgLSAxMik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBbVBtID09PSAnQU0nICYmIHRoaXMuc2VsZWN0ZWRIb3VyID09PSAnMTInKSB7XG4gICAgICAgICAgICBkYXRlLnNldEhvdXJzKDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lzVmFsdWVWYWxpZCh2YWx1ZTogRGF0ZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5tYXhWYWx1ZSAmJiB2YWx1ZSA+IHRoaXMuY29udmVydE1pbk1heFZhbHVlKHRoaXMubWF4VmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5taW5WYWx1ZSAmJiB2YWx1ZSA8IHRoaXMuY29udmVydE1pbk1heFZhbHVlKHRoaXMubWluVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2lzRW50cnlWYWxpZCh2YWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgdmFsaWRIID0gdHJ1ZTtcbiAgICAgICAgbGV0IHZhbGlkTSA9IHRydWU7XG4gICAgICAgIGxldCB2YWxpZFMgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gdmFsLnNwbGl0KC9bXFxzOl0rLyk7XG4gICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cCh0aGlzLnByb21wdENoYXIsICdnJyk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0hvdXJzTGlzdCkge1xuICAgICAgICAgICAgdmFsaWRIID0gdGhpcy52YWxpZEhvdXJFbnRyaWVzLmluZGV4T2YocGFyc2VJbnQoc2VjdGlvbnNbMF0ucmVwbGFjZShyZSwgJycpLCAxMCkpICE9PSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNob3dNaW51dGVzTGlzdCkge1xuICAgICAgICAgICAgY29uc3QgbWludXRlcyA9IHRoaXMuc2hvd0hvdXJzTGlzdCA/IHNlY3Rpb25zWzFdIDogc2VjdGlvbnNbMF07XG4gICAgICAgICAgICB2YWxpZE0gPSB0aGlzLnZhbGlkTWludXRlRW50cmllcy5pbmRleE9mKHBhcnNlSW50KG1pbnV0ZXMucmVwbGFjZShyZSwgJycpLCAxMCkpICE9PSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNob3dTZWNvbmRzTGlzdCkge1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtICh0aGlzLnNob3dBbVBtTGlzdCA/IDIgOiAxKV07XG4gICAgICAgICAgICB2YWxpZFMgPSB0aGlzLnZhbGlkU2Vjb25kc0VudHJpZXMuaW5kZXhPZihwYXJzZUludChzZWNvbmRzLnJlcGxhY2UocmUsICcnKSwgMTApKSAhPT0gLTE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsaWRIICYmIHZhbGlkTSAmJiB2YWxpZFM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0Q3Vyc29yUG9zaXRpb24oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldEN1cnNvclBvc2l0aW9uKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyID0gc3RhcnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlRWRpdGFibGVJbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gSW50ZXJhY3Rpb25Nb2RlLkRyb3BEb3duKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMuX2Zvcm1hdFRpbWUodGhpcy5fZ2V0U2VsZWN0ZWRUaW1lKCksIHRoaXMuZm9ybWF0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NwaW5Ib3VycyhjdXJyZW50VmFsOiBEYXRlLCBtaW5WYWw6IERhdGUsIG1heFZhbDogRGF0ZSwgaERlbHRhOiBudW1iZXIsIHNpZ246IG51bWJlcik6IERhdGUge1xuICAgICAgICBjb25zdCBvbGRWYWwgPSBuZXcgRGF0ZShjdXJyZW50VmFsKTtcblxuICAgICAgICBjdXJyZW50VmFsLnNldE1pbnV0ZXMoc2lnbiAqIGhEZWx0YSk7XG4gICAgICAgIGlmIChjdXJyZW50VmFsLmdldERhdGUoKSAhPT0gb2xkVmFsLmdldERhdGUoKSAmJiB0aGlzLmlzU3Bpbkxvb3ApIHtcbiAgICAgICAgICAgIGN1cnJlbnRWYWwuc2V0RGF0ZShvbGRWYWwuZ2V0RGF0ZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBtaW51dGVzID0gY3VycmVudFZhbC5nZXRNaW51dGVzKCk7XG4gICAgICAgIGlmIChjdXJyZW50VmFsLmdldFRpbWUoKSA+IG1heFZhbC5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3Bpbkxvb3ApIHtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gbWludXRlcyA8IG1pblZhbC5nZXRNaW51dGVzKCkgPyA2MCArIG1pbnV0ZXMgOiBtaW51dGVzO1xuICAgICAgICAgICAgICAgIG1pblZhbC5zZXRNaW51dGVzKHNpZ24gKiBtaW51dGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWluVmFsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2xkVmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWYWwuZ2V0VGltZSgpIDwgbWluVmFsLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTcGluTG9vcCkge1xuICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBtaW51dGVzIDw9IG1heFZhbC5nZXRNaW51dGVzKCkgPyBtaW51dGVzIDogbWludXRlcyAtIDYwO1xuICAgICAgICAgICAgICAgIG1heFZhbC5zZXRNaW51dGVzKG1pbnV0ZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXhWYWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBvbGRWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3NwaW5NaW51dGVzKGN1cnJlbnRWYWw6IERhdGUsIG1EZWx0YTogbnVtYmVyLCBzaWduOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IG1pbnV0ZXMgPSBjdXJyZW50VmFsLmdldE1pbnV0ZXMoKSArIChzaWduICogbURlbHRhKTtcblxuICAgICAgICBpZiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+PSA2MCkge1xuICAgICAgICAgICAgbWludXRlcyA9IHRoaXMuaXNTcGluTG9vcCA/IG1pbnV0ZXMgLSAoc2lnbiAqIDYwKSA6IGN1cnJlbnRWYWwuZ2V0TWludXRlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFZhbC5zZXRNaW51dGVzKG1pbnV0ZXMpO1xuICAgICAgICByZXR1cm4gY3VycmVudFZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zcGluU2Vjb25kcyhjdXJyZW50VmFsOiBEYXRlLCBzRGVsdGE6IG51bWJlciwgc2lnbjogbnVtYmVyKSB7XG4gICAgICAgIGxldCBzZWNvbmRzID0gY3VycmVudFZhbC5nZXRTZWNvbmRzKCkgKyAoc2lnbiAqIHNEZWx0YSk7XG5cbiAgICAgICAgaWYgKHNlY29uZHMgPCAwIHx8IHNlY29uZHMgPj0gNjApIHtcbiAgICAgICAgICAgIHNlY29uZHMgPSB0aGlzLmlzU3Bpbkxvb3AgPyBzZWNvbmRzIC0gKHNpZ24gKiA2MCkgOiBjdXJyZW50VmFsLmdldFNlY29uZHMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRWYWwuc2V0U2Vjb25kcyhzZWNvbmRzKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWYWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZUNvbnRhaW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm10dGVkVGltZSA9IHRoaXMuX2Zvcm1hdFRpbWUodGhpcy52YWx1ZSwgdGhpcy5mb3JtYXQpO1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBmb3JtdHRlZFRpbWUuc3BsaXQoL1tcXHM6XSsvKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0hvdXJzTGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gc2VjdGlvbnNbMF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dNaW51dGVzTGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLnNob3dIb3Vyc0xpc3QgPyBzZWN0aW9uc1sxXSA6IHNlY3Rpb25zWzBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93U2Vjb25kc0xpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2Vjb25kcyA9IHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtICh0aGlzLnNob3dBbVBtTGlzdCA/IDIgOiAxKV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dBbVBtTGlzdCAmJiB0aGlzLl9hbXBtSXRlbXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQW1QbSA9IHNlY3Rpb25zW3NlY3Rpb25zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIb3VyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gIXRoaXMuc2hvd0hvdXJzTGlzdCAmJiB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZS5nZXRIb3VycygpLnRvU3RyaW5nKCkgOlxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0hvdXJzTGlzdCA/IGAke3RoaXMuX2hvdXJJdGVtc1szXX1gIDogJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWludXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAhdGhpcy5zaG93TWludXRlc0xpc3QgJiYgdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkgOiAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWNvbmRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWNvbmRzID0gIXRoaXMuc2hvd1NlY29uZHNMaXN0ICYmIHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlLmdldFNlY29uZHMoKS50b1N0cmluZygpIDogJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQW1QbSA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2FtcG1JdGVtcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFtUG0gPSB0aGlzLl9hbXBtSXRlbXNbM107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmV2U2VsZWN0ZWRIb3VyID0gdGhpcy5zZWxlY3RlZEhvdXI7XG4gICAgICAgIHRoaXMuX3ByZXZTZWxlY3RlZE1pbnV0ZSA9IHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICAgIHRoaXMuX3ByZXZTZWxlY3RlZFNlY29uZHMgPSB0aGlzLnNlbGVjdGVkU2Vjb25kcztcbiAgICAgICAgdGhpcy5fcHJldlNlbGVjdGVkQW1QbSA9IHRoaXMuc2VsZWN0ZWRBbVBtO1xuXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG5cbiAgICAgICAgdGhpcy5fdXBkYXRlSG91clZpZXcoMCwgSVRFTVNfQ09VTlQpO1xuICAgICAgICB0aGlzLl91cGRhdGVNaW51dGVWaWV3KDAsIElURU1TX0NPVU5UKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2Vjb25kc1ZpZXcoMCwgSVRFTVNfQ09VTlQpO1xuICAgICAgICB0aGlzLl91cGRhdGVBbVBtVmlldygwLCBJVEVNU19DT1VOVCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRIb3VyKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEhvdXJJbnRvVmlldyh0aGlzLnNlbGVjdGVkSG91cik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNaW51dGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTWludXRlSW50b1ZpZXcodGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZWNvbmRzKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFNlY29uZHNJbnRvVmlldyh0aGlzLnNlbGVjdGVkU2Vjb25kcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRBbVBtKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEFtUG1JbnRvVmlldyh0aGlzLnNlbGVjdGVkQW1QbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaG91ckxpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvdXJMaXN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5taW51dGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVMaXN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWNvbmRzTGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kc0xpc3QubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9vbkRyb3BEb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IHRoaXMuY29udmVydE1pbk1heFZhbHVlKHRoaXMuZGlzcGxheVZhbHVlKTtcblxuICAgICAgICBpZiAodGhpcy5kaXNwbGF5VmFsdWUgPT09IHRoaXMucGFyc2VNYXNrKGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzVmFsdWVWYWxpZChuZXdWYWwpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUgfHwgb2xkVmFsdWUuZ2V0VGltZSgpICE9PSBuZXdWYWwuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy5pbnB1dEZvcm1hdC50cmFuc2Zvcm0odGhpcy5fZm9ybWF0VGltZShvbGRWYWx1ZSwgdGhpcy5mb3JtYXQpKTtcblxuICAgICAgICAgICAgY29uc3QgYXJnczogSWd4VGltZVBpY2tlclZhbGlkYXRpb25GYWlsZWRFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgdGltZVBpY2tlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWU6IG5ld1ZhbCxcbiAgICAgICAgICAgICAgICBzZXRUaHJvdWdoVUk6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm9uVmFsaWRhdGlvbkZhaWxlZC5lbWl0KGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXJzb3JPbkhvdXJzKGN1cnNvcjogbnVtYmVyLCBzaG93SG91cnM6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHNob3dIb3VycyAmJiB0aGlzLl9ob3Vyc1Bvcy5oYXMoY3Vyc29yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGN1cnNvck9uTWludXRlcyhjdXJzb3I6IG51bWJlciwgc2hvd0hvdXJzOiBib29sZWFuLCBzaG93TWludXRlczogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc2hvd01pbnV0ZXMgJiZcbiAgICAgICAgICAgIChzaG93SG91cnMgJiYgdGhpcy5fbWludXRlc1Bvcy5oYXMoY3Vyc29yKSkgfHxcbiAgICAgICAgICAgICghc2hvd0hvdXJzICYmIHRoaXMuX21pbnV0ZXNQb3MuaGFzKGN1cnNvcikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3Vyc29yT25TZWNvbmRzKGN1cnNvcjogbnVtYmVyLCBzaG93SG91cnM6IGJvb2xlYW4sIHNob3dNaW51dGVzOiBib29sZWFuLCBzaG93U2Vjb25kczogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc2hvd1NlY29uZHMgJiZcbiAgICAgICAgICAgIChzaG93SG91cnMgJiYgc2hvd01pbnV0ZXMgJiYgdGhpcy5fc2Vjb25kc1Bvcy5oYXMoY3Vyc29yKSkgfHxcbiAgICAgICAgICAgICgoIXNob3dIb3VycyB8fCAhc2hvd01pbnV0ZXMpICYmIHRoaXMuX3NlY29uZHNQb3MuaGFzKGN1cnNvcikpIHx8XG4gICAgICAgICAgICAoIXNob3dIb3VycyAmJiAhc2hvd01pbnV0ZXMgJiYgdGhpcy5fc2Vjb25kc1Bvcy5oYXMoY3Vyc29yKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXJzb3JPbkFtUG0oY3Vyc29yOiBudW1iZXIsIHNob3dIb3VyczogYm9vbGVhbiwgc2hvd01pbnV0ZXM6IGJvb2xlYW4sXG4gICAgICAgIHNob3dTZWNvbmRzOiBib29sZWFuLCBzaG93QW1QbTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc2hvd0FtUG0gJiZcbiAgICAgICAgICAgIChzaG93SG91cnMgJiYgc2hvd01pbnV0ZXMgJiYgc2hvd1NlY29uZHMgJiYgdGhpcy5fYW1QbVBvcy5oYXMoY3Vyc29yKSkgfHxcbiAgICAgICAgICAgICgoIXNob3dIb3VycyB8fCAhc2hvd01pbnV0ZXMgfHwgIXNob3dTZWNvbmRzKSAmJiB0aGlzLl9hbVBtUG9zLmhhcyhjdXJzb3IpKSB8fFxuICAgICAgICAgICAgKCFzaG93SG91cnMgJiYgKCFzaG93TWludXRlcyB8fCAhc2hvd1NlY29uZHMpICYmIHRoaXMuX2FtUG1Qb3MuaGFzKGN1cnNvcikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZVZhbGlkaXR5T25CbHVyKCkge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuX2lucHV0RGlyZWN0aXZlIHx8IHRoaXMuX2lucHV0RGlyZWN0aXZlVXNlclRlbXBsYXRlO1xuICAgICAgICBpZiAodGhpcy5fbmdDb250cm9sICYmICF0aGlzLl9uZ0NvbnRyb2wudmFsaWQpIHtcbiAgICAgICAgICAgIGlucHV0LnZhbGlkID0gSWd4SW5wdXRTdGF0ZS5JTlZBTElEO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXQudmFsaWQgPSBJZ3hJbnB1dFN0YXRlLklOSVRJQUw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXb3JrYXJvdW5kIG1ldGhvZCBmb3IgIzgxMzVcbiAgICAvLyBUT0RPOiBJdCBtdXN0IGJlIHJlbW92ZWQgaW4gIzY0ODJcbiAgICBwcml2YXRlIGlzUmVzZXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlPy5nZXRIb3VycygpID09PSAwXG4gICAgICAgICAgICAmJiB0aGlzLnZhbHVlPy5nZXRNaW51dGVzKCkgPT09IDBcbiAgICAgICAgICAgICYmIHRoaXMudmFsdWU/LmdldFNlY29uZHMoKSA9PT0gMDtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBJZ3hUaW1lUGlja2VyQ29tcG9uZW50LFxuICAgICAgICBJZ3hIb3VySXRlbURpcmVjdGl2ZSxcbiAgICAgICAgSWd4TWludXRlSXRlbURpcmVjdGl2ZSxcbiAgICAgICAgSWd4U2Vjb25kc0l0ZW1EaXJlY3RpdmUsXG4gICAgICAgIElneEl0ZW1MaXN0RGlyZWN0aXZlLFxuICAgICAgICBJZ3hBbVBtSXRlbURpcmVjdGl2ZSxcbiAgICAgICAgSWd4VGltZVBpY2tlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBJZ3hUaW1lUGlja2VyQWN0aW9uc0RpcmVjdGl2ZSxcbiAgICAgICAgVGltZURpc3BsYXlGb3JtYXRQaXBlLFxuICAgICAgICBUaW1lSW5wdXRGb3JtYXRQaXBlXG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIElneFRpbWVQaWNrZXJDb21wb25lbnQsXG4gICAgICAgIElneFRpbWVQaWNrZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgSWd4VGltZVBpY2tlckFjdGlvbnNEaXJlY3RpdmUsXG4gICAgICAgIFRpbWVEaXNwbGF5Rm9ybWF0UGlwZSxcbiAgICAgICAgVGltZUlucHV0Rm9ybWF0UGlwZSxcbiAgICAgICAgSWd4SW5wdXRHcm91cE1vZHVsZVxuICAgIF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIElneElucHV0R3JvdXBNb2R1bGUsXG4gICAgICAgIElneEljb25Nb2R1bGUsXG4gICAgICAgIElneEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgSWd4TWFza01vZHVsZSxcbiAgICAgICAgSWd4VG9nZ2xlTW9kdWxlLFxuICAgICAgICBJZ3hUZXh0U2VsZWN0aW9uTW9kdWxlXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIElneFRpbWVQaWNrZXJNb2R1bGUgeyB9XG4iXX0=
|