@smartbit4all/ng-client 3.3.133 → 3.3.135

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.
@@ -128,6 +128,7 @@ export class SmartComponentApiClient {
128
128
  }
129
129
  if (this.uuid && this.uuid !== comp.uuid)
130
130
  comp.uuid = this.uuid;
131
+ SmartComponentLayoutUtility.getGrids(comp).forEach((grid) => this.setupGridServices(grid));
131
132
  });
132
133
  // for handling embedded forms
133
134
  this.handleQueryList(this.getSmartComponentLayoutsQL(), (form) => {
@@ -149,10 +150,7 @@ export class SmartComponentApiClient {
149
150
  this.handleQueryList(this.getSmartGridsQL(), (grid) => {
150
151
  if (grid) {
151
152
  if (grid.smartGrid) {
152
- grid.smartGrid.uiActionService = this.uiActionService;
153
- grid.smartGrid.uiActionDescriptorService = this.uiActionDescriptorService;
154
- grid.smartGrid.serviceToUse = this;
155
- grid.smartGrid.viewContextService = this.viewContext;
153
+ this.setupGridServices(grid);
156
154
  grid.setupToolbar();
157
155
  if (grid.toolbar) {
158
156
  this.initActions();
@@ -165,6 +163,14 @@ export class SmartComponentApiClient {
165
163
  }
166
164
  }
167
165
  }
166
+ setupGridServices(grid) {
167
+ if (grid.smartGrid && !grid.smartGrid.uiActionService) {
168
+ grid.smartGrid.uiActionService = this.uiActionService;
169
+ grid.smartGrid.uiActionDescriptorService = this.uiActionDescriptorService;
170
+ grid.smartGrid.serviceToUse = this;
171
+ grid.smartGrid.viewContextService = this.viewContext;
172
+ }
173
+ }
168
174
  handleQueryListSimple(ql, handler) {
169
175
  handler();
170
176
  ql.changes.pipe(takeUntil(this._destroy$)).subscribe(() => handler());
@@ -614,6 +620,7 @@ export class SmartComponentApiClient {
614
620
  changedWidgets.forEach((key) => {
615
621
  const reference = widgets.get(key);
616
622
  if (reference instanceof SmartGridComponent) {
623
+ this.setupGridServices(reference);
617
624
  reference.refresh();
618
625
  }
619
626
  else if (reference instanceof SmarttreeGenericService) {
@@ -686,4 +693,4 @@ export class SmartComponentApiClient {
686
693
  this.model.constraints = changes[changeKey];
687
694
  }
688
695
  }
689
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jbGllbnQvc21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQU1MLG1CQUFtQixHQUVwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUlMLGNBQWMsRUFHZCx1QkFBdUIsRUFHdkIseUJBQXlCLEVBR3pCLGVBQWUsR0FJaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUEwQixrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BGLE9BQU8sRUFLTCxlQUFlLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUVMLDJCQUEyQixHQUM1QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTFFLE1BQU0sT0FBZ0IsdUJBQXVCO0lBd0czQyxZQUNZLE1BQWdCLEVBQ2hCLElBQXlDLEVBQ3pDLFFBQWlCLEVBQ2pCLGNBQXVCLEVBQ3ZCLE9BQW9CLEVBQ3BCLFFBQW9CO1FBTHBCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBcUM7UUFDekMsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixtQkFBYyxHQUFkLGNBQWMsQ0FBUztRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVk7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QUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxPQUErQixFQUFFLFNBQWlCO1FBQzdFLElBQUksV0FBVyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLEtBQU0sQ0FBQyxTQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxPQUErQixFQUFFLFNBQWlCO1FBQzNFLElBQUksQ0FBQyxLQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE9BQStCLEVBQUUsU0FBaUI7UUFDL0UsSUFBSSxDQUFDLEtBQU0sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FHRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgRWxlbWVudFJlZixcclxuICBJbmplY3QsXHJcbiAgSW5qZWN0b3IsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFJlbmRlcmVyMixcclxuICBSZW5kZXJlclN0eWxlRmxhZ3MyLFxyXG4gIFZpZXdDaGlsZHJlbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi9zbWFydC10cmVlL3Byb2plY3RzJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnRNb2RlbCxcclxuICBDb21wb25lbnRNb2RlbENoYW5nZSxcclxuICBEYXRhQ2hhbmdlLFxyXG4gIERhdGFDaGFuZ2VLaW5kLFxyXG4gIEV4ZWN1dGVVaUFjdGlvbk9wdGlvbnMsXHJcbiAgU21hcnRUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gIFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uLFxyXG4gIFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uTW9kZWwsXHJcbiAgVWlBY3Rpb25SZXF1ZXN0LFxyXG4gIFVpQWN0aW9uU2VydmljZSxcclxuICBVaUFjdGlvblNwZWNpZmljRGVtYW5kUmVzcG9uc2UsXHJcbiAgVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50LFxyXG4gIFVzZVVpQWN0aW9uMixcclxufSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydEF1dGhlbnRpY2F0aW9uU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4vc21hcnQtYXV0aGVudGljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFNtYXJ0U3ViamVjdCB9IGZyb20gJy4uL3NtYXJ0LXN1YmplY3QvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBHcmlkT3B0aW9ucywgU21hcnRHcmlkLCBTbWFydEdyaWRDb21wb25lbnQgfSBmcm9tICcuLi9zbWFydC1ncmlkL3Byb2plY3RzJztcclxuaW1wb3J0IHtcclxuICBTbWFydEZvcm0sXHJcbiAgU21hcnRGb3JtSW52YWxpZEZpZWxkcyxcclxuICBTbWFydGZvcm1Db21wb25lbnQsXHJcbiAgU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlLFxyXG4gIFZhbHVlQ2hhbmdlTW9kZSxcclxufSBmcm9tICcuLi9zbWFydC1mb3JtL3Byb2plY3RzJztcclxuaW1wb3J0IHtcclxuICBTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudCxcclxuICBTbWFydENvbXBvbmVudExheW91dFV0aWxpdHksXHJcbn0gZnJvbSAnLi4vc21hcnQtY29tcG9uZW50LWxheW91dC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LWZpbHRlci1lZGl0b3IvcHJvamVjdCc7XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU21hcnRDb21wb25lbnRBcGlDbGllbnQ8VD4gaW1wbGVtZW50cyBVc2VVaUFjdGlvbjIge1xyXG4gIHByb3RlY3RlZCBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIGRldGVjdENoYW5nZTogU21hcnRTdWJqZWN0PENvbXBvbmVudE1vZGVsQ2hhbmdlPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG5cclxuICBwcml2YXRlIF91dWlkPzogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIHV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgZ2V0IHV1aWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl91dWlkO1xyXG4gIH1cclxuICBzZXQgdXVpZCh1dWlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICh0aGlzLl91dWlkID09PSB1dWlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBmaXJzdFV1aWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMudXVpZCkge1xyXG4gICAgICB0aGlzLnZpZXdDb250ZXh0LnVuZm9sbG93KHRoaXMudXVpZCk7XHJcbiAgICAgIGZpcnN0VXVpZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdXVpZCA9IHV1aWQ7XHJcbiAgICBpZiAodXVpZCkge1xyXG4gICAgICB0aGlzLmdldFdpZGdldHMoKS5mb3JFYWNoKChyZWYsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmIChyZWYgaW5zdGFuY2VvZiBTbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgICAgICAgIHJlZi51dWlkID0gdXVpZDtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlZiBpbnN0YW5jZW9mIFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZSkge1xyXG4gICAgICAgICAgcmVmLmNvbmZpZy51dWlkID0gdXVpZDtcclxuICAgICAgICB9IGVsc2UgaWYgKCFyZWYgJiYgIWZpcnN0VXVpZCkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgUHJvdmlkZWQgcmVmZXJlbmNlIGZvciAke2tleX0gaXMgdW5kZWZpbmVkIG9uIHV1aWQgY2hhbmdlLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmICghdGhpcy51dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWRTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLnV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0NvbnRleHQudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocGFnZU5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHBhZ2VOYW1lID09PSB0aGlzLnBhZ2VOYW1lISkge1xyXG4gICAgICAgICAgICAgIHRoaXMucnVuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0LmZvbGxvdyh0aGlzLl91dWlkISwgdGhpcy5kZXRlY3RDaGFuZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbW9kZWw6IENvbXBvbmVudE1vZGVsIHwgdW5kZWZpbmVkO1xyXG5cclxuICBnZXQgbW9kZWwoKTogQ29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX21vZGVsO1xyXG4gIH1cclxuICBzZXQgbW9kZWwobW9kZWw6IENvbXBvbmVudE1vZGVsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xyXG5cclxuICAgIHRoaXMuaW5pdENvbXBvbmVudEJ5TW9kZWwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RhdGE/OiBUO1xyXG5cclxuICBnZXQgZGF0YSgpOiBUIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuICBzZXQgZGF0YShtb2RlbDogVCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fZGF0YSA9IG1vZGVsO1xyXG4gICAgdGhpcy5kYXRhQ2hhbmdlZC5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdWlBY3Rpb25Nb2RlbHM6IFVpQWN0aW9uTW9kZWxbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgZGF0YUNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU21hcnRTdWJqZWN0KHRoaXMuX2Rlc3Ryb3kkKTtcclxuXHJcbiAgLy8gR3JpZFxyXG4gIHNtYXJ0R3JpZD86IFNtYXJ0R3JpZDtcclxuXHJcbiAgLy8gU2VydmljZXNcclxuICBwcm90ZWN0ZWQgdmlld0NvbnRleHQ6IFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB1aUFjdGlvblNlcnZpY2U6IFVpQWN0aW9uU2VydmljZTtcclxuICBwcm90ZWN0ZWQgdWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZTogVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZTtcclxuICBwcm90ZWN0ZWQgdHJhbnNsYXRlPzogU21hcnRUcmFuc2xhdGVTZXJ2aWNlO1xyXG5cclxuICAvLyBUcmVlXHJcbiAgcHJpdmF0ZSBfc21hcnRUcmVlU2VydmljZT86IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlO1xyXG5cclxuICBwdWJsaWMgZ2V0IHNtYXJ0VHJlZVNlcnZpY2UoKTogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgc21hcnRUcmVlU2VydmljZShzbWFydFRyZWVTZXJ2aWNlOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignVGhlIGRlZmF1bHQgdHJlZSBoYXMgYWxyZWFkeSBzZXQgdXAhJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zbWFydFRyZWVTZXJ2aWNlID0gc21hcnRUcmVlU2VydmljZTtcclxuICB9XHJcblxyXG4gIC8vIENvbnRhaW5lZCBXaWRnZXRzXHJcbiAgd2lkZ2V0czogTWFwPHN0cmluZywgU21hcnRHcmlkQ29tcG9uZW50IHwgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UgfCB1bmRlZmluZWQ+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBmb3JtV2lkZ2V0czogTWFwPHN0cmluZywgU21hcnRmb3JtQ29tcG9uZW50IHwgdW5kZWZpbmVkPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgdXNlUXVlcnlMaXN0czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzZW5kTW9kZWxPbldpZGdldEFjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBkYXRhQ2hhbmdlS2V5czogc3RyaW5nW10gPSBbXTtcclxuICBwcm90ZWN0ZWQgZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXJzID0gbmV3IE1hcDxTbWFydGZvcm1Db21wb25lbnQsIFN1YnNjcmlwdGlvbj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgaW5qZWN0OiBJbmplY3RvcixcclxuICAgIHByb3RlY3RlZCBhdXRoOiBTbWFydEF1dGhlbnRpY2F0aW9uU2VydmljZUludGVyZmFjZSxcclxuICAgIHByb3RlY3RlZCBwYWdlTmFtZT86IHN0cmluZyxcclxuICAgIHByb3RlY3RlZCBfY29tcG9uZW50TmFtZT86IHN0cmluZyxcclxuICAgIHByb3RlY3RlZCBlbGVtZW50PzogRWxlbWVudFJlZixcclxuICAgIHByb3RlY3RlZCByZW5kZXJlcj86IFJlbmRlcmVyMlxyXG4gICkge1xyXG4gICAgLy8gY2hlY2sgYW5kIGNhbGN1bGF0ZSBwYWdlTmFtZVxyXG4gICAgaWYgKCF0aGlzLnBhZ2VOYW1lICYmICF0aGlzLl9jb21wb25lbnROYW1lKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGFnZU5hbWUgb3IgY29tcG9uZW50TmFtZSBtdXN0IGJlIHNwZWNpZmllZCEnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpZXdDb250ZXh0ID0gaW5qZWN0LmdldChTbWFydFZpZXdDb250ZXh0U2VydmljZSk7XHJcbiAgICBpZiAodGhpcy5fY29tcG9uZW50TmFtZSkge1xyXG4gICAgICBsZXQgcGFnZU5hbWVGb3JDb21wb25lbnQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFBhZ2VOYW1lT2ZDb21wb25lbnQodGhpcy5fY29tcG9uZW50TmFtZSk7XHJcbiAgICAgIGlmICghdGhpcy5wYWdlTmFtZSkge1xyXG4gICAgICAgIHRoaXMucGFnZU5hbWUgPSBwYWdlTmFtZUZvckNvbXBvbmVudDtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2VOYW1lICE9PSBwYWdlTmFtZUZvckNvbXBvbmVudCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGBwYWdlTmFtZSAoJHtwYWdlTmFtZX0pIGFuZCBjb21wb25lbnROYW1lICgke19jb21wb25lbnROYW1lfSkgZG9lc24ndCBtYXRjaCFgXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZnJvbSB0aGlzIHBvaW50IHdlIGhhdmUgdGhpcy5wYWdlTmFtZVxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2Uuc3Vic2NyaWJlKChjaGFuZ2U6IENvbXBvbmVudE1vZGVsQ2hhbmdlKSA9PiB7XHJcbiAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlcyhjaGFuZ2UpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy51aUFjdGlvblNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSBpbmplY3QuZ2V0KFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgX25nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ydW4oKTtcclxuICB9XHJcbiAgX25nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy52aWV3Q29udGV4dC51bmZvbGxvdyh0aGlzLnV1aWQhKTtcclxuICAgIHRoaXMud2lkZ2V0cy5jbGVhcigpO1xyXG5cclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBfbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICBpZiAoIXRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignU21hcnRDb21wb25lbnRMYXlvdXRzUUwgbm90IGF2YWlsYWJsZSEnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5TGlzdCh0aGlzLmdldFNtYXJ0Q29tcG9uZW50TGF5b3V0c1FMKCkhLCAoY29tcCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbXAuc21hcnRDb21wb25lbnRMYXlvdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0QWN0aW9ucygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMudXVpZCAmJiB0aGlzLnV1aWQgIT09IGNvbXAudXVpZCkgY29tcC51dWlkID0gdGhpcy51dWlkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGZvciBoYW5kbGluZyBlbWJlZGRlZCBmb3Jtc1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcnlMaXN0KHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKSEsIChmb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZURhdGFDaGFuZ2VTdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmdldFNtYXJ0Rm9ybXNRTCgpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdnZXRTbWFydEZvcm1zUUwgbm90IGF2YWlsYWJsZSEnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5TGlzdCh0aGlzLmdldFNtYXJ0Rm9ybXNRTCgpISwgKGZvcm0pID0+IHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZVN1YnNjcmlwdGlvbnMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuZ2V0U21hcnRHcmlkc1FMKCkpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ1NtYXJ0R3JpZHNRTCBub3QgYXZhaWxhYmxlIScpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcnlMaXN0KHRoaXMuZ2V0U21hcnRHcmlkc1FMKCkhLCAoZ3JpZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGdyaWQpIHtcclxuICAgICAgICAgICAgaWYgKGdyaWQuc21hcnRHcmlkKSB7XHJcbiAgICAgICAgICAgICAgZ3JpZC5zbWFydEdyaWQudWlBY3Rpb25TZXJ2aWNlID0gdGhpcy51aUFjdGlvblNlcnZpY2U7XHJcbiAgICAgICAgICAgICAgZ3JpZC5zbWFydEdyaWQudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSA9IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZTtcclxuICAgICAgICAgICAgICBncmlkLnNtYXJ0R3JpZC5zZXJ2aWNlVG9Vc2UgPSB0aGlzO1xyXG4gICAgICAgICAgICAgIGdyaWQuc21hcnRHcmlkLnZpZXdDb250ZXh0U2VydmljZSA9IHRoaXMudmlld0NvbnRleHQ7XHJcbiAgICAgICAgICAgICAgZ3JpZC5zZXR1cFRvb2xiYXIoKTtcclxuICAgICAgICAgICAgICBpZiAoZ3JpZC50b29sYmFyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnV1aWQgJiYgdGhpcy51dWlkICE9PSBncmlkLnV1aWQpIGdyaWQudXVpZCA9IHRoaXMudXVpZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhbmRsZVF1ZXJ5TGlzdFNpbXBsZTxUPihxbDogUXVlcnlMaXN0PFQ+LCBoYW5kbGVyOiAoKSA9PiB2b2lkKSB7XHJcbiAgICBoYW5kbGVyKCk7XHJcbiAgICBxbC5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IGhhbmRsZXIoKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaGFuZGxlUXVlcnlMaXN0PFQ+KHFsOiBRdWVyeUxpc3Q8VD4sIGhhbmRsZXI6IChlbDogVCkgPT4gdm9pZCkge1xyXG4gICAgcWwuZm9yRWFjaCgoZWwpID0+IGhhbmRsZXIoZWwpKTtcclxuICAgIHFsLmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobGlzdCkgPT4gKGxpc3QgYXMgUXVlcnlMaXN0PFQ+KS5mb3JFYWNoKChlbCkgPT4gaGFuZGxlcihlbCkpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydEZvcm1zUUwoKTogUXVlcnlMaXN0PFNtYXJ0Zm9ybUNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydEdyaWRzUUwoKTogUXVlcnlMaXN0PFNtYXJ0R3JpZENvbXBvbmVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydFRyZWVzUUwoKTogUXVlcnlMaXN0PFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlPiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNtYXJ0RmlsdGVyU2VydmljZXNRTCgpOiBRdWVyeUxpc3Q8U21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlPiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNtYXJ0VWlBY3Rpb25Ub29sYmFyc1FMKCk6IFF1ZXJ5TGlzdDxVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKTpcclxuICAgIHwgUXVlcnlMaXN0PFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50PlxyXG4gICAgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBnZXRXaWRnZXRzKCk6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIFNtYXJ0R3JpZENvbXBvbmVudCB8IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlIHwgdW5kZWZpbmVkXHJcbiAgPiB7XHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIGxldCB3aWRnZXRzOiBNYXA8XHJcbiAgICAgICAgc3RyaW5nLFxyXG4gICAgICAgIFNtYXJ0R3JpZENvbXBvbmVudCB8IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlIHwgdW5kZWZpbmVkXHJcbiAgICAgID4gPSBuZXcgTWFwKCk7XHJcbiAgICAgIHRoaXMuZ2V0QWxsU21hcnRHcmlkQ29tcG9uZW50cygpXHJcbiAgICAgICAgLmZpbHRlcigoZ3JpZCkgPT4gKGdyaWQ/LnNtYXJ0R3JpZD8uZ3JpZElkZW50aWZpZXIgPyB0cnVlIDogZmFsc2UpKVxyXG4gICAgICAgIC5mb3JFYWNoKChncmlkKSA9PiB3aWRnZXRzLnNldChncmlkLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsIGdyaWQpKTtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydFRyZWVDb21wb25lbnRzKClcclxuICAgICAgICAuZmlsdGVyKCh0cmVlKSA9PiAodHJlZT8uc21hcnRUcmVlTW9kZWw/LmlkZW50aWZpZXIgPyB0cnVlIDogZmFsc2UpKVxyXG4gICAgICAgIC5mb3JFYWNoKCh0cmVlKSA9PiB3aWRnZXRzLnNldCh0cmVlIS5zbWFydFRyZWVNb2RlbCEuaWRlbnRpZmllciEsIHRyZWUpKTtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydEZpbHRlckVkaXRvclNlcnZpY2VzKClcclxuICAgICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IChmaWx0ZXIuY29uZmlnLmlkZW50aWZpZXIgPyB0cnVlIDogZmFsc2UpKVxyXG4gICAgICAgIC5mb3JFYWNoKChmaWx0ZXIpID0+IHdpZGdldHMuc2V0KGZpbHRlci5jb25maWcuaWRlbnRpZmllciwgZmlsdGVyKSk7XHJcbiAgICAgIHJldHVybiB3aWRnZXRzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0cztcclxuICB9XHJcblxyXG4gIGluaXRDb21wb25lbnRCeU1vZGVsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0U3R5bGUoKTtcclxuICAgIHRoaXMuaW5pdERhdGEoKTtcclxuICAgIHRoaXMuaW5pdEFjdGlvbnMoKTtcclxuXHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHRoaXMuZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpPy5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgaWYgKGZvcm0uc21hcnRGb3JtKSB7XHJcbiAgICAgICAgICBmb3JtLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbCA9IHRoaXMubW9kZWw7XHJcbiAgICAgICAgICAvLyB1c2VzIGRhdGEsIHZhbHVlU2V0cywgY29uc3RyYWludHNcclxuICAgICAgICAgIGZvcm0uY29uc3RydWN0Rm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPOiBsYXlvdXQsIHdpZGdldHNcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbml0U3R5bGUoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlbD8uc3R5bGUgJiYgdGhpcy5lbGVtZW50ICYmIHRoaXMucmVuZGVyZXIpIHtcclxuICAgICAgbGV0IHN0eWxlRGF0YSA9IHRoaXMubW9kZWwuc3R5bGUhO1xyXG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuZWxlbWVudCEubmF0aXZlRWxlbWVudDtcclxuICAgICAgLy8gY3NzIHN0eWxlIHByb3BlcnRpZXNcclxuICAgICAgaWYgKHN0eWxlRGF0YS5zdHlsZSkge1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHN0eWxlRGF0YS5zdHlsZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyIS5zZXRTdHlsZShlbGVtZW50LCBrZXksIHZhbHVlLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gYWRkIGNsYXNzZXNcclxuICAgICAgaWYgKHN0eWxlRGF0YS5jbGFzc2VzVG9BZGQpIHtcclxuICAgICAgICBzdHlsZURhdGEuY2xhc3Nlc1RvQWRkLmZvckVhY2goKGNsKSA9PiB0aGlzLnJlbmRlcmVyIS5hZGRDbGFzcyhlbGVtZW50LCBjbCkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHJlbW92ZSBjbGFzc2VzXHJcbiAgICAgIGlmIChzdHlsZURhdGEuY2xhc3Nlc1RvUmVtb3ZlKSB7XHJcbiAgICAgICAgc3R5bGVEYXRhLmNsYXNzZXNUb1JlbW92ZS5mb3JFYWNoKChjbCkgPT4gdGhpcy5yZW5kZXJlciEucmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2wpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKTogU21hcnRmb3JtQ29tcG9uZW50W10ge1xyXG4gICAgbGV0IGZvcm1zOiBTbWFydGZvcm1Db21wb25lbnRbXSA9IHRoaXMuZ2V0U21hcnRGb3Jtc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKT8uZm9yRWFjaCgoY29tcCkgPT4ge1xyXG4gICAgICBmb3Jtcy5wdXNoKC4uLlNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRGb3Jtcyhjb21wKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmb3JtcztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRBbGxTbWFydEdyaWRDb21wb25lbnRzKCk6IFNtYXJ0R3JpZENvbXBvbmVudFtdIHtcclxuICAgIGxldCBncmlkczogU21hcnRHcmlkQ29tcG9uZW50W10gPSB0aGlzLmdldFNtYXJ0R3JpZHNRTCgpPy50b0FycmF5KCkgPz8gW107XHJcbiAgICB0aGlzLmdldFNtYXJ0Q29tcG9uZW50TGF5b3V0c1FMKCk/LmZvckVhY2goKGNvbXApID0+IHtcclxuICAgICAgZ3JpZHMucHVzaCguLi5TbWFydENvbXBvbmVudExheW91dFV0aWxpdHkuZ2V0R3JpZHMoY29tcCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JpZHM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0QWxsU21hcnRUcmVlQ29tcG9uZW50cygpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZVtdIHtcclxuICAgIGxldCB0cmVlczogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2VbXSA9IHRoaXMuZ2V0U21hcnRUcmVlc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKT8uZm9yRWFjaCgoY29tcCkgPT4ge1xyXG4gICAgICB0cmVlcy5wdXNoKC4uLlNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRUcmVlcyhjb21wKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0cmVlcztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRBbGxTbWFydEZpbHRlckVkaXRvclNlcnZpY2VzKCk6IFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZVtdIHtcclxuICAgIGxldCBmaWx0ZXJzOiBTbWFydEZpbHRlckVkaXRvclNlcnZpY2VbXSA9IHRoaXMuZ2V0U21hcnRGaWx0ZXJTZXJ2aWNlc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbFNtYXJ0VWlBY3Rpb25Ub29sYmFycygpOiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnRbXSB7XHJcbiAgICBsZXQgdG9vbGJhcnM6IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudFtdID0gdGhpcy5nZXRTbWFydFVpQWN0aW9uVG9vbGJhcnNRTCgpPy50b0FycmF5KCkgPz8gW107XHJcbiAgICB0aGlzLmdldEFsbFNtYXJ0R3JpZENvbXBvbmVudHMoKT8uZm9yRWFjaCgoZ3JpZCkgPT4ge1xyXG4gICAgICBpZiAoZ3JpZC50b29sYmFyKSB7XHJcbiAgICAgICAgdG9vbGJhcnMucHVzaChncmlkLnRvb2xiYXIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKT8uZm9yRWFjaCgoY29tcCkgPT4ge1xyXG4gICAgICB0b29sYmFycy5wdXNoKC4uLlNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRUb29sYmFycyhjb21wKSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpXHJcbiAgICAgID8uZmxhdE1hcCgoZm9ybSkgPT4gZm9ybS5nZXRUb29sYmFycygpKVxyXG4gICAgICAuZmlsdGVyKCh0b29sYmFyKSA9PiB0b29sYmFyICE9PSB1bmRlZmluZWQgfHwgdG9vbGJhciAhPT0gbnVsbClcclxuICAgICAgLmZvckVhY2goKHRvb2xiYXIpID0+IHRvb2xiYXJzLnB1c2godG9vbGJhciBhcyBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQpKTtcclxuXHJcbiAgICByZXR1cm4gdG9vbGJhcnM7XHJcbiAgfVxyXG5cclxuICBpbml0RGF0YSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vZGVsPy5kYXRhKSB7XHJcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMubW9kZWw/LmRhdGEgYXMgYW55O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdEFjdGlvbnMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tb2RlbD8uYWN0aW9ucykge1xyXG4gICAgICBsZXQgdWlBY3Rpb25Nb2RlbHMgPSB0aGlzLm1vZGVsPy5hY3Rpb25zLm1hcCgodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHNlcnZpY2VUb1VzZTogdGhpcyxcclxuICAgICAgICAgIHVpQWN0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgdG9vbGJhcnMgPSB0aGlzLmdldEFsbFNtYXJ0VWlBY3Rpb25Ub29sYmFycygpLmZpbHRlcigodG9vbGJhcikgPT4gdG9vbGJhci5pZCk7XHJcbiAgICAgIGxldCB0b29sYmFyTW9kZWxzID0gbmV3IE1hcDxzdHJpbmcsIFVpQWN0aW9uTW9kZWxbXT4oKTtcclxuICAgICAgdG9vbGJhcnMuZm9yRWFjaCgodG9vbGJhcikgPT4ge1xyXG4gICAgICAgIHRvb2xiYXJNb2RlbHMuc2V0KHRvb2xiYXIuaWQhLCBbXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgZ2xvYmFsVWlBY3Rpb25Nb2RlbHM6IFVpQWN0aW9uTW9kZWxbXSA9IFtdO1xyXG4gICAgICB1aUFjdGlvbk1vZGVscy5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICBsZXQgYWN0aW9uTW9kZWw6IFVpQWN0aW9uTW9kZWxbXSB8IHVuZGVmaW5lZCA9IGdsb2JhbFVpQWN0aW9uTW9kZWxzO1xyXG4gICAgICAgIGxldCB0b29sYmFySWQgPSBhY3Rpb24udWlBY3Rpb24udG9vbGJhcjtcclxuICAgICAgICBpZiAodG9vbGJhcklkICYmIHRvb2xiYXJNb2RlbHMuaGFzKHRvb2xiYXJJZCkpIHtcclxuICAgICAgICAgIGFjdGlvbk1vZGVsID0gdG9vbGJhck1vZGVscy5nZXQodG9vbGJhcklkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhY3Rpb25Nb2RlbCkge1xyXG4gICAgICAgICAgYWN0aW9uTW9kZWwgPSBnbG9iYWxVaUFjdGlvbk1vZGVscztcclxuICAgICAgICB9XHJcbiAgICAgICAgYWN0aW9uTW9kZWwucHVzaChhY3Rpb24pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51aUFjdGlvbk1vZGVscyA9IGdsb2JhbFVpQWN0aW9uTW9kZWxzO1xyXG5cclxuICAgICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgdG9vbGJhcnMubWFwKCh0b29sYmFyKSA9PiB7XHJcbiAgICAgICAgICB0b29sYmFyLnVpQWN0aW9uTW9kZWxzID0gdG9vbGJhck1vZGVscy5nZXQodG9vbGJhci5pZCEpO1xyXG4gICAgICAgICAgcmV0dXJuIHRvb2xiYXIuc2V0VXAoKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgLy8gY29udGludWUgY29kZSBoZXJlIGlmIG5lZWRlZFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRvb2xiYXIgc2V0dXA6JywgZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcnVuKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYXV0aC5iZmZBcGlzSGF2ZUJlZW5TZXRVcCkge1xyXG4gICAgICB0aGlzLmxvYWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXV0aC5oZWFkZXJzVXBkYXRlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnV1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSEpO1xyXG4gICAgLy8gdGhpcy5tb2RlbCA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQubG9hZCh0aGlzLnV1aWQpO1xyXG4gICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5sb2FkMih0aGlzLnV1aWQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXhlY3V0ZVVpQWN0aW9uKHVpQWN0aW9uOiBVaUFjdGlvbiwgb3B0aW9ucz86IEV4ZWN1dGVVaUFjdGlvbk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudWlBY3Rpb25TZXJ2aWNlLnVpQWN0aW9uTW9kZWwgPSB7XHJcbiAgICAgIHNlcnZpY2VUb1VzZTogdGhpcyxcclxuICAgICAgdWlBY3Rpb246IHVpQWN0aW9uLFxyXG4gICAgfTtcclxuICAgIHRoaXMudWlBY3Rpb25TZXJ2aWNlLmV4ZWN1dGUodWlBY3Rpb24sIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgYWRkRGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIoa2V5OiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5kYXRhQ2hhbmdlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgIHRoaXMuZGF0YUNoYW5nZUtleXMucHVzaChrZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIoa2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBpZHggPSB0aGlzLmRhdGFDaGFuZ2VLZXlzLmluZGV4T2Yoa2V5KTtcclxuICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICB0aGlzLmRhdGFDaGFuZ2VLZXlzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGRhdGFDaGFuZ2VBY3Rpb25IYW5kbGVyKGV2ZW50OiBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UpIHtcclxuICAgIGlmICh0aGlzLmRhdGFDaGFuZ2VLZXlzLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcclxuICAgICAgdGhpcy5leGVjdXRlVWlBY3Rpb24oe1xyXG4gICAgICAgIGNvZGU6IGV2ZW50LmtleSxcclxuICAgICAgICBtb2RlbDogdHJ1ZSxcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIGl0ZW06IGV2ZW50LnZhbHVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhbmRsZURhdGFDaGFuZ2VTdWJzY3JpcHRpb25zKCkge1xyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICBsZXQgZm9ybXMgPSB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKTtcclxuICAgICAgLy8gYWRkIGVsZW1lbnRzIHRvIGRhdGFDaGFuZ2VLZXlzXHJcbiAgICAgIGZvcm1zLmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICBmb3JtLnNtYXJ0Rm9ybT8ud2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHtcclxuICAgICAgICAgIGlmICh3aWRnZXQua2V5KSB7XHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQudmFsdWVDaGFuZ2VNb2RlID09PSBWYWx1ZUNoYW5nZU1vZGUuSU1NRURJQVRFX0FDVElPTikge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWRkRGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIod2lkZ2V0LmtleSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcih3aWRnZXQua2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8gc3Vic2NyaWJlIHRvIG5ldyBmb3Jtc1xyXG4gICAgICBmb3Jtcy5mb3JFYWNoKChjb21wb25lbnQpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXJzLmhhcyhjb21wb25lbnQpKSB7XHJcbiAgICAgICAgICBsZXQgc3VicyA9IGNvbXBvbmVudC5zb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2VcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIoZXZlbnQpKTtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXJzLnNldChjb21wb25lbnQsIHN1YnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIHJlbW92ZWQgZm9ybXNcclxuICAgICAgdGhpcy5kYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcnMuZm9yRWFjaCgoc3VicywgZm9ybSkgPT4ge1xyXG4gICAgICAgIGlmICghZm9ybXMuZmluZCgoYykgPT4gYyA9PT0gZm9ybSkpIHtcclxuICAgICAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXJzLmRlbGV0ZShmb3JtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SW52YWxpZEZpZWxkcygpOiBTbWFydEZvcm1JbnZhbGlkRmllbGRzIHtcclxuICAgIGxldCBhZ2dyZWdhdGVkSW52YWxpZEZpZWxkczogU21hcnRGb3JtSW52YWxpZEZpZWxkcyA9IHtcclxuICAgICAgaW52YWxpZEZpZWxkS2V5czogW10sXHJcbiAgICAgIGludmFsaWRGaWVsZE5hbWVzOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKT8uZm9yRWFjaCgoZm9ybSkgPT5cclxuICAgICAgICB0aGlzLnZhbGlkYXRlRm9ybShmb3JtLCBhZ2dyZWdhdGVkSW52YWxpZEZpZWxkcylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybVdpZGdldHM/LmZvckVhY2goKGZvcm0pID0+IHRoaXMudmFsaWRhdGVGb3JtKGZvcm0sIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRlRm9ybShcclxuICAgIGZvcm06IFNtYXJ0Zm9ybUNvbXBvbmVudCB8IHVuZGVmaW5lZCxcclxuICAgIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzOiBTbWFydEZvcm1JbnZhbGlkRmllbGRzXHJcbiAgKSB7XHJcbiAgICBsZXQgaW52YWxpZEZpZWxkc09mRm9ybSA9IGZvcm0/LmdldEludmFsaWRGaWVsZHMoKTtcclxuICAgIGlmIChpbnZhbGlkRmllbGRzT2ZGb3JtKSB7XHJcbiAgICAgIGludmFsaWRGaWVsZHNPZkZvcm0uaW52YWxpZEZpZWxkS2V5cy5mb3JFYWNoKChrZXkpID0+XHJcbiAgICAgICAgYWdncmVnYXRlZEludmFsaWRGaWVsZHMuaW52YWxpZEZpZWxkS2V5cy5wdXNoKGtleSlcclxuICAgICAgKTtcclxuICAgICAgaW52YWxpZEZpZWxkc09mRm9ybS5pbnZhbGlkRmllbGROYW1lcy5mb3JFYWNoKChrZXkpID0+XHJcbiAgICAgICAgYWdncmVnYXRlZEludmFsaWRGaWVsZHMuaW52YWxpZEZpZWxkTmFtZXMucHVzaChrZXkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gVXNlVWlBY3Rpb25cclxuICBnZXRBZGRpdGlvbmFsUGFyYW1zKHVpQWN0aW9uOiBVaUFjdGlvbik6IFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3JUZXh0QXJlYTogJycsXHJcbiAgICAgIGZvclRleHRGaWVsZDogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRGb3JtKHZhbGlkYXRlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1Ym1pdEZvcm1zKHZhbGlkYXRlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBlcmZvcm1VaUFjdGlvblJlcXVlc3QoXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCxcclxuICAgIHdpZGdldElkPzogc3RyaW5nLFxyXG4gICAgbm9kZUlkPzogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXSkge1xyXG4gICAgICBjb25zdCBwYXJhbSA9IHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ3BhcmFtJ107XHJcbiAgICAgIGNvbnN0IGZpbGVzID0gdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snX2ZpbGVzJ107XHJcbiAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydwYXJhbSddO1xyXG4gICAgICBkZWxldGUgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snX2ZpbGVzJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XHJcblxyXG4gICAgICAvLyBhd2FpdCB0aGlzLnNlbmRNb2RlbFRvU2VydmVyKCk7XHJcbiAgICAgIGlmICghaXNNdWx0aXBsZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybVVwbG9hZEFjdGlvbih0aGlzLnV1aWQhLCB1aUFjdGlvblJlcXVlc3QsIHBhcmFtLCBmaWxlc1swXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtVXBsb2FkTXVsdGlwbGVBY3Rpb24oXHJcbiAgICAgICAgICB0aGlzLnV1aWQhLFxyXG4gICAgICAgICAgdWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgICAgICAgcGFyYW0sXHJcbiAgICAgICAgICBmaWxlc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAod2lkZ2V0SWQgJiYgbm9kZUlkKSB7XHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuc2VuZE1vZGVsVG9TZXJ2ZXIoKTtcclxuICAgICAgdGhpcy5hZGRNb2RlbFRvV2lkZ2V0QWN0aW9uKHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybVdpZGdldEFjdGlvbih0aGlzLnV1aWQhLCB3aWRnZXRJZCwgbm9kZUlkLCB1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIGlmICh3aWRnZXRJZCkge1xyXG4gICAgICAvLyBhd2FpdCB0aGlzLnNlbmRNb2RlbFRvU2VydmVyKCk7XHJcbiAgICAgIHRoaXMuYWRkTW9kZWxUb1dpZGdldEFjdGlvbih1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LnBlcmZvcm1XaWRnZXRNYWluQWN0aW9uKHRoaXMudXVpZCEsIHdpZGdldElkLCB1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtQWN0aW9uKHRoaXMudXVpZCEsIHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWRkTW9kZWxUb1dpZGdldEFjdGlvbih1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCkge1xyXG4gICAgaWYgKHRoaXMuc2VuZE1vZGVsT25XaWRnZXRBY3Rpb24pIHtcclxuICAgICAgdGhpcy5zdWJtaXRGb3JtKGZhbHNlKTtcclxuICAgICAgLy8gbWltaWMgQ29tcG9uZW50TW9kZWxcclxuICAgICAgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snY2xpZW50UGFnZU1vZGVsJ10gPSB7IGRhdGE6IHRoaXMuZ2V0TW9kZWwoKSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBhc3luYyBzZW5kTW9kZWxUb1NlcnZlcigpIHtcclxuICAvLyAgIHRoaXMuc3VibWl0Rm9ybXMoZmFsc2UpO1xyXG4gIC8vICAgbGV0IGRhdGFDaGFuZ2UgPSB7XHJcbiAgLy8gICAgIGtpbmQ6IERhdGFDaGFuZ2VLaW5kLldpZGdldCxcclxuICAvLyAgICAgc291cmNlOiAnJyxcclxuICAvLyAgICAgdmFsdWVzOiBbWycnLCB0aGlzLmdldE1vZGVsKCldXSxcclxuICAvLyAgIH07XHJcbiAgLy8gICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmRhdGFDaGFuZ2VkKHRoaXMudXVpZCEsIGRhdGFDaGFuZ2UpO1xyXG4gIC8vIH1cclxuXHJcbiAgaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkoXHJcbiAgICB1aUFjdGlvbjogVWlBY3Rpb24sXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxyXG4gICk6IFByb21pc2U8VWlBY3Rpb25TcGVjaWZpY0RlbWFuZFJlc3BvbnNlPiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZVNwZWNpZmljRGVtYW5kc0FzeW5jaHJvbm91c2x5IG1ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBTdWJtaXRzIGFsbCB0aGUgcmVnaXN0ZXJlZCBmb3JtcyBpbiB0aGUgU21hcnRDb21wb25lbnRcclxuICAgKi9cclxuICBwdWJsaWMgc3VibWl0Rm9ybXModmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydEZvcm1Db21wb25lbnRzKCk/LmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICBmb3JtPy5zdWJtaXRGb3JtKHZhbGlkYXRlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1XaWRnZXRzPy5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgZm9ybT8uc3VibWl0Rm9ybSh2YWxpZGF0ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEdyaWQoXHJcbiAgICBzbWFydEdyaWQ6IFNtYXJ0R3JpZCxcclxuICAgIG9wdGlvbnM6IEdyaWRPcHRpb25zLFxyXG4gICAgdXNlQXNEZWZhdWx0R3JpZD86IGJvb2xlYW4sXHJcbiAgICBjb21wb25lbnRSZWZlcmVuY2U/OiBTbWFydEdyaWRDb21wb25lbnRcclxuICApOiBTbWFydEdyaWQge1xyXG4gICAgc21hcnRHcmlkLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgc21hcnRHcmlkLnVpQWN0aW9uU2VydmljZSA9IHRoaXMudWlBY3Rpb25TZXJ2aWNlO1xyXG4gICAgc21hcnRHcmlkLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XHJcbiAgICBzbWFydEdyaWQuc2VydmljZVRvVXNlID0gdGhpcztcclxuICAgIHNtYXJ0R3JpZC52aWV3Q29udGV4dFNlcnZpY2UgPSB0aGlzLnZpZXdDb250ZXh0O1xyXG5cclxuICAgIGlmICghdGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cy5zZXQoc21hcnRHcmlkLmdyaWRJZGVudGlmaWVyLCBjb21wb25lbnRSZWZlcmVuY2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKGBBZGRlZCBzbWFydEdyaWQgd2hlbiB1c2VRdWVyeUxpc3RzID09PSB0cnVlICgke3NtYXJ0R3JpZC5ncmlkSWRlbnRpZmllcn0pYCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVzZUFzRGVmYXVsdEdyaWQpIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWQgPSBzbWFydEdyaWQ7XHJcbiAgICAgIHJldHVybiB0aGlzLnNtYXJ0R3JpZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc21hcnRHcmlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEZvcm0oXHJcbiAgICBzbWFydEZvcm1JZDogc3RyaW5nLFxyXG4gICAgc21hcnRGb3JtOiBTbWFydEZvcm0sXHJcbiAgICBjb21wb25lbnRSZWZlcmVuY2U/OiBTbWFydGZvcm1Db21wb25lbnRcclxuICApOiBTbWFydEZvcm0ge1xyXG4gICAgaWYgKCF0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgdGhpcy5mb3JtV2lkZ2V0cy5zZXQoc21hcnRGb3JtSWQsIGNvbXBvbmVudFJlZmVyZW5jZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oYEFkZGVkIHNtYXJ0Rm9ybSB3aGVuIHVzZVF1ZXJ5TGlzdHMgPT09IHRydWUgKCR7c21hcnRGb3JtSWR9KWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLnNlbmREYXRhQ2hhbmdlcyAmJiBjb21wb25lbnRSZWZlcmVuY2UpIHtcclxuICAgIC8vICAgc21hcnRGb3JtLnVzZU9uVmFsdWVDaGFuZ2VFdmVudCA9IHRydWU7XHJcblxyXG4gICAgLy8gICBjb21wb25lbnRSZWZlcmVuY2Uuc29waGlzdGljYXRlZFZhbHVlQ2hhbmdlXHJcbiAgICAvLyAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgIC8vICAgICAuc3Vic2NyaWJlKCh2YWx1ZUNoYW5nZTogU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlKSA9PiB7XHJcbiAgICAvLyAgICAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlcyh2YWx1ZUNoYW5nZSk7XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmV0dXJuIHNtYXJ0Rm9ybTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVcERlZmF1bHRUcmVlKHRyZWVJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0VHJlZVNlcnZpY2UgPSB0aGlzLmNyZWF0ZVRyZWVTZXJ2aWNlKHRyZWVJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlVHJlZVNlcnZpY2UodHJlZUlkOiBzdHJpbmcpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB7XHJcbiAgICBjb25zdCB0cmVlU2VydmljZSA9IG5ldyBTbWFydHRyZWVHZW5lcmljU2VydmljZSh0aGlzLmluamVjdCwgdGhpcy5wYWdlTmFtZSEsIHRyZWVJZCk7XHJcbiAgICBpZiAoIXRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLndpZGdldHMuc2V0KHRyZWVJZCwgdHJlZVNlcnZpY2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKGBBZGRlZCBzbWFydFRyZWUgd2hlbiB1c2VRdWVyeUxpc3RzID09PSB0cnVlICgke3RyZWVJZH0pYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRyZWVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEZpbGVVcGxvYWRlcihcclxuICAgIHVpQWN0aW9uQ29kZTogc3RyaW5nLFxyXG4gICAgZmlsZUZvcm1hdHM/OiBzdHJpbmdbXSxcclxuICAgIG1heFNpemVNYj86IG51bWJlcixcclxuICAgIGlzTXVsdGlwbGU/OiBib29sZWFuXHJcbiAgKTogU21hcnRDb21wb25lbnRGaWxlVXBsb2FkZXIge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdWlBY3Rpb25Db2RlLFxyXG4gICAgICBzbWFydENvbXBvbmVudDogdGhpcyxcclxuICAgICAgZmlsZUZvcm1hdHMsXHJcbiAgICAgIGlzTXVsdGlwbGUsXHJcbiAgICAgIG1heFNpemVNYixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIGhhbmRsZSBjaGFuZ2VzXHJcbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZUNoYW5nZXModmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSk6IHZvaWQge1xyXG4gICAgbGV0IGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2U7XHJcbiAgICBpZiAodmFsdWVDaGFuZ2Uua2V5LmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgY29uc3Qgc291cmNlID0gdmFsdWVDaGFuZ2Uua2V5LnNwbGl0KCcuJylbMF07XHJcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gdmFsdWVDaGFuZ2Uua2V5LnNwbGl0KCcuJylbMV07XHJcbiAgICAgIGRhdGFDaGFuZ2UgPSB7XHJcbiAgICAgICAga2luZDogdmFsdWVDaGFuZ2Uua2luZCA9PT0gJ2Jhc2ljJyA/IERhdGFDaGFuZ2VLaW5kLldJREdFVCA6IERhdGFDaGFuZ2VLaW5kLlNFTEVDVElPTixcclxuICAgICAgICBzb3VyY2UsXHJcbiAgICAgICAgdmFsdWVzOiBbW3ZhbHVlS2V5LCB2YWx1ZUNoYW5nZS52YWx1ZV1dLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0YUNoYW5nZSA9IHtcclxuICAgICAgICBraW5kOiB2YWx1ZUNoYW5nZS5raW5kID09PSAnYmFzaWMnID8gRGF0YUNoYW5nZUtpbmQuV0lER0VUIDogRGF0YUNoYW5nZUtpbmQuU0VMRUNUSU9OLFxyXG4gICAgICAgIHNvdXJjZTogdmFsdWVDaGFuZ2Uua2V5LFxyXG4gICAgICAgIHZhbHVlczogW1t2YWx1ZUNoYW5nZS5rZXksIHZhbHVlQ2hhbmdlLnZhbHVlXV0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dC5kYXRhQ2hhbmdlZCh0aGlzLnV1aWQhLCBkYXRhQ2hhbmdlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ2hhbmdlcyhjaGFuZ2U6IENvbXBvbmVudE1vZGVsQ2hhbmdlKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoY2hhbmdlLmNoYW5nZWRXaWRnZXRzKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VXaWRnZXRzKGNoYW5nZS5jaGFuZ2VkV2lkZ2V0cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBkYXRhQ2hhbmdlSGFzQmVlbk5leHRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoY2hhbmdlLmNoYW5nZXMpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gY2hhbmdlLmNoYW5nZXM7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykubWFwKChjaGFuZ2VLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCdkYXRhLicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnbGF5b3V0cy4nKSAmJiB0aGlzLm1vZGVsPy5sYXlvdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTGF5b3V0Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCdjb21wb25lbnRMYXlvdXRzLicpICYmIHRoaXMubW9kZWw/LmxheW91dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb21wb25lbnRMYXlvdXRDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5LnN0YXJ0c1dpdGgoJ3ZhbHVlU2V0cy4nKSAmJiB0aGlzLm1vZGVsPy52YWx1ZVNldHMpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZVNldENoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICdhY3Rpb25zJykge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbkNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICdjb25zdHJhaW50cycpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb25zdHJhaW50Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleSA9PT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IGNoYW5nZXNbJyddIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICBkYXRhQ2hhbmdlSGFzQmVlbk5leHRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghZGF0YUNoYW5nZUhhc0JlZW5OZXh0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZWQubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIHRoaXMubW9kZWwgPSBjaGFuZ2UudmFsdWUgYXMgQ29tcG9uZW50TW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjaGFuZ2UuY2hhbmdlZFdpZGdldHMgJiYgIWNoYW5nZS5jaGFuZ2VzICYmIGNoYW5nZS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm1vZGVsID0gY2hhbmdlLnZhbHVlIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VXaWRnZXRzKGNoYW5nZWRXaWRnZXRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgbGV0IHdpZGdldHMgPSB0aGlzLmdldFdpZGdldHMoKTtcclxuICAgIGNoYW5nZWRXaWRnZXRzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHdpZGdldHMuZ2V0KGtleSk7XHJcblxyXG4gICAgICBpZiAocmVmZXJlbmNlIGluc3RhbmNlb2YgU21hcnRHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgICAgcmVmZXJlbmNlLnJlZnJlc2goKTtcclxuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgaW5zdGFuY2VvZiBTbWFydHRyZWVHZW5lcmljU2VydmljZSkge1xyXG4gICAgICAgIHJlZmVyZW5jZS5pbml0aWFsaXplKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlIGluc3RhbmNlb2YgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlKSB7XHJcbiAgICAgICAgcmVmZXJlbmNlLmxvYWQoKTtcclxuICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFByb3ZpZGVkIHJlZmVyZW5jZSBmb3IgJHtrZXl9IGlzIHVuZGVmaW5lZC5gKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFZhbHVlRGVlcGx5KG1vZGVsOiBhbnksIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICBsZXQgc3BsaXR0ZWRLZXlzID0ga2V5LnNwbGl0KCcuJyk7XHJcblxyXG4gICAgbGV0IGRlZXBNb2RlbDogYW55W10gPSBbbW9kZWxdO1xyXG4gICAgbGV0IHRlbXBNb2RlbDogYW55O1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzcGxpdHRlZEtleXMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIHRlbXBNb2RlbCA9IGRlZXBNb2RlbFtpbmRleF07XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ3N0cmluZycgJiZcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnYm9vbGVhbicgJiZcclxuICAgICAgICB0eXBlb2YgdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dICE9PSAnbnVtYmVyJyAmJlxyXG4gICAgICAgIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgIGRlZXBNb2RlbC5wdXNoKHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpbmRleCA9PT0gc3BsaXR0ZWRLZXlzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICBsZXQgb2xkVmFsdWUgPSB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV07XHJcbiAgICAgICAgLy8gaWYgKHZhbHVlID09PSAnJyAmJiAob2xkVmFsdWUgPT09IG51bGwgfHwgb2xkVmFsdWUgPT09IHVuZGVmaW5lZCkgdGhlbiBkb24ndCBjaGFuZ2UgdmFsdWUuXHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSAnJyB8fCAob2xkVmFsdWUgIT09IG51bGwgJiYgb2xkVmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVEYXRhQ2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFZhbHVlRGVlcGx5KHRoaXMubW9kZWwsIGNoYW5nZUtleSwgY2hhbmdlc1tjaGFuZ2VLZXldKTtcclxuXHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHRoaXMuZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpPy5mb3JFYWNoKChmb3JtKSA9PiBmb3JtLnJlZnJlc2goKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1XaWRnZXRzLmZvckVhY2goKGZvcm1Db21wb25lbnQ6IFNtYXJ0Zm9ybUNvbXBvbmVudCB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoZm9ybUNvbXBvbmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBQcm92aWRlZCBmb3JtIHJlZmVyZW5jZSBmb3IgJHtrZXl9IGlzIHVuZGVmaW5lZC5gKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZm9ybUNvbXBvbmVudC5yZWZyZXNoKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTGF5b3V0Q2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgbGF5b3V0S2V5ID0gY2hhbmdlS2V5LnNwbGl0KCcuJylbMV07XHJcbiAgICB0aGlzLm1vZGVsIS5sYXlvdXRzW2xheW91dEtleV0gPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNvbXBvbmVudExheW91dENoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGxheW91dEtleSA9IGNoYW5nZUtleS5zcGxpdCgnLicpWzFdO1xyXG4gICAgbGV0IGNvbXBvbmVudExheW91dHM6IHsgW2tleTogc3RyaW5nXTogT2JqZWN0IH0gPSB0aGlzLm1vZGVsIS5jb21wb25lbnRMYXlvdXRzIGFzIHtcclxuICAgICAgW2tleTogc3RyaW5nXTogT2JqZWN0O1xyXG4gICAgfTtcclxuICAgIGNvbXBvbmVudExheW91dHNbbGF5b3V0S2V5XSA9IGNoYW5nZXNbY2hhbmdlS2V5XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlVmFsdWVTZXRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCB2YWx1ZVNldEtleSA9IGNoYW5nZUtleS5zcGxpdCgnLicpWzFdO1xyXG4gICAgdGhpcy5tb2RlbCEudmFsdWVTZXRzIVt2YWx1ZVNldEtleV0gPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUFjdGlvbkNoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RlbCEuYWN0aW9ucyA9IGNoYW5nZXNbY2hhbmdlS2V5XTtcclxuICAgIHRoaXMuaW5pdEFjdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ29uc3RyYWludENoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5tb2RlbCEuY29uc3RyYWludHMgPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU21hcnRDb21wb25lbnRGaWxlVXBsb2FkZXIge1xyXG4gIHVpQWN0aW9uQ29kZTogc3RyaW5nO1xyXG4gIG1heFNpemVNYj86IG51bWJlcjtcclxuICBmaWxlRm9ybWF0cz86IHN0cmluZ1tdO1xyXG4gIGlzTXVsdGlwbGU/OiBib29sZWFuO1xyXG4gIHNtYXJ0Q29tcG9uZW50OiBTbWFydENvbXBvbmVudEFwaUNsaWVudDxhbnk+O1xyXG59XHJcbiJdfQ==
696
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jbGllbnQvc21hcnQtY29tcG9uZW50LWFwaS1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQU1MLG1CQUFtQixHQUVwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUlMLGNBQWMsRUFHZCx1QkFBdUIsRUFHdkIseUJBQXlCLEVBR3pCLGVBQWUsR0FJaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUEwQixrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BGLE9BQU8sRUFLTCxlQUFlLEdBQ2hCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUVMLDJCQUEyQixHQUM1QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTFFLE1BQU0sT0FBZ0IsdUJBQXVCO0lBd0czQyxZQUNZLE1BQWdCLEVBQ2hCLElBQXlDLEVBQ3pDLFFBQWlCLEVBQ2pCLGNBQXVCLEVBQ3ZCLE9BQW9CLEVBQ3BCLFFBQW9CO1FBTHBCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBcUM7UUFDekMsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixtQkFBYyxHQUFkLGNBQWMsQ0FBUztRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVk7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S0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxLQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsT0FBK0IsRUFBRSxTQUFpQjtRQUNwRixJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksZ0JBQWdCLEdBQThCLElBQUksQ0FBQyxLQUFNLENBQUMsZ0JBRTdELENBQUM7UUFDRixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE9BQStCLEVBQUUsU0FBaUI7UUFDN0UsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsS0FBTSxDQUFDLFNBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE9BQStCLEVBQUUsU0FBaUI7UUFDM0UsSUFBSSxDQUFDLEtBQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sc0JBQXNCLENBQUMsT0FBK0IsRUFBRSxTQUFpQjtRQUMvRSxJQUFJLENBQUMsS0FBTSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUdGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBFbGVtZW50UmVmLFxyXG4gIEluamVjdCxcclxuICBJbmplY3RvcixcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTbWFydHRyZWVHZW5lcmljU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXRyZWUvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudE1vZGVsLFxyXG4gIENvbXBvbmVudE1vZGVsQ2hhbmdlLFxyXG4gIERhdGFDaGFuZ2UsXHJcbiAgRGF0YUNoYW5nZUtpbmQsXHJcbiAgRXhlY3V0ZVVpQWN0aW9uT3B0aW9ucyxcclxuICBTbWFydFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgU21hcnRWaWV3Q29udGV4dFNlcnZpY2UsXHJcbiAgVWlBY3Rpb24sXHJcbiAgVWlBY3Rpb25BZGRpdGlvbmFsUGFyYW1zLFxyXG4gIFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXHJcbiAgVWlBY3Rpb25Nb2RlbCxcclxuICBVaUFjdGlvblJlcXVlc3QsXHJcbiAgVWlBY3Rpb25TZXJ2aWNlLFxyXG4gIFVpQWN0aW9uU3BlY2lmaWNEZW1hbmRSZXNwb25zZSxcclxuICBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQsXHJcbiAgVXNlVWlBY3Rpb24yLFxyXG59IGZyb20gJy4uL3ZpZXctY29udGV4dC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFNtYXJ0QXV0aGVudGljYXRpb25TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi9zbWFydC1hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU21hcnRTdWJqZWN0IH0gZnJvbSAnLi4vc21hcnQtc3ViamVjdC9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEdyaWRPcHRpb25zLCBTbWFydEdyaWQsIFNtYXJ0R3JpZENvbXBvbmVudCB9IGZyb20gJy4uL3NtYXJ0LWdyaWQvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0Rm9ybSxcclxuICBTbWFydEZvcm1JbnZhbGlkRmllbGRzLFxyXG4gIFNtYXJ0Zm9ybUNvbXBvbmVudCxcclxuICBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UsXHJcbiAgVmFsdWVDaGFuZ2VNb2RlLFxyXG59IGZyb20gJy4uL3NtYXJ0LWZvcm0vcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50LFxyXG4gIFNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eSxcclxufSBmcm9tICcuLi9zbWFydC1jb21wb25lbnQtbGF5b3V0L3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc21hcnQtZmlsdGVyLWVkaXRvci9wcm9qZWN0JztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTbWFydENvbXBvbmVudEFwaUNsaWVudDxUPiBpbXBsZW1lbnRzIFVzZVVpQWN0aW9uMiB7XHJcbiAgcHJvdGVjdGVkIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgZGV0ZWN0Q2hhbmdlOiBTbWFydFN1YmplY3Q8Q29tcG9uZW50TW9kZWxDaGFuZ2U+ID0gbmV3IFNtYXJ0U3ViamVjdCh0aGlzLl9kZXN0cm95JCk7XHJcblxyXG4gIHByaXZhdGUgX3V1aWQ/OiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgdXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBnZXQgdXVpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3V1aWQ7XHJcbiAgfVxyXG4gIHNldCB1dWlkKHV1aWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHRoaXMuX3V1aWQgPT09IHV1aWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpcnN0VXVpZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBpZiAodGhpcy51dWlkKSB7XHJcbiAgICAgIHRoaXMudmlld0NvbnRleHQudW5mb2xsb3codGhpcy51dWlkKTtcclxuICAgICAgZmlyc3RVdWlkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLl91dWlkID0gdXVpZDtcclxuICAgIGlmICh1dWlkKSB7XHJcbiAgICAgIHRoaXMuZ2V0V2lkZ2V0cygpLmZvckVhY2goKHJlZiwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlZiBpbnN0YW5jZW9mIFNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICAgICAgcmVmLnV1aWQgPSB1dWlkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVmIGluc3RhbmNlb2YgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlKSB7XHJcbiAgICAgICAgICByZWYuY29uZmlnLnV1aWQgPSB1dWlkO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXJlZiAmJiAhZmlyc3RVdWlkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBQcm92aWRlZCByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQgb24gdXVpZCBjaGFuZ2UuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCF0aGlzLnV1aWRPZlBhZ2VIYXNCZWVuQ2hhbmdlZFN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgIHRoaXMudXVpZE9mUGFnZUhhc0JlZW5DaGFuZ2VkU3Vic2NyaXB0aW9uID0gdGhpcy52aWV3Q29udGV4dC51dWlkT2ZQYWdlSGFzQmVlbkNoYW5nZWRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChwYWdlTmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFnZU5hbWUgPT09IHRoaXMucGFnZU5hbWUhKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ydW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMudmlld0NvbnRleHQuZm9sbG93KHRoaXMuX3V1aWQhLCB0aGlzLmRldGVjdENoYW5nZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9tb2RlbDogQ29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGdldCBtb2RlbCgpOiBDb21wb25lbnRNb2RlbCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kZWw7XHJcbiAgfVxyXG4gIHNldCBtb2RlbChtb2RlbDogQ29tcG9uZW50TW9kZWwgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XHJcblxyXG4gICAgdGhpcy5pbml0Q29tcG9uZW50QnlNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGF0YT86IFQ7XHJcblxyXG4gIGdldCBkYXRhKCk6IFQgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgfVxyXG4gIHNldCBkYXRhKG1vZGVsOiBUIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9kYXRhID0gbW9kZWw7XHJcbiAgICB0aGlzLmRhdGFDaGFuZ2VkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1aUFjdGlvbk1vZGVsczogVWlBY3Rpb25Nb2RlbFtdID0gW107XHJcblxyXG4gIHB1YmxpYyBkYXRhQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTbWFydFN1YmplY3QodGhpcy5fZGVzdHJveSQpO1xyXG5cclxuICAvLyBHcmlkXHJcbiAgc21hcnRHcmlkPzogU21hcnRHcmlkO1xyXG5cclxuICAvLyBTZXJ2aWNlc1xyXG4gIHByb3RlY3RlZCB2aWV3Q29udGV4dDogU21hcnRWaWV3Q29udGV4dFNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHVpQWN0aW9uU2VydmljZTogVWlBY3Rpb25TZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB1aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gIHByb3RlY3RlZCB0cmFuc2xhdGU/OiBTbWFydFRyYW5zbGF0ZVNlcnZpY2U7XHJcblxyXG4gIC8vIFRyZWVcclxuICBwcml2YXRlIF9zbWFydFRyZWVTZXJ2aWNlPzogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2U7XHJcblxyXG4gIHB1YmxpYyBnZXQgc21hcnRUcmVlU2VydmljZSgpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc21hcnRUcmVlU2VydmljZTtcclxuICB9XHJcbiAgcHVibGljIHNldCBzbWFydFRyZWVTZXJ2aWNlKHNtYXJ0VHJlZVNlcnZpY2U6IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhpcy5fc21hcnRUcmVlU2VydmljZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgZGVmYXVsdCB0cmVlIGhhcyBhbHJlYWR5IHNldCB1cCEnKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NtYXJ0VHJlZVNlcnZpY2UgPSBzbWFydFRyZWVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgLy8gQ29udGFpbmVkIFdpZGdldHNcclxuICB3aWRnZXRzOiBNYXA8c3RyaW5nLCBTbWFydEdyaWRDb21wb25lbnQgfCBTbWFydHRyZWVHZW5lcmljU2VydmljZSB8IHVuZGVmaW5lZD4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIGZvcm1XaWRnZXRzOiBNYXA8c3RyaW5nLCBTbWFydGZvcm1Db21wb25lbnQgfCB1bmRlZmluZWQ+ID0gbmV3IE1hcCgpO1xyXG5cclxuICB1c2VRdWVyeUxpc3RzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNlbmRNb2RlbE9uV2lkZ2V0QWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGRhdGFDaGFuZ2VLZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHByb3RlY3RlZCBkYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcnMgPSBuZXcgTWFwPFNtYXJ0Zm9ybUNvbXBvbmVudCwgU3Vic2NyaXB0aW9uPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCBpbmplY3Q6IEluamVjdG9yLFxyXG4gICAgcHJvdGVjdGVkIGF1dGg6IFNtYXJ0QXV0aGVudGljYXRpb25TZXJ2aWNlSW50ZXJmYWNlLFxyXG4gICAgcHJvdGVjdGVkIHBhZ2VOYW1lPzogc3RyaW5nLFxyXG4gICAgcHJvdGVjdGVkIF9jb21wb25lbnROYW1lPzogc3RyaW5nLFxyXG4gICAgcHJvdGVjdGVkIGVsZW1lbnQ/OiBFbGVtZW50UmVmLFxyXG4gICAgcHJvdGVjdGVkIHJlbmRlcmVyPzogUmVuZGVyZXIyXHJcbiAgKSB7XHJcbiAgICAvLyBjaGVjayBhbmQgY2FsY3VsYXRlIHBhZ2VOYW1lXHJcbiAgICBpZiAoIXRoaXMucGFnZU5hbWUgJiYgIXRoaXMuX2NvbXBvbmVudE5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwYWdlTmFtZSBvciBjb21wb25lbnROYW1lIG11c3QgYmUgc3BlY2lmaWVkIScpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlld0NvbnRleHQgPSBpbmplY3QuZ2V0KFNtYXJ0Vmlld0NvbnRleHRTZXJ2aWNlKTtcclxuICAgIGlmICh0aGlzLl9jb21wb25lbnROYW1lKSB7XHJcbiAgICAgIGxldCBwYWdlTmFtZUZvckNvbXBvbmVudCA9IHRoaXMudmlld0NvbnRleHQuZ2V0UGFnZU5hbWVPZkNvbXBvbmVudCh0aGlzLl9jb21wb25lbnROYW1lKTtcclxuICAgICAgaWYgKCF0aGlzLnBhZ2VOYW1lKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlTmFtZSA9IHBhZ2VOYW1lRm9yQ29tcG9uZW50O1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGFnZU5hbWUgIT09IHBhZ2VOYW1lRm9yQ29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgYHBhZ2VOYW1lICgke3BhZ2VOYW1lfSkgYW5kIGNvbXBvbmVudE5hbWUgKCR7X2NvbXBvbmVudE5hbWV9KSBkb2Vzbid0IG1hdGNoIWBcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBmcm9tIHRoaXMgcG9pbnQgd2UgaGF2ZSB0aGlzLnBhZ2VOYW1lXHJcbiAgICB0aGlzLmRldGVjdENoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZTogQ29tcG9uZW50TW9kZWxDaGFuZ2UpID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VzKGNoYW5nZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVpQWN0aW9uU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25TZXJ2aWNlKTtcclxuICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSA9IGluamVjdC5nZXQoVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBfbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJ1bigpO1xyXG4gIH1cclxuICBfbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnZpZXdDb250ZXh0LnVuZm9sbG93KHRoaXMudXVpZCEpO1xyXG4gICAgdGhpcy53aWRnZXRzLmNsZWFyKCk7XHJcblxyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIF9uZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIGlmICghdGhpcy5nZXRTbWFydENvbXBvbmVudExheW91dHNRTCgpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdTbWFydENvbXBvbmVudExheW91dHNRTCBub3QgYXZhaWxhYmxlIScpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcnlMaXN0KHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKSEsIChjb21wKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29tcC5zbWFydENvbXBvbmVudExheW91dCkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy51dWlkICYmIHRoaXMudXVpZCAhPT0gY29tcC51dWlkKSBjb21wLnV1aWQgPSB0aGlzLnV1aWQ7XHJcbiAgICAgICAgICBTbWFydENvbXBvbmVudExheW91dFV0aWxpdHkuZ2V0R3JpZHMoY29tcCkuZm9yRWFjaCgoZ3JpZCkgPT5cclxuICAgICAgICAgICAgdGhpcy5zZXR1cEdyaWRTZXJ2aWNlcyhncmlkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBmb3IgaGFuZGxpbmcgZW1iZWRkZWQgZm9ybXNcclxuICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5TGlzdCh0aGlzLmdldFNtYXJ0Q29tcG9uZW50TGF5b3V0c1FMKCkhLCAoZm9ybSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVEYXRhQ2hhbmdlU3Vic2NyaXB0aW9ucygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5nZXRTbWFydEZvcm1zUUwoKSkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignZ2V0U21hcnRGb3Jtc1FMIG5vdCBhdmFpbGFibGUhJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUxpc3QodGhpcy5nZXRTbWFydEZvcm1zUUwoKSEsIChmb3JtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZURhdGFDaGFuZ2VTdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmdldFNtYXJ0R3JpZHNRTCgpKSB7XHJcbiAgICAgICAgY29uc29sZS53YXJuKCdTbWFydEdyaWRzUUwgbm90IGF2YWlsYWJsZSEnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5TGlzdCh0aGlzLmdldFNtYXJ0R3JpZHNRTCgpISwgKGdyaWQpID0+IHtcclxuICAgICAgICAgIGlmIChncmlkKSB7XHJcbiAgICAgICAgICAgIGlmIChncmlkLnNtYXJ0R3JpZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0dXBHcmlkU2VydmljZXMoZ3JpZCk7XHJcbiAgICAgICAgICAgICAgZ3JpZC5zZXR1cFRvb2xiYXIoKTtcclxuICAgICAgICAgICAgICBpZiAoZ3JpZC50b29sYmFyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnV1aWQgJiYgdGhpcy51dWlkICE9PSBncmlkLnV1aWQpIGdyaWQudXVpZCA9IHRoaXMudXVpZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRTZXJ2aWNlcyhncmlkOiBTbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgIGlmIChncmlkLnNtYXJ0R3JpZCAmJiAhZ3JpZC5zbWFydEdyaWQudWlBY3Rpb25TZXJ2aWNlKSB7XHJcbiAgICAgIGdyaWQuc21hcnRHcmlkLnVpQWN0aW9uU2VydmljZSA9IHRoaXMudWlBY3Rpb25TZXJ2aWNlO1xyXG4gICAgICBncmlkLnNtYXJ0R3JpZC51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlO1xyXG4gICAgICBncmlkLnNtYXJ0R3JpZC5zZXJ2aWNlVG9Vc2UgPSB0aGlzO1xyXG4gICAgICBncmlkLnNtYXJ0R3JpZC52aWV3Q29udGV4dFNlcnZpY2UgPSB0aGlzLnZpZXdDb250ZXh0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhbmRsZVF1ZXJ5TGlzdFNpbXBsZTxUPihxbDogUXVlcnlMaXN0PFQ+LCBoYW5kbGVyOiAoKSA9PiB2b2lkKSB7XHJcbiAgICBoYW5kbGVyKCk7XHJcbiAgICBxbC5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IGhhbmRsZXIoKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaGFuZGxlUXVlcnlMaXN0PFQ+KHFsOiBRdWVyeUxpc3Q8VD4sIGhhbmRsZXI6IChlbDogVCkgPT4gdm9pZCkge1xyXG4gICAgcWwuZm9yRWFjaCgoZWwpID0+IGhhbmRsZXIoZWwpKTtcclxuICAgIHFsLmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobGlzdCkgPT4gKGxpc3QgYXMgUXVlcnlMaXN0PFQ+KS5mb3JFYWNoKChlbCkgPT4gaGFuZGxlcihlbCkpKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydEZvcm1zUUwoKTogUXVlcnlMaXN0PFNtYXJ0Zm9ybUNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydEdyaWRzUUwoKTogUXVlcnlMaXN0PFNtYXJ0R3JpZENvbXBvbmVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRTbWFydFRyZWVzUUwoKTogUXVlcnlMaXN0PFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlPiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNtYXJ0RmlsdGVyU2VydmljZXNRTCgpOiBRdWVyeUxpc3Q8U21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlPiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldFNtYXJ0VWlBY3Rpb25Ub29sYmFyc1FMKCk6IFF1ZXJ5TGlzdDxVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKTpcclxuICAgIHwgUXVlcnlMaXN0PFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50PlxyXG4gICAgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBnZXRXaWRnZXRzKCk6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIFNtYXJ0R3JpZENvbXBvbmVudCB8IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlIHwgdW5kZWZpbmVkXHJcbiAgPiB7XHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIGxldCB3aWRnZXRzOiBNYXA8XHJcbiAgICAgICAgc3RyaW5nLFxyXG4gICAgICAgIFNtYXJ0R3JpZENvbXBvbmVudCB8IFNtYXJ0dHJlZUdlbmVyaWNTZXJ2aWNlIHwgU21hcnRGaWx0ZXJFZGl0b3JTZXJ2aWNlIHwgdW5kZWZpbmVkXHJcbiAgICAgID4gPSBuZXcgTWFwKCk7XHJcbiAgICAgIHRoaXMuZ2V0QWxsU21hcnRHcmlkQ29tcG9uZW50cygpXHJcbiAgICAgICAgLmZpbHRlcigoZ3JpZCkgPT4gKGdyaWQ/LnNtYXJ0R3JpZD8uZ3JpZElkZW50aWZpZXIgPyB0cnVlIDogZmFsc2UpKVxyXG4gICAgICAgIC5mb3JFYWNoKChncmlkKSA9PiB3aWRnZXRzLnNldChncmlkLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsIGdyaWQpKTtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydFRyZWVDb21wb25lbnRzKClcclxuICAgICAgICAuZmlsdGVyKCh0cmVlKSA9PiAodHJlZT8uc21hcnRUcmVlTW9kZWw/LmlkZW50aWZpZXIgPyB0cnVlIDogZmFsc2UpKVxyXG4gICAgICAgIC5mb3JFYWNoKCh0cmVlKSA9PiB3aWRnZXRzLnNldCh0cmVlIS5zbWFydFRyZWVNb2RlbCEuaWRlbnRpZmllciEsIHRyZWUpKTtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydEZpbHRlckVkaXRvclNlcnZpY2VzKClcclxuICAgICAgICAuZmlsdGVyKChmaWx0ZXIpID0+IChmaWx0ZXIuY29uZmlnLmlkZW50aWZpZXIgPyB0cnVlIDogZmFsc2UpKVxyXG4gICAgICAgIC5mb3JFYWNoKChmaWx0ZXIpID0+IHdpZGdldHMuc2V0KGZpbHRlci5jb25maWcuaWRlbnRpZmllciwgZmlsdGVyKSk7XHJcbiAgICAgIHJldHVybiB3aWRnZXRzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0cztcclxuICB9XHJcblxyXG4gIGluaXRDb21wb25lbnRCeU1vZGVsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0U3R5bGUoKTtcclxuICAgIHRoaXMuaW5pdERhdGEoKTtcclxuICAgIHRoaXMuaW5pdEFjdGlvbnMoKTtcclxuXHJcbiAgICBpZiAodGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHRoaXMuZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpPy5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgaWYgKGZvcm0uc21hcnRGb3JtKSB7XHJcbiAgICAgICAgICBmb3JtLnNtYXJ0Rm9ybS5jb21wb25lbnRNb2RlbCA9IHRoaXMubW9kZWw7XHJcbiAgICAgICAgICAvLyB1c2VzIGRhdGEsIHZhbHVlU2V0cywgY29uc3RyYWludHNcclxuICAgICAgICAgIGZvcm0uY29uc3RydWN0Rm9ybSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPOiBsYXlvdXQsIHdpZGdldHNcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbml0U3R5bGUoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlbD8uc3R5bGUgJiYgdGhpcy5lbGVtZW50ICYmIHRoaXMucmVuZGVyZXIpIHtcclxuICAgICAgbGV0IHN0eWxlRGF0YSA9IHRoaXMubW9kZWwuc3R5bGUhO1xyXG4gICAgICBsZXQgZWxlbWVudCA9IHRoaXMuZWxlbWVudCEubmF0aXZlRWxlbWVudDtcclxuICAgICAgLy8gY3NzIHN0eWxlIHByb3BlcnRpZXNcclxuICAgICAgaWYgKHN0eWxlRGF0YS5zdHlsZSkge1xyXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHN0eWxlRGF0YS5zdHlsZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyIS5zZXRTdHlsZShlbGVtZW50LCBrZXksIHZhbHVlLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gYWRkIGNsYXNzZXNcclxuICAgICAgaWYgKHN0eWxlRGF0YS5jbGFzc2VzVG9BZGQpIHtcclxuICAgICAgICBzdHlsZURhdGEuY2xhc3Nlc1RvQWRkLmZvckVhY2goKGNsKSA9PiB0aGlzLnJlbmRlcmVyIS5hZGRDbGFzcyhlbGVtZW50LCBjbCkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHJlbW92ZSBjbGFzc2VzXHJcbiAgICAgIGlmIChzdHlsZURhdGEuY2xhc3Nlc1RvUmVtb3ZlKSB7XHJcbiAgICAgICAgc3R5bGVEYXRhLmNsYXNzZXNUb1JlbW92ZS5mb3JFYWNoKChjbCkgPT4gdGhpcy5yZW5kZXJlciEucmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2wpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKTogU21hcnRmb3JtQ29tcG9uZW50W10ge1xyXG4gICAgbGV0IGZvcm1zOiBTbWFydGZvcm1Db21wb25lbnRbXSA9IHRoaXMuZ2V0U21hcnRGb3Jtc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKT8uZm9yRWFjaCgoY29tcCkgPT4ge1xyXG4gICAgICBmb3Jtcy5wdXNoKC4uLlNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRGb3Jtcyhjb21wKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmb3JtcztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRBbGxTbWFydEdyaWRDb21wb25lbnRzKCk6IFNtYXJ0R3JpZENvbXBvbmVudFtdIHtcclxuICAgIGxldCBncmlkczogU21hcnRHcmlkQ29tcG9uZW50W10gPSB0aGlzLmdldFNtYXJ0R3JpZHNRTCgpPy50b0FycmF5KCkgPz8gW107XHJcbiAgICB0aGlzLmdldFNtYXJ0Q29tcG9uZW50TGF5b3V0c1FMKCk/LmZvckVhY2goKGNvbXApID0+IHtcclxuICAgICAgZ3JpZHMucHVzaCguLi5TbWFydENvbXBvbmVudExheW91dFV0aWxpdHkuZ2V0R3JpZHMoY29tcCkpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JpZHM7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgZ2V0QWxsU21hcnRUcmVlQ29tcG9uZW50cygpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZVtdIHtcclxuICAgIGxldCB0cmVlczogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2VbXSA9IHRoaXMuZ2V0U21hcnRUcmVlc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKT8uZm9yRWFjaCgoY29tcCkgPT4ge1xyXG4gICAgICB0cmVlcy5wdXNoKC4uLlNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRUcmVlcyhjb21wKSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0cmVlcztcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBnZXRBbGxTbWFydEZpbHRlckVkaXRvclNlcnZpY2VzKCk6IFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZVtdIHtcclxuICAgIGxldCBmaWx0ZXJzOiBTbWFydEZpbHRlckVkaXRvclNlcnZpY2VbXSA9IHRoaXMuZ2V0U21hcnRGaWx0ZXJTZXJ2aWNlc1FMKCk/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgIHJldHVybiBmaWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGdldEFsbFNtYXJ0VWlBY3Rpb25Ub29sYmFycygpOiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnRbXSB7XHJcbiAgICBsZXQgdG9vbGJhcnM6IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudFtdID0gdGhpcy5nZXRTbWFydFVpQWN0aW9uVG9vbGJhcnNRTCgpPy50b0FycmF5KCkgPz8gW107XHJcbiAgICB0aGlzLmdldEFsbFNtYXJ0R3JpZENvbXBvbmVudHMoKT8uZm9yRWFjaCgoZ3JpZCkgPT4ge1xyXG4gICAgICBpZiAoZ3JpZC50b29sYmFyKSB7XHJcbiAgICAgICAgdG9vbGJhcnMucHVzaChncmlkLnRvb2xiYXIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ2V0U21hcnRDb21wb25lbnRMYXlvdXRzUUwoKT8uZm9yRWFjaCgoY29tcCkgPT4ge1xyXG4gICAgICB0b29sYmFycy5wdXNoKC4uLlNtYXJ0Q29tcG9uZW50TGF5b3V0VXRpbGl0eS5nZXRUb29sYmFycyhjb21wKSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ2V0QWxsU21hcnRGb3JtQ29tcG9uZW50cygpXHJcbiAgICAgID8uZmxhdE1hcCgoZm9ybSkgPT4gZm9ybS5nZXRUb29sYmFycygpKVxyXG4gICAgICAuZmlsdGVyKCh0b29sYmFyKSA9PiB0b29sYmFyICE9PSB1bmRlZmluZWQgfHwgdG9vbGJhciAhPT0gbnVsbClcclxuICAgICAgLmZvckVhY2goKHRvb2xiYXIpID0+IHRvb2xiYXJzLnB1c2godG9vbGJhciBhcyBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQpKTtcclxuXHJcbiAgICByZXR1cm4gdG9vbGJhcnM7XHJcbiAgfVxyXG5cclxuICBpbml0RGF0YSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm1vZGVsPy5kYXRhKSB7XHJcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMubW9kZWw/LmRhdGEgYXMgYW55O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdEFjdGlvbnMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tb2RlbD8uYWN0aW9ucykge1xyXG4gICAgICBsZXQgdWlBY3Rpb25Nb2RlbHMgPSB0aGlzLm1vZGVsPy5hY3Rpb25zLm1hcCgodWlBY3Rpb246IFVpQWN0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHNlcnZpY2VUb1VzZTogdGhpcyxcclxuICAgICAgICAgIHVpQWN0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgdG9vbGJhcnMgPSB0aGlzLmdldEFsbFNtYXJ0VWlBY3Rpb25Ub29sYmFycygpLmZpbHRlcigodG9vbGJhcikgPT4gdG9vbGJhci5pZCk7XHJcbiAgICAgIGxldCB0b29sYmFyTW9kZWxzID0gbmV3IE1hcDxzdHJpbmcsIFVpQWN0aW9uTW9kZWxbXT4oKTtcclxuICAgICAgdG9vbGJhcnMuZm9yRWFjaCgodG9vbGJhcikgPT4ge1xyXG4gICAgICAgIHRvb2xiYXJNb2RlbHMuc2V0KHRvb2xiYXIuaWQhLCBbXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgZ2xvYmFsVWlBY3Rpb25Nb2RlbHM6IFVpQWN0aW9uTW9kZWxbXSA9IFtdO1xyXG4gICAgICB1aUFjdGlvbk1vZGVscy5mb3JFYWNoKChhY3Rpb24pID0+IHtcclxuICAgICAgICBsZXQgYWN0aW9uTW9kZWw6IFVpQWN0aW9uTW9kZWxbXSB8IHVuZGVmaW5lZCA9IGdsb2JhbFVpQWN0aW9uTW9kZWxzO1xyXG4gICAgICAgIGxldCB0b29sYmFySWQgPSBhY3Rpb24udWlBY3Rpb24udG9vbGJhcjtcclxuICAgICAgICBpZiAodG9vbGJhcklkICYmIHRvb2xiYXJNb2RlbHMuaGFzKHRvb2xiYXJJZCkpIHtcclxuICAgICAgICAgIGFjdGlvbk1vZGVsID0gdG9vbGJhck1vZGVscy5nZXQodG9vbGJhcklkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhY3Rpb25Nb2RlbCkge1xyXG4gICAgICAgICAgYWN0aW9uTW9kZWwgPSBnbG9iYWxVaUFjdGlvbk1vZGVscztcclxuICAgICAgICB9XHJcbiAgICAgICAgYWN0aW9uTW9kZWwucHVzaChhY3Rpb24pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy51aUFjdGlvbk1vZGVscyA9IGdsb2JhbFVpQWN0aW9uTW9kZWxzO1xyXG5cclxuICAgICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgdG9vbGJhcnMubWFwKCh0b29sYmFyKSA9PiB7XHJcbiAgICAgICAgICB0b29sYmFyLnVpQWN0aW9uTW9kZWxzID0gdG9vbGJhck1vZGVscy5nZXQodG9vbGJhci5pZCEpO1xyXG4gICAgICAgICAgcmV0dXJuIHRvb2xiYXIuc2V0VXAoKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgLy8gY29udGludWUgY29kZSBoZXJlIGlmIG5lZWRlZFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRvb2xiYXIgc2V0dXA6JywgZXJyb3IpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcnVuKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYXV0aC5iZmZBcGlzSGF2ZUJlZW5TZXRVcCkge1xyXG4gICAgICB0aGlzLmxvYWQoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXV0aC5oZWFkZXJzVXBkYXRlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnV1aWQgPSB0aGlzLnZpZXdDb250ZXh0LmdldFV1aWRPZlBhZ2UodGhpcy5wYWdlTmFtZSEpO1xyXG4gICAgLy8gdGhpcy5tb2RlbCA9IGF3YWl0IHRoaXMudmlld0NvbnRleHQubG9hZCh0aGlzLnV1aWQpO1xyXG4gICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5sb2FkMih0aGlzLnV1aWQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZXhlY3V0ZVVpQWN0aW9uKHVpQWN0aW9uOiBVaUFjdGlvbiwgb3B0aW9ucz86IEV4ZWN1dGVVaUFjdGlvbk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudWlBY3Rpb25TZXJ2aWNlLnVpQWN0aW9uTW9kZWwgPSB7XHJcbiAgICAgIHNlcnZpY2VUb1VzZTogdGhpcyxcclxuICAgICAgdWlBY3Rpb246IHVpQWN0aW9uLFxyXG4gICAgfTtcclxuICAgIHRoaXMudWlBY3Rpb25TZXJ2aWNlLmV4ZWN1dGUodWlBY3Rpb24sIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgYWRkRGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIoa2V5OiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5kYXRhQ2hhbmdlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgIHRoaXMuZGF0YUNoYW5nZUtleXMucHVzaChrZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIoa2V5OiBzdHJpbmcpIHtcclxuICAgIGxldCBpZHggPSB0aGlzLmRhdGFDaGFuZ2VLZXlzLmluZGV4T2Yoa2V5KTtcclxuICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICB0aGlzLmRhdGFDaGFuZ2VLZXlzLnNwbGljZShpZHgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGRhdGFDaGFuZ2VBY3Rpb25IYW5kbGVyKGV2ZW50OiBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UpIHtcclxuICAgIGlmICh0aGlzLmRhdGFDaGFuZ2VLZXlzLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcclxuICAgICAgdGhpcy5leGVjdXRlVWlBY3Rpb24oe1xyXG4gICAgICAgIGNvZGU6IGV2ZW50LmtleSxcclxuICAgICAgICBtb2RlbDogdHJ1ZSxcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIGl0ZW06IGV2ZW50LnZhbHVlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGhhbmRsZURhdGFDaGFuZ2VTdWJzY3JpcHRpb25zKCkge1xyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICBsZXQgZm9ybXMgPSB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKTtcclxuICAgICAgLy8gYWRkIGVsZW1lbnRzIHRvIGRhdGFDaGFuZ2VLZXlzXHJcbiAgICAgIGZvcm1zLmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICBmb3JtLnNtYXJ0Rm9ybT8ud2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHtcclxuICAgICAgICAgIGlmICh3aWRnZXQua2V5KSB7XHJcbiAgICAgICAgICAgIGlmICh3aWRnZXQudmFsdWVDaGFuZ2VNb2RlID09PSBWYWx1ZUNoYW5nZU1vZGUuSU1NRURJQVRFX0FDVElPTikge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWRkRGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIod2lkZ2V0LmtleSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcih3aWRnZXQua2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgLy8gc3Vic2NyaWJlIHRvIG5ldyBmb3Jtc1xyXG4gICAgICBmb3Jtcy5mb3JFYWNoKChjb21wb25lbnQpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXJzLmhhcyhjb21wb25lbnQpKSB7XHJcbiAgICAgICAgICBsZXQgc3VicyA9IGNvbXBvbmVudC5zb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2VcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXIoZXZlbnQpKTtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXJzLnNldChjb21wb25lbnQsIHN1YnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyB1bnN1YnNjcmliZSBmcm9tIHJlbW92ZWQgZm9ybXNcclxuICAgICAgdGhpcy5kYXRhQ2hhbmdlQWN0aW9uSGFuZGxlcnMuZm9yRWFjaCgoc3VicywgZm9ybSkgPT4ge1xyXG4gICAgICAgIGlmICghZm9ybXMuZmluZCgoYykgPT4gYyA9PT0gZm9ybSkpIHtcclxuICAgICAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZUFjdGlvbkhhbmRsZXJzLmRlbGV0ZShmb3JtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SW52YWxpZEZpZWxkcygpOiBTbWFydEZvcm1JbnZhbGlkRmllbGRzIHtcclxuICAgIGxldCBhZ2dyZWdhdGVkSW52YWxpZEZpZWxkczogU21hcnRGb3JtSW52YWxpZEZpZWxkcyA9IHtcclxuICAgICAgaW52YWxpZEZpZWxkS2V5czogW10sXHJcbiAgICAgIGludmFsaWRGaWVsZE5hbWVzOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKT8uZm9yRWFjaCgoZm9ybSkgPT5cclxuICAgICAgICB0aGlzLnZhbGlkYXRlRm9ybShmb3JtLCBhZ2dyZWdhdGVkSW52YWxpZEZpZWxkcylcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybVdpZGdldHM/LmZvckVhY2goKGZvcm0pID0+IHRoaXMudmFsaWRhdGVGb3JtKGZvcm0sIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRlRm9ybShcclxuICAgIGZvcm06IFNtYXJ0Zm9ybUNvbXBvbmVudCB8IHVuZGVmaW5lZCxcclxuICAgIGFnZ3JlZ2F0ZWRJbnZhbGlkRmllbGRzOiBTbWFydEZvcm1JbnZhbGlkRmllbGRzXHJcbiAgKSB7XHJcbiAgICBsZXQgaW52YWxpZEZpZWxkc09mRm9ybSA9IGZvcm0/LmdldEludmFsaWRGaWVsZHMoKTtcclxuICAgIGlmIChpbnZhbGlkRmllbGRzT2ZGb3JtKSB7XHJcbiAgICAgIGludmFsaWRGaWVsZHNPZkZvcm0uaW52YWxpZEZpZWxkS2V5cy5mb3JFYWNoKChrZXkpID0+XHJcbiAgICAgICAgYWdncmVnYXRlZEludmFsaWRGaWVsZHMuaW52YWxpZEZpZWxkS2V5cy5wdXNoKGtleSlcclxuICAgICAgKTtcclxuICAgICAgaW52YWxpZEZpZWxkc09mRm9ybS5pbnZhbGlkRmllbGROYW1lcy5mb3JFYWNoKChrZXkpID0+XHJcbiAgICAgICAgYWdncmVnYXRlZEludmFsaWRGaWVsZHMuaW52YWxpZEZpZWxkTmFtZXMucHVzaChrZXkpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gVXNlVWlBY3Rpb25cclxuICBnZXRBZGRpdGlvbmFsUGFyYW1zKHVpQWN0aW9uOiBVaUFjdGlvbik6IFVpQWN0aW9uQWRkaXRpb25hbFBhcmFtcyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmb3JUZXh0QXJlYTogJycsXHJcbiAgICAgIGZvclRleHRGaWVsZDogJycsXHJcbiAgICB9O1xyXG4gIH1cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRGb3JtKHZhbGlkYXRlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1Ym1pdEZvcm1zKHZhbGlkYXRlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBlcmZvcm1VaUFjdGlvblJlcXVlc3QoXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCxcclxuICAgIHdpZGdldElkPzogc3RyaW5nLFxyXG4gICAgbm9kZUlkPzogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh1aUFjdGlvblJlcXVlc3QucGFyYW1zWydfZmlsZXMnXSkge1xyXG4gICAgICBjb25zdCBwYXJhbSA9IHVpQWN0aW9uUmVxdWVzdC5wYXJhbXNbJ3BhcmFtJ107XHJcbiAgICAgIGNvbnN0IGZpbGVzID0gdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snX2ZpbGVzJ107XHJcbiAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydwYXJhbSddO1xyXG4gICAgICBkZWxldGUgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snX2ZpbGVzJ107XHJcbiAgICAgIGRlbGV0ZSB1aUFjdGlvblJlcXVlc3QucGFyYW1zWydpc011bHRpcGxlJ107XHJcblxyXG4gICAgICAvLyBhd2FpdCB0aGlzLnNlbmRNb2RlbFRvU2VydmVyKCk7XHJcbiAgICAgIGlmICghaXNNdWx0aXBsZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybVVwbG9hZEFjdGlvbih0aGlzLnV1aWQhLCB1aUFjdGlvblJlcXVlc3QsIHBhcmFtLCBmaWxlc1swXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtVXBsb2FkTXVsdGlwbGVBY3Rpb24oXHJcbiAgICAgICAgICB0aGlzLnV1aWQhLFxyXG4gICAgICAgICAgdWlBY3Rpb25SZXF1ZXN0LFxyXG4gICAgICAgICAgcGFyYW0sXHJcbiAgICAgICAgICBmaWxlc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAod2lkZ2V0SWQgJiYgbm9kZUlkKSB7XHJcbiAgICAgIC8vIGF3YWl0IHRoaXMuc2VuZE1vZGVsVG9TZXJ2ZXIoKTtcclxuICAgICAgdGhpcy5hZGRNb2RlbFRvV2lkZ2V0QWN0aW9uKHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICAgIGF3YWl0IHRoaXMudmlld0NvbnRleHQucGVyZm9ybVdpZGdldEFjdGlvbih0aGlzLnV1aWQhLCB3aWRnZXRJZCwgbm9kZUlkLCB1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIGlmICh3aWRnZXRJZCkge1xyXG4gICAgICAvLyBhd2FpdCB0aGlzLnNlbmRNb2RlbFRvU2VydmVyKCk7XHJcbiAgICAgIHRoaXMuYWRkTW9kZWxUb1dpZGdldEFjdGlvbih1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LnBlcmZvcm1XaWRnZXRNYWluQWN0aW9uKHRoaXMudXVpZCEsIHdpZGdldElkLCB1aUFjdGlvblJlcXVlc3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy52aWV3Q29udGV4dC5wZXJmb3JtQWN0aW9uKHRoaXMudXVpZCEsIHVpQWN0aW9uUmVxdWVzdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgYWRkTW9kZWxUb1dpZGdldEFjdGlvbih1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdCkge1xyXG4gICAgaWYgKHRoaXMuc2VuZE1vZGVsT25XaWRnZXRBY3Rpb24pIHtcclxuICAgICAgdGhpcy5zdWJtaXRGb3JtKGZhbHNlKTtcclxuICAgICAgLy8gbWltaWMgQ29tcG9uZW50TW9kZWxcclxuICAgICAgdWlBY3Rpb25SZXF1ZXN0LnBhcmFtc1snY2xpZW50UGFnZU1vZGVsJ10gPSB7IGRhdGE6IHRoaXMuZ2V0TW9kZWwoKSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBhc3luYyBzZW5kTW9kZWxUb1NlcnZlcigpIHtcclxuICAvLyAgIHRoaXMuc3VibWl0Rm9ybXMoZmFsc2UpO1xyXG4gIC8vICAgbGV0IGRhdGFDaGFuZ2UgPSB7XHJcbiAgLy8gICAgIGtpbmQ6IERhdGFDaGFuZ2VLaW5kLldpZGdldCxcclxuICAvLyAgICAgc291cmNlOiAnJyxcclxuICAvLyAgICAgdmFsdWVzOiBbWycnLCB0aGlzLmdldE1vZGVsKCldXSxcclxuICAvLyAgIH07XHJcbiAgLy8gICBhd2FpdCB0aGlzLnZpZXdDb250ZXh0LmRhdGFDaGFuZ2VkKHRoaXMudXVpZCEsIGRhdGFDaGFuZ2UpO1xyXG4gIC8vIH1cclxuXHJcbiAgaGFuZGxlU3BlY2lmaWNEZW1hbmRzQXN5bmNocm9ub3VzbHkoXHJcbiAgICB1aUFjdGlvbjogVWlBY3Rpb24sXHJcbiAgICB1aUFjdGlvblJlcXVlc3Q6IFVpQWN0aW9uUmVxdWVzdFxyXG4gICk6IFByb21pc2U8VWlBY3Rpb25TcGVjaWZpY0RlbWFuZFJlc3BvbnNlPiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2hhbmRsZVNwZWNpZmljRGVtYW5kc0FzeW5jaHJvbm91c2x5IG1ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBTdWJtaXRzIGFsbCB0aGUgcmVnaXN0ZXJlZCBmb3JtcyBpbiB0aGUgU21hcnRDb21wb25lbnRcclxuICAgKi9cclxuICBwdWJsaWMgc3VibWl0Rm9ybXModmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgdGhpcy5nZXRBbGxTbWFydEZvcm1Db21wb25lbnRzKCk/LmZvckVhY2goKGZvcm0pID0+IHtcclxuICAgICAgICBmb3JtPy5zdWJtaXRGb3JtKHZhbGlkYXRlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1XaWRnZXRzPy5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgZm9ybT8uc3VibWl0Rm9ybSh2YWxpZGF0ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEdyaWQoXHJcbiAgICBzbWFydEdyaWQ6IFNtYXJ0R3JpZCxcclxuICAgIG9wdGlvbnM6IEdyaWRPcHRpb25zLFxyXG4gICAgdXNlQXNEZWZhdWx0R3JpZD86IGJvb2xlYW4sXHJcbiAgICBjb21wb25lbnRSZWZlcmVuY2U/OiBTbWFydEdyaWRDb21wb25lbnRcclxuICApOiBTbWFydEdyaWQge1xyXG4gICAgc21hcnRHcmlkLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgc21hcnRHcmlkLnVpQWN0aW9uU2VydmljZSA9IHRoaXMudWlBY3Rpb25TZXJ2aWNlO1xyXG4gICAgc21hcnRHcmlkLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgPSB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U7XHJcbiAgICBzbWFydEdyaWQuc2VydmljZVRvVXNlID0gdGhpcztcclxuICAgIHNtYXJ0R3JpZC52aWV3Q29udGV4dFNlcnZpY2UgPSB0aGlzLnZpZXdDb250ZXh0O1xyXG5cclxuICAgIGlmICghdGhpcy51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cy5zZXQoc21hcnRHcmlkLmdyaWRJZGVudGlmaWVyLCBjb21wb25lbnRSZWZlcmVuY2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKGBBZGRlZCBzbWFydEdyaWQgd2hlbiB1c2VRdWVyeUxpc3RzID09PSB0cnVlICgke3NtYXJ0R3JpZC5ncmlkSWRlbnRpZmllcn0pYCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVzZUFzRGVmYXVsdEdyaWQpIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWQgPSBzbWFydEdyaWQ7XHJcbiAgICAgIHJldHVybiB0aGlzLnNtYXJ0R3JpZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc21hcnRHcmlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEZvcm0oXHJcbiAgICBzbWFydEZvcm1JZDogc3RyaW5nLFxyXG4gICAgc21hcnRGb3JtOiBTbWFydEZvcm0sXHJcbiAgICBjb21wb25lbnRSZWZlcmVuY2U/OiBTbWFydGZvcm1Db21wb25lbnRcclxuICApOiBTbWFydEZvcm0ge1xyXG4gICAgaWYgKCF0aGlzLnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgdGhpcy5mb3JtV2lkZ2V0cy5zZXQoc21hcnRGb3JtSWQsIGNvbXBvbmVudFJlZmVyZW5jZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oYEFkZGVkIHNtYXJ0Rm9ybSB3aGVuIHVzZVF1ZXJ5TGlzdHMgPT09IHRydWUgKCR7c21hcnRGb3JtSWR9KWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLnNlbmREYXRhQ2hhbmdlcyAmJiBjb21wb25lbnRSZWZlcmVuY2UpIHtcclxuICAgIC8vICAgc21hcnRGb3JtLnVzZU9uVmFsdWVDaGFuZ2VFdmVudCA9IHRydWU7XHJcblxyXG4gICAgLy8gICBjb21wb25lbnRSZWZlcmVuY2Uuc29waGlzdGljYXRlZFZhbHVlQ2hhbmdlXHJcbiAgICAvLyAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgIC8vICAgICAuc3Vic2NyaWJlKCh2YWx1ZUNoYW5nZTogU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlKSA9PiB7XHJcbiAgICAvLyAgICAgICB0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlcyh2YWx1ZUNoYW5nZSk7XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmV0dXJuIHNtYXJ0Rm9ybTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVcERlZmF1bHRUcmVlKHRyZWVJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0VHJlZVNlcnZpY2UgPSB0aGlzLmNyZWF0ZVRyZWVTZXJ2aWNlKHRyZWVJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlVHJlZVNlcnZpY2UodHJlZUlkOiBzdHJpbmcpOiBTbWFydHRyZWVHZW5lcmljU2VydmljZSB7XHJcbiAgICBjb25zdCB0cmVlU2VydmljZSA9IG5ldyBTbWFydHRyZWVHZW5lcmljU2VydmljZSh0aGlzLmluamVjdCwgdGhpcy5wYWdlTmFtZSEsIHRyZWVJZCk7XHJcbiAgICBpZiAoIXRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLndpZGdldHMuc2V0KHRyZWVJZCwgdHJlZVNlcnZpY2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKGBBZGRlZCBzbWFydFRyZWUgd2hlbiB1c2VRdWVyeUxpc3RzID09PSB0cnVlICgke3RyZWVJZH0pYCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRyZWVTZXJ2aWNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEZpbGVVcGxvYWRlcihcclxuICAgIHVpQWN0aW9uQ29kZTogc3RyaW5nLFxyXG4gICAgZmlsZUZvcm1hdHM/OiBzdHJpbmdbXSxcclxuICAgIG1heFNpemVNYj86IG51bWJlcixcclxuICAgIGlzTXVsdGlwbGU/OiBib29sZWFuXHJcbiAgKTogU21hcnRDb21wb25lbnRGaWxlVXBsb2FkZXIge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdWlBY3Rpb25Db2RlLFxyXG4gICAgICBzbWFydENvbXBvbmVudDogdGhpcyxcclxuICAgICAgZmlsZUZvcm1hdHMsXHJcbiAgICAgIGlzTXVsdGlwbGUsXHJcbiAgICAgIG1heFNpemVNYixcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvLyAjcmVnaW9uIGhhbmRsZSBjaGFuZ2VzXHJcbiAgcHJpdmF0ZSBoYW5kbGVWYWx1ZUNoYW5nZXModmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSk6IHZvaWQge1xyXG4gICAgbGV0IGRhdGFDaGFuZ2U6IERhdGFDaGFuZ2U7XHJcbiAgICBpZiAodmFsdWVDaGFuZ2Uua2V5LmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgY29uc3Qgc291cmNlID0gdmFsdWVDaGFuZ2Uua2V5LnNwbGl0KCcuJylbMF07XHJcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gdmFsdWVDaGFuZ2Uua2V5LnNwbGl0KCcuJylbMV07XHJcbiAgICAgIGRhdGFDaGFuZ2UgPSB7XHJcbiAgICAgICAga2luZDogdmFsdWVDaGFuZ2Uua2luZCA9PT0gJ2Jhc2ljJyA/IERhdGFDaGFuZ2VLaW5kLldJREdFVCA6IERhdGFDaGFuZ2VLaW5kLlNFTEVDVElPTixcclxuICAgICAgICBzb3VyY2UsXHJcbiAgICAgICAgdmFsdWVzOiBbW3ZhbHVlS2V5LCB2YWx1ZUNoYW5nZS52YWx1ZV1dLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0YUNoYW5nZSA9IHtcclxuICAgICAgICBraW5kOiB2YWx1ZUNoYW5nZS5raW5kID09PSAnYmFzaWMnID8gRGF0YUNoYW5nZUtpbmQuV0lER0VUIDogRGF0YUNoYW5nZUtpbmQuU0VMRUNUSU9OLFxyXG4gICAgICAgIHNvdXJjZTogdmFsdWVDaGFuZ2Uua2V5LFxyXG4gICAgICAgIHZhbHVlczogW1t2YWx1ZUNoYW5nZS5rZXksIHZhbHVlQ2hhbmdlLnZhbHVlXV0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWV3Q29udGV4dC5kYXRhQ2hhbmdlZCh0aGlzLnV1aWQhLCBkYXRhQ2hhbmdlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ2hhbmdlcyhjaGFuZ2U6IENvbXBvbmVudE1vZGVsQ2hhbmdlKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoY2hhbmdlLmNoYW5nZWRXaWRnZXRzKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2VXaWRnZXRzKGNoYW5nZS5jaGFuZ2VkV2lkZ2V0cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBkYXRhQ2hhbmdlSGFzQmVlbk5leHRlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoY2hhbmdlLmNoYW5nZXMpIHtcclxuICAgICAgICBjb25zdCBjaGFuZ2VzID0gY2hhbmdlLmNoYW5nZXM7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykubWFwKChjaGFuZ2VLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCdkYXRhLicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRGF0YUNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkuc3RhcnRzV2l0aCgnbGF5b3V0cy4nKSAmJiB0aGlzLm1vZGVsPy5sYXlvdXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTGF5b3V0Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleS5zdGFydHNXaXRoKCdjb21wb25lbnRMYXlvdXRzLicpICYmIHRoaXMubW9kZWw/LmxheW91dHMpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb21wb25lbnRMYXlvdXRDaGFuZ2UoY2hhbmdlcywgY2hhbmdlS2V5KTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlS2V5LnN0YXJ0c1dpdGgoJ3ZhbHVlU2V0cy4nKSAmJiB0aGlzLm1vZGVsPy52YWx1ZVNldHMpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZVNldENoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICdhY3Rpb25zJykge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbkNoYW5nZShjaGFuZ2VzLCBjaGFuZ2VLZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VLZXkgPT09ICdjb25zdHJhaW50cycpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb25zdHJhaW50Q2hhbmdlKGNoYW5nZXMsIGNoYW5nZUtleSk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZUtleSA9PT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IGNoYW5nZXNbJyddIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgICAgICAgICBkYXRhQ2hhbmdlSGFzQmVlbk5leHRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghZGF0YUNoYW5nZUhhc0JlZW5OZXh0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZWQubmV4dCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIHRoaXMubW9kZWwgPSBjaGFuZ2UudmFsdWUgYXMgQ29tcG9uZW50TW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjaGFuZ2UuY2hhbmdlZFdpZGdldHMgJiYgIWNoYW5nZS5jaGFuZ2VzICYmIGNoYW5nZS52YWx1ZSkge1xyXG4gICAgICB0aGlzLm1vZGVsID0gY2hhbmdlLnZhbHVlIGFzIENvbXBvbmVudE1vZGVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2VXaWRnZXRzKGNoYW5nZWRXaWRnZXRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgbGV0IHdpZGdldHMgPSB0aGlzLmdldFdpZGdldHMoKTtcclxuICAgIGNoYW5nZWRXaWRnZXRzLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IHdpZGdldHMuZ2V0KGtleSk7XHJcblxyXG4gICAgICBpZiAocmVmZXJlbmNlIGluc3RhbmNlb2YgU21hcnRHcmlkQ29tcG9uZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXR1cEdyaWRTZXJ2aWNlcyhyZWZlcmVuY2UpO1xyXG4gICAgICAgIHJlZmVyZW5jZS5yZWZyZXNoKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlIGluc3RhbmNlb2YgU21hcnR0cmVlR2VuZXJpY1NlcnZpY2UpIHtcclxuICAgICAgICByZWZlcmVuY2UuaW5pdGlhbGl6ZSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHJlZmVyZW5jZSBpbnN0YW5jZW9mIFNtYXJ0RmlsdGVyRWRpdG9yU2VydmljZSkge1xyXG4gICAgICAgIHJlZmVyZW5jZS5sb2FkKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAocmVmZXJlbmNlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBQcm92aWRlZCByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQuYCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRWYWx1ZURlZXBseShtb2RlbDogYW55LCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgbGV0IHNwbGl0dGVkS2V5cyA9IGtleS5zcGxpdCgnLicpO1xyXG5cclxuICAgIGxldCBkZWVwTW9kZWw6IGFueVtdID0gW21vZGVsXTtcclxuICAgIGxldCB0ZW1wTW9kZWw6IGFueTtcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc3BsaXR0ZWRLZXlzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICB0ZW1wTW9kZWwgPSBkZWVwTW9kZWxbaW5kZXhdO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHR5cGVvZiB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ2Jvb2xlYW4nICYmXHJcbiAgICAgICAgdHlwZW9mIHRlbXBNb2RlbFtzcGxpdHRlZEtleXNbaW5kZXhdXSAhPT0gJ251bWJlcicgJiZcclxuICAgICAgICB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gIT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICBkZWVwTW9kZWwucHVzaCh0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaW5kZXggPT09IHNwbGl0dGVkS2V5cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgbGV0IG9sZFZhbHVlID0gdGVtcE1vZGVsW3NwbGl0dGVkS2V5c1tpbmRleF1dO1xyXG4gICAgICAgIC8vIGlmICh2YWx1ZSA9PT0gJycgJiYgKG9sZFZhbHVlID09PSBudWxsIHx8IG9sZFZhbHVlID09PSB1bmRlZmluZWQpIHRoZW4gZG9uJ3QgY2hhbmdlIHZhbHVlLlxyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gJycgfHwgKG9sZFZhbHVlICE9PSBudWxsICYmIG9sZFZhbHVlICE9PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICB0ZW1wTW9kZWxbc3BsaXR0ZWRLZXlzW2luZGV4XV0gPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRGF0YUNoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRWYWx1ZURlZXBseSh0aGlzLm1vZGVsLCBjaGFuZ2VLZXksIGNoYW5nZXNbY2hhbmdlS2V5XSk7XHJcblxyXG4gICAgaWYgKHRoaXMudXNlUXVlcnlMaXN0cykge1xyXG4gICAgICB0aGlzLmdldEFsbFNtYXJ0Rm9ybUNvbXBvbmVudHMoKT8uZm9yRWFjaCgoZm9ybSkgPT4gZm9ybS5yZWZyZXNoKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtV2lkZ2V0cy5mb3JFYWNoKChmb3JtQ29tcG9uZW50OiBTbWFydGZvcm1Db21wb25lbnQgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGZvcm1Db21wb25lbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgUHJvdmlkZWQgZm9ybSByZWZlcmVuY2UgZm9yICR7a2V5fSBpcyB1bmRlZmluZWQuYCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvcm1Db21wb25lbnQucmVmcmVzaCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUxheW91dENoYW5nZShjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBjaGFuZ2VLZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGxheW91dEtleSA9IGNoYW5nZUtleS5zcGxpdCgnLicpWzFdO1xyXG4gICAgdGhpcy5tb2RlbCEubGF5b3V0c1tsYXlvdXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDb21wb25lbnRMYXlvdXRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBsYXlvdXRLZXkgPSBjaGFuZ2VLZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgIGxldCBjb21wb25lbnRMYXlvdXRzOiB7IFtrZXk6IHN0cmluZ106IE9iamVjdCB9ID0gdGhpcy5tb2RlbCEuY29tcG9uZW50TGF5b3V0cyBhcyB7XHJcbiAgICAgIFtrZXk6IHN0cmluZ106IE9iamVjdDtcclxuICAgIH07XHJcbiAgICBjb21wb25lbnRMYXlvdXRzW2xheW91dEtleV0gPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVZhbHVlU2V0Q2hhbmdlKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGNoYW5nZUtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBsZXQgdmFsdWVTZXRLZXkgPSBjaGFuZ2VLZXkuc3BsaXQoJy4nKVsxXTtcclxuICAgIHRoaXMubW9kZWwhLnZhbHVlU2V0cyFbdmFsdWVTZXRLZXldID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVBY3Rpb25DaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwhLmFjdGlvbnMgPSBjaGFuZ2VzW2NoYW5nZUtleV07XHJcbiAgICB0aGlzLmluaXRBY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNvbnN0cmFpbnRDaGFuZ2UoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgY2hhbmdlS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubW9kZWwhLmNvbnN0cmFpbnRzID0gY2hhbmdlc1tjaGFuZ2VLZXldO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0Q29tcG9uZW50RmlsZVVwbG9hZGVyIHtcclxuICB1aUFjdGlvbkNvZGU6IHN0cmluZztcclxuICBtYXhTaXplTWI/OiBudW1iZXI7XHJcbiAgZmlsZUZvcm1hdHM/OiBzdHJpbmdbXTtcclxuICBpc011bHRpcGxlPzogYm9vbGVhbjtcclxuICBzbWFydENvbXBvbmVudDogU21hcnRDb21wb25lbnRBcGlDbGllbnQ8YW55PjtcclxufVxyXG4iXX0=
@@ -66,6 +66,7 @@ export class SmartComponentLayoutComponent {
66
66
  }
67
67
  if (deepEqual(this.smartComponentLayout, this.currentLayout)) {
68
68
  // no layout change, keep current state
69
+ this.smartComponentLayout = this.currentLayout;
69
70
  return;
70
71
  }
71
72
  // layout changed, render, but save current
@@ -251,4 +252,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
251
252
  type: ViewChildren,
252
253
  args: [SmartComponentLayoutComponent]
253
254
  }] } });
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jb21wb25lbnQtbGF5b3V0L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtY29tcG9uZW50LWxheW91dC9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQU9MLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixlQUFlLEdBRWhCLE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUVMLHdCQUF3QixHQUd6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxnQkFBZ0IsRUFHaEIsY0FBYyxHQUNmLE1BQU0sd0JBQXdCLENBQUM7QUFHaEMsT0FBTyxFQUVMLDBCQUEwQixHQUMzQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7OztBQU94QyxNQUFNLE9BQU8sNkJBQTZCO0lBeUN4QyxZQUFvQixhQUErQztRQUEvQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUF4Q3pELGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQXdDbUIsQ0FBQztJQUV2RSxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRTtZQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTzthQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMvQixTQUFTLENBQUMsQ0FBQyxJQUFtQyxFQUFFLEVBQUU7WUFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU87YUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDL0IsU0FBUyxDQUFDLENBQUMsSUFBbUMsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU87YUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDL0IsU0FBUyxDQUFDLENBQUMsSUFBcUMsRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDbkI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUU7WUFDM0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87YUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDL0IsU0FBUyxDQUFDLENBQUMsSUFBeUMsRUFBRSxFQUFFO1lBQ3ZELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFTyxLQUFLO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM1RCxPQUFPO1NBQ1I7UUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzVELHVDQUF1QztZQUN2QyxPQUFPO1NBQ1I7UUFDRCwyQ0FBMkM7UUFDM0MsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1FBRS9DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQztRQUU5RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDO1FBRXJDLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsRUFBRTtZQUN6QyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztTQUNuQzthQUFNLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksS0FBSyxhQUFhLENBQUMsSUFBSSxFQUFFO1lBQ2pFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksS0FBSyxhQUFhLENBQUMsTUFBTSxFQUFFO1lBQ25FLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssbUJBQW1CLENBQUMsSUFBSSxFQUFFO2dCQUN2RSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDdEI7aUJBQU0sSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hGLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBQztnQkFDNUQsMEJBQTBCO2FBQzNCO2lCQUFNLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssbUJBQW1CLENBQUMsSUFBSSxFQUFFO2dCQUM5RSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDdEI7aUJBQU0sSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2pGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3pCO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtnQkFDL0Isb0RBQW9EO2dCQUNwRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDekM7U0FDRjtJQUNILENBQUM7SUFFRCxJQUFJO1FBQ0YsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixJQUFJLElBQUksR0FBbUMsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBcUIsRUFBRSxDQUFDO1FBQzdFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXhCLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixJQUFJLEVBQUU7WUFDOUQsTUFBTSxFQUFFLElBQUksR0FBRyxDQUFjO2dCQUMzQixDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQztnQkFDOUIsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUM7Z0JBQ25ELENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDO2FBQ3RELENBQUM7WUFDRixlQUFlLEVBQUUsNkJBQTZCO1NBQy9DLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3hDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJO1NBQ25ELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMvQixjQUFjLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEtBQUs7WUFDaEQsT0FBTztTQUNSLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLEVBQUU7WUFDeEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxLQUFLLGVBQWUsQ0FBQyxVQUFVO2dCQUN4RSxDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FBRztnQkFDOUIsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQztTQUNsQztRQUNELE9BQU8sd0JBQXdCLENBQUMsR0FBRyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUF3QjtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2pCO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQUU7WUFDNUMsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUM3QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsT0FBTztZQUNoQyxpQ0FBaUM7WUFDakMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ3hCLElBQUksQ0FBQyxTQUFTLEVBQ2QsSUFBSSxDQUFDLGtCQUFrQixDQUN4QixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWM7UUFDbkIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLGdFQUFnRSxDQUFDO1FBQ3BGLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUMzQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIsT0FBTyxPQUFPLEdBQUcsTUFBTSxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUMxRSxPQUFPLElBQUksQ0FBQyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixjQUFjLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxVQUFXO1lBQzlELFNBQVMsRUFBRTtnQkFDVCxJQUFJLEVBQUUsRUFBRTthQUNUO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVO2FBQzdDO1lBQ0QsU0FBUyxFQUFFLGNBQWMsQ0FBQyxLQUFLO1lBQy9CLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQXdCO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDakI7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRTtZQUM1QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FDakQsSUFBSSxDQUFDLFNBQVMsRUFDZDtnQkFDRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTthQUM3QyxFQUNELEtBQUssRUFDTCxJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUE4QjtRQUNoRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLDRCQUE0QjtJQUM1QixzRkFBc0Y7SUFDdEYsa0NBQWtDO0lBQ2xDLG9FQUFvRTtJQUNwRSxxREFBcUQ7SUFDckQsZ0NBQWdDO0lBQ2hDLE9BQU87SUFDUCxJQUFJO0lBRUosVUFBVTtRQUNSLE9BQU87SUFDVCxDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsRUFBRTtZQUM1QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQztRQUM5RCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQzs7MEhBblJVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLGdqQkFtQzFCLDBCQUEwQixnRUFHMUIsNkJBQTZCLHFFQ25GN0MseXJDQTJCQSwwT0RrQmEsNkJBQTZCOzJGQUE3Qiw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0Usd0JBQXdCO3VIQU96QixvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPTixhQUFhO3NCQURaLFlBQVk7dUJBQUMsTUFBTTtnQkFNcEIsYUFBYTtzQkFEWixZQUFZO3VCQUFDLE1BQU07Z0JBTXBCLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxRQUFRO2dCQU10QixXQUFXO3NCQURWLFlBQVk7dUJBQUMsU0FBUztnQkFVdkIsb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLDBCQUEwQjtnQkFJeEMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnRUeXBlLFxyXG4gIENvbXBvbmVudFdpZGdldFR5cGUsXHJcbiAgTGF5b3V0RGlyZWN0aW9uLFxyXG4gIFNtYXJ0Q29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbixcclxufSBmcm9tICcuL2FwaSc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRGb3JtLFxyXG4gIFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbixcclxuICBTbWFydGZvcm1Db21wb25lbnQsXHJcbiAgU21hcnRmb3JtTGF5b3V0RGVmaW5pdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc21hcnQtZm9ybS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7XHJcbiAgR3JpZFVpQWN0aW9uVHlwZSxcclxuICBTbWFydEdyaWQsXHJcbiAgU21hcnRHcmlkQ29tcG9uZW50LFxyXG4gIFNtYXJ0TGF5b3V0RGVmLFxyXG59IGZyb20gJy4uL3NtYXJ0LWdyaWQvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydEZpbHRlciwgU21hcnRGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9zbWFydC1maWx0ZXIvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydHRyZWVHZW5lcmljU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXRyZWUvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIEV4cGFuZGFibGVTZWN0aW9uLFxyXG4gIEV4cGFuZGFibGVTZWN0aW9uQ29tcG9uZW50LFxyXG59IGZyb20gJy4uL3NtYXJ0LWV4cGFuZGFibGUtc2VjdGlvbi9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICdmYXN0LWVxdWFscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIHByb3RlY3RlZCBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBASW5wdXQoKSBzbWFydENvbXBvbmVudExheW91dD86IFNtYXJ0Q29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbjtcclxuICBASW5wdXQoKSBwYXJlbnRMYXlvdXRDb21wb25lbnQ/OiBTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudDtcclxuICBASW5wdXQoKSBwYXJlbnRTbWFydENvbXBvbmVudDogYW55O1xyXG5cclxuICBjdXJyZW50TGF5b3V0PzogU21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uO1xyXG5cclxuICB1dWlkPzogc3RyaW5nO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb3JtJylcclxuICBzbWFydEZvcm1MaXN0ITogUXVlcnlMaXN0PFNtYXJ0Zm9ybUNvbXBvbmVudD47XHJcbiAgc21hcnRGb3JtQ29tcG9uZW50PzogU21hcnRmb3JtQ29tcG9uZW50O1xyXG4gIHNtYXJ0Rm9ybT86IFNtYXJ0Rm9ybTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZ3JpZCcpXHJcbiAgc21hcnRHcmlkTGlzdCE6IFF1ZXJ5TGlzdDxTbWFydEdyaWRDb21wb25lbnQ+O1xyXG4gIHNtYXJ0R3JpZENvbXBvbmVudD86IFNtYXJ0R3JpZENvbXBvbmVudDtcclxuICBzbWFydEdyaWQ/OiBTbWFydEdyaWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2ZpbHRlcicpXHJcbiAgc21hcnRGaWx0ZXJMaXN0ITogUXVlcnlMaXN0PFNtYXJ0RmlsdGVyQ29tcG9uZW50PjtcclxuICBzbWFydEZpbHRlckNvbXBvbmVudD86IFNtYXJ0RmlsdGVyQ29tcG9uZW50O1xyXG4gIHNtYXJ0RmlsdGVyPzogU21hcnRGaWx0ZXI7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3Rvb2xiYXInKVxyXG4gIHRvb2xiYXJMaXN0ITogUXVlcnlMaXN0PFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudD47XHJcbiAgdG9vbGJhcj86IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudDtcclxuICB0b29sYmFySWQ/OiBzdHJpbmc7XHJcblxyXG4gIHRyZWVTZXJ2aWNlPzogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2U7XHJcblxyXG4gIGV4cGFuZGFibGVTZWN0aW9uPzogRXhwYW5kYWJsZVNlY3Rpb248U21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uPjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihFeHBhbmRhYmxlU2VjdGlvbkNvbXBvbmVudClcclxuICBleHBhbmRhYmxlQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxFeHBhbmRhYmxlU2VjdGlvbkNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oU21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQpXHJcbiAgY29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGF5b3V0U2VydmljZTogU21hcnRmb3JtTGF5b3V0RGVmaW5pdGlvblNlcnZpY2UpIHt9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0Rm9ybUxpc3Q/LmZpcnN0KSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUNvbXBvbmVudCh0aGlzLnNtYXJ0Rm9ybUxpc3Q/LmZpcnN0KTtcclxuICAgIH1cclxuICAgIHRoaXMuc21hcnRGb3JtTGlzdC5jaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IFF1ZXJ5TGlzdDxTbWFydGZvcm1Db21wb25lbnQ+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtQ29tcG9uZW50KGxpc3QuZmlyc3QpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWRMaXN0Py5maXJzdCkge1xyXG4gICAgICB0aGlzLnNldEdyaWRDb21wb25lbnQodGhpcy5zbWFydEdyaWRMaXN0Py5maXJzdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNtYXJ0R3JpZExpc3QuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBRdWVyeUxpc3Q8U21hcnRHcmlkQ29tcG9uZW50PikgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0R3JpZENvbXBvbmVudChsaXN0LmZpcnN0KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zbWFydEZpbHRlckxpc3QuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBRdWVyeUxpc3Q8U21hcnRGaWx0ZXJDb21wb25lbnQ+KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNtYXJ0RmlsdGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0RmlsdGVyQ29tcG9uZW50ID0gbGlzdC5maXJzdDtcclxuICAgICAgICAgIHRoaXMuYmluZEZpbHRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbGJhckxpc3Q/LmZpcnN0KSB7XHJcbiAgICAgIHRoaXMuc2V0VG9vbGJhckNvbXBvbmVudCh0aGlzLnRvb2xiYXJMaXN0Py5maXJzdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvb2xiYXJMaXN0LmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobGlzdDogUXVlcnlMaXN0PFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudD4pID0+IHtcclxuICAgICAgICB0aGlzLnNldFRvb2xiYXJDb21wb25lbnQobGlzdC5maXJzdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zZXRVcCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRVcCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudCB8fCAhdGhpcy5zbWFydENvbXBvbmVudExheW91dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZGVlcEVxdWFsKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQsIHRoaXMuY3VycmVudExheW91dCkpIHtcclxuICAgICAgLy8gbm8gbGF5b3V0IGNoYW5nZSwga2VlcCBjdXJyZW50IHN0YXRlXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGxheW91dCBjaGFuZ2VkLCByZW5kZXIsIGJ1dCBzYXZlIGN1cnJlbnRcclxuICAgIC8vIHRoaXMuY3VycmVudExheW91dCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zbWFydENvbXBvbmVudExheW91dCkpO1xyXG4gICAgdGhpcy5jdXJyZW50TGF5b3V0ID0gdGhpcy5zbWFydENvbXBvbmVudExheW91dDtcclxuXHJcbiAgICB0aGlzLnV1aWQgPSB0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50LnV1aWQ7XHJcbiAgICB0aGlzLnRyZWVTZXJ2aWNlID0gdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudC5zbWFydFRyZWVTZXJ2aWNlO1xyXG5cclxuICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LmRpcmVjdGlvbjtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZXhwYW5kYWJsZSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdEV4cGFuZGFibGVTZWN0aW9uKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LnR5cGUgPT09IENvbXBvbmVudFR5cGUuRk9STSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdEZvcm0oKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dD8udHlwZSA9PT0gQ29tcG9uZW50VHlwZS5XSURHRVQpIHtcclxuICAgICAgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQud2lkZ2V0Py50eXBlID09PSBDb21wb25lbnRXaWRnZXRUeXBlLkdSSUQpIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdEdyaWQoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0LndpZGdldD8udHlwZSA9PT0gQ29tcG9uZW50V2lkZ2V0VHlwZS5GSUxURVIpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ0NvbXBvbmVudFdpZGdldFR5cGUuRklMVEVSIGlzIG5vdCBzdXBwb3J0ZWQnKTtcclxuICAgICAgICAvLyB0aGlzLmNvbnN0cnVjdEZpbHRlcigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQud2lkZ2V0Py50eXBlID09PSBDb21wb25lbnRXaWRnZXRUeXBlLlRSRUUpIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdFRyZWUoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0LndpZGdldD8udHlwZSA9PT0gQ29tcG9uZW50V2lkZ2V0VHlwZS5UT09MQkFSKSB7XHJcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RUb29sYmFyKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnBhcmVudExheW91dENvbXBvbmVudCkge1xyXG4gICAgICAgIC8vIG9ubHkgdG9wIGxldmVsIGNvbXBvbmVudCBzaG91bGQgY2FsbCBpbml0IGFjdGlvbnNcclxuICAgICAgICB0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50LmluaXRBY3Rpb25zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHR5cGUoKTogdHlwZW9mIENvbXBvbmVudFR5cGUge1xyXG4gICAgcmV0dXJuIENvbXBvbmVudFR5cGU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RFeHBhbmRhYmxlU2VjdGlvbigpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhOiBTbWFydENvbXBvbmVudExheW91dERlZmluaXRpb24gPSB7IC4uLnRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQhIH07XHJcbiAgICBkYXRhLmV4cGFuZGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9uID0ge1xyXG4gICAgICB0aXRsZTogdGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZXhwYW5kYWJsZVNlY3Rpb25MYWJlbCA/PyAnJyxcclxuICAgICAgaW5wdXRzOiBuZXcgTWFwPHN0cmluZywgYW55PihbXHJcbiAgICAgICAgWydzbWFydENvbXBvbmVudExheW91dCcsIGRhdGFdLFxyXG4gICAgICAgIFsncGFyZW50U21hcnRDb21wb25lbnQnLCB0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50XSxcclxuICAgICAgICBbJ3BhcmVudExheW91dENvbXBvbmVudCcsIHRoaXMucGFyZW50TGF5b3V0Q29tcG9uZW50XSxcclxuICAgICAgXSksXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudDogU21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0Rm9ybSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHdpZGdldHMgPSB0aGlzLmxheW91dFNlcnZpY2UucmVuZGVyKHtcclxuICAgICAgbGF5b3V0RGVmaW5pdGlvbnM6IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LmZvcm0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNtYXJ0Rm9ybSA9IHtcclxuICAgICAgZGlyZWN0aW9uOiB0aGlzLmdldEZvcm1MYXlvdXQoKSxcclxuICAgICAgY29tcG9uZW50TW9kZWw6IHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/Lm1vZGVsLFxyXG4gICAgICB3aWRnZXRzLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmJpbmRGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtTGF5b3V0KCk6IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbiB7XHJcbiAgICBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZGlyZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py5kaXJlY3Rpb24gPT09IExheW91dERpcmVjdGlvbi5IT1JJWk9OVEFMXHJcbiAgICAgICAgPyBTbWFydEZvcm1XaWRnZXREaXJlY3Rpb24uUk9XXHJcbiAgICAgICAgOiBTbWFydEZvcm1XaWRnZXREaXJlY3Rpb24uQ09MO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbi5DT0w7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtQ29tcG9uZW50KGNvbXA6IFNtYXJ0Zm9ybUNvbXBvbmVudCkge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0Rm9ybUNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnNtYXJ0Rm9ybUNvbXBvbmVudCA9IGNvbXA7XHJcbiAgICAgIHRoaXMuYmluZEZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJpbmRGb3JtKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRGb3JtICYmIHRoaXMuc21hcnRGb3JtQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LmFkZEZvcm0oXHJcbiAgICAgICAgLy8gdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBmb3JtXHJcbiAgICAgICAgYGZvcm1fJHt0aGlzLm1ha2VpZCg1KX1gLFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtLFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtQ29tcG9uZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYWtlaWQobGVuZ3RoOiBudW1iZXIpIHtcclxuICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgIGNvbnN0IGNoYXJhY3RlcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xyXG4gICAgY29uc3QgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcclxuICAgICAgcmVzdWx0ICs9IGNoYXJhY3RlcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpKTtcclxuICAgICAgY291bnRlciArPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdEdyaWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCA9IHtcclxuICAgICAgZ3JpZElkZW50aWZpZXI6IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uaWRlbnRpZmllciEsXHJcbiAgICAgIGdyaWRNb2RlbDoge1xyXG4gICAgICAgIHBhZ2U6IHt9LFxyXG4gICAgICB9LFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgcm93VWlBY3Rpb25UeXBlOiBHcmlkVWlBY3Rpb25UeXBlLlBPUFVQX01FTlUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGxheW91dERlZjogU21hcnRMYXlvdXREZWYuVEFCTEUsXHJcbiAgICAgIHBhZ2luYXRvcjogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5iaW5kR3JpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0R3JpZENvbXBvbmVudChjb21wOiBTbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgIGlmICghdGhpcy5zbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWRDb21wb25lbnQgPSBjb21wO1xyXG4gICAgICB0aGlzLmJpbmRHcmlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiaW5kR3JpZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50Py51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCAmJiB0aGlzLnNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCA9IHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LmFkZEdyaWQoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcm93VWlBY3Rpb25UeXBlOiBHcmlkVWlBY3Rpb25UeXBlLlBPUFVQX01FTlUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZENvbXBvbmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VG9vbGJhckNvbXBvbmVudChjb21wOiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQpIHtcclxuICAgIHRoaXMudG9vbGJhciA9IGNvbXA7XHJcbiAgfVxyXG5cclxuICAvLyBOT1QgVVNFRCwgRE9FU04nVCBXT1JLXHJcbiAgLy8gY29uc3RydWN0RmlsdGVyKCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5zbWFydEZpbHRlciA9ICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0IS5wYXJlbnRDb21wb25lbnQgYXMgYW55KS5hZGRGaWx0ZXIoXHJcbiAgLy8gICAgIGBmaWx0ZXJfJHt0aGlzLm1ha2VpZCg1KX1gLFxyXG4gIC8vICAgICB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py53aWRnZXQ/LmZpbHRlckV4cHJlc3Npb25GaWVsZExpc3QsXHJcbiAgLy8gICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uZmlsdGVyVHlwZSxcclxuICAvLyAgICAgdGhpcy5zbWFydEZpbHRlckNvbXBvbmVudFxyXG4gIC8vICAgKTtcclxuICAvLyB9XHJcblxyXG4gIGJpbmRGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICAvLyBUT0RPXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RUcmVlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudC5zZXRVcERlZmF1bHRUcmVlKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uaWRlbnRpZmllcik7XHJcbiAgICB0aGlzLnRyZWVTZXJ2aWNlPy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RUb29sYmFyKCk6IHZvaWQge1xyXG4gICAgbGV0IHRvb2xiYXJJZCA9IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uaWRlbnRpZmllcjtcclxuICAgIGlmICh0aGlzLnRvb2xiYXJJZCAhPT0gdG9vbGJhcklkKSB7XHJcbiAgICAgIHRoaXMudG9vbGJhcklkID0gdG9vbGJhcklkO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwic21hcnRDb21wb25lbnRMYXlvdXQ/LmV4cGFuZGFibGU7IHRoZW4gZXhwYW5kYWJsZTsgZWxzZSBub3JtYWxcIj4gPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2V4cGFuZGFibGU+XHJcbiAgPHNtYXJ0LWV4cGFuZGFibGUtc2VjdGlvblxyXG4gICAgKm5nSWY9XCJleHBhbmRhYmxlU2VjdGlvblwiXHJcbiAgICBbZGF0YV09XCJleHBhbmRhYmxlU2VjdGlvblwiXHJcbiAgPjwvc21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNub3JtYWw+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJzbWFydENvbXBvbmVudExheW91dD8udHlwZSA9PT0gdHlwZSgpLkNPTlRBSU5FUlwiXHJcbiAgICBbbmdDbGFzc109XCJzbWFydENvbXBvbmVudExheW91dD8uZGlyZWN0aW9uID8/ICd2ZXJ0aWNhbCdcIlxyXG4gID5cclxuICAgIDxzbWFydC1jb21wb25lbnQtbGF5b3V0XHJcbiAgICAgICpuZ0Zvcj1cImxldCBsYXlvdXQgb2Ygc21hcnRDb21wb25lbnRMYXlvdXQ/LmNvbXBvbmVudHNcIlxyXG4gICAgICBbcGFyZW50U21hcnRDb21wb25lbnRdPVwicGFyZW50U21hcnRDb21wb25lbnRcIlxyXG4gICAgICBbcGFyZW50TGF5b3V0Q29tcG9uZW50XT1cInRoaXNcIlxyXG4gICAgICBbc21hcnRDb21wb25lbnRMYXlvdXRdPVwibGF5b3V0XCJcclxuICAgID48L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQ+XHJcbiAgPC9kaXY+XHJcbiAgPHNtYXJ0Zm9ybSAqbmdJZj1cInNtYXJ0Rm9ybVwiICNmb3JtIFtzbWFydEZvcm1dPVwic21hcnRGb3JtXCI+PC9zbWFydGZvcm0+XHJcbiAgPHNtYXJ0LWdyaWQgKm5nSWY9XCJzbWFydEdyaWRcIiAjZ3JpZCBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiIFt1dWlkXT1cInV1aWQhXCI+PC9zbWFydC1ncmlkPlxyXG4gIDwhLS0gPHNtYXJ0LWZpbHRlciAjZmlsdGVyIFtmaWx0ZXJdPVwic21hcnRGaWx0ZXJcIj48L3NtYXJ0LWZpbHRlcj4gLS0+XHJcbiAgPHNtYXJ0LXRyZWUgKm5nSWY9XCJ0cmVlU2VydmljZVwiIFt0cmVlU2VydmljZV09XCJ0cmVlU2VydmljZSFcIj48L3NtYXJ0LXRyZWU+XHJcbiAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyICpuZ0lmPVwiISF0b29sYmFySWRcIiAjdG9vbGJhciBbaWRdPVwidG9vbGJhcklkXCI+PC9zbWFydC11aS1hY3Rpb24tdG9vbGJhcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY29tcG9uZW50LWxheW91dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1jb21wb25lbnQtbGF5b3V0L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtY29tcG9uZW50LWxheW91dC9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsS0FBSyxFQU9MLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsYUFBYSxFQUNiLG1CQUFtQixFQUNuQixlQUFlLEdBRWhCLE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUVMLHdCQUF3QixHQUd6QixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFDTCxnQkFBZ0IsRUFHaEIsY0FBYyxHQUNmLE1BQU0sd0JBQXdCLENBQUM7QUFHaEMsT0FBTyxFQUVMLDBCQUEwQixHQUMzQixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7OztBQU94QyxNQUFNLE9BQU8sNkJBQTZCO0lBeUN4QyxZQUFvQixhQUErQztRQUEvQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0M7UUF4Q3pELGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQXdDbUIsQ0FBQztJQUV2RSxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRTtZQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMs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LG9CQUFvQixFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQztRQUM5RCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQzs7MEhBcFJVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLGdqQkFtQzFCLDBCQUEwQixnRUFHMUIsNkJBQTZCLHFFQ25GN0MseXJDQTJCQSwwT0RrQmEsNkJBQTZCOzJGQUE3Qiw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0Usd0JBQXdCO3VIQU96QixvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFPTixhQUFhO3NCQURaLFlBQVk7dUJBQUMsTUFBTTtnQkFNcEIsYUFBYTtzQkFEWixZQUFZO3VCQUFDLE1BQU07Z0JBTXBCLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxRQUFRO2dCQU10QixXQUFXO3NCQURWLFlBQVk7dUJBQUMsU0FBUztnQkFVdkIsb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLDBCQUEwQjtnQkFJeEMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnRUeXBlLFxyXG4gIENvbXBvbmVudFdpZGdldFR5cGUsXHJcbiAgTGF5b3V0RGlyZWN0aW9uLFxyXG4gIFNtYXJ0Q29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbixcclxufSBmcm9tICcuL2FwaSc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRGb3JtLFxyXG4gIFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbixcclxuICBTbWFydGZvcm1Db21wb25lbnQsXHJcbiAgU21hcnRmb3JtTGF5b3V0RGVmaW5pdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc21hcnQtZm9ybS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7XHJcbiAgR3JpZFVpQWN0aW9uVHlwZSxcclxuICBTbWFydEdyaWQsXHJcbiAgU21hcnRHcmlkQ29tcG9uZW50LFxyXG4gIFNtYXJ0TGF5b3V0RGVmLFxyXG59IGZyb20gJy4uL3NtYXJ0LWdyaWQvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydEZpbHRlciwgU21hcnRGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9zbWFydC1maWx0ZXIvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydHRyZWVHZW5lcmljU2VydmljZSB9IGZyb20gJy4uL3NtYXJ0LXRyZWUvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIEV4cGFuZGFibGVTZWN0aW9uLFxyXG4gIEV4cGFuZGFibGVTZWN0aW9uQ29tcG9uZW50LFxyXG59IGZyb20gJy4uL3NtYXJ0LWV4cGFuZGFibGUtc2VjdGlvbi9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICdmYXN0LWVxdWFscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1jb21wb25lbnQtbGF5b3V0LmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0Q29tcG9uZW50TGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIHByb3RlY3RlZCBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBASW5wdXQoKSBzbWFydENvbXBvbmVudExheW91dD86IFNtYXJ0Q29tcG9uZW50TGF5b3V0RGVmaW5pdGlvbjtcclxuICBASW5wdXQoKSBwYXJlbnRMYXlvdXRDb21wb25lbnQ/OiBTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudDtcclxuICBASW5wdXQoKSBwYXJlbnRTbWFydENvbXBvbmVudDogYW55O1xyXG5cclxuICBjdXJyZW50TGF5b3V0PzogU21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uO1xyXG5cclxuICB1dWlkPzogc3RyaW5nO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKCdmb3JtJylcclxuICBzbWFydEZvcm1MaXN0ITogUXVlcnlMaXN0PFNtYXJ0Zm9ybUNvbXBvbmVudD47XHJcbiAgc21hcnRGb3JtQ29tcG9uZW50PzogU21hcnRmb3JtQ29tcG9uZW50O1xyXG4gIHNtYXJ0Rm9ybT86IFNtYXJ0Rm9ybTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZ3JpZCcpXHJcbiAgc21hcnRHcmlkTGlzdCE6IFF1ZXJ5TGlzdDxTbWFydEdyaWRDb21wb25lbnQ+O1xyXG4gIHNtYXJ0R3JpZENvbXBvbmVudD86IFNtYXJ0R3JpZENvbXBvbmVudDtcclxuICBzbWFydEdyaWQ/OiBTbWFydEdyaWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2ZpbHRlcicpXHJcbiAgc21hcnRGaWx0ZXJMaXN0ITogUXVlcnlMaXN0PFNtYXJ0RmlsdGVyQ29tcG9uZW50PjtcclxuICBzbWFydEZpbHRlckNvbXBvbmVudD86IFNtYXJ0RmlsdGVyQ29tcG9uZW50O1xyXG4gIHNtYXJ0RmlsdGVyPzogU21hcnRGaWx0ZXI7XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ3Rvb2xiYXInKVxyXG4gIHRvb2xiYXJMaXN0ITogUXVlcnlMaXN0PFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudD47XHJcbiAgdG9vbGJhcj86IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudDtcclxuICB0b29sYmFySWQ/OiBzdHJpbmc7XHJcblxyXG4gIHRyZWVTZXJ2aWNlPzogU21hcnR0cmVlR2VuZXJpY1NlcnZpY2U7XHJcblxyXG4gIGV4cGFuZGFibGVTZWN0aW9uPzogRXhwYW5kYWJsZVNlY3Rpb248U21hcnRDb21wb25lbnRMYXlvdXREZWZpbml0aW9uPjtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihFeHBhbmRhYmxlU2VjdGlvbkNvbXBvbmVudClcclxuICBleHBhbmRhYmxlQ29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxFeHBhbmRhYmxlU2VjdGlvbkNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oU21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQpXHJcbiAgY29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxTbWFydENvbXBvbmVudExheW91dENvbXBvbmVudD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGF5b3V0U2VydmljZTogU21hcnRmb3JtTGF5b3V0RGVmaW5pdGlvblNlcnZpY2UpIHt9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNtYXJ0Rm9ybUxpc3Q/LmZpcnN0KSB7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybUNvbXBvbmVudCh0aGlzLnNtYXJ0Rm9ybUxpc3Q/LmZpcnN0KTtcclxuICAgIH1cclxuICAgIHRoaXMuc21hcnRGb3JtTGlzdC5jaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxpc3Q6IFF1ZXJ5TGlzdDxTbWFydGZvcm1Db21wb25lbnQ+KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtQ29tcG9uZW50KGxpc3QuZmlyc3QpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWRMaXN0Py5maXJzdCkge1xyXG4gICAgICB0aGlzLnNldEdyaWRDb21wb25lbnQodGhpcy5zbWFydEdyaWRMaXN0Py5maXJzdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNtYXJ0R3JpZExpc3QuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBRdWVyeUxpc3Q8U21hcnRHcmlkQ29tcG9uZW50PikgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0R3JpZENvbXBvbmVudChsaXN0LmZpcnN0KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zbWFydEZpbHRlckxpc3QuY2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChsaXN0OiBRdWVyeUxpc3Q8U21hcnRGaWx0ZXJDb21wb25lbnQ+KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNtYXJ0RmlsdGVyQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0RmlsdGVyQ29tcG9uZW50ID0gbGlzdC5maXJzdDtcclxuICAgICAgICAgIHRoaXMuYmluZEZpbHRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbGJhckxpc3Q/LmZpcnN0KSB7XHJcbiAgICAgIHRoaXMuc2V0VG9vbGJhckNvbXBvbmVudCh0aGlzLnRvb2xiYXJMaXN0Py5maXJzdCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvb2xiYXJMaXN0LmNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobGlzdDogUXVlcnlMaXN0PFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudD4pID0+IHtcclxuICAgICAgICB0aGlzLnNldFRvb2xiYXJDb21wb25lbnQobGlzdC5maXJzdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zZXRVcCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRVcCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVcCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudCB8fCAhdGhpcy5zbWFydENvbXBvbmVudExheW91dCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZGVlcEVxdWFsKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQsIHRoaXMuY3VycmVudExheW91dCkpIHtcclxuICAgICAgLy8gbm8gbGF5b3V0IGNoYW5nZSwga2VlcCBjdXJyZW50IHN0YXRlXHJcbiAgICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQgPSB0aGlzLmN1cnJlbnRMYXlvdXQ7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGxheW91dCBjaGFuZ2VkLCByZW5kZXIsIGJ1dCBzYXZlIGN1cnJlbnRcclxuICAgIC8vIHRoaXMuY3VycmVudExheW91dCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zbWFydENvbXBvbmVudExheW91dCkpO1xyXG4gICAgdGhpcy5jdXJyZW50TGF5b3V0ID0gdGhpcy5zbWFydENvbXBvbmVudExheW91dDtcclxuXHJcbiAgICB0aGlzLnV1aWQgPSB0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50LnV1aWQ7XHJcbiAgICB0aGlzLnRyZWVTZXJ2aWNlID0gdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudC5zbWFydFRyZWVTZXJ2aWNlO1xyXG5cclxuICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LmRpcmVjdGlvbjtcclxuXHJcbiAgICBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZXhwYW5kYWJsZSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdEV4cGFuZGFibGVTZWN0aW9uKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LnR5cGUgPT09IENvbXBvbmVudFR5cGUuRk9STSkge1xyXG4gICAgICB0aGlzLmNvbnN0cnVjdEZvcm0oKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dD8udHlwZSA9PT0gQ29tcG9uZW50VHlwZS5XSURHRVQpIHtcclxuICAgICAgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQud2lkZ2V0Py50eXBlID09PSBDb21wb25lbnRXaWRnZXRUeXBlLkdSSUQpIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdEdyaWQoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0LndpZGdldD8udHlwZSA9PT0gQ29tcG9uZW50V2lkZ2V0VHlwZS5GSUxURVIpIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ0NvbXBvbmVudFdpZGdldFR5cGUuRklMVEVSIGlzIG5vdCBzdXBwb3J0ZWQnKTtcclxuICAgICAgICAvLyB0aGlzLmNvbnN0cnVjdEZpbHRlcigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQud2lkZ2V0Py50eXBlID09PSBDb21wb25lbnRXaWRnZXRUeXBlLlRSRUUpIHtcclxuICAgICAgICB0aGlzLmNvbnN0cnVjdFRyZWUoKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0LndpZGdldD8udHlwZSA9PT0gQ29tcG9uZW50V2lkZ2V0VHlwZS5UT09MQkFSKSB7XHJcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RUb29sYmFyKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnBhcmVudExheW91dENvbXBvbmVudCkge1xyXG4gICAgICAgIC8vIG9ubHkgdG9wIGxldmVsIGNvbXBvbmVudCBzaG91bGQgY2FsbCBpbml0IGFjdGlvbnNcclxuICAgICAgICB0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50LmluaXRBY3Rpb25zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHR5cGUoKTogdHlwZW9mIENvbXBvbmVudFR5cGUge1xyXG4gICAgcmV0dXJuIENvbXBvbmVudFR5cGU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RFeHBhbmRhYmxlU2VjdGlvbigpOiB2b2lkIHtcclxuICAgIGxldCBkYXRhOiBTbWFydENvbXBvbmVudExheW91dERlZmluaXRpb24gPSB7IC4uLnRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQhIH07XHJcbiAgICBkYXRhLmV4cGFuZGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9uID0ge1xyXG4gICAgICB0aXRsZTogdGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZXhwYW5kYWJsZVNlY3Rpb25MYWJlbCA/PyAnJyxcclxuICAgICAgaW5wdXRzOiBuZXcgTWFwPHN0cmluZywgYW55PihbXHJcbiAgICAgICAgWydzbWFydENvbXBvbmVudExheW91dCcsIGRhdGFdLFxyXG4gICAgICAgIFsncGFyZW50U21hcnRDb21wb25lbnQnLCB0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50XSxcclxuICAgICAgICBbJ3BhcmVudExheW91dENvbXBvbmVudCcsIHRoaXMucGFyZW50TGF5b3V0Q29tcG9uZW50XSxcclxuICAgICAgXSksXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudDogU21hcnRDb21wb25lbnRMYXlvdXRDb21wb25lbnQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0Rm9ybSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHdpZGdldHMgPSB0aGlzLmxheW91dFNlcnZpY2UucmVuZGVyKHtcclxuICAgICAgbGF5b3V0RGVmaW5pdGlvbnM6IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LmZvcm0sXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNtYXJ0Rm9ybSA9IHtcclxuICAgICAgZGlyZWN0aW9uOiB0aGlzLmdldEZvcm1MYXlvdXQoKSxcclxuICAgICAgY29tcG9uZW50TW9kZWw6IHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/Lm1vZGVsLFxyXG4gICAgICB3aWRnZXRzLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmJpbmRGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtTGF5b3V0KCk6IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbiB7XHJcbiAgICBpZiAodGhpcy5zbWFydENvbXBvbmVudExheW91dD8uZGlyZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py5kaXJlY3Rpb24gPT09IExheW91dERpcmVjdGlvbi5IT1JJWk9OVEFMXHJcbiAgICAgICAgPyBTbWFydEZvcm1XaWRnZXREaXJlY3Rpb24uUk9XXHJcbiAgICAgICAgOiBTbWFydEZvcm1XaWRnZXREaXJlY3Rpb24uQ09MO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbi5DT0w7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtQ29tcG9uZW50KGNvbXA6IFNtYXJ0Zm9ybUNvbXBvbmVudCkge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0Rm9ybUNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnNtYXJ0Rm9ybUNvbXBvbmVudCA9IGNvbXA7XHJcbiAgICAgIHRoaXMuYmluZEZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJpbmRGb3JtKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRGb3JtICYmIHRoaXMuc21hcnRGb3JtQ29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LmFkZEZvcm0oXHJcbiAgICAgICAgLy8gdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBmb3JtXHJcbiAgICAgICAgYGZvcm1fJHt0aGlzLm1ha2VpZCg1KX1gLFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtLFxyXG4gICAgICAgIHRoaXMuc21hcnRGb3JtQ29tcG9uZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYWtlaWQobGVuZ3RoOiBudW1iZXIpIHtcclxuICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgIGNvbnN0IGNoYXJhY3RlcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xyXG4gICAgY29uc3QgY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnMubGVuZ3RoO1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcclxuICAgICAgcmVzdWx0ICs9IGNoYXJhY3RlcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnNMZW5ndGgpKTtcclxuICAgICAgY291bnRlciArPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdEdyaWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCA9IHtcclxuICAgICAgZ3JpZElkZW50aWZpZXI6IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uaWRlbnRpZmllciEsXHJcbiAgICAgIGdyaWRNb2RlbDoge1xyXG4gICAgICAgIHBhZ2U6IHt9LFxyXG4gICAgICB9LFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgcm93VWlBY3Rpb25UeXBlOiBHcmlkVWlBY3Rpb25UeXBlLlBPUFVQX01FTlUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGxheW91dERlZjogU21hcnRMYXlvdXREZWYuVEFCTEUsXHJcbiAgICAgIHBhZ2luYXRvcjogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5iaW5kR3JpZCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0R3JpZENvbXBvbmVudChjb21wOiBTbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgIGlmICghdGhpcy5zbWFydEdyaWRDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5zbWFydEdyaWRDb21wb25lbnQgPSBjb21wO1xyXG4gICAgICB0aGlzLmJpbmRHcmlkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiaW5kR3JpZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBhcmVudFNtYXJ0Q29tcG9uZW50Py51c2VRdWVyeUxpc3RzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCAmJiB0aGlzLnNtYXJ0R3JpZENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCA9IHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LmFkZEdyaWQoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcm93VWlBY3Rpb25UeXBlOiBHcmlkVWlBY3Rpb25UeXBlLlBPUFVQX01FTlUsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZENvbXBvbmVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VG9vbGJhckNvbXBvbmVudChjb21wOiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQpIHtcclxuICAgIHRoaXMudG9vbGJhciA9IGNvbXA7XHJcbiAgfVxyXG5cclxuICAvLyBOT1QgVVNFRCwgRE9FU04nVCBXT1JLXHJcbiAgLy8gY29uc3RydWN0RmlsdGVyKCk6IHZvaWQge1xyXG4gIC8vICAgdGhpcy5zbWFydEZpbHRlciA9ICh0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0IS5wYXJlbnRDb21wb25lbnQgYXMgYW55KS5hZGRGaWx0ZXIoXHJcbiAgLy8gICAgIGBmaWx0ZXJfJHt0aGlzLm1ha2VpZCg1KX1gLFxyXG4gIC8vICAgICB0aGlzLnNtYXJ0Q29tcG9uZW50TGF5b3V0Py53aWRnZXQ/LmZpbHRlckV4cHJlc3Npb25GaWVsZExpc3QsXHJcbiAgLy8gICAgIHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uZmlsdGVyVHlwZSxcclxuICAvLyAgICAgdGhpcy5zbWFydEZpbHRlckNvbXBvbmVudFxyXG4gIC8vICAgKTtcclxuICAvLyB9XHJcblxyXG4gIGJpbmRGaWx0ZXIoKTogdm9pZCB7XHJcbiAgICAvLyBUT0RPXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RUcmVlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGFyZW50U21hcnRDb21wb25lbnQ/LnVzZVF1ZXJ5TGlzdHMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYXJlbnRTbWFydENvbXBvbmVudC5zZXRVcERlZmF1bHRUcmVlKHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uaWRlbnRpZmllcik7XHJcbiAgICB0aGlzLnRyZWVTZXJ2aWNlPy5pbml0aWFsaXplKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RUb29sYmFyKCk6IHZvaWQge1xyXG4gICAgbGV0IHRvb2xiYXJJZCA9IHRoaXMuc21hcnRDb21wb25lbnRMYXlvdXQ/LndpZGdldD8uaWRlbnRpZmllcjtcclxuICAgIGlmICh0aGlzLnRvb2xiYXJJZCAhPT0gdG9vbGJhcklkKSB7XHJcbiAgICAgIHRoaXMudG9vbGJhcklkID0gdG9vbGJhcklkO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwic21hcnRDb21wb25lbnRMYXlvdXQ/LmV4cGFuZGFibGU7IHRoZW4gZXhwYW5kYWJsZTsgZWxzZSBub3JtYWxcIj4gPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2V4cGFuZGFibGU+XHJcbiAgPHNtYXJ0LWV4cGFuZGFibGUtc2VjdGlvblxyXG4gICAgKm5nSWY9XCJleHBhbmRhYmxlU2VjdGlvblwiXHJcbiAgICBbZGF0YV09XCJleHBhbmRhYmxlU2VjdGlvblwiXHJcbiAgPjwvc21hcnQtZXhwYW5kYWJsZS1zZWN0aW9uPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNub3JtYWw+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJzbWFydENvbXBvbmVudExheW91dD8udHlwZSA9PT0gdHlwZSgpLkNPTlRBSU5FUlwiXHJcbiAgICBbbmdDbGFzc109XCJzbWFydENvbXBvbmVudExheW91dD8uZGlyZWN0aW9uID8/ICd2ZXJ0aWNhbCdcIlxyXG4gID5cclxuICAgIDxzbWFydC1jb21wb25lbnQtbGF5b3V0XHJcbiAgICAgICpuZ0Zvcj1cImxldCBsYXlvdXQgb2Ygc21hcnRDb21wb25lbnRMYXlvdXQ/LmNvbXBvbmVudHNcIlxyXG4gICAgICBbcGFyZW50U21hcnRDb21wb25lbnRdPVwicGFyZW50U21hcnRDb21wb25lbnRcIlxyXG4gICAgICBbcGFyZW50TGF5b3V0Q29tcG9uZW50XT1cInRoaXNcIlxyXG4gICAgICBbc21hcnRDb21wb25lbnRMYXlvdXRdPVwibGF5b3V0XCJcclxuICAgID48L3NtYXJ0LWNvbXBvbmVudC1sYXlvdXQ+XHJcbiAgPC9kaXY+XHJcbiAgPHNtYXJ0Zm9ybSAqbmdJZj1cInNtYXJ0Rm9ybVwiICNmb3JtIFtzbWFydEZvcm1dPVwic21hcnRGb3JtXCI+PC9zbWFydGZvcm0+XHJcbiAgPHNtYXJ0LWdyaWQgKm5nSWY9XCJzbWFydEdyaWRcIiAjZ3JpZCBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiIFt1dWlkXT1cInV1aWQhXCI+PC9zbWFydC1ncmlkPlxyXG4gIDwhLS0gPHNtYXJ0LWZpbHRlciAjZmlsdGVyIFtmaWx0ZXJdPVwic21hcnRGaWx0ZXJcIj48L3NtYXJ0LWZpbHRlcj4gLS0+XHJcbiAgPHNtYXJ0LXRyZWUgKm5nSWY9XCJ0cmVlU2VydmljZVwiIFt0cmVlU2VydmljZV09XCJ0cmVlU2VydmljZSFcIj48L3NtYXJ0LXRyZWU+XHJcbiAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyICpuZ0lmPVwiISF0b29sYmFySWRcIiAjdG9vbGJhciBbaWRdPVwidG9vbGJhcklkXCI+PC9zbWFydC11aS1hY3Rpb24tdG9vbGJhcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -13063,6 +13063,7 @@ class SmartComponentLayoutComponent {
13063
13063
  }
13064
13064
  if (deepEqual(this.smartComponentLayout, this.currentLayout)) {
13065
13065
  // no layout change, keep current state
13066
+ this.smartComponentLayout = this.currentLayout;
13066
13067
  return;
13067
13068
  }
13068
13069
  // layout changed, render, but save current
@@ -15162,6 +15163,7 @@ class SmartComponentApiClient {
15162
15163
  }
15163
15164
  if (this.uuid && this.uuid !== comp.uuid)
15164
15165
  comp.uuid = this.uuid;
15166
+ SmartComponentLayoutUtility.getGrids(comp).forEach((grid) => this.setupGridServices(grid));
15165
15167
  });
15166
15168
  // for handling embedded forms
15167
15169
  this.handleQueryList(this.getSmartComponentLayoutsQL(), (form) => {
@@ -15183,10 +15185,7 @@ class SmartComponentApiClient {
15183
15185
  this.handleQueryList(this.getSmartGridsQL(), (grid) => {
15184
15186
  if (grid) {
15185
15187
  if (grid.smartGrid) {
15186
- grid.smartGrid.uiActionService = this.uiActionService;
15187
- grid.smartGrid.uiActionDescriptorService = this.uiActionDescriptorService;
15188
- grid.smartGrid.serviceToUse = this;
15189
- grid.smartGrid.viewContextService = this.viewContext;
15188
+ this.setupGridServices(grid);
15190
15189
  grid.setupToolbar();
15191
15190
  if (grid.toolbar) {
15192
15191
  this.initActions();
@@ -15199,6 +15198,14 @@ class SmartComponentApiClient {
15199
15198
  }
15200
15199
  }
15201
15200
  }
15201
+ setupGridServices(grid) {
15202
+ if (grid.smartGrid && !grid.smartGrid.uiActionService) {
15203
+ grid.smartGrid.uiActionService = this.uiActionService;
15204
+ grid.smartGrid.uiActionDescriptorService = this.uiActionDescriptorService;
15205
+ grid.smartGrid.serviceToUse = this;
15206
+ grid.smartGrid.viewContextService = this.viewContext;
15207
+ }
15208
+ }
15202
15209
  handleQueryListSimple(ql, handler) {
15203
15210
  handler();
15204
15211
  ql.changes.pipe(takeUntil(this._destroy$)).subscribe(() => handler());
@@ -15664,6 +15671,7 @@ class SmartComponentApiClient {
15664
15671
  changedWidgets.forEach((key) => {
15665
15672
  const reference = widgets.get(key);
15666
15673
  if (reference instanceof SmartGridComponent) {
15674
+ this.setupGridServices(reference);
15667
15675
  reference.refresh();
15668
15676
  }
15669
15677
  else if (reference instanceof SmarttreeGenericService) {