@ieeesa-npm/groups 0.13.4 → 0.13.5

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.
@@ -444,7 +444,13 @@ export class AddUserRosterComponent {
444
444
  */
445
445
  onAddUserFormSubmit(form) {
446
446
  form[0]?.markAllAsTouched();
447
- if (form[0].status === FormStatus.VALID) {
447
+ const isAllOtherControlsValid = Object.keys(form[0].controls)
448
+ .filter((controlName) => controlName !== 'representingOrg')
449
+ .every((controlName) => form[0].get(controlName)?.status === FormStatus?.VALID);
450
+ if ((form[0].get('representingOrg')?.status === FormStatus?.INVALID &&
451
+ isAllOtherControlsValid &&
452
+ this.selectedOrganizations.length > 0) ||
453
+ form[0].status === FormStatus?.VALID) {
448
454
  this.groupService
449
455
  .addNewGroupUser(this.getAddNewUserPayload(form[0]?.getRawValue()))
450
456
  .pipe(takeUntil(this.destroy$))
@@ -730,4 +736,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
730
736
  }], formCancel: [{
731
737
  type: Output
732
738
  }] } });
733
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXVzZXItcm9zdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvYWRkLXVzZXItcm9zdGVyL2FkZC11c2VyLXJvc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2FkZC11c2VyLXJvc3Rlci9hZGQtdXNlci1yb3N0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBR1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUNMLFNBQVMsRUFDVCxhQUFhLEdBRWQsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBRUwsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBTVYsb0JBQW9CLEdBQ3JCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxLQUFLLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7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QUFDLG9CQUFvQjtnQkFDckIsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0VHlwZSxcclxuICBBbGVydHNTZXJ2aWNlLFxyXG4gIEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUdyaWQsXHJcbiAgRm9ybUNvbnRyb2xUeXBlLFxyXG4gIEFsaWduVHlwZSxcclxuICBTZWFyY2hUeXBlLFxyXG4gIENoZWNrYm94T3B0aW9uLFxyXG4gIFNlbGVjdE9wdGlvbixcclxuICBGb3JtTW9kZWwsXHJcbiAgRmllbGRDb25maWcsXHJcbiAgQXV0b0NvbXBsZXRlT3B0aW9uLFxyXG4gIER5bmFtaWNGb3JtQ29tcG9uZW50LFxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucyB9IGZyb20gJy4uLy4uL2Fzc2V0cy9mb3JtLXZhbGlkYXRpb25zJztcclxuaW1wb3J0IHsgRm9ybVN0YXR1cyB9IGZyb20gJy4uLy4uL21vZGVscy9mb3JtLXN0YXR1cy5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3Vwc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkLFxyXG4gIEFkZE9yRWRpdFVzZXJQYXlsb2FkLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9hZGQtb3ItZWRpdC11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgVXNlckluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBSb3N0ZXJUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jvc3Rlci10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWQgfSBmcm9tICcuLi8uLi9tb2RlbHMvb3JnYW5pemF0aW9uLm1vZGVsJztcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgdmlldyBhbmQgZnVuY3Rpb25hbGl0aWVzIHRvIGFkZCBncm91cCB1c2VycyB0byByb3N0ZXIuXHJcbiAqIEBleHBvcnRcclxuICogQGNsYXNzIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLWFkZC11c2VyLXJvc3RlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEeW5hbWljRm9ybUNvbXBvbmVudCwgTWF0RGlhbG9nTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLXVzZXItcm9zdGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hZGQtdXNlci1yb3N0ZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW0FsZXJ0c1NlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkVXNlclJvc3RlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBjb25zdGFudHM6IGFueSA9IHNjcmVlblRleHRzO1xyXG4gIGFkZFVzZXJSb3N0ZXJUZXh0cyA9IHRoaXMuY29uc3RhbnRzPy5hZGRVc2VyUm9zdGVyO1xyXG4gIGxlZnRCdXR0b25MYWJlbCA9IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ubGVmdEJ1dHRvbkxhYmVsO1xyXG4gIHJpZ2h0QnV0dG9uTGFiZWwgPSB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnJpZ2h0QnV0dG9uTGFiZWw7XHJcbiAgaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gIGNvbFdpZHRoOiBGb3JtR3JpZCA9IHsgeHM6IDEyLCB4bDogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIgfTtcclxuICBzZWFyY2hVc2VyRm9ybUdyb3VwITogRm9ybU1vZGVsO1xyXG4gIGFkZFVzZXJGb3JtR3JvdXAhOiBGb3JtTW9kZWw7XHJcbiAgYWN0aW9uQnV0dG9uQWxpZ24gPSBBbGlnblR5cGUuTEVGVDtcclxuICBhZGRVc2VyRm9ybUdyb3VwUmVmITogRm9ybUdyb3VwO1xyXG4gIGlzU2VhcmNoVXNlckZvcm0gPSB0cnVlO1xyXG4gIHVzZXJSb2xlczogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gIHNlbGVjdGVkVXNlclJvbGVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHVzZXJJbmZvOiBVc2VySW5mbyA9IHtcclxuICAgIGVtYWlsOiAnJyxcclxuICAgIG5hbWU6ICcnLFxyXG4gICAgdXNlcklkOiAnJyxcclxuICB9O1xyXG4gIGlzQWRkVXNlckZvcm1FbWFpbFNlYXJjaCA9IGZhbHNlO1xyXG4gIGNsYXNzaWZpY2F0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBtZW1iZXJUeXBlczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBvcmdhbml6YXRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gIGhhc0NsYXNzaWZpY2F0aW9uID0gZmFsc2U7XHJcbiAgZ3JvdXBSb3N0ZXJUeXBlITogR3JvdXBSb3N0ZXJUeXBlO1xyXG4gIGlzVXNlckV4aXN0ID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRPcmdhbml6YXRpb25zOiBBdXRvQ29tcGxldGVPcHRpb25bXSA9IFtdO1xyXG4gIEBWaWV3Q2hpbGQoRHluYW1pY0Zvcm1Db21wb25lbnQpIGR5bmFtaWNGb3JtQ29tcG9uZW50ITogRHluYW1pY0Zvcm1Db21wb25lbnQ7XHJcbiAgQE91dHB1dCgpIHN1Ym1pdEZvcm1SZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZm9ybUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ3JvdXBTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2U6IEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhbGVydFNlcnZpY2U6IEFsZXJ0c1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eS1mdW5jdGlvbiwgbm8tdW51c2VkLXZhcnNcclxuICApIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHVzZXIgcm9sZXMgYW5kIHNlYXJjaFVzZXJGb3JtR3JvdXAuXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlclJvbGVzID0gdGhpcy5ncm91cFNlcnZpY2UuZ2V0R3JvdXBUeXBlVXNlclJvbGVzKCk7XHJcbiAgICBjb25zdCBncm91cFR5cGUgPSB0aGlzLmdyb3VwU2VydmljZS5nZXRCdXNpbmVzc1J1bGVPZlNlbGVjdGVkR3JvdXAoKTtcclxuICAgIHRoaXMuaGFzQ2xhc3NpZmljYXRpb24gPSBncm91cFR5cGU/Lmhhc0NsYXNzaWZpY2F0aW9uID8/IGZhbHNlO1xyXG4gICAgdGhpcy5ncm91cFJvc3RlclR5cGUgPSBncm91cFR5cGU/LnJvc3RlclR5cGUgYXMgR3JvdXBSb3N0ZXJUeXBlO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwUm9zdGVyVHlwZSlcclxuICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LkVSMTAwMSwgQWxlcnRUeXBlLkVSUk9SKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2xhc3NpZmljYXRpb24pIHRoaXMuZ2V0Q2xhc3NpZmljYXRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5nZXRNZW1iZXJUeXBlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3JlYXRlU2VhcmNoVXNlckZvcm1Hcm91cCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbGVydFNlcnZpY2UuaXNBbGVydENsb3NlZFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGlzQ2xvc2VkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzQ2xvc2VkICYmICF0aGlzLmlzU2VhcmNoVXNlckZvcm0pIHtcclxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcignaW5wdXQnKT8uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBzZWFyY2ggdXNlciBmb3JtIGdyb3VwXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBjcmVhdGVTZWFyY2hVc2VyRm9ybUdyb3VwKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hVc2VyRm9ybUdyb3VwID0ge1xyXG4gICAgICBmb3JtR3JvdXA6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZWdlbmQ6ICcnLFxyXG4gICAgICAgICAgY29udHJvbHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5JTlBVVCxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5lbWFpbCArICcqJyxcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2VtYWlsQWRkcmVzcycsXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgIGlzRW1haWw6IHRydWUsXHJcbiAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LmVtYWlsQWRkcmVzcyxcclxuICAgICAgICAgICAgICBwYXR0ZXJuRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5wYXR0ZXJuPy5lbWFpbCxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5lbWFpbCksXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5lbWFpbCxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWQ/LmVtYWlsLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBmb3JtIHZhbGlkaXR5IGFuZCBzZWFyY2hlcyB0aGUgdXNlciBieSBlbnRlcmVkIGVtYWlsLlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uU2VhcmNoVXNlckZvcm1TdWJtaXQoZm9ybTogRm9ybUdyb3VwW10pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNBZGRVc2VyRm9ybUVtYWlsU2VhcmNoID0gZmFsc2U7XHJcbiAgICBpZiAoZm9ybVswXT8uc3RhdHVzID09PSBGb3JtU3RhdHVzLlZBTElEKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVXNlckJ5RW1haWwoZm9ybVswXS5nZXRSYXdWYWx1ZSgpPy5lbWFpbEFkZHJlc3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VhcmNoZXMgdGhlIHVzZXIgYnkgZW50ZXJlZCBlbWFpbCBhbmQgZ2V0cyB0aGUgdXNlciBkZXRhaWxzIHdoZW4gdGhlIGVtYWlsIGlkIGlzIGZvdW5kLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2VhcmNoVXNlckJ5RW1haWwoZW1haWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldFVzZXJCeUVtYWlsKGVtYWlsKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgIGlmIChyZXM/LnN0YXR1cykge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJJbmZvID0gcmVzPy5ib2R5O1xyXG4gICAgICAgICAgICB0aGlzLmlzVXNlckV4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlckluZm8/LnVzZXJJZCkgdGhpcy52YWxpZGF0ZVVzZXJFeGlzdGVuY2UoKTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLmluaXRpYWxpemVBZGRVc2VyRm9ybUdyb3VwKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1VzZXJFeGlzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChlcnJvckNvZGVzPy5pbmNsdWRlcygnMjAwMScpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hVc2VyRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uTGFiZWwgPVxyXG4gICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uc2F2ZUJ1dHRvbkxhYmVsO1xyXG4gICAgICAgICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIXRoaXMuaXNBZGRVc2VyRm9ybUVtYWlsU2VhcmNoIHx8XHJcbiAgICAgICAgICAgICAgIShcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZi5jb250YWlucygnZmlyc3ROYW1lJykgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZi5jb250YWlucygnbGFzdE5hbWUnKVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VySW5mby5lbWFpbCA9IGVtYWlsO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWRkVXNlckZvcm1Hcm91cFZhbHVlcyhcclxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8udmFsdWUpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LmdldCgnZmlyc3ROYW1lJyk/LnNldFZhbHVlKCcnKTtcclxuICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LmdldCgnbGFzdE5hbWUnKT8uc2V0VmFsdWUoJycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShcclxuICAgICAgICAgICAgICB0aGlzLmNvbnN0YW50cz8uZXJyb3JzPy5bJzIwMDEnXSxcclxuICAgICAgICAgICAgICBBbGVydFR5cGUuRVJST1JcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB3aGV0aGVyIHRoZSB1c2VyIGlzIGV4aXN0cyBpbiB0aGUgc2VsZWN0ZWQgZ3JvdXAgYW5kIHRoZW4gY3JlYXRlcyBhZGQgdXNlciBmb3JtIHdoZW4gdGhlIHVzZXIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHNlbGVjdGVkIGdyb3VwLlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdmFsaWRhdGVVc2VyRXhpc3RlbmNlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwSWQgYXMgc3RyaW5nLFxyXG4gICAgICAgIHVzZXJJZDogdGhpcy51c2VySW5mbz8udXNlcklkIGFzIHN0cmluZyxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0R3JvdXBVc2VyRGV0YWlscyhwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgID8uc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UoXHJcbiAgICAgICAgICAgIHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LlsnMTAyMiddLFxyXG4gICAgICAgICAgICBBbGVydFR5cGUuRVJST1JcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgICAgICAgIGlmIChlcnJvckNvZGVzPy5pbmNsdWRlcygnMTAyNicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFkZFVzZXJGb3JtR3JvdXAoKTtcclxuICAgICAgICAgIH0gZWxzZSB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGZvcm0gZmllbGRzIHJlcXVpcmVkIGZvciBhZGQgbmV3IHVzZXIgdG8gdGhlIHJvc3RlciBiYXNlZCBvbiB0aGUgc2VhcmNoZWQgZW1haWwuXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBpbml0aWFsaXplQWRkVXNlckZvcm1Hcm91cCgpIHtcclxuICAgIHRoaXMuaXNTZWFyY2hVc2VyRm9ybSA9IGZhbHNlO1xyXG4gICAgdGhpcy5yaWdodEJ1dHRvbkxhYmVsID0gdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5zYXZlQnV0dG9uTGFiZWw7XHJcbiAgICBjb25zdCBhZGRVc2VyRm9ybUdyb3VwUHJldlZhbHVlcyA9IEpTT04uc3RyaW5naWZ5KFxyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LnZhbHVlXHJcbiAgICApO1xyXG4gICAgaWYgKCF0aGlzLmlzQWRkVXNlckZvcm1FbWFpbFNlYXJjaCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVzID0gW107XHJcbiAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuY3JlYXRlQWRkVXNlckZvcm1Hcm91cCgpO1xyXG4gICAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBZGRVc2VyRm9ybUdyb3VwKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQWRkVXNlckZvcm1Hcm91cFZhbHVlcyhhZGRVc2VyRm9ybUdyb3VwUHJldlZhbHVlcyk7XHJcbiAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZlxyXG4gICAgICAgID8uZ2V0KCdlbWFpbFNlYXJjaCcpXHJcbiAgICAgICAgPy5zZXRWYWx1ZSh0aGlzLnVzZXJJbmZvPy5lbWFpbCk7XHJcbiAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uZ2V0KCdmdWxsTmFtZScpPy5zZXRWYWx1ZSh0aGlzLnVzZXJJbmZvPy5uYW1lKTtcclxuICAgICAgdGhpcy5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkID0gdGhpcy5ncm91cFNlcnZpY2UuaXNTdWJtaXRCdXR0b25EaXNhYmxlZChcclxuICAgICAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSxcclxuICAgICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LnN0YXR1cyxcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGFkZCB1c2VyIGZvcm0gZ3JvdXAgYW5kIHVwZGF0ZXMgaXQgd2l0aCBwcmV2IGZvcm0gdmFsdWVzLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdpZmllZEFkZFVzZXJGb3JtUHJldlZhbHVlc1xyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdXBkYXRlQWRkVXNlckZvcm1Hcm91cFZhbHVlcyhhZGRVc2VyRm9ybVZhbHVlczogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNyZWF0ZUFkZFVzZXJGb3JtR3JvdXAodGhpcy51c2VySW5mbz8uZW1haWwpO1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTCkge1xyXG4gICAgICBjb25zdCBmb3JtVmFsdWVzID0gYWRkVXNlckZvcm1WYWx1ZXMgPyBKU09OLnBhcnNlKGFkZFVzZXJGb3JtVmFsdWVzKSA6ICcnO1xyXG4gICAgICB0aGlzLnVwZGF0ZUFkZFVzZXJGb3JtR3JvdXAoe1xyXG4gICAgICAgIGNsYXNzaWZpY2F0aW9uOiBmb3JtVmFsdWVzPy5jbGFzc2lmaWNhdGlvbixcclxuICAgICAgICBtZW1iZXJUeXBlOiBmb3JtVmFsdWVzPy5tZW1iZXJUeXBlLFxyXG4gICAgICAgIHJlcHJlc2VudGluZ09yZzogZm9ybVZhbHVlcz8ucmVwcmVzZW50aW5nT3JnLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGFkZCB1c2VyIGZvcm0gZ3JvdXAgYXJyYXkuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtlbWFpbF1cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGNyZWF0ZUFkZFVzZXJGb3JtR3JvdXAoZW1haWw/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cCA9IHtcclxuICAgICAgZm9ybUdyb3VwOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVnZW5kOiAnJyxcclxuICAgICAgICAgIGNvbnRyb2xzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuU0VBUkNILFxyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmVtYWlsICsgJyonLFxyXG4gICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnZW1haWxTZWFyY2gnLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmlzVXNlckV4aXN0ID8gdGhpcy51c2VySW5mbz8uZW1haWwgOiBlbWFpbCxcclxuICAgICAgICAgICAgICBzZWFyY2hUeXBlOiBTZWFyY2hUeXBlLk9OX0NMSUNLLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IFtcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLmVtYWlsKSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0Py5lbWFpbEFkZHJlc3MsXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnBhdHRlcm4/LmVtYWlsLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmVtYWlsLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8uZW1haWwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLih0aGlzLmlzVXNlckV4aXN0XHJcbiAgICAgICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuVEVYVF9BUkVBLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmZ1bGxOYW1lICsgJyonLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnZnVsbE5hbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnVzZXJJbmZvPy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNSZWFkb25seTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBhcmlhTXVsdGlsaW5lOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uZnVsbE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8uZnVsbE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgOiBbXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuSU5QVVQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uZmlyc3ROYW1lICsgJyonLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnZmlyc3ROYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuZmlyc3RPckxhc3ROYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnBhdHRlcm5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPy5maXJzdE9yTGFzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmZpcnN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPy5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LmZpcnN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5JTlBVVCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5sYXN0TmFtZSArICcqJyxcclxuICAgICAgICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2xhc3ROYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuZmlyc3RPckxhc3ROYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnBhdHRlcm5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPy5maXJzdE9yTGFzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/Lmxhc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/Lmxhc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0Py5sYXN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLkNIRUNLQk9YLFxyXG4gICAgICAgICAgICAgIGxhYmVsOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5yb2xlXHJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5yb2xlICsgJyonLFxyXG4gICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAncm9sZXMnLFxyXG4gICAgICAgICAgICAgIGNoZWNrYm94T3B0aW9uczogdGhpcy51c2VyUm9sZXMsXHJcbiAgICAgICAgICAgICAgbWluU2VsZWN0aW9uUmVxdWlyZWQ6IDEsXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8ucm9sZSxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWQ/LnJvbGUsXHJcbiAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUxcclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHRcclxuICAgICAgICAgICAgICAgICAgICAgID8ucm9sZUZvckluZGl2aWR1YWxSb3N0ZXJcclxuICAgICAgICAgICAgICAgICAgOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LnJvbGUsXHJcbiAgICAgICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUxcclxuICAgICAgICAgICAgICAgICAgPyBbXVxyXG4gICAgICAgICAgICAgICAgICA6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGNsYXNzaWZpY2F0aW9uLCBNZW1iZXIgVHlwZSBhbmQgUmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbiBmb3JtIGNvbnRyb2xzIHdoaWxlIGFkZGluZyBuZXcgdXNlciB0byBhbiBpbmRpdmlkdWFsIGdyb3VwIHJvc3Rlci5cclxuICAgKiBAcGFyYW0ge3tcclxuICAgKiAgICAgY2xhc3NpZmljYXRpb246IFNlbGVjdE9wdGlvbjtcclxuICAgKiAgICAgbWVtYmVyVHlwZTogU2VsZWN0T3B0aW9uO1xyXG4gICAqICAgICByZXByZXNlbnRpbmdPcmc6IFNlbGVjdE9wdGlvbjtcclxuICAgKiAgIH19IFthZGRVc2VyRm9ybUdyb3VwUHJldlZhbHVlc11cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHVwZGF0ZUFkZFVzZXJGb3JtR3JvdXAoYWRkVXNlckZvcm1Hcm91cFByZXZWYWx1ZXM/OiB7XHJcbiAgICBjbGFzc2lmaWNhdGlvbjogU2VsZWN0T3B0aW9uO1xyXG4gICAgbWVtYmVyVHlwZTogU2VsZWN0T3B0aW9uO1xyXG4gICAgcmVwcmVzZW50aW5nT3JnOiBTZWxlY3RPcHRpb247XHJcbiAgfSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaGFzQ2xhc3NpZmljYXRpb24pXHJcbiAgICAgIHRoaXMudXBkYXRlQWRkVXNlckZvcm1Db250cm9scyhcclxuICAgICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXAuZm9ybUdyb3VwWzBdLmNvbnRyb2xzLmxlbmd0aCAtIDEsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlNFTEVDVCxcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmNsYXNzaWZpY2F0aW9uICsgJyonLFxyXG4gICAgICAgICAgY29udHJvbE5hbWU6ICdjbGFzc2lmaWNhdGlvbicsXHJcbiAgICAgICAgICBkcm9wZG93bk9wdGlvbnM6IHRoaXMuY2xhc3NpZmljYXRpb25zLFxyXG4gICAgICAgICAgdmFsdWU6IHRoaXMuY2xhc3NpZmljYXRpb25zPy5maW5kKFxyXG4gICAgICAgICAgICAoY2xhc3NpZmljYXRpb24pID0+XHJcbiAgICAgICAgICAgICAgY2xhc3NpZmljYXRpb24uaWQgPT09XHJcbiAgICAgICAgICAgICAgYWRkVXNlckZvcm1Hcm91cFByZXZWYWx1ZXM/LmNsYXNzaWZpY2F0aW9uPy5pZFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIHZhbGlkYXRpb246IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcclxuICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5jbGFzc2lmaWNhdGlvbixcclxuICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5jbGFzc2lmaWNhdGlvbixcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB0aGlzLnVwZGF0ZUFkZFVzZXJGb3JtQ29udHJvbHMoXHJcbiAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cC5mb3JtR3JvdXBbMF0uY29udHJvbHMubGVuZ3RoIC0gMSxcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ubWVtYmVyVHlwZSArICcqJyxcclxuICAgICAgICBjb250cm9sTmFtZTogJ21lbWJlclR5cGUnLFxyXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uczogdGhpcy5tZW1iZXJUeXBlcyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5tZW1iZXJUeXBlcz8uZmluZChcclxuICAgICAgICAgIChtZW1iZXJUeXBlKSA9PlxyXG4gICAgICAgICAgICBtZW1iZXJUeXBlLmlkID09PSBhZGRVc2VyRm9ybUdyb3VwUHJldlZhbHVlcz8ubWVtYmVyVHlwZT8uaWRcclxuICAgICAgICApLFxyXG4gICAgICAgIHZhbGlkYXRpb246IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBwbGFjZWhvbGRlcjogJycsXHJcbiAgICAgICAgc3VwcG9ydE1lc3NhZ2U6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8ubWVtYmVyVHlwZSxcclxuICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICBhcmlhTGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5tZW1iZXJUeXBlLFxyXG4gICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8ubWVtYmVyVHlwZSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudXBkYXRlQWRkVXNlckZvcm1Db250cm9scyhcclxuICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwLmZvcm1Hcm91cFswXS5jb250cm9scy5sZW5ndGgsXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuTVVMVElfU0VMRUNUX0FVVE9fQ09NUExFVEUsXHJcbiAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uICsgJyonLFxyXG4gICAgICAgIGNvbnRyb2xOYW1lOiAncmVwcmVzZW50aW5nT3JnJyxcclxuICAgICAgICB2YWx1ZTogYWRkVXNlckZvcm1Hcm91cFByZXZWYWx1ZXM/LnJlcHJlc2VudGluZ09yZyxcclxuICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoXHJcbiAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5yZXByZXNlbnRpbmdPcmdOYW1lTWF4TGVuZ3RoXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoXHJcbiAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5yZXByZXNlbnRpbmdPcmdOYW1lTWluTGVuZ3RoXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb24pLFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgbXVsdGlTZWxlY3RBdXRvQ29tcGxldGVPcHRpb25zOiB0aGlzLm9yZ2FuaXphdGlvbnMsXHJcbiAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbixcclxuICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICBtYXhFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LmxpbWl0XHJcbiAgICAgICAgICAgID8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uTWF4Q2hhcnMsXHJcbiAgICAgICAgbWluRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5saW1pdFxyXG4gICAgICAgICAgICA/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbk1pbkNoYXJzLFxyXG4gICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnBhdHRlcm5cclxuICAgICAgICAgICAgPy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb24sXHJcbiAgICAgICAgYXJpYUxhYmVsOlxyXG4gICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbixcclxuICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgPy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb24sXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGFkZCB1c2VyIGZvcm0gZ3JvdXAgY29udHJvbHMgYnkgYWRkaW5nIGZpZWxkQ29uZmlnIGF0IHJlcXVpcmVkIGluZGV4LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFBvc2l0aW9uXHJcbiAgICogQHBhcmFtIHtGaWVsZENvbmZpZ30gZmllbGRDb25maWdcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHVwZGF0ZUFkZFVzZXJGb3JtQ29udHJvbHMoXHJcbiAgICBpbmRleFBvc2l0aW9uOiBudW1iZXIsXHJcbiAgICBmaWVsZENvbmZpZzogRmllbGRDb25maWdcclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cC5mb3JtR3JvdXBbMF0uY29udHJvbHMuc3BsaWNlKFxyXG4gICAgICBpbmRleFBvc2l0aW9uLFxyXG4gICAgICAwLFxyXG4gICAgICBmaWVsZENvbmZpZ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgYWRkIHVzZXIgZm9ybSBlbWFpbCBzZWFyY2hcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGZvcm1TZWFyY2hBcHBseShlbWFpbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzQWRkVXNlckZvcm1FbWFpbFNlYXJjaCA9IHRydWU7XHJcbiAgICBpZiAoZW1haWwudHJpbSgpKSB0aGlzLnNlYXJjaFVzZXJCeUVtYWlsKGVtYWlsLnRyaW0oKSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy51c2VySW5mby5uYW1lID0gJyc7XHJcbiAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uZ2V0KCdmdWxsTmFtZScpPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBc3NpZ25zIHJvbGUgdG8gdXNlciBvbiBmb3JtIHN1Ym1pc3Npb24uXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25BZGRVc2VyRm9ybVN1Ym1pdChmb3JtOiBGb3JtR3JvdXBbXSk6IHZvaWQge1xyXG4gICAgZm9ybVswXT8ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgaWYgKGZvcm1bMF0uc3RhdHVzID09PSBGb3JtU3RhdHVzLlZBTElEKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgICAgLmFkZE5ld0dyb3VwVXNlcih0aGlzLmdldEFkZE5ld1VzZXJQYXlsb2FkKGZvcm1bMF0/LmdldFJhd1ZhbHVlKCkpKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXRGb3JtUmVzcG9uc2UuZW1pdChyZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFkZCB1c2VyIGZvcm0gZ3JvdXAgcmVmZXJlbmNlLlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEFkZFVzZXJGb3JtR3JvdXBSZWYoZm9ybTogRm9ybUdyb3VwW10pIHtcclxuICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZiA9IGZvcm1bMF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHVzZXIgcm9sZSBzZWxlY3Rpb24gaW4gYWRkIHVzZXIgZm9ybS5cclxuICAgKiBAcGFyYW0ge0NoZWNrYm94T3B0aW9ufSBldmVudFxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Vc2VyUm9sZVNlbGVjdGlvbihldmVudDogQ2hlY2tib3hPcHRpb24pOiB2b2lkIHtcclxuICAgIGlmIChldmVudD8uY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVzPy5wdXNoKGV2ZW50LmlkIGFzIHN0cmluZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVzID0gdGhpcy5zZWxlY3RlZFVzZXJSb2xlcy5maWx0ZXIoXHJcbiAgICAgICAgKHZhbHVlKSA9PiB2YWx1ZSAhPT0gZXZlbnQuaWRcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLlNZU1RFTV9VU0VSKSB7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQoXHJcbiAgICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUsXHJcbiAgICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy5zdGF0dXMsXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJSb2xlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBFbWl0cyBmb3JtIGNhbmNlbCBldmVudC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRm9ybUNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNhbmNlbC5lbWl0KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGNsYXNzaWZpY2F0aW9ucyBmcm9tIG1hc3RlciBkYXRhLlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0Q2xhc3NpZmljYXRpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldENsYXNzaWZpY2F0aW9ucygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xhc3NpZmljYXRpb25zPy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogb3B0aW9uLmNsYXNzaWZpY2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLmNsYXNzaWZpY2F0aW9uRGVzYyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xPcHRpb25zKFxyXG4gICAgICAgICAgICAnY2xhc3NpZmljYXRpb24nLFxyXG4gICAgICAgICAgICAnZHJvcGRvd25PcHRpb25zJyxcclxuICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWNhdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBtZW1iZXIgdHlwZXMgZnJvbSBtYXN0ZXIgZGF0YS5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE1lbWJlclR5cGVzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWVtYmVyVHlwZXMgPSB0aGlzLmdyb3VwU2VydmljZS5nZXRNZW1iZXJUeXBlcygpO1xyXG4gICAgbWVtYmVyVHlwZXM/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICB0aGlzLm1lbWJlclR5cGVzPy5wdXNoKHtcclxuICAgICAgICBpZDogb3B0aW9uLnJvbGVJZCxcclxuICAgICAgICBuYW1lOiBvcHRpb24ucm9sZU5hbWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sT3B0aW9ucyhcclxuICAgICAgJ21lbWJlclR5cGUnLFxyXG4gICAgICAnZHJvcGRvd25PcHRpb25zJyxcclxuICAgICAgdGhpcy5tZW1iZXJUeXBlc1xyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbnMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yZ05hbWVcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE9yZ2FuaXphdGlvbnMob3JnTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbnMgPSBbXTtcclxuICAgIG9yZ05hbWUgPSBvcmdOYW1lPy50cmltU3RhcnQoKTtcclxuICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xPcHRpb25zKFxyXG4gICAgICAncmVwcmVzZW50aW5nT3JnJyxcclxuICAgICAgJ211bHRpU2VsZWN0QXV0b0NvbXBsZXRlT3B0aW9ucycsXHJcbiAgICAgIFtdXHJcbiAgICApO1xyXG4gICAgaWYgKCFvcmdOYW1lKSByZXR1cm47XHJcbiAgICBjb25zdCBvcmdSZXF1ZXN0UGF5bG9hZDogT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHsgb3JnTmFtZTogb3JnTmFtZSB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRPcmdhbml6YXRpb25zKG9yZ1JlcXVlc3RQYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25zID0gW107XHJcbiAgICAgICAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbi5vcmdJZCxcclxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24ub3JnTmFtZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xPcHRpb25zKFxyXG4gICAgICAgICAgICAncmVwcmVzZW50aW5nT3JnJyxcclxuICAgICAgICAgICAgJ211bHRpU2VsZWN0QXV0b0NvbXBsZXRlT3B0aW9ucycsXHJcbiAgICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgZHJvcGRvd24gb3B0aW9ucyBvZiBDbGFzc2lmaWNhdGlvbiwgTWVtYmVyIFR5cGUgYW5kIFJlcHJlc2VudGluZyBPcmdhbml6YXRpb24gZm9ybSBmaWVsZHMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1Db250cm9sTmFtZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtQ29udHJvbElucHV0UHJvcGVydHlcclxuICAgKiBAcGFyYW0ge1NlbGVjdE9wdGlvbltdfSBvcHRpb25zXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICB1cGRhdGVGb3JtQ29udHJvbE9wdGlvbnMoXHJcbiAgICBmb3JtQ29udHJvbE5hbWU6IHN0cmluZyxcclxuICAgIGZvcm1Db250cm9sSW5wdXRQcm9wZXJ0eTogc3RyaW5nLFxyXG4gICAgb3B0aW9uczogU2VsZWN0T3B0aW9uW11cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmR5bmFtaWNGb3JtQ29tcG9uZW50Py5mb3JtRmllbGRzPy50b0FycmF5KCk7XHJcbiAgICBmb3JtRmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGZvcm1GaWVsZD8uY29tcG9uZW50Py5pbnN0YW5jZT8uY29uZmlnPy5jb250cm9sTmFtZSA9PT1cclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZSAmJlxyXG4gICAgICAgIGZvcm1GaWVsZD8uY29tcG9uZW50Py5pbnN0YW5jZT8uW2Zvcm1Db250cm9sSW5wdXRQcm9wZXJ0eV1cclxuICAgICAgKVxyXG4gICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnQuaW5zdGFuY2VbZm9ybUNvbnRyb2xJbnB1dFByb3BlcnR5XSA9IG9wdGlvbnM7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGN1c3RvbSBlcnJvcnMgd2hpbGUgc2VhcmNoaW5nIHVzZXIgYnkgZW1haWwsIHZhbGlkYXRpbmcgdXNlciBleGlzdGVuY2UgYW5kIGFkZGluZyBuZXcgdXNlciB0byByb3N0ZXIuXHJcbiAgICogQHBhcmFtIHsqfSBlcnJvclxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBoYW5kbGVFcnJvcnMoZXJyb3I6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yQ29kZXMpICYmICFlcnJvcj8uZXJyb3I/LnN0YXR1cykge1xyXG4gICAgICBpZiAoZXJyb3JDb2Rlc1swXSAhPT0gJzMwMDQnKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5ncm91cFNlcnZpY2UucGFyc2VFcnJvck1lc3NhZ2UoZXJyb3JDb2Rlcyk7XHJcbiAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgQWxlcnRUeXBlLkVSUk9SLFxyXG4gICAgICAgICAgZXJyb3JDb2Rlc1swXSA9PT0gJzIwMjQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgIHRoaXMuZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgYWRkIHVzZXIgZm9ybSBjaGFuZ2UgZXZlbnQuXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25BZGRVc2VyRm9ybUNoYW5nZShmb3JtOiBGb3JtR3JvdXBbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmID0gZm9ybVswXTtcclxuICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQoXHJcbiAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlLFxyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LnN0YXR1cyxcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJSb2xlc1xyXG4gICAgKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnM/Lmxlbmd0aCAmJlxyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWYuY29udHJvbHNbJ3JlcHJlc2VudGluZ09yZyddLnN0YXR1cyA9PT1cclxuICAgICAgICBGb3JtU3RhdHVzLklOVkFMSURcclxuICAgICkge1xyXG4gICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnM/Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIGFkZCBuZXcgdXNlciBwYXlsb2FkIGZyb20gdGhlIGZvcm0gZGF0YSBkZXBlbmRzIG9uIHRoZSBHcm91cFJvc3RlclR5cGUgYW5kIHJldHVybnMuXHJcbiAgICogQHBhcmFtIHsqfSBmb3JtRGF0YVxyXG4gICAqIEByZXR1cm4geyhBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCl9XHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRBZGROZXdVc2VyUGF5bG9hZChcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmb3JtRGF0YTogYW55XHJcbiAgKTogQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQge1xyXG4gICAgbGV0IHBheWxvYWQ6IEFkZE9yRWRpdFVzZXJQYXlsb2FkIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkO1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTCkge1xyXG4gICAgICBjb25zdCBmb3JtYXR0ZWRPcHRpb25zID0gdGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnMubWFwKChvcHRpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgb3JnSWQ6IG9wdGlvbi5pZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBvcmdOYW1lOiBvcHRpb24ubmFtZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICBlbWFpbDogdGhpcy5pc1VzZXJFeGlzdFxyXG4gICAgICAgICAgICA/IHRoaXMudXNlckluZm8/LmVtYWlsXHJcbiAgICAgICAgICAgIDogZm9ybURhdGE/LmVtYWlsU2VhcmNoLFxyXG4gICAgICAgICAgcm9sZXM6IHRoaXMuc2VsZWN0ZWRVc2VyUm9sZXMsXHJcbiAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5zZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBvcmdhbml6YXRpb25zOiBmb3JtYXR0ZWRPcHRpb25zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmICh0aGlzLmhhc0NsYXNzaWZpY2F0aW9uKVxyXG4gICAgICAgIHBheWxvYWQucGF5bG9hZC5jbGFzc2lmaWNhdGlvbiA9IHtcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uSWQ6IGZvcm1EYXRhPy5jbGFzc2lmaWNhdGlvblxyXG4gICAgICAgICAgICA/IGZvcm1EYXRhPy5jbGFzc2lmaWNhdGlvbj8uaWRcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICB9O1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZm9ybURhdGE/Lm1lbWJlclR5cGUgJiZcclxuICAgICAgICAhcGF5bG9hZC5wYXlsb2FkLnJvbGVzPy5pbmNsdWRlcyhmb3JtRGF0YT8ubWVtYmVyVHlwZT8uaWQpXHJcbiAgICAgIClcclxuICAgICAgICBwYXlsb2FkLnBheWxvYWQucm9sZXM/LnB1c2goZm9ybURhdGE/Lm1lbWJlclR5cGU/LmlkKTtcclxuICAgIH0gZWxzZVxyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgIGVtYWlsOiB0aGlzLmlzVXNlckV4aXN0XHJcbiAgICAgICAgICAgID8gdGhpcy51c2VySW5mbz8uZW1haWxcclxuICAgICAgICAgICAgOiBmb3JtRGF0YT8uZW1haWxTZWFyY2gsXHJcbiAgICAgICAgICByb2xlczogdGhpcy5zZWxlY3RlZFVzZXJSb2xlcyxcclxuICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLnNlbGVjdGVkR3JvdXBJbmZvPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgaWYgKHRoaXMuaXNVc2VyRXhpc3QpIHtcclxuICAgICAgcGF5bG9hZC5wYXlsb2FkLnVzZXJJZCA9IHRoaXMudXNlckluZm8/LnVzZXJJZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBheWxvYWQucGF5bG9hZC5maXJzdE5hbWUgPSBmb3JtRGF0YT8uZmlyc3ROYW1lPy50cmltKCk7XHJcbiAgICAgIHBheWxvYWQucGF5bG9hZC5sYXN0TmFtZSA9IGZvcm1EYXRhPy5sYXN0TmFtZT8udHJpbSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBheWxvYWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNhYmxlcyBmb3JtIHN1Ym1pdCBidXR0b24gd2hlbiBvcmcgbmFtZSBsZW5ndGggaXMgbGVzcyB0aGFuIG1pbkNoYXJUb1NlYXJjaCBhbmQgZ3JlYXRlciB0aGFuIHplcm8uXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBkaXNhYmxlU3VibWl0QnV0dG9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sT3B0aW9ucyhcclxuICAgICAgICAncmVwcmVzZW50aW5nT3JnJyxcclxuICAgICAgICAnbXVsdGlTZWxlY3RBdXRvQ29tcGxldGVPcHRpb25zJyxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhbGVydHMgZm9yIGVycm9yLCB3YXJuaW5nLlxyXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IHN0cmluZ1tdKX0gbWVzc2FnZSAtZXJyb3Igb3Igd2FybmluZyBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHtBbGVydFR5cGV9IGFsZXJ0VHlwZVxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2hvd0FsZXJ0TWVzc2FnZShcclxuICAgIG1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdLFxyXG4gICAgYWxlcnRUeXBlOiBBbGVydFR5cGUsXHJcbiAgICBpc0h0bWxDb250ZW50PzogYm9vbGVhblxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2U/LnNob3dNZXNzYWdlKHtcclxuICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcclxuICAgICAgYWxlcnRUeXBlOiBhbGVydFR5cGUsXHJcbiAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgIGlzSHRtbENvbnRlbnQ6IGlzSHRtbENvbnRlbnQgPz8gZmFsc2UsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgc2VsZWN0ZWQgb3JnYW5pemF0aW9ucy5cclxuICAgKiBAcGFyYW0ge0F1dG9Db21wbGV0ZU9wdGlvbltdfSBzZWxlY3RlZE9yZ1xyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRPcmdhbml6YXRpb25zKHNlbGVjdGVkT3JnOiBBdXRvQ29tcGxldGVPcHRpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnMgPSBzZWxlY3RlZE9yZztcclxuICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQoXHJcbiAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlLFxyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LnN0YXR1cyxcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJSb2xlc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVzdHJveSQpIHtcclxuICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxpZWVlc2EtZHluYW1pYy1mb3JtXHJcbiAgKm5nSWY9XCJzZWFyY2hVc2VyRm9ybUdyb3VwICYmIGlzU2VhcmNoVXNlckZvcm1cIlxyXG4gIGNsYXNzPVwiaWVlZXNhLXNlYXJjaC11c2VyLWZvcm1cIlxyXG4gIFtsZWZ0QnV0dG9uTGFiZWxdPVwibGVmdEJ1dHRvbkxhYmVsXCJcclxuICBbcmlnaHRCdXR0b25MYWJlbF09XCJyaWdodEJ1dHRvbkxhYmVsXCJcclxuICBbaXNMZWdlbmRWaXNpYmxlXT1cImZhbHNlXCJcclxuICBbY29sV2lkdGhdPVwiY29sV2lkdGhcIlxyXG4gIFthY3Rpb25CdXR0b25BbGlnbl09XCJhY3Rpb25CdXR0b25BbGlnblwiXHJcbiAgW2Zvcm1Hcm91cHNdPVwic2VhcmNoVXNlckZvcm1Hcm91cFwiXHJcbiAgW2lzTGVmdEJ1dHRvbk5lZWRlZF09XCJ0cnVlXCJcclxuICAoZm9ybVN1Ym1pdCk9XCJvblNlYXJjaFVzZXJGb3JtU3VibWl0KCRldmVudClcIlxyXG4gIChmb3JtTGVmdEJ1dHRvbkNsaWNrZWQpPVwib25Gb3JtQ2FuY2VsKClcIlxyXG4+PC9pZWVlc2EtZHluYW1pYy1mb3JtPlxyXG5cclxuPGllZWVzYS1keW5hbWljLWZvcm1cclxuICAqbmdJZj1cImFkZFVzZXJGb3JtR3JvdXAgJiYgIWlzU2VhcmNoVXNlckZvcm1cIlxyXG4gIGNsYXNzPVwiaWVlZXNhLWFkZC11c2VyLWZvcm1cIlxyXG4gIFtsZWZ0QnV0dG9uTGFiZWxdPVwibGVmdEJ1dHRvbkxhYmVsXCJcclxuICBbcmlnaHRCdXR0b25MYWJlbF09XCJyaWdodEJ1dHRvbkxhYmVsXCJcclxuICBbaXNMZWdlbmRWaXNpYmxlXT1cImZhbHNlXCJcclxuICBbaXNTdWJtaXRCdXR0b25EaXNhYmxlZF09XCJpc1N1Ym1pdEJ1dHRvbkRpc2FibGVkXCJcclxuICBbY29sV2lkdGhdPVwiY29sV2lkdGhcIlxyXG4gIFthY3Rpb25CdXR0b25BbGlnbl09XCJhY3Rpb25CdXR0b25BbGlnblwiXHJcbiAgW2Zvcm1Hcm91cHNdPVwiYWRkVXNlckZvcm1Hcm91cFwiXHJcbiAgW2lzTGVmdEJ1dHRvbk5lZWRlZF09XCJ0cnVlXCJcclxuICAoZm9ybVN1Ym1pdCk9XCJvbkFkZFVzZXJGb3JtU3VibWl0KCRldmVudClcIlxyXG4gIChmb3JtU2VhcmNoQXBwbHkpPVwiZm9ybVNlYXJjaEFwcGx5KCRldmVudClcIlxyXG4gIChmb3JtTGVmdEJ1dHRvbkNsaWNrZWQpPVwib25Gb3JtQ2FuY2VsKClcIlxyXG4gIChmb3JtR3JvdXBzUmVmZXJlbmNlKT1cImdldEFkZFVzZXJGb3JtR3JvdXBSZWYoJGV2ZW50KVwiXHJcbiAgKGZvcm1DaGVja2JveFNlbGVjdGlvbik9XCJvblVzZXJSb2xlU2VsZWN0aW9uKCRldmVudClcIlxyXG4gIChmb3JtQ2hhbmdlKT1cIm9uQWRkVXNlckZvcm1DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgKGZvcm1NdWx0aVNlbGVjdEF1dG9Db21wbGV0ZVNlYXJjaCk9XCJnZXRPcmdhbml6YXRpb25zKCRldmVudClcIlxyXG4gIChtdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnNTZWxlY3RlZCk9XCJnZXRTZWxlY3RlZE9yZ2FuaXphdGlvbnMoJGV2ZW50KVwiXHJcbiAgKGZvcm1NdWx0aVNlbGVjdEF1dG9Db21wbGV0ZUNsZWFyU2VhcmNoVmFsdWUpPVwiZGlzYWJsZVN1Ym1pdEJ1dHRvbigpXCJcclxuPjwvaWVlZXNhLWR5bmFtaWMtZm9ybT5cclxuIl19
739
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXVzZXItcm9zdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvYWRkLXVzZXItcm9zdGVyL2FkZC11c2VyLXJvc3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2FkZC11c2VyLXJvc3Rlci9hZGQtdXNlci1yb3N0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBR1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUNMLFNBQVMsRUFDVCxhQUFhLEdBRWQsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBRUwsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBTVYsb0JBQW9CLEdBQ3JCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxLQUFLLFdBQVcsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7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QUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQzsrR0E5MEJVLHNCQUFzQjttR0FBdEIsc0JBQXNCLHNKQUZ0QixDQUFDLGFBQWEsQ0FBQyxnRkErQmYsb0JBQW9CLGdEQzFGakMsMGdEQW1DQSw4cWFEb0JZLFlBQVksbUlBQUUsb0JBQW9CLDJnQ0FBRSxlQUFlOzs0RkFNbEQsc0JBQXNCO2tCQVRsQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxDQUFDLGlCQUcvQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCLENBQUMsYUFBYSxDQUFDO2lNQStCTyxvQkFBb0I7c0JBQXBELFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNyQixrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgQWxlcnRUeXBlLFxyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHtcclxuICBGb3JtR3JpZCxcclxuICBGb3JtQ29udHJvbFR5cGUsXHJcbiAgQWxpZ25UeXBlLFxyXG4gIFNlYXJjaFR5cGUsXHJcbiAgQ2hlY2tib3hPcHRpb24sXHJcbiAgU2VsZWN0T3B0aW9uLFxyXG4gIEZvcm1Nb2RlbCxcclxuICBGaWVsZENvbmZpZyxcclxuICBBdXRvQ29tcGxldGVPcHRpb24sXHJcbiAgRHluYW1pY0Zvcm1Db21wb25lbnQsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vcHJlc2VudGF0aW9uJztcclxuaW1wb3J0ICogYXMgc2NyZWVuVGV4dHMgZnJvbSAnLi4vLi4vYXNzZXRzL2NvbnN0YW50cy5qc29uJztcclxuaW1wb3J0IHsgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zIH0gZnJvbSAnLi4vLi4vYXNzZXRzL2Zvcm0tdmFsaWRhdGlvbnMnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdHVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Zvcm0tc3RhdHVzLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQsXHJcbiAgQWRkT3JFZGl0VXNlclBheWxvYWQsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL2FkZC1vci1lZGl0LXVzZXItZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFJvc3RlclR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvcm9zdGVyLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBPcmdhbml6YXRpb25SZXF1ZXN0UGF5bG9hZCB9IGZyb20gJy4uLy4uL21vZGVscy9vcmdhbml6YXRpb24ubW9kZWwnO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudCBpbXBsZW1lbnRzIHRoZSB2aWV3IGFuZCBmdW5jdGlvbmFsaXRpZXMgdG8gYWRkIGdyb3VwIHVzZXJzIHRvIHJvc3Rlci5cclxuICogQGV4cG9ydFxyXG4gKiBAY2xhc3MgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gKiBAaW1wbGVtZW50cyB7T25Jbml0fVxyXG4gKiBAaW1wbGVtZW50cyB7T25EZXN0cm95fVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZWVlc2EtYWRkLXVzZXItcm9zdGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIER5bmFtaWNGb3JtQ29tcG9uZW50LCBNYXREaWFsb2dNb2R1bGVdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtdXNlci1yb3N0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FkZC11c2VyLXJvc3Rlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgcHJvdmlkZXJzOiBbQWxlcnRzU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRVc2VyUm9zdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gc2NyZWVuVGV4dHM7XHJcbiAgYWRkVXNlclJvc3RlclRleHRzID0gdGhpcy5jb25zdGFudHM/LmFkZFVzZXJSb3N0ZXI7XHJcbiAgbGVmdEJ1dHRvbkxhYmVsID0gdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5sZWZ0QnV0dG9uTGFiZWw7XHJcbiAgcmlnaHRCdXR0b25MYWJlbCA9IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ucmlnaHRCdXR0b25MYWJlbDtcclxuICBpc1N1Ym1pdEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XHJcbiAgY29sV2lkdGg6IEZvcm1HcmlkID0geyB4czogMTIsIHhsOiAxMiwgc206IDEyLCBtZDogMTIsIGxnOiAxMiB9O1xyXG4gIHNlYXJjaFVzZXJGb3JtR3JvdXAhOiBGb3JtTW9kZWw7XHJcbiAgYWRkVXNlckZvcm1Hcm91cCE6IEZvcm1Nb2RlbDtcclxuICBhY3Rpb25CdXR0b25BbGlnbiA9IEFsaWduVHlwZS5MRUZUO1xyXG4gIGFkZFVzZXJGb3JtR3JvdXBSZWYhOiBGb3JtR3JvdXA7XHJcbiAgaXNTZWFyY2hVc2VyRm9ybSA9IHRydWU7XHJcbiAgdXNlclJvbGVzOiBDaGVja2JveE9wdGlvbltdID0gW107XHJcbiAgc2VsZWN0ZWRVc2VyUm9sZXM6IHN0cmluZ1tdID0gW107XHJcbiAgdXNlckluZm86IFVzZXJJbmZvID0ge1xyXG4gICAgZW1haWw6ICcnLFxyXG4gICAgbmFtZTogJycsXHJcbiAgICB1c2VySWQ6ICcnLFxyXG4gIH07XHJcbiAgaXNBZGRVc2VyRm9ybUVtYWlsU2VhcmNoID0gZmFsc2U7XHJcbiAgY2xhc3NpZmljYXRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gIG1lbWJlclR5cGVzOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gIG9yZ2FuaXphdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgaGFzQ2xhc3NpZmljYXRpb24gPSBmYWxzZTtcclxuICBncm91cFJvc3RlclR5cGUhOiBHcm91cFJvc3RlclR5cGU7XHJcbiAgaXNVc2VyRXhpc3QgPSBmYWxzZTtcclxuICBzZWxlY3RlZE9yZ2FuaXphdGlvbnM6IEF1dG9Db21wbGV0ZU9wdGlvbltdID0gW107XHJcbiAgQFZpZXdDaGlsZChEeW5hbWljRm9ybUNvbXBvbmVudCkgZHluYW1pY0Zvcm1Db21wb25lbnQhOiBEeW5hbWljRm9ybUNvbXBvbmVudDtcclxuICBAT3V0cHV0KCkgc3VibWl0Rm9ybVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmb3JtQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3Vwc1NlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZTogR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGFsZXJ0U2VydmljZTogQWxlcnRzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uLCBuby11bnVzZWQtdmFyc1xyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgdXNlciByb2xlcyBhbmQgc2VhcmNoVXNlckZvcm1Hcm91cC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VyUm9sZXMgPSB0aGlzLmdyb3VwU2VydmljZS5nZXRHcm91cFR5cGVVc2VyUm9sZXMoKTtcclxuICAgIGNvbnN0IGdyb3VwVHlwZSA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpO1xyXG4gICAgdGhpcy5oYXNDbGFzc2lmaWNhdGlvbiA9IGdyb3VwVHlwZT8uaGFzQ2xhc3NpZmljYXRpb24gPz8gZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9IGdyb3VwVHlwZT8ucm9zdGVyVHlwZSBhcyBHcm91cFJvc3RlclR5cGU7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBSb3N0ZXJUeXBlKVxyXG4gICAgICB0aGlzLnNob3dBbGVydE1lc3NhZ2UodGhpcy5jb25zdGFudHM/LmVycm9ycz8uRVIxMDAxLCBBbGVydFR5cGUuRVJST1IpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNDbGFzc2lmaWNhdGlvbikgdGhpcy5nZXRDbGFzc2lmaWNhdGlvbnMoKTtcclxuICAgICAgICB0aGlzLmdldE1lbWJlclR5cGVzKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jcmVhdGVTZWFyY2hVc2VyRm9ybUdyb3VwKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5pc0FsZXJ0Q2xvc2VkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoaXNDbG9zZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoaXNDbG9zZWQgJiYgIXRoaXMuaXNTZWFyY2hVc2VyRm9ybSkge1xyXG4gICAgICAgICAgdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIHNlYXJjaCB1c2VyIGZvcm0gZ3JvdXBcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGNyZWF0ZVNlYXJjaFVzZXJGb3JtR3JvdXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaFVzZXJGb3JtR3JvdXAgPSB7XHJcbiAgICAgIGZvcm1Hcm91cDogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxlZ2VuZDogJycsXHJcbiAgICAgICAgICBjb250cm9sczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLklOUFVULFxyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmVtYWlsICsgJyonLFxyXG4gICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnZW1haWxBZGRyZXNzJyxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgaXNFbWFpbDogdHJ1ZSxcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8uZW1haWxBZGRyZXNzLFxyXG4gICAgICAgICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnBhdHRlcm4/LmVtYWlsLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRpb246IFtcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLmVtYWlsKSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmVtYWlsLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8uZW1haWwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGZvcm0gdmFsaWRpdHkgYW5kIHNlYXJjaGVzIHRoZSB1c2VyIGJ5IGVudGVyZWQgZW1haWwuXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25TZWFyY2hVc2VyRm9ybVN1Ym1pdChmb3JtOiBGb3JtR3JvdXBbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0FkZFVzZXJGb3JtRW1haWxTZWFyY2ggPSBmYWxzZTtcclxuICAgIGlmIChmb3JtWzBdPy5zdGF0dXMgPT09IEZvcm1TdGF0dXMuVkFMSUQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hVc2VyQnlFbWFpbChmb3JtWzBdLmdldFJhd1ZhbHVlKCk/LmVtYWlsQWRkcmVzcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWFyY2hlcyB0aGUgdXNlciBieSBlbnRlcmVkIGVtYWlsIGFuZCBnZXRzIHRoZSB1c2VyIGRldGFpbHMgd2hlbiB0aGUgZW1haWwgaWQgaXMgZm91bmQuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBzZWFyY2hVc2VyQnlFbWFpbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwU2VydmljZVxyXG4gICAgICAuZ2V0VXNlckJ5RW1haWwoZW1haWwpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlckluZm8gPSByZXM/LmJvZHk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVc2VyRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy51c2VySW5mbz8udXNlcklkKSB0aGlzLnZhbGlkYXRlVXNlckV4aXN0ZW5jZSgpO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMuaW5pdGlhbGl6ZUFkZFVzZXJGb3JtR3JvdXAoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzVXNlckV4aXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgICAgICAgaWYgKGVycm9yQ29kZXM/LmluY2x1ZGVzKCcyMDAxJykpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1NlYXJjaFVzZXJGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25MYWJlbCA9XHJcbiAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5zYXZlQnV0dG9uTGFiZWw7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAhdGhpcy5pc0FkZFVzZXJGb3JtRW1haWxTZWFyY2ggfHxcclxuICAgICAgICAgICAgICAhKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmLmNvbnRhaW5zKCdmaXJzdE5hbWUnKSAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmLmNvbnRhaW5zKCdsYXN0TmFtZScpXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJJbmZvLmVtYWlsID0gZW1haWw7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVBZGRVc2VyRm9ybUdyb3VwVmFsdWVzKFxyXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy52YWx1ZSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uZ2V0KCdmaXJzdE5hbWUnKT8uc2V0VmFsdWUoJycpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uZ2V0KCdsYXN0TmFtZScpPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgICAgIHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LlsnMjAwMSddLFxyXG4gICAgICAgICAgICAgIEFsZXJ0VHlwZS5FUlJPUlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHdoZXRoZXIgdGhlIHVzZXIgaXMgZXhpc3RzIGluIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgdGhlbiBjcmVhdGVzIGFkZCB1c2VyIGZvcm0gd2hlbiB0aGUgdXNlciBkb2VzIG5vdCBleGlzdCBpbiB0aGUgc2VsZWN0ZWQgZ3JvdXAuXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICB2YWxpZGF0ZVVzZXJFeGlzdGVuY2UoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cFNlcnZpY2UuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKT8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJJbmZvPy51c2VySWQgYXMgc3RyaW5nLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRHcm91cFVzZXJEZXRhaWxzKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgPy5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2hvd0FsZXJ0TWVzc2FnZShcclxuICAgICAgICAgICAgdGhpcy5jb25zdGFudHM/LmVycm9ycz8uWycxMDIyJ10sXHJcbiAgICAgICAgICAgIEFsZXJ0VHlwZS5FUlJPUlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvckNvZGVzID0gZXJyb3I/LmVycm9yPy5ib2R5Py5lcnJvckNvZGVzO1xyXG4gICAgICAgICAgaWYgKGVycm9yQ29kZXM/LmluY2x1ZGVzKCcxMDI2JykpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQWRkVXNlckZvcm1Hcm91cCgpO1xyXG4gICAgICAgICAgfSBlbHNlIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgZm9ybSBmaWVsZHMgcmVxdWlyZWQgZm9yIGFkZCBuZXcgdXNlciB0byB0aGUgcm9zdGVyIGJhc2VkIG9uIHRoZSBzZWFyY2hlZCBlbWFpbC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGluaXRpYWxpemVBZGRVc2VyRm9ybUdyb3VwKCkge1xyXG4gICAgdGhpcy5pc1NlYXJjaFVzZXJGb3JtID0gZmFsc2U7XHJcbiAgICB0aGlzLnJpZ2h0QnV0dG9uTGFiZWwgPSB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnNhdmVCdXR0b25MYWJlbDtcclxuICAgIGNvbnN0IGFkZFVzZXJGb3JtR3JvdXBQcmV2VmFsdWVzID0gSlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8udmFsdWVcclxuICAgICk7XHJcbiAgICBpZiAoIXRoaXMuaXNBZGRVc2VyRm9ybUVtYWlsU2VhcmNoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyUm9sZXMgPSBbXTtcclxuICAgICAgdGhpcy5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jcmVhdGVBZGRVc2VyRm9ybUdyb3VwKCk7XHJcbiAgICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFkZFVzZXJGb3JtR3JvdXAoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51cGRhdGVBZGRVc2VyRm9ybUdyb3VwVmFsdWVzKGFkZFVzZXJGb3JtR3JvdXBQcmV2VmFsdWVzKTtcclxuICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmXHJcbiAgICAgICAgPy5nZXQoJ2VtYWlsU2VhcmNoJylcclxuICAgICAgICA/LnNldFZhbHVlKHRoaXMudXNlckluZm8/LmVtYWlsKTtcclxuICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy5nZXQoJ2Z1bGxOYW1lJyk/LnNldFZhbHVlKHRoaXMudXNlckluZm8/Lm5hbWUpO1xyXG4gICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0aGlzLmdyb3VwU2VydmljZS5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkKFxyXG4gICAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlLFxyXG4gICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZj8uc3RhdHVzLFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyUm9sZXNcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYWRkIHVzZXIgZm9ybSBncm91cCBhbmQgdXBkYXRlcyBpdCB3aXRoIHByZXYgZm9ybSB2YWx1ZXMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ2lmaWVkQWRkVXNlckZvcm1QcmV2VmFsdWVzXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICB1cGRhdGVBZGRVc2VyRm9ybUdyb3VwVmFsdWVzKGFkZFVzZXJGb3JtVmFsdWVzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY3JlYXRlQWRkVXNlckZvcm1Hcm91cCh0aGlzLnVzZXJJbmZvPy5lbWFpbCk7XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSBhZGRVc2VyRm9ybVZhbHVlcyA/IEpTT04ucGFyc2UoYWRkVXNlckZvcm1WYWx1ZXMpIDogJyc7XHJcbiAgICAgIHRoaXMudXBkYXRlQWRkVXNlckZvcm1Hcm91cCh7XHJcbiAgICAgICAgY2xhc3NpZmljYXRpb246IGZvcm1WYWx1ZXM/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgIG1lbWJlclR5cGU6IGZvcm1WYWx1ZXM/Lm1lbWJlclR5cGUsXHJcbiAgICAgICAgcmVwcmVzZW50aW5nT3JnOiBmb3JtVmFsdWVzPy5yZXByZXNlbnRpbmdPcmcsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgYWRkIHVzZXIgZm9ybSBncm91cCBhcnJheS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2VtYWlsXVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgY3JlYXRlQWRkVXNlckZvcm1Hcm91cChlbWFpbD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwID0ge1xyXG4gICAgICBmb3JtR3JvdXA6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZWdlbmQ6ICcnLFxyXG4gICAgICAgICAgY29udHJvbHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5TRUFSQ0gsXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uZW1haWwgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdlbWFpbFNlYXJjaCcsXHJcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaXNVc2VyRXhpc3QgPyB0aGlzLnVzZXJJbmZvPy5lbWFpbCA6IGVtYWlsLFxyXG4gICAgICAgICAgICAgIHNlYXJjaFR5cGU6IFNlYXJjaFR5cGUuT05fQ0xJQ0ssXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMuZW1haWwpLFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LmVtYWlsQWRkcmVzcyxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgcGF0dGVybkVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucGF0dGVybj8uZW1haWwsXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uZW1haWwsXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5lbWFpbCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4uKHRoaXMuaXNVc2VyRXhpc3RcclxuICAgICAgICAgICAgICA/IFtcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5URVhUX0FSRUEsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uZnVsbE5hbWUgKyAnKicsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdmdWxsTmFtZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudXNlckluZm8/Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICAgICAgICBpc1JlYWRvbmx5OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFNdWx0aWxpbmU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbDpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5mdWxsTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPy5mdWxsTmFtZSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICA6IFtcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5JTlBVVCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5maXJzdE5hbWUgKyAnKicsXHJcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdmaXJzdE5hbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFtcclxuICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5maXJzdE9yTGFzdE5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybkVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucGF0dGVyblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/LmZpcnN0T3JMYXN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/LmZpcnN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8uZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLklOUFVULFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/Lmxhc3ROYW1lICsgJyonLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnbGFzdE5hbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFtcclxuICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5maXJzdE9yTGFzdE5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGF0dGVybkVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucGF0dGVyblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/LmZpcnN0T3JMYXN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8ubGFzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8ubGFzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/Lmxhc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuQ0hFQ0tCT1gsXHJcbiAgICAgICAgICAgICAgbGFiZWw6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUxcclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnJvbGVcclxuICAgICAgICAgICAgICAgICAgOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnJvbGUgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdyb2xlcycsXHJcbiAgICAgICAgICAgICAgY2hlY2tib3hPcHRpb25zOiB0aGlzLnVzZXJSb2xlcyxcclxuICAgICAgICAgICAgICBtaW5TZWxlY3Rpb25SZXF1aXJlZDogMSxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5yb2xlLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8ucm9sZSxcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTFxyXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgPy5yb2xlRm9ySW5kaXZpZHVhbFJvc3RlclxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8ucm9sZSxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTFxyXG4gICAgICAgICAgICAgICAgICA/IFtdXHJcbiAgICAgICAgICAgICAgICAgIDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgY2xhc3NpZmljYXRpb24sIE1lbWJlciBUeXBlIGFuZCBSZXByZXNlbnRpbmcgT3JnYW5pemF0aW9uIGZvcm0gY29udHJvbHMgd2hpbGUgYWRkaW5nIG5ldyB1c2VyIHRvIGFuIGluZGl2aWR1YWwgZ3JvdXAgcm9zdGVyLlxyXG4gICAqIEBwYXJhbSB7e1xyXG4gICAqICAgICBjbGFzc2lmaWNhdGlvbjogU2VsZWN0T3B0aW9uO1xyXG4gICAqICAgICBtZW1iZXJUeXBlOiBTZWxlY3RPcHRpb247XHJcbiAgICogICAgIHJlcHJlc2VudGluZ09yZzogU2VsZWN0T3B0aW9uO1xyXG4gICAqICAgfX0gW2FkZFVzZXJGb3JtR3JvdXBQcmV2VmFsdWVzXVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdXBkYXRlQWRkVXNlckZvcm1Hcm91cChhZGRVc2VyRm9ybUdyb3VwUHJldlZhbHVlcz86IHtcclxuICAgIGNsYXNzaWZpY2F0aW9uOiBTZWxlY3RPcHRpb247XHJcbiAgICBtZW1iZXJUeXBlOiBTZWxlY3RPcHRpb247XHJcbiAgICByZXByZXNlbnRpbmdPcmc6IFNlbGVjdE9wdGlvbjtcclxuICB9KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oYXNDbGFzc2lmaWNhdGlvbilcclxuICAgICAgdGhpcy51cGRhdGVBZGRVc2VyRm9ybUNvbnRyb2xzKFxyXG4gICAgICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cC5mb3JtR3JvdXBbMF0uY29udHJvbHMubGVuZ3RoIC0gMSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuU0VMRUNULFxyXG4gICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uY2xhc3NpZmljYXRpb24gKyAnKicsXHJcbiAgICAgICAgICBjb250cm9sTmFtZTogJ2NsYXNzaWZpY2F0aW9uJyxcclxuICAgICAgICAgIGRyb3Bkb3duT3B0aW9uczogdGhpcy5jbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy5jbGFzc2lmaWNhdGlvbnM/LmZpbmQoXHJcbiAgICAgICAgICAgIChjbGFzc2lmaWNhdGlvbikgPT5cclxuICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbi5pZCA9PT1cclxuICAgICAgICAgICAgICBhZGRVc2VyRm9ybUdyb3VwUHJldlZhbHVlcz8uY2xhc3NpZmljYXRpb24/LmlkXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxyXG4gICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8uY2xhc3NpZmljYXRpb24sXHJcbiAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWQ/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIHRoaXMudXBkYXRlQWRkVXNlckZvcm1Db250cm9scyhcclxuICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwLmZvcm1Hcm91cFswXS5jb250cm9scy5sZW5ndGggLSAxLFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlNFTEVDVCxcclxuICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5tZW1iZXJUeXBlICsgJyonLFxyXG4gICAgICAgIGNvbnRyb2xOYW1lOiAnbWVtYmVyVHlwZScsXHJcbiAgICAgICAgZHJvcGRvd25PcHRpb25zOiB0aGlzLm1lbWJlclR5cGVzLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLm1lbWJlclR5cGVzPy5maW5kKFxyXG4gICAgICAgICAgKG1lbWJlclR5cGUpID0+XHJcbiAgICAgICAgICAgIG1lbWJlclR5cGUuaWQgPT09IGFkZFVzZXJGb3JtR3JvdXBQcmV2VmFsdWVzPy5tZW1iZXJUeXBlPy5pZFxyXG4gICAgICAgICksXHJcbiAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcclxuICAgICAgICBzdXBwb3J0TWVzc2FnZTogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0Py5tZW1iZXJUeXBlLFxyXG4gICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/Lm1lbWJlclR5cGUsXHJcbiAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5tZW1iZXJUeXBlLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVBZGRVc2VyRm9ybUNvbnRyb2xzKFxyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXAuZm9ybUdyb3VwWzBdLmNvbnRyb2xzLmxlbmd0aCxcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5NVUxUSV9TRUxFQ1RfQVVUT19DT01QTEVURSxcclxuICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb24gKyAnKicsXHJcbiAgICAgICAgY29udHJvbE5hbWU6ICdyZXByZXNlbnRpbmdPcmcnLFxyXG4gICAgICAgIHZhbHVlOiBhZGRVc2VyRm9ybUdyb3VwUHJldlZhbHVlcz8ucmVwcmVzZW50aW5nT3JnLFxyXG4gICAgICAgIHZhbGlkYXRpb246IFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aChcclxuICAgICAgICAgICAgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLnJlcHJlc2VudGluZ09yZ05hbWVNYXhMZW5ndGhcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aChcclxuICAgICAgICAgICAgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLnJlcHJlc2VudGluZ09yZ05hbWVNaW5MZW5ndGhcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbiksXHJcbiAgICAgICAgXSxcclxuICAgICAgICBtdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnM6IHRoaXMub3JnYW5pemF0aW9ucyxcclxuICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uLFxyXG4gICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgIG1heEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ubGltaXRcclxuICAgICAgICAgICAgPy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25NYXhDaGFycyxcclxuICAgICAgICBtaW5FcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LmxpbWl0XHJcbiAgICAgICAgICAgID8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uTWluQ2hhcnMsXHJcbiAgICAgICAgcGF0dGVybkVycm9yTWVzc2FnZTpcclxuICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucGF0dGVyblxyXG4gICAgICAgICAgICA/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbixcclxuICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uLFxyXG4gICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICA/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbixcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgYWRkIHVzZXIgZm9ybSBncm91cCBjb250cm9scyBieSBhZGRpbmcgZmllbGRDb25maWcgYXQgcmVxdWlyZWQgaW5kZXguXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4UG9zaXRpb25cclxuICAgKiBAcGFyYW0ge0ZpZWxkQ29uZmlnfSBmaWVsZENvbmZpZ1xyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgdXBkYXRlQWRkVXNlckZvcm1Db250cm9scyhcclxuICAgIGluZGV4UG9zaXRpb246IG51bWJlcixcclxuICAgIGZpZWxkQ29uZmlnOiBGaWVsZENvbmZpZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwLmZvcm1Hcm91cFswXS5jb250cm9scy5zcGxpY2UoXHJcbiAgICAgIGluZGV4UG9zaXRpb24sXHJcbiAgICAgIDAsXHJcbiAgICAgIGZpZWxkQ29uZmlnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhZGQgdXNlciBmb3JtIGVtYWlsIHNlYXJjaFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbFxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZm9ybVNlYXJjaEFwcGx5KGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNBZGRVc2VyRm9ybUVtYWlsU2VhcmNoID0gdHJ1ZTtcclxuICAgIGlmIChlbWFpbC50cmltKCkpIHRoaXMuc2VhcmNoVXNlckJ5RW1haWwoZW1haWwudHJpbSgpKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXJJbmZvLm5hbWUgPSAnJztcclxuICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy5nZXQoJ2Z1bGxOYW1lJyk/LnNldFZhbHVlKCcnKTtcclxuICAgICAgdGhpcy5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFzc2lnbnMgcm9sZSB0byB1c2VyIG9uIGZvcm0gc3VibWlzc2lvbi5cclxuICAgKiBAcGFyYW0ge0Zvcm1Hcm91cFtdfSBmb3JtXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBvbkFkZFVzZXJGb3JtU3VibWl0KGZvcm06IEZvcm1Hcm91cFtdKTogdm9pZCB7XHJcbiAgICBmb3JtWzBdPy5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBjb25zdCBpc0FsbE90aGVyQ29udHJvbHNWYWxpZCA9IE9iamVjdC5rZXlzKGZvcm1bMF0uY29udHJvbHMpXHJcbiAgICAgIC5maWx0ZXIoKGNvbnRyb2xOYW1lKSA9PiBjb250cm9sTmFtZSAhPT0gJ3JlcHJlc2VudGluZ09yZycpXHJcbiAgICAgIC5ldmVyeShcclxuICAgICAgICAoY29udHJvbE5hbWUpID0+IGZvcm1bMF0uZ2V0KGNvbnRyb2xOYW1lKT8uc3RhdHVzID09PSBGb3JtU3RhdHVzPy5WQUxJRFxyXG4gICAgICApO1xyXG4gICAgaWYgKFxyXG4gICAgICAoZm9ybVswXS5nZXQoJ3JlcHJlc2VudGluZ09yZycpPy5zdGF0dXMgPT09IEZvcm1TdGF0dXM/LklOVkFMSUQgJiZcclxuICAgICAgICBpc0FsbE90aGVyQ29udHJvbHNWYWxpZCAmJlxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb25zLmxlbmd0aCA+IDApIHx8XHJcbiAgICAgIGZvcm1bMF0uc3RhdHVzID09PSBGb3JtU3RhdHVzPy5WQUxJRFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgICAgLmFkZE5ld0dyb3VwVXNlcih0aGlzLmdldEFkZE5ld1VzZXJQYXlsb2FkKGZvcm1bMF0/LmdldFJhd1ZhbHVlKCkpKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXRGb3JtUmVzcG9uc2UuZW1pdChyZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFkZCB1c2VyIGZvcm0gZ3JvdXAgcmVmZXJlbmNlLlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEFkZFVzZXJGb3JtR3JvdXBSZWYoZm9ybTogRm9ybUdyb3VwW10pIHtcclxuICAgIHRoaXMuYWRkVXNlckZvcm1Hcm91cFJlZiA9IGZvcm1bMF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHVzZXIgcm9sZSBzZWxlY3Rpb24gaW4gYWRkIHVzZXIgZm9ybS5cclxuICAgKiBAcGFyYW0ge0NoZWNrYm94T3B0aW9ufSBldmVudFxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Vc2VyUm9sZVNlbGVjdGlvbihldmVudDogQ2hlY2tib3hPcHRpb24pOiB2b2lkIHtcclxuICAgIGlmIChldmVudD8uY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVzPy5wdXNoKGV2ZW50LmlkIGFzIHN0cmluZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVzID0gdGhpcy5zZWxlY3RlZFVzZXJSb2xlcy5maWx0ZXIoXHJcbiAgICAgICAgKHZhbHVlKSA9PiB2YWx1ZSAhPT0gZXZlbnQuaWRcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLlNZU1RFTV9VU0VSKSB7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQoXHJcbiAgICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUsXHJcbiAgICAgICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmPy5zdGF0dXMsXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJSb2xlc1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBFbWl0cyBmb3JtIGNhbmNlbCBldmVudC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRm9ybUNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNhbmNlbC5lbWl0KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIGNsYXNzaWZpY2F0aW9ucyBmcm9tIG1hc3RlciBkYXRhLlxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0Q2xhc3NpZmljYXRpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncm91cFNlcnZpY2VcclxuICAgICAgLmdldENsYXNzaWZpY2F0aW9ucygpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xhc3NpZmljYXRpb25zPy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogb3B0aW9uLmNsYXNzaWZpY2F0aW9uSWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLmNsYXNzaWZpY2F0aW9uRGVzYyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xPcHRpb25zKFxyXG4gICAgICAgICAgICAnY2xhc3NpZmljYXRpb24nLFxyXG4gICAgICAgICAgICAnZHJvcGRvd25PcHRpb25zJyxcclxuICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWNhdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBtZW1iZXIgdHlwZXMgZnJvbSBtYXN0ZXIgZGF0YS5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE1lbWJlclR5cGVzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWVtYmVyVHlwZXMgPSB0aGlzLmdyb3VwU2VydmljZS5nZXRNZW1iZXJUeXBlcygpO1xyXG4gICAgbWVtYmVyVHlwZXM/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICB0aGlzLm1lbWJlclR5cGVzPy5wdXNoKHtcclxuICAgICAgICBpZDogb3B0aW9uLnJvbGVJZCxcclxuICAgICAgICBuYW1lOiBvcHRpb24ucm9sZU5hbWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sT3B0aW9ucyhcclxuICAgICAgJ21lbWJlclR5cGUnLFxyXG4gICAgICAnZHJvcGRvd25PcHRpb25zJyxcclxuICAgICAgdGhpcy5tZW1iZXJUeXBlc1xyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbnMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yZ05hbWVcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE9yZ2FuaXphdGlvbnMob3JnTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbnMgPSBbXTtcclxuICAgIG9yZ05hbWUgPSBvcmdOYW1lPy50cmltU3RhcnQoKTtcclxuICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xPcHRpb25zKFxyXG4gICAgICAncmVwcmVzZW50aW5nT3JnJyxcclxuICAgICAgJ211bHRpU2VsZWN0QXV0b0NvbXBsZXRlT3B0aW9ucycsXHJcbiAgICAgIFtdXHJcbiAgICApO1xyXG4gICAgaWYgKCFvcmdOYW1lKSByZXR1cm47XHJcbiAgICBjb25zdCBvcmdSZXF1ZXN0UGF5bG9hZDogT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHsgb3JnTmFtZTogb3JnTmFtZSB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JvdXBTZXJ2aWNlXHJcbiAgICAgIC5nZXRPcmdhbml6YXRpb25zKG9yZ1JlcXVlc3RQYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25zID0gW107XHJcbiAgICAgICAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgICAgICAgaWQ6IG9wdGlvbi5vcmdJZCxcclxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24ub3JnTmFtZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xPcHRpb25zKFxyXG4gICAgICAgICAgICAncmVwcmVzZW50aW5nT3JnJyxcclxuICAgICAgICAgICAgJ211bHRpU2VsZWN0QXV0b0NvbXBsZXRlT3B0aW9ucycsXHJcbiAgICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0aGUgZHJvcGRvd24gb3B0aW9ucyBvZiBDbGFzc2lmaWNhdGlvbiwgTWVtYmVyIFR5cGUgYW5kIFJlcHJlc2VudGluZyBPcmdhbml6YXRpb24gZm9ybSBmaWVsZHMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1Db250cm9sTmFtZVxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtQ29udHJvbElucHV0UHJvcGVydHlcclxuICAgKiBAcGFyYW0ge1NlbGVjdE9wdGlvbltdfSBvcHRpb25zXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICB1cGRhdGVGb3JtQ29udHJvbE9wdGlvbnMoXHJcbiAgICBmb3JtQ29udHJvbE5hbWU6IHN0cmluZyxcclxuICAgIGZvcm1Db250cm9sSW5wdXRQcm9wZXJ0eTogc3RyaW5nLFxyXG4gICAgb3B0aW9uczogU2VsZWN0T3B0aW9uW11cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmR5bmFtaWNGb3JtQ29tcG9uZW50Py5mb3JtRmllbGRzPy50b0FycmF5KCk7XHJcbiAgICBmb3JtRmllbGRzPy5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGZvcm1GaWVsZD8uY29tcG9uZW50Py5pbnN0YW5jZT8uY29uZmlnPy5jb250cm9sTmFtZSA9PT1cclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZSAmJlxyXG4gICAgICAgIGZvcm1GaWVsZD8uY29tcG9uZW50Py5pbnN0YW5jZT8uW2Zvcm1Db250cm9sSW5wdXRQcm9wZXJ0eV1cclxuICAgICAgKVxyXG4gICAgICAgIGZvcm1GaWVsZC5jb21wb25lbnQuaW5zdGFuY2VbZm9ybUNvbnRyb2xJbnB1dFByb3BlcnR5XSA9IG9wdGlvbnM7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGN1c3RvbSBlcnJvcnMgd2hpbGUgc2VhcmNoaW5nIHVzZXIgYnkgZW1haWwsIHZhbGlkYXRpbmcgdXNlciBleGlzdGVuY2UgYW5kIGFkZGluZyBuZXcgdXNlciB0byByb3N0ZXIuXHJcbiAgICogQHBhcmFtIHsqfSBlcnJvclxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBoYW5kbGVFcnJvcnMoZXJyb3I6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yQ29kZXMpICYmICFlcnJvcj8uZXJyb3I/LnN0YXR1cykge1xyXG4gICAgICBpZiAoZXJyb3JDb2Rlc1swXSAhPT0gJzMwMDQnKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5ncm91cFNlcnZpY2UucGFyc2VFcnJvck1lc3NhZ2UoZXJyb3JDb2Rlcyk7XHJcbiAgICAgICAgdGhpcy5zaG93QWxlcnRNZXNzYWdlKFxyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgQWxlcnRUeXBlLkVSUk9SLFxyXG4gICAgICAgICAgZXJyb3JDb2Rlc1swXSA9PT0gJzIwMjQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChlcnJvciAmJiBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XHJcbiAgICAgIHRoaXMuZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZS5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgYWRkIHVzZXIgZm9ybSBjaGFuZ2UgZXZlbnQuXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybVxyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25BZGRVc2VyRm9ybUNoYW5nZShmb3JtOiBGb3JtR3JvdXBbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRVc2VyRm9ybUdyb3VwUmVmID0gZm9ybVswXTtcclxuICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQoXHJcbiAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlLFxyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LnN0YXR1cyxcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJSb2xlc1xyXG4gICAgKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnM/Lmxlbmd0aCAmJlxyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWYuY29udHJvbHNbJ3JlcHJlc2VudGluZ09yZyddLnN0YXR1cyA9PT1cclxuICAgICAgICBGb3JtU3RhdHVzLklOVkFMSURcclxuICAgICkge1xyXG4gICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnM/Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIGFkZCBuZXcgdXNlciBwYXlsb2FkIGZyb20gdGhlIGZvcm0gZGF0YSBkZXBlbmRzIG9uIHRoZSBHcm91cFJvc3RlclR5cGUgYW5kIHJldHVybnMuXHJcbiAgICogQHBhcmFtIHsqfSBmb3JtRGF0YVxyXG4gICAqIEByZXR1cm4geyhBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCl9XHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRBZGROZXdVc2VyUGF5bG9hZChcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmb3JtRGF0YTogYW55XHJcbiAgKTogQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQge1xyXG4gICAgbGV0IHBheWxvYWQ6IEFkZE9yRWRpdFVzZXJQYXlsb2FkIHwgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkO1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTCkge1xyXG4gICAgICBjb25zdCBmb3JtYXR0ZWRPcHRpb25zID0gdGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnMubWFwKChvcHRpb24pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgb3JnSWQ6IG9wdGlvbi5pZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBvcmdOYW1lOiBvcHRpb24ubmFtZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICBlbWFpbDogdGhpcy5pc1VzZXJFeGlzdFxyXG4gICAgICAgICAgICA/IHRoaXMudXNlckluZm8/LmVtYWlsXHJcbiAgICAgICAgICAgIDogZm9ybURhdGE/LmVtYWlsU2VhcmNoLFxyXG4gICAgICAgICAgcm9sZXM6IHRoaXMuc2VsZWN0ZWRVc2VyUm9sZXMsXHJcbiAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwU2VydmljZS5zZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBvcmdhbml6YXRpb25zOiBmb3JtYXR0ZWRPcHRpb25zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmICh0aGlzLmhhc0NsYXNzaWZpY2F0aW9uKVxyXG4gICAgICAgIHBheWxvYWQucGF5bG9hZC5jbGFzc2lmaWNhdGlvbiA9IHtcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uSWQ6IGZvcm1EYXRhPy5jbGFzc2lmaWNhdGlvblxyXG4gICAgICAgICAgICA/IGZvcm1EYXRhPy5jbGFzc2lmaWNhdGlvbj8uaWRcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICB9O1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZm9ybURhdGE/Lm1lbWJlclR5cGUgJiZcclxuICAgICAgICAhcGF5bG9hZC5wYXlsb2FkLnJvbGVzPy5pbmNsdWRlcyhmb3JtRGF0YT8ubWVtYmVyVHlwZT8uaWQpXHJcbiAgICAgIClcclxuICAgICAgICBwYXlsb2FkLnBheWxvYWQucm9sZXM/LnB1c2goZm9ybURhdGE/Lm1lbWJlclR5cGU/LmlkKTtcclxuICAgIH0gZWxzZVxyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIHBheWxvYWQ6IHtcclxuICAgICAgICAgIGVtYWlsOiB0aGlzLmlzVXNlckV4aXN0XHJcbiAgICAgICAgICAgID8gdGhpcy51c2VySW5mbz8uZW1haWxcclxuICAgICAgICAgICAgOiBmb3JtRGF0YT8uZW1haWxTZWFyY2gsXHJcbiAgICAgICAgICByb2xlczogdGhpcy5zZWxlY3RlZFVzZXJSb2xlcyxcclxuICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBTZXJ2aWNlLnNlbGVjdGVkR3JvdXBJbmZvPy5ncm91cElkIGFzIHN0cmluZyxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgaWYgKHRoaXMuaXNVc2VyRXhpc3QpIHtcclxuICAgICAgcGF5bG9hZC5wYXlsb2FkLnVzZXJJZCA9IHRoaXMudXNlckluZm8/LnVzZXJJZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBheWxvYWQucGF5bG9hZC5maXJzdE5hbWUgPSBmb3JtRGF0YT8uZmlyc3ROYW1lPy50cmltKCk7XHJcbiAgICAgIHBheWxvYWQucGF5bG9hZC5sYXN0TmFtZSA9IGZvcm1EYXRhPy5sYXN0TmFtZT8udHJpbSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBheWxvYWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNhYmxlcyBmb3JtIHN1Ym1pdCBidXR0b24gd2hlbiBvcmcgbmFtZSBsZW5ndGggaXMgbGVzcyB0aGFuIG1pbkNoYXJUb1NlYXJjaCBhbmQgZ3JlYXRlciB0aGFuIHplcm8uXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICBkaXNhYmxlU3VibWl0QnV0dG9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sT3B0aW9ucyhcclxuICAgICAgICAncmVwcmVzZW50aW5nT3JnJyxcclxuICAgICAgICAnbXVsdGlTZWxlY3RBdXRvQ29tcGxldGVPcHRpb25zJyxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyBhbGVydHMgZm9yIGVycm9yLCB3YXJuaW5nLlxyXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IHN0cmluZ1tdKX0gbWVzc2FnZSAtZXJyb3Igb3Igd2FybmluZyBtZXNzYWdlXHJcbiAgICogQHBhcmFtIHtBbGVydFR5cGV9IGFsZXJ0VHlwZVxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgc2hvd0FsZXJ0TWVzc2FnZShcclxuICAgIG1lc3NhZ2U6IHN0cmluZyB8IHN0cmluZ1tdLFxyXG4gICAgYWxlcnRUeXBlOiBBbGVydFR5cGUsXHJcbiAgICBpc0h0bWxDb250ZW50PzogYm9vbGVhblxyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2U/LnNob3dNZXNzYWdlKHtcclxuICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgbWVzc2FnZTogbWVzc2FnZSxcclxuICAgICAgYWxlcnRUeXBlOiBhbGVydFR5cGUsXHJcbiAgICAgIGlzQ2xvc2VOZWVkZWQ6IHRydWUsXHJcbiAgICAgIGlzSHRtbENvbnRlbnQ6IGlzSHRtbENvbnRlbnQgPz8gZmFsc2UsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgc2VsZWN0ZWQgb3JnYW5pemF0aW9ucy5cclxuICAgKiBAcGFyYW0ge0F1dG9Db21wbGV0ZU9wdGlvbltdfSBzZWxlY3RlZE9yZ1xyXG4gICAqIEBtZW1iZXJvZiBBZGRVc2VyUm9zdGVyQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRPcmdhbml6YXRpb25zKHNlbGVjdGVkT3JnOiBBdXRvQ29tcGxldGVPcHRpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZE9yZ2FuaXphdGlvbnMgPSBzZWxlY3RlZE9yZztcclxuICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRoaXMuZ3JvdXBTZXJ2aWNlLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQoXHJcbiAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlLFxyXG4gICAgICB0aGlzLmFkZFVzZXJGb3JtR3JvdXBSZWY/LnN0YXR1cyxcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJSb2xlc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5nT25EZXN0cm95IHBlcmZvcm1zIG5lY2Vzc2FyeSBjbGVhbnVwIHRhc2tzLCBzdWNoIGFzIHVuc3Vic2NyaWJpbmcgZnJvbSBzdWJzY3JpcHRpb24gd2hlbiB0aGUgY29tcG9uZW50IGlzIGJlaW5nIGRlc3Ryb3llZC5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGVzdHJveSQpIHtcclxuICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxpZWVlc2EtZHluYW1pYy1mb3JtXHJcbiAgKm5nSWY9XCJzZWFyY2hVc2VyRm9ybUdyb3VwICYmIGlzU2VhcmNoVXNlckZvcm1cIlxyXG4gIGNsYXNzPVwiaWVlZXNhLXNlYXJjaC11c2VyLWZvcm1cIlxyXG4gIFtsZWZ0QnV0dG9uTGFiZWxdPVwibGVmdEJ1dHRvbkxhYmVsXCJcclxuICBbcmlnaHRCdXR0b25MYWJlbF09XCJyaWdodEJ1dHRvbkxhYmVsXCJcclxuICBbaXNMZWdlbmRWaXNpYmxlXT1cImZhbHNlXCJcclxuICBbY29sV2lkdGhdPVwiY29sV2lkdGhcIlxyXG4gIFthY3Rpb25CdXR0b25BbGlnbl09XCJhY3Rpb25CdXR0b25BbGlnblwiXHJcbiAgW2Zvcm1Hcm91cHNdPVwic2VhcmNoVXNlckZvcm1Hcm91cFwiXHJcbiAgW2lzTGVmdEJ1dHRvbk5lZWRlZF09XCJ0cnVlXCJcclxuICAoZm9ybVN1Ym1pdCk9XCJvblNlYXJjaFVzZXJGb3JtU3VibWl0KCRldmVudClcIlxyXG4gIChmb3JtTGVmdEJ1dHRvbkNsaWNrZWQpPVwib25Gb3JtQ2FuY2VsKClcIlxyXG4+PC9pZWVlc2EtZHluYW1pYy1mb3JtPlxyXG5cclxuPGllZWVzYS1keW5hbWljLWZvcm1cclxuICAqbmdJZj1cImFkZFVzZXJGb3JtR3JvdXAgJiYgIWlzU2VhcmNoVXNlckZvcm1cIlxyXG4gIGNsYXNzPVwiaWVlZXNhLWFkZC11c2VyLWZvcm1cIlxyXG4gIFtsZWZ0QnV0dG9uTGFiZWxdPVwibGVmdEJ1dHRvbkxhYmVsXCJcclxuICBbcmlnaHRCdXR0b25MYWJlbF09XCJyaWdodEJ1dHRvbkxhYmVsXCJcclxuICBbaXNMZWdlbmRWaXNpYmxlXT1cImZhbHNlXCJcclxuICBbaXNTdWJtaXRCdXR0b25EaXNhYmxlZF09XCJpc1N1Ym1pdEJ1dHRvbkRpc2FibGVkXCJcclxuICBbY29sV2lkdGhdPVwiY29sV2lkdGhcIlxyXG4gIFthY3Rpb25CdXR0b25BbGlnbl09XCJhY3Rpb25CdXR0b25BbGlnblwiXHJcbiAgW2Zvcm1Hcm91cHNdPVwiYWRkVXNlckZvcm1Hcm91cFwiXHJcbiAgW2lzTGVmdEJ1dHRvbk5lZWRlZF09XCJ0cnVlXCJcclxuICAoZm9ybVN1Ym1pdCk9XCJvbkFkZFVzZXJGb3JtU3VibWl0KCRldmVudClcIlxyXG4gIChmb3JtU2VhcmNoQXBwbHkpPVwiZm9ybVNlYXJjaEFwcGx5KCRldmVudClcIlxyXG4gIChmb3JtTGVmdEJ1dHRvbkNsaWNrZWQpPVwib25Gb3JtQ2FuY2VsKClcIlxyXG4gIChmb3JtR3JvdXBzUmVmZXJlbmNlKT1cImdldEFkZFVzZXJGb3JtR3JvdXBSZWYoJGV2ZW50KVwiXHJcbiAgKGZvcm1DaGVja2JveFNlbGVjdGlvbik9XCJvblVzZXJSb2xlU2VsZWN0aW9uKCRldmVudClcIlxyXG4gIChmb3JtQ2hhbmdlKT1cIm9uQWRkVXNlckZvcm1DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgKGZvcm1NdWx0aVNlbGVjdEF1dG9Db21wbGV0ZVNlYXJjaCk9XCJnZXRPcmdhbml6YXRpb25zKCRldmVudClcIlxyXG4gIChtdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnNTZWxlY3RlZCk9XCJnZXRTZWxlY3RlZE9yZ2FuaXphdGlvbnMoJGV2ZW50KVwiXHJcbiAgKGZvcm1NdWx0aVNlbGVjdEF1dG9Db21wbGV0ZUNsZWFyU2VhcmNoVmFsdWUpPVwiZGlzYWJsZVN1Ym1pdEJ1dHRvbigpXCJcclxuPjwvaWVlZXNhLWR5bmFtaWMtZm9ybT5cclxuIl19