mmhglobal-dynamicform 1.3.12 → 1.3.13

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.
Files changed (68) hide show
  1. package/README.md +8 -4
  2. package/esm2020/lib/directives/elementcontainer.directive.mjs +4 -4
  3. package/esm2020/lib/directives/fieldelement.directive.mjs +4 -4
  4. package/esm2020/lib/directives/scrollbar.theme.directive.mjs +4 -4
  5. package/esm2020/lib/mmhglobal-dynamicform.module.mjs +5 -5
  6. package/esm2020/lib/services/main.service.mjs +4 -4
  7. package/esm2020/lib/services/zcomponent.debug.service.mjs +4 -4
  8. package/esm2020/lib/services/zcomponent.service.mjs +4 -4
  9. package/esm2020/lib/uiactionbutton/uiactionbutton.component.mjs +4 -4
  10. package/esm2020/lib/uiappmenucontent/uiappmenucontent.component.mjs +4 -4
  11. package/esm2020/lib/uicontainer/uicontainer.component.mjs +4 -4
  12. package/esm2020/lib/uicontent/uicontent.component.mjs +4 -4
  13. package/esm2020/lib/uiheader/uiheader.component.mjs +4 -4
  14. package/esm2020/lib/uimenubutton/uimenubutton.component.mjs +4 -4
  15. package/esm2020/lib/uimenucontent/uimenucontent.component.mjs +4 -4
  16. package/esm2020/lib/uipage/uipage.component.mjs +4 -4
  17. package/esm2020/lib/uivalidationmessage/uivalidationmessage.component.mjs +4 -4
  18. package/esm2020/lib/zbullet/zbullet.component.mjs +4 -4
  19. package/esm2020/lib/zbuttons/zbuttons.component.mjs +4 -4
  20. package/esm2020/lib/zcard/zcard.component.mjs +4 -4
  21. package/esm2020/lib/zchart/zchart.component.mjs +4 -4
  22. package/esm2020/lib/zcheckbox/zcheckbox.component.mjs +4 -4
  23. package/esm2020/lib/zchip/zchip.component.mjs +4 -4
  24. package/esm2020/lib/zcodeeditor/zcodeeditor.component.mjs +4 -4
  25. package/esm2020/lib/zcodeeditor/zcodeeditor.pipe.mjs +4 -4
  26. package/esm2020/lib/zdaterange/zdaterange.component.mjs +4 -4
  27. package/esm2020/lib/zdatetime/dateParser.pipe.mjs +4 -4
  28. package/esm2020/lib/zdatetime/zdatetime.component.mjs +4 -4
  29. package/esm2020/lib/zdiv/zdiv.component.mjs +4 -4
  30. package/esm2020/lib/zdiv/zdiv.pipe.mjs +4 -4
  31. package/esm2020/lib/zform/zform.component.mjs +4 -4
  32. package/esm2020/lib/zformcontrol/zformcontrol.component.mjs +4 -4
  33. package/esm2020/lib/zgauge/zgauge.component.mjs +4 -4
  34. package/esm2020/lib/zgrid/date-range-cell-filter.component.mjs +4 -4
  35. package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +4 -4
  36. package/esm2020/lib/zgrid/zgrid.component.mjs +4 -4
  37. package/esm2020/lib/zgrid/zgrid.popup.anchor-target.directive.mjs +4 -4
  38. package/esm2020/lib/zimg/zimg.component.mjs +4 -4
  39. package/esm2020/lib/zkcard/zkcard.component.mjs +4 -4
  40. package/esm2020/lib/zlabel/zlabel.component.mjs +4 -4
  41. package/esm2020/lib/zmfb/zmfb.component.mjs +4 -4
  42. package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +4 -4
  43. package/esm2020/lib/zmodal/zmodal.component.mjs +4 -4
  44. package/esm2020/lib/znumeric/znumeric.component.mjs +4 -4
  45. package/esm2020/lib/zpostselectinput/zpostselectinput.component.mjs +4 -4
  46. package/esm2020/lib/zquerybuilder/zquerybuilder.component.mjs +4 -4
  47. package/esm2020/lib/zreport/zreport.component.mjs +21 -19
  48. package/esm2020/lib/zscheduler/zscheduler.component.mjs +4 -4
  49. package/esm2020/lib/zscheduler/zscheduler.toolbar.component.mjs +4 -4
  50. package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +4 -4
  51. package/esm2020/lib/zselectmultiple/zselectmultiple.directive.mjs +4 -4
  52. package/esm2020/lib/ztab/ztab.component.mjs +4 -4
  53. package/esm2020/lib/ztab/ztab.pipe.mjs +4 -4
  54. package/esm2020/lib/ztext/ztext.component.mjs +4 -4
  55. package/esm2020/lib/ztextarea/ztextarea.component.mjs +4 -4
  56. package/esm2020/lib/ztexteditor/ztexteditor.component.mjs +4 -4
  57. package/esm2020/lib/ztree/ztree.component.mjs +4 -4
  58. package/esm2020/lib/ztreelist/ztreelist.component.mjs +4 -4
  59. package/esm2020/lib/ztrendcard/ztrendcard.component.mjs +4 -4
  60. package/esm2020/lib/zudf/zudf.component.mjs +4 -4
  61. package/esm2020/lib/zunknown/zunknown.component.mjs +4 -4
  62. package/esm2020/lib/zupload/zupload.component.mjs +4 -4
  63. package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +4 -4
  64. package/fesm2015/mmhglobal-dynamicform.mjs +204 -202
  65. package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
  66. package/fesm2020/mmhglobal-dynamicform.mjs +204 -202
  67. package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
  68. package/package.json +1 -1
@@ -610,12 +610,12 @@ export class ZComponentDebugService {
610
610
  return this.webApiService.handleError(res);
611
611
  }
612
612
  }
613
- ZComponentDebugService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZComponentDebugService, deps: [{ token: i1.Router }, { token: i2.AlertService }, { token: i2.AuthService }, { token: i2.FieldService }, { token: i2.ResourceApiService }, { token: i2.ToastService }, { token: i3.ModalService }, { token: i2.WebApiService }], target: i0.ɵɵFactoryTarget.Injectable });
614
- ZComponentDebugService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZComponentDebugService, providedIn: 'root' });
615
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZComponentDebugService, decorators: [{
613
+ ZComponentDebugService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZComponentDebugService, deps: [{ token: i1.Router }, { token: i2.AlertService }, { token: i2.AuthService }, { token: i2.FieldService }, { token: i2.ResourceApiService }, { token: i2.ToastService }, { token: i3.ModalService }, { token: i2.WebApiService }], target: i0.ɵɵFactoryTarget.Injectable });
614
+ ZComponentDebugService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZComponentDebugService, providedIn: 'root' });
615
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZComponentDebugService, decorators: [{
616
616
  type: Injectable,
617
617
  args: [{
618
618
  providedIn: 'root'
619
619
  }]
620
620
  }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.AlertService }, { type: i2.AuthService }, { type: i2.FieldService }, { type: i2.ResourceApiService }, { type: i2.ToastService }, { type: i3.ModalService }, { type: i2.WebApiService }]; } });
621
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUtsRCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBQ2lELFdBQVcsRUFDaEIsZ0JBQWdCLEVBQ3pELE1BQU0sRUFDZixNQUFNLGlCQUFpQixDQUFDOzs7OztBQU16QixNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1UsTUFBYyxFQUNkLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxZQUEwQixFQUMxQixZQUEwQixFQUMxQixhQUE0QjtRQVA1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUNsQyxDQUFDO0lBSUwsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMs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QUksR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtZQUN2RSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLEVBQUU7Z0JBQ2pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUM5RSxHQUFHLFVBQVUsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbkY7YUFDRjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQzs7bUhBbHRCVSxzQkFBc0I7dUhBQXRCLHNCQUFzQixjQUZyQixNQUFNOzJGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJb25pY1NlbGVjdGFibGVDb21wb25lbnQgfSBmcm9tICdpb25pYy1zZWxlY3RhYmxlJztcclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG9mLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0QnV0dG9uLCBBbGVydFNlcnZpY2UsIEF1dGhTZXJ2aWNlLCBGaWVsZFNlcnZpY2UsIE1FU1NBR0VUWVBFLFxyXG4gIFJlc291cmNlQXBpU2VydmljZSwgVG9hc3RTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsXHJcbiAgWkZpZWxkLCBaR3JvdXAsIFpUcmVlVGVtcGxhdGVQYXJhbXNcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IE1vZGFsUmVzcG9uc2UsIE1vZGFsU2VydmljZSB9IGZyb20gJ21taGdsb2JhbC16bW9kYWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgWkNvbXBvbmVudERlYnVnU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIHByaXZhdGUgc2NvcGU6IGFueTtcclxuXHJcbiAgZ2V0IGRlYnVnKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY29wZS5ncm91cC5fZGVidWc7XHJcbiAgfVxyXG5cclxuICBnZXQgZ3JvdXAoKTogWkdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLnNjb3BlLmdyb3VwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSW5pdERlYnVnZ2VyKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGdyb3VwLl9kZWJ1ZyA9IG5ldyBaR3JvdXAodHJ1ZSk7XHJcbiAgICBncm91cC5faXNEZWJ1Z2dpbmcgPSB0cnVlO1xyXG4gICAgZ3JvdXAuX2RlYnVnLnpEYXRhID0ge1xyXG4gICAgICBjb2xsZWN0ZWRBY3Rpdml0aWVzOiBbXSxcclxuICAgICAgYWN0aXZpdHlDb3VudDogMCxcclxuICAgICAgY29sbGVjdGVkV29ya2Zsb3dCdXR0b25zOiBbXSxcclxuICAgICAgd29ya2Zsb3dCdXR0b25Db3VudDogMFxyXG4gICAgfTtcclxuICAgIGdyb3VwLl9kZWJ1Zy56Q29tcG9uZW50cyA9IHt9O1xyXG4gICAgZ3JvdXAuaXNMaXN0Rm9ybSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBvblN0YXJ0RGVidWdnZXIoZmllbGRFbGVtZW50czogQXJyYXk8WkZpZWxkPiwgbWU6IGFueSkge1xyXG4gICAgdGhpcy5zY29wZSA9IG1lO1xyXG4gICAgaWYgKCFtZS5ncm91cC5fZGVidWcpIHtcclxuICAgICAgbWUuZ3JvdXAuX2RlYnVnID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZDogWkdyb3VwID0gbWUuZ3JvdXAuX2RlYnVnO1xyXG4gICAgbWUuZm9ybSA9IG1lLnRvRm9ybUdyb3VwKGZpZWxkRWxlbWVudHMpO1xyXG4gICAgZC5mb3JtID0gbWUuZm9ybTtcclxuICAgIGlmIChtZS5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgbWUuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkLCB7XHJcbiAgICAgIC8vIHpEYXRhOiB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH0sXHJcbiAgICAgIHpNb2RlbDoge30sXHJcbiAgICAgIHN1YmplY3Q6IG5ldyBCZWhhdmlvclN1YmplY3Q8WkNvbXBvbmVudE91dHB1dEV2ZW50PihudWxsKSxcclxuICAgICAgaXNFZGl0OiB0cnVlLFxyXG4gICAgICBpc05ldzogZmFsc2UsXHJcbiAgICAgIF9kZWJ1ZzogbWUuZ3JvdXAuX2RlYnVnLFxyXG4gICAgICBfZ3JvdXA6IG1lLmdyb3VwLFxyXG4gICAgICByZXNvdXJjZVVSTDogdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZCcpLFxyXG4gICAgICB0cmVlSXRlbVRlbXBsYXRlOiB0aGlzLnRyZWVJdGVtVGVtcGxhdGUsXHJcbiAgICAgIG9uSXRlbUNsaWNrOiB0aGlzLm9uSXRlbUNsaWNrLFxyXG4gICAgICBvblRyZWVOb2RlQ2hhbmdlOiB0aGlzLm9uVHJlZU5vZGVDaGFuZ2UsXHJcbiAgICAgIG9uQWRkTm9kZTogdGhpcy5vbkFkZE5vZGUsXHJcbiAgICAgIG9uUmVtb3ZlTm9kZTogdGhpcy5vblJlbW92ZU5vZGUsXHJcbiAgICAgIHRyZWVOb2Rlc0V4cGFuZEFsbDogdGhpcy50cmVlTm9kZXNFeHBhbmRBbGwsXHJcbiAgICAgIHRyZWVOb2Rlc0NvbGxhcHNlQWxsOiB0aGlzLnRyZWVOb2Rlc0NvbGxhcHNlQWxsLFxyXG4gICAgICByZWZyZXNoVHJlZU1vZGVsOiB0aGlzLnJlZnJlc2hUcmVlTW9kZWwsXHJcbiAgICAgIGFkZE5vZGU6IHRoaXMuYWRkTm9kZSxcclxuICAgICAgcmVmcmVzaEFjdGl2aXR5TG9nRGF0YTogdGhpcy5Mb2FkR3JpZERhdGEuYmluZCh0aGlzKSxcclxuICAgICAgR29Ub0ZpZWxkRWxlbWVudDogdGhpcy5nb3RvRmllbGRFbGVtZW50LmJpbmQodGhpcyksXHJcbiAgICAgIExpc3RXYXRjaE5hbWU6IHRoaXMubGlzdFdhdGNoTmFtZSxcclxuICAgICAgb25DaGFuZ2VXYXRjaE5hbWU6IHRoaXMub25DaGFuZ2VXYXRjaE5hbWUuYmluZCh0aGlzKSxcclxuICAgICAgZ2V0V2F0Y2hOYW1lOiB0aGlzLmdldFdhdGNoTmFtZS5iaW5kKHRoaXMpLFxyXG4gICAgICBmaWVsZEVsZW1lbnRvbkVkaXRvckNvZGVDaGFuZ2U6IHRoaXMuZmllbGRFbGVtZW50b25FZGl0b3JDb2RlQ2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIGdyaWRBY3Rpdml0eUxvZ0NvbHVtbkZpZWxkczogdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICAnZGVidWdBY3Rpdml0eUxvZycsXHJcbiAgICAgICAgXCJGb3JtRmllbGRcIixcclxuICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgIFwiZGVidWdBY3Rpdml0eUxvZ0ZpZWxkXCJcclxuICAgICAgKSxcclxuICAgICAgZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2s6IHRoaXMuZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2suYmluZCh0aGlzKSxcclxuICAgICAgdXBkYXRlTW9kZWw6IHRoaXMudXBkYXRlTW9kZWwuYmluZCh0aGlzKSxcclxuICAgICAgcmVmcmVzaFdvcmtmbG93QnV0dG9uRGF0YTogdGhpcy5sb2FkV29ya2Zsb3dEYXRhLmJpbmQodGhpcyksXHJcbiAgICAgIGdyaWRXb3JrZmxvd0J1dHRvbkNvbHVtbkZpZWxkczogdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICAnZGVidWdXb3JrZmxvd0J1dHRvbicsXHJcbiAgICAgICAgJ0Zvcm1GaWVsZCcsXHJcbiAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICBcImRlYnVnV29ya2Zsb3dCdXR0b25GaWVsZFwiXHJcbiAgICAgICksXHJcbiAgICAgIGdyaWRXb3JrZmxvd0J1dHRvbk9uSXRlbUNsaWNrOiB0aGlzLmdyaWRXb3JrZmxvd0J1dHRvbk9uSXRlbUNsaWNrLmJpbmQodGhpcylcclxuICAgIH0pO1xyXG4gICAgaWYgKCFkLnpEYXRhKSB7XHJcbiAgICAgIGQuekRhdGEgPSB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH07XHJcbiAgICB9XHJcblxyXG4gICAgbWUuc3Vic2NyaXB0aW9uID0gZC5zdWJqZWN0LnN1YnNjcmliZSgoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCkgPT5cclxuICAgICAgdGhpcy5zdWJqZWN0RXZlbnQoZXZlbnQsIGQsIHRoaXMpXHJcbiAgICApO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRGaWVsZHNEaXZDbGFzcyh0aGlzLmdyb3VwLl9wcm9qZWN0TmFtZSwgdGhpcy5ncm91cC5maWVsZE5hbWUsIGZpZWxkRWxlbWVudHMsIHRoaXMuYXV0aFNlcnZpY2UpO1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZERlYnVnWk1vZGVsKG1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZERlYnVnWk1vZGVsKG1lOiBhbnkpIHtcclxuICAgIGNvbnN0IGQ6IFpHcm91cCA9IG1lLmdyb3VwLl9kZWJ1ZztcclxuXHJcbiAgICBjb25zdCBkb3dubG9hZExpc3QgPSBbXTtcclxuICAgIGRvd25sb2FkTGlzdC5wdXNoKHRoaXMuZ2V0UHJvamVjdElkKCkpO1xyXG5cclxuICAgIGNvbnN0IGZvcm1UeXBlID0gbWUuZ3JvdXAuaXNMaXN0Rm9ybSA/ICdMaXN0RmllbGQnIDogJ0Zvcm1GaWVsZCc7XHJcbiAgICBjb25zdCBmaWVsZE5hbWUgPSBtZS5ncm91cC5maWVsZE5hbWU7XHJcbiAgICBjb25zdCBmaWVsZHpNb2RlbCA9IHRoaXMuZ2V0RmllbGR6TW9kZWwoZm9ybVR5cGUsIGZpZWxkTmFtZSk7XHJcbiAgICBkb3dubG9hZExpc3QucHVzaChmaWVsZHpNb2RlbCk7XHJcblxyXG4gICAgcmV0dXJuIGZvcmtKb2luKGRvd25sb2FkTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFByb2plY3RJZCgpIHtcclxuICAgIGNvbnN0IGQgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdwcm9qZWN0c1VSTCcpO1xyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5nZXRBcGkodXJsLCB7fSwgZC56RGF0YSwgJ1Byb2plY3RPcHRpb25zJywgbnVsbCwgZCwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWVsZHpNb2RlbCh0eXBlOiBzdHJpbmcsIGFjdGl2aXR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gJ0Zvcm1GaWVsZCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybUZpZWxkek1vZGVsKGFjdGl2aXR5TmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRMaXN0RmllbGR6TW9kZWwoYWN0aXZpdHlOYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Rm9ybUZpZWxkek1vZGVsKGFjdGl2aXR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkOiBaR3JvdXAgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZCcpO1xyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwR2V0JCh1cmwsIHsgbmFtZTogYWN0aXZpdHlOYW1lLCB0eXBlOiAnRm9ybUZpZWxkJyB9KS5waXBlKFxyXG4gICAgICB0YXAoKHJlc3BEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygncmVzcERhdGE6ICcsIHJlc3BEYXRhKTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGQuek1vZGVsLCByZXNwRGF0YSk7XHJcbiAgICAgICAgZC5mb3JtLnBhdGNoVmFsdWUoZC56TW9kZWwpO1xyXG4gICAgICAgIGQuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IEpTT04ucGFyc2UoZC56TW9kZWwuQ29kZSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkLCB7XHJcbiAgICAgICAgICB0cmVlTW9kZWw6IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChmaWVsZHMpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRMaXN0RmllbGR6TW9kZWwoYWN0aXZpdHlOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGQgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZHNNYXBwaW5nJyk7XHJcbiAgICBjb25zdCB1cmwyID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZCcpO1xyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwR2V0JCh1cmwsIHsgbmFtZTogYWN0aXZpdHlOYW1lIH0pLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgoZmllbGRNYXBwaW5nOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnZmllbGRNYXBwaW5nOiAnLCBmaWVsZE1hcHBpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQodXJsMiwgeyBpZDogZmllbGRNYXBwaW5nLkZpZWxkRWxlbWVudE1hc3RlcklkIH0pO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKChyZXNwRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkLnpNb2RlbCwgcmVzcERhdGEpO1xyXG4gICAgICAgIGQuZm9ybS5wYXRjaFZhbHVlKGQuek1vZGVsKTtcclxuICAgICAgICBkLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICBjb25zdCBmaWVsZHMgPSBKU09OLnBhcnNlKGQuek1vZGVsLkNvZGUpO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZCwge1xyXG4gICAgICAgICAgdHJlZU1vZGVsOiBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUcmVlTW9kZWwoZmllbGRzKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgc3ViamVjdEV2ZW50KGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC50YXJnZXQuc3RhcnRzV2l0aChcIm1vZGFsR3JvdXAuXCIpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKFwiKiogRGVidWcgLSBTdWJqZWN0RXZlbnRcIiwgZXZlbnQpO1xyXG4gICAgbGV0IGNhbGxGdW5jO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNhbGxGdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgIG1lLFxyXG4gICAgICAgIGV2ZW50LnRhcmdldFxyXG4gICAgICApO1xyXG4gICAgICAvLyBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoZXZlbnQuVGFyZ2V0LCBncm91cCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgXCJFcnJvciB3aGVuIGdldEdyb3VwVmFsdWU6IFwiLFxyXG4gICAgICAgIGV2ZW50LnRhcmdldCxcclxuICAgICAgICBcIiA+IEVycm9yOiBcIixcclxuICAgICAgICBlcnJvclxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBjb25zdCBuZXdGdW5jID0gY2FsbEZ1bmMuYmluZChtZSk7XHJcbiAgICAgIG5ld0Z1bmMoZXZlbnQsIGdyb3VwLCBtZSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoZXZlbnQudHlwZS5lbmRzV2l0aChcIm9uTmF2aWdhdGVUb1wiKSkge1xyXG4gICAgICAgIGNvbnN0IG5VcmwgPSBldmVudC50YXJnZXQucmVwbGFjZShcIi86aWRcIiwgXCIvXCIgKyBldmVudC5kYXRhKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbblVybF0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiemdyaWQtY2VsbENsaWNrXCIpIHtcclxuICAgICAgICAvLyAoY2FsbEZ1bmMuc3RhcnRzV2l0aCgnZWRpdCcpKSB7ICB6Z3JpZC1jZWxsQ2xpY2tcclxuICAgICAgICBjb25zdCBjTmFtZSA9IGNhbGxGdW5jLnNsaWNlKDQpO1xyXG4gICAgICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgICAgIC8vIGNvbnN0IG1vZGFsR3JvdXBQYXJhbTogTW9kYWxQYWdlUGFyYW1zID0ge307XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLmNvbnRyb2xsZXJOYW1lID0gY05hbWU7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLnJlZmVySWQgPSBldmVudC5kYXRhLklkO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5jb2xGaWVsZHMkID0gZXZlbnQuY29sdW1uRmllbGRzJDtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0ucGFyZW50R3JvdXAgPSBtZS5ncm91cDtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5vcGVuTW9kYWxGb3JtKG1vZGFsR3JvdXBQYXJhbSk7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhldmVudC5jb2x1bW5GaWVsZHMkIHx8IGNOYW1lLCBncm91cCwgJycsIG51bGwsIG51bGwsIHt9LCBldmVudC5kYXRhLklkKTsgLy8gVE9ET1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ6Z3JpZC1jZWxsQ2xpY2tcIikge1xyXG4gICAgICAgIGlmIChjYWxsRnVuYy5uYXZpZ2F0ZVVybCkge1xyXG4gICAgICAgICAgY29uc3QgdXJsID0gY2FsbEZ1bmMubmF2aWdhdGVVcmwucmVwbGFjZShcIjppZFwiLCBldmVudC5kYXRhLklkKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNvbnN0IG1vZGFsR3JvdXBQYXJhbTogTW9kYWxQYWdlUGFyYW1zID0ge307XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLmNvbnRyb2xsZXJOYW1lID0gY2FsbEZ1bmMuY3RybE5hbWU7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLnJlZmVySWQgPSBldmVudC5kYXRhLklkO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5jb2xGaWVsZHMkID0gZXZlbnQuY29sdW1uRmllbGRzJDtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0ucGFyZW50R3JvdXAgPSBtZS5ncm91cDtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0uZm9ybUhlYWRlciA9IGNhbGxGdW5jLmZvcm1IZWFkZXI7XHJcblxyXG4gICAgICAgIGlmIChjYWxsRnVuYy5mb3JtSGVhZGVyKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLm9wZW5Nb2RhbEZvcm0obW9kYWxHcm91cFBhcmFtKTtcclxuXHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KGV2ZW50LmNvbHVtbkZpZWxkcyQgfHwgY2FsbEZ1bmMuY3RybE5hbWUsIGdyb3VwLCBjYWxsRnVuYy5mb3JtSGVhZGVyLCBudWxsLCBudWxsLCB7fSwgZXZlbnQuZGF0YS5JZCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiSW52YWxpZCBjYWxsRnVuYyB0eXBlOiBcIixcclxuICAgICAgICAgIGNhbGxGdW5jLFxyXG4gICAgICAgICAgXCIgZXZlbnQuVGFyZ2V0OiBcIixcclxuICAgICAgICAgIGV2ZW50LnRhcmdldFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdGhpcy5vcGVuTW9kYWxGb3JtQnlDb21wb25lbnQoY2FsbEZ1bmMudHlwZSwgZXZlbnQuRGF0YS5JZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgXCJGdW5jdGlvbiBub3QgZGVmaW5lZCBpbiBncm91cCBmb3I6IFwiLFxyXG4gICAgICAgIGV2ZW50LnRhcmdldCxcclxuICAgICAgICBcIiwgRXZlbnQ6IFwiLFxyXG4gICAgICAgIGV2ZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdyaWRBY3Rpdml0eUxvZ09uSXRlbUNsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdncmlkQWN0aXZpdHlMb2dPbkl0ZW1DbGljazogJywgZXZlbnQpO1xyXG4gICAgY29uc3QgcmVjID0gZXZlbnQuZGF0YUl0ZW07XHJcbiAgICBzd2l0Y2ggKHJlYy50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ0xpc3RGaWVsZCc6XHJcbiAgICAgIGNhc2UgJ0Zvcm1GaWVsZCc6XHJcbiAgICAgICAgdGhpcy5nZXRGaWVsZHpNb2RlbChyZWMudHlwZSwgcmVjLmFjdGl2aXR5TmFtZSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0VGFiKDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdSZXNvdXJjZVNlcnZlckFQSSc6XHJcbiAgICAgICAgY29uc3Qgd2F0Y2hOYW1lVmFsdWUgPSAnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXNbJyArIChyZWMuaW5kZXggLSAxKSArICddLnJlZmVyZW5jZSc7XHJcbiAgICAgICAgdGhpcy5zZXRXYXRjaE5hbWVWYWx1ZSh3YXRjaE5hbWVWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUYWIoMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0h0dHBHZXQkJzpcclxuICAgICAgY2FzZSAnSHR0cFBvc3QkJzpcclxuICAgICAgY2FzZSAnSHR0cFB1dCQnOlxyXG4gICAgICBjYXNlICdIdHRwRGVsZXRlJCc6XHJcbiAgICAgICAgdGhpcy5zZXRXYXRjaE5hbWVWYWx1ZSgnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXNbJyArIChyZWMuaW5kZXggLSAxKSArICddJyk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUYWIoMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdFRhYihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIC8vIHRoaXMuZGVidWcuekNvbXBvbmVudHNbXCJ6dGFiX2RlYnVnZ2VyVGFic1wiXS5zdGF0ZS5sYXN0U2VsZWN0ZWRUYWJJbmRleCA9IGluZGV4O1xyXG4gICAgLy8gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnQodGhpcy5kZWJ1ZywgJ3p0YWJfZGVidWdnZXJUYWJzJykuc3RhdGUubGFzdFNlbGVjdGVkVGFiSW5kZXggPSBpbmRleDtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6dGFiX2RlYnVnZ2VyVGFicycpLnNlbGVjdFRhYihpbmRleCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdhdGNoTmFtZVZhbHVlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGVidWcuek1vZGVsWydEZWJ1Z1dhdGNoTmFtZSddID0gbmV3VmFsdWU7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoJ1dhdGNoTmFtZScsIG5ld1ZhbHVlLCB0aGlzLmRlYnVnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2FkR3JpZERhdGEoKSB7XHJcbiAgICBjb25zdCBhY3Rpdml0eUxvZ0dyaWQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmRlYnVnLCAnemdyaWRfQWN0aXZpdHlMb2dHcmlkJyk7XHJcbiAgICBpZiAoYWN0aXZpdHlMb2dHcmlkKSB7XHJcbiAgICAgIGFjdGl2aXR5TG9nR3JpZC5zZXREYXRhKHRoaXMuZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RXYXRjaE5hbWUoY29tcG9uZW50OiBJb25pY1NlbGVjdGFibGVDb21wb25lbnQsIHNlYXJjaFRleHQ6IHN0cmluZywgcGFnZU5vOiBudW1iZXIsXHJcbiAgICBtZTogYW55LCBkYXRhSXRlbTogYW55LCByZWNvcmRJZD86IHN0cmluZykge1xyXG5cclxuICAgIGNvbnN0IHdhdGNoTGlzdCA9IFtcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuek1vZGVsJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC56RGF0YScgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuZmllbGRzJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5mb3JtLnZhbHVlJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5iYWNrTmF2aWdhdGlvblBhZ2UnIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5wYXJlbnRSZWZlcmVuY2VJZCcgfSxcclxuICAgICAgeyBOYW1lOiAnT2JqZWN0LmtleXMoZ3JvdXAuekNvbXBvbmVudHMpJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5ncmlkT3B0aW9ucy56Z3JpZC5ncmlkLmRhdGEnIH1cclxuICAgICAgLy8geyBOYW1lOiAnT2JqZWN0LmtleXMoX2RlYnVnLnpDb21wb25lbnRzKScgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpNb2RlbCcgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpEYXRhJyB9LFxyXG4gICAgICAvLyB7IE5hbWU6ICdfZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllcycgfSxcclxuICAgIF07XHJcblxyXG4gICAgbGV0IHJlc3VsdHM7XHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICByZXN1bHRzID0gd2F0Y2hMaXN0LmZpbHRlcigocykgPT4gcy5OYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpICE9PSAtMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhZ2VObyA9PT0gMCAmJiBzZWFyY2hUZXh0KSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IHJlc3VsdHMgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBhZ2VObyA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gb2YoeyBkYXRhU2V0OiB3YXRjaExpc3QgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoeyBkYXRhU2V0OiBbXSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0V2F0Y2hOYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVidWcuek1vZGVsLkRlYnVnV2F0Y2hOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZVdhdGNoTmFtZShldmVudDogYW55LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnb25DaGFuZ2VXYXRjaE5hbWU6ICcsIGV2ZW50LmRhdGEudmFsdWUpO1xyXG4gICAgY29uc3QgbmV3VmFsdWUgPSBldmVudC5kYXRhLnZhbHVlO1xyXG4gICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZGVidWcuek1vZGVsWydEZWJ1Z1dhdGNoTmFtZSddID0gbmV3VmFsdWUucmVwbGFjZSgnZ3JvdXAnLCAnX2dyb3VwJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpZWxkRWxlbWVudG9uRWRpdG9yQ29kZUNoYW5nZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLnJlZnJlc2hUcmVlTW9kZWwoKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHRyZWVOb2Rlc0V4cGFuZEFsbCgpIHtcclxuICAgIHRoaXMuZGVidWcuekNvbXBvbmVudHNbJ3p0cmVlX2RlYnVnWlRyZWUnXS5leHBhbmRBbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJlZU5vZGVzQ29sbGFwc2VBbGwoKSB7XHJcbiAgICB0aGlzLmRlYnVnLnpDb21wb25lbnRzWyd6dHJlZV9kZWJ1Z1pUcmVlJ10uY29sbGFwc2VBbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaFRyZWVNb2RlbCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKHRoaXMuZGVidWcuek1vZGVsLkNvZGUpO1xyXG4gICAgICAvLyB0aGlzLl9hZGROb2Rlc1RvVHJlZShkKTtcclxuICAgICAgLy8gZ3JvdXBbJ3RyZWVNb2RlbCddID0gdGhpcy5jb252ZXJ0VHJlZU1vZGVsKGQpO1xyXG4gICAgICB0aGlzLmRlYnVnWyd0cmVlTW9kZWwnXSA9IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChkKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICBkZWJ1Z2dlcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJlZUl0ZW1UZW1wbGF0ZShlbDogWlRyZWVUZW1wbGF0ZVBhcmFtcykge1xyXG4gICAgY29uc3QgZ2V0RmllbGRWYWx1ZSA9IChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBpdGVtLl9EYXRhVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBcIi4uLlwiO1xyXG4gICAgfTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGVsLmRhdGFJdGVtLk5hbWUgK1xyXG4gICAgICBcIiAtIFtcIiArXHJcbiAgICAgIGVsLmRhdGFJdGVtLlR5cGUgK1xyXG4gICAgICBcIl0gPSBcIiArXHJcbiAgICAgIGdldEZpZWxkVmFsdWUoZWwuZGF0YUl0ZW0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25JdGVtQ2xpY2soZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgLy8gZGVidWdnZXI7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uSXRlbUNsaWNrIGRhdGEgcmVjZWl2ZWQ6IFwiLCBldmVudCk7XHJcbiAgICBjb25zdCBtb2RhbEZpZWxkcyA9IHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoXHJcbiAgICAgIFwibXZFZGl0RmllbGROb2RlRm9ybVwiLFxyXG4gICAgICBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICBudWxsLFxyXG4gICAgICBudWxsXHJcbiAgICApO1xyXG4gICAgY29uc3QgZGF0YUl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBldmVudC5kYXRhKTtcclxuICAgIGRhdGFJdGVtLlZhbHVlID0gZGF0YUl0ZW0uX0RhdGFWYWx1ZTtcclxuICAgIGRlbGV0ZSBkYXRhSXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgY29uc3Qgem1vZGVsID0ge1xyXG4gICAgICBub2RlTW9kZWw6IEpTT04uc3RyaW5naWZ5KGRhdGFJdGVtLCBudWxsLCAyKVxyXG4gICAgfTtcclxuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbEZpZWxkcywgdGhpcy5kZWJ1Zy5fZ3JvdXAsICdGaWVsZCBFbGVtZW50IEluZm8nLCBudWxsLCBudWxsLCB6bW9kZWwpO1xyXG4gICAgbW9kYWwuc3Vic2NyaWJlKChtb2RhbERhdGE6IE1vZGFsUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKG1vZGFsRGF0YS5yZXNwb25zZVR5cGUgPT09IFwiY2FuY2VsXCIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmV3RGF0YSA9IEpTT04ucGFyc2UobW9kYWxEYXRhLmRhdGEubm9kZU1vZGVsKTtcclxuICAgICAgaWYgKG5ld0RhdGEuVmFsdWUpIHtcclxuICAgICAgICBuZXdEYXRhLl9EYXRhVmFsdWUgPSBuZXdEYXRhLlZhbHVlO1xyXG4gICAgICAgIG5ld0RhdGEuVmFsdWUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlVHJlZU5vZGUobmV3RGF0YSwgdGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10sIGV2ZW50LmV2ZW50KTtcclxuICAgICAgY29uc3QgbmV3VHJlZU1vZGVsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRlYnVnWyd0cmVlTW9kZWwnXSkpO1xyXG4gICAgICBjb25zdCByZXZlcnRlZE1vZGVsID0gWkNvbXBvbmVudEhlbHBlci5yZXZlcnRUcmVlTW9kZWwobmV3VHJlZU1vZGVsKTtcclxuICAgICAgY29uc3QgbmV3Q29kZSA9IEpTT04uc3RyaW5naWZ5KHJldmVydGVkTW9kZWwsIG51bGwsIDIpO1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoXCJDb2RlXCIsIG5ld0NvZGUsIHRoaXMuZGVidWcpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgICAgIC8vIHRoaXMubWFpblNlcnZpY2UudXBkYXRlTW9kZWwobnVsbCwgdGhpcy5kZWJ1Zyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVHJlZU5vZGUobmV3Tm9kZTogYW55LCB0cmVlTW9kZWw6IGFueSwgaW5kZXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgdHJlZUluZGV4ID0gaW5kZXguc3BsaXQoXCJfXCIpO1xyXG4gICAgaWYgKHRyZWVJbmRleC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdHJlZUluZGV4LnNsaWNlKDEpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRyZWVOb2RlKG5ld05vZGUsIHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSwgbmV3SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld05vZGUuVmFsdWUgPSB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dID0gbmV3Tm9kZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRUcmVlTm9kZShuZXdOb2RlOiBhbnksIHRyZWVNb2RlbDogYW55LCBpbmRleDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB0cmVlSW5kZXggPSBpbmRleC5zcGxpdChcIl9cIik7XHJcbiAgICBpZiAodHJlZUluZGV4Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgbmV3SW5kZXggPSB0cmVlSW5kZXguc2xpY2UoMSkuam9pbihcIl9cIik7XHJcbiAgICAgIHRoaXMuaW5zZXJ0VHJlZU5vZGUobmV3Tm9kZSwgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlLCBuZXdJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodHJlZUluZGV4WzBdKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSkpIHtcclxuICAgICAgICAgIHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUucHVzaChuZXdOb2RlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0cmVlTW9kZWwucHVzaChuZXdOb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVUcmVlTm9kZSh0cmVlTW9kZWw6IGFueSwgaW5kZXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgdHJlZUluZGV4ID0gaW5kZXguc3BsaXQoXCJfXCIpO1xyXG4gICAgaWYgKHRyZWVJbmRleC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdHJlZUluZGV4LnNsaWNlKDEpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB0aGlzLnJlbW92ZVRyZWVOb2RlKHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSwgbmV3SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJlZU1vZGVsLnNwbGljZSgrdHJlZUluZGV4WzBdLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UcmVlTm9kZUNoYW5nZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uVHJlZU5vZGVDaGFuZ2U6IFwiLCBlbCk7XHJcbiAgICBjb25zdCBjb2RlRGF0YSA9IEpTT04uc3RyaW5naWZ5KGVsLmRhdGEpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBjb2RlRGF0YSwgdGhpcy5kZWJ1Zyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZE5vZGUoKSB7XHJcbiAgICBjb25zdCBlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50ID0ge1xyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgcm93RGF0YToge30sXHJcbiAgICAgIGV2ZW50OiBcIlwiLFxyXG4gICAgICB0YXJnZXQ6IFwiXCIsXHJcbiAgICAgIHR5cGU6IFwiXCIsXHJcbiAgICAgIGNvbHVtbkZpZWxkcyQ6IG51bGxcclxuICAgIH07XHJcbiAgICB0aGlzLm9uQWRkTm9kZShlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uQWRkTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZygnb25BZGROb2RlIGlzIGNhbGxlZCcsIGVsKTtcclxuICAgIGNvbnN0IG1vZGFsRmllbGRzID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgXCJtdkVkaXRGaWVsZE5vZGVGb3JtXCIsXHJcbiAgICAgIFwiRm9ybUZpZWxkXCIsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIG51bGxcclxuICAgICk7XHJcbiAgICAvLyBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGVsLmRhdGEpO1xyXG4gICAgLy8gZGF0YUl0ZW0uVmFsdWUgPSBkYXRhSXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgLy8gZGVsZXRlIGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICBjb25zdCBpbml0aWFsTW9kZWwgPSB7XHJcbiAgICAgIE5hbWU6ICdOYW1lJywgRGlzcGxheU5hbWU6ICdOYW1lJywgVmFsdWU6ICdOYW1lJywgVHlwZTogJ3RleHQnLFxyXG4gICAgICBncmlkQ29sVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgd2lkdGg6IDE1MCxcclxuICAgICAgbWluV2lkdGg6IDEwMCxcclxuICAgICAgZW5hYmxlRmlsdGVyaW5nOiB0cnVlLFxyXG4gICAgICBlbmFibGVTb3J0aW5nOiB0cnVlLFxyXG4gICAgICBwaW5uZWRMZWZ0OiBmYWxzZSxcclxuICAgICAgUGxhY2VIb2xkZXI6IFwiTmFtZVwiLFxyXG4gICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgTWluTGVuZ3RoOiAyLFxyXG4gICAgICBNYXhMZW5ndGg6IDUwLFxyXG4gICAgICBMYWJlbDogXCJOYW1lOlwiLFxyXG4gICAgICBEaXZDbGFzczogXCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTNcIixcclxuICAgICAgUmVhZE9ubHk6IGZhbHNlLFxyXG4gICAgICBTaG93TGFiZWw6IHRydWUsXHJcbiAgICAgIFZpc2libGU6IHRydWUsXHJcbiAgICAgIC8vRW5hYmxlSGlkaW5nOiB0cnVlLFxyXG4gICAgICAvL2NlbGxGaWx0ZXI6IFwiXCIsXHJcbiAgICAgIC8vZmlsdGVyQ2VsbEZpbHRlcmVkOiBmYWxzZSxcclxuICAgICAgLy9lbmFibGVQaW5uaW5nOiB0cnVlLFxyXG4gICAgICAvL3Bpbm5lZFJpZ2h0OiBmYWxzZSxcclxuICAgICAgLy9VcGRhdGVPbkJsdXI6IHRydWUsXHJcbiAgICAgIC8vQXBwZW5kRGl2Q2xlYXJGaXg6IGZhbHNlLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHptb2RlbCA9IHtcclxuICAgICAgbm9kZU1vZGVsOiBKU09OLnN0cmluZ2lmeShpbml0aWFsTW9kZWwsIG51bGwsIDIpXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGNvbnN0IG1vZGFsOiBIVE1MSW9uTW9kYWxFbGVtZW50ID0gYXdhaXQgdGhpcy5tYWluU2VydmljZS5vcGVuTW9kYWxGb3JtKG1vZGFsR3JvdXBQYXJhbSk7XHJcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3cobW9kYWxGaWVsZHMsIHRoaXMuZGVidWcsICdBZGQgRmllbGQgRWxlbWVudCBJdGVtJywgbnVsbCwgbnVsbCwgem1vZGVsKTtcclxuXHJcbiAgICBtb2RhbC5zdWJzY3JpYmUoKG1vZGFsRGF0YTogTW9kYWxSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAobW9kYWxEYXRhLnJlc3BvbnNlVHlwZSA9PT0gXCJjYW5jZWxcIikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdEYXRhID0gSlNPTi5wYXJzZShtb2RhbERhdGEuZGF0YS5ub2RlTW9kZWwpO1xyXG4gICAgICBpZiAobmV3RGF0YS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld0RhdGEuX0RhdGFWYWx1ZSA9IG5ld0RhdGEuVmFsdWU7XHJcbiAgICAgICAgbmV3RGF0YS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnNlcnRUcmVlTm9kZShuZXdEYXRhLCB0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgIGNvbnN0IG5ld1RyZWVNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10pKTtcclxuICAgICAgY29uc3QgcmV2ZXJ0ZWRNb2RlbCA9IFpDb21wb25lbnRIZWxwZXIucmV2ZXJ0VHJlZU1vZGVsKG5ld1RyZWVNb2RlbCk7XHJcbiAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBuZXdDb2RlLCB0aGlzLmRlYnVnKTtcclxuICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gICAgICAvLyB0aGlzLm1haW5TZXJ2aWNlLnVwZGF0ZU1vZGVsKG51bGwsIHRoaXMuZGVidWcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUmVtb3ZlTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93KCdSZW1vdmUgTm9kZScsICdBcmUgeW91IHN1cmU/JyxcclxuICAgICAgW1xyXG4gICAgICAgIHsgdGV4dDogXCJOb1wiLCBjc3NDbGFzczogXCJzZWNvbmRhcnlcIiB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgIHsgdGV4dDogXCJZZXNcIiwgY3NzQ2xhc3M6IFwicHJpbWFyeVwiIH0gYXMgQWxlcnRCdXR0b25cclxuICAgICAgXSlcclxuICAgICAgLnN1YnNjcmliZShyZXBseSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGx5ID09PSAnWWVzJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92ZSBOb2RlJywgZWwpO1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVUcmVlTm9kZSh0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgICAgICBjb25zdCBuZXdUcmVlTW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddKSk7XHJcbiAgICAgICAgICBjb25zdCByZXZlcnRlZE1vZGVsID0gWkNvbXBvbmVudEhlbHBlci5yZXZlcnRUcmVlTW9kZWwobmV3VHJlZU1vZGVsKTtcclxuICAgICAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShcIkNvZGVcIiwgbmV3Q29kZSwgdGhpcy5kZWJ1Zyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ290b0ZpZWxkRWxlbWVudCgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYWRtaW4vZmllbGQnXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU1vZGVsKCkge1xyXG4gICAgY29uc3QgZGVidWcgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgZmcgPSB0aGlzLmRlYnVnLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJEZWJ1ZyBGb3JtIGlzIG5vdCBkaXJ0eSBoZW5jZSByZWNvcmQgaXMgbm90IHNhdmUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEZvcm1Hcm91cEVycm9ycyhmZywgdGhpcy5hbGVydFNlcnZpY2UpO1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJEZWJ1ZyBGb3JtIFZhbGlkYXRpb24gZ290IGVycm9yKHMpOlwiLCBlcnJvcnMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb2YoZGVidWcuek1vZGVsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICAvLyBzd2l0Y2hNYXAoem1vZGVsID0+IHtcclxuICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwiQmVmb3JlIHVwZGF0ZSwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgIC8vICAgcmV0dXJuIHRoaXMuYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gICAgICAgIC8vIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQdXQkKFxyXG4gICAgICAgICAgICBkZWJ1Zy5yZXNvdXJjZVVSTCArIFwiL1wiICsgZGVidWcuek1vZGVsLklkLFxyXG4gICAgICAgICAgICBkZWJ1Zy56TW9kZWxcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWFwKHJlcyA9PiB0aGlzLmhhbmRsZVN1Y2Nlc3MocmVzLCBcIlJlY29yZCBpcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5cIikpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWZ0ZXIgRGVidWcgRm9ybSB1cGRhdGVkLCB6TW9kZWw6XCIsIHptb2RlbCk7XHJcbiAgICAgICAgICBpZiAoem1vZGVsICYmIHptb2RlbC5EYXRhKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWcuek1vZGVsLCB6bW9kZWwuRGF0YSk7XHJcbiAgICAgICAgICAgIGZnLnBhdGNoVmFsdWUoem1vZGVsLkRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmcubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgIC8vICAgdGhpcy5hZnRlclVwZGF0ZU1vZGVsKGdyb3VwKTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG5cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKiBXb3JrZmxvdyBCdXR0b24gKioqKioqKioqKioqKioqKioqKipcclxuICBwdWJsaWMgbG9hZFdvcmtmbG93RGF0YSgpIHtcclxuICAgIGNvbnN0IHpncmlkX1dvcmtmbG93QnV0dG9uR3JpZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQnKTtcclxuICAgIGlmICh6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQpIHtcclxuICAgICAgemdyaWRfV29ya2Zsb3dCdXR0b25HcmlkLnNldERhdGEodGhpcy5kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRXb3JrZmxvd0J1dHRvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBncmlkV29ya2Zsb3dCdXR0b25Pbkl0ZW1DbGljayhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LmRhdGFJdGVtKTtcclxuICAgIGNvbnN0IGZpZWxkID0gZGF0YUl0ZW0ucmVmRmllbGQ7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBkYXRhSXRlbS5yZWZBdHRyaWJ1dGU7XHJcblxyXG4gICAgLy8gR2V0IE1hcHBlZCBJbmZvXHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgIC5zZXQoXCJCdXR0b25JZFwiLCBmaWVsZC5JZCk7XHJcbiAgICB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTChcImUxd2ZzX3dmY19nZXRtYXBwZWRCdXR0b25JbmZvVVJMXCIpLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcChhc3luYyByZXMgPT4ge1xyXG4gICAgICAgIGxldCByb2xlSW5mbyA9IFtdO1xyXG4gICAgICAgIGxldCBzdGF0dXNJbmZvID0gW107XHJcbiAgICAgICAgbGV0IHBhcmVudFN0YXR1c0luZm8gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHJlcy5NYXBwZWRSb2xlTGlzdCkge1xyXG4gICAgICAgICAgcm9sZUluZm8gPSByZXMuTWFwcGVkUm9sZUxpc3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzLk1hcHBlZFN0YXR1c0xpc3QpIHtcclxuICAgICAgICAgIHJlcy5NYXBwZWRTdGF0dXNMaXN0LmZvckVhY2goKF9zdGF0dXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzdGF0dXNJbmZvLnB1c2goX3N0YXR1cy5OYW1lICsgJyAoJyArIF9zdGF0dXMuQ29kZSArICcpJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXMuTWFwcGVkUGFyZW50U3RhdHVzTGlzdCkge1xyXG4gICAgICAgICAgcmVzLk1hcHBlZFBhcmVudFN0YXR1c0xpc3QuZm9yRWFjaCgoX3BhcmVudFN0YXR1czogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHBhcmVudFN0YXR1c0luZm8ucHVzaChfcGFyZW50U3RhdHVzLk5hbWUgKyAnICgnICsgX3BhcmVudFN0YXR1cy5Db2RlICsgJyknKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgX21hcHBlZEluZm8gPSB7XHJcbiAgICAgICAgICAnbWFwcGVkUm9sZUluZm8nOiByb2xlSW5mby5sZW5ndGggPiAwID8gcm9sZUluZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkU3RhdHVzSW5mbyc6IHN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHN0YXR1c0luZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkUGFyZW50U3RhdHVzSW5mbyc6IHBhcmVudFN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHBhcmVudFN0YXR1c0luZm8gOiAnTi5BLidcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyByZXRyZWl2ZSBhbGwgaW1wb3J0YW50IGluZm9cclxuICAgICAgICBjb25zdCBfYnV0dG9uSW5mbyA9IHtcclxuICAgICAgICAgICdXb3JrZmxvd0lkJzogZmllbGQuV29ya2Zsb3dJZCxcclxuICAgICAgICAgICdCdXR0b25JZCc6IGZpZWxkLklkLFxyXG4gICAgICAgICAgJ0J1dHRvbk5hbWUnOiBmaWVsZC5OYW1lLFxyXG4gICAgICAgICAgJ0J1dHRvbkNvZGUnOiBmaWVsZC5Db2RlLFxyXG4gICAgICAgICAgJ0J1dHRvblR5cGVJZCc6IGZpZWxkLlR5cGUuSWQsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZU5hbWUnOiBmaWVsZC5UeXBlLk5hbWUsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZUNvZGUnOiBmaWVsZC5UeXBlLkNvZGUsXHJcbiAgICAgICAgICAnQnV0dG9uVmlzaWJsZSc6IGF0dHJpYnV0ZS5WaXNpYmxlLFxyXG4gICAgICAgICAgJ0J1dHRvbkNsaWNrRXZlbnQnOiBhdHRyaWJ1dGUuQ2xpY2tFdmVudCxcclxuICAgICAgICAgICdCdXR0b25VUkwnOiBhdHRyaWJ1dGUuVVJMLFxyXG4gICAgICAgICAgJ0J1dHRvbkljb24nOiBhdHRyaWJ1dGUuSWNvblxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBfZ290b1N0YXR1c0luZm8gPSB7XHJcbiAgICAgICAgICAnR290b1N0YXR1c0lkJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNOYW1lJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNDb2RlJzogJ04uQS4nXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLlN0YXR1cykge1xyXG4gICAgICAgICAgY29uc3QgX2dvdG9TdGF0dXMgPSBmaWVsZC5TdGF0dXNcclxuICAgICAgICAgIF9nb3RvU3RhdHVzSW5mbyA9IHtcclxuICAgICAgICAgICAgJ0dvdG9TdGF0dXNJZCc6IF9nb3RvU3RhdHVzLklkLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c05hbWUnOiBfZ290b1N0YXR1cy5OYW1lLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c0NvZGUnOiBfZ290b1N0YXR1cy5Db2RlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzTW9kZWwgPSBPYmplY3QuYXNzaWduKF9idXR0b25JbmZvLCBfZ290b1N0YXR1c0luZm8sIF9tYXBwZWRJbmZvKTtcclxuXHJcbiAgICAgICAgY29uc3QgbW9kYWxGaWVsZHMgPSB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKFxyXG4gICAgICAgICAgXCJtdldvcmtmbG93QnV0dG9uRGVidWdGb3JtXCIsXHJcbiAgICAgICAgICBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbEZpZWxkcywgdGhpcy5kZWJ1Zy5fZ3JvdXAsICdXb3JrZmxvdyBCdXR0b24gSW5mbycsIG51bGwsIG51bGwsIHByb3BlcnRpZXNNb2RlbCk7XHJcbiAgICAgICAgbW9kYWwuc3Vic2NyaWJlKChtb2RhbERhdGE6IE1vZGFsUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChtb2RhbERhdGEucmVzcG9uc2VUeXBlID09PSBcImNhbmNlbFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaGFuZGxlU3VjY2VzcyhyZXM6IFJlc3BvbnNlIHwgYW55LCBzdWNjZXNzTXNnOiBzdHJpbmcpOiBSZXNwb25zZSB7XHJcbiAgICBpZiAocmVzID09IG51bGwpIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhzdWNjZXNzTXNnKTtcclxuICAgIH0gZWxzZSBpZiAocmVzLkRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXMuUHJvY2Vzc2luZ1N0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChyZXMuUHJvY2Vzc2luZ1N0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcy5EYXRhKSkge1xyXG4gICAgICAgICAgcmVzLkRhdGEubWFwKHMgPT4gdGhpcy53ZWJBcGlTZXJ2aWNlLnNob3dIdHRwUmVzcG9uc2VNZXNzYWdlKE1FU1NBR0VUWVBFLlN1Y2Nlc3MsXHJcbiAgICAgICAgICAgIGAke3N1Y2Nlc3NNc2d9IDogJHtzLkNvc3RDb2RlfWAsIG51bGwpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLnNob3dIdHRwUmVzcG9uc2VNZXNzYWdlKE1FU1NBR0VUWVBFLlN1Y2Nlc3MsIHN1Y2Nlc3NNc2csIG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhzdWNjZXNzTXNnKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvcihyZXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmhhbmRsZUVycm9yKHJlcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
621
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUtsRCw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJELDJDQUEyQztBQUMzQyxPQUFPLEVBQ2lELFdBQVcsRUFDaEIsZ0JBQWdCLEVBQ3pELE1BQU0sRUFDZixNQUFNLGlCQUFpQixDQUFDOzs7OztBQU16QixNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1UsTUFBYyxFQUNkLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxZQUEwQixFQUMxQixZQUEwQixFQUMxQixhQUE0QjtRQVA1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUNsQyxDQUFDO0lBSUwsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUFhO1FBQ2pDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUc7WUFDbkIsbUJBQW1CLEVBQUUsRUFBRTtZQUN2QixhQUFhLEVBQUUsQ0FBQztZQUNoQix3QkFBd0IsRUFBRSxFQUFFO1lBQzVCLG1CQUFtQixFQUFFLENBQUM7U0FDdkIsQ0FBQztRQUNGLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUM5QixLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBR00sZUFBZSxDQUFDLGFBQTRCLEVBQUUsRUFBTztRQUMxRCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDcEIsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ3RCO1FBRUQsTUFBTSxDQUFDLEdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDbEMsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNqQixJQUFJLEVBQUUsQ0FBQyxZQUFZLEVBQUU7WUFDbkIsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUMvQjtRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1lBQ2Ysd0RBQXdEO1lBQ3hELE1BQU0sRUFBRSxFQUFFO1lBQ1YsT0FBTyxFQUFFLElBQUksZUFBZSxDQUF3QixJQUFJLENBQUM7WUFDekQsTUFBTSxFQUFFLElBQUk7WUFDWixLQUFLLEVBQUUsS0FBSztZQUNaLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU07WUFDdkIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLO1lBQ2hCLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNwRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDL0Isa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUMzQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQy9DLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLHNCQUFzQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNwRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNsRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDcEQsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMxQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM5RSwyQkFBMkIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUM3RCxrQkFBa0IsRUFDbEIsV0FBVyxFQUNYLElBQUksQ0FBQyxLQUFLLEVBQ1YsdUJBQXVCLENBQ3hCO1lBQ0QsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEUsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN4Qyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUMzRCw4QkFBOEIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUNoRSxxQkFBcUIsRUFDckIsV0FBVyxFQUNYLElBQUksQ0FBQyxLQUFLLEVBQ1YsMEJBQTBCLENBQzNCO1lBQ0QsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDN0UsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDWixDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQztTQUN6RDtRQUVELEVBQUUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUE0QixFQUFFLEVBQUUsQ0FDckUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUNsQyxDQUFDO1FBQ0YsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuSCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVPLGVBQWUsQ0FBQyxFQUFPO1FBQzdCLE1BQU0sQ0FBQyxHQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBRWxDLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4QixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3RCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRS9CLE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBWSxFQUFFLFlBQW9CO1FBQ3ZELElBQUksSUFBSSxLQUFLLFdBQVcsRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM5QzthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDOUM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsWUFBb0I7UUFDN0MsTUFBTSxDQUFDLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3JGLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3BCLHVDQUF1QztZQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO2dCQUNmLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7YUFDckQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxZQUFvQjtRQUM3QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDbEUsU0FBUyxDQUFDLENBQUMsWUFBaUIsRUFBRSxFQUFFO1lBQzlCLCtDQUErQztZQUMvQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7Z0JBQ2YsU0FBUyxFQUFFLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQzthQUNyRCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFBO0lBQ0gsQ0FBQztJQUdPLFlBQVksQ0FBQyxLQUE0QixFQUFFLEtBQWEsRUFBRSxFQUFPO1FBQ3ZFLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3JFLE9BQU87U0FDUjtRQUNELGlEQUFpRDtRQUNqRCxJQUFJLFFBQVEsQ0FBQztRQUViLElBQUk7WUFDRixRQUFRLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUNoRCxFQUFFLEVBQ0YsS0FBSyxDQUFDLE1BQU0sQ0FDYixDQUFDO1lBQ0YsdURBQXVEO1NBQ3hEO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsSUFBSSxDQUNWLDRCQUE0QixFQUM1QixLQUFLLENBQUMsTUFBTSxFQUNaLFlBQVksRUFDWixLQUFLLENBQ04sQ0FBQztTQUNIO1FBRUQsbUJBQW1CO1FBQ25CLElBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxFQUFFO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDM0I7YUFBTSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUN2QyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO2dCQUN2QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixPQUFPO2FBQ1I7WUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQUU7Z0JBQ3BDLG1EQUFtRDtnQkFDbkQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsWUFBWTtnQkFDWiwrQ0FBK0M7Z0JBQy9DLDBDQUEwQztnQkFDMUMsMkNBQTJDO2dCQUMzQyxvREFBb0Q7Z0JBQ3BELDBDQUEwQztnQkFFMUMsdUNBQXVDO2dCQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPO2FBQ3hHO1NBQ0Y7YUFBTSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUN2QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQUU7Z0JBQ3BDLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRTtvQkFDeEIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQy9ELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsT0FBTztpQkFDUjtnQkFFRCwrQ0FBK0M7Z0JBQy9DLHNEQUFzRDtnQkFDdEQsMkNBQTJDO2dCQUMzQyxvREFBb0Q7Z0JBQ3BELDBDQUEwQztnQkFDMUMsb0RBQW9EO2dCQUVwRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUU7b0JBQ3ZCLHVDQUF1QztvQkFFdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzVILE9BQU87aUJBQ1I7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FDVix5QkFBeUIsRUFDekIsUUFBUSxFQUNSLGlCQUFpQixFQUNqQixLQUFLLENBQUMsTUFBTSxDQUNiLENBQUM7YUFDSDtZQUNELCtEQUErRDtTQUNoRTthQUFNO1lBQ0wsT0FBTyxDQUFDLElBQUksQ0FDVixxQ0FBcUMsRUFDckMsS0FBSyxDQUFDLE1BQU0sRUFDWixXQUFXLEVBQ1gsS0FBSyxDQUNOLENBQUM7U0FDSDtJQUNILENBQUM7SUFFTywwQkFBMEIsQ0FBQyxLQUFVO1FBQzNDLHNEQUFzRDtRQUN0RCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQzNCLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRTtZQUNoQixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLFdBQVc7Z0JBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUM3RCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixDQUFDLENBQUMsQ0FBQztnQkFDSCxNQUFNO1lBQ1IsS0FBSyxtQkFBbUI7Z0JBQ3RCLE1BQU0sY0FBYyxHQUFHLG1DQUFtQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUM7Z0JBQzdGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEIsTUFBTTtZQUNSLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssV0FBVyxDQUFDO1lBQ2pCLEtBQUssVUFBVSxDQUFDO1lBQ2hCLEtBQUssYUFBYTtnQkFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG1DQUFtQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDcEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEIsTUFBTTtZQUNSO2dCQUNFLE1BQU07U0FDVDtJQUNILENBQUM7SUFFTyxTQUFTLENBQUMsS0FBYTtRQUM3QixZQUFZO1FBQ1osa0ZBQWtGO1FBQ2xGLHFHQUFxRztRQUNyRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU8saUJBQWlCLENBQUMsUUFBZ0I7UUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDL0MsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU0sWUFBWTtRQUNqQixNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQzNGLElBQUksZUFBZSxFQUFFO1lBQ25CLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7SUFFTyxhQUFhLENBQUMsU0FBbUMsRUFBRSxVQUFrQixFQUFFLE1BQWMsRUFDM0YsRUFBTyxFQUFFLFFBQWEsRUFBRSxRQUFpQjtRQUV6QyxNQUFNLFNBQVMsR0FBRztZQUNoQixFQUFFLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDeEIsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ3ZCLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUN4QixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUM1QixFQUFFLElBQUksRUFBRSwwQkFBMEIsRUFBRTtZQUNwQyxFQUFFLElBQUksRUFBRSw0QkFBNEIsRUFBRTtZQUN0QyxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRTtZQUNuQyxFQUFFLElBQUksRUFBRSxnQ0FBZ0MsRUFBRTtZQUMxQyxFQUFFLElBQUksRUFBRSxtQ0FBbUMsRUFBRTtZQUM3QywrQ0FBK0M7WUFDL0MsNkJBQTZCO1lBQzdCLDRCQUE0QjtZQUM1QixnREFBZ0Q7U0FDakQsQ0FBQztRQUVGLElBQUksT0FBTyxDQUFDO1FBQ1osSUFBSSxVQUFVLEVBQUU7WUFDZCxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRztRQUVELElBQUksTUFBTSxLQUFLLENBQUMsSUFBSSxVQUFVLEVBQUU7WUFDOUIsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztTQUNqQzthQUFNLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QixPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDMUMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQVUsRUFBRSxLQUFhLEVBQUUsRUFBTztRQUMxRCx3REFBd0Q7UUFDeEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbEMsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzNFO0lBQ0gsQ0FBQztJQUVPLDhCQUE4QixDQUFDLEVBQXlCO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFHTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJO1lBQ0YsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QywyQkFBMkI7WUFDM0IsaURBQWlEO1lBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEU7UUFBQyxNQUFNO1lBQ04sUUFBUSxDQUFDO1NBQ1Y7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsRUFBdUI7UUFDOUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUU7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUN4QjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxDQUNMLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUNoQixNQUFNO1lBQ04sRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ2hCLE1BQU07WUFDTixhQUFhLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBNEI7UUFDNUMsWUFBWTtRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FDcEQscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxJQUFJLEVBQ0osSUFBSSxDQUNMLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsUUFBUSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ3JDLE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRztZQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQzdDLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3JILEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUF3QixFQUFFLEVBQUU7WUFDM0MsSUFBSSxTQUFTLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtnQkFDdkMsT0FBTzthQUNSO1lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDakIsT0FBTyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzthQUN0QjtZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25FLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RSxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDckUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsa0RBQWtEO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxPQUFZLEVBQUUsU0FBYyxFQUFFLEtBQWE7UUFDaEUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN4RTthQUFNO1lBQ0wsSUFBSSxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2xDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ2hEO1lBQ0QsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUlPLGNBQWMsQ0FBQyxPQUFZLEVBQUUsU0FBYyxFQUFFLEtBQWE7UUFDaEUsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN4RTthQUFNO1lBQ0wsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNsRCxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2lCQUNyQztnQkFDRCxTQUFTLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzlDO2lCQUFNO2dCQUNMLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDekI7U0FDRjtJQUNILENBQUM7SUFFTyxjQUFjLENBQUMsU0FBYyxFQUFFLEtBQWE7UUFDbEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQy9EO2FBQU07WUFDTCxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEVBQXlCO1FBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFTyxPQUFPO1FBQ2IsTUFBTSxFQUFFLEdBQTBCO1lBQ2hDLElBQUksRUFBRSxFQUFFO1lBQ1IsT0FBTyxFQUFFLEVBQUU7WUFDWCxLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxFQUFFO1lBQ1YsSUFBSSxFQUFFLEVBQUU7WUFDUixhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUF5QjtRQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQ3BELHFCQUFxQixFQUNyQixXQUFXLEVBQ1gsSUFBSSxFQUNKLElBQUksQ0FDTCxDQUFDO1FBQ0YsK0NBQStDO1FBQy9DLHdDQUF3QztRQUN4Qyw4QkFBOEI7UUFDOUIsTUFBTSxZQUFZLEdBQUc7WUFDbkIsSUFBSSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU07WUFDOUQsY0FBYyxFQUFFLElBQUk7WUFDcEIsS0FBSyxFQUFFLEdBQUc7WUFDVixRQUFRLEVBQUUsR0FBRztZQUNiLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxDQUFDO1lBQ1osU0FBUyxFQUFFLEVBQUU7WUFDYixLQUFLLEVBQUUsT0FBTztZQUNkLFFBQVEsRUFBRSxzQ0FBc0M7WUFDaEQsUUFBUSxFQUFFLEtBQUs7WUFDZixTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJO1lBQ2IscUJBQXFCO1lBQ3JCLGlCQUFpQjtZQUNqQiw0QkFBNEI7WUFDNUIsc0JBQXNCO1lBQ3RCLHFCQUFxQjtZQUNyQixxQkFBcUI7WUFDckIsMkJBQTJCO1NBQzVCLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRztZQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2pELENBQUM7UUFFRiw0RkFBNEY7UUFDNUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWxILEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUF3QixFQUFFLEVBQUU7WUFDM0MsSUFBSSxTQUFTLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtnQkFDdkMsT0FBTzthQUNSO1lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDakIsT0FBTyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzthQUN0QjtZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RSxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDckUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsa0RBQWtEO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxFQUF5QjtRQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUNuRDtZQUNFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFpQjtZQUNwRCxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBaUI7U0FDcEQsQ0FBQzthQUNELFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pFLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDckUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFpQixDQUFDO1FBQ3hDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1lBQ2xFLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ2IsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxRSxPQUFPLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVELE9BQU87U0FDUjtRQUVELEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2FBQ2IsSUFBSTtRQUNILHdCQUF3QjtRQUN4QixtREFBbUQ7UUFDbkQsMENBQTBDO1FBQzFDLE1BQU07UUFDTixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FDaEMsS0FBSyxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQ3pDLEtBQUssQ0FBQyxNQUFNLENBQ2I7aUJBQ0UsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLGlDQUFpQyxDQUFDLENBQUMsQ0FDdkUsQ0FBQztRQUNOLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDekQsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksRUFBRTtnQkFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUI7WUFDRCxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsa0NBQWtDO1lBQ2xDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO2FBQ0osU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUdELDREQUE0RDtJQUNyRCxnQkFBZ0I7UUFDckIsTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1FBQ3ZHLElBQUksd0JBQXdCLEVBQUU7WUFDNUIsd0JBQXdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBRU8sNkJBQTZCLENBQUMsS0FBVTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO1FBRXhDLGtCQUFrQjtRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRTthQUM1QixHQUFHLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUMzRyxHQUFHLENBQUMsS0FBSyxFQUFDLEdBQUcsRUFBQyxFQUFFO1lBQ2QsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUUxQixJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3RCLFFBQVEsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDO2FBQy9CO1lBRUQsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3hCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtvQkFDNUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUM1RCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsSUFBSSxHQUFHLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzlCLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7b0JBQ3hELGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUM5RSxDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQ3pELGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQy9ELHdCQUF3QixFQUFFLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNO2FBQ2xGLENBQUM7WUFFRiw4QkFBOEI7WUFDOUIsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLFlBQVksRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDOUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNwQixZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ3hCLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDeEIsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDN0IsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUNqQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQ2pDLGVBQWUsRUFBRSxTQUFTLENBQUMsT0FBTztnQkFDbEMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLFVBQVU7Z0JBQ3hDLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRztnQkFDMUIsWUFBWSxFQUFFLFNBQVMsQ0FBQyxJQUFJO2FBQzdCLENBQUM7WUFFRixJQUFJLGVBQWUsR0FBRztnQkFDcEIsY0FBYyxFQUFFLE1BQU07Z0JBQ3RCLGdCQUFnQixFQUFFLE1BQU07Z0JBQ3hCLGdCQUFnQixFQUFFLE1BQU07YUFDekIsQ0FBQztZQUVGLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDaEIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQTtnQkFDaEMsZUFBZSxHQUFHO29CQUNoQixjQUFjLEVBQUUsV0FBVyxDQUFDLEVBQUU7b0JBQzlCLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxJQUFJO29CQUNsQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsSUFBSTtpQkFDbkMsQ0FBQTthQUNGO1lBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBRWpGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQ3BELDJCQUEyQixFQUMzQixXQUFXLEVBQ1gsSUFBSSxFQUNKLElBQUksQ0FDTCxDQUFDO1lBQ0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNoSSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBd0IsRUFBRSxFQUFFO2dCQUMzQyxJQUFJLFNBQVMsQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO29CQUN2QyxPQUFPO2lCQUNSO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFHRCxhQUFhLENBQUMsR0FBbUIsRUFBRSxVQUFrQjtRQUNuRCxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7WUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQzthQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtZQUN2RSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLEVBQUU7Z0JBQ2pDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUM5RSxHQUFHLFVBQVUsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbkY7YUFDRjtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFRO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsQ0FBQzs7b0hBbHRCVSxzQkFBc0I7d0hBQXRCLHNCQUFzQixjQUZyQixNQUFNOzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJb25pY1NlbGVjdGFibGVDb21wb25lbnQgfSBmcm9tICdpb25pYy1zZWxlY3RhYmxlJztcclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG9mLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAsIHN3aXRjaE1hcCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0QnV0dG9uLCBBbGVydFNlcnZpY2UsIEF1dGhTZXJ2aWNlLCBGaWVsZFNlcnZpY2UsIE1FU1NBR0VUWVBFLFxyXG4gIFJlc291cmNlQXBpU2VydmljZSwgVG9hc3RTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsXHJcbiAgWkZpZWxkLCBaR3JvdXAsIFpUcmVlVGVtcGxhdGVQYXJhbXNcclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IE1vZGFsUmVzcG9uc2UsIE1vZGFsU2VydmljZSB9IGZyb20gJ21taGdsb2JhbC16bW9kYWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgWkNvbXBvbmVudERlYnVnU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIHByaXZhdGUgc2NvcGU6IGFueTtcclxuXHJcbiAgZ2V0IGRlYnVnKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5zY29wZS5ncm91cC5fZGVidWc7XHJcbiAgfVxyXG5cclxuICBnZXQgZ3JvdXAoKTogWkdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLnNjb3BlLmdyb3VwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSW5pdERlYnVnZ2VyKGdyb3VwOiBaR3JvdXApIHtcclxuICAgIGdyb3VwLl9kZWJ1ZyA9IG5ldyBaR3JvdXAodHJ1ZSk7XHJcbiAgICBncm91cC5faXNEZWJ1Z2dpbmcgPSB0cnVlO1xyXG4gICAgZ3JvdXAuX2RlYnVnLnpEYXRhID0ge1xyXG4gICAgICBjb2xsZWN0ZWRBY3Rpdml0aWVzOiBbXSxcclxuICAgICAgYWN0aXZpdHlDb3VudDogMCxcclxuICAgICAgY29sbGVjdGVkV29ya2Zsb3dCdXR0b25zOiBbXSxcclxuICAgICAgd29ya2Zsb3dCdXR0b25Db3VudDogMFxyXG4gICAgfTtcclxuICAgIGdyb3VwLl9kZWJ1Zy56Q29tcG9uZW50cyA9IHt9O1xyXG4gICAgZ3JvdXAuaXNMaXN0Rm9ybSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBvblN0YXJ0RGVidWdnZXIoZmllbGRFbGVtZW50czogQXJyYXk8WkZpZWxkPiwgbWU6IGFueSkge1xyXG4gICAgdGhpcy5zY29wZSA9IG1lO1xyXG4gICAgaWYgKCFtZS5ncm91cC5fZGVidWcpIHtcclxuICAgICAgbWUuZ3JvdXAuX2RlYnVnID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZDogWkdyb3VwID0gbWUuZ3JvdXAuX2RlYnVnO1xyXG4gICAgbWUuZm9ybSA9IG1lLnRvRm9ybUdyb3VwKGZpZWxkRWxlbWVudHMpO1xyXG4gICAgZC5mb3JtID0gbWUuZm9ybTtcclxuICAgIGlmIChtZS5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgbWUuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkLCB7XHJcbiAgICAgIC8vIHpEYXRhOiB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH0sXHJcbiAgICAgIHpNb2RlbDoge30sXHJcbiAgICAgIHN1YmplY3Q6IG5ldyBCZWhhdmlvclN1YmplY3Q8WkNvbXBvbmVudE91dHB1dEV2ZW50PihudWxsKSxcclxuICAgICAgaXNFZGl0OiB0cnVlLFxyXG4gICAgICBpc05ldzogZmFsc2UsXHJcbiAgICAgIF9kZWJ1ZzogbWUuZ3JvdXAuX2RlYnVnLFxyXG4gICAgICBfZ3JvdXA6IG1lLmdyb3VwLFxyXG4gICAgICByZXNvdXJjZVVSTDogdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZCcpLFxyXG4gICAgICB0cmVlSXRlbVRlbXBsYXRlOiB0aGlzLnRyZWVJdGVtVGVtcGxhdGUsXHJcbiAgICAgIG9uSXRlbUNsaWNrOiB0aGlzLm9uSXRlbUNsaWNrLFxyXG4gICAgICBvblRyZWVOb2RlQ2hhbmdlOiB0aGlzLm9uVHJlZU5vZGVDaGFuZ2UsXHJcbiAgICAgIG9uQWRkTm9kZTogdGhpcy5vbkFkZE5vZGUsXHJcbiAgICAgIG9uUmVtb3ZlTm9kZTogdGhpcy5vblJlbW92ZU5vZGUsXHJcbiAgICAgIHRyZWVOb2Rlc0V4cGFuZEFsbDogdGhpcy50cmVlTm9kZXNFeHBhbmRBbGwsXHJcbiAgICAgIHRyZWVOb2Rlc0NvbGxhcHNlQWxsOiB0aGlzLnRyZWVOb2Rlc0NvbGxhcHNlQWxsLFxyXG4gICAgICByZWZyZXNoVHJlZU1vZGVsOiB0aGlzLnJlZnJlc2hUcmVlTW9kZWwsXHJcbiAgICAgIGFkZE5vZGU6IHRoaXMuYWRkTm9kZSxcclxuICAgICAgcmVmcmVzaEFjdGl2aXR5TG9nRGF0YTogdGhpcy5Mb2FkR3JpZERhdGEuYmluZCh0aGlzKSxcclxuICAgICAgR29Ub0ZpZWxkRWxlbWVudDogdGhpcy5nb3RvRmllbGRFbGVtZW50LmJpbmQodGhpcyksXHJcbiAgICAgIExpc3RXYXRjaE5hbWU6IHRoaXMubGlzdFdhdGNoTmFtZSxcclxuICAgICAgb25DaGFuZ2VXYXRjaE5hbWU6IHRoaXMub25DaGFuZ2VXYXRjaE5hbWUuYmluZCh0aGlzKSxcclxuICAgICAgZ2V0V2F0Y2hOYW1lOiB0aGlzLmdldFdhdGNoTmFtZS5iaW5kKHRoaXMpLFxyXG4gICAgICBmaWVsZEVsZW1lbnRvbkVkaXRvckNvZGVDaGFuZ2U6IHRoaXMuZmllbGRFbGVtZW50b25FZGl0b3JDb2RlQ2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIGdyaWRBY3Rpdml0eUxvZ0NvbHVtbkZpZWxkczogdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICAnZGVidWdBY3Rpdml0eUxvZycsXHJcbiAgICAgICAgXCJGb3JtRmllbGRcIixcclxuICAgICAgICB0aGlzLmdyb3VwLFxyXG4gICAgICAgIFwiZGVidWdBY3Rpdml0eUxvZ0ZpZWxkXCJcclxuICAgICAgKSxcclxuICAgICAgZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2s6IHRoaXMuZ3JpZEFjdGl2aXR5TG9nT25JdGVtQ2xpY2suYmluZCh0aGlzKSxcclxuICAgICAgdXBkYXRlTW9kZWw6IHRoaXMudXBkYXRlTW9kZWwuYmluZCh0aGlzKSxcclxuICAgICAgcmVmcmVzaFdvcmtmbG93QnV0dG9uRGF0YTogdGhpcy5sb2FkV29ya2Zsb3dEYXRhLmJpbmQodGhpcyksXHJcbiAgICAgIGdyaWRXb3JrZmxvd0J1dHRvbkNvbHVtbkZpZWxkczogdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICAnZGVidWdXb3JrZmxvd0J1dHRvbicsXHJcbiAgICAgICAgJ0Zvcm1GaWVsZCcsXHJcbiAgICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgICBcImRlYnVnV29ya2Zsb3dCdXR0b25GaWVsZFwiXHJcbiAgICAgICksXHJcbiAgICAgIGdyaWRXb3JrZmxvd0J1dHRvbk9uSXRlbUNsaWNrOiB0aGlzLmdyaWRXb3JrZmxvd0J1dHRvbk9uSXRlbUNsaWNrLmJpbmQodGhpcylcclxuICAgIH0pO1xyXG4gICAgaWYgKCFkLnpEYXRhKSB7XHJcbiAgICAgIGQuekRhdGEgPSB7IGNvbGxlY3RlZEFjdGl2aXRpZXM6IFtdLCBhY3Rpdml0eUNvdW50OiAwIH07XHJcbiAgICB9XHJcblxyXG4gICAgbWUuc3Vic2NyaXB0aW9uID0gZC5zdWJqZWN0LnN1YnNjcmliZSgoZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCkgPT5cclxuICAgICAgdGhpcy5zdWJqZWN0RXZlbnQoZXZlbnQsIGQsIHRoaXMpXHJcbiAgICApO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRGaWVsZHNEaXZDbGFzcyh0aGlzLmdyb3VwLl9wcm9qZWN0TmFtZSwgdGhpcy5ncm91cC5maWVsZE5hbWUsIGZpZWxkRWxlbWVudHMsIHRoaXMuYXV0aFNlcnZpY2UpO1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZERlYnVnWk1vZGVsKG1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZERlYnVnWk1vZGVsKG1lOiBhbnkpIHtcclxuICAgIGNvbnN0IGQ6IFpHcm91cCA9IG1lLmdyb3VwLl9kZWJ1ZztcclxuXHJcbiAgICBjb25zdCBkb3dubG9hZExpc3QgPSBbXTtcclxuICAgIGRvd25sb2FkTGlzdC5wdXNoKHRoaXMuZ2V0UHJvamVjdElkKCkpO1xyXG5cclxuICAgIGNvbnN0IGZvcm1UeXBlID0gbWUuZ3JvdXAuaXNMaXN0Rm9ybSA/ICdMaXN0RmllbGQnIDogJ0Zvcm1GaWVsZCc7XHJcbiAgICBjb25zdCBmaWVsZE5hbWUgPSBtZS5ncm91cC5maWVsZE5hbWU7XHJcbiAgICBjb25zdCBmaWVsZHpNb2RlbCA9IHRoaXMuZ2V0RmllbGR6TW9kZWwoZm9ybVR5cGUsIGZpZWxkTmFtZSk7XHJcbiAgICBkb3dubG9hZExpc3QucHVzaChmaWVsZHpNb2RlbCk7XHJcblxyXG4gICAgcmV0dXJuIGZvcmtKb2luKGRvd25sb2FkTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFByb2plY3RJZCgpIHtcclxuICAgIGNvbnN0IGQgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdwcm9qZWN0c1VSTCcpO1xyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5nZXRBcGkodXJsLCB7fSwgZC56RGF0YSwgJ1Byb2plY3RPcHRpb25zJywgbnVsbCwgZCwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaWVsZHpNb2RlbCh0eXBlOiBzdHJpbmcsIGFjdGl2aXR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gJ0Zvcm1GaWVsZCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybUZpZWxkek1vZGVsKGFjdGl2aXR5TmFtZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRMaXN0RmllbGR6TW9kZWwoYWN0aXZpdHlOYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Rm9ybUZpZWxkek1vZGVsKGFjdGl2aXR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkOiBaR3JvdXAgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZCcpO1xyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwR2V0JCh1cmwsIHsgbmFtZTogYWN0aXZpdHlOYW1lLCB0eXBlOiAnRm9ybUZpZWxkJyB9KS5waXBlKFxyXG4gICAgICB0YXAoKHJlc3BEYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygncmVzcERhdGE6ICcsIHJlc3BEYXRhKTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGQuek1vZGVsLCByZXNwRGF0YSk7XHJcbiAgICAgICAgZC5mb3JtLnBhdGNoVmFsdWUoZC56TW9kZWwpO1xyXG4gICAgICAgIGQuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IEpTT04ucGFyc2UoZC56TW9kZWwuQ29kZSk7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkLCB7XHJcbiAgICAgICAgICB0cmVlTW9kZWw6IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChmaWVsZHMpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRMaXN0RmllbGR6TW9kZWwoYWN0aXZpdHlOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGQgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZHNNYXBwaW5nJyk7XHJcbiAgICBjb25zdCB1cmwyID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKCdmaWVsZCcpO1xyXG4gICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwR2V0JCh1cmwsIHsgbmFtZTogYWN0aXZpdHlOYW1lIH0pLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgoZmllbGRNYXBwaW5nOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnZmllbGRNYXBwaW5nOiAnLCBmaWVsZE1hcHBpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cEdldCQodXJsMiwgeyBpZDogZmllbGRNYXBwaW5nLkZpZWxkRWxlbWVudE1hc3RlcklkIH0pO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKChyZXNwRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkLnpNb2RlbCwgcmVzcERhdGEpO1xyXG4gICAgICAgIGQuZm9ybS5wYXRjaFZhbHVlKGQuek1vZGVsKTtcclxuICAgICAgICBkLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICBjb25zdCBmaWVsZHMgPSBKU09OLnBhcnNlKGQuek1vZGVsLkNvZGUpO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZCwge1xyXG4gICAgICAgICAgdHJlZU1vZGVsOiBaQ29tcG9uZW50SGVscGVyLmNvbnZlcnRUcmVlTW9kZWwoZmllbGRzKVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKVxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgc3ViamVjdEV2ZW50KGV2ZW50OiBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIGdyb3VwOiBaR3JvdXAsIG1lOiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LnRhcmdldCB8fCBldmVudC50YXJnZXQuc3RhcnRzV2l0aChcIm1vZGFsR3JvdXAuXCIpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKFwiKiogRGVidWcgLSBTdWJqZWN0RXZlbnRcIiwgZXZlbnQpO1xyXG4gICAgbGV0IGNhbGxGdW5jO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNhbGxGdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgIG1lLFxyXG4gICAgICAgIGV2ZW50LnRhcmdldFxyXG4gICAgICApO1xyXG4gICAgICAvLyBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoZXZlbnQuVGFyZ2V0LCBncm91cCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgXCJFcnJvciB3aGVuIGdldEdyb3VwVmFsdWU6IFwiLFxyXG4gICAgICAgIGV2ZW50LnRhcmdldCxcclxuICAgICAgICBcIiA+IEVycm9yOiBcIixcclxuICAgICAgICBlcnJvclxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICBjb25zdCBuZXdGdW5jID0gY2FsbEZ1bmMuYmluZChtZSk7XHJcbiAgICAgIG5ld0Z1bmMoZXZlbnQsIGdyb3VwLCBtZSk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBpZiAoZXZlbnQudHlwZS5lbmRzV2l0aChcIm9uTmF2aWdhdGVUb1wiKSkge1xyXG4gICAgICAgIGNvbnN0IG5VcmwgPSBldmVudC50YXJnZXQucmVwbGFjZShcIi86aWRcIiwgXCIvXCIgKyBldmVudC5kYXRhKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbblVybF0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiemdyaWQtY2VsbENsaWNrXCIpIHtcclxuICAgICAgICAvLyAoY2FsbEZ1bmMuc3RhcnRzV2l0aCgnZWRpdCcpKSB7ICB6Z3JpZC1jZWxsQ2xpY2tcclxuICAgICAgICBjb25zdCBjTmFtZSA9IGNhbGxGdW5jLnNsaWNlKDQpO1xyXG4gICAgICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgICAgIC8vIGNvbnN0IG1vZGFsR3JvdXBQYXJhbTogTW9kYWxQYWdlUGFyYW1zID0ge307XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLmNvbnRyb2xsZXJOYW1lID0gY05hbWU7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLnJlZmVySWQgPSBldmVudC5kYXRhLklkO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5jb2xGaWVsZHMkID0gZXZlbnQuY29sdW1uRmllbGRzJDtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0ucGFyZW50R3JvdXAgPSBtZS5ncm91cDtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5vcGVuTW9kYWxGb3JtKG1vZGFsR3JvdXBQYXJhbSk7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhldmVudC5jb2x1bW5GaWVsZHMkIHx8IGNOYW1lLCBncm91cCwgJycsIG51bGwsIG51bGwsIHt9LCBldmVudC5kYXRhLklkKTsgLy8gVE9ET1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJ6Z3JpZC1jZWxsQ2xpY2tcIikge1xyXG4gICAgICAgIGlmIChjYWxsRnVuYy5uYXZpZ2F0ZVVybCkge1xyXG4gICAgICAgICAgY29uc3QgdXJsID0gY2FsbEZ1bmMubmF2aWdhdGVVcmwucmVwbGFjZShcIjppZFwiLCBldmVudC5kYXRhLklkKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNvbnN0IG1vZGFsR3JvdXBQYXJhbTogTW9kYWxQYWdlUGFyYW1zID0ge307XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLmNvbnRyb2xsZXJOYW1lID0gY2FsbEZ1bmMuY3RybE5hbWU7XHJcbiAgICAgICAgLy8gbW9kYWxHcm91cFBhcmFtLnJlZmVySWQgPSBldmVudC5kYXRhLklkO1xyXG4gICAgICAgIC8vIG1vZGFsR3JvdXBQYXJhbS5jb2xGaWVsZHMkID0gZXZlbnQuY29sdW1uRmllbGRzJDtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0ucGFyZW50R3JvdXAgPSBtZS5ncm91cDtcclxuICAgICAgICAvLyBtb2RhbEdyb3VwUGFyYW0uZm9ybUhlYWRlciA9IGNhbGxGdW5jLmZvcm1IZWFkZXI7XHJcblxyXG4gICAgICAgIGlmIChjYWxsRnVuYy5mb3JtSGVhZGVyKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLm9wZW5Nb2RhbEZvcm0obW9kYWxHcm91cFBhcmFtKTtcclxuXHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5zaG93KGV2ZW50LmNvbHVtbkZpZWxkcyQgfHwgY2FsbEZ1bmMuY3RybE5hbWUsIGdyb3VwLCBjYWxsRnVuYy5mb3JtSGVhZGVyLCBudWxsLCBudWxsLCB7fSwgZXZlbnQuZGF0YS5JZCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiSW52YWxpZCBjYWxsRnVuYyB0eXBlOiBcIixcclxuICAgICAgICAgIGNhbGxGdW5jLFxyXG4gICAgICAgICAgXCIgZXZlbnQuVGFyZ2V0OiBcIixcclxuICAgICAgICAgIGV2ZW50LnRhcmdldFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdGhpcy5vcGVuTW9kYWxGb3JtQnlDb21wb25lbnQoY2FsbEZ1bmMudHlwZSwgZXZlbnQuRGF0YS5JZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgXCJGdW5jdGlvbiBub3QgZGVmaW5lZCBpbiBncm91cCBmb3I6IFwiLFxyXG4gICAgICAgIGV2ZW50LnRhcmdldCxcclxuICAgICAgICBcIiwgRXZlbnQ6IFwiLFxyXG4gICAgICAgIGV2ZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdyaWRBY3Rpdml0eUxvZ09uSXRlbUNsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdncmlkQWN0aXZpdHlMb2dPbkl0ZW1DbGljazogJywgZXZlbnQpO1xyXG4gICAgY29uc3QgcmVjID0gZXZlbnQuZGF0YUl0ZW07XHJcbiAgICBzd2l0Y2ggKHJlYy50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ0xpc3RGaWVsZCc6XHJcbiAgICAgIGNhc2UgJ0Zvcm1GaWVsZCc6XHJcbiAgICAgICAgdGhpcy5nZXRGaWVsZHpNb2RlbChyZWMudHlwZSwgcmVjLmFjdGl2aXR5TmFtZSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0VGFiKDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdSZXNvdXJjZVNlcnZlckFQSSc6XHJcbiAgICAgICAgY29uc3Qgd2F0Y2hOYW1lVmFsdWUgPSAnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXNbJyArIChyZWMuaW5kZXggLSAxKSArICddLnJlZmVyZW5jZSc7XHJcbiAgICAgICAgdGhpcy5zZXRXYXRjaE5hbWVWYWx1ZSh3YXRjaE5hbWVWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUYWIoMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0h0dHBHZXQkJzpcclxuICAgICAgY2FzZSAnSHR0cFBvc3QkJzpcclxuICAgICAgY2FzZSAnSHR0cFB1dCQnOlxyXG4gICAgICBjYXNlICdIdHRwRGVsZXRlJCc6XHJcbiAgICAgICAgdGhpcy5zZXRXYXRjaE5hbWVWYWx1ZSgnX2RlYnVnLnpEYXRhLmNvbGxlY3RlZEFjdGl2aXRpZXNbJyArIChyZWMuaW5kZXggLSAxKSArICddJyk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RUYWIoMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdFRhYihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAvLyBkZWJ1Z2dlcjtcclxuICAgIC8vIHRoaXMuZGVidWcuekNvbXBvbmVudHNbXCJ6dGFiX2RlYnVnZ2VyVGFic1wiXS5zdGF0ZS5sYXN0U2VsZWN0ZWRUYWJJbmRleCA9IGluZGV4O1xyXG4gICAgLy8gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnQodGhpcy5kZWJ1ZywgJ3p0YWJfZGVidWdnZXJUYWJzJykuc3RhdGUubGFzdFNlbGVjdGVkVGFiSW5kZXggPSBpbmRleDtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6dGFiX2RlYnVnZ2VyVGFicycpLnNlbGVjdFRhYihpbmRleCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFdhdGNoTmFtZVZhbHVlKG5ld1ZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGVidWcuek1vZGVsWydEZWJ1Z1dhdGNoTmFtZSddID0gbmV3VmFsdWU7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoJ1dhdGNoTmFtZScsIG5ld1ZhbHVlLCB0aGlzLmRlYnVnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBMb2FkR3JpZERhdGEoKSB7XHJcbiAgICBjb25zdCBhY3Rpdml0eUxvZ0dyaWQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmRlYnVnLCAnemdyaWRfQWN0aXZpdHlMb2dHcmlkJyk7XHJcbiAgICBpZiAoYWN0aXZpdHlMb2dHcmlkKSB7XHJcbiAgICAgIGFjdGl2aXR5TG9nR3JpZC5zZXREYXRhKHRoaXMuZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxpc3RXYXRjaE5hbWUoY29tcG9uZW50OiBJb25pY1NlbGVjdGFibGVDb21wb25lbnQsIHNlYXJjaFRleHQ6IHN0cmluZywgcGFnZU5vOiBudW1iZXIsXHJcbiAgICBtZTogYW55LCBkYXRhSXRlbTogYW55LCByZWNvcmRJZD86IHN0cmluZykge1xyXG5cclxuICAgIGNvbnN0IHdhdGNoTGlzdCA9IFtcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuek1vZGVsJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC56RGF0YScgfSxcclxuICAgICAgeyBOYW1lOiAnZ3JvdXAuZmllbGRzJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5mb3JtLnZhbHVlJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5iYWNrTmF2aWdhdGlvblBhZ2UnIH0sXHJcbiAgICAgIHsgTmFtZTogJ2dyb3VwLnBhcmVudFJlZmVyZW5jZUZpZWxkJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5wYXJlbnRSZWZlcmVuY2VJZCcgfSxcclxuICAgICAgeyBOYW1lOiAnT2JqZWN0LmtleXMoZ3JvdXAuekNvbXBvbmVudHMpJyB9LFxyXG4gICAgICB7IE5hbWU6ICdncm91cC5ncmlkT3B0aW9ucy56Z3JpZC5ncmlkLmRhdGEnIH1cclxuICAgICAgLy8geyBOYW1lOiAnT2JqZWN0LmtleXMoX2RlYnVnLnpDb21wb25lbnRzKScgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpNb2RlbCcgfSxcclxuICAgICAgLy8geyBOYW1lOiAnX2RlYnVnLnpEYXRhJyB9LFxyXG4gICAgICAvLyB7IE5hbWU6ICdfZGVidWcuekRhdGEuY29sbGVjdGVkQWN0aXZpdGllcycgfSxcclxuICAgIF07XHJcblxyXG4gICAgbGV0IHJlc3VsdHM7XHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICByZXN1bHRzID0gd2F0Y2hMaXN0LmZpbHRlcigocykgPT4gcy5OYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpICE9PSAtMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhZ2VObyA9PT0gMCAmJiBzZWFyY2hUZXh0KSB7XHJcbiAgICAgIHJldHVybiBvZih7IGRhdGFTZXQ6IHJlc3VsdHMgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBhZ2VObyA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gb2YoeyBkYXRhU2V0OiB3YXRjaExpc3QgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gb2YoeyBkYXRhU2V0OiBbXSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0V2F0Y2hOYW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGVidWcuek1vZGVsLkRlYnVnV2F0Y2hOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkNoYW5nZVdhdGNoTmFtZShldmVudDogYW55LCBncm91cDogWkdyb3VwLCBtZTogYW55KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnb25DaGFuZ2VXYXRjaE5hbWU6ICcsIGV2ZW50LmRhdGEudmFsdWUpO1xyXG4gICAgY29uc3QgbmV3VmFsdWUgPSBldmVudC5kYXRhLnZhbHVlO1xyXG4gICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZGVidWcuek1vZGVsWydEZWJ1Z1dhdGNoTmFtZSddID0gbmV3VmFsdWUucmVwbGFjZSgnZ3JvdXAnLCAnX2dyb3VwJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpZWxkRWxlbWVudG9uRWRpdG9yQ29kZUNoYW5nZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLnJlZnJlc2hUcmVlTW9kZWwoKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIHRyZWVOb2Rlc0V4cGFuZEFsbCgpIHtcclxuICAgIHRoaXMuZGVidWcuekNvbXBvbmVudHNbJ3p0cmVlX2RlYnVnWlRyZWUnXS5leHBhbmRBbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJlZU5vZGVzQ29sbGFwc2VBbGwoKSB7XHJcbiAgICB0aGlzLmRlYnVnLnpDb21wb25lbnRzWyd6dHJlZV9kZWJ1Z1pUcmVlJ10uY29sbGFwc2VBbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVmcmVzaFRyZWVNb2RlbCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGQgPSBKU09OLnBhcnNlKHRoaXMuZGVidWcuek1vZGVsLkNvZGUpO1xyXG4gICAgICAvLyB0aGlzLl9hZGROb2Rlc1RvVHJlZShkKTtcclxuICAgICAgLy8gZ3JvdXBbJ3RyZWVNb2RlbCddID0gdGhpcy5jb252ZXJ0VHJlZU1vZGVsKGQpO1xyXG4gICAgICB0aGlzLmRlYnVnWyd0cmVlTW9kZWwnXSA9IFpDb21wb25lbnRIZWxwZXIuY29udmVydFRyZWVNb2RlbChkKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICBkZWJ1Z2dlcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJlZUl0ZW1UZW1wbGF0ZShlbDogWlRyZWVUZW1wbGF0ZVBhcmFtcykge1xyXG4gICAgY29uc3QgZ2V0RmllbGRWYWx1ZSA9IChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBpdGVtLl9EYXRhVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBcIi4uLlwiO1xyXG4gICAgfTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGVsLmRhdGFJdGVtLk5hbWUgK1xyXG4gICAgICBcIiAtIFtcIiArXHJcbiAgICAgIGVsLmRhdGFJdGVtLlR5cGUgK1xyXG4gICAgICBcIl0gPSBcIiArXHJcbiAgICAgIGdldEZpZWxkVmFsdWUoZWwuZGF0YUl0ZW0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25JdGVtQ2xpY2soZXZlbnQ6IFpDb21wb25lbnRPdXRwdXRFdmVudCkge1xyXG4gICAgLy8gZGVidWdnZXI7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uSXRlbUNsaWNrIGRhdGEgcmVjZWl2ZWQ6IFwiLCBldmVudCk7XHJcbiAgICBjb25zdCBtb2RhbEZpZWxkcyA9IHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoXHJcbiAgICAgIFwibXZFZGl0RmllbGROb2RlRm9ybVwiLFxyXG4gICAgICBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICBudWxsLFxyXG4gICAgICBudWxsXHJcbiAgICApO1xyXG4gICAgY29uc3QgZGF0YUl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBldmVudC5kYXRhKTtcclxuICAgIGRhdGFJdGVtLlZhbHVlID0gZGF0YUl0ZW0uX0RhdGFWYWx1ZTtcclxuICAgIGRlbGV0ZSBkYXRhSXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgY29uc3Qgem1vZGVsID0ge1xyXG4gICAgICBub2RlTW9kZWw6IEpTT04uc3RyaW5naWZ5KGRhdGFJdGVtLCBudWxsLCAyKVxyXG4gICAgfTtcclxuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbEZpZWxkcywgdGhpcy5kZWJ1Zy5fZ3JvdXAsICdGaWVsZCBFbGVtZW50IEluZm8nLCBudWxsLCBudWxsLCB6bW9kZWwpO1xyXG4gICAgbW9kYWwuc3Vic2NyaWJlKChtb2RhbERhdGE6IE1vZGFsUmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKG1vZGFsRGF0YS5yZXNwb25zZVR5cGUgPT09IFwiY2FuY2VsXCIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbmV3RGF0YSA9IEpTT04ucGFyc2UobW9kYWxEYXRhLmRhdGEubm9kZU1vZGVsKTtcclxuICAgICAgaWYgKG5ld0RhdGEuVmFsdWUpIHtcclxuICAgICAgICBuZXdEYXRhLl9EYXRhVmFsdWUgPSBuZXdEYXRhLlZhbHVlO1xyXG4gICAgICAgIG5ld0RhdGEuVmFsdWUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlVHJlZU5vZGUobmV3RGF0YSwgdGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10sIGV2ZW50LmV2ZW50KTtcclxuICAgICAgY29uc3QgbmV3VHJlZU1vZGVsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRlYnVnWyd0cmVlTW9kZWwnXSkpO1xyXG4gICAgICBjb25zdCByZXZlcnRlZE1vZGVsID0gWkNvbXBvbmVudEhlbHBlci5yZXZlcnRUcmVlTW9kZWwobmV3VHJlZU1vZGVsKTtcclxuICAgICAgY29uc3QgbmV3Q29kZSA9IEpTT04uc3RyaW5naWZ5KHJldmVydGVkTW9kZWwsIG51bGwsIDIpO1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoXCJDb2RlXCIsIG5ld0NvZGUsIHRoaXMuZGVidWcpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKCk7XHJcbiAgICAgIC8vIHRoaXMubWFpblNlcnZpY2UudXBkYXRlTW9kZWwobnVsbCwgdGhpcy5kZWJ1Zyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVHJlZU5vZGUobmV3Tm9kZTogYW55LCB0cmVlTW9kZWw6IGFueSwgaW5kZXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgdHJlZUluZGV4ID0gaW5kZXguc3BsaXQoXCJfXCIpO1xyXG4gICAgaWYgKHRyZWVJbmRleC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdHJlZUluZGV4LnNsaWNlKDEpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRyZWVOb2RlKG5ld05vZGUsIHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSwgbmV3SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld05vZGUuVmFsdWUgPSB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dID0gbmV3Tm9kZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRUcmVlTm9kZShuZXdOb2RlOiBhbnksIHRyZWVNb2RlbDogYW55LCBpbmRleDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCB0cmVlSW5kZXggPSBpbmRleC5zcGxpdChcIl9cIik7XHJcbiAgICBpZiAodHJlZUluZGV4Lmxlbmd0aCA+IDEpIHtcclxuICAgICAgY29uc3QgbmV3SW5kZXggPSB0cmVlSW5kZXguc2xpY2UoMSkuam9pbihcIl9cIik7XHJcbiAgICAgIHRoaXMuaW5zZXJ0VHJlZU5vZGUobmV3Tm9kZSwgdHJlZU1vZGVsWyt0cmVlSW5kZXhbMF1dLlZhbHVlLCBuZXdJbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodHJlZUluZGV4WzBdKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSkpIHtcclxuICAgICAgICAgIHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmVlTW9kZWxbK3RyZWVJbmRleFswXV0uVmFsdWUucHVzaChuZXdOb2RlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0cmVlTW9kZWwucHVzaChuZXdOb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVUcmVlTm9kZSh0cmVlTW9kZWw6IGFueSwgaW5kZXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgdHJlZUluZGV4ID0gaW5kZXguc3BsaXQoXCJfXCIpO1xyXG4gICAgaWYgKHRyZWVJbmRleC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gdHJlZUluZGV4LnNsaWNlKDEpLmpvaW4oXCJfXCIpO1xyXG4gICAgICB0aGlzLnJlbW92ZVRyZWVOb2RlKHRyZWVNb2RlbFsrdHJlZUluZGV4WzBdXS5WYWx1ZSwgbmV3SW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJlZU1vZGVsLnNwbGljZSgrdHJlZUluZGV4WzBdLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25UcmVlTm9kZUNoYW5nZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uVHJlZU5vZGVDaGFuZ2U6IFwiLCBlbCk7XHJcbiAgICBjb25zdCBjb2RlRGF0YSA9IEpTT04uc3RyaW5naWZ5KGVsLmRhdGEpO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBjb2RlRGF0YSwgdGhpcy5kZWJ1Zyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkZE5vZGUoKSB7XHJcbiAgICBjb25zdCBlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50ID0ge1xyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgcm93RGF0YToge30sXHJcbiAgICAgIGV2ZW50OiBcIlwiLFxyXG4gICAgICB0YXJnZXQ6IFwiXCIsXHJcbiAgICAgIHR5cGU6IFwiXCIsXHJcbiAgICAgIGNvbHVtbkZpZWxkcyQ6IG51bGxcclxuICAgIH07XHJcbiAgICB0aGlzLm9uQWRkTm9kZShlbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uQWRkTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZygnb25BZGROb2RlIGlzIGNhbGxlZCcsIGVsKTtcclxuICAgIGNvbnN0IG1vZGFsRmllbGRzID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgXCJtdkVkaXRGaWVsZE5vZGVGb3JtXCIsXHJcbiAgICAgIFwiRm9ybUZpZWxkXCIsXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIG51bGxcclxuICAgICk7XHJcbiAgICAvLyBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGVsLmRhdGEpO1xyXG4gICAgLy8gZGF0YUl0ZW0uVmFsdWUgPSBkYXRhSXRlbS5fRGF0YVZhbHVlO1xyXG4gICAgLy8gZGVsZXRlIGRhdGFJdGVtLl9EYXRhVmFsdWU7XHJcbiAgICBjb25zdCBpbml0aWFsTW9kZWwgPSB7XHJcbiAgICAgIE5hbWU6ICdOYW1lJywgRGlzcGxheU5hbWU6ICdOYW1lJywgVmFsdWU6ICdOYW1lJywgVHlwZTogJ3RleHQnLFxyXG4gICAgICBncmlkQ29sVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgd2lkdGg6IDE1MCxcclxuICAgICAgbWluV2lkdGg6IDEwMCxcclxuICAgICAgZW5hYmxlRmlsdGVyaW5nOiB0cnVlLFxyXG4gICAgICBlbmFibGVTb3J0aW5nOiB0cnVlLFxyXG4gICAgICBwaW5uZWRMZWZ0OiBmYWxzZSxcclxuICAgICAgUGxhY2VIb2xkZXI6IFwiTmFtZVwiLFxyXG4gICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgTWluTGVuZ3RoOiAyLFxyXG4gICAgICBNYXhMZW5ndGg6IDUwLFxyXG4gICAgICBMYWJlbDogXCJOYW1lOlwiLFxyXG4gICAgICBEaXZDbGFzczogXCJjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTYgY29sLWxnLTNcIixcclxuICAgICAgUmVhZE9ubHk6IGZhbHNlLFxyXG4gICAgICBTaG93TGFiZWw6IHRydWUsXHJcbiAgICAgIFZpc2libGU6IHRydWUsXHJcbiAgICAgIC8vRW5hYmxlSGlkaW5nOiB0cnVlLFxyXG4gICAgICAvL2NlbGxGaWx0ZXI6IFwiXCIsXHJcbiAgICAgIC8vZmlsdGVyQ2VsbEZpbHRlcmVkOiBmYWxzZSxcclxuICAgICAgLy9lbmFibGVQaW5uaW5nOiB0cnVlLFxyXG4gICAgICAvL3Bpbm5lZFJpZ2h0OiBmYWxzZSxcclxuICAgICAgLy9VcGRhdGVPbkJsdXI6IHRydWUsXHJcbiAgICAgIC8vQXBwZW5kRGl2Q2xlYXJGaXg6IGZhbHNlLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IHptb2RlbCA9IHtcclxuICAgICAgbm9kZU1vZGVsOiBKU09OLnN0cmluZ2lmeShpbml0aWFsTW9kZWwsIG51bGwsIDIpXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGNvbnN0IG1vZGFsOiBIVE1MSW9uTW9kYWxFbGVtZW50ID0gYXdhaXQgdGhpcy5tYWluU2VydmljZS5vcGVuTW9kYWxGb3JtKG1vZGFsR3JvdXBQYXJhbSk7XHJcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLnNob3cobW9kYWxGaWVsZHMsIHRoaXMuZGVidWcsICdBZGQgRmllbGQgRWxlbWVudCBJdGVtJywgbnVsbCwgbnVsbCwgem1vZGVsKTtcclxuXHJcbiAgICBtb2RhbC5zdWJzY3JpYmUoKG1vZGFsRGF0YTogTW9kYWxSZXNwb25zZSkgPT4ge1xyXG4gICAgICBpZiAobW9kYWxEYXRhLnJlc3BvbnNlVHlwZSA9PT0gXCJjYW5jZWxcIikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBuZXdEYXRhID0gSlNPTi5wYXJzZShtb2RhbERhdGEuZGF0YS5ub2RlTW9kZWwpO1xyXG4gICAgICBpZiAobmV3RGF0YS5WYWx1ZSkge1xyXG4gICAgICAgIG5ld0RhdGEuX0RhdGFWYWx1ZSA9IG5ld0RhdGEuVmFsdWU7XHJcbiAgICAgICAgbmV3RGF0YS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnNlcnRUcmVlTm9kZShuZXdEYXRhLCB0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgIGNvbnN0IG5ld1RyZWVNb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZWJ1Z1sndHJlZU1vZGVsJ10pKTtcclxuICAgICAgY29uc3QgcmV2ZXJ0ZWRNb2RlbCA9IFpDb21wb25lbnRIZWxwZXIucmV2ZXJ0VHJlZU1vZGVsKG5ld1RyZWVNb2RlbCk7XHJcbiAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKFwiQ29kZVwiLCBuZXdDb2RlLCB0aGlzLmRlYnVnKTtcclxuICAgICAgdGhpcy51cGRhdGVNb2RlbCgpO1xyXG4gICAgICAvLyB0aGlzLm1haW5TZXJ2aWNlLnVwZGF0ZU1vZGVsKG51bGwsIHRoaXMuZGVidWcpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUmVtb3ZlTm9kZShlbDogWkNvbXBvbmVudE91dHB1dEV2ZW50KSB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93KCdSZW1vdmUgTm9kZScsICdBcmUgeW91IHN1cmU/JyxcclxuICAgICAgW1xyXG4gICAgICAgIHsgdGV4dDogXCJOb1wiLCBjc3NDbGFzczogXCJzZWNvbmRhcnlcIiB9IGFzIEFsZXJ0QnV0dG9uLFxyXG4gICAgICAgIHsgdGV4dDogXCJZZXNcIiwgY3NzQ2xhc3M6IFwicHJpbWFyeVwiIH0gYXMgQWxlcnRCdXR0b25cclxuICAgICAgXSlcclxuICAgICAgLnN1YnNjcmliZShyZXBseSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGx5ID09PSAnWWVzJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92ZSBOb2RlJywgZWwpO1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVUcmVlTm9kZSh0aGlzLmRlYnVnW1widHJlZU1vZGVsXCJdLCBlbC5ldmVudCk7XHJcbiAgICAgICAgICBjb25zdCBuZXdUcmVlTW9kZWwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVidWdbJ3RyZWVNb2RlbCddKSk7XHJcbiAgICAgICAgICBjb25zdCByZXZlcnRlZE1vZGVsID0gWkNvbXBvbmVudEhlbHBlci5yZXZlcnRUcmVlTW9kZWwobmV3VHJlZU1vZGVsKTtcclxuICAgICAgICAgIGNvbnN0IG5ld0NvZGUgPSBKU09OLnN0cmluZ2lmeShyZXZlcnRlZE1vZGVsLCBudWxsLCAyKTtcclxuICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZShcIkNvZGVcIiwgbmV3Q29kZSwgdGhpcy5kZWJ1Zyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ290b0ZpZWxkRWxlbWVudCgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYWRtaW4vZmllbGQnXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU1vZGVsKCkge1xyXG4gICAgY29uc3QgZGVidWcgPSB0aGlzLmRlYnVnO1xyXG4gICAgY29uc3QgZmcgPSB0aGlzLmRlYnVnLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgaWYgKCFmZy5kaXJ0eSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJEZWJ1ZyBGb3JtIGlzIG5vdCBkaXJ0eSBoZW5jZSByZWNvcmQgaXMgbm90IHNhdmUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICBjb25zdCBlcnJvcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEZvcm1Hcm91cEVycm9ycyhmZywgdGhpcy5hbGVydFNlcnZpY2UpO1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJEZWJ1ZyBGb3JtIFZhbGlkYXRpb24gZ290IGVycm9yKHMpOlwiLCBlcnJvcnMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb2YoZGVidWcuek1vZGVsKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICAvLyBzd2l0Y2hNYXAoem1vZGVsID0+IHtcclxuICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwiQmVmb3JlIHVwZGF0ZSwgek1vZGVsOlwiLCB6bW9kZWwpO1xyXG4gICAgICAgIC8vICAgcmV0dXJuIHRoaXMuYmVmb3JlVXBkYXRlTW9kZWwoZ3JvdXApO1xyXG4gICAgICAgIC8vIH0pLFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGRlYnVnLnpNb2RlbCwgZmcudmFsdWUpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQdXQkKFxyXG4gICAgICAgICAgICBkZWJ1Zy5yZXNvdXJjZVVSTCArIFwiL1wiICsgZGVidWcuek1vZGVsLklkLFxyXG4gICAgICAgICAgICBkZWJ1Zy56TW9kZWxcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWFwKHJlcyA9PiB0aGlzLmhhbmRsZVN1Y2Nlc3MocmVzLCBcIlJlY29yZCBpcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5cIikpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHN3aXRjaE1hcCgoem1vZGVsOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQWZ0ZXIgRGVidWcgRm9ybSB1cGRhdGVkLCB6TW9kZWw6XCIsIHptb2RlbCk7XHJcbiAgICAgICAgICBpZiAoem1vZGVsICYmIHptb2RlbC5EYXRhKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGVidWcuek1vZGVsLCB6bW9kZWwuRGF0YSk7XHJcbiAgICAgICAgICAgIGZnLnBhdGNoVmFsdWUoem1vZGVsLkRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZmcubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgIC8vICAgdGhpcy5hZnRlclVwZGF0ZU1vZGVsKGdyb3VwKTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG5cclxuICAvLyAqKioqKioqKioqKioqKioqKioqKiBXb3JrZmxvdyBCdXR0b24gKioqKioqKioqKioqKioqKioqKipcclxuICBwdWJsaWMgbG9hZFdvcmtmbG93RGF0YSgpIHtcclxuICAgIGNvbnN0IHpncmlkX1dvcmtmbG93QnV0dG9uR3JpZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50KHRoaXMuZGVidWcsICd6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQnKTtcclxuICAgIGlmICh6Z3JpZF9Xb3JrZmxvd0J1dHRvbkdyaWQpIHtcclxuICAgICAgemdyaWRfV29ya2Zsb3dCdXR0b25HcmlkLnNldERhdGEodGhpcy5kZWJ1Zy56RGF0YS5jb2xsZWN0ZWRXb3JrZmxvd0J1dHRvbnMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBncmlkV29ya2Zsb3dCdXR0b25Pbkl0ZW1DbGljayhldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBkYXRhSXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LmRhdGFJdGVtKTtcclxuICAgIGNvbnN0IGZpZWxkID0gZGF0YUl0ZW0ucmVmRmllbGQ7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBkYXRhSXRlbS5yZWZBdHRyaWJ1dGU7XHJcblxyXG4gICAgLy8gR2V0IE1hcHBlZCBJbmZvXHJcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgIC5zZXQoXCJCdXR0b25JZFwiLCBmaWVsZC5JZCk7XHJcbiAgICB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTChcImUxd2ZzX3dmY19nZXRtYXBwZWRCdXR0b25JbmZvVVJMXCIpLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgIG1hcChhc3luYyByZXMgPT4ge1xyXG4gICAgICAgIGxldCByb2xlSW5mbyA9IFtdO1xyXG4gICAgICAgIGxldCBzdGF0dXNJbmZvID0gW107XHJcbiAgICAgICAgbGV0IHBhcmVudFN0YXR1c0luZm8gPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHJlcy5NYXBwZWRSb2xlTGlzdCkge1xyXG4gICAgICAgICAgcm9sZUluZm8gPSByZXMuTWFwcGVkUm9sZUxpc3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzLk1hcHBlZFN0YXR1c0xpc3QpIHtcclxuICAgICAgICAgIHJlcy5NYXBwZWRTdGF0dXNMaXN0LmZvckVhY2goKF9zdGF0dXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBzdGF0dXNJbmZvLnB1c2goX3N0YXR1cy5OYW1lICsgJyAoJyArIF9zdGF0dXMuQ29kZSArICcpJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXMuTWFwcGVkUGFyZW50U3RhdHVzTGlzdCkge1xyXG4gICAgICAgICAgcmVzLk1hcHBlZFBhcmVudFN0YXR1c0xpc3QuZm9yRWFjaCgoX3BhcmVudFN0YXR1czogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHBhcmVudFN0YXR1c0luZm8ucHVzaChfcGFyZW50U3RhdHVzLk5hbWUgKyAnICgnICsgX3BhcmVudFN0YXR1cy5Db2RlICsgJyknKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgX21hcHBlZEluZm8gPSB7XHJcbiAgICAgICAgICAnbWFwcGVkUm9sZUluZm8nOiByb2xlSW5mby5sZW5ndGggPiAwID8gcm9sZUluZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkU3RhdHVzSW5mbyc6IHN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHN0YXR1c0luZm8gOiAnTi5BLicsXHJcbiAgICAgICAgICAnbWFwcGVkUGFyZW50U3RhdHVzSW5mbyc6IHBhcmVudFN0YXR1c0luZm8ubGVuZ3RoID4gMCA/IHBhcmVudFN0YXR1c0luZm8gOiAnTi5BLidcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyByZXRyZWl2ZSBhbGwgaW1wb3J0YW50IGluZm9cclxuICAgICAgICBjb25zdCBfYnV0dG9uSW5mbyA9IHtcclxuICAgICAgICAgICdXb3JrZmxvd0lkJzogZmllbGQuV29ya2Zsb3dJZCxcclxuICAgICAgICAgICdCdXR0b25JZCc6IGZpZWxkLklkLFxyXG4gICAgICAgICAgJ0J1dHRvbk5hbWUnOiBmaWVsZC5OYW1lLFxyXG4gICAgICAgICAgJ0J1dHRvbkNvZGUnOiBmaWVsZC5Db2RlLFxyXG4gICAgICAgICAgJ0J1dHRvblR5cGVJZCc6IGZpZWxkLlR5cGUuSWQsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZU5hbWUnOiBmaWVsZC5UeXBlLk5hbWUsXHJcbiAgICAgICAgICAnQnV0dG9uVHlwZUNvZGUnOiBmaWVsZC5UeXBlLkNvZGUsXHJcbiAgICAgICAgICAnQnV0dG9uVmlzaWJsZSc6IGF0dHJpYnV0ZS5WaXNpYmxlLFxyXG4gICAgICAgICAgJ0J1dHRvbkNsaWNrRXZlbnQnOiBhdHRyaWJ1dGUuQ2xpY2tFdmVudCxcclxuICAgICAgICAgICdCdXR0b25VUkwnOiBhdHRyaWJ1dGUuVVJMLFxyXG4gICAgICAgICAgJ0J1dHRvbkljb24nOiBhdHRyaWJ1dGUuSWNvblxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBfZ290b1N0YXR1c0luZm8gPSB7XHJcbiAgICAgICAgICAnR290b1N0YXR1c0lkJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNOYW1lJzogJ04uQS4nLFxyXG4gICAgICAgICAgJ0dvdG9TdGF0dXNDb2RlJzogJ04uQS4nXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKGZpZWxkLlN0YXR1cykge1xyXG4gICAgICAgICAgY29uc3QgX2dvdG9TdGF0dXMgPSBmaWVsZC5TdGF0dXNcclxuICAgICAgICAgIF9nb3RvU3RhdHVzSW5mbyA9IHtcclxuICAgICAgICAgICAgJ0dvdG9TdGF0dXNJZCc6IF9nb3RvU3RhdHVzLklkLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c05hbWUnOiBfZ290b1N0YXR1cy5OYW1lLFxyXG4gICAgICAgICAgICAnR290b1N0YXR1c0NvZGUnOiBfZ290b1N0YXR1cy5Db2RlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzTW9kZWwgPSBPYmplY3QuYXNzaWduKF9idXR0b25JbmZvLCBfZ290b1N0YXR1c0luZm8sIF9tYXBwZWRJbmZvKTtcclxuXHJcbiAgICAgICAgY29uc3QgbW9kYWxGaWVsZHMgPSB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKFxyXG4gICAgICAgICAgXCJtdldvcmtmbG93QnV0dG9uRGVidWdGb3JtXCIsXHJcbiAgICAgICAgICBcIkZvcm1GaWVsZFwiLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbEZpZWxkcywgdGhpcy5kZWJ1Zy5fZ3JvdXAsICdXb3JrZmxvdyBCdXR0b24gSW5mbycsIG51bGwsIG51bGwsIHByb3BlcnRpZXNNb2RlbCk7XHJcbiAgICAgICAgbW9kYWwuc3Vic2NyaWJlKChtb2RhbERhdGE6IE1vZGFsUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChtb2RhbERhdGEucmVzcG9uc2VUeXBlID09PSBcImNhbmNlbFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgaGFuZGxlU3VjY2VzcyhyZXM6IFJlc3BvbnNlIHwgYW55LCBzdWNjZXNzTXNnOiBzdHJpbmcpOiBSZXNwb25zZSB7XHJcbiAgICBpZiAocmVzID09IG51bGwpIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhzdWNjZXNzTXNnKTtcclxuICAgIH0gZWxzZSBpZiAocmVzLkRhdGEgIT09IHVuZGVmaW5lZCAmJiByZXMuUHJvY2Vzc2luZ1N0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChyZXMuUHJvY2Vzc2luZ1N0YXR1cyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcy5EYXRhKSkge1xyXG4gICAgICAgICAgcmVzLkRhdGEubWFwKHMgPT4gdGhpcy53ZWJBcGlTZXJ2aWNlLnNob3dIdHRwUmVzcG9uc2VNZXNzYWdlKE1FU1NBR0VUWVBFLlN1Y2Nlc3MsXHJcbiAgICAgICAgICAgIGAke3N1Y2Nlc3NNc2d9IDogJHtzLkNvc3RDb2RlfWAsIG51bGwpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLnNob3dIdHRwUmVzcG9uc2VNZXNzYWdlKE1FU1NBR0VUWVBFLlN1Y2Nlc3MsIHN1Y2Nlc3NNc2csIG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyhzdWNjZXNzTXNnKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvcihyZXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmhhbmRsZUVycm9yKHJlcyk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -70,12 +70,12 @@ export class ZComponentService {
70
70
  return componentRef;
71
71
  }
72
72
  }
73
- ZComponentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZComponentService, deps: [{ token: i1.ComponentObjectService }], target: i0.ɵɵFactoryTarget.Injectable });
74
- ZComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZComponentService, providedIn: 'root' });
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: ZComponentService, decorators: [{
73
+ ZComponentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZComponentService, deps: [{ token: i1.ComponentObjectService }], target: i0.ɵɵFactoryTarget.Injectable });
74
+ ZComponentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZComponentService, providedIn: 'root' });
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ZComponentService, decorators: [{
76
76
  type: Injectable,
77
77
  args: [{
78
78
  providedIn: 'root'
79
79
  }]
80
80
  }], ctorParameters: function () { return [{ type: i1.ComponentObjectService }]; } });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUE2QyxNQUFNLGVBQWUsQ0FBQztBQUd0RiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFjLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUcvRCw0RUFBNEU7QUFFNUUsa0NBQWtDO0FBS2xDLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFDVSxzQkFBOEM7UUFBOUMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtJQUNwRCxDQUFDO0lBRUwsbUJBQW1CLENBQUMsYUFBcUI7UUFDdkMsT0FBTyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsYUFBYSxDQUNYLHdCQUFrRCxFQUNsRCxZQUFtQyxFQUNuQyxLQUFVLEVBQ1YsS0FBVSxFQUNWLElBQWU7UUFFZiwrQ0FBK0M7UUFDL0MsY0FBYztRQUNkLElBQUk7UUFFSixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEMsT0FBTztTQUNSO1FBRUQsSUFBSSxnQkFBZ0IsQ0FBQztRQUNyQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxJQUFJLGFBQWEsRUFBRTtZQUNqQixnQkFBZ0IsR0FBRyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FDakUsYUFBYSxDQUNkLENBQUM7U0FDSDthQUFNO1lBQ0wsZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsdUJBQXVCLENBQ2pFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQ2pELENBQUM7U0FDSDtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZELGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDcEMsUUFBUSxDQUFDO1NBQ1Y7UUFDRCxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSxZQUFZLENBQUMsUUFBdUIsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xELFlBQVksQ0FBQyxRQUF1QixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkQsWUFBWSxDQUFDLFFBQXVCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsRCx5R0FBeUc7SUFDM0csQ0FBQztJQUVELDRCQUE0QixDQUMxQix3QkFBa0QsRUFDbEQsUUFBYSxFQUNiLE1BQVcsRUFDWCxLQUFVLEVBQ1YsS0FBVSxFQUNWLFdBQW1CO1FBRW5CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLFlBQVksQ0FBQztRQUNqQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxxREFBcUQ7UUFDckQsSUFBSSxhQUFhLEVBQUU7WUFDakIsWUFBWSxHQUFHLHdCQUF3QjtpQkFDcEMsdUJBQXVCLENBQUMsYUFBYSxDQUFDO2lCQUN0QyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckI7YUFBTTtZQUNMLFlBQVksR0FBRyx3QkFBd0I7aUJBQ3BDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3pFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyQjtRQUVELDhFQUE4RTtRQUM5RSxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV6QyxvQ0FBb0M7UUFDcEMsTUFBTSxPQUFPLEdBQUksWUFBWSxDQUFDLFFBQWlDO2FBQzVELFNBQVMsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFFL0Isb0NBQW9DO1FBQ3BDLE1BQU0sZUFBZSxHQUFRLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLGVBQWUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEMsWUFBWSxDQUFDLFFBQXVCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsRCxZQUFZLENBQUMsUUFBdUIsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3BELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7OzhHQXhGVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IEluamVjdGFibGUsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRW1iZWRkZWRWaWV3UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqKioqKioqKiogU2VydmljZSAmIERpcmVjdGl2ZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50T2JqZWN0U2VydmljZSB9IGZyb20gJ21taGdsb2JhbC1taWRkbGV3YXJlJztcclxuaW1wb3J0IHsgRmllbGRFbGVtZW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9maWVsZGVsZW1lbnQuZGlyZWN0aXZlJztcclxuLy8gaW1wb3J0IHsgWkdyaWRCaW5kaW5nRGlyZWN0aXZlIH0gZnJvbSBcIi4uL3pncmlkL3pncmlkLmJpbmRpbmcuZGlyZWN0aXZlXCI7XHJcblxyXG4vKioqKioqKioqKiB6Q29tcG9uZW50ICoqKioqKioqKiovICBcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFpDb21wb25lbnRTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tcG9uZW50T2JqZWN0U2VydmljZTogQ29tcG9uZW50T2JqZWN0U2VydmljZSxcclxuICApIHsgfVxyXG4gICBcclxuICBpc1NraXBDb21wb25lbnRUeXBlKGNvbXBvbmVudFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuaXNTa2lwQ29tcG9uZW50VHlwZShjb21wb25lbnRUeXBlKTtcclxuICB9XHJcblxyXG4gIGxvYWRDb21wb25lbnQoXHJcbiAgICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIGZpZWxkRWxlbWVudDogRmllbGRFbGVtZW50RGlyZWN0aXZlLFxyXG4gICAgZmllbGQ6IGFueSxcclxuICAgIGdyb3VwOiBhbnksXHJcbiAgICBmb3JtOiBGb3JtR3JvdXBcclxuICApIHtcclxuICAgIC8vIGlmKGZpZWxkLk5hbWUgPT09ICdGb3JtRGV0YWlsQ29udGFjdEdyaWQnKSB7XHJcbiAgICAvLyAgIGRlYnVnZ2VyO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLmlzU2tpcENvbXBvbmVudFR5cGUoZmllbGQuVHlwZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb21wb25lbnRGYWN0b3J5O1xyXG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHRoaXMuY29tcG9uZW50T2JqZWN0U2VydmljZS5nZXRPYmplY3QoZmllbGQuVHlwZSk7XHJcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xyXG4gICAgICBjb21wb25lbnRGYWN0b3J5ID0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFxyXG4gICAgICAgIGNvbXBvbmVudE5hbWVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbXBvbmVudEZhY3RvcnkgPSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRPYmplY3RTZXJ2aWNlLmdldE9iamVjdChcInVua25vd25cIilcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gZmllbGRFbGVtZW50LnZpZXdDb250YWluZXJSZWY7XHJcbiAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICBpZiAoIWZvcm0pIHtcclxuICAgICAgY29uc29sZS53YXJuKCdGb3JtR3JvdXAgaXMgZW1wdHkhJyk7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XHJcbiAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFpDb21wb25lbnQpLmRhdGEgPSBmaWVsZDtcclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgWkNvbXBvbmVudCkuZ3JvdXAgPSBncm91cDtcclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgWkNvbXBvbmVudCkuZm9ybSA9IGZvcm07XHJcbiAgICAvLyAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFpDb21wb25lbnQpLm91dHB1dEV2ZW50LnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4gZ3JvdXAub3V0cHV0RXZlbnQoZXZlbnQpKTtcclxuICB9XHJcblxyXG4gIGFwcGVuZENvbXBvbmVudFRvRHluYW1pY0Zvcm0oXHJcbiAgICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIGluamVjdG9yOiBhbnksXHJcbiAgICBhcHBSZWY6IGFueSxcclxuICAgIGZpZWxkOiBhbnksXHJcbiAgICBncm91cDogYW55LFxyXG4gICAgY29udGFpbmVySWQ6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuaXNTa2lwQ29tcG9uZW50VHlwZShmaWVsZC5UeXBlKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbXBvbmVudFJlZjtcclxuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSB0aGlzLmNvbXBvbmVudE9iamVjdFNlcnZpY2UuZ2V0T2JqZWN0KGZpZWxkLlR5cGUpO1xyXG4gICAgLy8gMS4gQ3JlYXRlIGEgY29tcG9uZW50IHJlZmVyZW5jZSBmcm9tIHRoZSBjb21wb25lbnRcclxuICAgIGlmIChjb21wb25lbnROYW1lKSB7XHJcbiAgICAgIGNvbXBvbmVudFJlZiA9IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxyXG4gICAgICAgIC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnROYW1lKVxyXG4gICAgICAgIC5jcmVhdGUoaW5qZWN0b3IpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29tcG9uZW50UmVmID0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXHJcbiAgICAgICAgLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY29tcG9uZW50T2JqZWN0U2VydmljZS5nZXRPYmplY3QoXCJ1bmtub3duXCIpKVxyXG4gICAgICAgIC5jcmVhdGUoaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIuIEF0dGFjaCBjb21wb25lbnQgdG8gdGhlIGFwcFJlZiBzbyB0aGF0IGl0J3MgaW5zaWRlIHRoZSBuZyBjb21wb25lbnQgdHJlZVxyXG4gICAgYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuXHJcbiAgICAvLyAzLiBHZXQgRE9NIGVsZW1lbnQgZnJvbSBjb21wb25lbnRcclxuICAgIGNvbnN0IGRvbUVsZW0gPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KVxyXG4gICAgICAucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIC8vIDQuIEFwcGVuZCBET00gZWxlbWVudCB0byB0aGUgYm9keVxyXG4gICAgY29uc3QgZHluYW1pY0Zvcm1Ib3N0OiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI1wiICsgY29udGFpbmVySWQpO1xyXG4gICAgZHluYW1pY0Zvcm1Ib3N0LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xyXG5cclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgWkNvbXBvbmVudCkuZGF0YSA9IGZpZWxkO1xyXG4gICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBaQ29tcG9uZW50KS5ncm91cCA9IGdyb3VwO1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcclxuICB9XHJcbn1cclxuIl19
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemNvbXBvbmVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUE2QyxNQUFNLGVBQWUsQ0FBQztBQUd0RiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFjLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUcvRCw0RUFBNEU7QUFFNUUsa0NBQWtDO0FBS2xDLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsWUFDVSxzQkFBOEM7UUFBOUMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtJQUNwRCxDQUFDO0lBRUwsbUJBQW1CLENBQUMsYUFBcUI7UUFDdkMsT0FBTyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsYUFBYSxDQUNYLHdCQUFrRCxFQUNsRCxZQUFtQyxFQUNuQyxLQUFVLEVBQ1YsS0FBVSxFQUNWLElBQWU7UUFFZiwrQ0FBK0M7UUFDL0MsY0FBYztRQUNkLElBQUk7UUFFSixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeEMsT0FBTztTQUNSO1FBRUQsSUFBSSxnQkFBZ0IsQ0FBQztRQUNyQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxJQUFJLGFBQWEsRUFBRTtZQUNqQixnQkFBZ0IsR0FBRyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FDakUsYUFBYSxDQUNkLENBQUM7U0FDSDthQUFNO1lBQ0wsZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsdUJBQXVCLENBQ2pFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQ2pELENBQUM7U0FDSDtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZELGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDcEMsUUFBUSxDQUFDO1NBQ1Y7UUFDRCxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSxZQUFZLENBQUMsUUFBdUIsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2xELFlBQVksQ0FBQyxRQUF1QixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkQsWUFBWSxDQUFDLFFBQXVCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNsRCx5R0FBeUc7SUFDM0csQ0FBQztJQUVELDRCQUE0QixDQUMxQix3QkFBa0QsRUFDbEQsUUFBYSxFQUNiLE1BQVcsRUFDWCxLQUFVLEVBQ1YsS0FBVSxFQUNWLFdBQW1CO1FBRW5CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLFlBQVksQ0FBQztRQUNqQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxxREFBcUQ7UUFDckQsSUFBSSxhQUFhLEVBQUU7WUFDakIsWUFBWSxHQUFHLHdCQUF3QjtpQkFDcEMsdUJBQXVCLENBQUMsYUFBYSxDQUFDO2lCQUN0QyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckI7YUFBTTtZQUNMLFlBQVksR0FBRyx3QkFBd0I7aUJBQ3BDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3pFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNyQjtRQUVELDhFQUE4RTtRQUM5RSxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV6QyxvQ0FBb0M7UUFDcEMsTUFBTSxPQUFPLEdBQUksWUFBWSxDQUFDLFFBQWlDO2FBQzVELFNBQVMsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFFL0Isb0NBQW9DO1FBQ3BDLE1BQU0sZUFBZSxHQUFRLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLGVBQWUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFcEMsWUFBWSxDQUFDLFFBQXVCLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsRCxZQUFZLENBQUMsUUFBdUIsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3BELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7OytHQXhGVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzRGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IEluamVjdGFibGUsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgRW1iZWRkZWRWaWV3UmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqKioqKioqKiogU2VydmljZSAmIERpcmVjdGl2ZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyIH0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50T2JqZWN0U2VydmljZSB9IGZyb20gJ21taGdsb2JhbC1taWRkbGV3YXJlJztcclxuaW1wb3J0IHsgRmllbGRFbGVtZW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9maWVsZGVsZW1lbnQuZGlyZWN0aXZlJztcclxuLy8gaW1wb3J0IHsgWkdyaWRCaW5kaW5nRGlyZWN0aXZlIH0gZnJvbSBcIi4uL3pncmlkL3pncmlkLmJpbmRpbmcuZGlyZWN0aXZlXCI7XHJcblxyXG4vKioqKioqKioqKiB6Q29tcG9uZW50ICoqKioqKioqKiovICBcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFpDb21wb25lbnRTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tcG9uZW50T2JqZWN0U2VydmljZTogQ29tcG9uZW50T2JqZWN0U2VydmljZSxcclxuICApIHsgfVxyXG4gICBcclxuICBpc1NraXBDb21wb25lbnRUeXBlKGNvbXBvbmVudFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuaXNTa2lwQ29tcG9uZW50VHlwZShjb21wb25lbnRUeXBlKTtcclxuICB9XHJcblxyXG4gIGxvYWRDb21wb25lbnQoXHJcbiAgICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIGZpZWxkRWxlbWVudDogRmllbGRFbGVtZW50RGlyZWN0aXZlLFxyXG4gICAgZmllbGQ6IGFueSxcclxuICAgIGdyb3VwOiBhbnksXHJcbiAgICBmb3JtOiBGb3JtR3JvdXBcclxuICApIHtcclxuICAgIC8vIGlmKGZpZWxkLk5hbWUgPT09ICdGb3JtRGV0YWlsQ29udGFjdEdyaWQnKSB7XHJcbiAgICAvLyAgIGRlYnVnZ2VyO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGlmICh0aGlzLmlzU2tpcENvbXBvbmVudFR5cGUoZmllbGQuVHlwZSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBjb21wb25lbnRGYWN0b3J5O1xyXG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHRoaXMuY29tcG9uZW50T2JqZWN0U2VydmljZS5nZXRPYmplY3QoZmllbGQuVHlwZSk7XHJcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xyXG4gICAgICBjb21wb25lbnRGYWN0b3J5ID0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFxyXG4gICAgICAgIGNvbXBvbmVudE5hbWVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbXBvbmVudEZhY3RvcnkgPSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRPYmplY3RTZXJ2aWNlLmdldE9iamVjdChcInVua25vd25cIilcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gZmllbGRFbGVtZW50LnZpZXdDb250YWluZXJSZWY7XHJcbiAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICBpZiAoIWZvcm0pIHtcclxuICAgICAgY29uc29sZS53YXJuKCdGb3JtR3JvdXAgaXMgZW1wdHkhJyk7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XHJcbiAgICAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFpDb21wb25lbnQpLmRhdGEgPSBmaWVsZDtcclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgWkNvbXBvbmVudCkuZ3JvdXAgPSBncm91cDtcclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgWkNvbXBvbmVudCkuZm9ybSA9IGZvcm07XHJcbiAgICAvLyAoY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIFpDb21wb25lbnQpLm91dHB1dEV2ZW50LnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4gZ3JvdXAub3V0cHV0RXZlbnQoZXZlbnQpKTtcclxuICB9XHJcblxyXG4gIGFwcGVuZENvbXBvbmVudFRvRHluYW1pY0Zvcm0oXHJcbiAgICBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIGluamVjdG9yOiBhbnksXHJcbiAgICBhcHBSZWY6IGFueSxcclxuICAgIGZpZWxkOiBhbnksXHJcbiAgICBncm91cDogYW55LFxyXG4gICAgY29udGFpbmVySWQ6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuaXNTa2lwQ29tcG9uZW50VHlwZShmaWVsZC5UeXBlKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbXBvbmVudFJlZjtcclxuICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSB0aGlzLmNvbXBvbmVudE9iamVjdFNlcnZpY2UuZ2V0T2JqZWN0KGZpZWxkLlR5cGUpO1xyXG4gICAgLy8gMS4gQ3JlYXRlIGEgY29tcG9uZW50IHJlZmVyZW5jZSBmcm9tIHRoZSBjb21wb25lbnRcclxuICAgIGlmIChjb21wb25lbnROYW1lKSB7XHJcbiAgICAgIGNvbXBvbmVudFJlZiA9IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxyXG4gICAgICAgIC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnROYW1lKVxyXG4gICAgICAgIC5jcmVhdGUoaW5qZWN0b3IpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29tcG9uZW50UmVmID0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyXHJcbiAgICAgICAgLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY29tcG9uZW50T2JqZWN0U2VydmljZS5nZXRPYmplY3QoXCJ1bmtub3duXCIpKVxyXG4gICAgICAgIC5jcmVhdGUoaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIuIEF0dGFjaCBjb21wb25lbnQgdG8gdGhlIGFwcFJlZiBzbyB0aGF0IGl0J3MgaW5zaWRlIHRoZSBuZyBjb21wb25lbnQgdHJlZVxyXG4gICAgYXBwUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuXHJcbiAgICAvLyAzLiBHZXQgRE9NIGVsZW1lbnQgZnJvbSBjb21wb25lbnRcclxuICAgIGNvbnN0IGRvbUVsZW0gPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KVxyXG4gICAgICAucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIC8vIDQuIEFwcGVuZCBET00gZWxlbWVudCB0byB0aGUgYm9keVxyXG4gICAgY29uc3QgZHluYW1pY0Zvcm1Ib3N0OiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI1wiICsgY29udGFpbmVySWQpO1xyXG4gICAgZHluYW1pY0Zvcm1Ib3N0LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xyXG5cclxuICAgIChjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgWkNvbXBvbmVudCkuZGF0YSA9IGZpZWxkO1xyXG4gICAgKGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBaQ29tcG9uZW50KS5ncm91cCA9IGdyb3VwO1xyXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZjtcclxuICB9XHJcbn1cclxuIl19
@@ -254,12 +254,12 @@ export class UiactionbuttonComponent {
254
254
  }
255
255
  }
256
256
  }
257
- UiactionbuttonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: UiactionbuttonComponent, deps: [{ token: i1.FieldService }, { token: i1.WebApiService }, { token: i1.ResourceApiService }, { token: i1.WorkflowService }, { token: i2.ActionSheetController }], target: i0.ɵɵFactoryTarget.Component });
258
- UiactionbuttonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: UiactionbuttonComponent, selector: "app-uiactionbutton", inputs: { group: "group" }, ngImport: i0, template: "<ion-button (click)=\"onAction()\" [disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\" \r\n *ngIf=\"isMobileScreen() && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"ion-activatable ripple-parent\">\r\n <!-- <ion-icon name=\"more\" slot=\"icon-only\"></ion-icon> -->\r\n <fa-icon [icon]=\"'ellipsis-v'\"></fa-icon>\r\n <ion-ripple-effect type=\"unbounded\"></ion-ripple-effect>\r\n</ion-button>", styles: [":host ion-button{width:48px;height:48px;justify-content:center;margin-right:4px;cursor:pointer}:host ion-button fa-icon{text-align:center;justify-content:center;text-overflow:ellipsis;text-transform:none;white-space:nowrap;font-feature-settings:\"kern\" off;font-kerning:none;text-decoration:none;font-size:21px}:host ion-button:hover{color:#fff;background-color:#0006;border-radius:20px}\n"], components: [{ type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2.IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
259
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: UiactionbuttonComponent, decorators: [{
257
+ UiactionbuttonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UiactionbuttonComponent, deps: [{ token: i1.FieldService }, { token: i1.WebApiService }, { token: i1.ResourceApiService }, { token: i1.WorkflowService }, { token: i2.ActionSheetController }], target: i0.ɵɵFactoryTarget.Component });
258
+ UiactionbuttonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: UiactionbuttonComponent, selector: "app-uiactionbutton", inputs: { group: "group" }, ngImport: i0, template: "<ion-button (click)=\"onAction()\" [disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\" \r\n *ngIf=\"isMobileScreen() && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"ion-activatable ripple-parent\">\r\n <!-- <ion-icon name=\"more\" slot=\"icon-only\"></ion-icon> -->\r\n <fa-icon [icon]=\"'ellipsis-v'\"></fa-icon>\r\n <ion-ripple-effect type=\"unbounded\"></ion-ripple-effect>\r\n</ion-button>", styles: [":host ion-button{width:48px;height:48px;justify-content:center;margin-right:4px;cursor:pointer}:host ion-button fa-icon{text-align:center;justify-content:center;text-overflow:ellipsis;text-transform:none;white-space:nowrap;font-feature-settings:\"kern\" off;font-kerning:none;text-decoration:none;font-size:21px}:host ion-button:hover{color:#fff;background-color:#0006;border-radius:20px}\n"], components: [{ type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i3.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i2.IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
259
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UiactionbuttonComponent, decorators: [{
260
260
  type: Component,
261
261
  args: [{ selector: 'app-uiactionbutton', template: "<ion-button (click)=\"onAction()\" [disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\" \r\n *ngIf=\"isMobileScreen() && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"ion-activatable ripple-parent\">\r\n <!-- <ion-icon name=\"more\" slot=\"icon-only\"></ion-icon> -->\r\n <fa-icon [icon]=\"'ellipsis-v'\"></fa-icon>\r\n <ion-ripple-effect type=\"unbounded\"></ion-ripple-effect>\r\n</ion-button>", styles: [":host ion-button{width:48px;height:48px;justify-content:center;margin-right:4px;cursor:pointer}:host ion-button fa-icon{text-align:center;justify-content:center;text-overflow:ellipsis;text-transform:none;white-space:nowrap;font-feature-settings:\"kern\" off;font-kerning:none;text-decoration:none;font-size:21px}:host ion-button:hover{color:#fff;background-color:#0006;border-radius:20px}\n"] }]
262
262
  }], ctorParameters: function () { return [{ type: i1.FieldService }, { type: i1.WebApiService }, { type: i1.ResourceApiService }, { type: i1.WorkflowService }, { type: i2.ActionSheetController }]; }, propDecorators: { group: [{
263
263
  type: Input
264
264
  }] } });
265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlhY3Rpb25idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvdWlhY3Rpb25idXR0b24vdWlhY3Rpb25idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvdWlhY3Rpb25idXR0b24vdWlhY3Rpb25idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUs1Qyw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLDJDQUEyQztBQUMzQyxPQUFPLEVBRVksb0JBQW9CLEVBQUUsZ0JBQWdCLEVBRXhELE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQVN6QixNQUFNLE9BQU8sdUJBQXVCO0lBU2xDLFlBQ1UsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsa0JBQXNDLEVBQ3RDLGVBQWdDLEVBQ2hDLGVBQXNDO1FBSnRDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUF1QjtRQVpoRCx5QkFBb0IsR0FBVSxFQUFFLENBQUM7UUFFakMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBR2xDLHdCQUFtQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQStDMUMsY0FBUyxHQUFHLENBQUMsTUFBZSxFQUFFLEVB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QkFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztxQkFDL0Q7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUNSO2dCQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxNQUFNO1NBQ1Q7SUFDSCxDQUFDOztvSEFwU1UsdUJBQXVCO3dHQUF2Qix1QkFBdUIsc0ZDeEJwQyxxakJBTWE7MkZEa0JBLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDRSxvQkFBb0I7a09BTXJCLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJzsgXHJcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBBY3Rpb25TaGVldENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBcclxuICAgRmllbGRTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLCBSZXNvdXJjZUFwaVNlcnZpY2UsIFdvcmtmbG93U2VydmljZSxcclxuICAgWkdyb3VwLCBaRmllbGQsIFpDb21wb25lbnRQcm9wZXJ0aWVzLCBaQ29tcG9uZW50SGVscGVyLFxyXG4gICBaQ29tcG9uZW50T3V0cHV0RXZlbnRcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnOyBcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC11aWFjdGlvbmJ1dHRvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VpYWN0aW9uYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91aWFjdGlvbmJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFVpYWN0aW9uYnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBncm91cDogWkdyb3VwO1xyXG4gIHRvcFJpZ2h0QWN0aW9uQnV0dG9uOiBhbnlbXSA9IFtdO1xyXG4gIGFjdGlvbkJ0bkxpc3Q6IEFycmF5PFpGaWVsZD47XHJcbiAgaXNXb3JrZmxvd0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vIHZpc2libGU6Ym9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBkYXRhOiBhbnk7XHJcbiAgY29tcG9uZW50UHJvcGVydGllcyA9IG5ldyBaQ29tcG9uZW50UHJvcGVydGllcygpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3b3JrZmxvd1NlcnZpY2U6IFdvcmtmbG93U2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aW9uU2hlZXRDdHJsOiBBY3Rpb25TaGVldENvbnRyb2xsZXJcclxuICApIHsgfVxyXG5cclxuICAvKioqKioqKioqKioqKioqKioqKiogQ29tbW9uIGZ1bmN0aW9uICoqKioqKioqKioqKioqKioqKioqL1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5kYXRhID0gdGhpcy5nZXRGaXJzdHpCdXR0b24odGhpcy5ncm91cC5maWVsZHMpO1xyXG4gICAgLy8gdGhpcy52aXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc1Zpc2libGUoYnV0dG9uRGF0YSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YSkge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XHJcblxyXG4gICAgICBpZiAoIVpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkodGhpcy5kYXRhLldvcmtmbG93Q29kZSkpIHtcclxuICAgICAgICAvLyBoYW5kbGUgYXMgeldvcmtmbG93QnV0dG9uXHJcbiAgICAgICAgdGhpcy5pc1dvcmtmbG93QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRXb3JrZmxvd0J1dHRvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIGhhbmRsZSBhcyB6QnV0dG9uXHJcbiAgICAgICAgY29uc3QgZmllbGQkID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICAgIHRoaXMuZGF0YS5WYWx1ZSxcclxuICAgICAgICAgIFwiRm9ybUZpZWxkXCIsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZmllbGQkLnN1YnNjcmliZSgoZGF0YTogQXJyYXk8WkZpZWxkPikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hY3Rpb25CdG5MaXN0ID0gZGF0YTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkQnV0dG9uTGlzdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc01vYmlsZVNjcmVlbigpIHtcclxuICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCk7XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFbmFibGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSA9ICFzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmlzaWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUgPSBzdGF0dXM7XHJcbiAgICB0aGlzLmRhdGEuVmlzaWJsZSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRSZXF1aXJlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQgPSBzdGF0dXM7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLmNoYW5nZVZhbGlkYXRvcihzdGF0dXMsIHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSwgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNCdG5WaXNpYmxlKGZpZWxkRXhwcikge1xyXG4gICAgaWYgKGZpZWxkRXhwciAhPT0gZmFsc2UgJiYgIWZpZWxkRXhwcikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgZmllbGRFeHByKTtcclxuICAgIHJldHVybiB2O1xyXG4gIH1cclxuXHJcbiAgLyoqKioqKioqKioqKioqKioqKioqIHpCdXR0b24gKioqKioqKioqKioqKioqKioqKiovXHJcbiAgZ2V0Rmlyc3R6QnV0dG9uKGRhdGE6IGFueVtdKSB7XHJcbiAgICAvLyBkYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgIGlmIChkYXRhW2ldLlR5cGUgPT09IFwiemJ1dHRvbnNcIiB8fCBkYXRhW2ldLlR5cGUgPT09IFwiendvcmtmbG93YnV0dG9uc1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFbaV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVtpXS5WYWx1ZSkpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0Rmlyc3R6QnV0dG9uKGRhdGFbaV0uVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBvbkFjdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmlzV29ya2Zsb3dCdXR0b24pIHtcclxuICAgICAgLy90aGlzLmxvYWRXb3JrZmxvd0J1dHRvbigpO1xyXG4gICAgICB0aGlzLmFjdGlvblNoZWV0Q3RybFxyXG4gICAgICAgIC5jcmVhdGUoe1xyXG4gICAgICAgICAgaGVhZGVyOiBcIkNob29zZSBhbiBBY3Rpb25cIixcclxuICAgICAgICAgIGJ1dHRvbnM6IHRoaXMudG9wUmlnaHRBY3Rpb25CdXR0b25cclxuICAgICAgICB9KVxyXG4gICAgICAgIC50aGVuKGFjdGlvblNoZWV0RWwgPT4ge1xyXG4gICAgICAgICAgYWN0aW9uU2hlZXRFbC5wcmVzZW50KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy90aGlzLnJlbG9hZEJ1dHRvbkxpc3QoKTtcclxuICAgICAgdGhpcy5hY3Rpb25TaGVldEN0cmxcclxuICAgICAgICAuY3JlYXRlKHtcclxuICAgICAgICAgIGhlYWRlcjogXCJDaG9vc2UgYW4gQWN0aW9uXCIsXHJcbiAgICAgICAgICBidXR0b25zOiB0aGlzLnRvcFJpZ2h0QWN0aW9uQnV0dG9uXHJcbiAgICAgICAgfSlcclxuICAgICAgICAudGhlbihhY3Rpb25TaGVldEVsID0+IHtcclxuICAgICAgICAgIGFjdGlvblNoZWV0RWwucHJlc2VudCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWxvYWRCdXR0b25MaXN0KCkge1xyXG4gICAgdGhpcy50b3BSaWdodEFjdGlvbkJ1dHRvbiA9IFtdO1xyXG4gICAgdGhpcy5hY3Rpb25CdG5MaXN0LmZvckVhY2goKGJ1dHRvbjogWkZpZWxkKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZpc2libGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBidXR0b24uVmlzaWJsZSxcclxuICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh2aXNpYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5nZXRCdXR0b25MYWJlbChidXR0b24pO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvblJvbGUgPSB0aGlzLmdldEJ1dHRvblJvbGUoYnV0dG9uLCBsYWJlbCk7XHJcbiAgICAgICAgdGhpcy50b3BSaWdodEFjdGlvbkJ1dHRvbi5wdXNoKHtcclxuICAgICAgICAgIHRleHQ6IGxhYmVsLFxyXG4gICAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrKGJ1dHRvbik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcm9sZTogYnV0dG9uUm9sZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnV0dG9uQ2xpY2soYnV0dG9uOiBhbnkpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgdGhpcy5ncm91cFsnRGlzbWlzc1R5cGUnXSA9IGJ1dHRvbi5EaXNtaXNzVHlwZTtcclxuICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgdHlwZTogXCJidXR0b25DbGlja1wiLFxyXG4gICAgICB0YXJnZXQ6IGJ1dHRvbi5DbGlja0V2ZW50LFxyXG4gICAgICBkYXRhOiBudWxsXHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJ1dHRvbkxhYmVsKGJ1dHRvbjogYW55KSB7XHJcbiAgICBsZXQgYnV0dG9uTGFiZWwgPSBidXR0b24uTGFiZWw7XHJcbiAgICBpZiAoIWJ1dHRvbkxhYmVsKSB7XHJcbiAgICAgIGJ1dHRvbkxhYmVsID0gYnV0dG9uLk5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGxhYmVsRXhwciA9IGJ1dHRvbkxhYmVsLm1hdGNoKC9ee3suKn19JC9naSk7XHJcbiAgICBpZiAobGFiZWxFeHByKSB7XHJcbiAgICAgIGxhYmVsRXhwciA9IGxhYmVsRXhwclswXS5zbGljZSgyLCAtMik7XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGxhYmVsRXhwciwgdGhpcy5ncm91cCk7XHJcbiAgICAgIHJldHVybiBsYWJlbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBidXR0b25MYWJlbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QnV0dG9uUm9sZShidXR0b246IGFueSwgbGFiZWw6IHN0cmluZykge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJnZXRCdXR0b25Sb2xlOiBcIiwgbGFiZWwsIGJ1dHRvbi5DbGlja0V2ZW50KTtcclxuICAgIGNvbnN0IGxvd2VyQ2FzZUxhYmVsID0gbGFiZWwudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChcclxuICAgICAgbG93ZXJDYXNlTGFiZWwuaW5kZXhPZihcImNhbmNlbFwiKSAhPT0gLTEgfHxcclxuICAgICAgbG93ZXJDYXNlTGFiZWwuaW5kZXhPZihcImNsb3NlXCIpICE9PSAtMVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBcImNhbmNlbFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKioqKioqKioqKioqKioqKioqKiogeldvcmtmbG93QnV0dG9uICoqKioqKioqKioqKioqKioqKioqL1xyXG4gIC8vIFVSTCByZXF1aXJlZFxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24sbm8tdW5kZXJzY29yZS1kYW5nbGUsaWQtYmxhY2tsaXN0LGlkLW1hdGNoXHJcbiAgZTF3ZnNfd2ZjR2V0V29ya2Zsb3dCdXR0b25VUkwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoXCJlMXdmc193ZmNHZXRXb3JrZmxvd0J1dHRvblVSTFwiKTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uLG5vLXVuZGVyc2NvcmUtZGFuZ2xlLGlkLWJsYWNrbGlzdCxpZC1tYXRjaFxyXG4gIGUxd2ZzX3dmY19nZXRXb3JrZmxvd0luaXRpYWxTdGF0dXNVUkwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoXCJlMXdmc193ZmNfZ2V0V29ya2Zsb3dJbml0aWFsU3RhdHVzVVJMXCIpO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24sIG5vLXVuZGVyc2NvcmUtZGFuZ2xlLCBpZC1ibGFja2xpc3QsIGlkLW1hdGNoXHJcbiAgZTF3ZnNfd2ZjX2dldERvY3VtZW50U3RhdHVzVVJMID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKFwiZTF3ZnNfd2ZjX2dldERvY3VtZW50U3RhdHVzVVJMXCIpO1xyXG5cclxuXHJcbiAgcHJpdmF0ZSBsb2FkV29ya2Zsb3dCdXR0b24oKSB7XHJcbiAgICAvLyAgYWN0aW9uQnRuTGlzdDogQXJyYXk8WkZpZWxkPjtcclxuICAgIHRoaXMudG9wUmlnaHRBY3Rpb25CdXR0b24gPSBbXTtcclxuXHJcbiAgICAvLyBHZXQgV0ZTX0RvY3VtZW50SWQgaWYgYW55LlxyXG4gICAgbGV0IGRvY3VtZW50SWQgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuZ3JvdXAuek1vZGVsKSB7XHJcbiAgICAgIGRvY3VtZW50SWQgPSB0aGlzLmdyb3VwLnpNb2RlbFsnV0ZTX0RvY3VtZW50SWQnXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXQgdGhlIGRvY3VtZW50SWQgdG8gdGhlIHNlcnZpY2VcclxuICAgIHRoaXMud29ya2Zsb3dTZXJ2aWNlLmFwcGVuZFdGU19Eb2N1bWVudHNJbmZvKHRoaXMuZGF0YS5Xb3JrZmxvd0NvZGUsIGRvY3VtZW50SWQpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFNldCBwYXJhbSBmb3IgZmllbGRcclxuICAgICAgY29uc3QgZmllbGQkID0gdGhpcy53b3JrZmxvd1NlcnZpY2UuZ2V0V29ya2Zsb3dCdXR0b25zRmllbGQoXHJcbiAgICAgICAgdGhpcy5kYXRhLldvcmtmbG93Q29kZSxcclxuICAgICAgICB0aGlzLmUxd2ZzX3dmY0dldFdvcmtmbG93QnV0dG9uVVJMLFxyXG4gICAgICAgIFN0cmluZyhmYWxzZSlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGZpZWxkJC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgZGF0YS5mb3JFYWNoKChidXR0b246IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldEJ1dHRvbkxhYmVsKGJ1dHRvbik7XHJcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gSlNPTi5wYXJzZShidXR0b24uQXR0cmlidXRlcyk7XHJcbiAgICAgICAgICBjb25zdCBidXR0b25MYWJlbCA9IGF0dHJpYnV0ZXMuTGFiZWwgfHwgbGFiZWw7XHJcbiAgICAgICAgICBjb25zdCBfaXNWaXNpYmxlID0gdGhpcy5pc0J0blZpc2libGUoYnV0dG9uLlZpc2libGUpO1xyXG5cclxuICAgICAgICAgIGlmIChfaXNWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9wUmlnaHRBY3Rpb25CdXR0b24ucHVzaCh7XHJcbiAgICAgICAgICAgICAgdGV4dDogYnV0dG9uTGFiZWwsXHJcbiAgICAgICAgICAgICAgZmllbGRBdHRyaWJ1dGU6IGJ1dHRvbixcclxuICAgICAgICAgICAgICBpY29uTmFtZTogYXR0cmlidXRlcy5JY29uLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXI6ICh5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93QnV0dG9uQ2xpY2soYnV0dG9uKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy9aQ29tcG9uZW50SGVscGVyLmNvbGxlY3RXb3JrZmxvd0J1dHRvbih0aGlzLmdyb3VwLCB0aGlzLmRhdGEuV29ya2Zsb3dDb2RlLCBidXR0b25MYWJlbCwgYnV0dG9uLCBhdHRyaWJ1dGVzLCBtYXBwZWRJbmZvKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZGF0YS5EaXNhYmxlU3luY1dvcmtmbG93U3RhdHVzKSB7XHJcbiAgICAgICAgLy8gU2V0IGRlZmF1bHQgc3RhdHVzXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9kb3Qtbm90YXRpb25cclxuICAgICAgICBpZiAoIXRoaXMuZ3JvdXAuek1vZGVsW1wiV0ZTX1N0YXR1c05hbWVcIl0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgXCJXb3JrZmxvd01hc3RlckNvZGVcIjogdGhpcy5kYXRhLldvcmtmbG93Q29kZVxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JCh0aGlzLmUxd2ZzX3dmY19nZXRXb3JrZmxvd0luaXRpYWxTdGF0dXNVUkwsIHBhcmFtcykucGlwZShcclxuICAgICAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5EYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLnByZXNldE1vZGVsVmFsdWUoXCJXRlNfU3RhdHVzSWRcIiwgcmVzLkRhdGFbXCJJZFwiXSwgdGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLnByZXNldE1vZGVsVmFsdWUoXCJXRlNfU3RhdHVzTmFtZVwiLCByZXMuRGF0YVtcIk5hbWVcIl0sIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5wcmVzZXRNb2RlbFZhbHVlKFwiV0ZTX1N0YXR1c0NvZGVcIiwgcmVzLkRhdGFbXCJDb2RlXCJdLCB0aGlzLmdyb3VwKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93U2VydmljZS5zZXRDdXJyZW50RG9jdW1lbnRTdGF0dXMocmVzLkRhdGEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFdoZW4gbG9hZGluZyBhbHNvIHRvIGdldCBjdXJyZW50IFN0YXR1cyBJbmZvcm1hdGlvbiBpZiBhbnkuXHJcbiAgICAgICAgICBjb25zdCBkb2NJbmZvUGFyYW0gPSB7XHJcbiAgICAgICAgICAgIFwiV29ya2Zsb3dNYXN0ZXJDb2RlXCI6IHRoaXMuZGF0YS5Xb3JrZmxvd0NvZGUsXHJcbiAgICAgICAgICAgIFwiRG9jdW1lbnRJZFwiOiBkb2N1bWVudElkLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHRoaXMuZTF3ZnNfd2ZjX2dldERvY3VtZW50U3RhdHVzVVJMLCBkb2NJbmZvUGFyYW0pLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dTZXJ2aWNlLnNldEN1cnJlbnREb2N1bWVudFN0YXR1cyhyZXMpO1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd1NlcnZpY2Uuc2V0Q3VycmVudERvY3VtZW50U3RhdHVzKHJlcy5EYXRhKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogXCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdvcmtmbG93QnV0dG9uQ2xpY2soYnV0dG9uOiBhbnkpIHtcclxuICAgIC8vIFR5cGUgMSA9PSBmdW5jdGlvbmFsO1xyXG4gICAgLy8gVHlwZSAyID09IEdPVE87XHJcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gSlNPTi5wYXJzZShidXR0b24uQXR0cmlidXRlcyk7XHJcbiAgICBzd2l0Y2ggKGJ1dHRvbi5UeXBlQ29kZS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgIGNhc2UgXCJGVU5DVElPTlwiOlxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRnVuY3Rpb25hbCBCdXR0b246IFwiLCBidXR0b24uTmFtZSk7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd1NlcnZpY2UuZnVuY3Rpb25hbEJ1dHRvbl9PbkNsaWNrKGF0dHJpYnV0ZXMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiR09UT1wiOlxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR09UTyBCdXR0b246IFwiLCBidXR0b24uTmFtZSk7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd1NlcnZpY2UuZ290b0J1dHRvbl9PbmNsaWNrKGJ1dHRvbiwgdGhpcy5kYXRhLCBhdHRyaWJ1dGVzLCB0aGlzLmdyb3VwLCBmYWxzZSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRXb3JrZmxvd0J1dHRvbigpO1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLndvcmtmbG93U2VydmljZS50cmlnZ2VyU2VuZEVtYWlsKHRoaXMuZ3JvdXApLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSW52YWxpZCBCdXR0b24gVHlwZS4gXCIsIGJ1dHRvbi5OYW1lKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGlvbi1idXR0b24gKGNsaWNrKT1cIm9uQWN0aW9uKClcIiBbZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCIgXHJcbiAgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpICYmICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgY2xhc3M9XCJpb24tYWN0aXZhdGFibGUgcmlwcGxlLXBhcmVudFwiPlxyXG4gIDwhLS0gPGlvbi1pY29uIG5hbWU9XCJtb3JlXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+IC0tPlxyXG4gIDxmYS1pY29uIFtpY29uXT1cIidlbGxpcHNpcy12J1wiPjwvZmEtaWNvbj5cclxuICA8aW9uLXJpcHBsZS1lZmZlY3QgdHlwZT1cInVuYm91bmRlZFwiPjwvaW9uLXJpcHBsZS1lZmZlY3Q+XHJcbjwvaW9uLWJ1dHRvbj4iXX0=
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWlhY3Rpb25idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvdWlhY3Rpb25idXR0b24vdWlhY3Rpb25idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvdWlhY3Rpb25idXR0b24vdWlhY3Rpb25idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUs1Qyw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLDJDQUEyQztBQUMzQyxPQUFPLEVBRVksb0JBQW9CLEVBQUUsZ0JBQWdCLEVBRXhELE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQVN6QixNQUFNLE9BQU8sdUJBQXVCO0lBU2xDLFlBQ1UsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsa0JBQXNDLEVBQ3RDLGVBQWdDLEVBQ2hDLGVBQXNDO1FBSnRDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLG9CQUFlLEdBQWYsZUFBZSxDQUF1QjtRQVpoRCx5QkFBb0IsR0FBVSxFQUFFLENBQUM7UUFFakMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBR2xDLHdCQUFtQixHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQStDMUMsY0FBUyxHQUFHLENBQUMsTUFBZSxFQUFFLEVB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QkFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztxQkFDL0Q7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTTtZQUNSO2dCQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsRCxNQUFNO1NBQ1Q7SUFDSCxDQUFDOztxSEFwU1UsdUJBQXVCO3lHQUF2Qix1QkFBdUIsc0ZDeEJwQyxxakJBTWE7NEZEa0JBLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDRSxvQkFBb0I7a09BTXJCLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJzsgXHJcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBBY3Rpb25TaGVldENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBcclxuICAgRmllbGRTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLCBSZXNvdXJjZUFwaVNlcnZpY2UsIFdvcmtmbG93U2VydmljZSxcclxuICAgWkdyb3VwLCBaRmllbGQsIFpDb21wb25lbnRQcm9wZXJ0aWVzLCBaQ29tcG9uZW50SGVscGVyLFxyXG4gICBaQ29tcG9uZW50T3V0cHV0RXZlbnRcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnOyBcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC11aWFjdGlvbmJ1dHRvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VpYWN0aW9uYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91aWFjdGlvbmJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFVpYWN0aW9uYnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBncm91cDogWkdyb3VwO1xyXG4gIHRvcFJpZ2h0QWN0aW9uQnV0dG9uOiBhbnlbXSA9IFtdO1xyXG4gIGFjdGlvbkJ0bkxpc3Q6IEFycmF5PFpGaWVsZD47XHJcbiAgaXNXb3JrZmxvd0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vIHZpc2libGU6Ym9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBkYXRhOiBhbnk7XHJcbiAgY29tcG9uZW50UHJvcGVydGllcyA9IG5ldyBaQ29tcG9uZW50UHJvcGVydGllcygpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3b3JrZmxvd1NlcnZpY2U6IFdvcmtmbG93U2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aW9uU2hlZXRDdHJsOiBBY3Rpb25TaGVldENvbnRyb2xsZXJcclxuICApIHsgfVxyXG5cclxuICAvKioqKioqKioqKioqKioqKioqKiogQ29tbW9uIGZ1bmN0aW9uICoqKioqKioqKioqKioqKioqKioqL1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5kYXRhID0gdGhpcy5nZXRGaXJzdHpCdXR0b24odGhpcy5ncm91cC5maWVsZHMpO1xyXG4gICAgLy8gdGhpcy52aXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc1Zpc2libGUoYnV0dG9uRGF0YSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YSkge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XHJcblxyXG4gICAgICBpZiAoIVpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkodGhpcy5kYXRhLldvcmtmbG93Q29kZSkpIHtcclxuICAgICAgICAvLyBoYW5kbGUgYXMgeldvcmtmbG93QnV0dG9uXHJcbiAgICAgICAgdGhpcy5pc1dvcmtmbG93QnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRXb3JrZmxvd0J1dHRvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIGhhbmRsZSBhcyB6QnV0dG9uXHJcbiAgICAgICAgY29uc3QgZmllbGQkID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShcclxuICAgICAgICAgIHRoaXMuZGF0YS5WYWx1ZSxcclxuICAgICAgICAgIFwiRm9ybUZpZWxkXCIsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZmllbGQkLnN1YnNjcmliZSgoZGF0YTogQXJyYXk8WkZpZWxkPikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hY3Rpb25CdG5MaXN0ID0gZGF0YTtcclxuICAgICAgICAgIHRoaXMucmVsb2FkQnV0dG9uTGlzdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc01vYmlsZVNjcmVlbigpIHtcclxuICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCk7XHJcbiAgICByZXR1cm4gdjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFbmFibGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSA9ICFzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0VmlzaWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUgPSBzdGF0dXM7XHJcbiAgICB0aGlzLmRhdGEuVmlzaWJsZSA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRSZXF1aXJlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQgPSBzdGF0dXM7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLmNoYW5nZVZhbGlkYXRvcihzdGF0dXMsIHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSwgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLCBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNCdG5WaXNpYmxlKGZpZWxkRXhwcikge1xyXG4gICAgaWYgKGZpZWxkRXhwciAhPT0gZmFsc2UgJiYgIWZpZWxkRXhwcikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgZmllbGRFeHByKTtcclxuICAgIHJldHVybiB2O1xyXG4gIH1cclxuXHJcbiAgLyoqKioqKioqKioqKioqKioqKioqIHpCdXR0b24gKioqKioqKioqKioqKioqKioqKiovXHJcbiAgZ2V0Rmlyc3R6QnV0dG9uKGRhdGE6IGFueVtdKSB7XHJcbiAgICAvLyBkYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgIGlmIChkYXRhW2ldLlR5cGUgPT09IFwiemJ1dHRvbnNcIiB8fCBkYXRhW2ldLlR5cGUgPT09IFwiendvcmtmbG93YnV0dG9uc1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFbaV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVtpXS5WYWx1ZSkpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0Rmlyc3R6QnV0dG9uKGRhdGFbaV0uVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBvbkFjdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmlzV29ya2Zsb3dCdXR0b24pIHtcclxuICAgICAgLy90aGlzLmxvYWRXb3JrZmxvd0J1dHRvbigpO1xyXG4gICAgICB0aGlzLmFjdGlvblNoZWV0Q3RybFxyXG4gICAgICAgIC5jcmVhdGUoe1xyXG4gICAgICAgICAgaGVhZGVyOiBcIkNob29zZSBhbiBBY3Rpb25cIixcclxuICAgICAgICAgIGJ1dHRvbnM6IHRoaXMudG9wUmlnaHRBY3Rpb25CdXR0b25cclxuICAgICAgICB9KVxyXG4gICAgICAgIC50aGVuKGFjdGlvblNoZWV0RWwgPT4ge1xyXG4gICAgICAgICAgYWN0aW9uU2hlZXRFbC5wcmVzZW50KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy90aGlzLnJlbG9hZEJ1dHRvbkxpc3QoKTtcclxuICAgICAgdGhpcy5hY3Rpb25TaGVldEN0cmxcclxuICAgICAgICAuY3JlYXRlKHtcclxuICAgICAgICAgIGhlYWRlcjogXCJDaG9vc2UgYW4gQWN0aW9uXCIsXHJcbiAgICAgICAgICBidXR0b25zOiB0aGlzLnRvcFJpZ2h0QWN0aW9uQnV0dG9uXHJcbiAgICAgICAgfSlcclxuICAgICAgICAudGhlbihhY3Rpb25TaGVldEVsID0+IHtcclxuICAgICAgICAgIGFjdGlvblNoZWV0RWwucHJlc2VudCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWxvYWRCdXR0b25MaXN0KCkge1xyXG4gICAgdGhpcy50b3BSaWdodEFjdGlvbkJ1dHRvbiA9IFtdO1xyXG4gICAgdGhpcy5hY3Rpb25CdG5MaXN0LmZvckVhY2goKGJ1dHRvbjogWkZpZWxkKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZpc2libGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBidXR0b24uVmlzaWJsZSxcclxuICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh2aXNpYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5nZXRCdXR0b25MYWJlbChidXR0b24pO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvblJvbGUgPSB0aGlzLmdldEJ1dHRvblJvbGUoYnV0dG9uLCBsYWJlbCk7XHJcbiAgICAgICAgdGhpcy50b3BSaWdodEFjdGlvbkJ1dHRvbi5wdXNoKHtcclxuICAgICAgICAgIHRleHQ6IGxhYmVsLFxyXG4gICAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrKGJ1dHRvbik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcm9sZTogYnV0dG9uUm9sZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnV0dG9uQ2xpY2soYnV0dG9uOiBhbnkpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgdGhpcy5ncm91cFsnRGlzbWlzc1R5cGUnXSA9IGJ1dHRvbi5EaXNtaXNzVHlwZTtcclxuICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgdHlwZTogXCJidXR0b25DbGlja1wiLFxyXG4gICAgICB0YXJnZXQ6IGJ1dHRvbi5DbGlja0V2ZW50LFxyXG4gICAgICBkYXRhOiBudWxsXHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJ1dHRvbkxhYmVsKGJ1dHRvbjogYW55KSB7XHJcbiAgICBsZXQgYnV0dG9uTGFiZWwgPSBidXR0b24uTGFiZWw7XHJcbiAgICBpZiAoIWJ1dHRvbkxhYmVsKSB7XHJcbiAgICAgIGJ1dHRvbkxhYmVsID0gYnV0dG9uLk5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGxhYmVsRXhwciA9IGJ1dHRvbkxhYmVsLm1hdGNoKC9ee3suKn19JC9naSk7XHJcbiAgICBpZiAobGFiZWxFeHByKSB7XHJcbiAgICAgIGxhYmVsRXhwciA9IGxhYmVsRXhwclswXS5zbGljZSgyLCAtMik7XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGxhYmVsRXhwciwgdGhpcy5ncm91cCk7XHJcbiAgICAgIHJldHVybiBsYWJlbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBidXR0b25MYWJlbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QnV0dG9uUm9sZShidXR0b246IGFueSwgbGFiZWw6IHN0cmluZykge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJnZXRCdXR0b25Sb2xlOiBcIiwgbGFiZWwsIGJ1dHRvbi5DbGlja0V2ZW50KTtcclxuICAgIGNvbnN0IGxvd2VyQ2FzZUxhYmVsID0gbGFiZWwudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChcclxuICAgICAgbG93ZXJDYXNlTGFiZWwuaW5kZXhPZihcImNhbmNlbFwiKSAhPT0gLTEgfHxcclxuICAgICAgbG93ZXJDYXNlTGFiZWwuaW5kZXhPZihcImNsb3NlXCIpICE9PSAtMVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBcImNhbmNlbFwiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKioqKioqKioqKioqKioqKioqKiogeldvcmtmbG93QnV0dG9uICoqKioqKioqKioqKioqKioqKioqL1xyXG4gIC8vIFVSTCByZXF1aXJlZFxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24sbm8tdW5kZXJzY29yZS1kYW5nbGUsaWQtYmxhY2tsaXN0LGlkLW1hdGNoXHJcbiAgZTF3ZnNfd2ZjR2V0V29ya2Zsb3dCdXR0b25VUkwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoXCJlMXdmc193ZmNHZXRXb3JrZmxvd0J1dHRvblVSTFwiKTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uLG5vLXVuZGVyc2NvcmUtZGFuZ2xlLGlkLWJsYWNrbGlzdCxpZC1tYXRjaFxyXG4gIGUxd2ZzX3dmY19nZXRXb3JrZmxvd0luaXRpYWxTdGF0dXNVUkwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoXCJlMXdmc193ZmNfZ2V0V29ya2Zsb3dJbml0aWFsU3RhdHVzVVJMXCIpO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24sIG5vLXVuZGVyc2NvcmUtZGFuZ2xlLCBpZC1ibGFja2xpc3QsIGlkLW1hdGNoXHJcbiAgZTF3ZnNfd2ZjX2dldERvY3VtZW50U3RhdHVzVVJMID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKFwiZTF3ZnNfd2ZjX2dldERvY3VtZW50U3RhdHVzVVJMXCIpO1xyXG5cclxuXHJcbiAgcHJpdmF0ZSBsb2FkV29ya2Zsb3dCdXR0b24oKSB7XHJcbiAgICAvLyAgYWN0aW9uQnRuTGlzdDogQXJyYXk8WkZpZWxkPjtcclxuICAgIHRoaXMudG9wUmlnaHRBY3Rpb25CdXR0b24gPSBbXTtcclxuXHJcbiAgICAvLyBHZXQgV0ZTX0RvY3VtZW50SWQgaWYgYW55LlxyXG4gICAgbGV0IGRvY3VtZW50SWQgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuZ3JvdXAuek1vZGVsKSB7XHJcbiAgICAgIGRvY3VtZW50SWQgPSB0aGlzLmdyb3VwLnpNb2RlbFsnV0ZTX0RvY3VtZW50SWQnXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXQgdGhlIGRvY3VtZW50SWQgdG8gdGhlIHNlcnZpY2VcclxuICAgIHRoaXMud29ya2Zsb3dTZXJ2aWNlLmFwcGVuZFdGU19Eb2N1bWVudHNJbmZvKHRoaXMuZGF0YS5Xb3JrZmxvd0NvZGUsIGRvY3VtZW50SWQpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIFNldCBwYXJhbSBmb3IgZmllbGRcclxuICAgICAgY29uc3QgZmllbGQkID0gdGhpcy53b3JrZmxvd1NlcnZpY2UuZ2V0V29ya2Zsb3dCdXR0b25zRmllbGQoXHJcbiAgICAgICAgdGhpcy5kYXRhLldvcmtmbG93Q29kZSxcclxuICAgICAgICB0aGlzLmUxd2ZzX3dmY0dldFdvcmtmbG93QnV0dG9uVVJMLFxyXG4gICAgICAgIFN0cmluZyhmYWxzZSlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGZpZWxkJC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgZGF0YS5mb3JFYWNoKChidXR0b246IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldEJ1dHRvbkxhYmVsKGJ1dHRvbik7XHJcbiAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gSlNPTi5wYXJzZShidXR0b24uQXR0cmlidXRlcyk7XHJcbiAgICAgICAgICBjb25zdCBidXR0b25MYWJlbCA9IGF0dHJpYnV0ZXMuTGFiZWwgfHwgbGFiZWw7XHJcbiAgICAgICAgICBjb25zdCBfaXNWaXNpYmxlID0gdGhpcy5pc0J0blZpc2libGUoYnV0dG9uLlZpc2libGUpO1xyXG5cclxuICAgICAgICAgIGlmIChfaXNWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9wUmlnaHRBY3Rpb25CdXR0b24ucHVzaCh7XHJcbiAgICAgICAgICAgICAgdGV4dDogYnV0dG9uTGFiZWwsXHJcbiAgICAgICAgICAgICAgZmllbGRBdHRyaWJ1dGU6IGJ1dHRvbixcclxuICAgICAgICAgICAgICBpY29uTmFtZTogYXR0cmlidXRlcy5JY29uLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXI6ICh5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93QnV0dG9uQ2xpY2soYnV0dG9uKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy9aQ29tcG9uZW50SGVscGVyLmNvbGxlY3RXb3JrZmxvd0J1dHRvbih0aGlzLmdyb3VwLCB0aGlzLmRhdGEuV29ya2Zsb3dDb2RlLCBidXR0b25MYWJlbCwgYnV0dG9uLCBhdHRyaWJ1dGVzLCBtYXBwZWRJbmZvKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuZGF0YS5EaXNhYmxlU3luY1dvcmtmbG93U3RhdHVzKSB7XHJcbiAgICAgICAgLy8gU2V0IGRlZmF1bHQgc3RhdHVzXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9kb3Qtbm90YXRpb25cclxuICAgICAgICBpZiAoIXRoaXMuZ3JvdXAuek1vZGVsW1wiV0ZTX1N0YXR1c05hbWVcIl0pIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgXCJXb3JrZmxvd01hc3RlckNvZGVcIjogdGhpcy5kYXRhLldvcmtmbG93Q29kZVxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JCh0aGlzLmUxd2ZzX3dmY19nZXRXb3JrZmxvd0luaXRpYWxTdGF0dXNVUkwsIHBhcmFtcykucGlwZShcclxuICAgICAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5EYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLnByZXNldE1vZGVsVmFsdWUoXCJXRlNfU3RhdHVzSWRcIiwgcmVzLkRhdGFbXCJJZFwiXSwgdGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLnByZXNldE1vZGVsVmFsdWUoXCJXRlNfU3RhdHVzTmFtZVwiLCByZXMuRGF0YVtcIk5hbWVcIl0sIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5wcmVzZXRNb2RlbFZhbHVlKFwiV0ZTX1N0YXR1c0NvZGVcIiwgcmVzLkRhdGFbXCJDb2RlXCJdLCB0aGlzLmdyb3VwKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93U2VydmljZS5zZXRDdXJyZW50RG9jdW1lbnRTdGF0dXMocmVzLkRhdGEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFdoZW4gbG9hZGluZyBhbHNvIHRvIGdldCBjdXJyZW50IFN0YXR1cyBJbmZvcm1hdGlvbiBpZiBhbnkuXHJcbiAgICAgICAgICBjb25zdCBkb2NJbmZvUGFyYW0gPSB7XHJcbiAgICAgICAgICAgIFwiV29ya2Zsb3dNYXN0ZXJDb2RlXCI6IHRoaXMuZGF0YS5Xb3JrZmxvd0NvZGUsXHJcbiAgICAgICAgICAgIFwiRG9jdW1lbnRJZFwiOiBkb2N1bWVudElkLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHRoaXMuZTF3ZnNfd2ZjX2dldERvY3VtZW50U3RhdHVzVVJMLCBkb2NJbmZvUGFyYW0pLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dTZXJ2aWNlLnNldEN1cnJlbnREb2N1bWVudFN0YXR1cyhyZXMpO1xyXG4gICAgICAgICAgICAgIGlmIChyZXMuRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd1NlcnZpY2Uuc2V0Q3VycmVudERvY3VtZW50U3RhdHVzKHJlcy5EYXRhKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogXCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdvcmtmbG93QnV0dG9uQ2xpY2soYnV0dG9uOiBhbnkpIHtcclxuICAgIC8vIFR5cGUgMSA9PSBmdW5jdGlvbmFsO1xyXG4gICAgLy8gVHlwZSAyID09IEdPVE87XHJcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gSlNPTi5wYXJzZShidXR0b24uQXR0cmlidXRlcyk7XHJcbiAgICBzd2l0Y2ggKGJ1dHRvbi5UeXBlQ29kZS50b1VwcGVyQ2FzZSgpKSB7XHJcbiAgICAgIGNhc2UgXCJGVU5DVElPTlwiOlxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiRnVuY3Rpb25hbCBCdXR0b246IFwiLCBidXR0b24uTmFtZSk7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd1NlcnZpY2UuZnVuY3Rpb25hbEJ1dHRvbl9PbkNsaWNrKGF0dHJpYnV0ZXMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiR09UT1wiOlxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR09UTyBCdXR0b246IFwiLCBidXR0b24uTmFtZSk7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd1NlcnZpY2UuZ290b0J1dHRvbl9PbmNsaWNrKGJ1dHRvbiwgdGhpcy5kYXRhLCBhdHRyaWJ1dGVzLCB0aGlzLmdyb3VwLCBmYWxzZSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRXb3JrZmxvd0J1dHRvbigpO1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICB0aGlzLndvcmtmbG93U2VydmljZS50cmlnZ2VyU2VuZEVtYWlsKHRoaXMuZ3JvdXApLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSW52YWxpZCBCdXR0b24gVHlwZS4gXCIsIGJ1dHRvbi5OYW1lKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGlvbi1idXR0b24gKGNsaWNrKT1cIm9uQWN0aW9uKClcIiBbZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCIgXHJcbiAgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpICYmICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgY2xhc3M9XCJpb24tYWN0aXZhdGFibGUgcmlwcGxlLXBhcmVudFwiPlxyXG4gIDwhLS0gPGlvbi1pY29uIG5hbWU9XCJtb3JlXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+IC0tPlxyXG4gIDxmYS1pY29uIFtpY29uXT1cIidlbGxpcHNpcy12J1wiPjwvZmEtaWNvbj5cclxuICA8aW9uLXJpcHBsZS1lZmZlY3QgdHlwZT1cInVuYm91bmRlZFwiPjwvaW9uLXJpcHBsZS1lZmZlY3Q+XHJcbjwvaW9uLWJ1dHRvbj4iXX0=