@magic-xpa/angular 4.900.0-dev491.7 → 4.1000.0-dev000.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/src/services/accessor.magic.service.mjs +29 -6
- package/esm2020/src/services/engine.magic.service.mjs +3 -3
- package/esm2020/src/services/mg-date-adapter.mjs +13 -8
- package/esm2020/src/services/table.magic.service.mjs +2 -2
- package/esm2020/src/services/task.magics.service.mjs +4 -4
- package/esm2020/src/ui/directives/magic.directive.mjs +36 -33
- package/esm2020/src/ui/directives/mgformat.magic.directive.mjs +36 -17
- package/esm2020/src/ui/magic-modal/magic-overlay-container-wrapper.mjs +1 -1
- package/esm2020/src/ui/magic-modal/magic-overlay-container.mjs +2 -2
- package/esm2020/src/ui/magic-root.component.mjs +1 -1
- package/fesm2015/magic-xpa-angular.mjs +109 -58
- package/fesm2015/magic-xpa-angular.mjs.map +1 -1
- package/fesm2020/magic-xpa-angular.mjs +107 -58
- package/fesm2020/magic-xpa-angular.mjs.map +1 -1
- package/package.json +3 -3
- package/src/services/accessor.magic.service.d.ts +1 -0
- package/src/services/engine.magic.service.d.ts +1 -1
- package/src/services/mg-date-adapter.d.ts +2 -1
- package/src/services/table.magic.service.d.ts +1 -1
- package/src/services/task.magics.service.d.ts +1 -1
- package/src/ui/directives/magic.directive.d.ts +6 -6
- package/src/ui/directives/mgformat.magic.directive.d.ts +2 -0
@@ -210,8 +210,8 @@ export class TaskMagicService {
|
|
210
210
|
guiRowId = '0';
|
211
211
|
return this.Records.list.length > +guiRowId ? this.Records.list[guiRowId].values[controlId] : '';
|
212
212
|
}
|
213
|
-
getFormattedValue(controlName, val) {
|
214
|
-
return this.magic.GetFormattedValue(this.taskId, controlName, val);
|
213
|
+
getFormattedValue(controlName, val, rowId) {
|
214
|
+
return this.magic.GetFormattedValue(this.taskId, controlName, val, rowId);
|
215
215
|
}
|
216
216
|
setValue(controlId, guiRowId, value) {
|
217
217
|
return this.Records.list[guiRowId].setValue(controlId, value);
|
@@ -419,7 +419,7 @@ export class TaskMagicService {
|
|
419
419
|
return val;
|
420
420
|
}
|
421
421
|
case StorageAttribute.NUMERIC:
|
422
|
-
return
|
422
|
+
return +val;
|
423
423
|
default:
|
424
424
|
return val;
|
425
425
|
}
|
@@ -608,4 +608,4 @@ TaskMagicService.ɵprov = i0.ɵɵdefineInjectable({ token: TaskMagicService, fac
|
|
608
608
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TaskMagicService, [{
|
609
609
|
type: Injectable
|
610
610
|
}], function () { return [{ type: i1.EngineMagicService }, { type: i2.OverlayWindowService }]; }, null); })();
|
611
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5tYWdpY3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3NlcnZpY2VzL3Rhc2subWFnaWNzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFrQixXQUFXLEVBQUUsU0FBUyxFQUFnQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RHLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQWtCLE9BQU8sRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxXQUFXLEVBQStCLFlBQVksRUFBa0IsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEgsT0FBTyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsY0FBYyxFQUFZLE1BQU0sbUJBQW1CLENBQUM7QUFJNUQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFNNUQsTUFBTSxPQUFPLGdCQUFnQjtJQXFGM0IsWUFBc0IsS0FBeUIsRUFBVSxvQkFBMEM7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LENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUtNLFFBQVE7UUFDYixLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBS0QsWUFBWSxDQUFDLFFBQWdCLEVBQUUsRUFBZSxFQUFFLElBQVk7UUFDMUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakIsSUFBSTtnQkFDRixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25ELEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEI7WUFBQyxPQUFPLENBQUMsRUFBRTthQUNYO1NBQ0Y7SUFDSCxDQUFDOztnRkF2aENVLGdCQUFnQjt3REFBaEIsZ0JBQWdCLFdBQWhCLGdCQUFnQjt1RkFBaEIsZ0JBQWdCO2NBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge2lzTnVsbE9yVW5kZWZpbmVkLCBpc1VuZGVmaW5lZH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1N0eWxlc01hcE1hbmFnZXJ9IGZyb20gJy4vU3R5bGVzTWFwTWFuYWdlcic7XHJcblxyXG5pbXBvcnQge0VuZ2luZU1hZ2ljU2VydmljZX0gZnJvbSAnLi9lbmdpbmUubWFnaWMuc2VydmljZSc7XHJcbmltcG9ydCB7Q29udHJvbE1ldGFkYXRhLCBSZWNvcmRzfSBmcm9tICcuLi9jb250cm9scy5tZXRhZGF0YS5tb2RlbCc7XHJcbmltcG9ydCB7Q29tbWFuZFR5cGUsIEN1c3RvbVZhbGlkYXRvciwgR3VpQ29tbWFuZCwgR3VpQ29uc3RhbnRzLCBHdWlJbnRlcmFjdGl2ZSwgSHRtbFByb3BlcnRpZXN9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuXHJcbmltcG9ydCB7TlN0cmluZywgU3RyaW5nQnVpbGRlcn0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1N0b3JhZ2VBdHRyaWJ1dGV9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge2dldEd1aUV2ZW50T2JqLCBJR3VpRXZlbnR9IGZyb20gJ0BtYWdpYy14cGEvZW5naW5lJztcclxuaW1wb3J0IHtTdWJmb3JtTWFnaWNTZXJ2aWNlfSBmcm9tICcuL3N1YmZvcm0ubWFnaWMuc2VydmljZSc7XHJcbmltcG9ydCB7VGl0bGVNYWdpY1NlcnZpY2V9IGZyb20gJy4vdGl0bGUubWFnaWMuc2VydmljZSc7XHJcbmltcG9ydCB7QWNjZXNzb3JNYWdpY1NlcnZpY2V9IGZyb20gJy4vYWNjZXNzb3IubWFnaWMuc2VydmljZSc7XHJcbmltcG9ydCB7R3VpSW50ZXJhY3RpdmVFeGVjdXRvcn0gZnJvbSAnLi4vdWkvR3VpSW50ZXJhY3RpdmVFeGVjdXRvcic7XHJcbmltcG9ydCB7T3ZlcmxheVdpbmRvd1NlcnZpY2V9IGZyb20gJy4vT3ZlcmxheVdpbmRvd1NlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIE1haW4gc2VydmljZSB0byBjb25uZWN0IHRoZSBVSSB3aXRoIHRoZSBNYWdpYyBXZWJDTGllbnRcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRhc2tNYWdpY1NlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBTZXJ2aWNlIHRvIHByb3ZpZGUgdGFibGUtcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXNcclxuICAgKi9cclxuICBwdWJsaWMgdGFibGVTZXJ2aWNlOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogQ29sbGVjdGlvbiBvZiBkYXRhIGZvciBhbGwgY29udHJvbHNcclxuICAgKi9cclxuICBSZWNvcmRzOiBhbnkgPSBuZXcgUmVjb3JkcygpO1xyXG4gIC8qKlxyXG4gICAqIEZvcm1Hcm91cCBjb2xsZWN0aW9uIGZvciBsaW5lIG1vZGVcclxuICAgKi9cclxuICBmb3JtR3JvdXBzOiBBcnJheTxGb3JtR3JvdXA+ID0gW107XHJcbiAgLyoqXHJcbiAgICogRm9ybUdyb3VwIGZvciBhbGwgY29udHJvbHMgaW4gc2NyZWVuIG1vZGVcclxuICAgKi9cclxuICBTY3JlZW5Nb2RlQ29udHJvbHM6IEZvcm1Hcm91cDtcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcmVmcmVzaERvbTogU3ViamVjdDxHdWlDb21tYW5kPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHN1YnNjcmliZVJlZnJlc2hEb206IFN1YnNjcmlwdGlvbjtcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZGV0ZWN0Q2hhbmdlczogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc3Vic2NyaWJlSW50ZXJhY3RpdmVDb21tYW5kczogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgaW50ZXJhY3RpdmVDb21tYW5kczogU3ViamVjdDxHdWlJbnRlcmFjdGl2ZT49IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgcm93IGluIGEgdGFibGUgY2hhbmdlcy5cclxuICAgKi9cclxuICBPblNlbGVjdGVkUm93Q2hhbmdlZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGN1c3RvbVByb3BlcnRpZXNTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHJlY29yZHNDb3VudENoYW5nZVN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwdWJsaWMgdGVtcGxhdGU6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmc7IH07XHJcbiAgLyoqXHJcbiAgICogU2VydmljZSB0byBwcm92aWRlIHN1YmZvcm0tcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXNcclxuICAgKi9cclxuICBwdWJsaWMgbWdTdWJmb3JtU2VydmljZTogU3ViZm9ybU1hZ2ljU2VydmljZTtcclxuICAvKipcclxuICAgKiBTZXJ2aWNlIHRvIHByb3ZpZGUgdGhlIHRpdGxlLWNoYW5nZSBmdW5jdGlvbmFsaXR5XHJcbiAgICovXHJcbiAgcHVibGljIG1nVGl0bGVTZXJ2aWNlOiBUaXRsZU1hZ2ljU2VydmljZTtcclxuICAvKipcclxuICAgKiBTZXJ2aWNlIHdoaWNoIGVuYWJsZXMgZ2V0dGluZy9zZXR0aW5nIHZhbHVlcyBmcm9tL3RvIHRoZSBNYWdpYyBXZWJDbGllbnQgZW5naW5lXHJcbiAgICovXHJcbiAgcHVibGljIG1nQWNjZXNzb3JTZXJ2aWNlOiBBY2Nlc3Nvck1hZ2ljU2VydmljZTtcclxuXHJcbiAgcHVibGljIG1nSW5wdXREYXRlRm9ybWF0O1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgb2xkUGFnZVNpemUgPSAwO1xyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSAgbWFnaWNcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbWFnaWM6IEVuZ2luZU1hZ2ljU2VydmljZSwgcHJpdmF0ZSBvdmVybGF5V2luZG93U2VydmljZTogT3ZlcmxheVdpbmRvd1NlcnZpY2UpIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5zZXRHdWlUb3BJbmRleCgwKTtcclxuICAgIHRoaXMubWdJbnB1dERhdGVGb3JtYXQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgIC8qKlxyXG4gICAqIHJldHVybnMgdHJ1ZSBpZiB1c2VkIGlzIGxvZ2dlZCBpblxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgcHVibGljIGdldElzTG9nZ2VuSW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tYWdpYy5nZXRJc0xvZ2dlZEluKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZCBvZiB0YXNrIHRvIHdoaWNoIHRoaXMgc2VydmljZSByZWZlcnNcclxuICAgKi9cclxuICBfdGFza0lkOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHVybnMgdGhlIHRhc2sgSWRcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldCB0YXNrSWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFza0lkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdGFzayBJZFxyXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdGFzayBpZCB0byBzZXRcclxuICAgKi9cclxuICBzZXQgdGFza0lkKHZhbHVlKSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIHRoaXMuX3Rhc2tJZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdGFzaydzIGRhdGEgaW4gU2NyZWVuIG1vZGVcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldCBTY3JlZW5Db250cm9sc0RhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5SZWNvcmRzLmxpc3RbJzAnXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzZXR0ZW1wbGF0ZSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGRzIHRoZSBGb3JtQ29udHJvbCBmb3IgZWFjaCBhbmQgZXZlcnkgY29udHJvbFxyXG4gICAqL1xyXG4gIGJ1aWxkU2NyZWVuTW9kZUNvbnRyb2xzKCkge1xyXG4gICAgY29uc3QgZ3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy50ZW1wbGF0ZSkge1xyXG5cclxuICAgICAgaWYgKHRoaXMudGVtcGxhdGVba2V5XSA9PSAnMCcpIHtcclxuICAgICAgICBsZXQgZmMgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gICAgICAgIHRoaXMuc2V0U3R1YlZhbHVlKDAsIGZjLCBrZXkpO1xyXG4gICAgICAgIGdyb3VwLmFkZENvbnRyb2woa2V5LCBmYyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlNjcmVlbk1vZGVDb250cm9scyA9IGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXMgdGhlIGNvbnRyb2wgYSB0YWJsZSBjb250cm9sXHJcbiAgICogQHBhcmFtIGlkIElkIG9mIHRoZSBjb250cm9sXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBpc1RhYmxlQ29udHJvbChpZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVtpZF0gPT0gJzEnO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWdJbnB1dERhdGVGb3JtYXQoKTogc3RyaW5nIHtyZXR1cm4gdGhpcy5tZ0lucHV0RGF0ZUZvcm1hdDt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIEZvcm1Db250cm9sIG9mIGEgY29udHJvbFxyXG4gICAqIEBwYXJhbSBndWlSb3dpZCBJZCBvZiB0aGUgcmVxdWVzdGVkIHJvd1xyXG4gICAqIEBwYXJhbSBpZCBJZCBvZiB0aGUgY29udHJvbFxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0Rm9ybUNvbnRyb2woZ3VpUm93aWQ6IHN0cmluZywgaWQ6IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICBsZXQgYzogQWJzdHJhY3RDb250cm9sO1xyXG4gICAgbGV0IGdyb3VwOiBGb3JtR3JvdXAgPSB0aGlzLmlzVGFibGVDb250cm9sKGlkKSA/IHRoaXMuZm9ybUdyb3Vwc1tndWlSb3dpZF0gOiB0aGlzLlNjcmVlbk1vZGVDb250cm9scztcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZ3JvdXApKSB7XHJcbiAgICAgIGdyb3VwLmdldChpZCk7XHJcbiAgICAgIGMgPSBncm91cC5jb250cm9sc1tpZF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGhhbmRsZSB0aGUgY2hhbmdlIG9mIHRleHQgZm9yIGlucHV0IGNvbnRyb2wgaW5zaWRlIHRhYmxlXHJcbiAgICogQHBhcmFtICBndWlSb3dJZCBJZCBvZiB0aGUgcm93IGZvciB3aGljaCB0aGUgRm9ybUNvbnRyb2xzIGFyZSBidWlsdFxyXG4gICAqIHNldCB0aGUgbmV3IHZhbHVlIG9mIHRoZSBmb3JtY29udHJvbFxyXG4gICAqL1xyXG4gIHNldElucHV0VGV4dFZhbHVlKGNvbnRyb2xJZDogc3RyaW5nLCBndWlSb3dpZDogc3RyaW5nLCB2YWw6IGFueSkge1xyXG4gICAgdGhpcy5zZXRWYWx1ZShjb250cm9sSWQsIGd1aVJvd2lkLCB0aGlzLkNvbnZlcnRWYWxUb05hdGl2ZShjb250cm9sSWQsIDAsIHZhbCkpO1xyXG5cclxuICAgIGNvbnN0IGZjID0gdGhpcy5nZXRGb3JtQ29udHJvbChndWlSb3dpZCwgY29udHJvbElkKTtcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQodmFsKSlcclxuICAgICAgZmMuc2V0VmFsdWUodmFsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkIHRoZSBGb3JtQ29udHJvbHMgZm9yIGEgdGFibGUgcm93XHJcbiAgICogQHBhcmFtICBndWlSb3dJZCBJZCBvZiB0aGUgcm93IGZvciB3aGljaCB0aGUgRm9ybUNvbnRyb2xzIGFyZSBidWlsdFxyXG4gICAqL1xyXG4gIGJ1aWxkVGFibGVSb3dDb250cm9scyhndWlSb3dJZDogbnVtYmVyKSB7XHJcblxyXG4gICAgY29uc3QgZ3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMudGVtcGxhdGUpIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLnRlbXBsYXRlW2tleV0gPT0gJzEnKSB7XHJcbiAgICAgICAgbGV0IGZjID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAgICAgICB0aGlzLnNldFN0dWJWYWx1ZShndWlSb3dJZCwgZmMsIGtleSk7XHJcbiAgICAgICAgZ3JvdXAuYWRkQ29udHJvbChrZXksIGZjKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtR3JvdXBzW2d1aVJvd0lkXSA9IGdyb3VwO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHVwZGF0ZVJlY29yZHNCZWZvcmVDdXJyZW50Vmlldyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLlJlY29yZHMucmVjb3Jkc0JlZm9yZUN1cnJlbnRWaWV3ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc2V0SW5jbHVkZXNGaXJzdCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5SZWNvcmRzLmluY2x1ZGVzRmlyc3QgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzZXRJbmNsdWRlc0xhc3QodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5pbmNsdWRlc0xhc3QgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBtYXJrUm93QXNDcmVhdGVkKGd1aVJvd0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5tYXJrUm93QXNDcmVhdGVkKGd1aVJvd0lkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBtYXJrUm93QXNOb3RDcmVhdGVkKGd1aVJvd0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5tYXJrUm93QXNOb3RDcmVhdGVkKGd1aVJvd0lkKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc3RhcnRSb3dFZGl0aW5nKGd1aVJvd0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5zdGFydFJvd0VkaXRpbmcoZ3VpUm93SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHN0b3BSb3dFZGl0aW5nKGd1aVJvd0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5zdG9wUm93RWRpdGluZyhndWlSb3dJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgaXNSb3dJblJvd0VkaXRpbmcoZ3VpUm93SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUmVjb3Jkcy5pc1Jvd0luUm93RWRpdGluZyhndWlSb3dJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc2V0SXNFbXB0eURhdGFWaWV3KGlzRW1wdHk6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLlJlY29yZHMuaXNFbXB0eURhdGFWaWV3ICE9PSBpc0VtcHR5KSB7XHJcblxyXG4gICAgICBpZiAoaXNFbXB0eSlcclxuICAgICAgICB0aGlzLnJlY29yZHNDb3VudENoYW5nZVN1YmplY3QubmV4dCgwKTtcclxuXHJcbiAgICAgIHRoaXMuUmVjb3Jkcy5pc0VtcHR5RGF0YVZpZXcgPSBpc0VtcHR5O1xyXG4gICAgICB0aGlzLnRhYmxlU2VydmljZS5yZWZyZXNoRGF0YVNvdXJjZSgpO1xyXG4gICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBzZXJ2aWNlIHRvIHdvcmsgd2l0aCB0aGUgdGFza1xyXG4gICAqIEBwYXJhbSB0YXNrSWQgSWQgb2YgdGhlIHRhc2tcclxuICAgKiBAcGFyYW0gdGFza0Rlc2NyaXB0aW9uXHJcbiAgICovXHJcbiAgaW5pdFRhc2sodGFza0lkLCB0YXNrRGVzY3JpcHRpb24pIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5jcmVhdGVGaXJzdCgpO1xyXG4gICAgdGhpcy5vbGRQYWdlU2l6ZSA9IDA7XHJcbiAgICBpZiAodGhpcy5Jc1N0dWIoKSkge1xyXG4gICAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRhc2tJZCA9IHRhc2tJZDtcclxuICAgICAgdGhpcy5zZXR0ZW1wbGF0ZSh0YXNrRGVzY3JpcHRpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5idWlsZFNjcmVlbk1vZGVDb250cm9scygpO1xyXG5cclxuICAgIC8vIHJlbW92ZSBwcmV2aW91cyBzdWJzY3JpcHRpb25zXHJcbiAgICBpZighaXNOdWxsT3JVbmRlZmluZWQodGhpcy5zdWJzY3JpYmVSZWZyZXNoRG9tKSlcclxuICAgICAgdGhpcy5zdWJzY3JpYmVSZWZyZXNoRG9tLnVuc3Vic2NyaWJlKCk7XHJcbiAgICBpZighaXNOdWxsT3JVbmRlZmluZWQodGhpcy5zdWJzY3JpYmVJbnRlcmFjdGl2ZUNvbW1hbmRzKSlcclxuICAgICAgdGhpcy5zdWJzY3JpYmVJbnRlcmFjdGl2ZUNvbW1hbmRzLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVSZWZyZXNoRG9tID0gdGhpcy5tYWdpYy5yZWZyZXNoRG9tLnBpcGUoZmlsdGVyKGNvbW1hbmQgPT4gY29tbWFuZC5UYXNrVGFnID09PSB0aGlzLnRhc2tJZCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoY29tbWFuZCA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJUYXNrIFwiICsgY29tbWFuZC5UYXNrVGFnICsgXCJjb21tYW5kIFwiICsgY29tbWFuZC5Db21tYW5kVHlwZSk7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlQ29tbWFuZChjb21tYW5kKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnN1YnNjcmliZUludGVyYWN0aXZlQ29tbWFuZHMgPSB0aGlzLm1hZ2ljLmludGVyYWN0aXZlQ29tbWFuZHNcclxuICAgICAgLnBpcGUoZmlsdGVyKGNvbW1hbmQgPT4gY29tbWFuZC5UYXNrVGFnID09PSB0aGlzLnRhc2tJZCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoY29tbWFuZCA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJUYXNrIFwiICsgY29tbWFuZC5UYXNrVGFnICsgXCJjb21tYW5kIFwiICsgY29tbWFuZC5Db21tYW5kVHlwZSk7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlSW50ZXJhY3RpdmVDb21tYW5kKGNvbW1hbmQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHJlZnJlc2hWaWV3KCkge1xyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzLm5leHQoJycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zZXJ0IGFuIGV2ZW50IHRvIHRoZSBNYWdpYyBXZWJDbGllbnQgZXZlbnQgcXVldWVcclxuICAgKiBAcGFyYW0gZ3VpRXZlbnQgVGhlIGV2ZW50IHRvIGluc2VydFxyXG4gICAqL1xyXG4gIGluc2VydEV2ZW50KGd1aUV2ZW50OiBJR3VpRXZlbnQpOiB2b2lkIHtcclxuICAgIGd1aUV2ZW50LlRhc2tJRCA9IHRoaXMudGFza0lkO1xyXG4gICAgdGhpcy5tYWdpYy5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgR2V0Q29udHJvbFBpY3R1cmVNYXNrKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMubWFnaWMuR2V0Q29udHJvbFBpY3R1cmVNYXNrKHRoaXMudGFza0lkLCBjb250cm9sTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgdGhlIGNvbnRyb2wgdmFsdWUsIHVzaW5nIHRoZSBNYWdpYyBXZWJDbGllbnRcclxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgSWQgb2YgdmFsaWRhdGVkIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gYmUgdmFsaWRhdGVkXHJcbiAgICogQHJldHVybnMgSWYgdmFsaWRhdGlvbiBmYWlscywgcmV0dXJucyBlcnJvciBtZXNzYWdlLCBlbHNlIHJldHVybnMgbnVsbFxyXG4gICAqL1xyXG4gIFZhbGlkYXRlQ29udHJvbFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubWFnaWMuVmFsaWRhdGVDb250cm9sVmFsdWUodGhpcy50YXNrSWQsIGNvbnRyb2xOYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgR2V0UmFuZ2VkVmFsdWUoY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5tYWdpYy5HZXRSYW5nZWRWYWx1ZSh0aGlzLnRhc2tJZCwgY29udHJvbE5hbWUsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBHZXRGbGRSYW5nZXMoY29udHJvbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5tYWdpYy5HZXRGbGRSYW5nZXModGhpcy50YXNrSWQsIGNvbnRyb2xOYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgb2YgdGhlIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcHJvcCBQcm9wZXJ0eVxyXG4gICAqIEBwYXJhbSBndWlSb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcmV0dXJucyBQcm9wZXJ0eSB2YWx1ZVxyXG4gICAqL1xyXG4gIGdldFByb3BlcnR5KGNvbnRyb2xJZDogc3RyaW5nLCBwcm9wOiBIdG1sUHJvcGVydGllcywgZ3VpUm93SWQ/OiBzdHJpbmcpIHtcclxuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChndWlSb3dJZCkpXHJcbiAgICAgIGd1aVJvd0lkID0gJzAnO1xyXG4gICAgaWYgKHRoaXMuSXNTdHViKCkpXHJcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5U3R1Yih0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0sIGNvbnRyb2xJZCwgcHJvcCk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHJlYyA9IHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXTtcclxuICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHJlYykpXHJcbiAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldFByb3BlcnR5KGNvbnRyb2xJZCwgcHJvcCk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGdldFByb3BlcnR5U3R1YihDb250cm9sc1Byb3BlcnRpZXM6IGFueSwgY29udHJvbElkLCBwcm9wKSB7XHJcbiAgICBDb250cm9sc1Byb3BlcnRpZXMgPSBDb250cm9sc1Byb3BlcnRpZXMuQ29udHJvbHNQcm9wZXJ0aWVzO1xyXG4gICAgaWYgKGNvbnRyb2xJZCBpbiBDb250cm9sc1Byb3BlcnRpZXMpIHtcclxuICAgICAgaWYgKHByb3AgaW4gQ29udHJvbHNQcm9wZXJ0aWVzW2NvbnRyb2xJZF0ucHJvcGVydGllcykge1xyXG4gICAgICAgIHJldHVybiBDb250cm9sc1Byb3BlcnRpZXNbY29udHJvbElkXS5wcm9wZXJ0aWVzW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZ2V0U3R5bGVTdHViKENvbnRyb2xzUHJvcGVydGllczogYW55LCBjb250cm9sSWQsIHN0eWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBDb250cm9sc1Byb3BlcnRpZXMgPSBDb250cm9sc1Byb3BlcnRpZXMuQ29udHJvbHNQcm9wZXJ0aWVzO1xyXG4gICAgcmV0dXJuIENvbnRyb2xzUHJvcGVydGllc1tjb250cm9sSWRdLnN0eWxlc01hcC5nZXQoc3R5bGVOYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgQ1NTIGNsYXNzZXMgdXNlZCBmb3IgdGhpcyBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIGd1aVJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zIFN0cmluZyBjb250YWluaW5nIHRoZSBjbGFzc2VzIGN1cnJlbnRseSBkZWZpbmVkIGZvciB0aGlzIGNvbnRyb2xcclxuICAgKi9cclxuICBnZXRDbGFzc2VzKGNvbnRyb2xJZDogc3RyaW5nLCBndWlSb3dJZD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoZ3VpUm93SWQpKVxyXG4gICAgICBndWlSb3dJZCA9ICcwJztcclxuICAgIHJldHVybiB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCkuY2xhc3NlcztcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIGEgc3R5bGUgdXNlZCBmb3IgYSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHN0eWxlTmFtZSBOYW1lIG9mIHN0eWxlXHJcbiAgICogQHBhcmFtIGd1aVJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zIHZhbHVlIG9mIHN0eWxlIG9mIHRoZSBjb250cm9sXHJcbiAgICovXHJcbiAgZ2V0U3R5bGUoY29udHJvbElkOiBzdHJpbmcsIHN0eWxlTmFtZTogc3RyaW5nLCBndWlSb3dJZD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoZ3VpUm93SWQpKVxyXG4gICAgICBndWlSb3dJZCA9ICcwJztcclxuICAgIGlmICh0aGlzLklzU3R1YigpKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRTdHlsZVN0dWIodGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLCBjb250cm9sSWQsIHN0eWxlTmFtZSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IG1hZ2ljVmFsdWUgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCkuc3R5bGVzTWFwLmdldChzdHlsZU5hbWUpO1xyXG4gICAgICByZXR1cm4gU3R5bGVzTWFwTWFuYWdlci5tYWdpY1ZhbHVlR2V0U3R5bGUoc3R5bGVOYW1lLCBtYWdpY1ZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgYSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIGd1aVJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zIHZhbHVlIG9mIHRoZSBjb250cm9sXHJcbiAgICovXHJcbiAgZ2V0VmFsdWUoY29udHJvbElkOiBzdHJpbmcsIGd1aVJvd0lkPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoZ3VpUm93SWQpKVxyXG4gICAgICBndWlSb3dJZCA9ICcwJztcclxuICAgIHJldHVybiB0aGlzLlJlY29yZHMubGlzdC5sZW5ndGggPiArZ3VpUm93SWQgPyB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0udmFsdWVzW2NvbnRyb2xJZF0gOiAnJztcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCB2YWx1ZSBvZiBhIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gZ3VpUm93SWQgUm93IElkLCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnMgdmFsdWUgb2YgdGhlIGNvbnRyb2xcclxuICAgKi9cclxuICBnZXRGb3JtYXR0ZWRWYWx1ZShjb250cm9sTmFtZTogc3RyaW5nLCB2YWw6IGFueSk6IHN0cmluZyB7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubWFnaWMuR2V0Rm9ybWF0dGVkVmFsdWUodGhpcy50YXNrSWQsIGNvbnRyb2xOYW1lLCB2YWwpO1xyXG4gfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gZ3VpUm93SWQgUm93IElkLCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHNldFxyXG4gICAqL1xyXG4gIHNldFZhbHVlKGNvbnRyb2xJZDogc3RyaW5nLCBndWlSb3dJZDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLnNldFZhbHVlKGNvbnRyb2xJZCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBleGVjdXRlSW50ZXJhY3RpdmVDb21tYW5kKGd1aUludGVyYWN0aXZlQ29tbWFuZDogR3VpSW50ZXJhY3RpdmUpXHJcbiAge1xyXG4gICAgR3VpSW50ZXJhY3RpdmVFeGVjdXRvci5leGVjdXRlSW50ZXJhY3RpdmVDb21tYW5kKHRoaXMsIGd1aUludGVyYWN0aXZlQ29tbWFuZCwgdGhpcy5vdmVybGF5V2luZG93U2VydmljZSk7XHJcbiAgICB0aGlzLmludGVyYWN0aXZlQ29tbWFuZHMubmV4dChndWlJbnRlcmFjdGl2ZUNvbW1hbmQpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgaGFuZGxlU2V0UHJvcGVydHkoY29tbWFuZDogR3VpQ29tbWFuZCwgaXNUYWJsZUNoaWxkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBsZXQgY29udHJvbElkID0gY29tbWFuZC5DdHJsTmFtZTtcclxuICAgIGxldCBkdlJvd0lkOiBudW1iZXIgPSAoY29tbWFuZC5saW5lIHx8IDApO1xyXG4gICAgbGV0IGd1aVJvd0lkOiBudW1iZXIgPSB0aGlzLmdldEd1aVJvd0lkKGR2Um93SWQsIGlzVGFibGVDaGlsZCk7XHJcbiAgICBsZXQgcHJvcGVydGllczogQ29udHJvbE1ldGFkYXRhO1xyXG5cclxuICAgIGlmIChjb21tYW5kLk9wZXJhdGlvbiA9PT0gSHRtbFByb3BlcnRpZXMuU2VsZWN0ZWRSb3cpIHtcclxuICAgICAgaWYgKGNvbW1hbmQub2JqMSAhPT0gR3VpQ29uc3RhbnRzLk5PX1JPV19TRUxFQ1RFRCkge1xyXG4gICAgICAgIGd1aVJvd0lkID0gdGhpcy5nZXRHdWlSb3dJZChjb21tYW5kLm9iajEsIHRydWUpO1xyXG4gICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgICAgcHJvcGVydGllcy5wcm9wZXJ0aWVzLnNldChjb21tYW5kLk9wZXJhdGlvbiwgY29tbWFuZC5saW5lKTtcclxuICAgICAgICB0aGlzLnRhYmxlU2VydmljZS5zZWxlY3RSb3coZ3VpUm93SWQudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgdGhpcy5PblNlbGVjdGVkUm93Q2hhbmdlZC5lbWl0KGd1aVJvd0lkLnRvU3RyaW5nKCkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNvbW1hbmQuT3BlcmF0aW9uID09PSBIdG1sUHJvcGVydGllcy5FbmFibGVkKSB7XHJcbiAgICAgIGxldCBjID0gdGhpcy5nZXRGb3JtQ29udHJvbChndWlSb3dJZC50b1N0cmluZygpLCBjb250cm9sSWQpO1xyXG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGMpKSB7XHJcbiAgICAgICAgaWYgKGNvbW1hbmQub2JqMSlcclxuICAgICAgICAgIGMuZW5hYmxlKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgYy5kaXNhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuICAgICAgcHJvcGVydGllcy5wcm9wZXJ0aWVzLnNldChjb21tYW5kLk9wZXJhdGlvbiwgY29tbWFuZC5vYmoxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgIHByb3BlcnRpZXMucHJvcGVydGllcy5zZXQoPEh0bWxQcm9wZXJ0aWVzPmNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLm9iajEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGV4ZWN1dGVDb21tYW5kKGNvbW1hbmQ6IEd1aUNvbW1hbmQpOiB2b2lkIHtcclxuICAgIGxldCBkdlJvd0lkOiBudW1iZXIgPSAoY29tbWFuZC5saW5lIHx8IDApO1xyXG4gICAgbGV0IGd1aVJvd0lkOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IGNvbnRyb2xJZCA9IGNvbW1hbmQuQ3RybE5hbWU7XHJcbiAgICBsZXQgcHJvcGVydGllczogQ29udHJvbE1ldGFkYXRhO1xyXG4gICAgbGV0IGlzVGFibGVDaGlsZDogYm9vbGVhbiA9IHRoaXMuaXNUYWJsZUNvbnRyb2woY29udHJvbElkKTtcclxuXHJcbiAgICAvLyBGb3Igbm9uLWlucHV0IHR5cGUgY29udHJvbHMgb24gdGFibGUuXHJcbiAgICBpZiAoY29tbWFuZC5vYmogIT09IG51bGwpXHJcbiAgICAgIGlzVGFibGVDaGlsZCA9IGlzVGFibGVDaGlsZCB8fCBjb21tYW5kLm9iai5Jc1RhYmxlQ2hpbGQ7XHJcblxyXG4gICAgZ3VpUm93SWQgPSB0aGlzLmdldEd1aVJvd0lkKGR2Um93SWQsIGlzVGFibGVDaGlsZCk7XHJcblxyXG4gICAgc3dpdGNoIChjb21tYW5kLkNvbW1hbmRUeXBlKSB7XHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX0lTX0xPR0dFRF9JTjpcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX1RBQkxFX1RPUF9JTkRFWDpcclxuICAgICAgICB0aGlzLnRhYmxlU2VydmljZS5zZXRUYWJsZVRvcEluZGV4KGNvbW1hbmQubnVtYmVyKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5SRUZSRVNIX1RBU0s6XHJcbiAgICAgICAgdGhpcy50YWJsZVNlcnZpY2UucmVmcmVzaERhdGFTb3VyY2UoKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9UQUJMRV9JVEVNU19DT1VOVDpcclxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGNvbW1hbmQubnVtYmVyKSkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZVNlcnZpY2UudXBkYXRlVGFibGVTaXplKGNvbW1hbmQubnVtYmVyKTtcclxuXHJcbiAgICAgICAgICBpZiAoY29tbWFuZC5udW1iZXIgPiAwICYmIHRoaXMuUmVjb3Jkcy5zaXplVXBkYXRlZCAmJlxyXG4gICAgICAgICAgICAhdGhpcy5SZWNvcmRzLmlzRW1wdHlEYXRhVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLnJlY29yZHNDb3VudENoYW5nZVN1YmplY3QubmV4dChjb21tYW5kLm51bWJlcik7XHJcbiAgICAgICAgICAgIHRoaXMuUmVjb3Jkcy5zaXplVXBkYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX1JFQ09SRFNfQkVGT1JFX0NVUlJFTlRfVklFVzpcclxuICAgICAgICB0aGlzLnVwZGF0ZVJlY29yZHNCZWZvcmVDdXJyZW50Vmlldyhjb21tYW5kLm51bWJlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLkNSRUFURV9UQUJMRV9ST1c6XHJcbiAgICAgICAgZ3VpUm93SWQgPSB0aGlzLmdldEd1aVJvd0lkKGNvbW1hbmQubnVtYmVyLCB0cnVlKTtcclxuICAgICAgICB0aGlzLmJ1aWxkVGFibGVSb3dDb250cm9scyhndWlSb3dJZCk7XHJcbiAgICAgICAgdGhpcy5tYXJrUm93QXNDcmVhdGVkKGd1aVJvd0lkKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX0lTX1JPV19FRElUSU5HOlxyXG4gICAgICAgIGd1aVJvd0lkID0gdGhpcy5nZXRHdWlSb3dJZChjb21tYW5kLmxpbmUsIGNvbW1hbmQudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc3RhcnRSb3dFZGl0aW5nKGd1aVJvd0lkKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX05PVF9JU19ST1dfRURJVElORzpcclxuICAgICAgICBndWlSb3dJZCA9IHRoaXMuZ2V0R3VpUm93SWQoY29tbWFuZC5saW5lLCBjb21tYW5kLnZhbHVlKTtcclxuICAgICAgICB0aGlzLnN0b3BSb3dFZGl0aW5nKGd1aVJvd0lkKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlVORE9fQ1JFQVRFX1RBQkxFX1JPVzpcclxuICAgICAgICB0aGlzLm1hcmtSb3dBc05vdENyZWF0ZWQodGhpcy5nZXRHdWlSb3dJZChjb21tYW5kLm51bWJlciwgdHJ1ZSkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX1RBQkxFX0lOQ0xVREVTX0ZJUlNUOlxyXG4gICAgICAgIHRoaXMuc2V0SW5jbHVkZXNGaXJzdChjb21tYW5kLkJvb2wxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfVEFCTEVfSU5DTFVERVNfTEFTVDpcclxuICAgICAgICB0aGlzLnNldEluY2x1ZGVzTGFzdChjb21tYW5kLkJvb2wxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWTpcclxuICAgICAgICB0aGlzLmhhbmRsZVNldFByb3BlcnR5KGNvbW1hbmQsIGlzVGFibGVDaGlsZCk7XHJcbiAgICAgICAgaWYgKGNvbW1hbmQuT3BlcmF0aW9uID09IEh0bWxQcm9wZXJ0aWVzLlJlYWRPbmx5KVxyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoRG9tLm5leHQoY29tbWFuZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlBST1BfU0VUX1VTRVJfUFJPUEVSVFk6XHJcbiAgICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuICAgICAgICAvLyBpZiB0aGUgcHJvcGVydHkgaGFzIGNoYW5nZWQsIHNldCB0aGUgcHJvcGVydHkgYW5kIHJhaXNlIHRoZSBzdWJqZWN0XHJcbiAgICAgICAgaWYocHJvcGVydGllcy51c2VyUHJvcGVydGllcy5nZXQoY29tbWFuZC5PcGVyYXRpb24pIT09IGNvbW1hbmQub2JqMSkge1xyXG4gICAgICAgICAgcHJvcGVydGllcy51c2VyUHJvcGVydGllcy5zZXQoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICAgICAgICAvLyB0aGUgcHJvcGVydHkgbmFtZSBpcyBvZiBmb3JtYXQgPGNvbnRyb2xOYW1lPn48cHJvcGVydHlOYW1lPlxyXG4gICAgICAgICAgdGhpcy5jdXN0b21Qcm9wZXJ0aWVzU3ViamVjdC5uZXh0KHsgcHJvcGVydHlOYW1lOiBjb250cm9sSWQgKyAnficgKyBjb21tYW5kLk9wZXJhdGlvbiwgdmFsdWU6IGNvbW1hbmQub2JqMSwgcm93SWQ6IGd1aVJvd0lkIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuUFJPUF9TRVRfQ1VTVE9NX1ZBTElEQVRPUjoge1xyXG4gICAgICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuXHJcbiAgICAgICAgICBsZXQgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woZ3VpUm93SWQudG9TdHJpbmcoKSwgY29udHJvbElkKTtcclxuICAgICAgICAgIGlmIChjb250cm9sICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcHJvcGVydGllcy5jdXN0b21WYWxpZGF0b3JzLnNldChjb21tYW5kLk9wZXJhdGlvbiwgY29tbWFuZC5vYmoxKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsaWRhdG9yICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFtjb250cm9sLnZhbGlkYXRvciwgdGhpcy5jdXN0b21WYWxpZGF0b3IoZ3VpUm93SWQudG9TdHJpbmcoKSwgY29udHJvbElkKV0pO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuY3VzdG9tVmFsaWRhdG9yKGd1aVJvd0lkLnRvU3RyaW5nKCksIGNvbnRyb2xJZCkpO1xyXG5cclxuICAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX0NMQVNTOlxyXG4gICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgICAgcHJvcGVydGllcy5zZXRDbGFzcyhjb21tYW5kLk9wZXJhdGlvbiwgY29tbWFuZC5vYmoxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX1NUWUxFOlxyXG4gICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgICAgcHJvcGVydGllcy5zZXRTdHlsZShjb21tYW5kLk9wZXJhdGlvbiwgY29tbWFuZC5vYmoxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX0FUVFJJQlVURTpcclxuICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgICAgcHJvcGVydGllcy5kYXRhVHlwZSA9IDxTdG9yYWdlQXR0cmlidXRlPlN0cmluZy5mcm9tQ2hhckNvZGUoY29tbWFuZC5udW1iZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAgQ29tbWFuZFR5cGUuU0VUX1ZBTFVFOlxyXG4gICAgICAgIHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS52YWx1ZXNbY29udHJvbElkXSA9IGNvbW1hbmQudmFsdWU7XHJcbiAgICAgICAgbGV0IGMgPSB0aGlzLmdldEZvcm1Db250cm9sKGd1aVJvd0lkLnRvU3RyaW5nKCksIGNvbnRyb2xJZCk7XHJcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChjKSkge1xyXG4gICAgICAgICAgYy5zZXRWYWx1ZSh0aGlzLkNvbnZlcnRWYWxGcm9tTmF0aXZlKGNvbnRyb2xJZCwgY29tbWFuZC5saW5lLCBjb21tYW5kLnZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuQ1JFQVRFX1NVQl9GT1JNOlxyXG4gICAgICAgIHRoaXMubWdTdWJmb3JtU2VydmljZS5hZGRTdWJmb3JtQ29tcChjb21tYW5kLkN0cmxOYW1lLCBjb21tYW5kLnVzZXJEcm9wRm9ybWF0LnRvU3RyaW5nKCksIGNvbW1hbmQuc3RyLCBjb21tYW5kLmZpbGVOYW1lLCBjb21tYW5kLmNvbnRleHRJRCwgY29tbWFuZC5wYXJhbXMsIGNvbW1hbmQuQm9vbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5DTE9TRV9TVUJfRk9STTpcclxuICAgICAgICB0aGlzLm1nU3ViZm9ybVNlcnZpY2UuZGVsZXRlU3ViZm9ybUNvbXAoY29tbWFuZC5DdHJsTmFtZSwgY29tbWFuZC51c2VyRHJvcEZvcm1hdC50b1N0cmluZygpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX0VNUFRZX0RBVEFWSUVXOlxyXG4gICAgICAgIHRoaXMuc2V0SXNFbXB0eURhdGFWaWV3KGNvbW1hbmQuQm9vbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfRk9DVVM6XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoRG9tLm5leHQoY29tbWFuZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgY3VzdG9tIHZhbGlkYXRvclxyXG4gICovXHJcbiAgY3VzdG9tVmFsaWRhdG9yKHJvd2lkOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XHJcblxyXG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+IHtcclxuICAgICAgbGV0IGNvbnRyb2xNZXRhZGF0YTogQ29udHJvbE1ldGFkYXRhO1xyXG4gICAgICBjb250cm9sTWV0YWRhdGEgPSB0aGlzLlJlY29yZHMubGlzdFtyb3dpZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGlkKTtcclxuICAgICAgZm9yIChsZXQga2V5IG9mIGNvbnRyb2xNZXRhZGF0YS5jdXN0b21WYWxpZGF0b3JzLmtleXMoKSkge1xyXG4gICAgICAgIGxldCB2YWxpZGF0b3IgPSBjb250cm9sTWV0YWRhdGEuY3VzdG9tVmFsaWRhdG9ycy5nZXQoa2V5KTtcclxuICAgICAgICBpZiAoISg8Q3VzdG9tVmFsaWRhdG9yPnZhbGlkYXRvcikuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICByZXR1cm4geyBba2V5XTogdHJ1ZSB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDT252ZXJ0IGEgdmFsdWUgZnJvbSBNYWdpYyBmb3JtYXQgdG8gbmF0aXZlIGZvcm1hdFxyXG4gICAqIEBwYXJhbSBjb250cm9sSWQgSWQgb2YgY29udHJvbFxyXG4gICAqIEBwYXJhbSAgcm93SWQgUm93IElkLCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHBhcmFtIHZhbCBWYWx1ZSB0byBjb252ZXJ0XHJcbiAgICogQHJldHVybnMgQ29udmVydGVkIHZhbHVlXHJcbiAgICovXHJcbiAgQ29udmVydFZhbFRvTmF0aXZlKGNvbnRyb2xJZDogc3RyaW5nLCByb3dJZDogbnVtYmVyLCB2YWw6IGFueSk6IGFueSB7XHJcblxyXG4gICAgbGV0IHByb3BlcnRpZXM6IENvbnRyb2xNZXRhZGF0YTtcclxuICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuXHJcbiAgICBzd2l0Y2ggKHByb3BlcnRpZXMuZGF0YVR5cGUpIHtcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBsZXQgcmFuZ2VzOiBzdHJpbmcgPSB0aGlzLkdldEZsZFJhbmdlcyhjb250cm9sSWQpO1xyXG4gICAgICAgICAgbGV0IGZvdW5kOiBudW1iZXIgPSByYW5nZXMuaW5kZXhPZignLCcpO1xyXG4gICAgICAgICAgbGV0IHRydWVPcHRpb246IHN0cmluZyA9IHJhbmdlcy5zdWJzdHIoMCwgZm91bmQpO1xyXG4gICAgICAgICAgbGV0IGZhbHNlT3B0aW9uOiBzdHJpbmcgPSByYW5nZXMuc3Vic3RyKGZvdW5kICsgMSk7XHJcbiAgICAgICAgICBpZiAoTlN0cmluZy5FcXVhbHModmFsLCB0cnVlT3B0aW9uLCB0cnVlKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICBlbHNlIGlmIChOU3RyaW5nLkVxdWFscyh2YWwsIGZhbHNlT3B0aW9uLCB0cnVlKSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6IHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpe1xyXG4gICAgICAgIGxldCBpZHggPSB2YWwuaW5kZXhPZignOicsMCk7XHJcbiAgICAgICAgbGV0IGhvdXJzOiBudW1iZXIgPSArdmFsLnN1YnN0cigwLCBpZHgpO1xyXG4gICAgICAgIGxldCBtaW51dGVzOiBudW1iZXIgPSArdmFsLnN1YnN0cihpZHgrMSwgMik7XHJcbiAgICAgICAgbGV0IHNlY29uZHMgPSAwO1xyXG4gICAgICAgIGlmICh2YWwubGVuZ3RoID4gNSkge1xyXG4gICAgICAgICAgaWR4ID0gdmFsLmluZGV4T2YoJzonLCBpZHggKyAxKTtcclxuICAgICAgICAgIGlmIChpZHggPj0gMClcclxuICAgICAgICAgICAgc2Vjb25kcyA9ICt2YWwuc3Vic3RyKGlkeCArIDEsIDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsLmluZGV4T2YoJ1BNJyk+MClcclxuICAgICAgICAgIGhvdXJzICs9IDEyO1xyXG4gICAgICAgIGxldCBkdDogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZHQuc2V0SG91cnMoaG91cnMpO1xyXG4gICAgICAgIGR0LnNldE1pbnV0ZXMobWludXRlcyk7XHJcbiAgICAgICAgZHQuc2V0U2Vjb25kcyhzZWNvbmRzKTtcclxuXHJcblxyXG4gICAgICAgIHJldHVybiBkdDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIHJldHVybiAodmFsID09PSBudWxsKSA/IDAgOiB2YWw7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnQgYSB2YWx1ZSBmcm9tIG5hdGl2ZSB0byBNYWdpYyBmb3JtYXRcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gIHJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEBwYXJhbSB2YWwgVmFsdWUgdG8gY29udmVydFxyXG4gICAqIEByZXR1cm5zIENvbnZlcnRlZCB2YWx1ZVxyXG4gICAqL1xyXG4gIENvbnZlcnRWYWxGcm9tTmF0aXZlKGNvbnRyb2xJZDogc3RyaW5nLCByb3dJZDogbnVtYmVyLCB2YWw6IGFueSk6IGFueSB7XHJcblxyXG4gICAgbGV0IHByb3BlcnRpZXM6IENvbnRyb2xNZXRhZGF0YTtcclxuICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuXHJcbiAgICBzd2l0Y2ggKHByb3BlcnRpZXMuZGF0YVR5cGUpIHtcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOiB7XHJcbiAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgIGxldCBzdHI6IFN0cmluZ0J1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpO1xyXG4gICAgICAgICAgbGV0IGZvcm1hdDogc3RyaW5nID0gdmFsLmdldEhvdXJzKCkgPiA5ID8gJ3swfScgOiAnMHswfSc7XHJcbiAgICAgICAgICBzdHIuQXBwZW5kRm9ybWF0KGZvcm1hdCwgdmFsLmdldEhvdXJzKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICBzdHIuQXBwZW5kKCc6Jyk7XHJcbiAgICAgICAgICBmb3JtYXQgPSB2YWwuZ2V0TWludXRlcygpID4gOSA/ICd7MH0nIDogJzB7MH0nO1xyXG4gICAgICAgICAgc3RyLkFwcGVuZEZvcm1hdChmb3JtYXQsIHZhbC5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICBpZiAoIHZhbC5nZXRTZWNvbmRzKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIHN0ci5BcHBlbmQoJzonKTtcclxuICAgICAgICAgICAgZm9ybWF0ID0gdmFsLmdldFNlY29uZHMoKSA+IDkgPyAnezB9JyA6ICcwezB9JztcclxuICAgICAgICAgICAgc3RyLkFwcGVuZEZvcm1hdChmb3JtYXQsIHZhbC5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gc3RyLlRvU3RyaW5nKCk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOiB7XHJcbiAgICAgICAgbGV0IHByb3BlcnRpZXM6IENvbnRyb2xNZXRhZGF0YTtcclxuICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbJzAnXS5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nICYmIHByb3BlcnRpZXMucmFuZ2VWYWxpZGF0b3IpIHtcclxuICAgICAgICAgIGxldCByYW5nZXM6IHN0cmluZyA9IHRoaXMuR2V0RmxkUmFuZ2VzKGNvbnRyb2xJZCk7XHJcbiAgICAgICAgICBsZXQgZm91bmQ6IG51bWJlciA9IHJhbmdlcy5pbmRleE9mKCcsJyk7XHJcbiAgICAgICAgICBsZXQgdHJ1ZU9wdGlvbjogc3RyaW5nID0gcmFuZ2VzLnN1YnN0cigwLCBmb3VuZCk7XHJcbiAgICAgICAgICBsZXQgZmFsc2VPcHRpb246IHN0cmluZyA9IHJhbmdlcy5zdWJzdHIoZm91bmQgKyAxKTtcclxuICAgICAgICAgIGlmICh2YWwpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlT3B0aW9uO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VPcHRpb247XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgcmVzaXplIGFuZCBhbHNvIGZldGNoIGNodW5rIG9mIHJlY29yZHMgaWYgaGF2aW5nIGFuIGVtcHR5IHZpZXcuXHJcbiAgICogQGlnbm9yZVxyXG4gICAqIEBwYXJhbSBwYWdlU2l6ZSA6IFBhZ2VTaXplXHJcbiAgICogQHBhcmFtIHRvcEd1aVJvd0lkIDogR3VpUm93SWQgb2YgZmlyc3QgcmVjb3JkIGluIHZpZXcuXHJcbiAgICovXHJcbiAgIHJlc2l6ZShwYWdlU2l6ZTogbnVtYmVyLCB0b3BHdWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpRXZlbnQ6IElHdWlFdmVudCA9IGdldEd1aUV2ZW50T2JqKCdyZXNpemUnLCAndGFibGUnLCAwKTtcclxuICAgIGd1aUV2ZW50LlBhZ2VTaXplID0gcGFnZVNpemU7XHJcblxyXG4gICAgLy9BcyAnZ2V0Um93cycgZXZlbnQgYWxzbyBnZXRzIGV4ZWN1dGVkLCBzZXQgdGhlIGd1aUV2ZW50LkxpbmUgcGFyYW1ldGVyLlxyXG4gICAgZ3VpRXZlbnQuTGluZSA9IHRvcEd1aVJvd0lkO1xyXG4gICAgdGhpcy5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGRhdGEgZm9yIG5ldyB0YWJsZSByb3dzIHdoZW4gc2Nyb2xsaW5nIGRvbmVcclxuICAgKi9cclxuICBvblNjcm9sbERvd24oKSB7XHJcbiAgICBpZiAoIXRoaXMuUmVjb3Jkcy5pbmNsdWRlc0xhc3QpIHtcclxuICAgICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignZ2V0Um93cycsICd0YWJsZScsIDApO1xyXG4gICAgICBndWlFdmVudC5MaW5lID0gdGhpcy5mb3JtR3JvdXBzLmxlbmd0aDtcclxuICAgICAgdGhpcy5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBuZXcgYnJvd3NlciB3aW5kb3cgdGl0bGVcclxuICAgKiBAcGFyYW0gbmV3VGl0bGUgTmV3IHdpbmRvdyB0aXRsZVxyXG4gICAqL1xyXG4gIHNldFRpdGxlKG5ld1RpdGxlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubWdUaXRsZVNlcnZpY2Uuc2V0VGl0bGUobmV3VGl0bGUpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBnZXRHdWlSb3dJZChkdlJvd0lkOiBudW1iZXIsIGlzVGFibGVDb250cm9sOiBib29sZWFuKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoaXNUYWJsZUNvbnRyb2wgPyBkdlJvd0lkICsgdGhpcy5SZWNvcmRzLnJlY29yZHNCZWZvcmVDdXJyZW50VmlldyA6IDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZ2V0RHZSb3dJZChndWlSb3dJZDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoZ3VpUm93SWQgLSB0aGlzLlJlY29yZHMucmVjb3Jkc0JlZm9yZUN1cnJlbnRWaWV3KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFuIHVwIHRoZSBzZXJ2aWNlIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZFxyXG4gICAqL1xyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICAgdGhpcy5yZWZyZXNoRG9tLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMuY29tcGxldGUoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlSW50ZXJhY3RpdmVDb21tYW5kcy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVSZWZyZXNoRG9tLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgdGhpcy5pbnRlcmFjdGl2ZUNvbW1hbmRzLmNvbXBsZXRlKCk7XHJcbiAgICAgdGhpcy5jdXN0b21Qcm9wZXJ0aWVzU3ViamVjdC5jb21wbGV0ZSgpO1xyXG4gICAgIHRoaXMuT25TZWxlY3RlZFJvd0NoYW5nZWQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAvL0V2ZW50czpcclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHRoZSBDb21ib2JveCBcImNoYW5nZVwiIGV2ZW50XHJcbiAgICogQHBhcmFtIGV2ZW50ICBUaGUgZXZlbnQgcmVjZWl2ZWQgZnJvbSB0aGUgVUlcclxuICAgKiBAcGFyYW0gaWR4IElkIG9mIHRoZSBjb250cm9sIHJhaXNpbmcgdGhlIGV2ZW50XHJcbiAgICogQHBhcmFtIGxpbmUgUm93IElkLCBpZiBhcHBsaWNhYmxlXHJcbiAgICovXHJcbiAgb25Db21ib2JveFNlbGVjdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50LCBpZHg6IHN0cmluZywgbGluZTogbnVtYmVyKSB7XHJcbiAgICBsZXQgZ3VpRXZlbnQ6IElHdWlFdmVudCA9IGdldEd1aUV2ZW50T2JqKCdzZWxlY3Rpb25jaGFuZ2VkJywgaWR4LCBsaW5lKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIChldmVudCkgPT0gJ251bWJlcicpIHtcclxuICAgICAgICBndWlFdmVudC5WYWx1ZSA9IGV2ZW50O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChldmVudC50YXJnZXQpKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmRleGVzOiBudW1iZXJbXSA9IG5ldyBBcnJheTxudW1iZXI+KCg8YW55PmV2ZW50LnRhcmdldCkuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgKDxhbnk+ZXZlbnQudGFyZ2V0KS5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGluZGV4ZXNbaV0gPSAoPEhUTUxPcHRpb25FbGVtZW50Pig8YW55PmV2ZW50LnRhcmdldCkuc2VsZWN0ZWRPcHRpb25zW2ldKS5pbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBndWlFdmVudC5WYWx1ZSA9IGluZGV4ZXMuam9pbignLCcpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICBndWlFdmVudC5WYWx1ZSA9ICg8YW55PmV2ZW50KS52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0aGUgTGlzdGJveCBcImNoYW5nZVwiIGV2ZW50XHJcbiAgICogQHBhcmFtICBldmVudCBUaGUgZXZlbnQgcmVjZWl2ZWQgZnJvbSB0aGUgVUlcclxuICAgKiBAcGFyYW0gaWR4IElkIG9mIHRoZSBjb250cm9sIHJhaXNpbmcgdGhlIGV2ZW50XHJcbiAgICovXHJcbiAgb25MaXN0Qm94U2VsZWN0aW9uQ2hhbmdlZChldmVudDogRXZlbnQsIGlkeDogc3RyaW5nKSB7XHJcbiAgICBsZXQgZ3VpRXZlbnQ6IElHdWlFdmVudCA9IGdldEd1aUV2ZW50T2JqKCdzZWxlY3Rpb25jaGFuZ2VkJywgaWR4LCAwKTtcclxuXHJcbiAgICBsZXQgc2VsZWN0ZWRPcHRpb25zO1xyXG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChldmVudC50YXJnZXQpKVxyXG4gICAgICBzZWxlY3RlZE9wdGlvbnMgPSAoPGFueT5ldmVudC50YXJnZXQpLnNlbGVjdGVkT3B0aW9ucztcclxuICAgIGVsc2VcclxuICAgICAgc2VsZWN0ZWRPcHRpb25zID0gKDxhbnk+ZXZlbnQpLnNvdXJjZS5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQ7XHJcblxyXG4gICAgbGV0IGxlbmd0aCA9IHNlbGVjdGVkT3B0aW9ucy5sZW5ndGg7XHJcbiAgICBsZXQgaW5kZXhlczogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPihsZW5ndGgpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChldmVudC50YXJnZXQpKVxyXG4gICAgICAgIGluZGV4ZXNbaV0gPSAoc2VsZWN0ZWRPcHRpb25zW2ldKS5pbmRleDtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIGluZGV4ZXNbaV0gPSAoc2VsZWN0ZWRPcHRpb25zW2ldKS52YWx1ZTtcclxuICAgIH1cclxuICAgIGd1aUV2ZW50LlZhbHVlID0gPGFueT5pbmRleGVzOyAvLyBUT0RPOiBmaXhcclxuICAgIHRoaXMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHRoZSBDaGVja2JveCBcImNoYW5nZVwiIGV2ZW50XHJcbiAgICogQHBhcmFtICBldmVudCBUaGUgZXZlbnQgcmVjZWl2ZWQgZnJvbSB0aGUgVUlcclxuICAgKiBAcGFyYW0gaWR4IElkIG9mIHRoZSBjb250cm9sIHJhaXNpbmcgdGhlIGV2ZW50XHJcbiAgICogQHBhcmFtICByb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKi9cclxuICBvbkNoZWNrQ2hhbmdlZChldmVudDogRXZlbnQsIGlkeDogc3RyaW5nLCByb3dJZDogbnVtYmVyKSB7XHJcbiAgICBpZiAodHlwZW9mIHJvd0lkID09PSAndW5kZWZpbmVkJylcclxuICAgICAgcm93SWQgPSAwO1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignc2VsZWN0aW9uY2hhbmdlZCcsIGlkeCwgcm93SWQpO1xyXG5cclxuICAgIGlmICh0eXBlb2YgKGV2ZW50KSA9PSAnYm9vbGVhbicpIHtcclxuICAgICAgICBndWlFdmVudC5WYWx1ZSA9IGV2ZW50O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC50YXJnZXQgPT09ICd1bmRlZmluZWQnKVxyXG4gICAgICAgICAgICBndWlFdmVudC5WYWx1ZSA9ICg8YW55PihldmVudCkpLmNoZWNrZWQ7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBndWlFdmVudC5WYWx1ZSA9ICg8YW55PihldmVudC50YXJnZXQpKS5jaGVja2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHRhYiBzZWxlY3Rpb24gY2hhbmdlLCBjYXVzZWQgYnkgVUkgZXZlbnRzXHJcbiAgICogQHBhcmFtIGlkeCBJZCBvZiB0aGUgY29udHJvbCByYWlzaW5nIHRoZSBldmVudFxyXG4gICAqIEBwYXJhbSAgbGF5ZXIgSWQgb2Ygc2VsZWN0ZWQgdGFicGFnZVxyXG4gICAqL1xyXG4gIG1nT25UYWJTZWxlY3Rpb25DaGFuZ2VkKGlkeDogc3RyaW5nLCBsYXllcjogbnVtYmVyKSB7XHJcbiAgICBsZXQgZ3VpRXZlbnQ6IElHdWlFdmVudCA9IGdldEd1aUV2ZW50T2JqKCdzZWxlY3Rpb25jaGFuZ2VkJywgaWR4LCAwKTtcclxuICAgIGd1aUV2ZW50LlZhbHVlID0gbGF5ZXIudG9TdHJpbmcoKTtcclxuICAgIHRoaXMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0aGUgUmFkaW8gYnV0dG9uIFwiY2hhbmdlXCIgZXZlbnRcclxuICAgKiBAcGFyYW0gIGV2ZW50IFRoZSBldmVudCByZWNlaXZlZCBmcm9tIHRoZSBVSVxyXG4gICAqIEBwYXJhbSBpZHggSWQgb2YgdGhlIGNvbnRyb2wgcmFpc2luZyB0aGUgZXZlbnRcclxuICAgKi9cclxuICBtZ09uUmFkaW9TZWxlY3Rpb25DaGFuZ2VkKGlkeDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5nZXRGb3JtQ29udHJvbCgnMCcsIGlkeCk7XHJcbiAgICBsZXQgZ3VpRXZlbnQ6IElHdWlFdmVudCA9IGdldEd1aUV2ZW50T2JqKCdzZWxlY3Rpb25jaGFuZ2VkJywgaWR4LCAwKTtcclxuICAgIGlmKHR5cGVvZiByZXN1bHQudmFsdWUgIT09ICdzdHJpbmcnKVxyXG4gICAgICBndWlFdmVudC5WYWx1ZSA9IHJlc3VsdC52YWx1ZS5pbmRleDtcclxuICAgIGVsc2VcclxuICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAgcmVzdWx0LnZhbHVlO1xyXG4gICAgdGhpcy5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnNlcnRzIHRoZSBcImNsb3NlXCIgZXZlbnQgdG8gdGhlIG1hZ2ljIFdlYkNsaWVudCBldmVudCBxdWV1ZVxyXG4gICAqL1xyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5pbnNlcnRFdmVudChnZXRHdWlFdmVudE9iaignY2xvc2UnLCBudWxsLCAwKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIElzU3R1YigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1hZ2ljLmlzU3R1YjtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIC8vL1N0dWIgaGFuZGxpbmdcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAganNvbkRhdGE6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNhdmVEYXRhKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5tYWdpYy5zYXZlRGF0YShkYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwdWJsaWMgY3JlYXRlRGF0YSgpIHtcclxuICAgIGxldCBteURhdGEgPSB7XHJcbiAgICAgIHJlY29yZHM6IHRoaXMuUmVjb3JkcyxcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudGVtcGxhdGVcclxuICAgIH07XHJcbiAgICBsZXQgdGV4dDogc3RyaW5nID0gJ2xvYWREYXRhKCk6YW55ICAge1xcbicgK1xyXG4gICAgICAnICAgIGxldCBzdHViRGF0YSA9ICcgKyBKU09OLnN0cmluZ2lmeShteURhdGEpICsgJztcXG4nICtcclxuICAgICAgJyAgICB0aGlzLmxvYWRTdHViRGF0YShzdHViRGF0YSk7fSc7XHJcbiAgICBjb25zb2xlLmxvZyh0ZXh0KTtcclxuICAgIHRoaXMuc2F2ZURhdGEodGV4dCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBsb2FkU3R1YkRhdGEoc3R1YkRhdGE6IGFueSkge1xyXG5cclxuICAgIHRoaXMuUmVjb3JkcyA9IHN0dWJEYXRhLnJlY29yZHM7XHJcbiAgICB0aGlzLnNldHRlbXBsYXRlKHN0dWJEYXRhLnRlbXBsYXRlKTtcclxuICAgIHRoaXMudGFza0lkID0gJzEnO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlJlY29yZHMubGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgdGhpcy5idWlsZFRhYmxlUm93Q29udHJvbHMoaSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHVibGljIGxvYWREYXRhKCkge1xyXG4gICAgYWxlcnQoJ1BsZWFzZSwgb3ZlcndyaXRlIG1ldGhvZCBsb2FkRGF0YScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNldFN0dWJWYWx1ZShndWlSb3dJZDogbnVtYmVyLCBmYzogRm9ybUNvbnRyb2wsIG5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuSXNTdHViKCkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgdmFsID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLnZhbHVlc1tuYW1lXTtcclxuICAgICAgICBmYy5zZXRWYWx1ZSh2YWwpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEVuZCBvZiBzdHViIGhhbmRsaW5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG59XHJcblxyXG4iXX0=
|
611
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5tYWdpY3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3NlcnZpY2VzL3Rhc2subWFnaWNzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFrQixXQUFXLEVBQUUsU0FBUyxFQUFnQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RHLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQWtCLE9BQU8sRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxXQUFXLEVBQStCLFlBQVksRUFBa0IsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEgsT0FBTyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsY0FBYyxFQUFZLE1BQU0sbUJBQW1CLENBQUM7QUFJNUQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFNNUQsTUFBTSxPQUFPLGdCQUFnQjtJQXFGM0IsWUFBc0IsS0FBeUIsRUFBVSxvQkFBMEM7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QUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUtNLFFBQVE7UUFDYixLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBS0QsWUFBWSxDQUFDLFFBQWdCLEVBQUUsRUFBZSxFQUFFLElBQVk7UUFDMUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakIsSUFBSTtnQkFDRixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25ELEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEI7WUFBQyxPQUFPLENBQUMsRUFBRTthQUNYO1NBQ0Y7SUFDSCxDQUFDOztnRkF2aENVLGdCQUFnQjt3REFBaEIsZ0JBQWdCLFdBQWhCLGdCQUFnQjt1RkFBaEIsZ0JBQWdCO2NBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge2ZpbHRlcn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge2lzTnVsbE9yVW5kZWZpbmVkLCBpc1VuZGVmaW5lZH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1N0eWxlc01hcE1hbmFnZXJ9IGZyb20gJy4vU3R5bGVzTWFwTWFuYWdlcic7XHJcblxyXG5pbXBvcnQge0VuZ2luZU1hZ2ljU2VydmljZX0gZnJvbSAnLi9lbmdpbmUubWFnaWMuc2VydmljZSc7XHJcbmltcG9ydCB7Q29udHJvbE1ldGFkYXRhLCBSZWNvcmRzfSBmcm9tICcuLi9jb250cm9scy5tZXRhZGF0YS5tb2RlbCc7XHJcbmltcG9ydCB7Q29tbWFuZFR5cGUsIEN1c3RvbVZhbGlkYXRvciwgR3VpQ29tbWFuZCwgR3VpQ29uc3RhbnRzLCBHdWlJbnRlcmFjdGl2ZSwgSHRtbFByb3BlcnRpZXN9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcclxuXHJcbmltcG9ydCB7TlN0cmluZywgU3RyaW5nQnVpbGRlcn0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1N0b3JhZ2VBdHRyaWJ1dGV9IGZyb20gJ0BtYWdpYy14cGEvdXRpbHMnO1xyXG5pbXBvcnQge2dldEd1aUV2ZW50T2JqLCBJR3VpRXZlbnR9IGZyb20gJ0BtYWdpYy14cGEvZW5naW5lJztcclxuaW1wb3J0IHtTdWJmb3JtTWFnaWNTZXJ2aWNlfSBmcm9tICcuL3N1YmZvcm0ubWFnaWMuc2VydmljZSc7XHJcbmltcG9ydCB7VGl0bGVNYWdpY1NlcnZpY2V9IGZyb20gJy4vdGl0bGUubWFnaWMuc2VydmljZSc7XHJcbmltcG9ydCB7QWNjZXNzb3JNYWdpY1NlcnZpY2V9IGZyb20gJy4vYWNjZXNzb3IubWFnaWMuc2VydmljZSc7XHJcbmltcG9ydCB7R3VpSW50ZXJhY3RpdmVFeGVjdXRvcn0gZnJvbSAnLi4vdWkvR3VpSW50ZXJhY3RpdmVFeGVjdXRvcic7XHJcbmltcG9ydCB7T3ZlcmxheVdpbmRvd1NlcnZpY2V9IGZyb20gJy4vT3ZlcmxheVdpbmRvd1NlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIE1haW4gc2VydmljZSB0byBjb25uZWN0IHRoZSBVSSB3aXRoIHRoZSBNYWdpYyBXZWJDTGllbnRcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRhc2tNYWdpY1NlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBTZXJ2aWNlIHRvIHByb3ZpZGUgdGFibGUtcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXNcclxuICAgKi9cclxuICBwdWJsaWMgdGFibGVTZXJ2aWNlOiBhbnk7XHJcbiAgLyoqXHJcbiAgICogQ29sbGVjdGlvbiBvZiBkYXRhIGZvciBhbGwgY29udHJvbHNcclxuICAgKi9cclxuICBSZWNvcmRzOiBhbnkgPSBuZXcgUmVjb3JkcygpO1xyXG4gIC8qKlxyXG4gICAqIEZvcm1Hcm91cCBjb2xsZWN0aW9uIGZvciBsaW5lIG1vZGVcclxuICAgKi9cclxuICBmb3JtR3JvdXBzOiBBcnJheTxGb3JtR3JvdXA+ID0gW107XHJcbiAgLyoqXHJcbiAgICogRm9ybUdyb3VwIGZvciBhbGwgY29udHJvbHMgaW4gc2NyZWVuIG1vZGVcclxuICAgKi9cclxuICBTY3JlZW5Nb2RlQ29udHJvbHM6IEZvcm1Hcm91cDtcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcmVmcmVzaERvbTogU3ViamVjdDxHdWlDb21tYW5kPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHN1YnNjcmliZVJlZnJlc2hEb206IFN1YnNjcmlwdGlvbjtcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZGV0ZWN0Q2hhbmdlczogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc3Vic2NyaWJlSW50ZXJhY3RpdmVDb21tYW5kczogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgaW50ZXJhY3RpdmVDb21tYW5kczogU3ViamVjdDxHdWlJbnRlcmFjdGl2ZT49IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgcm93IGluIGEgdGFibGUgY2hhbmdlcy5cclxuICAgKi9cclxuICBPblNlbGVjdGVkUm93Q2hhbmdlZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGN1c3RvbVByb3BlcnRpZXNTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHJlY29yZHNDb3VudENoYW5nZVN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwdWJsaWMgdGVtcGxhdGU6IHsgW2lkOiBzdHJpbmddOiBzdHJpbmc7IH07XHJcbiAgLyoqXHJcbiAgICogU2VydmljZSB0byBwcm92aWRlIHN1YmZvcm0tcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXNcclxuICAgKi9cclxuICBwdWJsaWMgbWdTdWJmb3JtU2VydmljZTogU3ViZm9ybU1hZ2ljU2VydmljZTtcclxuICAvKipcclxuICAgKiBTZXJ2aWNlIHRvIHByb3ZpZGUgdGhlIHRpdGxlLWNoYW5nZSBmdW5jdGlvbmFsaXR5XHJcbiAgICovXHJcbiAgcHVibGljIG1nVGl0bGVTZXJ2aWNlOiBUaXRsZU1hZ2ljU2VydmljZTtcclxuICAvKipcclxuICAgKiBTZXJ2aWNlIHdoaWNoIGVuYWJsZXMgZ2V0dGluZy9zZXR0aW5nIHZhbHVlcyBmcm9tL3RvIHRoZSBNYWdpYyBXZWJDbGllbnQgZW5naW5lXHJcbiAgICovXHJcbiAgcHVibGljIG1nQWNjZXNzb3JTZXJ2aWNlOiBBY2Nlc3Nvck1hZ2ljU2VydmljZTtcclxuXHJcbiAgcHVibGljIG1nSW5wdXREYXRlRm9ybWF0O1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgb2xkUGFnZVNpemUgPSAwO1xyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSAgbWFnaWNcclxuICAgKi9cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgbWFnaWM6IEVuZ2luZU1hZ2ljU2VydmljZSwgcHJpdmF0ZSBvdmVybGF5V2luZG93U2VydmljZTogT3ZlcmxheVdpbmRvd1NlcnZpY2UpIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5zZXRHdWlUb3BJbmRleCgwKTtcclxuICAgIHRoaXMubWdJbnB1dERhdGVGb3JtYXQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgIC8qKlxyXG4gICAqIHJldHVybnMgdHJ1ZSBpZiB1c2VkIGlzIGxvZ2dlZCBpblxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgcHVibGljIGdldElzTG9nZ2VuSW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tYWdpYy5nZXRJc0xvZ2dlZEluKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZCBvZiB0YXNrIHRvIHdoaWNoIHRoaXMgc2VydmljZSByZWZlcnNcclxuICAgKi9cclxuICBfdGFza0lkOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHVybnMgdGhlIHRhc2sgSWRcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldCB0YXNrSWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGFza0lkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdGFzayBJZFxyXG4gICAqIEBwYXJhbSB2YWx1ZSB0aGUgdGFzayBpZCB0byBzZXRcclxuICAgKi9cclxuICBzZXQgdGFza0lkKHZhbHVlKSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIHRoaXMuX3Rhc2tJZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdGFzaydzIGRhdGEgaW4gU2NyZWVuIG1vZGVcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldCBTY3JlZW5Db250cm9sc0RhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5SZWNvcmRzLmxpc3RbJzAnXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzZXR0ZW1wbGF0ZSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQnVpbGRzIHRoZSBGb3JtQ29udHJvbCBmb3IgZWFjaCBhbmQgZXZlcnkgY29udHJvbFxyXG4gICAqL1xyXG4gIGJ1aWxkU2NyZWVuTW9kZUNvbnRyb2xzKCkge1xyXG4gICAgY29uc3QgZ3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy50ZW1wbGF0ZSkge1xyXG5cclxuICAgICAgaWYgKHRoaXMudGVtcGxhdGVba2V5XSA9PSAnMCcpIHtcclxuICAgICAgICBsZXQgZmMgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gICAgICAgIHRoaXMuc2V0U3R1YlZhbHVlKDAsIGZjLCBrZXkpO1xyXG4gICAgICAgIGdyb3VwLmFkZENvbnRyb2woa2V5LCBmYyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlNjcmVlbk1vZGVDb250cm9scyA9IGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXMgdGhlIGNvbnRyb2wgYSB0YWJsZSBjb250cm9sXHJcbiAgICogQHBhcmFtIGlkIElkIG9mIHRoZSBjb250cm9sXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBpc1RhYmxlQ29udHJvbChpZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVtpZF0gPT0gJzEnO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWdJbnB1dERhdGVGb3JtYXQoKTogc3RyaW5nIHtyZXR1cm4gdGhpcy5tZ0lucHV0RGF0ZUZvcm1hdDt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIEZvcm1Db250cm9sIG9mIGEgY29udHJvbFxyXG4gICAqIEBwYXJhbSBndWlSb3dpZCBJZCBvZiB0aGUgcmVxdWVzdGVkIHJvd1xyXG4gICAqIEBwYXJhbSBpZCBJZCBvZiB0aGUgY29udHJvbFxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgZ2V0Rm9ybUNvbnRyb2woZ3VpUm93aWQ6IHN0cmluZywgaWQ6IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB7XHJcbiAgICBsZXQgYzogQWJzdHJhY3RDb250cm9sO1xyXG4gICAgbGV0IGdyb3VwOiBGb3JtR3JvdXAgPSB0aGlzLmlzVGFibGVDb250cm9sKGlkKSA/IHRoaXMuZm9ybUdyb3Vwc1tndWlSb3dpZF0gOiB0aGlzLlNjcmVlbk1vZGVDb250cm9scztcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZ3JvdXApKSB7XHJcbiAgICAgIGdyb3VwLmdldChpZCk7XHJcbiAgICAgIGMgPSBncm91cC5jb250cm9sc1tpZF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGhhbmRsZSB0aGUgY2hhbmdlIG9mIHRleHQgZm9yIGlucHV0IGNvbnRyb2wgaW5zaWRlIHRhYmxlXHJcbiAgICogQHBhcmFtICBndWlSb3dJZCBJZCBvZiB0aGUgcm93IGZvciB3aGljaCB0aGUgRm9ybUNvbnRyb2xzIGFyZSBidWlsdFxyXG4gICAqIHNldCB0aGUgbmV3IHZhbHVlIG9mIHRoZSBmb3JtY29udHJvbFxyXG4gICAqL1xyXG4gIHNldElucHV0VGV4dFZhbHVlKGNvbnRyb2xJZDogc3RyaW5nLCBndWlSb3dpZDogc3RyaW5nLCB2YWw6IGFueSkge1xyXG4gICAgdGhpcy5zZXRWYWx1ZShjb250cm9sSWQsIGd1aVJvd2lkLCB0aGlzLkNvbnZlcnRWYWxUb05hdGl2ZShjb250cm9sSWQsIDAsIHZhbCkpO1xyXG5cclxuICAgIGNvbnN0IGZjID0gdGhpcy5nZXRGb3JtQ29udHJvbChndWlSb3dpZCwgY29udHJvbElkKTtcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQodmFsKSlcclxuICAgICAgZmMuc2V0VmFsdWUodmFsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkIHRoZSBGb3JtQ29udHJvbHMgZm9yIGEgdGFibGUgcm93XHJcbiAgICogQHBhcmFtICBndWlSb3dJZCBJZCBvZiB0aGUgcm93IGZvciB3aGljaCB0aGUgRm9ybUNvbnRyb2xzIGFyZSBidWlsdFxyXG4gICAqL1xyXG4gIGJ1aWxkVGFibGVSb3dDb250cm9scyhndWlSb3dJZDogbnVtYmVyKSB7XHJcblxyXG4gICAgY29uc3QgZ3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMudGVtcGxhdGUpIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLnRlbXBsYXRlW2tleV0gPT0gJzEnKSB7XHJcbiAgICAgICAgbGV0IGZjID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAgICAgICB0aGlzLnNldFN0dWJWYWx1ZShndWlSb3dJZCwgZmMsIGtleSk7XHJcbiAgICAgICAgZ3JvdXAuYWRkQ29udHJvbChrZXksIGZjKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtR3JvdXBzW2d1aVJvd0lkXSA9IGdyb3VwO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHVwZGF0ZVJlY29yZHNCZWZvcmVDdXJyZW50Vmlldyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLlJlY29yZHMucmVjb3Jkc0JlZm9yZUN1cnJlbnRWaWV3ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc2V0SW5jbHVkZXNGaXJzdCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5SZWNvcmRzLmluY2x1ZGVzRmlyc3QgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzZXRJbmNsdWRlc0xhc3QodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5pbmNsdWRlc0xhc3QgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBtYXJrUm93QXNDcmVhdGVkKGd1aVJvd0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5tYXJrUm93QXNDcmVhdGVkKGd1aVJvd0lkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBtYXJrUm93QXNOb3RDcmVhdGVkKGd1aVJvd0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5tYXJrUm93QXNOb3RDcmVhdGVkKGd1aVJvd0lkKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc3RhcnRSb3dFZGl0aW5nKGd1aVJvd0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5zdGFydFJvd0VkaXRpbmcoZ3VpUm93SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHN0b3BSb3dFZGl0aW5nKGd1aVJvd0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5zdG9wUm93RWRpdGluZyhndWlSb3dJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgaXNSb3dJblJvd0VkaXRpbmcoZ3VpUm93SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUmVjb3Jkcy5pc1Jvd0luUm93RWRpdGluZyhndWlSb3dJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc2V0SXNFbXB0eURhdGFWaWV3KGlzRW1wdHk6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLlJlY29yZHMuaXNFbXB0eURhdGFWaWV3ICE9PSBpc0VtcHR5KSB7XHJcblxyXG4gICAgICBpZiAoaXNFbXB0eSlcclxuICAgICAgICB0aGlzLnJlY29yZHNDb3VudENoYW5nZVN1YmplY3QubmV4dCgwKTtcclxuXHJcbiAgICAgIHRoaXMuUmVjb3Jkcy5pc0VtcHR5RGF0YVZpZXcgPSBpc0VtcHR5O1xyXG4gICAgICB0aGlzLnRhYmxlU2VydmljZS5yZWZyZXNoRGF0YVNvdXJjZSgpO1xyXG4gICAgICB0aGlzLnJlZnJlc2hWaWV3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBzZXJ2aWNlIHRvIHdvcmsgd2l0aCB0aGUgdGFza1xyXG4gICAqIEBwYXJhbSB0YXNrSWQgSWQgb2YgdGhlIHRhc2tcclxuICAgKiBAcGFyYW0gdGFza0Rlc2NyaXB0aW9uXHJcbiAgICovXHJcbiAgaW5pdFRhc2sodGFza0lkLCB0YXNrRGVzY3JpcHRpb24pIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5jcmVhdGVGaXJzdCgpO1xyXG4gICAgdGhpcy5vbGRQYWdlU2l6ZSA9IDA7XHJcbiAgICBpZiAodGhpcy5Jc1N0dWIoKSkge1xyXG4gICAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRhc2tJZCA9IHRhc2tJZDtcclxuICAgICAgdGhpcy5zZXR0ZW1wbGF0ZSh0YXNrRGVzY3JpcHRpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5idWlsZFNjcmVlbk1vZGVDb250cm9scygpO1xyXG5cclxuICAgIC8vIHJlbW92ZSBwcmV2aW91cyBzdWJzY3JpcHRpb25zXHJcbiAgICBpZighaXNOdWxsT3JVbmRlZmluZWQodGhpcy5zdWJzY3JpYmVSZWZyZXNoRG9tKSlcclxuICAgICAgdGhpcy5zdWJzY3JpYmVSZWZyZXNoRG9tLnVuc3Vic2NyaWJlKCk7XHJcbiAgICBpZighaXNOdWxsT3JVbmRlZmluZWQodGhpcy5zdWJzY3JpYmVJbnRlcmFjdGl2ZUNvbW1hbmRzKSlcclxuICAgICAgdGhpcy5zdWJzY3JpYmVJbnRlcmFjdGl2ZUNvbW1hbmRzLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVSZWZyZXNoRG9tID0gdGhpcy5tYWdpYy5yZWZyZXNoRG9tLnBpcGUoZmlsdGVyKGNvbW1hbmQgPT4gY29tbWFuZC5UYXNrVGFnID09PSB0aGlzLnRhc2tJZCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoY29tbWFuZCA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJUYXNrIFwiICsgY29tbWFuZC5UYXNrVGFnICsgXCJjb21tYW5kIFwiICsgY29tbWFuZC5Db21tYW5kVHlwZSk7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlQ29tbWFuZChjb21tYW5kKTtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnN1YnNjcmliZUludGVyYWN0aXZlQ29tbWFuZHMgPSB0aGlzLm1hZ2ljLmludGVyYWN0aXZlQ29tbWFuZHNcclxuICAgICAgLnBpcGUoZmlsdGVyKGNvbW1hbmQgPT4gY29tbWFuZC5UYXNrVGFnID09PSB0aGlzLnRhc2tJZCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoY29tbWFuZCA9PiB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJUYXNrIFwiICsgY29tbWFuZC5UYXNrVGFnICsgXCJjb21tYW5kIFwiICsgY29tbWFuZC5Db21tYW5kVHlwZSk7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlSW50ZXJhY3RpdmVDb21tYW5kKGNvbW1hbmQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHJlZnJlc2hWaWV3KCkge1xyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzLm5leHQoJycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zZXJ0IGFuIGV2ZW50IHRvIHRoZSBNYWdpYyBXZWJDbGllbnQgZXZlbnQgcXVldWVcclxuICAgKiBAcGFyYW0gZ3VpRXZlbnQgVGhlIGV2ZW50IHRvIGluc2VydFxyXG4gICAqL1xyXG4gIGluc2VydEV2ZW50KGd1aUV2ZW50OiBJR3VpRXZlbnQpOiB2b2lkIHtcclxuICAgIGd1aUV2ZW50LlRhc2tJRCA9IHRoaXMudGFza0lkO1xyXG4gICAgdGhpcy5tYWdpYy5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgR2V0Q29udHJvbFBpY3R1cmVNYXNrKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMubWFnaWMuR2V0Q29udHJvbFBpY3R1cmVNYXNrKHRoaXMudGFza0lkLCBjb250cm9sTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgdGhlIGNvbnRyb2wgdmFsdWUsIHVzaW5nIHRoZSBNYWdpYyBXZWJDbGllbnRcclxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgSWQgb2YgdmFsaWRhdGVkIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgdG8gYmUgdmFsaWRhdGVkXHJcbiAgICogQHJldHVybnMgSWYgdmFsaWRhdGlvbiBmYWlscywgcmV0dXJucyBlcnJvciBtZXNzYWdlLCBlbHNlIHJldHVybnMgbnVsbFxyXG4gICAqL1xyXG4gIFZhbGlkYXRlQ29udHJvbFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubWFnaWMuVmFsaWRhdGVDb250cm9sVmFsdWUodGhpcy50YXNrSWQsIGNvbnRyb2xOYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgR2V0UmFuZ2VkVmFsdWUoY29udHJvbE5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5tYWdpYy5HZXRSYW5nZWRWYWx1ZSh0aGlzLnRhc2tJZCwgY29udHJvbE5hbWUsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBHZXRGbGRSYW5nZXMoY29udHJvbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5tYWdpYy5HZXRGbGRSYW5nZXModGhpcy50YXNrSWQsIGNvbnRyb2xOYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgb2YgdGhlIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gcHJvcCBQcm9wZXJ0eVxyXG4gICAqIEBwYXJhbSBndWlSb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcmV0dXJucyBQcm9wZXJ0eSB2YWx1ZVxyXG4gICAqL1xyXG4gIGdldFByb3BlcnR5KGNvbnRyb2xJZDogc3RyaW5nLCBwcm9wOiBIdG1sUHJvcGVydGllcywgZ3VpUm93SWQ/OiBzdHJpbmcpIHtcclxuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChndWlSb3dJZCkpXHJcbiAgICAgIGd1aVJvd0lkID0gJzAnO1xyXG4gICAgaWYgKHRoaXMuSXNTdHViKCkpXHJcbiAgICAgIHJldHVybiB0aGlzLmdldFByb3BlcnR5U3R1Yih0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0sIGNvbnRyb2xJZCwgcHJvcCk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHJlYyA9IHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXTtcclxuICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHJlYykpXHJcbiAgICAgICAgZGVidWdnZXI7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldFByb3BlcnR5KGNvbnRyb2xJZCwgcHJvcCk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGdldFByb3BlcnR5U3R1YihDb250cm9sc1Byb3BlcnRpZXM6IGFueSwgY29udHJvbElkLCBwcm9wKSB7XHJcbiAgICBDb250cm9sc1Byb3BlcnRpZXMgPSBDb250cm9sc1Byb3BlcnRpZXMuQ29udHJvbHNQcm9wZXJ0aWVzO1xyXG4gICAgaWYgKGNvbnRyb2xJZCBpbiBDb250cm9sc1Byb3BlcnRpZXMpIHtcclxuICAgICAgaWYgKHByb3AgaW4gQ29udHJvbHNQcm9wZXJ0aWVzW2NvbnRyb2xJZF0ucHJvcGVydGllcykge1xyXG4gICAgICAgIHJldHVybiBDb250cm9sc1Byb3BlcnRpZXNbY29udHJvbElkXS5wcm9wZXJ0aWVzW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZ2V0U3R5bGVTdHViKENvbnRyb2xzUHJvcGVydGllczogYW55LCBjb250cm9sSWQsIHN0eWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBDb250cm9sc1Byb3BlcnRpZXMgPSBDb250cm9sc1Byb3BlcnRpZXMuQ29udHJvbHNQcm9wZXJ0aWVzO1xyXG4gICAgcmV0dXJuIENvbnRyb2xzUHJvcGVydGllc1tjb250cm9sSWRdLnN0eWxlc01hcC5nZXQoc3R5bGVOYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgQ1NTIGNsYXNzZXMgdXNlZCBmb3IgdGhpcyBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIGd1aVJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zIFN0cmluZyBjb250YWluaW5nIHRoZSBjbGFzc2VzIGN1cnJlbnRseSBkZWZpbmVkIGZvciB0aGlzIGNvbnRyb2xcclxuICAgKi9cclxuICBnZXRDbGFzc2VzKGNvbnRyb2xJZDogc3RyaW5nLCBndWlSb3dJZD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoZ3VpUm93SWQpKVxyXG4gICAgICBndWlSb3dJZCA9ICcwJztcclxuICAgIHJldHVybiB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCkuY2xhc3NlcztcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIGEgc3R5bGUgdXNlZCBmb3IgYSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHN0eWxlTmFtZSBOYW1lIG9mIHN0eWxlXHJcbiAgICogQHBhcmFtIGd1aVJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zIHZhbHVlIG9mIHN0eWxlIG9mIHRoZSBjb250cm9sXHJcbiAgICovXHJcbiAgZ2V0U3R5bGUoY29udHJvbElkOiBzdHJpbmcsIHN0eWxlTmFtZTogc3RyaW5nLCBndWlSb3dJZD86IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoZ3VpUm93SWQpKVxyXG4gICAgICBndWlSb3dJZCA9ICcwJztcclxuICAgIGlmICh0aGlzLklzU3R1YigpKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRTdHlsZVN0dWIodGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLCBjb250cm9sSWQsIHN0eWxlTmFtZSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IG1hZ2ljVmFsdWUgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCkuc3R5bGVzTWFwLmdldChzdHlsZU5hbWUpO1xyXG4gICAgICByZXR1cm4gU3R5bGVzTWFwTWFuYWdlci5tYWdpY1ZhbHVlR2V0U3R5bGUoc3R5bGVOYW1lLCBtYWdpY1ZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgYSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIGd1aVJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zIHZhbHVlIG9mIHRoZSBjb250cm9sXHJcbiAgICovXHJcbiAgZ2V0VmFsdWUoY29udHJvbElkOiBzdHJpbmcsIGd1aVJvd0lkPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoZ3VpUm93SWQpKVxyXG4gICAgICBndWlSb3dJZCA9ICcwJztcclxuICAgIHJldHVybiB0aGlzLlJlY29yZHMubGlzdC5sZW5ndGggPiArZ3VpUm93SWQgPyB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0udmFsdWVzW2NvbnRyb2xJZF0gOiAnJztcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGZvcm1hdHRlZCB2YWx1ZSBvZiBhIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gZ3VpUm93SWQgUm93IElkLCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnMgdmFsdWUgb2YgdGhlIGNvbnRyb2xcclxuICAgKi9cclxuICBnZXRGb3JtYXR0ZWRWYWx1ZShjb250cm9sTmFtZTogc3RyaW5nLCB2YWw6IGFueSwgcm93SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cclxuICAgIHJldHVybiB0aGlzLm1hZ2ljLkdldEZvcm1hdHRlZFZhbHVlKHRoaXMudGFza0lkLCBjb250cm9sTmFtZSwgdmFsLCByb3dJZCk7XHJcbiB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgY29udHJvbFxyXG4gICAqIEBwYXJhbSBjb250cm9sSWQgSWQgb2YgY29udHJvbFxyXG4gICAqIEBwYXJhbSBndWlSb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gc2V0XHJcbiAgICovXHJcbiAgc2V0VmFsdWUoY29udHJvbElkOiBzdHJpbmcsIGd1aVJvd0lkOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uc2V0VmFsdWUoY29udHJvbElkLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGV4ZWN1dGVJbnRlcmFjdGl2ZUNvbW1hbmQoZ3VpSW50ZXJhY3RpdmVDb21tYW5kOiBHdWlJbnRlcmFjdGl2ZSlcclxuICB7XHJcbiAgICBHdWlJbnRlcmFjdGl2ZUV4ZWN1dG9yLmV4ZWN1dGVJbnRlcmFjdGl2ZUNvbW1hbmQodGhpcywgZ3VpSW50ZXJhY3RpdmVDb21tYW5kLCB0aGlzLm92ZXJsYXlXaW5kb3dTZXJ2aWNlKTtcclxuICAgIHRoaXMuaW50ZXJhY3RpdmVDb21tYW5kcy5uZXh0KGd1aUludGVyYWN0aXZlQ29tbWFuZClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBoYW5kbGVTZXRQcm9wZXJ0eShjb21tYW5kOiBHdWlDb21tYW5kLCBpc1RhYmxlQ2hpbGQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGxldCBjb250cm9sSWQgPSBjb21tYW5kLkN0cmxOYW1lO1xyXG4gICAgbGV0IGR2Um93SWQ6IG51bWJlciA9IChjb21tYW5kLmxpbmUgfHwgMCk7XHJcbiAgICBsZXQgZ3VpUm93SWQ6IG51bWJlciA9IHRoaXMuZ2V0R3VpUm93SWQoZHZSb3dJZCwgaXNUYWJsZUNoaWxkKTtcclxuICAgIGxldCBwcm9wZXJ0aWVzOiBDb250cm9sTWV0YWRhdGE7XHJcblxyXG4gICAgaWYgKGNvbW1hbmQuT3BlcmF0aW9uID09PSBIdG1sUHJvcGVydGllcy5TZWxlY3RlZFJvdykge1xyXG4gICAgICBpZiAoY29tbWFuZC5vYmoxICE9PSBHdWlDb25zdGFudHMuTk9fUk9XX1NFTEVDVEVEKSB7XHJcbiAgICAgICAgZ3VpUm93SWQgPSB0aGlzLmdldEd1aVJvd0lkKGNvbW1hbmQub2JqMSwgdHJ1ZSk7XHJcbiAgICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuICAgICAgICBwcm9wZXJ0aWVzLnByb3BlcnRpZXMuc2V0KGNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLmxpbmUpO1xyXG4gICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLnNlbGVjdFJvdyhndWlSb3dJZC50b1N0cmluZygpKTtcclxuICAgICAgICB0aGlzLk9uU2VsZWN0ZWRSb3dDaGFuZ2VkLmVtaXQoZ3VpUm93SWQudG9TdHJpbmcoKSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY29tbWFuZC5PcGVyYXRpb24gPT09IEh0bWxQcm9wZXJ0aWVzLkVuYWJsZWQpIHtcclxuICAgICAgbGV0IGMgPSB0aGlzLmdldEZvcm1Db250cm9sKGd1aVJvd0lkLnRvU3RyaW5nKCksIGNvbnRyb2xJZCk7XHJcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoYykpIHtcclxuICAgICAgICBpZiAoY29tbWFuZC5vYmoxKVxyXG4gICAgICAgICAgYy5lbmFibGUoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBjLmRpc2FibGUoKTtcclxuICAgICAgfVxyXG4gICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICBwcm9wZXJ0aWVzLnByb3BlcnRpZXMuc2V0KGNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLm9iajEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuICAgICAgcHJvcGVydGllcy5wcm9wZXJ0aWVzLnNldCg8SHRtbFByb3BlcnRpZXM+Y29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZXhlY3V0ZUNvbW1hbmQoY29tbWFuZDogR3VpQ29tbWFuZCk6IHZvaWQge1xyXG4gICAgbGV0IGR2Um93SWQ6IG51bWJlciA9IChjb21tYW5kLmxpbmUgfHwgMCk7XHJcbiAgICBsZXQgZ3VpUm93SWQ6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgY29udHJvbElkID0gY29tbWFuZC5DdHJsTmFtZTtcclxuICAgIGxldCBwcm9wZXJ0aWVzOiBDb250cm9sTWV0YWRhdGE7XHJcbiAgICBsZXQgaXNUYWJsZUNoaWxkOiBib29sZWFuID0gdGhpcy5pc1RhYmxlQ29udHJvbChjb250cm9sSWQpO1xyXG5cclxuICAgIC8vIEZvciBub24taW5wdXQgdHlwZSBjb250cm9scyBvbiB0YWJsZS5cclxuICAgIGlmIChjb21tYW5kLm9iaiAhPT0gbnVsbClcclxuICAgICAgaXNUYWJsZUNoaWxkID0gaXNUYWJsZUNoaWxkIHx8IGNvbW1hbmQub2JqLklzVGFibGVDaGlsZDtcclxuXHJcbiAgICBndWlSb3dJZCA9IHRoaXMuZ2V0R3VpUm93SWQoZHZSb3dJZCwgaXNUYWJsZUNoaWxkKTtcclxuXHJcbiAgICBzd2l0Y2ggKGNvbW1hbmQuQ29tbWFuZFR5cGUpIHtcclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfSVNfTE9HR0VEX0lOOlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfVEFCTEVfVE9QX0lOREVYOlxyXG4gICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLnNldFRhYmxlVG9wSW5kZXgoY29tbWFuZC5udW1iZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlJFRlJFU0hfVEFTSzpcclxuICAgICAgICB0aGlzLnRhYmxlU2VydmljZS5yZWZyZXNoRGF0YVNvdXJjZSgpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFZpZXcoKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX1RBQkxFX0lURU1TX0NPVU5UOlxyXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoY29tbWFuZC5udW1iZXIpKSB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlU2VydmljZS51cGRhdGVUYWJsZVNpemUoY29tbWFuZC5udW1iZXIpO1xyXG5cclxuICAgICAgICAgIGlmIChjb21tYW5kLm51bWJlciA+IDAgJiYgdGhpcy5SZWNvcmRzLnNpemVVcGRhdGVkICYmXHJcbiAgICAgICAgICAgICF0aGlzLlJlY29yZHMuaXNFbXB0eURhdGFWaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3Jkc0NvdW50Q2hhbmdlU3ViamVjdC5uZXh0KGNvbW1hbmQubnVtYmVyKTtcclxuICAgICAgICAgICAgdGhpcy5SZWNvcmRzLnNpemVVcGRhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfUkVDT1JEU19CRUZPUkVfQ1VSUkVOVF9WSUVXOlxyXG4gICAgICAgIHRoaXMudXBkYXRlUmVjb3Jkc0JlZm9yZUN1cnJlbnRWaWV3KGNvbW1hbmQubnVtYmVyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuQ1JFQVRFX1RBQkxFX1JPVzpcclxuICAgICAgICBndWlSb3dJZCA9IHRoaXMuZ2V0R3VpUm93SWQoY29tbWFuZC5udW1iZXIsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRUYWJsZVJvd0NvbnRyb2xzKGd1aVJvd0lkKTtcclxuICAgICAgICB0aGlzLm1hcmtSb3dBc0NyZWF0ZWQoZ3VpUm93SWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfSVNfUk9XX0VESVRJTkc6XHJcbiAgICAgICAgZ3VpUm93SWQgPSB0aGlzLmdldEd1aVJvd0lkKGNvbW1hbmQubGluZSwgY29tbWFuZC52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zdGFydFJvd0VkaXRpbmcoZ3VpUm93SWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfTk9UX0lTX1JPV19FRElUSU5HOlxyXG4gICAgICAgIGd1aVJvd0lkID0gdGhpcy5nZXRHdWlSb3dJZChjb21tYW5kLmxpbmUsIGNvbW1hbmQudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc3RvcFJvd0VkaXRpbmcoZ3VpUm93SWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuVU5ET19DUkVBVEVfVEFCTEVfUk9XOlxyXG4gICAgICAgIHRoaXMubWFya1Jvd0FzTm90Q3JlYXRlZCh0aGlzLmdldEd1aVJvd0lkKGNvbW1hbmQubnVtYmVyLCB0cnVlKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfVEFCTEVfSU5DTFVERVNfRklSU1Q6XHJcbiAgICAgICAgdGhpcy5zZXRJbmNsdWRlc0ZpcnN0KGNvbW1hbmQuQm9vbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9UQUJMRV9JTkNMVURFU19MQVNUOlxyXG4gICAgICAgIHRoaXMuc2V0SW5jbHVkZXNMYXN0KGNvbW1hbmQuQm9vbDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlU2V0UHJvcGVydHkoY29tbWFuZCwgaXNUYWJsZUNoaWxkKTtcclxuICAgICAgICBpZiAoY29tbWFuZC5PcGVyYXRpb24gPT0gSHRtbFByb3BlcnRpZXMuUmVhZE9ubHkpXHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hEb20ubmV4dChjb21tYW5kKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuUFJPUF9TRVRfVVNFUl9QUk9QRVJUWTpcclxuICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICAgIC8vIGlmIHRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCwgc2V0IHRoZSBwcm9wZXJ0eSBhbmQgcmFpc2UgdGhlIHN1YmplY3RcclxuICAgICAgICBpZihwcm9wZXJ0aWVzLnVzZXJQcm9wZXJ0aWVzLmdldChjb21tYW5kLk9wZXJhdGlvbikhPT0gY29tbWFuZC5vYmoxKSB7XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzLnVzZXJQcm9wZXJ0aWVzLnNldChjb21tYW5kLk9wZXJhdGlvbiwgY29tbWFuZC5vYmoxKTtcclxuICAgICAgICAgIC8vIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIG9mIGZvcm1hdCA8Y29udHJvbE5hbWU+fjxwcm9wZXJ0eU5hbWU+XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbVByb3BlcnRpZXNTdWJqZWN0Lm5leHQoeyBwcm9wZXJ0eU5hbWU6IGNvbnRyb2xJZCArICd+JyArIGNvbW1hbmQuT3BlcmF0aW9uLCB2YWx1ZTogY29tbWFuZC5vYmoxLCByb3dJZDogZ3VpUm93SWQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5QUk9QX1NFVF9DVVNUT01fVkFMSURBVE9SOiB7XHJcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG5cclxuICAgICAgICAgIGxldCBjb250cm9sID0gdGhpcy5nZXRGb3JtQ29udHJvbChndWlSb3dJZC50b1N0cmluZygpLCBjb250cm9sSWQpO1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmN1c3RvbVZhbGlkYXRvcnMuc2V0KGNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLm9iajEpO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWxpZGF0b3IgIT0gbnVsbClcclxuICAgICAgICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnMoW2NvbnRyb2wudmFsaWRhdG9yLCB0aGlzLmN1c3RvbVZhbGlkYXRvcihndWlSb3dJZC50b1N0cmluZygpLCBjb250cm9sSWQpXSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICBjb250cm9sLnNldFZhbGlkYXRvcnModGhpcy5jdXN0b21WYWxpZGF0b3IoZ3VpUm93SWQudG9TdHJpbmcoKSwgY29udHJvbElkKSk7XHJcblxyXG4gICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfQ0xBU1M6XHJcbiAgICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuICAgICAgICBwcm9wZXJ0aWVzLnNldENsYXNzKGNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLm9iajEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfU1RZTEU6XHJcbiAgICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuICAgICAgICBwcm9wZXJ0aWVzLnNldFN0eWxlKGNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLm9iajEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfQVRUUklCVVRFOlxyXG4gICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFswXS5nZXRDb250cm9sTWV0YWRhdGEoY29udHJvbElkKTtcclxuICAgICAgICBwcm9wZXJ0aWVzLmRhdGFUeXBlID0gPFN0b3JhZ2VBdHRyaWJ1dGU+U3RyaW5nLmZyb21DaGFyQ29kZShjb21tYW5kLm51bWJlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICBDb21tYW5kVHlwZS5TRVRfVkFMVUU6XHJcbiAgICAgICAgdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLnZhbHVlc1tjb250cm9sSWRdID0gY29tbWFuZC52YWx1ZTtcclxuICAgICAgICBsZXQgYyA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woZ3VpUm93SWQudG9TdHJpbmcoKSwgY29udHJvbElkKTtcclxuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGMpKSB7XHJcbiAgICAgICAgICBjLnNldFZhbHVlKHRoaXMuQ29udmVydFZhbEZyb21OYXRpdmUoY29udHJvbElkLCBjb21tYW5kLmxpbmUsIGNvbW1hbmQudmFsdWUpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5DUkVBVEVfU1VCX0ZPUk06XHJcbiAgICAgICAgdGhpcy5tZ1N1YmZvcm1TZXJ2aWNlLmFkZFN1YmZvcm1Db21wKGNvbW1hbmQuQ3RybE5hbWUsIGNvbW1hbmQudXNlckRyb3BGb3JtYXQudG9TdHJpbmcoKSwgY29tbWFuZC5zdHIsIGNvbW1hbmQuZmlsZU5hbWUsIGNvbW1hbmQuY29udGV4dElELCBjb21tYW5kLnBhcmFtcywgY29tbWFuZC5Cb29sMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLkNMT1NFX1NVQl9GT1JNOlxyXG4gICAgICAgIHRoaXMubWdTdWJmb3JtU2VydmljZS5kZWxldGVTdWJmb3JtQ29tcChjb21tYW5kLkN0cmxOYW1lLCBjb21tYW5kLnVzZXJEcm9wRm9ybWF0LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfRU1QVFlfREFUQVZJRVc6XHJcbiAgICAgICAgdGhpcy5zZXRJc0VtcHR5RGF0YVZpZXcoY29tbWFuZC5Cb29sMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9GT0NVUzpcclxuICAgICAgICB0aGlzLnJlZnJlc2hEb20ubmV4dChjb21tYW5kKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICBjdXN0b20gdmFsaWRhdG9yXHJcbiAgKi9cclxuICBjdXN0b21WYWxpZGF0b3Iocm93aWQ6IHN0cmluZywgaWQ6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcclxuXHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgPT4ge1xyXG4gICAgICBsZXQgY29udHJvbE1ldGFkYXRhOiBDb250cm9sTWV0YWRhdGE7XHJcbiAgICAgIGNvbnRyb2xNZXRhZGF0YSA9IHRoaXMuUmVjb3Jkcy5saXN0W3Jvd2lkXS5nZXRDb250cm9sTWV0YWRhdGEoaWQpO1xyXG4gICAgICBmb3IgKGxldCBrZXkgb2YgY29udHJvbE1ldGFkYXRhLmN1c3RvbVZhbGlkYXRvcnMua2V5cygpKSB7XHJcbiAgICAgICAgbGV0IHZhbGlkYXRvciA9IGNvbnRyb2xNZXRhZGF0YS5jdXN0b21WYWxpZGF0b3JzLmdldChrZXkpO1xyXG4gICAgICAgIGlmICghKDxDdXN0b21WYWxpZGF0b3I+dmFsaWRhdG9yKS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgIHJldHVybiB7IFtrZXldOiB0cnVlIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENPbnZlcnQgYSB2YWx1ZSBmcm9tIE1hZ2ljIGZvcm1hdCB0byBuYXRpdmUgZm9ybWF0XHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtICByb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcGFyYW0gdmFsIFZhbHVlIHRvIGNvbnZlcnRcclxuICAgKiBAcmV0dXJucyBDb252ZXJ0ZWQgdmFsdWVcclxuICAgKi9cclxuICBDb252ZXJ0VmFsVG9OYXRpdmUoY29udHJvbElkOiBzdHJpbmcsIHJvd0lkOiBudW1iZXIsIHZhbDogYW55KTogYW55IHtcclxuXHJcbiAgICBsZXQgcHJvcGVydGllczogQ29udHJvbE1ldGFkYXRhO1xyXG4gICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0WzBdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG5cclxuICAgIHN3aXRjaCAocHJvcGVydGllcy5kYXRhVHlwZSkge1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46IHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGxldCByYW5nZXM6IHN0cmluZyA9IHRoaXMuR2V0RmxkUmFuZ2VzKGNvbnRyb2xJZCk7XHJcbiAgICAgICAgICBsZXQgZm91bmQ6IG51bWJlciA9IHJhbmdlcy5pbmRleE9mKCcsJyk7XHJcbiAgICAgICAgICBsZXQgdHJ1ZU9wdGlvbjogc3RyaW5nID0gcmFuZ2VzLnN1YnN0cigwLCBmb3VuZCk7XHJcbiAgICAgICAgICBsZXQgZmFsc2VPcHRpb246IHN0cmluZyA9IHJhbmdlcy5zdWJzdHIoZm91bmQgKyAxKTtcclxuICAgICAgICAgIGlmIChOU3RyaW5nLkVxdWFscyh2YWwsIHRydWVPcHRpb24sIHRydWUpKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgIGVsc2UgaWYgKE5TdHJpbmcuRXF1YWxzKHZhbCwgZmFsc2VPcHRpb24sIHRydWUpKVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRToge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyl7XHJcbiAgICAgICAgbGV0IGlkeCA9IHZhbC5pbmRleE9mKCc6JywwKTtcclxuICAgICAgICBsZXQgaG91cnM6IG51bWJlciA9ICt2YWwuc3Vic3RyKDAsIGlkeCk7XHJcbiAgICAgICAgbGV0IG1pbnV0ZXM6IG51bWJlciA9ICt2YWwuc3Vic3RyKGlkeCsxLCAyKTtcclxuICAgICAgICBsZXQgc2Vjb25kcyA9IDA7XHJcbiAgICAgICAgaWYgKHZhbC5sZW5ndGggPiA1KSB7XHJcbiAgICAgICAgICBpZHggPSB2YWwuaW5kZXhPZignOicsIGlkeCArIDEpO1xyXG4gICAgICAgICAgaWYgKGlkeCA+PSAwKVxyXG4gICAgICAgICAgICBzZWNvbmRzID0gK3ZhbC5zdWJzdHIoaWR4ICsgMSwgMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWwuaW5kZXhPZignUE0nKT4wKVxyXG4gICAgICAgICAgaG91cnMgKz0gMTI7XHJcbiAgICAgICAgbGV0IGR0OiBEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBkdC5zZXRIb3Vycyhob3Vycyk7XHJcbiAgICAgICAgZHQuc2V0TWludXRlcyhtaW51dGVzKTtcclxuICAgICAgICBkdC5zZXRTZWNvbmRzKHNlY29uZHMpO1xyXG5cclxuXHJcbiAgICAgICAgcmV0dXJuIGR0O1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgcmV0dXJuICArdmFsO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IGEgdmFsdWUgZnJvbSBuYXRpdmUgdG8gTWFnaWMgZm9ybWF0XHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtICByb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcGFyYW0gdmFsIFZhbHVlIHRvIGNvbnZlcnRcclxuICAgKiBAcmV0dXJucyBDb252ZXJ0ZWQgdmFsdWVcclxuICAgKi9cclxuICBDb252ZXJ0VmFsRnJvbU5hdGl2ZShjb250cm9sSWQ6IHN0cmluZywgcm93SWQ6IG51bWJlciwgdmFsOiBhbnkpOiBhbnkge1xyXG5cclxuICAgIGxldCBwcm9wZXJ0aWVzOiBDb250cm9sTWV0YWRhdGE7XHJcbiAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcblxyXG4gICAgc3dpdGNoIChwcm9wZXJ0aWVzLmRhdGFUeXBlKSB7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRToge1xyXG4gICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICBsZXQgc3RyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgICAgICAgIGxldCBmb3JtYXQ6IHN0cmluZyA9IHZhbC5nZXRIb3VycygpID4gOSA/ICd7MH0nIDogJzB7MH0nO1xyXG4gICAgICAgICAgc3RyLkFwcGVuZEZvcm1hdChmb3JtYXQsIHZhbC5nZXRIb3VycygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgc3RyLkFwcGVuZCgnOicpO1xyXG4gICAgICAgICAgZm9ybWF0ID0gdmFsLmdldE1pbnV0ZXMoKSA+IDkgPyAnezB9JyA6ICcwezB9JztcclxuICAgICAgICAgIHN0ci5BcHBlbmRGb3JtYXQoZm9ybWF0LCB2YWwuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgaWYgKCB2YWwuZ2V0U2Vjb25kcygpID4gMCkge1xyXG4gICAgICAgICAgICBzdHIuQXBwZW5kKCc6Jyk7XHJcbiAgICAgICAgICAgIGZvcm1hdCA9IHZhbC5nZXRTZWNvbmRzKCkgPiA5ID8gJ3swfScgOiAnMHswfSc7XHJcbiAgICAgICAgICAgIHN0ci5BcHBlbmRGb3JtYXQoZm9ybWF0LCB2YWwuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHN0ci5Ub1N0cmluZygpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjoge1xyXG4gICAgICAgIGxldCBwcm9wZXJ0aWVzOiBDb250cm9sTWV0YWRhdGE7XHJcbiAgICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0WycwJ10uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJyAmJiBwcm9wZXJ0aWVzLnJhbmdlVmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICBsZXQgcmFuZ2VzOiBzdHJpbmcgPSB0aGlzLkdldEZsZFJhbmdlcyhjb250cm9sSWQpO1xyXG4gICAgICAgICAgbGV0IGZvdW5kOiBudW1iZXIgPSByYW5nZXMuaW5kZXhPZignLCcpO1xyXG4gICAgICAgICAgbGV0IHRydWVPcHRpb246IHN0cmluZyA9IHJhbmdlcy5zdWJzdHIoMCwgZm91bmQpO1xyXG4gICAgICAgICAgbGV0IGZhbHNlT3B0aW9uOiBzdHJpbmcgPSByYW5nZXMuc3Vic3RyKGZvdW5kICsgMSk7XHJcbiAgICAgICAgICBpZiAodmFsKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZU9wdGlvbjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlT3B0aW9uO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHJlc2l6ZSBhbmQgYWxzbyBmZXRjaCBjaHVuayBvZiByZWNvcmRzIGlmIGhhdmluZyBhbiBlbXB0eSB2aWV3LlxyXG4gICAqIEBpZ25vcmVcclxuICAgKiBAcGFyYW0gcGFnZVNpemUgOiBQYWdlU2l6ZVxyXG4gICAqIEBwYXJhbSB0b3BHdWlSb3dJZCA6IEd1aVJvd0lkIG9mIGZpcnN0IHJlY29yZCBpbiB2aWV3LlxyXG4gICAqL1xyXG4gICByZXNpemUocGFnZVNpemU6IG51bWJlciwgdG9wR3VpUm93SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaigncmVzaXplJywgJ3RhYmxlJywgMCk7XHJcbiAgICBndWlFdmVudC5QYWdlU2l6ZSA9IHBhZ2VTaXplO1xyXG5cclxuICAgIC8vQXMgJ2dldFJvd3MnIGV2ZW50IGFsc28gZ2V0cyBleGVjdXRlZCwgc2V0IHRoZSBndWlFdmVudC5MaW5lIHBhcmFtZXRlci5cclxuICAgIGd1aUV2ZW50LkxpbmUgPSB0b3BHdWlSb3dJZDtcclxuICAgIHRoaXMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBkYXRhIGZvciBuZXcgdGFibGUgcm93cyB3aGVuIHNjcm9sbGluZyBkb25lXHJcbiAgICovXHJcbiAgb25TY3JvbGxEb3duKCkge1xyXG4gICAgaWYgKCF0aGlzLlJlY29yZHMuaW5jbHVkZXNMYXN0KSB7XHJcbiAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooJ2dldFJvd3MnLCAndGFibGUnLCAwKTtcclxuICAgICAgZ3VpRXZlbnQuTGluZSA9IHRoaXMuZm9ybUdyb3Vwcy5sZW5ndGg7XHJcbiAgICAgIHRoaXMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbmV3IGJyb3dzZXIgd2luZG93IHRpdGxlXHJcbiAgICogQHBhcmFtIG5ld1RpdGxlIE5ldyB3aW5kb3cgdGl0bGVcclxuICAgKi9cclxuICBzZXRUaXRsZShuZXdUaXRsZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm1nVGl0bGVTZXJ2aWNlLnNldFRpdGxlKG5ld1RpdGxlKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZ2V0R3VpUm93SWQoZHZSb3dJZDogbnVtYmVyLCBpc1RhYmxlQ29udHJvbDogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKGlzVGFibGVDb250cm9sID8gZHZSb3dJZCArIHRoaXMuUmVjb3Jkcy5yZWNvcmRzQmVmb3JlQ3VycmVudFZpZXcgOiAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGdldER2Um93SWQoZ3VpUm93SWQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKGd1aVJvd0lkIC0gdGhpcy5SZWNvcmRzLnJlY29yZHNCZWZvcmVDdXJyZW50Vmlldyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhbiB1cCB0aGUgc2VydmljZSB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWRcclxuICAgKi9cclxuICBkaXNwb3NlKCkge1xyXG4gICAgIHRoaXMucmVmcmVzaERvbS5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZUludGVyYWN0aXZlQ29tbWFuZHMudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlUmVmcmVzaERvbS51bnN1YnNjcmliZSgpO1xyXG4gICAgIHRoaXMuaW50ZXJhY3RpdmVDb21tYW5kcy5jb21wbGV0ZSgpO1xyXG4gICAgIHRoaXMuY3VzdG9tUHJvcGVydGllc1N1YmplY3QuY29tcGxldGUoKTtcclxuICAgICB0aGlzLk9uU2VsZWN0ZWRSb3dDaGFuZ2VkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgLy9FdmVudHM6XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0aGUgQ29tYm9ib3ggXCJjaGFuZ2VcIiBldmVudFxyXG4gICAqIEBwYXJhbSBldmVudCAgVGhlIGV2ZW50IHJlY2VpdmVkIGZyb20gdGhlIFVJXHJcbiAgICogQHBhcmFtIGlkeCBJZCBvZiB0aGUgY29udHJvbCByYWlzaW5nIHRoZSBldmVudFxyXG4gICAqIEBwYXJhbSBsaW5lIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqL1xyXG4gIG9uQ29tYm9ib3hTZWxlY3Rpb25DaGFuZ2VkKGV2ZW50OiBFdmVudCwgaWR4OiBzdHJpbmcsIGxpbmU6IG51bWJlcikge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignc2VsZWN0aW9uY2hhbmdlZCcsIGlkeCwgbGluZSk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiAoZXZlbnQpID09ICdudW1iZXInKSB7XHJcbiAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSBldmVudDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZXZlbnQudGFyZ2V0KSkge1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhlczogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPigoPGFueT5ldmVudC50YXJnZXQpLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICg8YW55PmV2ZW50LnRhcmdldCkuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleGVzW2ldID0gKDxIVE1MT3B0aW9uRWxlbWVudD4oPGFueT5ldmVudC50YXJnZXQpLnNlbGVjdGVkT3B0aW9uc1tpXSkuaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSBpbmRleGVzLmpvaW4oJywnKTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAoPGFueT5ldmVudCkudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgdGhlIExpc3Rib3ggXCJjaGFuZ2VcIiBldmVudFxyXG4gICAqIEBwYXJhbSAgZXZlbnQgVGhlIGV2ZW50IHJlY2VpdmVkIGZyb20gdGhlIFVJXHJcbiAgICogQHBhcmFtIGlkeCBJZCBvZiB0aGUgY29udHJvbCByYWlzaW5nIHRoZSBldmVudFxyXG4gICAqL1xyXG4gIG9uTGlzdEJveFNlbGVjdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50LCBpZHg6IHN0cmluZykge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignc2VsZWN0aW9uY2hhbmdlZCcsIGlkeCwgMCk7XHJcblxyXG4gICAgbGV0IHNlbGVjdGVkT3B0aW9ucztcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZXZlbnQudGFyZ2V0KSlcclxuICAgICAgc2VsZWN0ZWRPcHRpb25zID0gKDxhbnk+ZXZlbnQudGFyZ2V0KS5zZWxlY3RlZE9wdGlvbnM7XHJcbiAgICBlbHNlXHJcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyA9ICg8YW55PmV2ZW50KS5zb3VyY2Uuc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkO1xyXG5cclxuICAgIGxldCBsZW5ndGggPSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoO1xyXG4gICAgbGV0IGluZGV4ZXM6IG51bWJlcltdID0gbmV3IEFycmF5PG51bWJlcj4obGVuZ3RoKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZXZlbnQudGFyZ2V0KSlcclxuICAgICAgICBpbmRleGVzW2ldID0gKHNlbGVjdGVkT3B0aW9uc1tpXSkuaW5kZXg7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpbmRleGVzW2ldID0gKHNlbGVjdGVkT3B0aW9uc1tpXSkudmFsdWU7XHJcbiAgICB9XHJcbiAgICBndWlFdmVudC5WYWx1ZSA9IDxhbnk+aW5kZXhlczsgLy8gVE9ETzogZml4XHJcbiAgICB0aGlzLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0aGUgQ2hlY2tib3ggXCJjaGFuZ2VcIiBldmVudFxyXG4gICAqIEBwYXJhbSAgZXZlbnQgVGhlIGV2ZW50IHJlY2VpdmVkIGZyb20gdGhlIFVJXHJcbiAgICogQHBhcmFtIGlkeCBJZCBvZiB0aGUgY29udHJvbCByYWlzaW5nIHRoZSBldmVudFxyXG4gICAqIEBwYXJhbSAgcm93SWQgUm93IElkLCBpZiBhcHBsaWNhYmxlXHJcbiAgICovXHJcbiAgb25DaGVja0NoYW5nZWQoZXZlbnQ6IEV2ZW50LCBpZHg6IHN0cmluZywgcm93SWQ6IG51bWJlcikge1xyXG4gICAgaWYgKHR5cGVvZiByb3dJZCA9PT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgIHJvd0lkID0gMDtcclxuICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooJ3NlbGVjdGlvbmNoYW5nZWQnLCBpZHgsIHJvd0lkKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIChldmVudCkgPT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSBldmVudDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQudGFyZ2V0ID09PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAoPGFueT4oZXZlbnQpKS5jaGVja2VkO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAoPGFueT4oZXZlbnQudGFyZ2V0KSkuY2hlY2tlZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0YWIgc2VsZWN0aW9uIGNoYW5nZSwgY2F1c2VkIGJ5IFVJIGV2ZW50c1xyXG4gICAqIEBwYXJhbSBpZHggSWQgb2YgdGhlIGNvbnRyb2wgcmFpc2luZyB0aGUgZXZlbnRcclxuICAgKiBAcGFyYW0gIGxheWVyIElkIG9mIHNlbGVjdGVkIHRhYnBhZ2VcclxuICAgKi9cclxuICBtZ09uVGFiU2VsZWN0aW9uQ2hhbmdlZChpZHg6IHN0cmluZywgbGF5ZXI6IG51bWJlcikge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignc2VsZWN0aW9uY2hhbmdlZCcsIGlkeCwgMCk7XHJcbiAgICBndWlFdmVudC5WYWx1ZSA9IGxheWVyLnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgdGhlIFJhZGlvIGJ1dHRvbiBcImNoYW5nZVwiIGV2ZW50XHJcbiAgICogQHBhcmFtICBldmVudCBUaGUgZXZlbnQgcmVjZWl2ZWQgZnJvbSB0aGUgVUlcclxuICAgKiBAcGFyYW0gaWR4IElkIG9mIHRoZSBjb250cm9sIHJhaXNpbmcgdGhlIGV2ZW50XHJcbiAgICovXHJcbiAgbWdPblJhZGlvU2VsZWN0aW9uQ2hhbmdlZChpZHg6IHN0cmluZykge1xyXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woJzAnLCBpZHgpO1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignc2VsZWN0aW9uY2hhbmdlZCcsIGlkeCwgMCk7XHJcbiAgICBpZih0eXBlb2YgcmVzdWx0LnZhbHVlICE9PSAnc3RyaW5nJylcclxuICAgICAgZ3VpRXZlbnQuVmFsdWUgPSByZXN1bHQudmFsdWUuaW5kZXg7XHJcbiAgICBlbHNlXHJcbiAgICAgIGd1aUV2ZW50LlZhbHVlID0gIHJlc3VsdC52YWx1ZTtcclxuICAgIHRoaXMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5zZXJ0cyB0aGUgXCJjbG9zZVwiIGV2ZW50IHRvIHRoZSBtYWdpYyBXZWJDbGllbnQgZXZlbnQgcXVldWVcclxuICAgKi9cclxuICBjbG9zZSgpIHtcclxuICAgIHRoaXMuaW5zZXJ0RXZlbnQoZ2V0R3VpRXZlbnRPYmooJ2Nsb3NlJywgbnVsbCwgMCkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBJc1N0dWIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5tYWdpYy5pc1N0dWI7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAvLy9TdHViIGhhbmRsaW5nXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGpzb25EYXRhOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzYXZlRGF0YShkYXRhOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubWFnaWMuc2F2ZURhdGEoZGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHVibGljIGNyZWF0ZURhdGEoKSB7XHJcbiAgICBsZXQgbXlEYXRhID0ge1xyXG4gICAgICByZWNvcmRzOiB0aGlzLlJlY29yZHMsXHJcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnRlbXBsYXRlXHJcbiAgICB9O1xyXG4gICAgbGV0IHRleHQ6IHN0cmluZyA9ICdsb2FkRGF0YSgpOmFueSAgIHtcXG4nICtcclxuICAgICAgJyAgICBsZXQgc3R1YkRhdGEgPSAnICsgSlNPTi5zdHJpbmdpZnkobXlEYXRhKSArICc7XFxuJyArXHJcbiAgICAgICcgICAgdGhpcy5sb2FkU3R1YkRhdGEoc3R1YkRhdGEpO30nO1xyXG4gICAgY29uc29sZS5sb2codGV4dCk7XHJcbiAgICB0aGlzLnNhdmVEYXRhKHRleHQpO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwdWJsaWMgbG9hZFN0dWJEYXRhKHN0dWJEYXRhOiBhbnkpIHtcclxuXHJcbiAgICB0aGlzLlJlY29yZHMgPSBzdHViRGF0YS5yZWNvcmRzO1xyXG4gICAgdGhpcy5zZXR0ZW1wbGF0ZShzdHViRGF0YS50ZW1wbGF0ZSk7XHJcbiAgICB0aGlzLnRhc2tJZCA9ICcxJztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5SZWNvcmRzLmxpc3QubGVuZ3RoOyBpKyspXHJcbiAgICAgIHRoaXMuYnVpbGRUYWJsZVJvd0NvbnRyb2xzKGkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBsb2FkRGF0YSgpIHtcclxuICAgIGFsZXJ0KCdQbGVhc2UsIG92ZXJ3cml0ZSBtZXRob2QgbG9hZERhdGEnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzZXRTdHViVmFsdWUoZ3VpUm93SWQ6IG51bWJlciwgZmM6IEZvcm1Db250cm9sLCBuYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLklzU3R1YigpKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IHZhbCA9IHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS52YWx1ZXNbbmFtZV07XHJcbiAgICAgICAgZmMuc2V0VmFsdWUodmFsKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBFbmQgb2Ygc3R1YiBoYW5kbGluXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxufVxyXG5cclxuIl19
|