tnx-shared 5.3.245 → 5.3.247

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.
@@ -26,9 +26,12 @@ export declare class AuthorizeDirective implements OnInit, AfterContentChecked,
26
26
  appCode: string;
27
27
  environment: any;
28
28
  buttonSetting: any;
29
+ permissionChecked: boolean;
29
30
  constructor(_el: ElementRef, _permissionService: PermissionService, _userService: UserService, _commonService: CommonService, _moduleConfigService: ModuleConfigService);
30
31
  ngOnInit(): void;
31
32
  ngAfterViewInit(): void;
33
+ permissionCheck(): void;
34
+ ngAfterViewChecked(): void;
32
35
  setAuthorizeButton(): void;
33
36
  ngAfterContentChecked(): void;
34
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"authorize.directive.d.ts","sourceRoot":"","sources":["../../../projects/tnx-shared/src/lib/directives/authorize.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAa,UAAU,EAAS,MAAM,EAAa,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAmB,aAAa,EAAkB,MAAM,eAAe,CAAC;AAE/E,qBAIa,kBAAmB,YAAW,MAAM,EAAE,mBAAmB,EAAE,aAAa;IA+B7E,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,oBAAoB;IAlChC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC;IAChC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;IAC9B,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAA2B;IACtE,SAAS,CAAC,QAAQ,CAAC,WAAW,SAAS;IAEvC,IAAa,YAAY,CAAC,KAAK,EAAE,GAAG,EAEnC;IAED,IAAa,cAAc,CAAC,KAAK,EAAE,GAAG,EAErC;IAEQ,sBAAsB,UAAS;IAE/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAEnB,eAAe,EAAE,OAAO,CAAQ;IAGtB,QAAQ,EAAE,OAAO,CAAC;IAErC,OAAO,EAAE,MAAM,CAAM;IACrB,WAAW,EAAE,GAAG,CAAC;IACjB,aAAa,EAAE,GAAG,CAAC;gBAGP,GAAG,EAAE,UAAU,EACf,kBAAkB,EAAE,iBAAiB,EACrC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,aAAa,EAC7B,oBAAoB,EAAE,mBAAmB;IAQrD,QAAQ;IAGR,eAAe;IA4Cf,kBAAkB;IA0BlB,qBAAqB;CAMxB"}
1
+ {"version":3,"file":"authorize.directive.d.ts","sourceRoot":"","sources":["../../../projects/tnx-shared/src/lib/directives/authorize.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAa,UAAU,EAAS,MAAM,EAAa,MAAM,eAAe,CAAC;AACpH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAmB,aAAa,EAAkB,MAAM,eAAe,CAAC;AAE/E,qBAIa,kBAAmB,YAAW,MAAM,EAAE,mBAAmB,EAAE,aAAa;IAgC7E,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,oBAAoB;IAnChC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC;IAChC,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC;IAC9B,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,gBAAgB,EAAE,eAAe,CAA2B;IACtE,SAAS,CAAC,QAAQ,CAAC,WAAW,SAAS;IAEvC,IAAa,YAAY,CAAC,KAAK,EAAE,GAAG,EAEnC;IAED,IAAa,cAAc,CAAC,KAAK,EAAE,GAAG,EAErC;IAEQ,sBAAsB,UAAS;IAE/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IAEnB,eAAe,EAAE,OAAO,CAAQ;IAGtB,QAAQ,EAAE,OAAO,CAAC;IAErC,OAAO,EAAE,MAAM,CAAM;IACrB,WAAW,EAAE,GAAG,CAAC;IACjB,aAAa,EAAE,GAAG,CAAC;IACnB,iBAAiB,UAAS;gBAGd,GAAG,EAAE,UAAU,EACf,kBAAkB,EAAE,iBAAiB,EACrC,YAAY,EAAE,WAAW,EACzB,cAAc,EAAE,aAAa,EAC7B,oBAAoB,EAAE,mBAAmB;IAQrD,QAAQ;IAGR,eAAe,IAAI,IAAI;IAIvB,eAAe;IA4Cf,kBAAkB,IAAI,IAAI;IAQ1B,kBAAkB;IA0BlB,qBAAqB;CAMxB"}
@@ -17,6 +17,7 @@ export class AuthorizeDirective {
17
17
  // Dùng trong một số trường hợp code dùng chung template, buộc phải khai báo directive nhưng không phải element nào cũng cần check
18
18
  this.enableAuthorize = true;
19
19
  this.appCode = '';
20
+ this.permissionChecked = false;
20
21
  this._element = _el.nativeElement;
21
22
  this.appCode = this._moduleConfigService.getConfig().appCode;
22
23
  this.environment = this._moduleConfigService.getConfig().environment;
@@ -31,12 +32,14 @@ export class AuthorizeDirective {
31
32
  ngOnInit() {
32
33
  }
33
34
  ngAfterViewInit() {
34
- if (!this.permission) {
35
- this.setAuthorizeButton();
36
- }
35
+ }
36
+ permissionCheck() {
37
37
  if (this._moduleCode) {
38
38
  this.appCode = this._moduleCode;
39
39
  }
40
+ if (!this.permission) {
41
+ this.setAuthorizeButton();
42
+ }
40
43
  if (!this.enableAuthorize) {
41
44
  return;
42
45
  }
@@ -71,6 +74,13 @@ export class AuthorizeDirective {
71
74
  }
72
75
  });
73
76
  }
77
+ ngAfterViewChecked() {
78
+ const buttons = sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE);
79
+ if (!this.permissionChecked && buttons) {
80
+ this.permissionCheck();
81
+ this.permissionChecked = true;
82
+ }
83
+ }
74
84
  setAuthorizeButton() {
75
85
  var _a, _b, _c, _d, _e;
76
86
  let key = window.location.pathname.substring(1).toUpperCase().replace(/\//g, '_');
@@ -125,4 +135,4 @@ AuthorizeDirective.propDecorators = {
125
135
  enableAuthorize: [{ type: Input }],
126
136
  keepHTML: [{ type: Input, args: ['keepHTML',] }]
127
137
  };
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dGhvcml6ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNL0UsTUFBTSxPQUFPLGtCQUFrQjtJQThCM0IsWUFDWSxHQUFlLEVBQ2Ysa0JBQXFDLEVBQ3JDLFlBQXlCLEVBQ3pCLGNBQTZCLEVBQzdCLG9CQUF5QztRQUp6QyxRQUFHLEdBQUgsR0FBRyxDQUFZO1FBQ2YsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBOUIzQyxxQkFBZ0IsR0FBb0IsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUNuRCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQVU5QiwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFJeEMsa0lBQWtJO1FBQ3pILG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBS3pDLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFXakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxH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QWZ0ZXJWaWV3SW5pdCwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlcyB9IGZyb20gJy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzLCBDb21tb25TZXJ2aWNlLCBFbnVtUHJvcGVydGllcyB9IGZyb20gJy4uL3B1YmxpYy1hcGknO1xuXG5ARGlyZWN0aXZlKHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbYXBwQXV0aG9yaXplXSdcbn0pXG5leHBvcnQgY2xhc3MgQXV0aG9yaXplRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlclZpZXdJbml0IHtcbiAgICBwcm90ZWN0ZWQgX21vZHVsZUNvZGU6IGFueTtcbiAgICBwcm90ZWN0ZWQgX2VsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIHByb3RlY3RlZCBfbGFiZWw6IEhUTUxFbGVtZW50O1xuICAgIHByb3RlY3RlZCBfYmluZDogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX3Blcm1pc3Npb25UeXBlczogUGVybWlzc2lvblR5cGVzID0gUGVybWlzc2lvblR5cGVzLkNPTlRST0w7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlnbm9yZUFkbWluID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzZXQgYXBwQXV0aG9yaXplKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29kZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBwZXJtaXNzaW9uVHlwZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25UeXBlcyA9IHZhbHVlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGlzTmF2aWdhdGlvblBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGNvbnRyb2xsZXI6IHN0cmluZztcbiAgICBASW5wdXQoKSBwZXJtaXNzaW9uOiBzdHJpbmc7XG4gICAgLy8gRMO5bmcgdHJvbmcgbeG7mXQgc+G7kSB0csaw4budbmcgaOG7o3AgY29kZSBkw7luZyBjaHVuZyB0ZW1wbGF0ZSwgYnXhu5ljIHBo4bqjaSBraGFpIGLDoW8gZGlyZWN0aXZlIG5oxrBuZyBraMO0bmcgcGjhuqNpIGVsZW1lbnQgbsOgbyBjxaluZyBj4bqnbiBjaGVja1xuICAgIEBJbnB1dCgpIGVuYWJsZUF1dGhvcml6ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gICAgQElucHV0KCdrZWVwSFRNTCcpIGtlZXBIVE1MOiBib29sZWFuO1xuXG4gICAgYXBwQ29kZTogc3RyaW5nID0gJyc7XG4gICAgZW52aXJvbm1lbnQ6IGFueTtcbiAgICBidXR0b25TZXR0aW5nOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBfZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5hcHBDb2RlO1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5pZ25vcmVBZG1pbiA9IHRoaXMuZW52aXJvbm1lbnQuaXNJZ25vcmVBZG1pbjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5wZXJtaXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNldEF1dGhvcml6ZUJ1dHRvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9tb2R1bGVDb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcENvZGUgPSB0aGlzLl9tb2R1bGVDb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5lbmFibGVBdXRob3JpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgIGlmICghY3VycmVudFVzZXIgfHwgISh0aGlzLmFwcENvZGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnS2jDtG5nIMSR4buNYyDEkcaw4bujYyB1c2VyIGhv4bq3YyBhcHBDb2RlJyk7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRVc2VyXG4gICAgICAgICAgICAmJiBjdXJyZW50VXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcbiAgICAgICAgICAgICYmICghdGhpcy5pZ25vcmVBZG1pbiAmJiBjdXJyZW50VXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbGREaXNwbGF5ID0gdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5O1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZCh0aGlzLmFwcENvZGUsIHRoaXMucGVybWlzc2lvbikudGhlbihpc0F1dGhvcml6ZWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gb2xkRGlzcGxheTtcbiAgICAgICAgICAgIGlmICghaXNBdXRob3JpemVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQubm9kZU5hbWUgPT0gJ1AtVEFCUEFORUwnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5fZWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5pZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyVGFiTGFiZWwgPSB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoJy5wLXRhYnZpZXctcGFuZWxzJykucHJldmlvdXNFbGVtZW50U2libGluZy5xdWVyeVNlbGVjdG9yKGAjJHtpZH0tbGFiZWxgKS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJUYWJMYWJlbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMua2VlcEhUTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2xhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRBdXRob3JpemVCdXR0b24oKSB7XG4gICAgICAgIGxldCBrZXkgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvXFwvL2csICdfJyk7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAga2V5ID0gYCR7dGhpcy5hcHBDb2RlfV8ke3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSkudG9VcHBlckNhc2UoKX1gO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IGNvbXBvbmVudE5hbWUgPSB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoRW51bVByb3BlcnRpZXMuQ1JVRF9MSVNUKT8ucGFyZW50Tm9kZVtFbnVtUHJvcGVydGllcy5UQUdfTkFNRV07XG4gICAgICAgIC8vIGlmIChjb21wb25lbnROYW1lICYmICFrZXkuZW5kc1dpdGgoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgLy8gICAgIGtleSArPSBgXyR7Y29tcG9uZW50TmFtZX1gO1xuICAgICAgICAvLyB9XG4gICAgICAgIGNvbnN0IGJ1dHRvblRleHQgPSB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZShFbnVtUHJvcGVydGllcy5MQUJFTCkgPz8gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoRW51bVByb3BlcnRpZXMuVE9PTFRJUClcbiAgICAgICAgICAgID8/IHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKEVudW1Qcm9wZXJ0aWVzLk5HX1JFRkxFQ1RfVEVYVCkgPz8gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoRW51bVByb3BlcnRpZXMuTkdfUkVGTEVDVF9MQUJFTCkgPz8gdGhpcy5fZWxlbWVudC5pbm5lclRleHQ7XG4gICAgICAgIGlmICghYnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVBdXRob3JpemUgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1dHRvblNldHRpbmcgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQlVUVE9OX0FVVEhPUklaRSkgfHwgJ3t9Jyk7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25Db2RlID0gYFske2tleX1dX1ske3RoaXMuX2NvbW1vblNlcnZpY2UuY29udmVydFN0cmluZ1RvVW5TaWduKGJ1dHRvblRleHQpLnJlcGxhY2UoLyAvZywgJ18nKS50b1VwcGVyQ2FzZSgpfV1gO1xuICAgICAgICBjb25zdCBpc1NldEF1dGhvcml6ZSA9IHRoaXMuYnV0dG9uU2V0dGluZ1trZXldPy5maW5kKHAgPT4gcC5jb2RlID09IHBlcm1pc3Npb25Db2RlKTtcbiAgICAgICAgaWYgKGlzU2V0QXV0aG9yaXplKSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb24gPSBwZXJtaXNzaW9uQ29kZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlQXV0aG9yaXplID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLl9sYWJlbCAmJiAhdGhpcy5fYmluZCAmJiB0aGlzLl9lbGVtZW50LmlubmVySFRNTCAhPT0gJycgJiYgdGhpcy5rZWVwSFRNTCkge1xuICAgICAgICAgICAgdGhpcy5fbGFiZWwuaW5uZXJIVE1MID0gdGhpcy5fZWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICB0aGlzLl9iaW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dGhvcml6ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNL0UsTUFBTSxPQUFPLGtCQUFrQjtJQStCM0IsWUFDWSxHQUFlLEVBQ2Ysa0JBQXFDLEVBQ3JDLFlBQXlCLEVBQ3pCLGNBQTZCLEVBQzdCLG9CQUF5QztRQUp6QyxRQUFHLEdBQUgsR0FBRyxDQUFZO1FBQ2YsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUNyQyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUM3Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBL0IzQyxxQkFBZ0IsR0FBb0IsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUNuRCxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQVU5QiwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFJeEMsa0lBQWtJO1FBQ3pILG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBS3pDLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFHckIsc0JBQWlCLEdBQUcsS0FBSyxDQUFD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SUFDTCxDQUFDOzs7WUExSUosU0FBUyxTQUFDO2dCQUNQLDhDQUE4QztnQkFDOUMsUUFBUSxFQUFFLGdCQUFnQjthQUM3Qjs7O1lBVnVELFVBQVU7WUFHekQsaUJBQWlCO1lBQ2pCLFdBQVc7WUFDTSxhQUFhO1lBSDlCLG1CQUFtQjs7OzJCQWlCdkIsS0FBSzs2QkFJTCxLQUFLO3FDQUlMLEtBQUs7eUJBRUwsS0FBSzt5QkFDTCxLQUFLOzhCQUVMLEtBQUs7dUJBR0wsS0FBSyxTQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGVybWlzc2lvblR5cGVzIH0gZnJvbSAnLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMsIENvbW1vblNlcnZpY2UsIEVudW1Qcm9wZXJ0aWVzIH0gZnJvbSAnLi4vcHVibGljLWFwaSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1thcHBBdXRob3JpemVdJ1xufSlcbmV4cG9ydCBjbGFzcyBBdXRob3JpemVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyVmlld0luaXQge1xuICAgIHByb3RlY3RlZCBfbW9kdWxlQ29kZTogYW55O1xuICAgIHByb3RlY3RlZCBfZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgcHJvdGVjdGVkIF9sYWJlbDogSFRNTEVsZW1lbnQ7XG4gICAgcHJvdGVjdGVkIF9iaW5kOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBfcGVybWlzc2lvblR5cGVzOiBQZXJtaXNzaW9uVHlwZXMgPSBQZXJtaXNzaW9uVHlwZXMuQ09OVFJPTDtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaWdub3JlQWRtaW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNldCBhcHBBdXRob3JpemUodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl9tb2R1bGVDb2RlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHBlcm1pc3Npb25UeXBlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fcGVybWlzc2lvblR5cGVzID0gdmFsdWU7XG4gICAgfVxuXG4gICAgQElucHV0KCkgaXNOYXZpZ2F0aW9uUGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgY29udHJvbGxlcjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBlcm1pc3Npb246IHN0cmluZztcbiAgICAvLyBEw7luZyB0cm9uZyBt4buZdCBz4buRIHRyxrDhu51uZyBo4bujcCBjb2RlIGTDuW5nIGNodW5nIHRlbXBsYXRlLCBideG7mWMgcGjhuqNpIGtoYWkgYsOhbyBkaXJlY3RpdmUgbmjGsG5nIGtow7RuZyBwaOG6o2kgZWxlbWVudCBuw6BvIGPFqW5nIGPhuqduIGNoZWNrXG4gICAgQElucHV0KCkgZW5hYmxlQXV0aG9yaXplOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgICBASW5wdXQoJ2tlZXBIVE1MJykga2VlcEhUTUw6IGJvb2xlYW47XG5cbiAgICBhcHBDb2RlOiBzdHJpbmcgPSAnJztcbiAgICBlbnZpcm9ubWVudDogYW55O1xuICAgIGJ1dHRvblNldHRpbmc6IGFueTtcbiAgICBwZXJtaXNzaW9uQ2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9wZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLl9lbGVtZW50ID0gX2VsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuYXBwQ29kZSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwQ29kZTtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XG4gICAgICAgIHRoaXMuaWdub3JlQWRtaW4gPSB0aGlzLmVudmlyb25tZW50LmlzSWdub3JlQWRtaW47XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXG4gICAgfVxuXG4gICAgcGVybWlzc2lvbkNoZWNrKCkge1xuICAgICAgICBpZiAodGhpcy5fbW9kdWxlQ29kZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fbW9kdWxlQ29kZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucGVybWlzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5zZXRBdXRob3JpemVCdXR0b24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZW5hYmxlQXV0aG9yaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICBpZiAoIWN1cnJlbnRVc2VyIHx8ICEodGhpcy5hcHBDb2RlKSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0tow7RuZyDEkeG7jWMgxJHGsOG7o2MgdXNlciBob+G6t2MgYXBwQ29kZScpO1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50VXNlclxuICAgICAgICAgICAgJiYgY3VycmVudFVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXG4gICAgICAgICAgICAmJiAoIXRoaXMuaWdub3JlQWRtaW4gJiYgY3VycmVudFVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2xkRGlzcGxheSA9IHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheTtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQodGhpcy5hcHBDb2RlLCB0aGlzLnBlcm1pc3Npb24pLnRoZW4oaXNBdXRob3JpemVkID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9IG9sZERpc3BsYXk7XG4gICAgICAgICAgICBpZiAoIWlzQXV0aG9yaXplZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbGVtZW50Lm5vZGVOYW1lID09ICdQLVRBQlBBTkVMJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuX2VsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuaWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclRhYkxhYmVsID0gdGhpcy5fZWxlbWVudC5jbG9zZXN0KCcucC10YWJ2aWV3LXBhbmVscycpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcucXVlcnlTZWxlY3RvcihgIyR7aWR9LWxhYmVsYCkucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyVGFiTGFiZWwucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmtlZXBIVE1MKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9sYWJlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBidXR0b25zID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5CVVRUT05fQVVUSE9SSVpFKTtcbiAgICAgICAgaWYgKCF0aGlzLnBlcm1pc3Npb25DaGVja2VkICYmIGJ1dHRvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbkNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25DaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEF1dGhvcml6ZUJ1dHRvbigpIHtcbiAgICAgICAgbGV0IGtleSA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSkudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9cXC8vZywgJ18nKTtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBrZXkgPSBgJHt0aGlzLmFwcENvZGV9XyR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgY29tcG9uZW50TmFtZSA9IHRoaXMuX2VsZW1lbnQuY2xvc2VzdChFbnVtUHJvcGVydGllcy5DUlVEX0xJU1QpPy5wYXJlbnROb2RlW0VudW1Qcm9wZXJ0aWVzLlRBR19OQU1FXTtcbiAgICAgICAgLy8gaWYgKGNvbXBvbmVudE5hbWUgJiYgIWtleS5lbmRzV2l0aChjb21wb25lbnROYW1lKSkge1xuICAgICAgICAvLyAgICAga2V5ICs9IGBfJHtjb21wb25lbnROYW1lfWA7XG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3QgYnV0dG9uVGV4dCA9IHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKEVudW1Qcm9wZXJ0aWVzLkxBQkVMKSA/PyB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZShFbnVtUHJvcGVydGllcy5UT09MVElQKVxuICAgICAgICAgICAgPz8gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoRW51bVByb3BlcnRpZXMuTkdfUkVGTEVDVF9URVhUKSA/PyB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZShFbnVtUHJvcGVydGllcy5OR19SRUZMRUNUX0xBQkVMKSA/PyB0aGlzLl9lbGVtZW50LmlubmVyVGV4dDtcbiAgICAgICAgaWYgKCFidXR0b25UZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUF1dGhvcml6ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnV0dG9uU2V0dGluZyA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5CVVRUT05fQVVUSE9SSVpFKSB8fCAne30nKTtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbkNvZGUgPSBgWyR7a2V5fV1fWyR7dGhpcy5fY29tbW9uU2VydmljZS5jb252ZXJ0U3RyaW5nVG9VblNpZ24oYnV0dG9uVGV4dCkucmVwbGFjZSgvIC9nLCAnXycpLnRvVXBwZXJDYXNlKCl9XWA7XG4gICAgICAgIGNvbnN0IGlzU2V0QXV0aG9yaXplID0gdGhpcy5idXR0b25TZXR0aW5nW2tleV0/LmZpbmQocCA9PiBwLmNvZGUgPT0gcGVybWlzc2lvbkNvZGUpO1xuICAgICAgICBpZiAoaXNTZXRBdXRob3JpemUpIHtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbiA9IHBlcm1pc3Npb25Db2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVBdXRob3JpemUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xhYmVsICYmICF0aGlzLl9iaW5kICYmIHRoaXMuX2VsZW1lbnQuaW5uZXJIVE1MICE9PSAnJyAmJiB0aGlzLmtlZXBIVE1MKSB7XG4gICAgICAgICAgICB0aGlzLl9sYWJlbC5pbm5lckhUTUwgPSB0aGlzLl9lbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgICAgIHRoaXMuX2JpbmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -371,7 +371,7 @@ export class CanBoHoSoService extends BaseService {
371
371
  });
372
372
  }
373
373
  generatePickerControlSchema(control, enumCanBo = EnumCanBo.TRONG_DON_VI) {
374
- const result = new AutoCompletePickerControlSchema(Object.assign({ field: 'idCanBo', label: 'Cán bộ', title: 'Chọn cán bộ', multiple: false, baseService: this, plusUrl: 'WithChucDanhChucVu', displayField: 'hoVaTen', fieldPlus: 'code', fieldSearchText: ['email', 'code'], funcGetLabel: (item) => {
374
+ const result = new AutoCompletePickerControlSchema(Object.assign(Object.assign({ field: 'idCanBo', label: 'Cán bộ', title: 'Chọn cán bộ', multiple: false, baseService: this, plusUrl: 'WithChucDanhChucVu', displayField: 'hoVaTen', fieldPlus: 'code', fieldSearchText: ['email', 'code'], funcGetLabel: (item) => {
375
375
  let result = item.hoVaTen;
376
376
  if (item.code) {
377
377
  result = `${item.code} - ${result} `;
@@ -402,7 +402,7 @@ export class CanBoHoSoService extends BaseService {
402
402
  break;
403
403
  }
404
404
  return filters;
405
- }, columns: this.lstEntityPickerColumn }, control));
405
+ } }, control), { columns: [...this.lstEntityPickerColumn, ...control.columns] }));
406
406
  if (control.dataType == EnumControlPickerType.DOITAC && !this.lstEntityPickerColumn.some(item => item.code == 'idDoiTac')) {
407
407
  this.lstEntityPickerColumn.push(new EntityPickerColumn({
408
408
  label: 'Đối tác',
@@ -679,4 +679,4 @@ CanBoHoSoService.ctorParameters = () => [
679
679
  { type: HoSoDoiTacService },
680
680
  { type: CrudService }
681
681
  ];
682
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuYm8taG9zby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NhbmJvLWhvc28uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztB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WSxFQUFFLElBQUk7Z0JBQ2xCLEtBQUssRUFBRSxNQUFNO2dCQUNiLFNBQVMsRUFBRSxDQUFDO2FBQ2YsQ0FBQztZQUNGLElBQUksa0JBQWtCLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxrQkFBa0I7Z0JBQ3pCLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLFFBQVEsRUFBRSxNQUFNO2dCQUNoQixXQUFXLEVBQUUsSUFBSTtnQkFDakIsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsMkNBQTJDO2dCQUMzQyxXQUFXLEVBQUUsS0FBSztnQkFDbEIsV0FBVyxFQUFFLFVBQVU7YUFDMUIsQ0FBQztZQUNGLElBQUksa0JBQWtCLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxPQUFPO2dCQUNkLElBQUksRUFBRSxPQUFPO2dCQUNiLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixLQUFLLEVBQUUsT0FBTzthQUNqQixDQUFDO1NBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxNQUFjO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHdCQUF3QixNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxRQUFRO1FBQzNCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUseUJBQXlCLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDOzs7O1lBanZCSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQWxCUSxVQUFVO1lBQ0UsUUFBUTtZQVlwQixtQkFBbUI7WUFDbkIsV0FBVztZQUxYLDZCQUE2QjtZQUo3QixrQkFBa0I7WUFNbEIsaUJBQWlCO1lBRGpCLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBFbnVtQ29udHJvbFBpY2tlclR5cGUgfSBmcm9tICcuLi9jbGFzc2VzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLCBDb2x1bW5TY2hlbWFCYXNlLCBFbnRpdHlQaWNrZXJDb2x1bW4sIE1vZGVsU2NoZW1hLCBPcGVyYXRvciB9IGZyb20gJy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgQ29DYXVUb0NodWNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9jb2NhdXRvY2h1Yy9zZXJ2aWNlcy9jb2NhdXRvY2h1Yy5zZXJ2aWNlJztcbmltcG9ydCB7IEVudW1DYW5CbyB9IGZyb20gJy4uL2VudW1zL2NvbW1vbic7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FuQm9fSG9Tb19Db0NhdVRvQ2h1Y1NlcnZpY2UgfSBmcm9tICcuL2NhbmJvLWhvc28tY29jYXV0b2NodWMuc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4vY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IEhvU29Eb2lUYWNTZXJ2aWNlIH0gZnJvbSAnLi9ob3NvZG9pdGFjLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENhbkJvSG9Tb1NlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZSB7XG4gICAgZW52aXJvbm1lbnQ6IGFueTtcbiAgICB2ZXJzaW9uOiBhbnk7XG4gICAgbHN0RW50aXR5UGlja2VyQ29sdW1uOiBFbnRpdHlQaWNrZXJDb2x1bW5bXTtcbiAgICBkZWZhdWx0RW50aXR5Q29sdW1uRGljdCA9IHtcbiAgICAgICAgdjE6IHRoaXMuZ2VuZXJhdGVMaXN0RW50aXR5Q29sdW1uVjEoKVxuICAgIH07XG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCwgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jYW5Cb19Ib1NvX0NvQ2F1VG9DaHVjU2VydmljZTogQ2FuQm9fSG9Tb19Db0NhdVRvQ2h1Y1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NvQ2F1VG9DaHVjU2VydmljZTogQ29DYXVUb0NodWNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9ob1NvRG9pVGFjU2VydmljZTogSG9Tb0RvaVRhY1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihodHRwLCBpbmplY3RvciwgYCR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLmNhbmJvRW5kcG9pbnR9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vQ2FuQm9fSG9Tb2ApO1xuICAgICAgICB0aGlzLmVuZFBvaW50ID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpRG9tYWluLmNhbmJvRW5kcG9pbnQ7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBfbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IHRoaXMuZW52aXJvbm1lbnQuYXBpRG9tYWluLmNhbmJvRW5kcG9pbnQ7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IHRoaXMuZW52aXJvbm1lbnQuY2F1SGluaE5naGllcFZ1Py52ZXJzaW9uQ29sdW1uUGlja2VyQ2FuQm87XG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24pIHtcbiAgICAgICAgICAgIHRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uID0gdGhpcy5kZWZhdWx0RW50aXR5Q29sdW1uRGljdFtgdiR7dGhpcy52ZXJzaW9ufWBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5sc3RFbnRpdHlQaWNrZXJDb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uID0gdGhpcy5nZW5lcmF0ZUxpc3RFbnRpdHlDb2x1bW5EZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IGluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBnZXRJZHNEb25WaUhpZW5UYWlDYW5CbyhpZENhbkJvOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0dldElkc0RvblZpSGllblRhaS8ke2lkQ2FuQm99YCk7XG4gICAgfVxuXG4gICAgZ2V0Q2FuQm9DYXBUcmVuKHVzZXJJZExhc3RzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldENhbkJvQ2FwVHJlbmAsIHtcbiAgICAgICAgICAgIGxpc3RHdWlkVmFsdWU6IHVzZXJJZExhc3RzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldExpc3RUcmVlRG9uVmlRdWFuTHlCeVVzZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRMaXN0VHJlZURvblZpUXVhbkx5QnlVc2VyYCk7XG4gICAgfVxuXG4gICAgZ2V0TW9kZWxTY2hlbWFzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdNw6MnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnTcOjJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ03DoycsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2lkJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkSG9jVmllbicsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2lkJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2hvVmFUZW4nLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICduZ2F5U2luaCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdOZ8OgeSBzaW5oJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RpZW5UaG9haURpRG9uZycsXG4gICAgICAgICAgICAgICAgbmFtZTogJ1Phu5EgxJFp4buHbiB0aG/huqFpJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ1Phu5EgxJFp4buHbiB0aG/huqFpJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1Phu5EgxJFp4buHbiB0aG/huqFpJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnRW1haWwnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnRW1haWwnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRW1haWwnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZG9uVmlDaHVjVnVTdHInLFxuICAgICAgICAgICAgICAgIG5hbWU6ICfEkMahbiB24buLIC0gQ2jhu6ljIHbhu6UnLFxuICAgICAgICAgICAgICAgIGZ1bGxOYW1lOiAnxJDGoW4gduG7iyAtIENo4bupYyB24bulJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ8SQxqFuIHbhu4sgLSBDaOG7qWMgduG7pScsXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldENvbHVtblNjaGVtYUJhc2UoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE1MHB4J1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZEhvY1ZpZW4nLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVTZWxlY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZpc2libGU6IGZhbHNlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2hvVmFUZW4nLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjAwcHgnXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25nYXlTaW5oJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RhdGUnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTEwcHgnXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RpZW5UaG9haURpRG9uZycsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMTBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTgwcHgnXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RvblZpQ2h1Y1Z1U3RyJyxcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyNTBweCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuICAgIGdldERhdGFFeHBvcnQyQyhncmlkSW5mbykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdFNpZ25hbFIoXG4gICAgICAgICAgICBgJHt0aGlzLnNlcnZpY2VVcml9L0dldERhdGFFeHBvcnQyQ2AsXG4gICAgICAgICAgICBncmlkSW5mb1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGluU29ZZXVMeUxpY2goaWRDYW5Cbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0luU29ZZXVMeUxpY2g/aWRDYW5Cbz0ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdCh1cmwsIGlkQ2FuQm8sIHtcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuYXBwZW5kKFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5MeUxpY2hCb2lIb2FuKGlkQ2FuQm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9Jbkx5TGljaEJvaUhvYW4/aWRDYW5Cbz0ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdCh1cmwsIGlkQ2FuQm8sIHtcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuYXBwZW5kKFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5MeUxpY2hCb05oaWVtKGlkQ2FuQm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9Jbkx5TGljaEJvTmhpZW0/aWRDYW5Cbz0ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdCh1cmwsIGlkQ2FuQm8sIHtcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InLFxuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKCkuYXBwZW5kKFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnLFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGFvVGFpS2hvYW4oaWRDYW5CbzogYW55KSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVGFvVGFpS2hvYW4vJHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwge30pO1xuICAgIH1cblxuICAgIGdldENhbkJvSW5mbyhpZENhbkJvOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDYW5Cb0luZm8vJHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBnZXREZXRhaWxXaXRoQ2h1Y0RhbmhDaHVjVnUoaWRDYW5Cbzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoXG4gICAgICAgICAgICBgJHt0aGlzLnNlcnZpY2VVcml9L0dldERldGFpbFdpdGhDaHVjRGFuaENodWNWdS8ke2lkQ2FuQm99YFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhcCBuaGF0IHRyYW5nIHRoYWkgY2FuYm9faG9zbyB0aGVvIGlkIGNhbkJvXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkQ2FuQm9cbiAgICAgKiBAcGFyYW0ge2FueX0gaWRUcmFuZ1RoYWlcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlc3BvbnNlUmVzdWx0Pn1cbiAgICAgKi9cbiAgICB1cGRhdGVUcmFuZ1RoYWlDYW5Cb0hvU28oaWRDYW5Cbzogc3RyaW5nLCBpZFRyYW5nVGhhaTogYW55KSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlVHJhbmdUaGFpQ2FuQm9Ib1NvP2lkQ2FuQm89JHtpZENhbkJvfSYmaWRUcmFuZ1RoYWk9JHtpZFRyYW5nVGhhaX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHt9KTtcbiAgICB9XG5cbiAgICBHZXRUaG9uZ1RpbkNhbkJvSWQoaWRDYW5CbzogYW55KSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0VGhvbmdUaW5DYW5Cb0lkLyR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgY2hlY2tDYW5Cb0luUGhvbmdEb2lOZ29haSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0NoZWNrQ2FuQm9JblBob25nRG9pTmdvYWlgKTtcbiAgICB9XG5cbiAgICBHZXREYW5oU2FjaENhbkJvVGhlb0RvblZpKGxzdElkT3JnUmVxLCBncmlkSW5mbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldERhbmhTYWNoQ2FuQm9UaGVvRG9uVmkvJHtsc3RJZE9yZ1JlcX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBnZXREYXRhRXhwb3J0S2V0UXVhRGFuaEdpYShncmlkSW5mbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldERhdGFFeHBvcnRLZXRRdWFEYW5oR2lhYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTOG6pXkgZGFuaCBzw6FjaCBjw6FuIGLhu5kgdsOgIGPhuqVwIGTGsOG7m2kgaG/hurdjIGzDoCBuaMOibiB2acOqbiBuZ8aw4budaSBkw7luZyBxdeG6o24gbMO9IHRy4buxYyB0aeG6v3BcbiAgICAgKiBO4bq/dSB0cm9uZyBjw7luZyAxIMSRxqFuIHbhu4sgdGjDrCBuZ8aw4budaSBjw7MgY2jhu6ljIHbhu6UgY+G6pXAgdHLGsOG7n25nIHPhur0gY8OzIGPhuqVwIGTGsOG7m2kgbMOgIHRvw6BuIGLhu5kgbmjDom4gdmnDqm5cbiAgICAgKiBDw7JuIG5nxrDhu51pIGPDsyBjaOG7qWMgduG7pSBj4bqlcCBwaMOzIHRow6wgY8OzIGPhuqVwIGTGsOG7m2kgbMOgIHRvw6BuIGLhu5kgbmjDom4gdmnDqm4gdHLhu6sgY+G6pXAgdHLGsOG7n25nLCAuLi5cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlc3BvbnNlUmVzdWx0Pn1cbiAgICAgKi9cbiAgICBnZXRDYW5Cb0NhcER1b2koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDYW5Cb0NhcER1b2lgKTtcbiAgICB9XG5cbiAgICBjaGVja0lzQ2FuQm9QaG9uZ1RjY2IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGVja0lzQ2FuQm9QaG9uZ1RjY2JgKTtcbiAgICB9XG5cbiAgICBnZXRJZHNEb25WaUR1b2NQaGVwUXVhbkx5KGlkRG9uVmkpIHtcbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0SWRzRG9uVmlEdW9jUGhlcFF1YW5MeWA7XG4gICAgICAgIGlmIChpZERvblZpKSB7XG4gICAgICAgICAgICB1cmwgKz0gYD9pZERvblZpPSR7aWREb25WaX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBnZXRQaGFtVmlEb25WaVF1YW5MeShpc0dldFRyZWUgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBoYW1WaURvblZpUXVhbkx5P2lzR2V0VHJlZT0ke2lzR2V0VHJlZX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuICAgIGdldElkc0RvblZpUXVhbkx5KGFsbENoaWxkID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldElkc0RvblZpUXVhbkx5P2FsbENoaWxkPSR7YWxsQ2hpbGR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldElkc0NhbkJvQ3VuZ0RvblZpKCkge1xuICAgICAgICBjb25zdCBwcm9maWxlSW5mbyA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgIGxldCBpZHNDYW5CbyA9IFtdO1xuICAgICAgICBpZiAocHJvZmlsZUluZm8/LmlkQ2FuQm8pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbiA9IFt0aGlzLm5ld0ZpbHRlcignY29uSGlldUx1YycsIE9wZXJhdG9yLmVxdWFsLCB0cnVlKV07XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbixcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignaWRDYW5CbycsIE9wZXJhdG9yLmVxdWFsLCBwcm9maWxlSW5mby5pZENhbkJvKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBsZXQgaWRzRG9uVmlDYW5Cb0xvZ2luID0gW107XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jYW5Cb19Ib1NvX0NvQ2F1VG9DaHVjU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRBbGwoZmlsdGVycylcbiAgICAgICAgICAgICAgICAudGhlbigocnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkc0RvblZpQ2FuQm9Mb2dpbiA9IHJzLmRhdGEubWFwKCh4KSA9PiB4LmlkRG9uVmkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpZHNEb25WaUNhbkJvTG9naW4ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpZHNEb25WaSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgY29DYXVUb0NodWNGaWx0ZXJzID0gbmV3IEZpbHRlcih7IGxvZ2ljOiAnb3InLCBmaWx0ZXJzOiBbXSB9KTtcbiAgICAgICAgICAgIGlkc0RvblZpQ2FuQm9Mb2dpbi5mb3JFYWNoKChpZERvblZpKSA9PiB7XG4gICAgICAgICAgICAgICAgY29DYXVUb0NodWNGaWx0ZXJzLmZpbHRlcnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAnaWREdW9uZ0RhbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgICAgICAgICAgYDske2lkRG9uVml9O2BcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvQ2F1VG9DaHVjU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRBbGwoW2NvQ2F1VG9DaHVjRmlsdGVyc10sICdpZCcpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZHNEb25WaSA9IHJzLmRhdGEubWFwKCh4KSA9PiB4LmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaWRzRG9uVmkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld2ZpbHRlcnMgPSBbXG4gICAgICAgICAgICAgICAgLi4uY29tbW9uLFxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZERvblZpJywgT3BlcmF0b3IuaW4sIGlkc0RvblZpKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jYW5Cb19Ib1NvX0NvQ2F1VG9DaHVjU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRBbGwobmV3ZmlsdGVycywgJ2lkQ2FuQm8nKVxuICAgICAgICAgICAgICAgIC50aGVuKChycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRzQ2FuQm8gPSBycy5kYXRhLm1hcCgoeCkgPT4geC5pZENhbkJvKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGlkc0NhbkJvO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZUNvbHVtbkRvblZpKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZG9uVmlDYXAycycsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdkb25WaVRoZW9DYXAnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0tob2Egdmnhu4duLyDEkcahbiB24buLJyksXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMjBweCcsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb25WaUNhcDNzJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2RvblZpVGhlb0NhcCcsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnQuG7mSBtw7RuLyB2xINuIHBow7JuZyBraG9hJyksXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMjBweCcsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0SW5mb0NhbkJvV2l0aERvblZpQ2h1Y1Z1KGxzdElkQ2FuQm86IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbdGhpcy5uZXdGaWx0ZXIoJ2lkJywgT3BlcmF0b3IuaW4sIGxzdElkQ2FuQm8pXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YUN1c3RvbVJvdXRlKFxuICAgICAgICAgICAgYEZpbHRlckJ5T3JnLyR7dGhpcy5fY29tbW9uU2VydmljZS5ndWlkRW1wdHkoKX1gLFxuICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAxMDAwMDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzZXRUaG9uZ1RpbkRvblZpQ2FuQm8oaXRlbUNhbkJvOiBhbnksIGxzdENhbkJvRG9uVmk6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGhvU29Eb25WaSA9IGxzdENhbkJvRG9uVmkuZmluZCgoeCkgPT4geC5pZCA9PSBpdGVtQ2FuQm8uaWRDYW5Cbyk7XG4gICAgICAgIGlmIChob1NvRG9uVmkpIHtcbiAgICAgICAgICAgIGl0ZW1DYW5Cby5kb25WaUNhcDJzID0gaG9Tb0RvblZpLmRvblZpQ2FwMnM7XG4gICAgICAgICAgICBpdGVtQ2FuQm8uZG9uVmlDYXAzcyA9IGhvU29Eb25WaS5kb25WaUNhcDNzO1xuICAgICAgICAgICAgaXRlbUNhbkJvLmRvblZpQ2h1Y1Z1cyA9IGhvU29Eb25WaS5kb25WaUNodWNWdXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREb25WaUZ1bGxzQnlDYW5Cb0FwaShpZENhbkJvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RG9uVmlGdWxsc0J5Q2FuQm9BcGk/aWRDYW5Cbz0ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEluZm9BZnRlckdldERhdGEoZGF0YVNvdXJjZSkge1xuICAgICAgICBjb25zdCBndWlkRW1wdHkgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWRFbXB0eSgpO1xuICAgICAgICBjb25zdCBpZHNDYW5CbyA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZGlzdGluY3RBcnJheShcbiAgICAgICAgICAgIGRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB4LmlkQ2FuQm8gIT0gZ3VpZEVtcHR5KVxuICAgICAgICAgICAgICAgIC5tYXAoKHgpID0+IHguaWRDYW5CbylcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbHN0Q2FuQm8gPSAoXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldEFsbChcbiAgICAgICAgICAgICAgICBbdGhpcy5uZXdGaWx0ZXIoJ2lkJywgT3BlcmF0b3IuaW4sIGlkc0NhbkJvKV0sXG4gICAgICAgICAgICAgICAgJ2lkLGNvZGUsaG9WYVRlbixuZ2F5U2luaCxnaW9pVGluaCdcbiAgICAgICAgICAgIClcbiAgICAgICAgKS5kYXRhO1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmlkQ2FuQm8gIT0gZ3VpZEVtcHR5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FuQm8gPSBsc3RDYW5Cby5maW5kKCh4KSA9PiB4LmlkID09IGVsZW1lbnQuaWRDYW5Cbyk7XG4gICAgICAgICAgICAgICAgaWYgKGNhbkJvKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubWFDYW5CbyA9IGNhbkJvLmNvZGU7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaG9WYVRlbiA9IGNhbkJvLmhvVmFUZW47XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudGVuQ2FuQm8gPSBjYW5Cby5ob1ZhVGVuO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm5nYXlTaW5oID0gY2FuQm8ubmdheVNpbmg7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZ2lvaVRpbmggPSBjYW5Cby5naW9pVGluaDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldElkVXNlckJ5RG9uVmkobHN0SWREb25WaTogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9nZXRJZFVzZXJCeURvblZpYCwge1xuICAgICAgICAgICAgbGlzdEd1aWRWYWx1ZTogbHN0SWREb25WaSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0SWRDYW5Cb0J5RG9uVmkobHN0SWREb25WaTogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9nZXRJZENhbkJvQnlEb25WaWAsIHtcbiAgICAgICAgICAgIGxpc3RHdWlkVmFsdWU6IGxzdElkRG9uVmksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGdldENvQ2F1VG9DaHVjUm9vdERvblZpX0J5VXNlcklkKHVzZXJJZCkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldENvQ2F1VG9DaHVjUm9vdERvblZpX0J5VXNlcklkLyR7dXNlcklkfWA7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBHZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaV9CeUxpc3RVc2VySWQobHN0VXNlcklkKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q29DYXVUb0NodWNSb290RG9uVmlfQnlMaXN0VXNlcklkYDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdFBvc3QodXJsLCBsc3RVc2VySWQpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldENvQ2F1VG9DaHVjUm9vdERvblZpKGdyaWRJbmZvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWxsQnlGaWx0ZXIvR2V0Q29DYXVUb0NodWNSb290RG9uVmlgO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZVBpY2tlckNvbnRyb2xTY2hlbWEoY29udHJvbDogQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSwgZW51bUNhbkJvOiBhbnkgPSBFbnVtQ2FuQm8uVFJPTkdfRE9OX1ZJKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgIGZpZWxkOiAnaWRDYW5CbycsXG4gICAgICAgICAgICBsYWJlbDogJ0PDoW4gYuG7mScsXG4gICAgICAgICAgICB0aXRsZTogJ0No4buNbiBjw6FuIGLhu5knLFxuICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMsXG4gICAgICAgICAgICBwbHVzVXJsOiAnV2l0aENodWNEYW5oQ2h1Y1Z1JyxcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ2hvVmFUZW4nLFxuICAgICAgICAgICAgZmllbGRQbHVzOiAnY29kZScsXG4gICAgICAgICAgICBmaWVsZFNlYXJjaFRleHQ6IFsnZW1haWwnLCAnY29kZSddLFxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBpdGVtLmhvVmFUZW47XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtpdGVtLmNvZGV9IC0gJHtyZXN1bHR9IGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnRlbkRvblZpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgLSAke2l0ZW0udGVuRG9uVml9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIGFmdGVyR2V0RGF0YURyb3Bkb3duOiAoZGF0YVNvdXJjZSwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VGVuRG9uVmkoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJHZXREYXRhUGlja2VkOiBhc3luYyAoZGF0YVNvdXJjZSwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0RGF0YVBsdXMoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJHZXREYXRhVW5QaWNrZWQ6IGFzeW5jIChkYXRhU291cmNlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXREYXRhUGx1cyhkYXRhU291cmNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWZhdWx0RmlsdGVyczogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5pc0NhY2hpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpc0NhY2hpbmcnLCBPcGVyYXRvci5lcXVhbCwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3dpdGNoIChlbnVtQ2FuQm8pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBFbnVtQ2FuQm8uTkdPQUlfRE9OX1ZJOlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKCdpc05nb2FpRG9uVmknLCBPcGVyYXRvci5lcXVhbCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRW51bUNhbkJvLlRST05HX0RPTl9WSTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcignaXNOZ29haURvblZpJywgT3BlcmF0b3IuZXF1YWwsIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbixcbiAgICAgICAgICAgIC4uLmNvbnRyb2wsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29udHJvbC5kYXRhVHlwZSA9PSBFbnVtQ29udHJvbFBpY2tlclR5cGUuRE9JVEFDICYmICF0aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbi5zb21lKGl0ZW0gPT4gaXRlbS5jb2RlID09ICdpZERvaVRhYycpKSB7XG4gICAgICAgICAgICB0aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbi5wdXNoKFxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ8SQ4buRaSB0w6FjJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ2lkRG9pVGFjJyxcbiAgICAgICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2hvU29Eb2lUYWNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGlzQXJyYXlGaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZmllbGRQbHVzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcmVzdWx0LmZpZWxkUGx1c1xuICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChxKSA9PiBxLnRyaW0oKSlcbiAgICAgICAgICAgICAgICAgICAgLmluZGV4T2YoJ2lkTmdhY2hWaWVuQ2h1YycpID09IC0xXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuZmllbGRQbHVzICs9ICcsaWROZ2FjaFZpZW5DaHVjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5maWVsZFBsdXMgPSAnaWROZ2FjaFZpZW5DaHVjJztcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuZmllbGRQbHVzICs9ICcsbmdheVNpbmgsbmdheVNpbmgyLGNodWNEYW5ocyxpZEhvY0hhbSxpZEhvY1ZpLGRpZW5UaG9haURpRG9uZyxjb2RlJztcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VGVuRG9uVmkoZGF0YVNvdXJjZTogYW55W10pIHtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlPy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIC8vIELhu5Ugc3VuZyBt4buZdCBz4buRIHRow7RuZyB0aW4gxJHhu4MgaGnhu4NuIHRo4buLIGxhYmVsIHRyw6puIGF1dG9jb21wbGV0ZSBwaWNrZXIgZOG6oW5nIGRyb3Bkb3duXG4gICAgICAgICAgICBpZiAoaXRlbS5kb25WaUNodWNWdXMgJiYgaXRlbS5kb25WaUNodWNWdXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBpdGVtRG9uVmlDaGluaCA9IGl0ZW0uZG9uVmlDaHVjVnVzLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChxKSA9PiBxLmlzRG9uVmlDaGluaFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtRG9uVmlDaGluaCkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtRG9uVmlDaGluaCA9IGl0ZW0uZG9uVmlDaHVjVnVzWzBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtLnRlbkRvblZpID0gaXRlbURvblZpQ2hpbmguY2h1Y1Z1XG4gICAgICAgICAgICAgICAgICAgID8gYCR7aXRlbURvblZpQ2hpbmguY2h1Y1Z1fSAke2l0ZW1Eb25WaUNoaW5oLmRvblZpfWBcbiAgICAgICAgICAgICAgICAgICAgOiBpdGVtRG9uVmlDaGluaC5kb25WaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldERhdGFQbHVzKGRhdGFTb3VyY2U6IGFueSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2h1Y0RhbmhzKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zdHJDaHVjRGFuaHMgPSBpdGVtLmNodWNEYW5ocy50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbS5zdHJDaHVjRGFuaHMgPSAnJztcbiAgICAgICAgICAgIGlmIChpdGVtLmNodWNEYW5ocykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtLmNodWNEYW5ocykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaS5jaHVjRGFuaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHJDaHVjRGFuaHMgKz0gaS5jaHVjRGFuaDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0uc3RyRG9uVmlDaHVjVnVzID0gJyc7XG4gICAgICAgICAgICBpZiAoaXRlbS5kb25WaUNodWNWdXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBpdGVtLmRvblZpQ2h1Y1Z1cykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaS5jaHVjVnUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RyRG9uVmlDaHVjVnVzICs9IGA8cD4ke2kuY2h1Y1Z1fSAtICR7aS5kb25WaX08L3A+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RyRG9uVmlDaHVjVnVzICs9IGA8cD4ke2kuZG9uVml9PC9wPmA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5uZ2F5U2luaCkge1xuICAgICAgICAgICAgICAgIGl0ZW0uc3RyTmdheVNpbmggPSB0aGlzLl9jcnVkU2VydmljZS5yZW5kZXJEYXRlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLm5nYXlTaW5oLFxuICAgICAgICAgICAgICAgICAgICAnbm9ybWFsJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLnN0ck5nYXlTaW5oID0gaXRlbS5uZ2F5U2luaDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLmhvY0hhbUhvY1ZpXG4gICAgICAgICAgICAgICAgPSBpdGVtLmlkSG9jSGFtICYmIGl0ZW0uaWRIb2NWaVxuICAgICAgICAgICAgICAgICAgICA/IGAke2l0ZW0uaWRIb2NIYW19LiAke2l0ZW0uaWRIb2NWaX1gXG4gICAgICAgICAgICAgICAgICAgIDogaXRlbS5pZEhvY0hhbSB8fCBpdGVtLmlkSG9jVmk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVDYW5Cb1RvR2lhbmdWaWVuKG1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVDYW5Cb1RvR2lhbmdWaWVuYCxcbiAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY3JlYXRlR2lhbmdWaWVuRG9pVGFjKG1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9DcmVhdGVHaWFuZ1ZpZW5Eb2lUYWNgLFxuICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXREb25WaVBoYW5DYXBCeUlkcyhtb2RlbCwgaXNVc2VyID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREb25WaVBoYW5DYXBCeUlkcy8ke2lzVXNlcn1gLCBtb2RlbCk7XG4gICAgfVxuXG4gICAgdXBkYXRlR2lhbmdWaWVuTm9pQm8obW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFB1dChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlR2lhbmdWaWVuTm9pQm8vJHttb2RlbC5pZH1gLFxuICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVHaWFuZ1ZpZW5Eb2lUYWMobW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFB1dChcbiAgICAgICAgICAgIGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlR2lhbmdWaWVuRG9pVGFjLyR7bW9kZWwuaWR9YCxcbiAgICAgICAgICAgIG1vZGVsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0THlMaWNoS2hvYUhvY0NhbkJvKGlkKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0THlMaWNoS2hvYUhvY0NhbkJvLyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGFzeW5jIEdldERvblZpQ2h1Y1Z1KGlkQ2FuQm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREb25WaUNodWNWdS8ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVMaXN0RW50aXR5Q29sdW1uRGVmYXVsdCgpIHtcbiAgICAgICAgY29uc3QgX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnTcOjJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnY29kZScsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnODBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnSOG7jWMgaMOgbSwgaOG7jWMgduG7iycsXG4gICAgICAgICAgICAgICAgY29kZTogJ2hvY0hhbUhvY1ZpJyxcbiAgICAgICAgICAgICAgICBub3RJbkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTUwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdob1ZhVGVuJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ3N0ck5nYXlTaW5oJyxcbiAgICAgICAgICAgICAgICBpc1NlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0dp4bubaSB0w61uaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ2dpb2lUaW5oJyxcbiAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogX21hc3RlckRhdGFTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGdyb3VwQ29kZTogJ0dJT0lfVElOSCcsXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzkwcHgnLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdDaOG7qWMgZGFuaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ3N0ckNodWNEYW5ocycsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxNTBweCcsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0No4bupYyB24bulIC0gxJDGoW4gduG7iycsXG4gICAgICAgICAgICAgICAgY29kZTogJ3N0ckRvblZpQ2h1Y1Z1cycsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcbiAgICAgICAgICAgICAgICBub3RJbkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIyMHB4JyxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyB0ZW1wbGF0ZUZpbHRlcjogdGVtcGxhdGUuZmlsdGVyRG9uVmlSZWYsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpZWxkRmlsdGVyOiAnaWREb25WaXMnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0VtYWlsJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTcwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ8SQ4buRaSB0w6FjJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnaWREb2lUYWMnLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzQXJyYXlGaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcy5faG9Tb0RvaVRhY1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGhvbmdLZUNhbkJvKHBsdXNVcmw6IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7dGhpcy5hcGlHZXREYXRhfS8ke3BsdXNVcmx9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVMaXN0RW50aXR5Q29sdW1uVjEoKSB7XG4gICAgICAgIGNvbnN0IF9tYXN0ZXJEYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNYXN0ZXJEYXRhU2VydmljZSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ03DoycsXG4gICAgICAgICAgICAgICAgY29kZTogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzgwcHgnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdob1ZhVGVuJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMDBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ3N0ck5nYXlTaW5oJyxcbiAgICAgICAgICAgICAgICBpc1NlYXJjaGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0dp4bubaSB0w61uaCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ2dpb2lUaW5oJyxcbiAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogX21hc3RlckRhdGFTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIGdyb3VwQ29kZTogJ0dJT0lfVElOSCcsXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzkwcHgnLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogMSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdDaOG7qWMgduG7pSAtIMSQxqFuIHbhu4snLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdzdHJEb25WaUNodWNWdXMnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsXG4gICAgICAgICAgICAgICAgbm90SW5GaWVsZHM6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcyMjBweCcsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gdGVtcGxhdGVGaWx0ZXI6IHRlbXBsYXRlLmZpbHRlckRvblZpUmVmLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmaWVsZEZpbHRlcjogJ2lkRG9uVmlzJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdFbWFpbCcsXG4gICAgICAgICAgICAgICAgY29kZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE3MHB4JyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZ2V0UXVhbkx5Q2FwVHJlbkJ5VXNlcklkKGlkVXNlcjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DYW5Cb1F1YW5MeUJ5VXNlcklkLyR7aWRVc2VyfWApO1xuICAgIH1cblxuICAgIGdldERhbmhTYWNoVXNlckNhcFRyZW4oaWRzRG9uVmkpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREYW5oU2FjaFVzZXJDYXBUcmVuYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBpZHNEb25WaSk7XG4gICAgfVxuXG5cbn1cblxuIl19
682
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuYm8taG9zby5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NhbmJvLWhvc28uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztB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aWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRW51bUNvbnRyb2xQaWNrZXJUeXBlIH0gZnJvbSAnLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSwgQ29sdW1uU2NoZW1hQmFzZSwgRW50aXR5UGlja2VyQ29sdW1uLCBNb2RlbFNjaGVtYSwgT3BlcmF0b3IgfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IENvQ2F1VG9DaHVjU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29jYXV0b2NodWMvc2VydmljZXMvY29jYXV0b2NodWMuc2VydmljZSc7XG5pbXBvcnQgeyBFbnVtQ2FuQm8gfSBmcm9tICcuLi9lbnVtcy9jb21tb24nO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IENhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlIH0gZnJvbSAnLi9jYW5iby1ob3NvLWNvY2F1dG9jaHVjLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBIb1NvRG9pVGFjU2VydmljZSB9IGZyb20gJy4vaG9zb2RvaXRhYy5zZXJ2aWNlJztcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDYW5Cb0hvU29TZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xuICAgIGVudmlyb25tZW50OiBhbnk7XG4gICAgdmVyc2lvbjogYW55O1xuICAgIGxzdEVudGl0eVBpY2tlckNvbHVtbjogRW50aXR5UGlja2VyQ29sdW1uW107XG4gICAgZGVmYXVsdEVudGl0eUNvbHVtbkRpY3QgPSB7XG4gICAgICAgIHYxOiB0aGlzLmdlbmVyYXRlTGlzdEVudGl0eUNvbHVtblYxKClcbiAgICB9O1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGh0dHA6IEh0dHBDbGllbnQsIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY2FuQm9fSG9Tb19Db0NhdVRvQ2h1Y1NlcnZpY2U6IENhbkJvX0hvU29fQ29DYXVUb0NodWNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jb0NhdVRvQ2h1Y1NlcnZpY2U6IENvQ2F1VG9DaHVjU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfaG9Tb0RvaVRhY1NlcnZpY2U6IEhvU29Eb2lUYWNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5jYW5ib0VuZHBvaW50fS8ke19tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaVZlcnNpb259L0NhbkJvX0hvU29gKTtcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IF9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmFwaURvbWFpbi5jYW5ib0VuZHBvaW50O1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XG4gICAgICAgIHRoaXMuZW5kUG9pbnQgPSB0aGlzLmVudmlyb25tZW50LmFwaURvbWFpbi5jYW5ib0VuZHBvaW50O1xuICAgICAgICB0aGlzLnZlcnNpb24gPSB0aGlzLmVudmlyb25tZW50LmNhdUhpbmhOZ2hpZXBWdT8udmVyc2lvbkNvbHVtblBpY2tlckNhbkJvO1xuICAgICAgICBpZiAodGhpcy52ZXJzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbiA9IHRoaXMuZGVmYXVsdEVudGl0eUNvbHVtbkRpY3RbYHYke3RoaXMudmVyc2lvbn1gXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbiA9IHRoaXMuZ2VuZXJhdGVMaXN0RW50aXR5Q29sdW1uRGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgfVxuXG4gICAgZ2V0SWRzRG9uVmlIaWVuVGFpQ2FuQm8oaWRDYW5Cbzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJZHNEb25WaUhpZW5UYWkvJHtpZENhbkJvfWApO1xuICAgIH1cblxuICAgIGdldENhbkJvQ2FwVHJlbih1c2VySWRMYXN0czogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDYW5Cb0NhcFRyZW5gLCB7XG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiB1c2VySWRMYXN0c1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRMaXN0VHJlZURvblZpUXVhbkx5QnlVc2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0TGlzdFRyZWVEb25WaVF1YW5MeUJ5VXNlcmApO1xuICAgIH1cblxuICAgIGdldE1vZGVsU2NoZW1hcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnTcOjJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ03DoycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNw6MnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWQnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdpZCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZEhvY1ZpZW4nLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdpZCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdob1ZhVGVuJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdI4buNIHbDoCB0w6puJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmdheVNpbmgnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdOZ8OgeSBzaW5oJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ05nw6B5IHNpbmgnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnTmfDoHkgc2luaCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkaWVuVGhvYWlEaURvbmcnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdT4buRIMSRaeG7h24gdGhv4bqhaScsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWU6ICdT4buRIMSRaeG7h24gdGhv4bqhaScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdT4buRIMSRaeG7h24gdGhv4bqhaScsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0VtYWlsJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ0VtYWlsJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0VtYWlsJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RvblZpQ2h1Y1Z1U3RyJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnxJDGoW4gduG7iyAtIENo4bupYyB24bulJyxcbiAgICAgICAgICAgICAgICBmdWxsTmFtZTogJ8SQxqFuIHbhu4sgLSBDaOG7qWMgduG7pScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICfEkMahbiB24buLIC0gQ2jhu6ljIHbhu6UnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXRDb2x1bW5TY2hlbWFCYXNlKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxNTBweCdcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRIb2NWaWVuJyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdob1ZhVGVuJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4J1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICduZ2F5U2luaCcsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdkYXRlJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzExMHB4J1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkaWVuVGhvYWlEaURvbmcnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTEwcHgnXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE4MHB4J1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdkb25WaUNodWNWdVN0cicsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVTZWxlY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjUwcHgnXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cbiAgICBnZXREYXRhRXhwb3J0MkMoZ3JpZEluZm8pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3RTaWduYWxSKFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREYXRhRXhwb3J0MkNgLFxuICAgICAgICAgICAgZ3JpZEluZm9cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpblNvWWV1THlMaWNoKGlkQ2FuQm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9JblNvWWV1THlMaWNoP2lkQ2FuQm89JHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3QodXJsLCBpZENhbkJvLCB7XG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLmFwcGVuZChcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluTHlMaWNoQm9pSG9hbihpZENhbkJvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vSW5MeUxpY2hCb2lIb2FuP2lkQ2FuQm89JHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3QodXJsLCBpZENhbkJvLCB7XG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLmFwcGVuZChcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluTHlMaWNoQm9OaGllbShpZENhbkJvKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vSW5MeUxpY2hCb05oaWVtP2lkQ2FuQm89JHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3QodXJsLCBpZENhbkJvLCB7XG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycygpLmFwcGVuZChcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJyxcbiAgICAgICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRhb1RhaUtob2FuKGlkQ2FuQm86IGFueSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1Rhb1RhaUtob2FuLyR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHt9KTtcbiAgICB9XG5cbiAgICBnZXRDYW5Cb0luZm8oaWRDYW5Cbzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q2FuQm9JbmZvLyR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0RGV0YWlsV2l0aENodWNEYW5oQ2h1Y1Z1KGlkQ2FuQm86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREZXRhaWxXaXRoQ2h1Y0RhbmhDaHVjVnUvJHtpZENhbkJvfWBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYXAgbmhhdCB0cmFuZyB0aGFpIGNhbmJvX2hvc28gdGhlbyBpZCBjYW5Cb1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZENhbkJvXG4gICAgICogQHBhcmFtIHthbnl9IGlkVHJhbmdUaGFpXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxSZXNwb25zZVJlc3VsdD59XG4gICAgICovXG4gICAgdXBkYXRlVHJhbmdUaGFpQ2FuQm9Ib1NvKGlkQ2FuQm86IHN0cmluZywgaWRUcmFuZ1RoYWk6IGFueSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZVRyYW5nVGhhaUNhbkJvSG9Tbz9pZENhbkJvPSR7aWRDYW5Cb30mJmlkVHJhbmdUaGFpPSR7aWRUcmFuZ1RoYWl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCB7fSk7XG4gICAgfVxuXG4gICAgR2V0VGhvbmdUaW5DYW5Cb0lkKGlkQ2FuQm86IGFueSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFRob25nVGluQ2FuQm9JZC8ke2lkQ2FuQm99YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGNoZWNrQ2FuQm9JblBob25nRG9pTmdvYWkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQoYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGVja0NhbkJvSW5QaG9uZ0RvaU5nb2FpYCk7XG4gICAgfVxuXG4gICAgR2V0RGFuaFNhY2hDYW5Cb1RoZW9Eb25WaShsc3RJZE9yZ1JlcSwgZ3JpZEluZm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREYW5oU2FjaENhbkJvVGhlb0RvblZpLyR7bHN0SWRPcmdSZXF9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgZ2V0RGF0YUV4cG9ydEtldFF1YURhbmhHaWEoZ3JpZEluZm8pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXREYXRhRXhwb3J0S2V0UXVhRGFuaEdpYWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEzhuqV5IGRhbmggc8OhY2ggY8OhbiBi4buZIHbDoCBj4bqlcCBkxrDhu5tpIGhv4bq3YyBsw6AgbmjDom4gdmnDqm4gbmfGsOG7nWkgZMO5bmcgcXXhuqNuIGzDvSB0cuG7sWMgdGnhur9wXG4gICAgICogTuG6v3UgdHJvbmcgY8O5bmcgMSDEkcahbiB24buLIHRow6wgbmfGsOG7nWkgY8OzIGNo4bupYyB24bulIGPhuqVwIHRyxrDhu59uZyBz4bq9IGPDsyBj4bqlcCBkxrDhu5tpIGzDoCB0b8OgbiBi4buZIG5ow6JuIHZpw6puXG4gICAgICogQ8OybiBuZ8aw4budaSBjw7MgY2jhu6ljIHbhu6UgY+G6pXAgcGjDsyB0aMOsIGPDsyBj4bqlcCBkxrDhu5tpIGzDoCB0b8OgbiBi4buZIG5ow6JuIHZpw6puIHRy4burIGPhuqVwIHRyxrDhu59uZywgLi4uXG4gICAgICogQHJldHVybiB7UHJvbWlzZTxSZXNwb25zZVJlc3VsdD59XG4gICAgICovXG4gICAgZ2V0Q2FuQm9DYXBEdW9pKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0Q2FuQm9DYXBEdW9pYCk7XG4gICAgfVxuXG4gICAgY2hlY2tJc0NhbkJvUGhvbmdUY2NiKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KGAke3RoaXMuc2VydmljZVVyaX0vQ2hlY2tJc0NhbkJvUGhvbmdUY2NiYCk7XG4gICAgfVxuXG4gICAgZ2V0SWRzRG9uVmlEdW9jUGhlcFF1YW5MeShpZERvblZpKSB7XG4gICAgICAgIGxldCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldElkc0RvblZpRHVvY1BoZXBRdWFuTHlgO1xuICAgICAgICBpZiAoaWREb25WaSkge1xuICAgICAgICAgICAgdXJsICs9IGA/aWREb25WaT0ke2lkRG9uVml9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0UGhhbVZpRG9uVmlRdWFuTHkoaXNHZXRUcmVlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQaGFtVmlEb25WaVF1YW5MeT9pc0dldFRyZWU9JHtpc0dldFRyZWV9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cbiAgICBnZXRJZHNEb25WaVF1YW5MeShhbGxDaGlsZCA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRJZHNEb25WaVF1YW5MeT9hbGxDaGlsZD0ke2FsbENoaWxkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRJZHNDYW5Cb0N1bmdEb25WaSgpIHtcbiAgICAgICAgY29uc3QgcHJvZmlsZUluZm8gPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICBsZXQgaWRzQ2FuQm8gPSBbXTtcbiAgICAgICAgaWYgKHByb2ZpbGVJbmZvPy5pZENhbkJvKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tb24gPSBbdGhpcy5uZXdGaWx0ZXIoJ2NvbkhpZXVMdWMnLCBPcGVyYXRvci5lcXVhbCwgdHJ1ZSldO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtcbiAgICAgICAgICAgICAgICAuLi5jb21tb24sXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2lkQ2FuQm8nLCBPcGVyYXRvci5lcXVhbCwgcHJvZmlsZUluZm8uaWRDYW5CbyksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbGV0IGlkc0RvblZpQ2FuQm9Mb2dpbiA9IFtdO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2FuQm9fSG9Tb19Db0NhdVRvQ2h1Y1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0QWxsKGZpbHRlcnMpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZHNEb25WaUNhbkJvTG9naW4gPSBycy5kYXRhLm1hcCgoeCkgPT4geC5pZERvblZpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaWRzRG9uVmlDYW5Cb0xvZ2luLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaWRzRG9uVmkgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGNvQ2F1VG9DaHVjRmlsdGVycyA9IG5ldyBGaWx0ZXIoeyBsb2dpYzogJ29yJywgZmlsdGVyczogW10gfSk7XG4gICAgICAgICAgICBpZHNEb25WaUNhbkJvTG9naW4uZm9yRWFjaCgoaWREb25WaSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvQ2F1VG9DaHVjRmlsdGVycy5maWx0ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkRHVvbmdEYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGA7JHtpZERvblZpfTtgXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jb0NhdVRvQ2h1Y1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0QWxsKFtjb0NhdVRvQ2h1Y0ZpbHRlcnNdLCAnaWQnKVxuICAgICAgICAgICAgICAgIC50aGVuKChycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRzRG9uVmkgPSBycy5kYXRhLm1hcCgoeCkgPT4geC5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlkc0RvblZpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdmaWx0ZXJzID0gW1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbixcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignaWREb25WaScsIE9wZXJhdG9yLmluLCBpZHNEb25WaSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2FuQm9fSG9Tb19Db0NhdVRvQ2h1Y1NlcnZpY2VcbiAgICAgICAgICAgICAgICAuZ2V0QWxsKG5ld2ZpbHRlcnMsICdpZENhbkJvJylcbiAgICAgICAgICAgICAgICAudGhlbigocnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkc0NhbkJvID0gcnMuZGF0YS5tYXAoKHgpID0+IHguaWRDYW5Cbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBpZHNDYW5CbztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVDb2x1bW5Eb25WaSgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2RvblZpQ2FwMnMnLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnZG9uVmlUaGVvQ2FwJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdLaG9hIHZp4buHbi8gxJHGoW4gduG7iycpLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjIwcHgnLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnZG9uVmlDYXAzcycsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdkb25WaVRoZW9DYXAnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0Lhu5kgbcO0bi8gdsSDbiBwaMOybmcga2hvYScpLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjIwcHgnLFxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGdldEluZm9DYW5Cb1dpdGhEb25WaUNodWNWdShsc3RJZENhbkJvOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW3RoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmluLCBsc3RJZENhbkJvKV07XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGFDdXN0b21Sb3V0ZShcbiAgICAgICAgICAgIGBGaWx0ZXJCeU9yZy8ke3RoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCl9YCxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgMTAwMDAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0VGhvbmdUaW5Eb25WaUNhbkJvKGl0ZW1DYW5CbzogYW55LCBsc3RDYW5Cb0RvblZpOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBob1NvRG9uVmkgPSBsc3RDYW5Cb0RvblZpLmZpbmQoKHgpID0+IHguaWQgPT0gaXRlbUNhbkJvLmlkQ2FuQm8pO1xuICAgICAgICBpZiAoaG9Tb0RvblZpKSB7XG4gICAgICAgICAgICBpdGVtQ2FuQm8uZG9uVmlDYXAycyA9IGhvU29Eb25WaS5kb25WaUNhcDJzO1xuICAgICAgICAgICAgaXRlbUNhbkJvLmRvblZpQ2FwM3MgPSBob1NvRG9uVmkuZG9uVmlDYXAzcztcbiAgICAgICAgICAgIGl0ZW1DYW5Cby5kb25WaUNodWNWdXMgPSBob1NvRG9uVmkuZG9uVmlDaHVjVnVzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0RG9uVmlGdWxsc0J5Q2FuQm9BcGkoaWRDYW5Cbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldERvblZpRnVsbHNCeUNhbkJvQXBpP2lkQ2FuQm89JHtpZENhbkJvfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRJbmZvQWZ0ZXJHZXREYXRhKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgY29uc3QgZ3VpZEVtcHR5ID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkRW1wdHkoKTtcbiAgICAgICAgY29uc3QgaWRzQ2FuQm8gPSB0aGlzLl9jb21tb25TZXJ2aWNlLmRpc3RpbmN0QXJyYXkoXG4gICAgICAgICAgICBkYXRhU291cmNlXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4geC5pZENhbkJvICE9IGd1aWRFbXB0eSlcbiAgICAgICAgICAgICAgICAubWFwKCh4KSA9PiB4LmlkQ2FuQm8pXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGxzdENhbkJvID0gKFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRBbGwoXG4gICAgICAgICAgICAgICAgW3RoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmluLCBpZHNDYW5CbyldLFxuICAgICAgICAgICAgICAgICdpZCxjb2RlLGhvVmFUZW4sbmdheVNpbmgsZ2lvaVRpbmgnXG4gICAgICAgICAgICApXG4gICAgICAgICkuZGF0YTtcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pZENhbkJvICE9IGd1aWRFbXB0eSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbkJvID0gbHN0Q2FuQm8uZmluZCgoeCkgPT4geC5pZCA9PSBlbGVtZW50LmlkQ2FuQm8pO1xuICAgICAgICAgICAgICAgIGlmIChjYW5Cbykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm1hQ2FuQm8gPSBjYW5Cby5jb2RlO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmhvVmFUZW4gPSBjYW5Cby5ob1ZhVGVuO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRlbkNhbkJvID0gY2FuQm8uaG9WYVRlbjtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5uZ2F5U2luaCA9IGNhbkJvLm5nYXlTaW5oO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lmdpb2lUaW5oID0gY2FuQm8uZ2lvaVRpbmg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRJZFVzZXJCeURvblZpKGxzdElkRG9uVmk6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vZ2V0SWRVc2VyQnlEb25WaWAsIHtcbiAgICAgICAgICAgIGxpc3RHdWlkVmFsdWU6IGxzdElkRG9uVmksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldElkQ2FuQm9CeURvblZpKGxzdElkRG9uVmk6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vZ2V0SWRDYW5Cb0J5RG9uVmlgLCB7XG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiBsc3RJZERvblZpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaV9CeVVzZXJJZCh1c2VySWQpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaV9CeVVzZXJJZC8ke3VzZXJJZH1gO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgR2V0Q29DYXVUb0NodWNSb290RG9uVmlfQnlMaXN0VXNlcklkKGxzdFVzZXJJZCkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldENvQ2F1VG9DaHVjUm9vdERvblZpX0J5TGlzdFVzZXJJZGA7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbHN0VXNlcklkKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRDb0NhdVRvQ2h1Y1Jvb3REb25WaShncmlkSW5mbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFsbEJ5RmlsdGVyL0dldENvQ2F1VG9DaHVjUm9vdERvblZpYDtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZGVmYXVsdFBvc3QodXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVQaWNrZXJDb250cm9sU2NoZW1hKGNvbnRyb2w6IEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsIGVudW1DYW5CbzogYW55ID0gRW51bUNhbkJvLlRST05HX0RPTl9WSSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICBmaWVsZDogJ2lkQ2FuQm8nLFxuICAgICAgICAgICAgbGFiZWw6ICdDw6FuIGLhu5knLFxuICAgICAgICAgICAgdGl0bGU6ICdDaOG7jW4gY8OhbiBi4buZJyxcbiAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLFxuICAgICAgICAgICAgcGx1c1VybDogJ1dpdGhDaHVjRGFuaENodWNWdScsXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICdob1ZhVGVuJyxcbiAgICAgICAgICAgIGZpZWxkUGx1czogJ2NvZGUnLFxuICAgICAgICAgICAgZmllbGRTZWFyY2hUZXh0OiBbJ2VtYWlsJywgJ2NvZGUnXSxcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gaXRlbS5ob1ZhVGVuO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYCR7aXRlbS5jb2RlfSAtICR7cmVzdWx0fSBgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXRlbS50ZW5Eb25WaSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gYC0gJHtpdGVtLnRlbkRvblZpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBhZnRlckdldERhdGFEcm9wZG93bjogKGRhdGFTb3VyY2UsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRlbkRvblZpKGRhdGFTb3VyY2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyR2V0RGF0YVBpY2tlZDogYXN5bmMgKGRhdGFTb3VyY2UsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldERhdGFQbHVzKGRhdGFTb3VyY2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFmdGVyR2V0RGF0YVVuUGlja2VkOiBhc3luYyAoZGF0YVNvdXJjZSwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0RGF0YVBsdXMoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnM6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wuaXNDYWNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcignaXNDYWNoaW5nJywgT3BlcmF0b3IuZXF1YWwsIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZW51bUNhbkJvKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRW51bUNhbkJvLk5HT0FJX0RPTl9WSTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcignaXNOZ29haURvblZpJywgT3BlcmF0b3IuZXF1YWwsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEVudW1DYW5Cby5UUk9OR19ET05fVkk6XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoJ2lzTmdvYWlEb25WaScsIE9wZXJhdG9yLmVxdWFsLCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4uY29udHJvbCxcbiAgICAgICAgICAgIGNvbHVtbnM6IFsuLi50aGlzLmxzdEVudGl0eVBpY2tlckNvbHVtbiwgLi4uY29udHJvbC5jb2x1bW5zXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb250cm9sLmRhdGFUeXBlID09IEVudW1Db250cm9sUGlja2VyVHlwZS5ET0lUQUMgJiYgIXRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uLnNvbWUoaXRlbSA9PiBpdGVtLmNvZGUgPT0gJ2lkRG9pVGFjJykpIHtcbiAgICAgICAgICAgIHRoaXMubHN0RW50aXR5UGlja2VyQ29sdW1uLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5FpIHTDoWMnLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnaWREb2lUYWMnLFxuICAgICAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcy5faG9Tb0RvaVRhY1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaXNBcnJheUZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5maWVsZFBsdXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICByZXN1bHQuZmllbGRQbHVzXG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHEpID0+IHEudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAuaW5kZXhPZignaWROZ2FjaFZpZW5DaHVjJykgPT0gLTFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5maWVsZFBsdXMgKz0gJyxpZE5nYWNoVmllbkNodWMnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LmZpZWxkUGx1cyA9ICdpZE5nYWNoVmllbkNodWMnO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5maWVsZFBsdXMgKz0gJyxuZ2F5U2luaCxuZ2F5U2luaDIsY2h1Y0RhbmhzLGlkSG9jSGFtLGlkSG9jVmksZGllblRob2FpRGlEb25nLGNvZGUnO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUZW5Eb25WaShkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2U/Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgLy8gQuG7lSBzdW5nIG3hu5l0IHPhu5EgdGjDtG5nIHRpbiDEkeG7gyBoaeG7g24gdGjhu4sgbGFiZWwgdHLDqm4gYXV0b2NvbXBsZXRlIHBpY2tlciBk4bqhbmcgZHJvcGRvd25cbiAgICAgICAgICAgIGlmIChpdGVtLmRvblZpQ2h1Y1Z1cyAmJiBpdGVtLmRvblZpQ2h1Y1Z1cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGl0ZW1Eb25WaUNoaW5oID0gaXRlbS5kb25WaUNodWNWdXMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKHEpID0+IHEuaXNEb25WaUNoaW5oXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW1Eb25WaUNoaW5oKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Eb25WaUNoaW5oID0gaXRlbS5kb25WaUNodWNWdXNbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGl0ZW0udGVuRG9uVmkgPSBpdGVtRG9uVmlDaGluaC5jaHVjVnVcbiAgICAgICAgICAgICAgICAgICAgPyBgJHtpdGVtRG9uVmlDaGluaC5jaHVjVnV9ICR7aXRlbURvblZpQ2hpbmguZG9uVml9YFxuICAgICAgICAgICAgICAgICAgICA6IGl0ZW1Eb25WaUNoaW5oLmRvblZpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGF0YVBsdXMoZGF0YVNvdXJjZTogYW55KSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5jaHVjRGFuaHMpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnN0ckNodWNEYW5ocyA9IGl0ZW0uY2h1Y0RhbmhzLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLnN0ckNodWNEYW5ocyA9ICcnO1xuICAgICAgICAgICAgaWYgKGl0ZW0uY2h1Y0RhbmhzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGl0ZW0uY2h1Y0RhbmhzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpLmNodWNEYW5oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnN0ckNodWNEYW5ocyArPSBpLmNodWNEYW5oO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXRlbS5zdHJEb25WaUNodWNWdXMgPSAnJztcbiAgICAgICAgICAgIGlmIChpdGVtLmRvblZpQ2h1Y1Z1cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGl0ZW0uZG9uVmlDaHVjVnVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpLmNodWNWdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHJEb25WaUNodWNWdXMgKz0gYDxwPiR7aS5jaHVjVnV9IC0gJHtpLmRvblZpfTwvcD5gO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5zdHJEb25WaUNodWNWdXMgKz0gYDxwPiR7aS5kb25WaX08L3A+YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLm5nYXlTaW5oKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zdHJOZ2F5U2luaCA9IHRoaXMuX2NydWRTZXJ2aWNlLnJlbmRlckRhdGUoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ubmdheVNpbmgsXG4gICAgICAgICAgICAgICAgICAgICdub3JtYWwnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW0uc3RyTmdheVNpbmggPSBpdGVtLm5nYXlTaW5oMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0uaG9jSGFtSG9jVmlcbiAgICAgICAgICAgICAgICA9IGl0ZW0uaWRIb2NIYW0gJiYgaXRlbS5pZEhvY1ZpXG4gICAgICAgICAgICAgICAgICAgID8gYCR7aXRlbS5pZEhvY0hhbX0uICR7aXRlbS5pZEhvY1ZpfWBcbiAgICAgICAgICAgICAgICAgICAgOiBpdGVtLmlkSG9jSGFtIHx8IGl0ZW0uaWRIb2NWaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUNhbkJvVG9HaWFuZ1ZpZW4obW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoXG4gICAgICAgICAgICBgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZUNhbkJvVG9HaWFuZ1ZpZW5gLFxuICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjcmVhdGVHaWFuZ1ZpZW5Eb2lUYWMobW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoXG4gICAgICAgICAgICBgJHt0aGlzLnNlcnZpY2VVcml9L0NyZWF0ZUdpYW5nVmllbkRvaVRhY2AsXG4gICAgICAgICAgICBtb2RlbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldERvblZpUGhhbkNhcEJ5SWRzKG1vZGVsLCBpc1VzZXIgPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldERvblZpUGhhbkNhcEJ5SWRzLyR7aXNVc2VyfWAsIG1vZGVsKTtcbiAgICB9XG5cbiAgICB1cGRhdGVHaWFuZ1ZpZW5Ob2lCbyhtb2RlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UHV0KFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVHaWFuZ1ZpZW5Ob2lCby8ke21vZGVsLmlkfWAsXG4gICAgICAgICAgICBtb2RlbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHVwZGF0ZUdpYW5nVmllbkRvaVRhYyhtb2RlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UHV0KFxuICAgICAgICAgICAgYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVHaWFuZ1ZpZW5Eb2lUYWMvJHttb2RlbC5pZH1gLFxuICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRMeUxpY2hLaG9hSG9jQ2FuQm8oaWQpIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRMeUxpY2hLaG9hSG9jQ2FuQm8vJHtpZH1gO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgR2V0RG9uVmlDaHVjVnUoaWRDYW5Cbykge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldERvblZpQ2h1Y1Z1LyR7aWRDYW5Cb31gO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUxpc3RFbnRpdHlDb2x1bW5EZWZhdWx0KCkge1xuICAgICAgICBjb25zdCBfbWFzdGVyRGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTWFzdGVyRGF0YVNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdNw6MnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc4MHB4JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdI4buNYyBow6BtLCBo4buNYyB24buLJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnaG9jSGFtSG9jVmknLFxuICAgICAgICAgICAgICAgIG5vdEluRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxNTBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICAgICAgY29kZTogJ2hvVmFUZW4nLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdOZ8OgeSBzaW5oJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnc3RyTmdheVNpbmgnLFxuICAgICAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcbiAgICAgICAgICAgICAgICBub3RJbkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IDEsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnR2nhu5tpIHTDrW5oJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnZ2lvaVRpbmgnLFxuICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiBfbWFzdGVyRGF0YVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgZ3JvdXBDb2RlOiAnR0lPSV9USU5IJyxcbiAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgaXNTZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnOTBweCcsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0No4bupYyBkYW5oJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnc3RyQ2h1Y0RhbmhzJyxcbiAgICAgICAgICAgICAgICBub3RJbkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzE1MHB4JyxcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnQ2jhu6ljIHbhu6UgLSDEkMahbiB24buLJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnc3RyRG9uVmlDaHVjVnVzJyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2h0bWwnLFxuICAgICAgICAgICAgICAgIG5vdEluRmllbGRzOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMjIwcHgnLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIHRlbXBsYXRlRmlsdGVyOiB0ZW1wbGF0ZS5maWx0ZXJEb25WaVJlZixcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZmllbGRGaWx0ZXI6ICdpZERvblZpcycsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnRW1haWwnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxNzBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5FpIHTDoWMnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdpZERvaVRhYycsXG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNBcnJheUZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9ob1NvRG9pVGFjU2VydmljZSxcbiAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUaG9uZ0tlQ2FuQm8ocGx1c1VybDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHt0aGlzLmFwaUdldERhdGF9LyR7cGx1c1VybH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUxpc3RFbnRpdHlDb2x1bW5WMSgpIHtcbiAgICAgICAgY29uc3QgX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnTcOjJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnY29kZScsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnODBweCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICAgICAgY29kZTogJ2hvVmFUZW4nLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIwMHB4JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgbGFiZWw6ICdOZ8OgeSBzaW5oJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnc3RyTmdheVNpbmgnLFxuICAgICAgICAgICAgICAgIGlzU2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcbiAgICAgICAgICAgICAgICBub3RJbkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IDEsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgIGxhYmVsOiAnR2nhu5tpIHTDrW5oJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnZ2lvaVRpbmgnLFxuICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiBfbWFzdGVyRGF0YVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgZ3JvdXBDb2RlOiAnR0lPSV9USU5IJyxcbiAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAnbmFtZScsXG4gICAgICAgICAgICAgICAgaXNTZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnOTBweCcsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAxLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0No4bupYyB24bulIC0gxJDGoW4gduG7iycsXG4gICAgICAgICAgICAgICAgY29kZTogJ3N0ckRvblZpQ2h1Y1Z1cycsXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcbiAgICAgICAgICAgICAgICBub3RJbkZpZWxkczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzIyMHB4JyxcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyB0ZW1wbGF0ZUZpbHRlcjogdGVtcGxhdGUuZmlsdGVyRG9uVmlSZWYsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZpZWxkRmlsdGVyOiAnaWREb25WaXMnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0VtYWlsJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTcwcHgnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBnZXRRdWFuTHlDYXBUcmVuQnlVc2VySWQoaWRVc2VyOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldChgJHt0aGlzLnNlcnZpY2VVcml9L0NhbkJvUXVhbkx5QnlVc2VySWQvJHtpZFVzZXJ9YCk7XG4gICAgfVxuXG4gICAgZ2V0RGFuaFNhY2hVc2VyQ2FwVHJlbihpZHNEb25WaSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldERhbmhTYWNoVXNlckNhcFRyZW5gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGlkc0RvblZpKTtcbiAgICB9XG5cblxufVxuXG4iXX0=
@@ -17584,7 +17584,7 @@ class CanBoHoSoService extends BaseService {
17584
17584
  });
17585
17585
  }
17586
17586
  generatePickerControlSchema(control, enumCanBo = EnumCanBo.TRONG_DON_VI) {
17587
- const result = new AutoCompletePickerControlSchema(Object.assign({ field: 'idCanBo', label: 'Cán bộ', title: 'Chọn cán bộ', multiple: false, baseService: this, plusUrl: 'WithChucDanhChucVu', displayField: 'hoVaTen', fieldPlus: 'code', fieldSearchText: ['email', 'code'], funcGetLabel: (item) => {
17587
+ const result = new AutoCompletePickerControlSchema(Object.assign(Object.assign({ field: 'idCanBo', label: 'Cán bộ', title: 'Chọn cán bộ', multiple: false, baseService: this, plusUrl: 'WithChucDanhChucVu', displayField: 'hoVaTen', fieldPlus: 'code', fieldSearchText: ['email', 'code'], funcGetLabel: (item) => {
17588
17588
  let result = item.hoVaTen;
17589
17589
  if (item.code) {
17590
17590
  result = `${item.code} - ${result} `;
@@ -17615,7 +17615,7 @@ class CanBoHoSoService extends BaseService {
17615
17615
  break;
17616
17616
  }
17617
17617
  return filters;
17618
- }, columns: this.lstEntityPickerColumn }, control));
17618
+ } }, control), { columns: [...this.lstEntityPickerColumn, ...control.columns] }));
17619
17619
  if (control.dataType == EnumControlPickerType.DOITAC && !this.lstEntityPickerColumn.some(item => item.code == 'idDoiTac')) {
17620
17620
  this.lstEntityPickerColumn.push(new EntityPickerColumn({
17621
17621
  label: 'Đối tác',
@@ -33503,6 +33503,7 @@ class AuthorizeDirective {
33503
33503
  // Dùng trong một số trường hợp code dùng chung template, buộc phải khai báo directive nhưng không phải element nào cũng cần check
33504
33504
  this.enableAuthorize = true;
33505
33505
  this.appCode = '';
33506
+ this.permissionChecked = false;
33506
33507
  this._element = _el.nativeElement;
33507
33508
  this.appCode = this._moduleConfigService.getConfig().appCode;
33508
33509
  this.environment = this._moduleConfigService.getConfig().environment;
@@ -33517,12 +33518,14 @@ class AuthorizeDirective {
33517
33518
  ngOnInit() {
33518
33519
  }
33519
33520
  ngAfterViewInit() {
33520
- if (!this.permission) {
33521
- this.setAuthorizeButton();
33522
- }
33521
+ }
33522
+ permissionCheck() {
33523
33523
  if (this._moduleCode) {
33524
33524
  this.appCode = this._moduleCode;
33525
33525
  }
33526
+ if (!this.permission) {
33527
+ this.setAuthorizeButton();
33528
+ }
33526
33529
  if (!this.enableAuthorize) {
33527
33530
  return;
33528
33531
  }
@@ -33557,6 +33560,13 @@ class AuthorizeDirective {
33557
33560
  }
33558
33561
  });
33559
33562
  }
33563
+ ngAfterViewChecked() {
33564
+ const buttons = sessionStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.BUTTON_AUTHORIZE);
33565
+ if (!this.permissionChecked && buttons) {
33566
+ this.permissionCheck();
33567
+ this.permissionChecked = true;
33568
+ }
33569
+ }
33560
33570
  setAuthorizeButton() {
33561
33571
  var _a, _b, _c, _d, _e;
33562
33572
  let key = window.location.pathname.substring(1).toUpperCase().replace(/\//g, '_');